← all research
STUDY

"SPY Open-Close Edge (9:30-9:45 predicts 3:00-4:00)"

2026-08-26

Window: 2020-01-03 .. 2025-12-30 (1497 days) | 1Min bars from Alpaca | features at9:45 AM | targets: last-hour (3:00-4:00) and last-15min (3:45-4:00) returns

Last-hour (3:00-4:00) as target

| always long last hour | 1493 | -7.34% | -0.18 | -22.22% | 0.97 |

SignalDaysRetSharpeMaxDDPF
long if dir=+1748+5.21%0.27-16.04%1.07
long if dir=-1 (contrarian)745-11.92%-0.44-20.21%0.90
long if ret_15>0748+5.21%0.27-16.04%1.07
long if ret_15<0 (contrarian)742-12.37%-0.46-20.61%0.89
long if close_pos>0.6659+1.53%0.10-14.73%1.03
long if close_pos<0.4 (contrarian)604-1.49%-0.03-12.90%0.99
long if range_pct>0.003685+3.98%0.17-12.63%1.04
long if gap>0838-21.68%-1.02-24.32%0.79
long if gap<0 (contrarian)638+18.20%0.71-6.52%1.21
long if vol_ratio>1.5155+2.11%0.12-10.18%1.07
long if vol_ratio<0.5 (quiet open)36+1.49%0.46-1.08%1.55

Last-15min (3:45-4:00) as target

| always long last 15min | 1494 | +3.32% | 0.17 | -18.15% | 1.03 |

SignalDaysRetSharpeMaxDDPF
long if dir=+1749+8.18%0.54-8.77%1.14
long if dir=-1 (contrarian)745-4.49%-0.25-12.38%0.94
long if ret_15>0749+8.18%0.54-8.77%1.14
long if ret_15<0 (contrarian)742-4.53%-0.25-12.45%0.94
long if close_pos>0.6658+3.74%0.29-9.30%1.08
long if close_pos<0.4 (contrarian)605-1.27%-0.06-8.68%0.98
long if range_pct>0.003685-0.31%0.01-15.28%1.00
long if gap>0840-11.50%-0.84-16.98%0.84
long if gap<0 (contrarian)637+16.17%0.88-4.21%1.29
long if vol_ratio>1.5155+2.13%0.15-9.13%1.09
long if vol_ratio<0.5 (quiet open)36-0.62%-0.25-1.65%0.80

IS/OOS for best last-hour (3:00-4:00) signal: long if gap<0 (contrarian)

SegmentSignalRetSharpeMaxDDPFDays
ISbaseline (always long)-5.65%-0.18-22.22%0.97995
ISlong if gap<0 (contrarian)+18.20%0.91-6.45%1.27441
OOSbaseline (always long)-1.79%-0.20-5.30%0.97498
OOSlong if gap<0 (contrarian)-0.01%0.02-2.90%1.00197

OOS bootstrap p(no edge): 0.367

IS/OOS for best last-15min (3:45-4:00) signal: long if gap<0 (contrarian)

SegmentSignalRetSharpeMaxDDPFDays
ISbaseline (always long)-3.92%-0.21-18.15%0.96994
ISlong if gap<0 (contrarian)+10.92%0.80-4.21%1.26440
OOSbaseline (always long)+7.53%1.42-2.69%1.25500
OOSlong if gap<0 (contrarian)+4.72%1.28-1.51%1.38197

OOS bootstrap p(no edge): 0.798

Return by 9:30-9:45 ret quintile

Q(ret_15)Mean last-hour retMean last-15min retDays
Q1+0.0309%+0.0115%300
Q2-0.0578%-0.0203%299
Q3-0.0126%-0.0092%299
Q4+0.0056%+0.0112%299
Q5+0.0130%+0.0196%300

Decision memo

Tests whether SPY 9:30-9:45 AM price action predicts late-day returns.

RETRACTION (2026-08-25): Timezone bug invalidated ALL findings

This study originally reported a "SPY intraday reversal" with p=0.002. That was an ARTIFACT: 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). The "reversal" was actually pre-market -> mid-morning noise.

After fixing to NY timezone (see reports/intraday_real_effects.md), the reversal effect DISAPPEARS. All intraday PASS verdicts from this study, deep_dive, expansion, and expansion2 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.