Tested by BacktestingMax
15-minute opening range breakout backtest on NQ and ES futures
Does the 15-minute opening range breakout work on NQ and ES futures?
On NQ, yes, in our backtest on MNQ, the micro NQ contract. On ES, tested on the micro MES, it made money too, but much less in 2024–2025. The 15-minute opening range breakout (ORB) marks the highest and the lowest price from 09:30 to 09:45 New York time, when the stock market opens. It buys when a candle closes above the range, and sells short when one closes below it. In the basic rules, the stop-loss is at the other side of the range, and the take-profit is twice as far away (2R). We ran 12 backtests from 2020 to 2025, after trading costs, on MNQ, MES, YM (Dow) and RTY (Russell 2000), each on 1-, 5- and 15-minute charts. Each started with $50,000 and risked 1% of the balance per trade. On MNQ, the account grew 109.6% to 157.5%, with a profit in both 2020–2023 and 2024–2025 on all three charts. On MES, it grew 37.9% to 79.0%, but it lost money in 2024–2025 on the 5-minute chart. With a 5-minute range (09:30 to 09:35) instead, MNQ made only +4.1% and +31.4% on the 1- and 5-minute charts, and MES lost money. YM made money and RTY lost money, but both skipped many days, because one contract often risked more than 1%.
12 backtests 2020–2025 Trading costs included Tested 26 October 2026
Where it worked 12 backtests- Made money
- 9 of 12 tests, with the basic rules
- Made money in both periods
- 8 2020–2023 and again 2024–2025
- Best backtest
- +158% MNQ (Micro Nasdaq 100), 5-minute chart: account growth 2020–2025
- No new trades after 11:00
- 9 tests made money in both periods, compared with 8 with the basic rules
Made money in both periods
- MNQ (Micro Nasdaq 100), 1-minute
- MNQ (Micro Nasdaq 100), 5-minute
- MNQ (Micro Nasdaq 100), 15-minute
- MES (Micro S&P 500), 1-minute
- MES (Micro S&P 500), 15-minute
- YM (Dow futures), 1-minute
- YM (Dow futures), 5-minute
- YM (Dow futures), 15-minute
The results
Results on every market
Each box shows one backtest of the 15-minute opening range breakout with the basic rules, from 2020 to 2025, after trading costs: the % result, and a small chart of the account balance. The solid line is the account balance and the dashed line is the starting balance. Green results made money; red results lost money. Under each result: whether it made money in both 2020–2023 and 2024–2025, or passed all four of our checks (see "How a test passes" further down).
| Market | 1-minute | 5-minute | 15-minute |
|---|---|---|---|
| MNQ (Micro Nasdaq 100) | +110% Made money in both periods | +158% Made money in both periods | +110% Made money in both periods |
| MES (Micro S&P 500) | +79% Made money in both periods | +38% Made money overall, lost in one period | +62% Made money in both periods |
| YM (Dow futures) | +32% Made money in both periods | +50% Passed all four checks | +12% Passed all four checks |
| RTY (Russell 2000 futures) | −10% Lost money | −18% Too few trades | −13% Too few trades |
All the numbers, test by test
| Market | Chart | Trades | Win rate | Profit factor | Result | Max drawdown | 2020–2023 | 2024–2025 | Monte Carlo drawdown | Trading costs |
|---|---|---|---|---|---|---|---|---|---|---|
| MNQ (Micro Nasdaq 100) | 1-minute | 1,493 | 43.3% | 1.12 | +109.6% | −17.3% | +43.3% | +46.2% | −35.2% | $10,441 |
| MNQ (Micro Nasdaq 100) | 5-minute | 1,490 | 46.4% | 1.16 | +157.5% | −15.6% | +65.4% | +55.7% | −30.4% | $10,601 |
| MNQ (Micro Nasdaq 100) | 15-minute | 1,481 | 49.2% | 1.15 | +110.3% | −16.0% | +53.2% | +37.3% | −28.6% | $8,558 |
| MES (Micro S&P 500) | 1-minute | 1,493 | 40.8% | 1.07 | +79.0% | −25.0% | +71.3% | +4.5% | −43.2% | $34,884 |
| MES (Micro S&P 500) | 5-minute | 1,490 | 42% | 1.04 | +37.9% | −25.0% | +56.5% | −11.9% | −44.2% | $26,828 |
| MES (Micro S&P 500) | 15-minute | 1,483 | 44.6% | 1.07 | +62.4% | −21.9% | +52.0% | +6.9% | −40.1% | $25,616 |
| YM (Dow futures) | 1-minute | 617 | 41.8% | 1.10 | +32.1% | −20.6% | +27.1% | +4.0% | −26.7% | $5,975 |
| YM (Dow futures) | 5-minute | 498 | 44.8% | 1.20 | +50.0% | −23.4% | +26.8% | +18.3% | −19.9% | $4,800 |
| YM (Dow futures) | 15-minute | 269 | 44.2% | 1.10 | +11.8% | −13.0% | +4.6% | +6.8% | −18.8% | $2,595 |
| RTY (Russell 2000 futures) | 1-minute | 227 | 38.3% | 0.91 | −10.2% | −20.2% | −9.9% | −0.3% | −26.9% | $2,158 |
| RTY (Russell 2000 futures) | 5-minute | 92 | 39.1% | 0.57 | −18.0% | −22.4% | −18.0% | 0.0% | −22.8% | $913 |
| RTY (Russell 2000 futures) | 15-minute | 90 | 41.1% | 0.68 | −12.5% | −21.0% | −15.2% | +3.2% | −18.8% | $895 |
Profit factor is the money won divided by the money lost. Above 1 means the test made money. Max drawdown is the biggest fall from the highest balance. 2020–2023 and 2024–2025 show the result in each period on its own. Monte Carlo drawdown: we shuffled the trades into a random order 1,000 times; in 95% of those runs, the worst drawdown was this number or less. Result is the change in the account, with the risk of each trade set to 1% of the account at that time.
The account balance
The best test and the middle test
What we found
What the 12 backtests show
With the same rules, trading the 15-minute range made much more money than trading the 5-minute range (09:30 to 09:35). We tested the 5-minute range on the same 4 markets, but only on the 1-minute and 5-minute charts, because a 15-minute chart cannot show a 5-minute range. That makes 8 tests (see the table 'The 15-minute range against the 5-minute range' below). With the 15-minute range, 6 of the 8 tests made money. With the 5-minute range, 5 of the 8 did. And 5 of the 8 made money in both 2020–2023 and 2024–2025 with the 15-minute range, compared with 2 of the 8 with the 5-minute range. On MNQ, the 15-minute range made +109.6% (1-minute chart) and +157.5% (5-minute chart), compared with +4.1% and +31.4% with the 5-minute range. On MES, the 15-minute range made +79.0% and +37.9%, compared with losses of 9.6% and 21.9%. On these two markets, the biggest fall from the highest balance was also smaller: 15.6% to 25.0%, compared with 35.9% to 44.3%. RTY was the only market where the 15-minute range made less money, and it traded on far fewer days (see finding 4).
With the 15-minute range, fewer trades hit the stop-loss, and more were still open at 16:00 New York time. On MNQ and MES, the 15-minute range was usually about 1.5 times as big as the 5-minute range, in points. On MNQ, the typical 15-minute range was 72 points, compared with 48 for the 5-minute range. These are medians: on half of the days, the range was smaller. So the stop-loss was further away, and the 2R take-profit was further away too. On MNQ and MES, on the 1-minute and 5-minute charts, 49.5% of the trades hit the stop-loss, compared with 60.6% with the 5-minute range. 29.7% were still open at 16:00 and closed then, compared with 9.9%. Of the trades that closed at 16:00, 75.3% made money. So the win rate (the share of trades that made money, after costs) was 43.1%, compared with 37.1%. The wider stop-loss also meant fewer contracts per trade, and costs are paid per contract. On MES, trading costs were 3.4% (1-minute chart) and 3.1% (5-minute chart) of what each trade risked, compared with 4.8% and 4.2% with the 5-minute range.
We tested three exits: a 1R take-profit, the 2R take-profit of the basic rules, and no take-profit (hold until 16:00). On MNQ, the 2R take-profit made the most money on all three charts (see the table '1R, 2R or hold until 16:00?' below). With the 1R take-profit, which is as far away as the stop-loss, more trades won: 51.9% to 55.0% on MNQ. But MNQ made only +26.5% to +82.4%, and MES lost money on all three charts. Holding until 16:00 made +65.2% to +149.0% on MNQ. Holding only changes the trades that reach the 2R take-profit: 11.3% to 19.0% of the MNQ trades, depending on the chart. Held until 16:00, those trades would have made a little less on average. The 5-minute range showed the opposite on MNQ. With the 5-minute range, holding until 16:00 made far more than the 2R take-profit: +103.4% and +111.4% on the 1-minute and 5-minute charts, compared with +4.1% and +31.4%. On MES, holding made more than the 2R take-profit from 2020 to 2025, but it lost money in 2024–2025 on all three charts.
On YM and RTY, the 15-minute range was often so big that even one contract risked more than 1% of the account. YM and RTY are E-mini contracts, ten times the size of their micro versions. The backtest skipped any day when one contract would risk more than 1% of the account: $500 at the start. On a typical day (the median), the 15-minute range alone was 121 points on YM, which is $605 per contract, and 12.5 points on RTY, which is $625. So YM traded on 617 out of 1,496 trading days on the 1-minute chart, 498 on the 5-minute chart and 269 on the 15-minute chart. On charts with longer candles, the breakout candle often closes further past the range, so the stop-loss is further away and more days were skipped. RTY traded on only 227 days on the 1-minute chart, 92 on the 5-minute chart and 90 on the 15-minute chart, and it lost money on all three. YM made money in both 2020–2023 and 2024–2025 on all three charts, and passed all four of our checks on the 5-minute and 15-minute charts. But YM only traded on days when one contract fit the 1% risk, which were days with a smaller range. So the YM results show the strategy on small-range days only.
With the 15-minute range, the sells made money too. R is the risk of one trade: a loss at the stop-loss costs 1R, which is 1% of the account at the time of the trade. On MNQ and MES (1-minute and 5-minute charts together), the sells made +39.3R and +11.6R, while with the 5-minute range they lost 28.2R and 57.9R.
5 or 15 minutes
The 15-minute range against the 5-minute range
Each row is one market and chart, tested with the same rules and two different opening ranges. The 5-minute range is 09:30 to 09:35 New York time, and the 15-minute range is 09:30 to 09:45. The first two result columns show the change in the account from 2020 to 2025, after trading costs. The next two show the change during 2020–2023 only, and the last two the change during 2024–2025 only.
| Market | Chart | 5-minute range, 2020–2025 | 15-minute range, 2020–2025 | 5-minute range, 2020–2023 | 15-minute range, 2020–2023 | 5-minute range, 2024–2025 | 15-minute range, 2024–2025 |
|---|---|---|---|---|---|---|---|
| MNQ | 1-minute | +4.1% | +109.6% | −25.8% | +43.3% | +40.3% | +46.2% |
| MNQ | 5-minute | +31.4% | +157.5% | −3.4% | +65.4% | +36.1% | +55.7% |
| MES | 1-minute | −9.6% | +79.0% | +18.5% | +71.3% | −23.7% | +4.5% |
| MES | 5-minute | −21.9% | +37.9% | +20.6% | +56.5% | −35.2% | −11.9% |
| YM | 1-minute | +24.1% | +32.1% | +4.9% | +27.1% | +18.3% | +4.0% |
| YM | 5-minute | +13.7% | +50.0% | +23.7% | +26.8% | −8.1% | +18.3% |
| RTY | 1-minute | +12.7% | −10.2% | +7.1% | −9.9% | +5.2% | −0.3% |
| RTY | 5-minute | −5.9% | −18.0% | −5.9% | −18.0% | 0.0% (break-even, 134 trades) | 0.0% (break-even, 13 trades) |
The 5-minute range results are the same as on our 5-minute opening range breakout page. On YM and RTY, the two ranges did not trade on the same days. A day was skipped when one contract risked more than 1% of the account. The 15-minute range puts the stop-loss further away, so it skipped more days. YM traded on 874 days with the 5-minute range on both charts, and on 617 (1-minute chart) and 498 (5-minute chart) with the 15-minute range. RTY traded on 845 (1-minute chart) and 486 (5-minute chart) days with the 5-minute range, and on 227 and 92 with the 15-minute range.
How the trades ended
Fewer stop-losses and take-profits, more trades open at 16:00
The cards count all the trades on MNQ and MES, on the 1-minute and 5-minute charts, from 2020 to 2025, with the basic rules. That is 5,966 trades with the 15-minute range and 5,968 with the 5-minute range. Every trade ended in one of three ways: at the stop-loss, at the 2R take-profit, or at 16:00. The first three cards show the share of trades that ended each way, and the last card shows the win rate. The big number is for the 15-minute range. The small text under it is for the 5-minute range.
- Hit the stop-loss
- 49.5% 60.6% with the 5-minute range
- Reached the 2R take-profit
- 20.8% 29.5% with the 5-minute range
- Still open at 16:00, and closed then
- 29.7% 9.9% with the 5-minute range
- Made money after costs (the win rate)
- 43.1% 37.1% with the 5-minute range
A trade still open at 16:00 can close with a profit or a loss. With the 15-minute range, 75.3% of the trades that closed at 16:00 made money. With the 5-minute range, 76.4% did.
The exit
1R, 2R or hold until 16:00?
Each row is one market and chart, tested with three exits. All three exits use the same entry and the same stop-loss: the other side of the 15-minute range. The 1R take-profit is as far from the breakout candle's close as the stop-loss, and the 2R take-profit is twice as far. 'Hold until 16:00' has no take-profit. Each cell shows the change in the account from 2020 to 2025, after trading costs, and the win rate: the share of trades that made money.
| Market | Chart | 1R take-profit | 2R take-profit (basic rules) | Hold until 16:00 |
|---|---|---|---|---|
| MNQ | 1-minute | +26.5%, win rate 51.9% | +109.6%, win rate 43.3% | +88.0%, win rate 41.3% |
| MNQ | 5-minute | +53.7%, win rate 53.1% | +157.5%, win rate 46.4% | +149.0%, win rate 45.0% |
| MNQ | 15-minute | +82.4%, win rate 55.0% | +110.3%, win rate 49.2% | +65.2%, win rate 48.4% |
| MES | 1-minute | −26.1%, win rate 50.7% | +79.0%, win rate 40.8% | +88.3%, win rate 37.8% |
| MES | 5-minute | −29.2%, win rate 50.8% | +37.9%, win rate 42.0% | +61.3%, win rate 39.7% |
| MES | 15-minute | −12.3%, win rate 51.6% | +62.4%, win rate 44.6% | +100.5%, win rate 43.0% |
In 2024–2025 alone, holding until 16:00 lost money on MES on all three charts: −9.0% (1-minute chart), −16.1% (5-minute chart) and −8.5% (15-minute chart). In those two years, the 2R take-profit made +4.5% and +6.9% on MES's 1-minute and 15-minute charts, and lost 11.9% on its 5-minute chart. We left YM and RTY out of this table, because with each exit they traded on different days. Each exit left the account at a different balance, so one contract fit the 1% risk on different days.
The strategy
What the 15-minute opening range breakout is
The opening range is the highest and the lowest price of the first minutes after a market opens. The 15-minute opening range breakout (ORB) uses the first 15 minutes after the New York stock market opens: 09:30 to 09:45 New York time. Index futures (futures that follow a stock index, like the Nasdaq 100) trade almost 24 hours a day, but this range uses the stock market's opening time. A breakout is a candle that closes outside the range. A common way to trade it: buy when a candle closes above the range, and sell short (sell first, to profit if price falls) when a candle closes below it. Traders expect the first move out of the range to keep going. Some traders prefer 15 minutes to 5 minutes, because they think a 5-minute range is too small and breaks too easily. For the 5-minute range, see the 5-minute opening range breakout under 'Related strategies we tested', at the bottom of this page. We tested 4 US stock index futures. MNQ (Micro Nasdaq 100) and MES (Micro S&P 500) follow the same prices as NQ (E-mini Nasdaq 100) and ES (E-mini S&P 500). A micro contract makes or loses one tenth as much money per point. YM (Dow) and RTY (Russell 2000) are E-mini contracts, ten times the size of their micro versions (MYM and M2K). Our data has no MYM or M2K, so we tested YM and RTY. We used 1-minute, 5-minute and 15-minute charts. The range is the same on all three charts. The chart only decides which candle close counts as the breakout. On the 15-minute chart, the range is the 09:30 to 09:45 candle, and a breakout needs a later 15-minute candle to close outside it.
- Opening range
- 09:30 to 09:45 New York time, the first 15 minutes of the stock market session
- Breakout
- A candle closes above the range high (buy) or below the range low (sell)
- Stop-loss
- The other side of the opening range
- Take-profit
- 2R: 2 times the distance from the breakout candle's close to the stop-loss. A trade still open at 16:00 New York time closes then.
- Trades per day
- 1 at most: the first breakout
- Risk per trade
- 1% of the account, rounded down to whole contracts. No trade that day if one contract risks more than 1%.
- Fills (the price an order is done at)
- The stop-loss fills at its price, or at a candle's open if price opens past it. The take-profit fills at its exact price when price reaches it. When price reaches both in the same candle, the backtest looks at the 1-minute candles inside it to see which came first. If both are in the same 1-minute candle, the backtest counts the stop-loss.
- Price data
- BacktestingMax's futures data. It is built from CFD prices: a broker's price that follows the same index. It is adjusted to trade like the real contracts: the futures price, the trading hours, the tick (the smallest price step) and the roll (the switch from one contract month to the next). It is not exchange data.
- Trading costs
- A trade pays half a tick of spread (the gap between the buy and the sell price) when it opens, and half a tick when it closes. One tick is 0.25 points ($0.50) on MNQ, 0.25 points ($1.25) on MES, 1 point ($5) on YM and 0.1 points ($5) on RTY. A take-profit pays no spread when it closes. Every trade also pays a commission when it opens and again when it closes: $0.62 per MNQ or MES contract, and $2.50 per YM or RTY contract.
The rules we tested
- Each trading day, mark the opening range: the highest and the lowest price from 09:30 to 09:45 New York time. On the 1-minute chart, the range is the 15 candles from 09:30 to 09:45. On the 5-minute chart, it is 3 candles, and on the 15-minute chart, it is the one candle from 09:30 to 09:45.
- After 09:45, buy when a candle closes above the range high. Sell (go short) when a candle closes below the range low. The trade opens at the next candle's open. A breakout counts on any candle that closes before 16:00 New York time.
- Put the stop-loss at the other side of the range: at the range low for a buy, and at the range high for a sell.
- R is the risk of the trade: the distance from the close of the breakout candle to the stop-loss. A loss of 1R costs 1% of the account (see the sizing rule below). Put the take-profit 2R from that close, in the direction of the trade.
- If the trade is still open at 16:00 New York time, close it then.
- Take only the first breakout of the day, win or lose. After that trade, wait for the next day.
- Size every trade so that a loss at the stop-loss costs 1% of the account balance at that time. Futures trade in whole contracts, so round down to a whole number of contracts. If even one contract would risk more than 1% of the account, skip the day. The size is worked out from the breakout candle's close, so a loss at the stop-loss can cost a little more or less than 1%.
- Don't trade on days the New York Stock Exchange is closed or closes early (at 13:00).
The method
How we tested it
The test
- Markets
- MNQ (Micro Nasdaq 100), MES (Micro S&P 500), YM (Dow futures) and RTY (Russell 2000 futures)
- Charts
- 1-minute, 5-minute and 15-minute candles
- Dates
- January 2020 to December 2025
- Account
- $50,000, risking 1% of the account on each trade
- Trading costs
- Included. Every trade pays that market's normal trading cost: the spread, which is the gap between the buy price and the sell price.
How a test passes
We call a test passed only if it meets all four checks. A strategy can make money in one backtest and still fail one of these checks.
- At least 100 trades. With fewer trades, a good result could be luck.
- It made money from 2020 to 2023 and again from 2024 to 2025. This shows whether the strategy kept working in the newer years, not only in the older ones.
- A profit factor (the money won divided by the money lost) of at least 1.2 from 2024 to 2025, after trading costs.
- In 95% of 1,000 random shuffles of the trades, the account must not fall more than 30% from its highest point.
Improvements
Can the 15-minute opening range breakout be improved?
Besides the basic rules, we tested four versions of the 15-minute ORB. Each one changes one rule, the way traders often do: a 1R take-profit, no take-profit (hold until 16:00), a stop-loss at the middle of the range, or no new trades after 11:00. The table below explains each one. Each version ran on the same 12 tests. We picked the best version using 2020–2023 only. The best version is the one that made money in the most tests. In a tie, it is the one with the better middle result (the median of the 12 tests). Then we checked it on 2024–2025, the years we did not use to pick it. If you pick a version and judge it on the same years, it almost always looks better than it really is.
| Version | Made money 2020–2023years used to pick the best version | Made money 2024–2025years not used to pick it | Made money in both periods | Passed all four checks |
|---|---|---|---|---|
| Basic rules The rules under 'The rules we tested': the stop-loss at the other side of the range, and a 2R take-profit. | 9 of 12middle test +35.2% | 9 of 12middle test +5.7% | 8 | 2 |
| 1R take-profit Take profit at 1R instead of 2R: as far from the breakout candle's close as the stop-loss. Many traders use this 1:1 target, because more trades reach it. | 6 of 12middle test −1.1% | 8 of 12middle test +4.7% | 5 | 2 |
| Hold until 16:00, no take-profit No take-profit. The trade ends at the stop-loss, or at 16:00 New York time. Some day traders hold an opening range breakout all day, because a strong move can go far past 2R. | 9 of 12middle test +24.4% | 7 of 12middle test +16.9% | 6 | 2 |
| Stop-loss at the middle of the range Put the stop-loss halfway between the range high and the range low, instead of at the other side. The 15-minute range is wide, and a stop-loss at the middle is about half as far away. So with the same 1% risk, you trade about twice as many contracts, and the 2R take-profit is closer too. On YM and RTY, one contract then fits the 1% risk on many more days. | 8 of 12middle test +14.4% | 12 of 12middle test +13.8% | 8 | 0 |
| No new trades after 11:00Best on 2020–2023 A breakout only counts on a candle that closes by 11:00 New York time. If price has not broken out of the range by then, there is no trade that day. Some traders stop looking for opening range breakouts late in the morning, because they expect late breakouts to fail. A trade that opened by 11:00 still ends at the stop-loss, the 2R take-profit or 16:00. | 10 of 12middle test +31.3% | 10 of 12middle test +7.0% | 9 | 1 |
No change clearly beat the basic rules. Using 2020–2023, we picked 'no new trades after 11:00'. It made money in 10 of 12 tests in 2020–2023, compared with 9 with the basic rules. But the one extra test that made money was RTY on the 1-minute chart, and the 11:00 rule itself was not the reason. With the 11:00 rule, the RTY account had a higher balance, and 1% of it was more money. So one contract fit the 1% risk on more days: 349 days instead of 227. On MNQ and MES, the 11:00 rule only removed the trades that opened after 11:00: 1.6% to 9.3% of the trades. The 11:00 rule lowered the 2020–2025 result in 5 of the 6 MNQ and MES tests. In all 12 tests together, the 520 trades that opened after 11:00 made +46.1R. So in this backtest, late breakouts were worth taking. In 2024–2025, the 11:00 rule made money in 10 of 12 tests, compared with 9, and again the extra test was RTY on the 1-minute chart. The stop-loss at the middle of the range made money in all 12 tests in 2024–2025, but in only 8 in 2020–2023. From 2020 to 2025, it lost money on MES on the 1-minute and 5-minute charts. On YM and RTY, it traded on many more days than the basic rules, so those results do not compare directly. On MNQ, only the 1R take-profit passed all four of our checks, on the 5-minute and 15-minute charts. But on those two charts, the 1R take-profit made less money than the basic rules: +53.7% and +82.4%, compared with +157.5% and +110.3%. The 1R take-profit also lost money on MES on all three charts.
Passed all four checks with no new trades after 11:00
- YM (Dow futures), 5-minute
Questions
Questions traders ask
Does the 15-minute ORB work on NQ?
In our backtest of the 15-minute opening range breakout (ORB), yes. We tested MNQ, the micro contract that follows the same price as NQ. The basic rules put the stop-loss at the other side of the 09:30 to 09:45 range, and the take-profit at 2 times the distance to the stop-loss. Each trade risked 1% of the account. From 2020 to 2025, the account grew 109.6% on the 1-minute chart, 157.5% on the 5-minute chart and 110.3% on the 15-minute chart. On all three charts, 2020 was a losing year, but 2020–2023 as a whole made money, and so did 2024–2025. The biggest fall from the highest balance was 15.6% to 17.3%. Still, none of the three passed all four of our checks (see 'How a test passes'). On the 1-minute and 15-minute charts, the profit factor in 2024–2025 was below 1.2. On the 1-minute and 5-minute charts, the Monte Carlo drawdown was over 30%. On the MNQ 1-minute and 5-minute charts, the 5-minute ORB made only +4.1% and +31.4%.
What is the success rate of the ORB strategy?
In our backtest of the 15-minute ORB, 40.8% to 49.2% of the trades on MNQ and MES made money, after trading costs. That is with a take-profit at 2 times the distance to the stop-loss (2R). On both markets, the win rate was higher on charts with longer candles. On MNQ, it was 43.3% on the 1-minute chart, 46.4% on the 5-minute chart and 49.2% on the 15-minute chart. With the 5-minute ORB and a 2R take-profit, the win rate on MNQ and MES was lower: 36.3% to 39.0%. With a 1R take-profit, 50.7% to 55.0% of the 15-minute ORB trades on MNQ and MES won, but MNQ made less money and MES lost money on all three charts. So a higher win rate did not always mean more money.
Is the 15-minute ORB better than the 5-minute ORB?
On MNQ and MES, yes in our backtest. With the same rules, on the 1-minute and 5-minute charts, the 15-minute range made +109.6% and +157.5% on MNQ from 2020 to 2025. The 5-minute range made +4.1% and +31.4%. On MES, the 15-minute range made +79.0% and +37.9%, and the 5-minute range lost 9.6% and 21.9%. On both markets, the biggest fall from the highest balance was also smaller with the 15-minute range: 15.6% to 25.0%, compared with 35.9% to 44.3%. The 15-minute range is wider, so fewer trades hit the stop-loss and more were still open at 16:00. On MES, trading costs also took a smaller part of what each trade risked, because each trade used fewer contracts and costs are paid per contract. On YM, the 15-minute range made more too, but the two ranges traded on different days, so they do not compare directly. On RTY, the 5-minute range did better, but with the 15-minute range RTY traded on far fewer days: 227 and 92, compared with 845 and 486.
Which chart is best for the 15-minute ORB?
No chart was best on every market. The range is the same on all three charts: the chart only decides which candle close counts as the breakout. On the 1-minute chart, half of the trades opened by 09:51 on MNQ and 09:52 on MES (New York time). On the 5-minute chart, half opened by 09:55 on MNQ and 10:00 on MES, and on the 15-minute chart, by 10:15 on both. On charts with longer candles, the breakout candle often closes further past the range. So the stop-loss is further away, and you trade fewer contracts. On MNQ, the 5-minute chart did best: +157.5%, compared with +109.6% (1-minute chart) and +110.3% (15-minute chart). On MES, the 1-minute chart did best from 2020 to 2025 (+79.0%), but the 15-minute chart did best in 2024–2025 (+6.9%).
Keep exploring
Related strategies we tested
Opening range breakout 5-minute opening range breakout backtest on NQ and ES futures Made money in 5 of 8 tests, 2 of them in both periods. Best: MNQ (Micro Nasdaq 100), 5-minute, +31% Sessions New York open breakout backtest on NQ, ES and gold futures Made money in 0 of 10 tests, 0 of them in both periods. Best: RTY (Russell 2000 futures), 15-minute, −6% Sessions London breakout strategy backtest on forex and gold Made money in 5 of 18 tests, 4 of them in both periods. Best: USD/JPY, 5-minute, +43%The strategy code we ran
This is the exact code from the BacktestingMax strategy engine. Paste it into the strategy editor in the app to run it on any market.
class OpeningRangeBreakout15Min(Strategy):
"""The 15-minute opening range breakout (ORB) on US stock index futures, as day
traders learn it, plus the changes they argue about.
The opening range is the highest and the lowest price of the first 15 minutes of the
New York stock market session: 09:30 to 09:45 New York time (daylight saving
included). On a 1-minute chart that is the first 15 candles; on a 5-minute chart, the
first 3; on a 15-minute chart, the first candle. Index futures trade almost around
the clock, but this strategy only looks at the stock market's hours, 09:30 to 16:00
New York.
Standard (all switches off): after 09:45, the first candle that closes above the
range high is a buy, and the first candle that closes below the range low is a sell
(go short). The trade opens at the next candle's open. The stop-loss sits at the
other side of the range: the range low for a buy, the range high for a sell. The
take-profit sits 2 times the risk away (2R), the risk being the distance from the
breakout candle's close to the stop-loss. A trade still open at 16:00 New York closes
then. One trade a day: the first breakout, win or lose. Size every trade so that the
stop-loss costs 1% of the account; if one contract would risk more, skip the day. No
trading on days the New York Stock Exchange is closed or closes early (13:00).
The changes, one at a time:
exit_rr = 1.0 the take-profit sits 1R away instead of 2R
hold = 1 no take-profit: only the stop-loss or the 16:00 close ends the trade
mid_stop = 1 the stop-loss sits at the middle of the range instead of the other
side (about half the risk, so the 2R target is closer too)
cutoff = 1 a breakout only counts on a candle that closes by 11:00 New York;
if there is none by then, no trade that day
range_minutes = 5 is the 5-minute opening range (09:30 to 09:35), for comparison.
"""
params = {"range_minutes": Param(type=int, default=15, min=1, max=60),
"exit_rr": Param(type=float, default=2.0, min=0.5, max=10.0),
"hold": Param(type=int, default=0, min=0, max=1),
"mid_stop": Param(type=int, default=0, min=0, max=1),
"cutoff": Param(type=int, default=0, min=0, max=1)}
lookback = 2
session_open = 570 # 09:30 New York, in minutes after midnight
last_entry = 660 # 11:00 New York: the latest breakout close with cutoff = 1
session_close = 960 # 16:00 New York
# Days with no trading, 2020-2025: the New York Stock Exchange is closed, or it
# closes early at 13:00.
closed_days = (
"2020-01-01 2020-01-20 2020-02-17 2020-04-10 2020-05-25 2020-07-03 2020-09-07 2020-11-26 "
"2020-11-27 2020-12-24 2020-12-25 "
"2021-01-01 2021-01-18 2021-02-15 2021-04-02 2021-05-31 2021-07-05 2021-09-06 2021-11-25 "
"2021-11-26 2021-12-24 "
"2022-01-17 2022-02-21 2022-04-15 2022-05-30 2022-06-20 2022-07-04 2022-09-05 2022-11-24 "
"2022-11-25 2022-12-26 "
"2023-01-02 2023-01-16 2023-02-20 2023-04-07 2023-05-29 2023-06-19 2023-07-03 2023-07-04 "
"2023-09-04 2023-11-23 2023-11-24 2023-12-25 "
"2024-01-01 2024-01-15 2024-02-19 2024-03-29 2024-05-27 2024-06-19 2024-07-03 2024-07-04 "
"2024-09-02 2024-11-28 2024-11-29 2024-12-24 2024-12-25 "
"2025-01-01 2025-01-09 2025-01-20 2025-02-17 2025-04-18 2025-05-26 2025-06-19 2025-07-03 "
"2025-07-04 2025-09-01 2025-11-27 2025-11-28 2025-12-24 2025-12-25")
def init(self, ctx):
self.ny = ctx.clock("America/New_York")
self.no_trading = set(self.closed_days.split())
self.day = None
self.high = None # the opening range high
self.low = None # the opening range low
self.has_open = False # True once the 09:30 candle has been seen today
self.done = True # True once today's trade has been placed (or the day is skipped)
def on_bar(self, ctx):
start = self.ny.minute_of_day # this candle's open, New York time
end = start + ctx.timeframe_minutes # this candle's close
range_end = self.session_open + ctx.params.range_minutes
if self.ny.date != self.day: # a new day: forget yesterday's range
self.day = self.ny.date
self.high = self.low = None
self.has_open = False
self.done = self.day in self.no_trading
if ctx.position is not None:
if end >= self.session_close or start < self.session_open:
ctx.close_position() # fills at the 16:00 candle's open
return
# Build the opening range from the candles that open from 09:30 to 09:45.
if self.session_open <= start < range_end:
if start == self.session_open:
self.has_open = True
self.high = ctx.high[0] if self.high is None else max(self.high, ctx.high[0])
self.low = ctx.low[0] if self.low is None else min(self.low, ctx.low[0])
return
if self.done or start < range_end or end >= self.session_close:
return
if ctx.params.cutoff == 1 and not ctx.gate("breakout_by_1100", end <= self.last_entry):
self.done = True # no breakout by 11:00: no trade today
return
if not ctx.gate("full_opening_range", self.has_open and self.high is not None and self.high > self.low):
self.done = True
return
close = ctx.close[0]
up = close > self.high
down = close < self.low
if not ctx.gate("range_break", up or down):
return
self.done = True # one trade a day: this breakout is it
if ctx.params.mid_stop == 1:
stop = (self.high + self.low) / 2
else:
stop = self.low if up else self.high
risk = abs(close - stop)
if risk <= 0:
return
size = ctx.size_by_risk_pct(0.01, stop=stop, entry=close)
if not ctx.gate("one_contract_fits_1pct_risk", size > 0):
return # one contract would risk more than 1%
target = None
if ctx.params.hold == 0:
target = close + ctx.params.exit_rr * risk if up else close - ctx.params.exit_rr * risk
if up:
ctx.buy(size=size, sl=stop, tp=target, tag="orb15_long")
else:
ctx.sell(size=size, sl=stop, tp=target, tag="orb15_short")
Your turn
Test the 15-minute opening range breakout yourself
Change the settings, the market or the stop-loss and see the result in seconds. Ask the BacktestingMax AI: Backtest a 15-minute opening range breakout on MNQ, 5-minute chart: range 09:30 to 09:45 New York, stop at the other side of the range, 2R take-profit, exit at 16:00
.
Free account. No credit card needed.
See every strategy we tested Browse strategies shared by tradersBacktest on historical data with trading costs, run by BacktestingMax. Past results do not guarantee future results, and nothing here is financial advice. Updated 26 October 2026.