Quant for Free
Home / Analysis / NY 15-minute ORB
Strategy teardown · Opening Range Breakout · SPY / QQQ

Does the NY 15-minute Opening Range Breakout survive validation?

Toby Crabel's opening range, as the YouTube default: first 15 minutes, one break, done by the close.

Credit. The opening-range family goes back at least to Toby Crabel, Day Trading with Short Term Price Patterns and Opening Range Breakout (1990). The rule we locked is the 2024–2026 retail YouTube / TradingView default, not a page-for-page reconstruction of Crabel: first 15 minutes of the New York cash session set the range, one break, flat by the close. Opening range is the public description we used as the source link. We reimplement the idea clean-room in Python — no Pine, no MQL, no vendor script — and put it through the same costs, out-of-sample split, and Deflated Sharpe Ratio as every other teardown here.

1 / The pitch: a range, a break, done by the close

It is one of the most-copied day-trading pictures on YouTube: mark the high and low of the first 15 minutes of the New York cash session, trade the first break, be flat by the close. The pitch fits under a 5-minute chart:

Sold as a session-structure edge: the open is where overnight information hits the cash auction, the first 15 minutes “discover” value, and the rest of the day is a breakout from that discovery. If that sentence is true as a standalone system on liquid index ETFs, a clean-room backtest with real friction, a frozen search, and a Deflated Sharpe bar of 0.95 should not need a miracle sample to show it.

We ran that named 15-minute rule on SPY and QQQ. It does not clear the bar we use for a tradeable edge. That is not the same as “the opening range is empty.” A ~51% win rate on a 60-day tape is an optical illusion. We still publish, because a failed DSR is a lesson, not a reason to hide the tape.

2 / Why Alpaca is the headline, and Yahoo is not

Three tapes. One family of rules. Only one of them is allowed to be the lede.

Costs are the same everywhere we quote a net number: fees 0, slippage 1.5e-4 (1.5 bps). Signal on the close; the fill is the next bar. Searches use n_trials=40 (Optuna). The survive bar is DSR ≥ 0.95. Engine: vectorbt 2026.6.27.

Sharpes below are per bar, the units the run actually emitted. We are not going to annualize them, we are not going to invent a CAGR, and we are not going to quote a buy-and-hold Sharpe just because buy-and-hold is on the chart. Fields the run did not emit are omitted on purpose.

3 / SPY: the named 15-minute rule, on the tape that can actually hold it

Universe: Alpaca SIP 5-minute SPY. 492,026 bars. Span: 2015-12-31 19:00−05:00 to 2026-08-28 19:55−04:00. Forty trials on the named 15-minute opening range. Best trial: or_minutes=15, buffer_bps=4, long_only=true.

SPY Alpaca 5-minute SIP, 15-minute opening range breakout out-of-sample equity vs buy-and-hold
SPY Alpaca SIP 5m · 15-minute OR · out-of-sample, after costs. Buy-and-hold is plotted, not tabulated — this run did not emit a buy-and-hold Sharpe, so we are not quoting one.
SPY · Alpaca SIP 5m · 15-minute OR · 40 trials
Bars492,026
Span2015-12-31 → 2026-08-28
Best params15m OR, 4 bp buffer, long only
In-sample Sharpe (per bar)−0.0015
Out-of-sample Sharpe (per bar)0.0002
Deflated Sharpe (DSR)0.4011
OOS return0.24%
OOS max drawdown−12.25%
OOS trades / win rate545 / 52.66%

The YouTube default length was the in-sample pick. It still did not get paid. In-sample Sharpe is already negative. Out-of-sample Sharpe is 0.0002 per bar on 0.24% of return, with a −12.25% hole and a photogenic 52.66% win rate across 545 trades. DSR 0.4011 against a bar of 0.95. The search did not find a winner hiding in the buffer. It found the least-bad way to go nowhere: long-only, four basis points of extra room, still a coin-flip that failed to compound.

4 / QQQ: same named rule, same fail

Universe: Alpaca SIP 5-minute QQQ. 476,656 bars. Same named 15-minute opening range, same 40 trials. Best trial: buffer_bps=3, long_only=true.

QQQ Alpaca 5-minute SIP, 15-minute opening range breakout out-of-sample equity vs buy-and-hold
QQQ Alpaca SIP 5m · 15-minute OR · out-of-sample, after costs. Same caveat: buy-and-hold is on the chart; we did not extract a buy-and-hold Sharpe.
QQQ · Alpaca SIP 5m · 15-minute OR · 40 trials
Bars476,656
Best params3 bp buffer, long only
In-sample Sharpe (per bar)−0.0005
Out-of-sample Sharpe (per bar)0.0006
Deflated Sharpe (DSR)0.2793
OOS return2.51%
OOS max drawdown−13.71%
OOS trades / win rate514 / 54.86%

