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.2.tar.gz (62.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.1.2-py3-none-any.whl (63.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: terminus_lab-0.1.2.tar.gz
  • Upload date:
  • Size: 62.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.1.2.tar.gz
Algorithm Hash digest
SHA256 b34a3cd2dd1798089e3f95a8f59c047b36959f839a42a6457d88c1c40b6ad311
MD5 3290c26c2f3927d76ff5e10629d03755
BLAKE2b-256 752e9ab8655a1a517dee18300f0ca8cab497e59d850f5cbb0f0cda8644c119f7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: terminus_lab-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 63.2 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 51079d871e0925616650583256b27f0e7a0c460211593285735a6153d3e388ed
MD5 5f4e60229722313b8e1f0df763c0b55e
BLAKE2b-256 767a857e799bbd2cf0a1ecd2864b8edd65e485432f47ef14f2b368db20db5dba

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