Window: 2017-11-10 .. 2026-06-26 (2166 daily bars) IS=504d OOS=126d step=126d windows=13 Data sources: data/blended_equity.csv, data/parquet/ETH_USD_1Day.parquet, data/parquet/BTC_USD_1Day.parquet, data/parquet/SPY_D.parquet (fallback 5m klines: data/parquet/ETH_USD_5Min.parquet, data/parquet/BTC_USD_5Min.parquet) cache: data/cache/rl_v3_sleeve_returns.parquet (version=v3.0)
Data-constraint note (documented adjustment)
The plan locked 4y IS / 6mo OOS walk-forward. The 5m kline cache (data/parquet/{BTC,ETH,SOL}_USD_5Min.parquet) only goes back to 2022-12-01, so the longest feasible composite window on the 5m source is ~3.7y. The yfinance 1Day files added by scripts/fetch_crypto_long.py (BTC 2017-01-01, ETH 2017-11-09) give a ~7-8y composite window. The 2y/6mo walk-forward is kept for parity with the v3 plan; with 8y of data we get ~24 windows, which is the statistical power the pre-registered p<0.05 bar actually requires. The fallback to 5m klines is kept for environments without yfinance access.
Sleeve set
| Sleeve | Source | Range | Note |
|---|---|---|---|
| eqmom | data/blended_equity.csv | 2017-01-23.. | equity-momentum flagship (backtested) |
| gate60_ETH | data/parquet/ETH_USD_1Day.parquet (yfinance) | 2017-11-09.. | gated by strategy.gate60 |
| gate60_BTC | data/parquet/BTC_USD_1Day.parquet (yfinance) | 2017-01-01.. | gated by strategy.gate60 |
| spy_bench | data/parquet/SPY_D.parquet | 2004-01-02.. | underweight-only sleeve |
| cash | 0.0 | residual sleeve, in-repo risk-free series unavailable | documented |
Walk-forward windows
| # | IS start | IS end | OOS end | EW Sharpe | RP Sharpe | uplift (EW-RP) | p(EW>RP) | EW maxDD | RP maxDD |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 2017-11-10 | 2019-11-13 | 2020-05-14 | +0.20 | +0.27 | -0.07 | 0.599 | -32.23% | -48.64% |
| 2 | 2018-05-15 | 2020-05-15 | 2020-11-11 | +3.56 | +4.44 | -0.89 | 0.716 | -11.72% | -9.81% |
| 3 | 2018-11-12 | 2020-11-12 | 2021-05-14 | +4.03 | +3.88 | +0.15 | 0.969 | -12.80% | -16.09% |
| 4 | 2019-05-16 | 2021-05-17 | 2021-11-11 | +0.98 | +0.69 | +0.29 | 0.430 | -18.48% | -22.66% |
| 5 | 2019-11-13 | 2021-11-12 | 2022-05-13 | -4.74 | -4.80 | +0.06 | 0.113 | -26.21% | -29.80% |
| 6 | 2020-05-15 | 2022-05-16 | 2022-11-11 | -0.00 | -0.23 | +0.23 | 0.443 | -6.05% | -4.84% |
| 7 | 2020-11-12 | 2022-11-14 | 2023-05-16 | -0.16 | -0.32 | +0.16 | 0.349 | -9.74% | -11.03% |
| 8 | 2021-05-17 | 2023-05-17 | 2023-11-14 | -1.85 | -2.60 | +0.75 | 0.017 | -10.20% | -15.34% |
| 9 | 2021-11-12 | 2023-11-15 | 2024-05-16 | +2.44 | +2.09 | +0.35 | 0.687 | -15.07% | -19.16% |
| 10 | 2022-05-16 | 2024-05-17 | 2024-11-14 | +0.61 | -0.76 | +1.37 | 0.082 | -4.52% | -5.37% |
| 11 | 2022-11-14 | 2024-11-15 | 2025-05-20 | -0.94 | -1.14 | +0.20 | 0.269 | -17.01% | -17.50% |
| 12 | 2023-05-17 | 2025-05-21 | 2025-11-18 | +1.81 | +1.53 | +0.28 | 0.596 | -8.83% | -12.36% |
| 13 | 2023-11-15 | 2025-11-19 | 2026-05-21 | +4.78 | +4.21 | +0.56 | 0.598 | -3.12% | -3.69% |
Aggregate
- Median OOS Sharpe (EW): +0.611
- Median OOS Sharpe (RP): +0.272
- Median uplift (EW - RP): +0.229
- All-window bootstrap p(EW > RP) <= 0.05: False (p values: ['0.599', '0.716', '0.969', '0.430', '0.113', '0.443', '0.349', '0.017', '0.687', '0.082', '0.269', '0.596', '0.598'])
- Worst-window EW max drawdown: -3.12%
- Worst-window RP max drawdown: -3.69%
Pre-registered verdict
DOMINANT bar: median uplift >= 0.1 AND all windows p<=0.05 AND maxDD <= 30%. USEFUL bar: median uplift >= 0.0 AND maxDD <= 30%. NOISE otherwise.
Verdict: USEFUL
Stop condition S1 (hypothesis doc)
Plan rule: stop and reject if EW baseline OOS Sharpe < 0.30 (no edge possible against a dead baseline). Observed median EW OOS Sharpe: +0.611. Stop condition triggered: False.
elapsed: 99.6s | windows=13