Slightly better window-dressing than SPY — 2.51% out-of-sample, win rate 54.86% — and a worse Deflated Sharpe: 0.2793. In-sample Sharpe is still negative. The Nasdaq-100 ETF is not the hidden parameter that rescues a 15-minute breakout. A 54.86% win rate is what you put on a thumbnail. DSR 0.28 is what you put in the headline.

5 / The unlocked default is a coin-flip with thousands of trades

Before anyone says “you over-tuned it”: lock the YouTube default on the full Alpaca sample — 15-minute range, buffer 0, long/short — and count.

Default full sample · 15m · buffer 0 · long/shortSPYQQQ
Trades2,6732,669
Win rate49.31%49.42%
Sharpe (per bar)−0.0021−0.0016

Win rate 49.31% on SPY (2,673 trades), 49.42% on QQQ (2,669 trades). Per-bar Sharpe negative on both. That is not a quiet edge waiting for a better buffer. That is a fair coin with a session costume. The 40-trial search then dropped the short side and added a few basis points of room, which is SPY and QQQ talking — a structural bid — and still failed to clear DSR. “Trade less on a bad opening-range break” is not alpha.

6 / The 60-day YouTube window is the wrong sample

Yahoo’s 5-minute history is about 60 trading days. That is the tape a video can actually download, so that is the tape a video backtests. We ran the locked default there too — SPY: 15-minute OR, buffer 0, long/short — because the screenshot is part of the phenomenon. We are not going to let it become the lede.

Yahoo 5m · ~60 days · do not headlineSPYQQQ
Bars4,6804,680
Span2026-06-04 → 2026-08-282026-06-04 → 2026-08-28
Trades5960
Win rate50.85%51.67%
Sharpe (per bar)0.0025−0.0103
SPY Yahoo 5-minute, 15-minute opening range, about 60 days, equity vs buy-and-hold
SPY 5m · 15-minute OR · ~60 days. 59 trades, 50.85% wins, per-bar Sharpe 0.0025. A coin-flip sample with a small-sample costume.
QQQ Yahoo 5-minute, 15-minute opening range, about 60 days, equity vs buy-and-hold
QQQ 5m · 15-minute OR · ~60 days. 60 trades, 51.67% wins, per-bar Sharpe −0.0103. Same window length, opposite sign.

Fifty-nine trades. Win rate 50.85%. Positive per-bar Sharpe on SPY, −0.0103 on QQQ over the same 4,680-bar length. Pick the ticker that matches the thumbnail you wanted. We are not going to annualize 0.0025, we are not going to print a Deflated Sharpe on this window, and we are not going to let “about 51%” become the title. Yahoo cannot give this rule a long 15-minute history. Pretending otherwise is how 15-minute YouTube backtests get written.

What the short tape does show, and only this: the default long/short, zero-buffer rule does trade on recent SPY and QQQ. It is not vacuous. It is also not a sample you can defend a strategy with.

7 / The 60-minute cousin does not rescue the family

Same session-break idea. Different bar. Opening range is the first 60 minutes, on Yahoo hourly bars, searched 40 ways. This is the longest cousin of the YouTube rule that vendor can support. It is not the 15-minute default. If the family had a fat standalone edge, 40 tries on a coarser bar should have been able to trip over it.

SPY 1h · 60-minute OR

5,072 bars, 2023-10-02 to 2026-08-28. Best trial: 60m, buffer 1, long_only=true.

SPY hourly, 60-minute opening range breakout out-of-sample equity vs buy-and-hold
SPY 1h · 60-minute OR · out-of-sample, after costs, vs buy-and-hold. Plotted, not tabulated.
SPY 1h · 60-minute OR · 40 trials
Best params60m OR, 1 bp buffer, long only
In-sample Sharpe (per bar)−0.0137
Out-of-sample Sharpe (per bar)−0.0189
Deflated Sharpe (DSR)0.1519
OOS return−2.97%
OOS max drawdown−4.06%
OOS trades / win rate104 / 45.19%

QQQ 1h · 60-minute OR

5,073 bars. Best trial: 60m, buffer 1, long_only=false.

QQQ hourly, 60-minute opening range breakout out-of-sample equity vs buy-and-hold
QQQ 1h · 60-minute OR · out-of-sample, after costs, vs buy-and-hold. Same caveat on buy-and-hold metrics.
QQQ 1h · 60-minute OR · 40 trials
Best params60m OR, 1 bp buffer, long/short
In-sample Sharpe (per bar)−0.0
Out-of-sample Sharpe (per bar)−0.0267
Deflated Sharpe (DSR)0.1135
OOS return−7.44%
OOS max drawdown−7.51%
OOS trades / win rate167 / 46.71%

