The Edge That Wasn't
All 81 experiments › #76

#76 — Momentum confirmation Stage 1 (deep-history FX momentum(12-1))

2026-07-07
Verdict: negative · ⛔ the +27.4 was a window artifact — momentum decayed pre-2013
Deep-history rerun of fx_factors' lone-positive momentum(12-1) secondary: net -8.245 p/rebalance vs null p95 -0.278p over 196 rebalances (2004-05→2020-08), half-split +3.72 p/rebalance pre-2013 vs -21.77 p/rebalance post-2013.

Hypothesis — what it tests

Whether fx_factors' one positive secondary (monthly FX momentum(12-1), +27.4 p/rebalance) was a real, generalizing factor or a favorable-regime artifact of its narrow 2020-24 test window, by rerunning the identical frozen rule on 196 rebalances of deep pre-2020 history the original sweep never touched.

Description

fx_factors' sweep found one positive secondary — monthly FX cross-sectional momentum(12-1), +27.4 p/rebalance — but flagged it single-pass and unpromotable (only ~44-46 rebalances, all within the 2020-11→2024-08 observation window). This experiment reruns that IDENTICAL rule, imported verbatim (not refitted) from the frozen research/experiments/fx_factors/factors.py, on a freshly fetched deep D1 dataset (data/d1_deep/) covering 196 monthly rebalances from 2004-05-31 to 2020-08-31 — a much longer, earlier, non-overlapping window, hard-sealed from the original observation window and the fx_factors OOS. Result: net -8.245 p/rebalance (cum -1616.0p, max DD -3047.1p), below the R10 null's p95 of -0.278p; walk-forward thirds only 1/3 positive (+9.15 / -1.85 / -31.68); regime split at 2013 shows pre-2013 weakly positive (+3.72 p/rebalance, n=104) but post-2013 strongly negative (-21.77 p/rebalance, n=92) — momentum decayed roughly a decade before the sweep's 2020-24 test window even began. A carry-free/gross-only cut shows a whisper of edge (+1.27 p/rebalance) but real trading costs erase it, and at 1.5x the assumed spread even the gross number goes negative (-0.19 p/rebalance). Per the pre-registration's decision rule, Stage 1 failing 2 of 4 required gates means Stage 2 is NOT requested — the fx_factors sealed OOS window (2024-08-30→2026-05-21) stays sealed and unspent, and momentum(12-1) is recorded as a sweep-artifact.

Key result

n=196 monthly rebalances (2004-05-31→2020-08-31); deep_net=-8.245 p/rebal; null_mean=-13.130p null_p95=-0.278p null_p5=-26.195p null_std=8.222p (200 seeds); cum_net=-1616.0p; max_DD=-3047.1p; carry-free gross=+1.272 p/rebal (cum +234.0p); spread×1.5 sensitivity: net=-9.621 p/rebal, gross=-0.194 p/rebal; WF thirds=[+9.151, -1.846, -31.679] (1/3 positive); regime split@2013: pre-2013 n=104 mean=+3.722 p/rebal, post-2013 n=92 mean=-21.773 p/rebal; gates 2/4 pass (1 PASS, 2 FAIL, 3 FAIL, 4 PASS); original sweep secondary +27.4 p/rebal IS (single-pass, 2020-11→2024-08, ~44-46 rebalances) now contradicted by 196-rebalance deep test.

Indicators

12-1 month currency momentum (12-month return minus 1-month return)63-day realized-volatility scalingcurrency-index construction (fx_factors)per-pair measured median spread

Algorithms

cross-sectional long top-3 / short bottom-3 currency momentummonthly rebalance engineR10 random-weight-portfolio null (200 seeds)walk-forward thirdspre/post-2013 regime split

Code

Interactive version (search, filters, figures): the experiment explorer.

← #75 FX factor suite (carry / value / momentum / composite) at OANDA-retail cost#77 CFTC COT positioning-extremes signal →
This page is one experiment from the audited record behind the book The Edge That Wasn'tget the book · about the project.