← all research
STUDY

"SPY Intraday Reversal — Deep Dive"

2026-08-26

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?

WindowSignalRetSharpeMaxDDPFDays
15mindir=-1 (15min)+9.69%1.10-1.61%1.35524
15minret<0 (15min)+9.40%1.08-1.64%1.34511
15minclosepos<0.4 (15min)+5.38%0.68-1.68%1.23436
15minvolratio>1.5 (15min)+2.37%0.38-3.92%1.18185
30mindir=-1 (30min)+3.30%0.40-3.82%1.12451
30minret<0 (30min)+3.10%0.38-3.83%1.12447
30minclosepos<0.4 (30min)-0.54%-0.07-3.82%0.98367
30minvolratio>1.5 (30min)+3.23%0.46-3.83%1.21185
60mindir=-1 (60min)+1.24%0.44-0.84%1.7218
60minret<0 (60min)+1.24%0.44-0.84%1.7218
60minclosepos<0.4 (60min)+0.57%0.25-0.85%1.3615
60minvolratio>1.5 (60min)-0.68%-0.30-1.35%0.504
90mindir=-1 (90min)+0.00%0.000.00%inf0
90minret<0 (90min)+0.00%0.000.00%inf0
90minclosepos<0.4 (90min)+0.00%0.000.00%inf0
90minvolratio>1.5 (90min)+0.00%0.000.00%inf0
120mindir=-1 (120min)+0.00%0.000.00%inf0
120minret<0 (120min)+0.00%0.000.00%inf0
120minclosepos<0.4 (120min)+0.00%0.000.00%inf0
120minvolratio>1.5 (120min)+0.00%0.000.00%inf0
baseline (always long)+5.49%0.42-6.34%1.071502

2. Entry timing optimization

For the best signal window, what entry time maximises Sharpe?

EntrySignalRetSharpeMaxDDPFDays
3:00dir=-1 -> 3:00+10.27%0.58-3.97%1.16525
3:15dir=-1 -> 3:15+7.93%0.55-4.33%1.15525
3:30dir=-1 -> 3:30+10.87%0.90-3.01%1.25525
3:45dir=-1 -> 3:45+9.69%1.10-1.61%1.35524

3. Combination signals

Does combining dir=-1 with other filters improve Sharpe?

SignalRetSharpeMaxDDPFDays
dir=-1+9.69%1.10-1.61%1.35524
dir=-1 AND volratio>1.5+2.88%0.65-1.24%1.46100
dir=-1 AND volratio<0.5+3.95%1.03-0.75%1.53178
dir=-1 AND closepos<0.4+4.67%0.63-1.61%1.21399
dir=-1 AND range>0.003+6.36%1.35-0.32%9.5625
dir=-1 AND gap<0+4.07%0.70-1.10%1.32230
dir=-1 AND ret_15<-0.001+4.82%0.80-1.10%1.60113

4. Cost sensitivity (round-trip bps)

How much slippage kills the dir=-1 contrarian edge?

Cost (bps)Net RetNet SharpePF
0+9.69%1.101.35
1+4.07%0.481.14
2-1.26%-0.140.96
3-6.32%-0.760.82
5-15.68%-1.990.59

526 trades over 1507 days (34.9% trade rate)

5. Rolling 60-day Sharpe (dir=-1 last-15min)

YearMeanMinMax
20201.96-2.585.28
20211.11-2.094.80
20220.83-2.134.26
2023-0.04-4.693.88
20240.00-3.993.94
20250.94-3.025.74

6. Regime analysis (SPY above/below 200-day SMA)

RegimeSignalRetSharpeMaxDDPFDays
BULL (above SMA200)always long+4.16%0.51-3.39%1.101022
BULL (above SMA200)dir=-1 contrarian+4.64%0.86-1.70%1.32339
BEAR (below SMA200)always long-3.85%-0.54-4.78%0.84283
BEAR (below SMA200)dir=-1 contrarian-0.16%-0.03-1.44%0.98119

7. Full IS/OOS (dir=-1, 15min window, 3:45 entry)

SegmentSignalRetSharpeMaxDDPFDays
ISbaseline+10.13%1.02-4.37%1.181002
ISdir=-1+9.25%1.41-1.32%1.47352
OOSbaseline-4.21%-1.26-6.34%0.83500
OOSdir=-1+0.40%0.21-1.06%1.05172

OOS bootstrap p(no edge): 0.022

Decision memo

Deep dive into SPY intraday reversal (9:30-9:45 predicts 3:45-4:00).

VERDICT (2026-08-25): PASS (conditional) -- real edge, tradeable with fee-free

  1. 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.
  2. Entry timing: 3:45 is best (Sharpe 1.10), 3:30 second (0.90). Later is better — captures the closing auction reversal.
  3. Combinations: no clear improvement over plain dir=-1. range>0.003 looks great (Sharpe 1.35, PF 9.56) but only 25 trades — statistical noise.
  4. 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.
  5. 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.
  6. Regime: works in both BULL (+0.35 Sharpe over baseline) and BEAR (+0.51 Sharpe). In bears it's defensive (loses less), not offensive.
  7. IS/OOS: OOS Sharpe 0.21, p=0.022. Real but small.

Tradeable profile (fee-free):

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.