This is the opposite of the usual overfitting cartoon (a huge in-sample Sharpe that melts under DSR). The search never got aloft. SPY’s best trial is still negative in-sample and worse out-of-sample; DSR 0.1519. QQQ’s best trial kept both sides, in-sample Sharpe −0.0, out-of-sample −0.0267, DSR 0.1135, out-of-sample return −7.44%. Deflation is then almost ceremonial: you cannot deflate your way into an edge the in-sample peak already refused to show.

8 / Verdict

Verdict

Not a tradeable standalone edge on this tape. Still a question worth deforming.

The named 15-minute NY opening-range breakout, as the YouTube default, does not survive validation on Alpaca SIP 5-minute SPY and QQQ. After 40 trials, SPY’s winner (15m, 4 bp buffer, long only) posts in-sample Sharpe −0.0015, out-of-sample Sharpe 0.0002, DSR 0.4011, out-of-sample return 0.24%, max drawdown −12.25%, 545 trades, 52.66% wins. QQQ’s winner (3 bp buffer, long only) posts in-sample Sharpe −0.0005, out-of-sample Sharpe 0.0006, DSR 0.2793, out-of-sample return 2.51%, max drawdown −13.71%, 514 trades, 54.86% wins. The survive bar is DSR ≥ 0.95. Neither clears it. The unlocked default on the full sample is a coin-flip: 2,673 SPY trades at 49.31% wins, 2,669 QQQ trades at 49.42%.

The 60-day Yahoo window is the wrong sample: 59 SPY trades at 50.85%, 60 QQQ trades at 51.67%, and a per-bar Sharpe that changes sign with the ticker. The 60-minute hourly cousin, searched 40 times, loses slowly (SPY DSR 0.1519, QQQ DSR 0.1135). Win rate is the most photogenic statistic in day-trading screenshots, and here it is doing what it always does: hovering near a coin while the equity line fails to compound.

We do not believe “DSR failed, delete the opening range from your brain.” The open is still where a cash index eats overnight information. That is a reason to keep measuring. It is not a reason to ship.

9 / What this does not kill (untested on purpose)

A failed DSR on this vendor, these two ETFs, this implementation is not a ban on the opening range as a question. These are the next attempts we would actually run. None of the lines below have numbers attached, because this pipeline did not produce them.

  1. Range-quality filters. Skip the day when the opening range is tiny versus recent ATR (noise) or huge versus ATR (the move already happened). The tests above take every session. A lot of retail ORB variants don’t. That is a different rule, and it is the first variation we would add — with the trial count going up, and DSR coming with it.
  2. Gap / overnight-move filters. If the overnight gap already pierced what will become the opening range, the “discovery” story is different. Untested here.
  3. The break definition. Close-through of the range, stop-through of the high/low, last-price, or a buffer in ticks instead of bps are all different fills. We did not search fill semantics. Next-bar fills are also not a Pine strategy() fill. Anyone pasting this next to a TradingView report is comparing two clocks.
  4. The exit. Flatten at the cash close is the YouTube default and a harsh time stop. An earlier flatten (11:30, lunch), a stop at the other side of the range, or a hold that is allowed to run — each one is a new strategy. Untested.
  5. ORB as a feature, not a system. Opening-range width, minutes-until-break, and break direction are features you can feed a different edge (a trend overlay, a mean-reversion fade of a failed break, a vol-target on days the OR is wide). This run tests standalone “break and hope until the close.” A failed standalone test is the beginning of that feature conversation, not the end of it.
  6. Not these ETFs, or not cash. Liquid single names, a small-cap tape, ES or NQ versus SPY/QQQ basis, London open instead of New York. Supertrend already taught us the market is the hidden parameter. We ran two index ETFs.

If you take one research prompt from this piece, take a pre-trade filter on opening-range width versus ATR, with the trial count disclosed in the headline. That is the smallest change that still resembles the video, and the one this standalone “every session, one break, done by the close” test structurally did not run.

Check the next claim the same way

Tool
Deflated Sharpe Ratio — 40 trials, SPY DSR 0.4011, QQQ DSR 0.2793, bar 0.95
Tool
Net-vs-Gross Costs — this run used fees 0 and slippage 1.5e-4; it did not emit a break-even
Related · Teardown
Supertrend — another simple rule that lives or dies with the sample market
Learn · Module 5
The validation gauntlet — overfitting, OOS, DSR, and costs in one place
Educational analysis, not investment advice. A methodology case study of a publicly popular opening-range-breakout rule — associated with Toby Crabel (1990) and common 2024–2026 YouTube / TradingView 15-minute defaults, reimplemented clean-room — not a recommendation to trade or avoid any strategy, parameter set, or instrument. Simulated and optimized results depend on data source, session definition, costs, position mode, fill assumption, and sample window; they do not predict future performance. Fields this run did not emit (CAGR, annualized Sharpe, buy-and-hold Sharpe, break-even bps) are omitted on purpose. See the full disclaimer.