Skip to main content

End of All Trades. Ruthless backtesting lab for long-only spot strategies.

Project description

Terminus

Terminus

End of All Trades

Where strategies go to prove themselves. Or die.


Terminus is a pure Python backtesting engine built for one thing: honest results.

8 years of market data. Year-by-year walk-forward with frozen parameters. Realistic fees and slippage. A content-hashed simulation store so you never burn compute twice.

Most backtesting tools let you cheat. Terminus doesn't.


Why Terminus

  • Near-perfect walk-forward required. Frozen parameters tested year by year. At most 2 losing years tolerated, each no worse than -10%.
  • Bear years count. 2022 was -64% on BTC. Your strategy survives that or it doesn't ship.
  • Multi-pair generalization required. Works on one pair? That's a curve fit. Terminus requires success across multiple pairs.
  • Realistic execution. Fees, entry slippage, stop slippage, TP slippage, timeout slippage, cooldowns, max-hold. Tiered by market cap.
  • Halal-first. Spot-only, no leverage, no shorts, no interest. Cash (stablecoin) is a valid position in bear regimes.
  • Content-hashed cache. Every sim keyed by hash(pair + tf + config + date_range + slippage + fee). Same inputs = instant cache hit.

Quickstart

pip install terminus-lab

# Fetch 8 years of data
terminus fetch --pairs BTCUSDT,ETHUSDT,SOLUSDT --tfs 1h,4h,1d --days 2920

# Run the full sweep
terminus sweep

# Walk-forward the top candidates year-by-year
terminus walk-forward --top 15

# Generate the report
terminus report --min-calmar 1.5 --min-bear-return -5

Example Output

=== TOP 15 SURVIVORS by ANNUALIZED return ===
 Rank  Pair       TF    Family                   Yrs   TotalRet   AnnRet   Calmar   Bear22
 ----- ---------- ----  -----------------------  ----  --------   ------   ------   ------
   1   TIAUSDT    2h    Ichi-bull+BTCreg          3/3    +90.7%    +24.0%    2.77     -
   2   XRPUSDT    2h    Ichi-bull+BTCreg          6/6   +213.5%    +21.0%    5.68    +0.0%
   3   LTCUSDT    12h   Ichi-bull+BTCreg          3/3    +70.1%    +19.4%    4.28    +0.0%
   4   BNBUSDT    1h    ROC10+BTCreg              5/5   +133.2%    +18.4%    4.93    +0.0%
   5   SOLUSDT    4h    ATR-brk                   5/5   +130.6%    +18.2%    7.86   +13.2%

What's Inside

Module What it does
Sweep engine Runs thousands of configs in parallel, skips cache hits
Walk-forward Frozen / anchored / rolling, calendar-year folds
Portfolio builder Correlation-capped leg selection, blended Sharpe/Calmar
ML module XGBoost regime classifier (BULL/BEAR/CHOP) + WF-aware optimizer
Community hub Contribute sim results, query the global leaderboard
SQLite store Local 6-table schema, travels with your research

30+ strategy families: RSI, EMA/MACD crosses, Bollinger, Donchian, ATR breakouts, Ichimoku, Supertrend, Keltner, VWAP reclaim, Heikin Ashi, ROC momentum, and more.


Philosophy

Terminus is pessimistic by default. It will tell you your strategy doesn't work before it tells you it does. That's the point.

Terminus is reproducible by design. The content-hash cache means any claim in a report traces back to the exact inputs that produced it. sims.db travels with your conclusions.

Terminus is spot-only, halal-first. Built by someone who can't use futures or margin. If you have those tools, you have more alpha. If you don't, Terminus fits your constraints natively.


Community Hub

Leaderboard: https://terminus-hub.shatla-tech.workers.dev

After every terminus sweep and terminus walk-forward, Terminus automatically contributes your survivors to the community hub. No manual step needed. Sims are always stored locally first; remote send is retried on the next run if the network was down.

To opt out:

export TERMINUS_TELEMETRY=0

To force-upload everything you've ever run:

terminus contribute --all

Status

Alpha. Used in production on a paper-trading bot running 7 pairs. API may shift. Results format and research data model are stable.


Contributing

PRs welcome for:

  • New strategy families (numpy-vectorized signals)
  • Alternative data fetchers (Kraken, Coinbase, OKX, Bybit spot)
  • Portfolio construction methods
  • New walk-forward modes

See CONTRIBUTING.md.


License

MIT. Use it, fork it, ship it. If you find something useful, open a PR. The community sim database grows stronger with every contributor.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

terminus_lab-0.1.3.tar.gz (63.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

terminus_lab-0.1.3-py3-none-any.whl (63.9 kB view details)

Uploaded Python 3

File details

Details for the file terminus_lab-0.1.3.tar.gz.

File metadata

  • Download URL: terminus_lab-0.1.3.tar.gz
  • Upload date:
  • Size: 63.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for terminus_lab-0.1.3.tar.gz
Algorithm Hash digest
SHA256 2a4ff4776efd77b148b26f2049175191198b21f61774cd11fc792069f8ec08b0
MD5 34c49dd37ccc2ceb68e6ecb4ee088883
BLAKE2b-256 0c9805fc5b42361dc7280eb674c39cd714adba5223ff0bf1010eefc88b8e8593

See more details on using hashes here.

File details

Details for the file terminus_lab-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: terminus_lab-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 63.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for terminus_lab-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ae09b09c772d323a12a30610579e865846060a7b4c7a08511dd0d60677f4f0d3
MD5 819f3aac10302b52a16e0b008f387a68
BLAKE2b-256 7ce6dde0b943fe7d69ac82f98b69bda7217a1b34a1cd0d1ee301c208ff89dff1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page