End of All Trades. Ruthless backtesting lab for long-only spot strategies.
Project description
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90194f5d0504d6fe032431a1f86f5ef8e98edc7c70b7642389d49fd5b655d24c
|
|
| MD5 |
fa541bf61799b0447dc495931df1f646
|
|
| BLAKE2b-256 |
55ad488bd0ffa4b916e60840b9c9ea76ef8fd055dcff89076525e9f2b14076d6
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35149a32f4f1ffb080ecb1d6e6713f23ad03423da84f1cd0eb837f7e7003923a
|
|
| MD5 |
560699cdb4c58895248723578c267ce8
|
|
| BLAKE2b-256 |
074e148a5caab6252837ee1b39ba050afd1aa8dc03883a619fbc2be986826a68
|