iteration 8 · 2026-07-23 · P2 · laptop-drives-bigblack
Deflate a feature's out-of-sample Sharpe by how many features were tried, counting the honest number of independent trials. 3 of 5 gates pass; two share a single, well-understood cause that needs a careful redesign — so #8 does not graduate yet.
readonly=2. Compute wall ~12 s. Runs on the grounded #6 SFI return object + #0 CPCV substrate.| Gate | Result | |
|---|---|---|
| Harden — N_eff recovery | ONC N_eff 7.0 ≈ participation ratio 6.04 (rel-err 16%) — no collapse | PASS |
| Known-duplicate N_eff | two exact clones → N_eff 1.0 (no extra trial) | PASS |
| Null FPR | DSR>0.95 FPR 0.004 ≤ 0.05 | PASS |
| FST (formula vs simulated max) | analytic SR0 0.452 vs simulated 0.239 — 89% over-statement | OPEN |
| Power (look-ahead) | 0.07 → 0.17 → 0.37 (never 0.8) | OPEN |
Sanity: the real family's best feature (vwap, SFI Sharpe 3.75) deflates to DSR = 1.0 vs SR0 1.83 — the instrument does flag a strong real signal.
The analytic Bailey-Lopez de Prado SR0 = E[max] formula assumes N_eff independent trials. But in each shuffle the whole family is scored against the same permuted target, so the trial Sharpes are correlated through that shared target — a correlation ONC's feature-clustering (N_eff = 7) doesn't see. The max of correlated trials is smaller than the independent-N formula predicts, so the formula over-states SR0 ~2× → FST fails; and that inflated SR0 makes the DSR too conservative → the look-ahead signal can't clear the bar → power fails. Solving for the effective trials that reproduce the simulated max gives ≈2.5, not 7.
Redesign to a permutation-based DSR: the deflation reference is the empirical null-max Sharpe distribution (block-permuted target), so SR0 = the simulated max by construction (matches FST correctly) and the DSR is the observed max's percentile in it — capturing all correlation structure without an independence assumption. Calibrate the null-max threshold per N for an honest power curve. The analytic formula is retained as a reported diagnostic (it over-states → the permutation SR0 is load-bearing). Then #8 reaches its terminal verdict.