Markets › Futures · ES futures, 1-minute

NR7 Trading Strategy Backtest: Does the Narrow Range Breakout Work on ES Futures?

Toby Crabel's NR7 says the narrowest day of the last seven comes before a big move. We checked that claim on S&P 500 futures since 2020, then traded the popular NR7 and NR4 breakouts with costs and against breakouts of ordinary days.

ES (S&P 500 futures) · 1-minute bars · break of the narrow day's high or low, three versions · Protocol v1.0 plus the 8 Oct 2026 rules

Buried · No proven edge

The quiet day stayed quiet.

BornFrozen 22 Oct 2026 (nr7_spec.md), before any range was computed
Died22 Oct 2026

Variants tried: 3 · Passed every gate: 0 · Next day's range after NR7: 0.87x the 20-day average · Holdout opened: yes (already used)

Short answer: not on ES futures from 2020 to 2026. The day after an NR7 day had 0.87x the average range of the previous 20 days, against 1.04x after any day; the NR7 breakout made +$93 a trade after costs, but no more than breakouts of ordinary days, and it lost in the holdout.

00The verdict in three lines

  • Does a narrow range day lead to a big day? Not on ES from 2020 to 2026: the day after an NR7 day had a range of 0.87x the 20-day average, against 1.04x after any day, and it broke both ends of the NR7 day 20.7% of the time, twice as often as usual.
  • Does the NR7 trading strategy pay? The day-trade breakout made +$93 a trade after costs over 268 trades, but no better than breaking out of ordinary days, and it lost in the holdout. Holding two days averaged -$168 a trade; the NR4 breakout -$16.
  • Buried, all three: Fragile (NR7-BO), No proven edge (NR7-2D), Costs (NR4-BO).

01What is the NR7 pattern?

An NR7 day (narrow range 7) is a day whose range, high minus low, is the smallest of the last seven days. Toby Crabel described it in Day Trading with Short Term Price Patterns and Opening Range Breakout (1990): periods of contraction tend to be followed by expansion, so the narrowest day should come before a larger move. NR4 is the same idea over four days.

The popular NR7 breakout, spread by Linda Raschke and others, places a buy stop just above the NR7 day's high and a sell stop just below its low for the next day, takes whichever is hit first, and puts the stop at the other side. Crabel himself entered on a stretch from the next day's opening price; we test the popular version and say so.

02Does contraction lead to expansion? The statistics

Next dayDaysRange vs the previous 20 days (mean)Breaks the high onlyBreaks the low onlyBreaks bothBreaks neither
After an NR7 day2760.87x (median 0.77x)42.8%33.3%20.7%3.3%
After an NR4 day4710.92x (median 0.84x)45.6%32.7%17.6%4.0%
After any day1,7171.04x (median 0.90x)45.8%34.4%10.2%9.6%

Ranges are the regular session (09:30 to 16:00 New York). The day after a narrow day is of course wider than the narrow day itself, but it is narrower than an ordinary day: quiet days come in clusters. And because the narrow day's high and low are close together, the next day breaks both of them twice as often, which is exactly the day a breakout trader is stopped out on the other side.

03The NR7 strategies we tested

  • Setup: an NR7 day (range smaller than each of the previous six regular sessions; a tie does not count), or an NR4 day for NR4-BO.
  • Entry, the next session: a buy stop one tick above the setup day's high and a sell stop one tick below its low, from 09:30 to the close; the first one hit is the trade.
  • Stop: the other side (the other entry level).
  • NR7-BO: out at the session close. NR7-2D: held overnight, out at the next session close. NR4-BO: NR4 days, out at the session close.
  • One contract, $30.76 a round trip; one position at a time.

We fixed these versions on 22 October 2026, before computing a single range. Related ES breakouts: the Initial Balance breakout and the noise area breakout, both buried.

04How we tested it

ES (E-mini S&P 500 futures), NinjaTrader 1-minute history, back-adjusted, January 2020 to 25 September 2026: 1,737 usable regular sessions (early closes from our futures calendar). Costs: $30.76 a round trip per contract (commission plus one tick of slippage on each fill), as in all our ES tests. Periods: 2020 to 2023, 2024 to March 2025, and a holdout from April 2025 already used by earlier ES tests. First-period bar t ≥ 2.5, because breakout rules have been tried many times on this file. Control: the setup days moved together to other days, 500 times; each moved day's own high and low set the levels for the next day, with the same rules. It asks whether a narrow day beats any day. Engine check: NR7, NR4 and ties, an unusable day inside the window, breaks up and down, an open beyond a level, a minute touching both levels, the stop, the session-close and overnight exits, and an independent re-implementation that matched every one of the 947 trades (nr7_selftest_result.txt).

