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.4.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.4-py3-none-any.whl (64.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: terminus_lab-0.1.4.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.4.tar.gz
Algorithm Hash digest
SHA256 aa80aede7563cb3799ba376c17ca35cad7458541788b49b20d3fad13c00dbb4f
MD5 948332d28b9f6d8d704dc5bd909bfb1a
BLAKE2b-256 8368e1752857bb2b6f32b4ac4f5d1359d7a491b719d662e0b93530d71a33aa0d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: terminus_lab-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 64.0 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 6774168013dde030f2a86e799ca41207427f02e63ef8754a34c7f393d17d9878
MD5 95c4e43b0081a267e852b6939d9baff2
BLAKE2b-256 b32ae4d8da7b76d06de67a0555e09c67810ce4434f8a78c5ac20dece11cd7072

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