Universe: 50 liquid stocks (_1Min panel, ETFs/VIX excluded), 1535 sessions 2020-07-27..2026-09-10. Signal FROZEN (PCA K=20, lookback=252, top-10/side, hold=5); entries/exits at session OPEN (09:30) vs MIDDAY (11:35). Split IS < 2024-01-01, OOS >= 2024-01-01. NOTE: this is a ~50-name mechanism test, not the 314-name production universe (no 1-min history there).
Results (per rebalance block; periods = 252/hold)
| variant | window | Sharpe | total | maxDD | p |
|---|---|---|---|---|---|
| open | IS | -0.06 | -2.5% | -20.0% | 0.529 |
| open | OOS | +0.86 | +27.5% | -13.8% | 0.076 |
| mid | IS | -0.10 | -3.6% | -14.9% | 0.564 |
| mid | OOS | +0.71 | +22.5% | -17.2% | 0.118 |
Entry-drift diagnostic (selected basket, mean per rebalance)
- prior close -> open: +5.3 bps
- open -> 11:35: -0.2 bps
- mean per-rebalance turnover (set churn / top_k): 3.11
Reading
- OOS Sharpe midpoint delta (midday - open): -0.15.
- Costs are identical across variants (same signal, same turnover), so the difference is pure fill timing: any intraday continuation of the reversion (open -> 11:35) is what midday gains or gives up.
- If open->11:35 drift is positive (names keep rising after the open), midday entry HARMS a long-low-residual book; if negative, it helps.
- A midday PASS here only means the fill timing is not obviously worse; the live spread probe still owns the actual cost measurement.
runtime 42s