A correction to our own warning: the specification expected fewer than 50 NR7 trades in the validation period, at one day in seven. NR7 days were 16.0% of sessions (quiet days cluster), so NR7-BO had 53 and 59 trades in the last two periods and passed that gate; NR7-2D, which skips setups while it holds, had 40.

05Results: does the NR7 breakout work?

VariantRuleTradesWin rate (95% range)Gross per tradeNet per tradeNet total, 1 contractProfit factorVerdict
NR7-BONR7 day; break of its high or low the next day; stop at the other side; out at the session close26851.5% (46% to 57%)+$123+$93+$24,7941.18Buried
NR7-2DThe same entry and stop, held overnight; out at the next session close22340.8% (35% to 47%)-$137-$168-$37,4090.83Buried
NR4-BONR4 day (narrowest of the last 4); otherwise as NR7-BO45650.7% (46% to 55%)+$15-$16-$7,2890.97Buried
-$40k-$20k$0k$20k$40k2020202120222023202420252026validationholdout*NR7-BONR7-2DNR4-BO

Cumulative net dollars per contract by month. * Holdout already used before this test.

How the trades ended

VariantStoppedClosed at the session closeClosed at the second closeMedian setup rangeMedian risk (entry to stop)Largest drawdown (closed trades)
NR7-BO21.6%78.4%–27.75 pts34.25 pts ($1,713)-$21,282
NR7-2D46.2%0.0%53.8%27.00 pts33.50 pts ($1,675)-$49,740
NR4-BO18.6%81.4%–32.25 pts39.75 pts ($1,988)-$43,689

NR7-BO was profitable on both sides (shorts +$15,376, longs +$9,418), with a win rate near half and most trades closed at the session close. Holding overnight did not help: almost half of the two-day trades were stopped.

06Narrow day or any day?

VariantTradesReal net per tradeMoved days, medianMoved, 5th to 95thPercentile (95 needed)
NR7-BO268+$93-$12-$202 to +$15581.8
NR7-2D223-$168-$40-$332 to +$28024.8
NR4-BO456-$16-$9-$144 to +$10945.4

The control breaks out of the previous day's range on other days, whatever that range was. NR7-BO did better than the median moved day, but only at the 81.8th percentile: about one in five random sets of ordinary days did as well. The narrow-day filter is not shown to add anything.

07By period and by year

Variant2020 to 2023 (trades)2024 to Mar 2025 (trades)Holdout* Apr 2025 to Sep 2026 (trades)t, first periodPF, second period
NR7-BO+$26,976 (156)+$12,370 (53)-$14,552 (59)1.441.60
NR7-2D-$7,473 (132)+$820 (40)-$30,756 (51)-0.291.03
NR4-BO+$18,694 (268)+$8,405 (86)-$34,388 (102)0.761.21
YearNR7-BO net (trades)NR7-2D net (trades)NR4-BO net (trades)
2020-$7,429 (42)-$23,520 (36)-$8,564 (74)
2021+$9,633 (42)+$11,293 (36)+$11,026 (65)
2022+$13,812 (37)-$4,759 (32)+$1,225 (63)
2023+$10,961 (35)+$9,514 (28)+$15,007 (66)
2024+$5,994 (38)+$10,865 (30)+$4,427 (67)
2025+$1,612 (50)-$18,593 (40)-$15,594 (75)
2026 (to 25 Sep)-$9,788 (24)-$22,208 (21)-$14,815 (46)

NR7-BO made money every year from 2021 to 2024 and lost in 2020 and in 2026 so far; all three versions lost in the holdout.

08The gates

VariantTrades1. PF ≥ 1.2 in validation2. ≥ 50 trades in each period3. t ≥ 2.5 on development4. Above the 95th percentile of the moved-day control5. Positive without the 10 best trades6. Holdout net positive (already used)
NR7-BO268passpassfailfailfailfail
NR7-2D223failfailfailfailfailfail
NR4-BO456passpassfailfailfailfail
VariantCauseGates failedVerdict
NR7-BOFragile3, 4, 5, 6Buried
NR7-2DNo proven edge1, 2, 3, 4, 5, 6Buried
NR4-BOCosts3, 4, 5, 6Buried

The data-gap check removed 5, 6 and 5 trades touching a known hole in the data; no verdict changed. Fragile: positive, but negative without its 10 best trades. No proven edge: negative before costs. Costs: positive before costs, negative after.

