ID: S035
Slug: etf-momentum-rotation-12-1-v1
Run date: 2026-07-04
Failed at: Stage 1 (Quick-screen)
Outcome: FAILED — 4 of 5 gates fail.
Headline metric: strategy 5.8%/yr vs SPY 11.0%/yr → net excess −5.3%/yr (gate needs ≥ +2.0%)
Fail reason: Under honest methodology — survivorship-free universe, real friction, dividends, a point-in-time liquidity filter, and significance testing — the 12-1 ETF momentum rotation loses to simply holding SPY by ~5%/yr, with a worse drawdown. The cross-sectional signal has the right sign but is not significant. The edge the source study reported was an artifact of the defects this spec set out to correct.
What we found
| Gate | Threshold | Result | |
|---|---|---|---|
| G1 — net excess return | ≥ +2.0%/yr vs SPY | −5.26%/yr | ✗ |
| G2 — bootstrap significance | excess 95% CI lower bound > 0 | −0.84% (LB) | ✗ |
| G3 — cross-sectional validity | top−bottom > 0, p < 0.05 | +0.62%/mo, p = 0.118 | ✗ |
| G4 — drawdown tail | ≤ 1.25× SPY max-DD (18%) | 23% | ✗ |
| G5 — CVaR-95 tail | ≤ 1.25× SPY CVaR (−13.2%) | −14.0% | ✓ |
Sample: 244 months, Dec 2005 → Mar 2026. Turnover ~30%/month. Leveraged/inverse funds excluded: 314. The pre-run forecast called this almost exactly — "much of the apparent alpha may be a beta-timing artifact that a SPY benchmark absorbs… the most likely failure points are G4/G5… the fully-invested, no-cash-filter design eats every benchmark drawdown plus rotation risk."
The universe question, answered
A frequent and fair worry: why thousands of ETFs, when the source used ~40? The answer is that the 6,049 is only the raw ingest pool (every US ETF ever classified, incl. ~1,900 later delisted) — needed to build the universe honestly. The tradeable count each month, after the $25M point-in-time liquidity filter, is far smaller: 32 ETFs at the first formation (Dec 2005) — right next to the source's 40, but survivorship-free — growing to a median of 152 and a max of 480 as the ETF market expanded (see the per-month chart). The source's hand-picked 40 survivors is exactly the bias this corrects: it silently excludes the funds momentum rotated into that later died, which flatters the backtest.
Why the corrections kill it
The source's headline came from a stack of defects, each of which this spec removed:
- Survivorship bias — a survivor-only list hides the hot ETFs momentum buys that later delist. The survivorship-free universe here includes them, and it hurts.
- Zero friction — at ~30%/month turnover, real costs bite; but even gross, the strategy trails SPY.
- No significance test — the cross-sectional spread (G3) looks positive until you bootstrap it: p = 0.12, not real.
- Beta-timing artifact — 12-month momentum spent the sample concentrating into US large-cap growth/tech ETFs; against a SPY benchmark that absorbs it, there is no residual alpha, only extra drawdown.
Verdict
NULL — cut at Stage 1, counts toward the swing pillar's C1 (cross-asset rotation) family (owner-assigned), reinforcing S031's finding: liquid-ETF rotation buys drawdown, not diversification, and loses to passive. A famous, heavily-marketed edge, failed transparently on honest gates — and a clean demonstration that the methodology corrections (survivorship, friction, PIT universe, significance) are the whole difference between the source's "success" and reality. No variant is queued; a cash/absolute-momentum overlay would change the object (a new S-NNN), and the bar is high given the base strategy loses to SPY across every lookback.
Baseline SPY total return. Friction 20 bps round-trip on turned-over notional. Survivorship-free PIT ETF universe (Tiingo, incl. delisted). Block bootstrap: mean block 6 months, 10,000 resamples. English per repo convention. Ledger: swing-pillar-ledger.md (family C1).