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.2.0.tar.gz (73.8 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.2.0-py3-none-any.whl (76.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: terminus_lab-0.2.0.tar.gz
  • Upload date:
  • Size: 73.8 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.2.0.tar.gz
Algorithm Hash digest
SHA256 90194f5d0504d6fe032431a1f86f5ef8e98edc7c70b7642389d49fd5b655d24c
MD5 fa541bf61799b0447dc495931df1f646
BLAKE2b-256 55ad488bd0ffa4b916e60840b9c9ea76ef8fd055dcff89076525e9f2b14076d6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: terminus_lab-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 76.4 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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 35149a32f4f1ffb080ecb1d6e6713f23ad03423da84f1cd0eb837f7e7003923a
MD5 560699cdb4c58895248723578c267ce8
BLAKE2b-256 074e148a5caab6252837ee1b39ba050afd1aa8dc03883a619fbc2be986826a68

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