Rigorous replication of the Royal Trader strategy “How a Simple Statistics Strategy beats 95% of Retail Traders”: buy at market close when the day’s open-to-close move is ≤ −threshold%, hold N bars, 10% sizing with pyramiding — tested over 56 years of ^GSPC with robustness checks the article never reported.
The edge is real and positive: every config wins >56% of trades with PF >1.29 over 56 years; max drawdowns line up well with the article once simulated correctly (e.g. −8.4% vs −8.7% for 2%/7d), strong evidence the mechanics are right. Win rates run 5–8 pts below the article (56–63% vs 62–70%) and total returns are roughly half — likely data-feed differences (index vs FXCM CFD).
But it is a diversifier, not a wealth builder: at 10% sizing the strategy earns only ~0.2–0.5%/yr of equity, massively lagging buy & hold (+9,370% over the same 56y). The edge is not consistent across decades (1980s lost money; concentrated in the 2000s) and erodes at 20 bps/side costs. Best config (2%/24d) holds out-of-sample (PF 3.05, 70.3% WR) — but with the worst OOS drawdown of the grid.
Buy at market close when the daily candle's open-to-close move is ≤ −threshold% (tested 0.75%, 1%, 2%).
Close after holding N bars (tested 3d, 7d, 14d, 24d) — fixed holding period, no other exits.
10% of portfolio per trade; pyramiding enabled (overlapping positions allowed).
Large intraday down-moves = unexpected selling; market makers absorb and hedge, producing short-term mean reversion — the 'VIX Rule of 16' (expected daily move ≈ VIX/16).
| Config | Trades (ours) | Win rate | PF | Max DD | Total return |
|---|---|---|---|---|---|
| 2% / 3d | 340 | 56.5% | 1.29 | −7.9% | +12.4% |
| 2% / 7d | 340 | 57.9% | 1.44 | −8.4% | +25.8% |
| 2% / 24d | 340 | 62.9% | 1.86 | −29.8% | +78.4% |
| 0.75% / 14d | 2,250 | 60.0% | 1.50 | −29.0% | +343.2% |
| 1% / 7d | 1,527 | 58.8% | 1.41 | −12.3% | +100.0% |
| Check | Result | Read |
|---|---|---|
| Cost sensitivity (2%/7d) | PF 1.44 → 1.17 | Survives 10 bps/side; erodes at 20 bps/side (retail commissions ≈ 5–10 bps RT — fine) |
| Per-decade breakdown | 1980s −$1.03 | Edge NOT consistent — concentrated in 2000s (dot-com + GFC) |
| Walk-forward (IS 70% → OOS 30%) | PF 3.05, 70.3% WR | Best IS config (2%/24d) holds OOS: +34.6%, −14.2% maxDD, 101 trades |
| vs buy & hold | +343% vs +9,370% | Risk-adjusted / win-rate edge, NOT return-based |
^GSPC daily OHLCV via yfinance, 1970-09-02 → 2026-09-02 (14,118 bars = 56 years). Cached locally. The index is a cleaner test than the FXCM CFD the article used.
Real daily equity-curve simulation with the article's stated sizing and pyramiding, marked-to-market daily. Cost sensitivity, per-decade, walk-forward and alternative execution assumptions added.
2%/3d, 2%/7d, 2%/24d, 0.75%/14d, 1%/7d — all reported, not just the best.
The gaps vs the article (win rate −5–8pts, returns ~half) are documented and explained, not hidden.
python backtest.py # main 56y backtest → results
python variant_sensitivity.py # config grid
python enhancement_analysis.py && python finalize_enhancements.py
python export_equity.py # equity curve export