After fixing UTC/NY bug: 'reversal' was artifact. Real effects:
- Gap fill (SPY gaps down -> recovers), 2. Monday effect,
- Momentum (morning green -> afternoon green).
1. Gap fill (buy at open if gapped down, sell at close)
Full window results:
| Gap threshold | Ret (full day) | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|
| gap < -1.0% | +10.80% | 0.38 | -6.66% | 1.41 | 39 |
| gap < -0.5% | +47.45% | 1.07 | -5.68% | 1.80 | 114 |
| gap < -0.3% | +56.14% | 1.08 | -7.55% | 1.53 | 219 |
| gap < -0.2% | +29.48% | 0.58 | -18.01% | 1.21 | 314 |
Gap fill (gap < -0.3%)
| Segment | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| IS | Gap fill (gap < -0.3%) (signal) | +49.65% | 1.31 | -5.94% | 1.61 | 172 |
| IS | baseline (always long) | +67.38% | 0.95 | -22.05% | 1.15 | 996 |
| OOS | Gap fill (gap < -0.3%) (signal) | +4.33% | 0.44 | -5.39% | 1.25 | 47 |
| OOS | baseline (always long) | +24.92% | 0.93 | -17.08% | 1.17 | 500 |
OOS bootstrap p(no edge): 0.834
2. Monday effect (reversal on Mondays)
Full window:
| Signal | Ret (last-15min) | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|
| Monday | +11.71% | 1.36 | -2.01% | 1.63 | 278 |
| Tuesday | -3.63% | -0.45 | -7.24% | 0.86 | 311 |
| Wednesday | -10.90% | -1.02 | -14.23% | 0.67 | 308 |
| Thursday | -0.40% | -0.03 | -3.08% | 0.99 | 299 |
| Friday | +8.15% | 0.62 | -3.11% | 1.34 | 298 |
Monday + dir=-1 (last-15min)
| Segment | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| IS | Monday + dir=-1 (last-15min) (signal) | +5.26% | 1.05 | -1.05% | 1.80 | 82 |
| IS | baseline (always long) | -3.92% | -0.21 | -18.15% | 0.96 | 994 |
| OOS | Monday + dir=-1 (last-15min) (signal) | +1.44% | 0.90 | -0.56% | 1.59 | 46 |
| OOS | baseline (always long) | +7.53% | 1.42 | -2.69% | 1.25 | 500 |
OOS bootstrap p(no edge): 0.914
Monday (full day)
| Segment | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| IS | Monday (full day) (signal) | +75.10% | 2.43 | -6.98% | 2.42 | 182 |
| IS | baseline (always long) | +67.38% | 0.95 | -22.05% | 1.15 | 996 |
| OOS | Monday (full day) (signal) | +14.29% | 1.40 | -4.45% | 1.68 | 96 |
| OOS | baseline (always long) | +24.92% | 0.93 | -17.08% | 1.17 | 500 |
OOS bootstrap p(no edge): 0.695
3. Momentum (morning green -> afternoon green)
Full window:
| Signal | Ret (last-15min) | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|
| dir=+1 | +8.18% | 0.54 | -8.77% | 1.14 | 749 |
| dir=+1 AND gap>0 | -5.87% | -0.65 | -9.67% | 0.83 | 413 |
| ret_15>0 | +8.18% | 0.54 | -8.77% | 1.14 | 749 |
Momentum (dir=+1, last-15min)
| Segment | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| IS | Momentum (dir=+1, last-15min) (signal) | +1.32% | 0.14 | -8.77% | 1.03 | 510 |
| IS | baseline (always long) | -3.92% | -0.21 | -18.15% | 0.96 | 994 |
| OOS | Momentum (dir=+1, last-15min) (signal) | +6.78% | 2.14 | -1.40% | 1.58 | 239 |
| OOS | baseline (always long) | +7.53% | 1.42 | -2.69% | 1.25 | 500 |
OOS bootstrap p(no edge): 0.558
4. Combined: gap fill OR Monday
Either signal triggers a trade.
| Segment | Signal | Ret | Sharpe | MaxDD | PF | Days |
|---|---|---|---|---|---|---|
| IS | combined (signal) | +111.19% | 2.12 | -5.06% | 1.80 | 306 |
| IS | baseline | +67.38% | 0.95 | -22.05% | 1.15 | 996 |
| OOS | combined (signal) | +15.43% | 1.17 | -5.86% | 1.43 | 133 |
| OOS | baseline | +24.92% | 0.93 | -17.08% | 1.17 | 500 |
OOS bootstrap p(no edge): 0.685
Decision memo
Post-timezone-fix validation of real intraday effects.
- Gap fill: SPY gaps down -> recovers (REAL, IS/OOS needed)
- Monday: strong reversal (REAL, IS/OOS needed)
- Momentum: weak positive (dir=+1)
Adopt if OOS Sharpe > 0, p<0.05 for gap fill or Monday.
VERDICT (2026-08-25): REJECT ALL -- timezone bug invalidated prior work
CRITICAL: All prior intraday studies (open_close_edge, deep_dive, expansion,
expansion2) used UTC timestamps as if they were local time. The filter
hour==9 captured 9 AM UTC = 4 AM EST (pre-market), not 9:30 AM EST
(market open). This created a SPURIOUS "reversal" effect (p=0.002) that was
actually pre-market -> mid-morning noise.
After fixing to NY timezone:
- Gap fill (gap < -0.3%): IS Sharpe 1.31, OOS Sharpe 0.44, p=0.834 -- NO EDGE
- Monday: IS Sharpe 2.43, OOS Sharpe 1.40, p=0.695 -- NO EDGE
- Momentum (dir=+1): IS Sharpe 0.14, OOS Sharpe 2.14, p=0.558 -- NO EDGE
- Combined: OOS Sharpe 1.17, p=0.685 -- NO EDGE
All OOS p-values > 0.5. Cannot reject null hypothesis. NONE are adoptable.
The "SPY intraday reversal" was a BUG, not an edge. The prior PASS verdicts should be RETRACTED. Fee-free trading does not change this -- the signal itself is noise after timezone correction.