TWhat this shows, and what to take into your own tests

What the results show

  • The narrow range day did not lead to a wide day on ES. After an NR7 day the next day's range averaged 0.87x the range of the previous 20 days; after any day, 1.04x. Quiet days were followed by quieter-than-usual days.
  • The day after an NR7 broke both its high and its low 20.7% of the time, about twice as often as after an ordinary day (10.2%): a breakout trader is stopped out on the other side more often.
  • The NR7 breakout made +$93 a trade after costs, but breaking out of an ordinary day's range did about as well (81.8th percentile of the control), it was negative without its 10 best trades and it lost in the holdout.

What remains unknown

  • Crabel's own entries, which used a stretch from the opening price rather than the prior day's high and low.
  • NR7 combined with an inside day (NR7-ID) and other filters; we tested the plain pattern.
  • Other markets and longer histories. This is ES from 2020; the pattern was described on 1980s futures.

Why it was buried

The pattern's premise did not hold here: a narrow day was followed by a narrower-than-average day, and its next-day breakouts failed on both sides twice as often as usual. The one profitable version, NR7-BO, earned +$123 a trade before costs, depended on a few big days (-$14,261 without the best 10) and could not be told apart from breakouts of ordinary days.

What you can apply to your own tests

  • Test the premise before the trade. Here a few lines of code show whether narrow days really precede wide ones; on ES they did not.
  • Compare a filter with no filter. A breakout after an NR7 day should beat a breakout after any day; this one did not, clearly.
  • Watch the both-sides breaks: a narrow range puts the stop close, and a day that breaks both ends hits it.

A note on the numbers: drawdown figures are measured on closed trades unless a table says it includes open losses. Open losses inside a trade are not counted in a closed-trade drawdown, so real account risk is higher, especially for systems with no stop. Backtests are not live trading.

FAQCommon questions

What is an NR7 day?

A day whose range (high minus low) is the smallest of the last seven days. Toby Crabel described it in 1990 as a sign of contraction before expansion; NR4 is the same idea over four days.

Does a narrow range day lead to a breakout?

On ES it did not lead to a wider-than-usual day: the next day's range was 0.87x the 20-day average after NR7 days and 1.04x after any day. It did break both ends of the NR7 day 20.7% of the time, twice as often as usual.

Is the NR7 trading strategy profitable?

In our test the day-trade breakout made +$93 a trade after $30.76 costs over 268 trades, but it ranked only at the 82th percentile against breakouts of ordinary days and lost in the holdout. Holding two days averaged -$168 a trade and the NR4 version -$16.

How do you trade the NR7 pattern?

The popular version places a buy stop just above the NR7 day's high and a sell stop just below its low for the next day, takes the first one hit and puts the stop at the other side. Crabel himself entered on a stretch from the next day's open, which we did not test.

How was the NR7 strategy tested?

On ES futures 1-minute data from 2020 to 2026, regular-session daily ranges, one contract, with rules written and dated before the data was run, costs included on every trade, results split into development, validation and holdout periods, a random-entry control as the benchmark, and every variant reported. Read the protocol.

09Check our arithmetic

Frozen specificationThe NR7 and NR4 definitions, the three versions, costs, periods, gates and control, dated before any range was computed.
nr7_spec.md
CodeThe engine (its readings of the rules at the top), the independent re-implementation, the self-test and the run (node nr7_run.js). Needs your own ES 1-minute history.
nr7_lib.js · nr7_ref.js · nr7_selftest.js · nr7_run.js
Shared code it usesThe futures loader, the exchange calendar, statistics and control helpers.
control_audit_lib.js · em_lib.js · gh_lib.js · hourly_lib.js · ma_lib.js · rb_lib.js · rsi2_protocol.js
ResultsSelf-test result, the console output of the run (with the range statistics) and all numbers.
nr7_selftest_result.txt · nr7_results.txt · nr7_summary.json
Trade logs (CSV)Every trade: entry day, setup day, entry and exit (New York time), direction, setup range, entry, stop, exit, risk in points, exit reason, gross and net dollars and R.
NR7-BO · NR7-2D · NR4-BO

Code provenance: our own code, written from the specification.

10Data notes

Source. NinjaTrader ES 1-minute history, back-adjusted continuous contract, on the New York clock. Back-adjustment shifts every price of a contract equally, so daily ranges are unchanged. A session needs its 09:31 bar and at least 300 one-minute bars (150 on an early-close day). Fills: stop orders at their level, or a minute's open if it gapped through; one tick of slippage per fill is in the cost.

11Corrections

None since publication.

+More tests and guides