Pre-reg: 5-min OR 09:30-09:35 ET, first-CLOSE-above-high -> next-open, exit 15:50, 1 trade/name/day, long-only. V3 PRIMARY = bullish first candle + RV>=1.0 + top-20/day. IS < 2025-01-01, OOS >= 2025-01-01. Costs per-trade 2x one-way; verdict on net10. Non-OK symbol-days ineligible; days with <5 eligible BLOCKED (0), separate from flat-no-trigger days.
Window: 2020-07-27 .. 2026-09-10 (1538 days, 692 tradeable, 846 blocked). Symbols: 50.
| Variant | Segment | Days | TradeDays | Ret | Sharpe | Net10 Sharpe | Net25 Sharpe | Trades |
|---|---|---|---|---|---|---|---|---|
| V0 unfiltered long-break | IS | 1116 | 284 | -20.88% | -0.44 | -1.66 | -3.38 | 1229 |
| V0 unfiltered long-break | OOS | 422 | 401 | +6.23% | +0.34 | -2.78 | -7.43 | 2419 |
| V0 unfiltered long-break | FULL | 1538 | 685 | -15.95% | -0.15 | -2.02 | -4.68 | 3648 |
| V1 +bullish-candle | IS | 1116 | 247 | +12.92% | +0.34 | -0.74 | -2.30 | 684 |
| V1 +bullish-candle | OOS | 422 | 389 | +24.88% | +0.88 | -1.76 | -5.71 | 1476 |
| V1 +bullish-candle | FULL | 1538 | 636 | +41.00% | +0.53 | -1.10 | -3.48 | 2160 |
| V2 +RV>=100% | IS | 1116 | 127 | +4.88% | +0.18 | -0.43 | -1.33 | 199 |
| V2 +RV>=100% | OOS | 422 | 274 | +63.21% | +1.72 | -0.05 | -2.70 | 501 |
| V2 +RV>=100% | FULL | 1538 | 401 | +71.18% | +0.79 | -0.26 | -1.81 | 700 |
| V3 PRIMARY +top20 | IS | 1116 | 127 | +4.88% | +0.18 | -0.43 | -1.33 | 199 |
| V3 PRIMARY +top20 | OOS | 422 | 274 | +63.21% | +1.72 | -0.05 | -2.70 | 501 |
| V3 PRIMARY +top20 | FULL | 1538 | 401 | +71.18% | +0.79 | -0.26 | -1.81 | 700 |
OOS verdict (V3 PRIMARY, net10, incl. flat zeros)
- net10 Sharpe -0.05 (gross +1.72), ret -5.61%, maxDD -23.31%
- bootstrap p (all days) 0.532; traded-days p 0.526 (274 traded of 422 OOS days)
- beta vs BH: +0.55 | corr: +0.43 | resid Sharpe -0.74 (ret -21.40%, maxDD -30.08%) (beta +0.55, resid Sharpe -0.74)
- OOS blocked-day fraction 4.7%
- DSR(K=4) 0.17 | haircut -0.05 | PSR 0.48
- per-trade gross edge 12.6bps over 501 OOS trades (vs 20bps RT @10bps/side, 50bps RT @25bps/side)
Verdict: REJECT (net10 Sharpe -0.05 <= 0; p 0.532 NOT < 0.05; resid Sharpe -0.74 <= 0; blocked 4.7% < 20%)
Reading
- PASS needs all four (net edge, significance, not-beta, not-sitting-out). IS shown for consistency only; OOS decides.
- Net10 is the verdict basis (25bps stress alongside). A skip/select filter trades LESS, so net flatters selection — gross must also be sane.
- Coverage asymmetry: IS tradeable 26.0% of days vs OOS 95.3% (early-window IEX-thin names fail the trailing ADV gate; OOS decides on the cleaner window).
- Top20 rank never binds (V2==V3 every day: <=20 names/day clear RV>=1.0) — the RV>=100% filter does the selection work, ranking adds nothing here.
- Failure anatomy: gross edge (+1.72 OOS) is real but thin per-trade and rides beta (+0.55, resid -0.74) — a bull-window intraday-long tilt, not alpha. Costs (20bps RT @10bps) erase it.
- Next on PASS: walk-forward + 30d observe-only shadow (scripts/orb_play_shadow.py); on REJECT: ledger entry, move on. Revisit only on a NEW mechanism (e.g. maker-entry cost cut, short leg, overnight-gap interaction) — not a re-grid of RV/topK.
Time: 696s. Symbols 50; OOS trades V3 501 (V0 2419 / V1 1476 / V2 501).