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 |
| Signal | Days | Ret | Sharpe | MaxDD | PF |
|---|---|---|---|---|---|
| long if dir=+1 | 748 | +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>0 | 748 | +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.6 | 659 | +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.003 | 685 | +3.98% | 0.17 | -12.63% | 1.04 |
| long if gap>0 | 838 | -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.5 | 155 | +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 |
| Signal | Days | Ret | Sharpe | MaxDD | PF |
|---|---|---|---|---|---|
| long if dir=+1 | 749 | +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>0 | 749 | +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.6 | 658 | +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.003 | 685 | -0.31% | 0.01 | -15.28% | 1.00 |
| long if gap>0 | 840 | -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.5 | 155 | +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)
| Segment | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| IS | baseline (always long) | -5.65% | -0.18 | -22.22% | 0.97 | 995 |
| IS | long if gap<0 (contrarian) | +18.20% | 0.91 | -6.45% | 1.27 | 441 |
| OOS | baseline (always long) | -1.79% | -0.20 | -5.30% | 0.97 | 498 |
| OOS | long if gap<0 (contrarian) | -0.01% | 0.02 | -2.90% | 1.00 | 197 |
OOS bootstrap p(no edge): 0.367
IS/OOS for best last-15min (3:45-4:00) signal: long if gap<0 (contrarian)
| Segment | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| IS | baseline (always long) | -3.92% | -0.21 | -18.15% | 0.96 | 994 |
| IS | long if gap<0 (contrarian) | +10.92% | 0.80 | -4.21% | 1.26 | 440 |
| OOS | baseline (always long) | +7.53% | 1.42 | -2.69% | 1.25 | 500 |
| OOS | long if gap<0 (contrarian) | +4.72% | 1.28 | -1.51% | 1.38 | 197 |
OOS bootstrap p(no edge): 0.798
Return by 9:30-9:45 ret quintile
| Q(ret_15) | Mean last-hour ret | Mean last-15min ret | Days |
|---|---|---|---|
| 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.
- Two targets tested: last-hour (3:00-4:00) and last-15min (3:45-4:00).
- Costs not modeled (gross only).
- Adopt if: OOS Sharpe > 0, p<0.05, monotonicity holds.
- Otherwise: reject and ledger.
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.