Signal FROZEN from D1 (same panel code/universe/OR/RV/top20/split/fills; this study changes cost accounting only: $0 Alpaca stock commission verified Sept 2026 fee schedule; regulatory ~0.2bps sells-only). Ladder one-way: 0 / 1bps / 2bps (retail-realistic, probe 4bps-RT precedent) / 10bps (house) / 25bps. PRIMARY verdict = net10 (comparability); SECONDARY verdict = net2 with identical four bars. Cost overlays are not trials (DSR K=4 per rung). Promotion only via 30d fill-measuring shadow; maker-entry deferred to shadow.
Window: 2020-07-27 .. 2026-09-10 (1538 days). Symbols: 50. OOS blocked 4.7%.
OOS Sharpe by cost rung (one-way)
| Variant | net0 | net1 | net2 | net10 | net25 | OOS trades |
|---|---|---|---|---|---|---|
| V0 unfiltered long-break | +0.34 | +0.03 | -0.28 | -2.78 | -7.43 | 2419 |
| V1 +bullish-candle | +0.88 | +0.62 | +0.35 | -1.76 | -5.71 | 1476 |
| V2 +RV>=100% | +1.72 | +1.54 | +1.36 | -0.05 | -2.70 | 501 |
| V3 PRIMARY +top20 | +1.72 | +1.54 | +1.36 | -0.05 | -2.70 | 501 |
IS Sharpe by cost rung (reference only; OOS decides)
| Variant | net0 | net1 | net2 | net10 | net25 | IS trades |
|---|---|---|---|---|---|---|
| V0 unfiltered long-break | -0.44 | -0.56 | -0.69 | -1.66 | -3.38 | 1229 |
| V1 +bullish-candle | +0.34 | +0.23 | +0.12 | -0.74 | -2.30 | 684 |
| V2 +RV>=100% | +0.18 | +0.12 | +0.06 | -0.43 | -1.33 | 199 |
| V3 PRIMARY +top20 | +0.18 | +0.12 | +0.06 | -0.43 | -1.33 | 199 |
PRIMARY (net10) verdict (V3 PRIMARY, OOS, incl. flat zeros)
- Sharpe -0.05 (ret -5.61%, maxDD -23.31%)
- bootstrap p (all days) 0.532; traded-days p 0.526 (274 traded)
- beta +0.55, resid Sharpe -0.74
- blocked 4.7%
- DSR(K=4) 0.03 | haircut -0.05 | PSR 0.48
Verdict: REJECT
SECONDARY (net2) verdict (V3 PRIMARY, OOS, incl. flat zeros)
- Sharpe +1.36 (ret +46.29%, maxDD -12.86%)
- bootstrap p (all days) 0.071; traded-days p 0.068 (274 traded)
- beta +0.56, resid Sharpe +0.82
- blocked 4.7%
- DSR(K=4) 0.65 | haircut +0.44 | PSR 0.93
Verdict: REJECT
Reading
- Per-trade gross edge 12.6bps over 501 OOS trades. Rungs at/below ~6bps RT stay net-positive arithmetically; the verdict bars (significance + residual + DSR) decide, not the sign alone.
- Backtest fills (printed next-open) never pay spread/adverse selection, so realized paper costs are the binding unknown — shadow measures them, this file cannot resolve them.
- On SECONDARY PASS: build scripts/orb_play_shadow.py (30d observe-only, fill-vs-counterfactual log, promotion bar fixed before shadow starts). On REJECT: ledger entry, D1 family parked, move to F2.
Time: 599s.