Every day, find symbols that just made a new 20-day high (long) or 20-day low (short), rank by volatility-normalised strength, buy the top 5 per side and ride a 10-day trailing stop — tested over 5 years across crypto, stocks, indexes and commodities, net of 10bps round-trip costs, with a real 10,000-sim Monte Carlo.
Crypto is the strongest venue (PF ~3.8–4.0 net, 100% MC profitability, largest trade count) and US stocks/indexes show a solid persistent edge (PF ~1.8–2.0, 100% MC profitability). Commodities/futures are marginal net-of-cost (PF 1.17, 83% MC profitability) — not reliably tradeable with this parameter set.
The strategy is robust to parameter choice — all 30 lookback×trail combos are profitable (PF 3.3–4.4) — and survives realistic 10 bps round-trip costs in the two strongest asset classes. At a constant 1% risk/trade, the 5-year compounded result is ×162.4 on crypto (+176.8% CAGR, 3.9% maxDD).
Honest caveats: returns are sum-of-returns (equal-weight per trade), not a compounded equity curve; trailing-stop fills assume the stop level (gaps can be worse); both universes have survivorship bias (only currently-trading symbols); drawdowns are large at equal weight (92–220% maxDD P50 on the sum-of-returns basis).
Long: today's high > max(HIGH[-20:-1]) → new 20-day high. Short: today's low < min(LOW[-20:-1]) → new 20-day low.
strength = (close − 20-day SMA) / ATR(14) — volatility-normalised deviation from mean.
Equal weight: top 5 longs + top 5 shorts per day (10 max concurrent). Enter at next bar's open — no lookahead.
10-day trailing stop: lowest low (long) / highest high (short) of prior 10 days incl. entry bar, updated daily.
| Asset class | Trades | Gross ret | Gross PF | Net ret | Net PF |
|---|---|---|---|---|---|
| Crypto-perps (Bybit) | 1,813 | +9,778% | 3.98 | +9,588% | 3.84 |
| Stocks (US) | 2,459 | +2,671% | 1.97 | +2,413% | 1.83 |
| Indexes | 1,657 | +695% | 1.76 | +521% | 1.52 |
| Commodities/Futures | 1,421 | +509% | 1.25 | +359% | 1.17 |
| Asset class | Term P5 | Term P50 | Term P95 | P(profit) | MaxDD P50 |
|---|---|---|---|---|---|
| Crypto-perps | +7,260% | +9,624% | +12,241% | 100.0% | 92.5% |
| Stocks (US) | +1,638% | +2,389% | +3,254% | 100.0% | 193.3% |
| Indexes | +274% | +515% | +780% | 100.0% | 220.2% |
| Commodities/Futures | −239% | +341% | +979% | 82.8% | 458.0% |
5 years daily OHLCV (2021-08-31 → 2026-08-31): 43 Bybit perps, 153 US equities, 38 index ETFs, 18 commodity/futures ETFs. Real sources, cached, pagination fixed.
5.5 bps taker + 5 bps slippage per side = 10 bps round trip on net figures.
10,000 block-bootstrap sims resampling the actual realised trade P&L list (preserving regime autocorrelation), compounding into equity curves — not a synthetic gaussian.
Full 30-combo parameter grid (lookback 10–30 × trail 5–30); all profitable. No-lookahead verified (signals from prior 20 days only, entries next open).
python fetch_bybit_v3.py # perp data (fixed pagination)
python fetch_yfinance_v2.py # stocks/indexes/futures
python run_backtest.py # strategy backtest → results.json
python monte_carlo_compounded.py # 10k block-bootstrap, 1% risk/trade