▶ Full Post Text
I've been backtesting a 0DTE Opening Range Breakout (ORB) strategy on SPY and wanted to share the full results with all the data so you can evaluate it yourself.
**The Strategy**
* Watch the first 5 minutes of trading (9:30–9:35 AM ET) and mark the high and low — that's your opening range
* When SPY breaks above the high, buy an ATM 0DTE call. When it breaks below the low, buy an ATM 0DTE put
* Only take the first breakout of the day — one trade max per day
* Flat $500 per trade, every time
* Trade only Monday, Wednesday, Friday
**Exit Rules**
* Profit target: +100% (option price doubles)
* Stop loss: -50%
* Time stop: Close everything by 3:30 PM ET
**Overall Results (303 trades)**
* Net profit: +$14,861 on a $25K account (+59.4%)
* Win rate: 41.3% (125 wins / 178 losses)
* Average win: $417.66 | Average loss: $209.82
* Payoff ratio: \~2:1
* Profit factor: 1.40
* Max drawdown: 7.6% ($2,611)
* Average trade duration: 92 minutes
**How Trades Exited**
* 120 trades hit the profit target (all wins, +$51,599)
* 174 trades hit the stop loss (all losses, -$37,184)
* Only 9 trades reached the 3:30 PM time stop (+$446)
97% of trades resolved decisively via the profit target or stop loss.
**Calls vs. Puts**
* Calls (upside breakouts): 175 trades, 40.6% win rate, +$7,454
* Puts (downside breakouts): 128 trades, 42.2% win rate, +$7,406
Nearly identical P&L — the strategy is effectively direction-neutral.
**Day of Week Breakdown**
* Monday: 97 trades, 42.3% win rate, +$5,348
* Wednesday: 103 trades, 41.8% win rate, +$5,155
* Friday: 103 trades, 39.8% win rate, +$4,356
Tuesday and Thursday were excluded after testing showed they diluted the edge.
**Yearly Breakdown**
* 2024: 130 trades, +$7,389
* 2025: 149 trades, +$4,444
* 2026 (partial, \~2 months): 24 trades, +$3,027
Had 6 losing months out of 27 total. Largest monthly loss was under $900.
**Why 5 Minutes Instead of 15?**
Most ORB literature uses a 15- or 30-minute opening range. I tested multiple durations:
* 5 min: +$13,792 profit, 7.6% max drawdown
* 10 min: +$9,415, 9.2% drawdown
* 15 min: +$7,312, 10.8% drawdown
* 30 min: +$4,221, 12.1% drawdown
The 5-minute window nearly doubled the returns of the 15-minute window while cutting drawdown almost in half. Shorter ranges catch moves earlier and reduce theta decay impact on 0DTE options.
**The Overfitting Trap**
This was the most interesting finding. I optimized individual parameters (tighter stops, entry buffers, etc.) and each one looked great in isolation. But when I combined them all:
* Simple version (5m + MWF): +$13,792, 7.6% drawdown
* All "best" parameters combined: +$5,710, 12.1% drawdown
The most optimized version performed worse than the simplest version. Classic curve-fitting — each parameter was fitting to historical noise rather than capturing a real edge.
**Important Caveats**
* Bid/ask spreads not included — could reduce returns 10-20%
* No commissions or slippage modeled
* Limited history — daily 0DTE SPY options only launched mid-2023
* Max drawdown looks small but the sample may not capture extreme volatility events
**Technical Notes**
* Backtest built in Go using real 1-minute option bar data (not Black-Scholes theoretical prices)
* Conservative same-bar handling — if both the profit target and stop loss could trigger in the same 1-minute bar, it takes the loss
* No lookahead bias
**Key Takeaway**
A 2:1 payoff ratio only needs a 34% win rate to break even. At 41.3%, this strategy creates a small but consistent edge. The biggest lesson was that simplicity beat optimization — every attempt to "improve" the strategy actually degraded it. Moving to paper trading next before considering real money.
Happy to answer any questions about the methodology or data.