← all research

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)

Variantnet0net1net2net10net25OOS trades
V0 unfiltered long-break+0.34+0.03-0.28-2.78-7.432419
V1 +bullish-candle+0.88+0.62+0.35-1.76-5.711476
V2 +RV>=100%+1.72+1.54+1.36-0.05-2.70501
V3 PRIMARY +top20+1.72+1.54+1.36-0.05-2.70501

IS Sharpe by cost rung (reference only; OOS decides)

Variantnet0net1net2net10net25IS trades
V0 unfiltered long-break-0.44-0.56-0.69-1.66-3.381229
V1 +bullish-candle+0.34+0.23+0.12-0.74-2.30684
V2 +RV>=100%+0.18+0.12+0.06-0.43-1.33199
V3 PRIMARY +top20+0.18+0.12+0.06-0.43-1.33199

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.