#20 — StrengthSpread lookahead RCA
Hypothesis — what it tests
Whether the implausible +203 p/d ss_h1 PINN-CMA out-of-sample result was a genuine edge or an artifact — and where the leak was.
Description
The PINN-CMA campaign (6 experimental arms over the 5-input CMA-NN, adding a StrengthSpread H1 feature, learnable hyperparameters and PINN-style fitness penalties) returned +203 p/d OOS on EUR_JPY — roughly 1000× any prior clean result, which itself triggered the investigation. The bug: precompute_strength_spread.py merged H1 StrengthSpread onto M5 bars with merge_asof(direction='backward') without accounting for OANDA's H1 timestamp convention (a bar stamped T spans [T, T+1h], so its close isn't known until T+1h) — an M5 bar at 22:05 received an H1 value encoding up to 55 minutes of future price. This was the same bug class as the original 2026-04-12 compute_mc_on_series RCA. All 36 inputs-family runs were retroactively invalidated; the fix (+1h shift before merge) plus a 4-test regression tripwire (one test asserts the buggy path DOES leak, so reverting the fix breaks CI) went in the same day. The causal rerun was a clean negative: the headline config went from +203.15 to −14.18 p/d, and only one lucky non-reproducible seed passed gates. The statistical-gate discipline caught the bug pre-deploy — no capital was touched.
Key result
Indicators
Algorithms
Code
Interactive version (search, filters, figures): the experiment explorer.