Follow-up to open_close_edge study. Tests signal window, entry timing, costs, rolling stability, and regime dependence.
1. Signal window optimization
Which intraday window (9:30 to X) best predicts last-15min return?
| Window | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| 15min | dir=-1 (15min) | +9.69% | 1.10 | -1.61% | 1.35 | 524 |
| 15min | ret<0 (15min) | +9.40% | 1.08 | -1.64% | 1.34 | 511 |
| 15min | closepos<0.4 (15min) | +5.38% | 0.68 | -1.68% | 1.23 | 436 |
| 15min | volratio>1.5 (15min) | +2.37% | 0.38 | -3.92% | 1.18 | 185 |
| 30min | dir=-1 (30min) | +3.30% | 0.40 | -3.82% | 1.12 | 451 |
| 30min | ret<0 (30min) | +3.10% | 0.38 | -3.83% | 1.12 | 447 |
| 30min | closepos<0.4 (30min) | -0.54% | -0.07 | -3.82% | 0.98 | 367 |
| 30min | volratio>1.5 (30min) | +3.23% | 0.46 | -3.83% | 1.21 | 185 |
| 60min | dir=-1 (60min) | +1.24% | 0.44 | -0.84% | 1.72 | 18 |
| 60min | ret<0 (60min) | +1.24% | 0.44 | -0.84% | 1.72 | 18 |
| 60min | closepos<0.4 (60min) | +0.57% | 0.25 | -0.85% | 1.36 | 15 |
| 60min | volratio>1.5 (60min) | -0.68% | -0.30 | -1.35% | 0.50 | 4 |
| 90min | dir=-1 (90min) | +0.00% | 0.00 | 0.00% | inf | 0 |
| 90min | ret<0 (90min) | +0.00% | 0.00 | 0.00% | inf | 0 |
| 90min | closepos<0.4 (90min) | +0.00% | 0.00 | 0.00% | inf | 0 |
| 90min | volratio>1.5 (90min) | +0.00% | 0.00 | 0.00% | inf | 0 |
| 120min | dir=-1 (120min) | +0.00% | 0.00 | 0.00% | inf | 0 |
| 120min | ret<0 (120min) | +0.00% | 0.00 | 0.00% | inf | 0 |
| 120min | closepos<0.4 (120min) | +0.00% | 0.00 | 0.00% | inf | 0 |
| 120min | volratio>1.5 (120min) | +0.00% | 0.00 | 0.00% | inf | 0 |
| — | baseline (always long) | +5.49% | 0.42 | -6.34% | 1.07 | 1502 |
2. Entry timing optimization
For the best signal window, what entry time maximises Sharpe?
| Entry | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| 3:00 | dir=-1 -> 3:00 | +10.27% | 0.58 | -3.97% | 1.16 | 525 |
| 3:15 | dir=-1 -> 3:15 | +7.93% | 0.55 | -4.33% | 1.15 | 525 |
| 3:30 | dir=-1 -> 3:30 | +10.87% | 0.90 | -3.01% | 1.25 | 525 |
| 3:45 | dir=-1 -> 3:45 | +9.69% | 1.10 | -1.61% | 1.35 | 524 |
3. Combination signals
Does combining dir=-1 with other filters improve Sharpe?
| Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|
| dir=-1 | +9.69% | 1.10 | -1.61% | 1.35 | 524 |
| dir=-1 AND volratio>1.5 | +2.88% | 0.65 | -1.24% | 1.46 | 100 |
| dir=-1 AND volratio<0.5 | +3.95% | 1.03 | -0.75% | 1.53 | 178 |
| dir=-1 AND closepos<0.4 | +4.67% | 0.63 | -1.61% | 1.21 | 399 |
| dir=-1 AND range>0.003 | +6.36% | 1.35 | -0.32% | 9.56 | 25 |
| dir=-1 AND gap<0 | +4.07% | 0.70 | -1.10% | 1.32 | 230 |
| dir=-1 AND ret_15<-0.001 | +4.82% | 0.80 | -1.10% | 1.60 | 113 |
4. Cost sensitivity (round-trip bps)
How much slippage kills the dir=-1 contrarian edge?
| Cost (bps) | Net Ret | Net Sharpe | PF |
|---|---|---|---|
| 0 | +9.69% | 1.10 | 1.35 |
| 1 | +4.07% | 0.48 | 1.14 |
| 2 | -1.26% | -0.14 | 0.96 |
| 3 | -6.32% | -0.76 | 0.82 |
| 5 | -15.68% | -1.99 | 0.59 |
526 trades over 1507 days (34.9% trade rate)
5. Rolling 60-day Sharpe (dir=-1 last-15min)
| Year | Mean | Min | Max |
|---|---|---|---|
| 2020 | 1.96 | -2.58 | 5.28 |
| 2021 | 1.11 | -2.09 | 4.80 |
| 2022 | 0.83 | -2.13 | 4.26 |
| 2023 | -0.04 | -4.69 | 3.88 |
| 2024 | 0.00 | -3.99 | 3.94 |
| 2025 | 0.94 | -3.02 | 5.74 |
6. Regime analysis (SPY above/below 200-day SMA)
| Regime | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| BULL (above SMA200) | always long | +4.16% | 0.51 | -3.39% | 1.10 | 1022 |
| BULL (above SMA200) | dir=-1 contrarian | +4.64% | 0.86 | -1.70% | 1.32 | 339 |
| BEAR (below SMA200) | always long | -3.85% | -0.54 | -4.78% | 0.84 | 283 |
| BEAR (below SMA200) | dir=-1 contrarian | -0.16% | -0.03 | -1.44% | 0.98 | 119 |
7. Full IS/OOS (dir=-1, 15min window, 3:45 entry)
| Segment | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| IS | baseline | +10.13% | 1.02 | -4.37% | 1.18 | 1002 |
| IS | dir=-1 | +9.25% | 1.41 | -1.32% | 1.47 | 352 |
| OOS | baseline | -4.21% | -1.26 | -6.34% | 0.83 | 500 |
| OOS | dir=-1 | +0.40% | 0.21 | -1.06% | 1.05 | 172 |
OOS bootstrap p(no edge): 0.022
Decision memo
Deep dive into SPY intraday reversal (9:30-9:45 predicts 3:45-4:00).
- Tests signal window, entry timing, combinations, costs, rolling stability, regime.
- Adopt if: robust across windows/times, survives costs, stable rolling Sharpe.
- Otherwise: reject and ledger.
VERDICT (2026-08-25): PASS (conditional) -- real edge, tradeable with fee-free
- Signal window: 15min (9:30-9:45) is optimal (Sharpe 1.10). Extending to 30min+ dilutes the signal (Sharpe drops to 0.40). Edge is front-loaded.
- Entry timing: 3:45 is best (Sharpe 1.10), 3:30 second (0.90). Later is better — captures the closing auction reversal.
- Combinations: no clear improvement over plain dir=-1.
range>0.003looks great (Sharpe 1.35, PF 9.56) but only 25 trades — statistical noise. - Cost sensitivity: with fee-free execution, the full +0.064%/trade is captured. Sharpe 1.10, PF 1.35. Edge is dead at 2 bps round-trip for non-fee-free traders, but fully tradeable fee-free.
- Rolling stability: strong 2020-2022 (mean Sharpe 1.30), dead 2023-2024 (mean 0.00), recovering 2025 (0.94). Edge may be regime-dependent or decaying. Monitor rolling 60d Sharpe; stop if negative for 60+ days.
- Regime: works in both BULL (+0.35 Sharpe over baseline) and BEAR (+0.51 Sharpe). In bears it's defensive (loses less), not offensive.
- IS/OOS: OOS Sharpe 0.21, p=0.022. Real but small.
Tradeable profile (fee-free):
- +9.69% total over 5 years (~1.9% annualized)
- 524 trades (34.9% trade rate, ~1 in 3 days)
- MaxDD -1.61%, PF 1.35, Sharpe 1.10
- Day-trade only: buy at 3:45, sell at 4:00
RETRACTION (2026-08-25): Timezone bug invalidated ALL findings
The p=0.022 "reversal" was an ARTIFACT of a timezone bug: UTC timestamps were
treated as local time, so hour==9 captured 9 AM UTC = 4 AM EST (pre-market),
not 9:30 AM EST (market open). After fixing to NY timezone (see
reports/intraday_real_effects.md), the reversal effect DISAPPEARS. All intraday
PASS verdicts are RETRACTED. The real effects (gap fill, Monday, momentum) all
fail OOS significance (p > 0.5).
CONCLUSION: No tradeable intraday edge exists after timezone correction.