Universe: top 100 most-liquid US equities from load_close_volume (5030 days, ~20y, 2006-08-14 .. 2026-08-12).
IS/OOS split: 70/30 at 2020-08-10.
Costs: 10bps/side, both legs (round-trip 2x).
Look-ahead guard: assert_no_lookahead (perturb future closes, assert past returns unchanged).
Adoptable per window: net Sharpe > 0 AND bootstrap p < 0.05 AND trades >= 30.
Top-5 by IS score; OOS verdict on the same params (no re-tuning).
Sweep: 4950 pairs x 2 z_look x 2 z_enter x 2 hold x 2 (L/S + L-only) = 79200 runs. Verdict (L/S, market-neutral): REJECT (L/S): 745 IS passes; 0/5 hold up OOS -- IS artifact. Verdict (L-only, deployable): REJECT (L-only): 678 IS passes; 0/5 hold up OOS -- IS artifact.
L/S (long loser / short winner) — top 10 IS picks
| Pair | params | IS sharpe | IS p | IS trades | IS pass? | OOS sharpe | OOS p | OOS trades | OOS pass? |
|---|---|---|---|---|---|---|---|---|---|
| NFLX/ANET | z=120, ze=1.5, h=10 | +1.49 | 0.002 | 76 | Y | -0.14 | 0.618 | 70 | N |
| ANET/FITB | z=252, ze=1.5, h=10 | +1.45 | 0.001 | 56 | Y | +0.06 | 0.431 | 54 | N |
| MS/ANET | z=252, ze=2.0, h=10 | +1.36 | 0.000 | 33 | Y | 0 | N | ||
| ANET/FITB | z=252, ze=1.5, h=20 | +1.30 | 0.005 | 37 | Y | +0.37 | 0.216 | 32 | N |
| RF/ANET | z=252, ze=1.5, h=20 | +1.23 | 0.006 | 36 | Y | +0.15 | 0.390 | 32 | N |
| JPM/ANET | z=252, ze=2.0, h=10 | +1.21 | 0.001 | 31 | Y | 0 | N | ||
| MA/NOW | z=252, ze=1.5, h=10 | +1.19 | 0.001 | 65 | Y | +0.61 | 0.097 | 64 | N |
| NFLX/ANET | z=120, ze=1.5, h=20 | +1.18 | 0.005 | 50 | Y | -0.16 | 0.622 | 43 | N |
| RF/ANET | z=252, ze=1.5, h=10 | +1.17 | 0.006 | 56 | Y | +0.23 | 0.342 | 52 | N |
| JPM/SCHW | z=120, ze=2.0, h=10 | +1.16 | 0.000 | 77 | Y | +0.04 | 0.471 | 30 | N |
L-only (long the loser, skip the winner) — top 10 IS picks
| Pair | params | IS sharpe | IS p | IS trades | IS pass? | OOS sharpe | OOS p | OOS trades | OOS pass? |
|---|---|---|---|---|---|---|---|---|---|
| BKNG/LVS | z=120, ze=1.5, h=10 | +1.22 | 0.000 | 59 | Y | 0 | N | ||
| CMCSA/KMI | z=120, ze=1.5, h=10 | +1.14 | 0.002 | 34 | Y | -0.52 | 0.847 | 65 | N |
| JPM/SCHW | z=120, ze=2.0, h=10 | +1.12 | 0.000 | 40 | Y | 0 | N | ||
| BKNG/LVS | z=120, ze=1.5, h=20 | +1.12 | 0.000 | 42 | Y | 0 | N | ||
| NFLX/ANET | z=120, ze=1.5, h=10 | +1.11 | 0.005 | 35 | Y | -0.32 | 0.749 | 51 | N |
| MSFT/HPQ | z=120, ze=1.5, h=20 | +1.10 | 0.001 | 41 | Y | 0 | N | ||
| MSFT/HPQ | z=120, ze=1.5, h=10 | +1.10 | 0.000 | 58 | Y | +0.17 | 0.367 | 35 | N |
| MA/NOW | z=252, ze=1.5, h=10 | +1.09 | 0.008 | 52 | Y | +0.39 | 0.207 | 31 | N |
| LRCX/MS | z=120, ze=1.5, h=20 | +1.08 | 0.002 | 32 | Y | 0 | N | ||
| NFLX/NOW | z=120, ze=1.5, h=10 | +1.08 | 0.004 | 36 | Y | +0.52 | 0.127 | 30 | N |
Reading
- The 'pairs stat-arb' line in the rejection ledger dates from R1 with a single pair (SPY~QQQ). This is the first proper framework-guarded sweep on equities.
- If L/S shows IS-only signals that vanish OOS, that's R8 redux: gross high-Sharpe, costs/timing kill net. The L-only variant is a useful diagnostic: if L/S works but L-only fails, the signal lives in the short leg (not deployable in the long-only system without an authorized short sleeve).
- Honest verdict: a single 70/30 split is a weak OOS test. A 0/5 OOS match is a hard REJECT; a 5/5 OOS match would need a rolling walk-forward before production.
Time: 772s.