An opening range breakout strategy for US stocks. The first minutes of the session set a high and
a low; entering on a clean break of that high with above-normal turnover avoids most of the
fake-outs that make breakout trading frustrating.
1. The rule
# BUY — break of the opening range, with turnover confirmation
if HhmmSs >= 93500 and Price > HighestPrice(300) and TradeAmount > AvgTradeAmount(300) * 3:
Buy()# SELL
if ProfitPct >= 1.5 or ProfitPct <= -0.7 or HoldTime >= 900:
Sell()
2. Why these conditions
Line
What it asks
Why
HhmmSs >= 93500
Is it past 09:35 ET?
The first five minutes are not a range yet — there is nothing to break out of.
Price > HighestPrice(300)
Above the 300-tick high?
That high is the range being broken.
TradeAmount > AvgTradeAmount(300) * 3
Is this print three times the recent average?
A break on normal turnover is drift, not a breakout.
The turnover multiple is compared against the symbol's own recent average rather than a fixed
dollar figure. An absolute threshold passes constantly on a heavily traded name and never on a
thin one, which is the opposite of what a surge filter is for.
3. When it fails
It fails on gap-and-fade mornings. Price clears the high, the buyers were the gap chasers, and the
move reverses inside a minute. The time exit is what saves you there, not the stop.
It also fails in a quiet market where the high being broken is three cents above the average
price. Nothing in these conditions measures how far the move has already travelled, so a
three-cent break and a fifty-cent break look identical to the code.
4. What the round trip asks of it
Opening range breakout: the exit block drawn to scale, and the break-even win rate before and after measured trading costs
The 1.5% target against a 0.7% stop looks like it only needs to be right a third of the time. It
does — if trading were free. We measured what a $5,000 market order actually pays on these names:
about 38 basis points one way, roughly 0.75% round trip
(what day trading a US stock really costs). Put that in and the break-even win rate
goes from 32% to 66%.
That is not an argument against the strategy. It is an argument for taking the opening range
seriously as a selection problem: the break has to be big enough that 0.75% is a small share
of it. It is also why the opening half hour, despite the wide spreads, is still the window where
the typical minute covers its own cost — see
the opening 30 minutes is the easiest day trading window.
5. What to change first
Try the lookback window before anything else. HighestPrice(300) is five minutes of history; at
900 it becomes a much rarer, larger breakout — and a larger break is exactly what makes the cost
above tolerable.
Change one number, keep the rest, and compare trade count as well as result. A filter that
improves the average by cutting you to four trades has not taught you anything. Run it on your own
recordings first: how to backtest a day trading strategy on US stocks. Every factor
used here is defined in the day trading indicators and factors reference.
Educational template for research and backtesting. Not investment advice and not a signal service.
Originally published by TraderWe on August 4, 2026. You may quote and link to this page. Republishing the full text without a link back to the original is not permitted.
The 15 minute hold limit is longer than my average decision time and shorter than my average lunch, so I'll pass, but nice write up. Some of us just set an alert and go water the plants.
Worth noting what that 1.5 / -0.7 pair implies: you need roughly 32% winners just to break even before commissions and slippage, and the 900 second timeout adds a third bucket of scratch-ish exits that eats into that. So when you backtest 20 sessions, log the three exit reasons separately — target, stop, timeout. If the timeout bucket is big and slightly negative, the edge isn't in the breakout, it's in whether you sized it small enough to survive the chop.
- add a liquidity filter, 3x average on a thin name is two prints
- skip earnings-day and known-event days entirely, opening range is meaningless there
- log the opening gap size, breakouts behave differently after a big gap
- 09:35 is a hard start but the range needs a defined end too, otherwise HighestPrice(300) just trails all morning