Date: 2026-09-20 | 61 names | RTH 09:30-16:00 ET | IS<2024-01-01 / OOS 2024-01-01..2025-07-01 / HOLDOUT >= 2025-07-01 | horizons (5, 10, 30, 60) min | K = 120 trials (10 hypotheses x 4 horizons x 3 variants) | cost tiers 0.5/1/2/5 bps one-way.
Data honesty box
- Feed = Alpaca IEX 1-minute bars: OHLCV + trade_count + vwap. No NBBO, no signed flow, no depth.
- Therefore quote/order-flow families (OFI, queue imbalance, depth, cancellations, options flow) are OUT OF SCOPE — not mocked with proxies. Spread is a cost parameter, never an observation.
- VIX intraday cache is broken (empty); regime uses SPY realized vol.
- Labels are executable (enter next bar open, exit h bars later, one-bar delay) and never cross the overnight gap; alpha measured against the same-minute unconditional baseline (time-of-day control).
Funnel
10 hypotheses tested across 4 horizons; 0 reached CANDIDATE, 10 stayed/rejected. A candidate must pass the OOS gate AND both weightings on the untouched 2025-07-01+ slice. No forward-paper claim is made here (that needs live logging).
| hid | edge | best h | IS net bps | OOS net bps | ew OOS bps | hold ew bps | p | OOS Sharpe | DSR | IC | top3 share | OOS yrs + | events | stage |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C1 | ilq-extreme-move-reversal | 10m | -1.708 | -1.832 | -1.854 | -1.946 | 1.000 | -4.40 | 0.00 | +0.001 | n/a | 0/2 | 857034 | RESEARCH |
| C2 | ilq-extreme-move-vol-shock | 30m | -0.985 | -1.150 | -1.153 | -3.270 | 0.923 | -1.14 | 0.00 | +0.003 | n/a | 0/2 | 152870 | RESEARCH |
| C3 | ilq-extreme-move-range-widen | 30m | -0.261 | -1.047 | -0.890 | -3.455 | 0.922 | -1.14 | 0.00 | +0.005 | n/a | 0/2 | 187333 | RESEARCH |
| I1 | vshock-continuation | 60m | -3.469 | -2.250 | -0.041 | -0.760 | 0.971 | -1.64 | 0.00 | +0.004 | n/a | 0/2 | 106147 | RESEARCH |
| I2 | vshock-reversal | 30m | -0.794 | -1.017 | -0.882 | -3.711 | 0.884 | -0.94 | 0.00 | +0.003 | n/a | 1/2 | 118763 | RESEARCH |
| J1 | volregime-shock-continuation | 60m | -3.638 | -1.616 | -2.159 | -3.156 | 0.981 | -1.76 | 0.00 | +0.000 | n/a | 0/2 | 743798 | RESEARCH |
| J2 | volregime-shock-reversal | 5m | -1.462 | -1.760 | -1.956 | -2.004 | 1.000 | -4.96 | 0.00 | +0.005 | n/a | 0/2 | 921615 | RESEARCH |
| H1 | vwap-stretch-fade | 60m | +5.367 | +7.364 | -0.659 | -2.752 | 0.000 | 3.08 | 0.00 | -0.012 | n/a | 2/2 | 141358 | RESEARCH |
| M1 | relative-dislocation-reversal | 60m | +1.619 | +2.235 | -1.335 | -2.569 | 0.017 | 1.74 | 0.00 | +0.005 | n/a | 2/2 | 200596 | RESEARCH |
| E1 | spy-lead-laggard | 60m | -1.444 | -1.715 | -0.461 | +1.089 | 0.983 | -1.72 | 0.00 | +0.005 | n/a | 0/2 | 160197 | RESEARCH |
Legend: net bps = time-of-day-adjusted forward return after round-trip cost at the base tier (1 bps one-way). day-weighted = mean of daily mean net (each session is one observation, the day-block estimator); event-weighted = mean over all events (the per-trade expectation). A real per-trade edge must be positive under BOTH — when they disagree in sign the signal is an intraday-clustering artifact (many small-count days vs a few high-count days). IS<2024-01 / OOS 2024-01..2025-07 (validation) / HOLDOUT >=2025-07 (untouched). DSR discounted by K trials.
Alpha decay (event-weighted OOS net bps by horizon)
| hid | 5m | 10m | 30m | 60m | best | perturb sign |
|---|---|---|---|---|---|---|
| C1 | -2.092 | -1.854 | -1.968 | -3.277 | 10m | yes |
| C2 | -2.481 | -1.177 | -1.153 | -3.862 | 30m | no |
| C3 | -2.344 | -0.911 | -0.890 | -3.883 | 30m | no |
| I1 | -1.450 | -2.960 | -3.118 | -0.041 | 60m | yes |
| I2 | -2.550 | -1.040 | -0.882 | -3.959 | 30m | no |
| J1 | -2.044 | -2.327 | -3.719 | -2.159 | 60m | yes |
| J2 | -1.956 | -1.673 | -0.281 | -1.841 | 5m | yes |
| H1 | -1.897 | -1.610 | -0.656 | -0.659 | 60m | yes |
| M1 | -1.956 | -1.782 | -1.677 | -1.335 | 60m | no |
| E1 | -1.810 | -2.832 | -3.269 | -0.461 | 60m | yes |
Per-hypothesis detail
C1 — ilq-extreme-move-reversal (stage RESEARCH)
- Mechanism: Transient liquidity imbalance / aggressive flow overshoots; market-makers are compensated for absorbing it.
- Hypothesis: A 5-min move beyond +/-2 intraday-sigma reverts over the next 5-60 min.
- Params: {'family': 'intraday-liquidity-reversal', 'new_mechanism': True, 'thr': 2.0}
- Decision reason: p=1.000 fails 0.05
- Perturbation OOS net bps (best across horizons per variant): ['-1.913', '-1.308']
- OOS net bps: day-weighted -1.832 vs event-weighted -1.854 (IS: -1.708 vs -1.917)
- HOLDOUT net bps: day-weighted -1.793 vs event-weighted -1.946 (301 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 0/2 (DSR 0.00, haircut -4.40)
C2 — ilq-extreme-move-vol-shock (stage RESEARCH)
- Mechanism: Volume confirms the move was inventory/flow-driven, not information; the pressure resolves once the flow passes.
- Hypothesis: Extreme 5-min moves ON abnormal volume revert harder than quiet ones (forced-flow exhaustion).
- Params: {'family': 'intraday-liquidity-reversal', 'new_mechanism': True, 'thr': 2.0, 'vzmin': 1.5}
- Decision reason: p=0.923 fails 0.05
- Perturbation OOS net bps (best across horizons per variant): ['-1.696', '+0.228']
- OOS net bps: day-weighted -1.150 vs event-weighted -1.153 (IS: -0.985 vs -2.298)
- HOLDOUT net bps: day-weighted -2.112 vs event-weighted -3.270 (301 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 0/2 (DSR 0.00, haircut -1.14)
C3 — ilq-extreme-move-range-widen (stage RESEARCH)
- Mechanism: Range blow-out marks liquidity withdrawal; the dislocation closes when depth returns.
- Hypothesis: Extreme moves while the bar range widens (spread-widening proxy) revert.
- Params: {'family': 'intraday-liquidity-reversal', 'new_mechanism': True, 'thr': 2.0, 'rzmin': 1.5}
- Decision reason: p=0.922 fails 0.05
- Perturbation OOS net bps (best across horizons per variant): ['-1.487', '+0.050']
- OOS net bps: day-weighted -1.047 vs event-weighted -0.890 (IS: -0.261 vs -1.851)
- HOLDOUT net bps: day-weighted -2.292 vs event-weighted -3.455 (301 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 0/2 (DSR 0.00, haircut -1.14)
I1 — vshock-continuation (stage RESEARCH)
- Mechanism: Abnormal volume marks informed/institutional initiation; the position is built over several minutes.
- Hypothesis: Large 5-min moves on >2z volume CONTINUE over 5-60 min.
- Params: {'family': 'intraday-volume-shock', 'new_mechanism': True, 'thr': 2.0, 'vzmin': 2.0}
- Decision reason: p=0.971 fails 0.05
- Perturbation OOS net bps (best across horizons per variant): ['-1.849', '-1.830']
- OOS net bps: day-weighted -2.250 vs event-weighted -0.041 (IS: -3.469 vs -2.131)
- HOLDOUT net bps: day-weighted -2.573 vs event-weighted -0.760 (301 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 0/2 (DSR 0.00, haircut -1.64)
I2 — vshock-reversal (stage RESEARCH)
- Mechanism: Flow-driven crowding; the liquidity premium is paid to whoever fades the exhausted impulse.
- Hypothesis: Large 5-min moves on >2z volume REVERSE (competing leg).
- Params: {'family': 'intraday-volume-shock', 'new_mechanism': True, 'thr': 2.0, 'vzmin': 2.0}
- Decision reason: p=0.884 fails 0.05
- Perturbation OOS net bps (best across horizons per variant): ['-1.527', '+0.941']
- OOS net bps: day-weighted -1.017 vs event-weighted -0.882 (IS: -0.794 vs -2.329)
- HOLDOUT net bps: day-weighted -2.280 vs event-weighted -3.711 (301 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 1/2 (DSR 0.00, haircut -0.94)
J1 — volregime-shock-continuation (stage RESEARCH)
- Mechanism: Vol expansion accompanies information arrival; trend strategies and stops chase the new state.
- Hypothesis: After an intraday volatility-regime shock, the prevailing 5-min direction continues.
- Params: {'family': 'intraday-vol-regime', 'new_mechanism': True, 'rvzmin': 2.0, 'zmin': 0.5}
- Decision reason: p=0.981 fails 0.05
- Perturbation OOS net bps (best across horizons per variant): ['-1.853', '-1.073']
- OOS net bps: day-weighted -1.616 vs event-weighted -2.159 (IS: -3.638 vs -2.721)
- HOLDOUT net bps: day-weighted -3.929 vs event-weighted -3.156 (298 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 0/2 (DSR 0.00, haircut -1.76)
J2 — volregime-shock-reversal (stage RESEARCH)
- Mechanism: Vol spikes are liquidity events; the impulse overshoots and mean-reverts once the vol shock decays.
- Hypothesis: After an intraday volatility-regime shock, the move reverses (competing leg / overreaction).
- Params: {'family': 'intraday-vol-regime', 'new_mechanism': True, 'rvzmin': 2.0, 'zmin': 0.5}
- Decision reason: p=1.000 fails 0.05
- Perturbation OOS net bps (best across horizons per variant): ['-1.777', '-1.617']
- OOS net bps: day-weighted -1.760 vs event-weighted -1.956 (IS: -1.462 vs -1.818)
- HOLDOUT net bps: day-weighted -1.890 vs event-weighted -2.004 (299 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 0/2 (DSR 0.00, haircut -4.96)
H1 — vwap-stretch-fade (stage RESEARCH)
- Mechanism: VWAP is the institutional execution benchmark; execution algos lean against extension and draw price back to it.
- Hypothesis: Price stretched >2 vol-units from session VWAP reverts toward VWAP over 5-60 min.
- Params: {'family': 'intraday-vwap-state', 'new_mechanism': True, 'thr': 2.0}
- Decision reason: date-weighted +7.36 but event-weighted -0.66bps <= 0 (clustering artifact)
- Perturbation OOS net bps (best across horizons per variant): ['+4.297', '+6.852']
- OOS net bps: day-weighted +7.364 vs event-weighted -0.659 (IS: +5.367 vs -4.260)
- HOLDOUT net bps: day-weighted +3.267 vs event-weighted -2.752 (301 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 2/2 (DSR 0.00, haircut 1.86)
M1 — relative-dislocation-reversal (stage RESEARCH)
- Mechanism: Idiosyncratic intraday dislocations without news are liquidity noise; index/stat-arb flow pulls them back.
- Hypothesis: A stock's 30-min move that dislocates from SPY's same-window move reverts to the market's path.
- Params: {'family': 'intraday-cross-asset', 'new_mechanism': True, 'thr': 2.0}
- Decision reason: date-weighted +2.23 but event-weighted -1.34bps <= 0 (clustering artifact)
- Perturbation OOS net bps (best across horizons per variant): ['-0.119', '+4.346']
- OOS net bps: day-weighted +2.235 vs event-weighted -1.335 (IS: +1.619 vs -2.375)
- HOLDOUT net bps: day-weighted +0.401 vs event-weighted -2.569 (127 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 2/2 (DSR 0.00, haircut 0.00)
E1 — spy-lead-laggard (stage RESEARCH)
- Mechanism: Index/basket flow hits SPY first; single-name liquidity refreshes slower, so the constituent completes the move.
- Hypothesis: When SPY jumps >2z in 5 min, a large cap that has not followed (gap>10bps) catches up over 5-60 min.
- Params: {'family': 'intraday-cross-asset', 'new_mechanism': True, 'thr': 2.0, 'gapmin': 0.001}
- Decision reason: p=0.983 fails 0.05
- Perturbation OOS net bps (best across horizons per variant): ['-1.349', '-1.539']
- OOS net bps: day-weighted -1.715 vs event-weighted -0.461 (IS: -1.444 vs +0.027)
- HOLDOUT net bps: day-weighted -0.479 vs event-weighted +1.089 (127 days)
- OOS decomposition: n/a (event-weighted total not positive)
- Positive OOS years: 0/2 (DSR 0.00, haircut -1.72)
Runtime: 14.8 min. Ledger: logs/edge_discovery_ledger.jsonl.