Daily volatility contraction engine capturing explosive directional expansion via M15 breakout triggers
Requires a confirmed D1 NR7 candle where the daily range is strictly lower than the prior 6 days. Best traded on pairs with average daily range (ADR) expansion potential during the London session. Avoid trading when high-impact USD, EUR, or GBP macroeconomic data (such as NFP, CPI, or Rate Decisions) is scheduled within 60 minutes of the session window, as unpredictable slippage degrades structural breakout edges.
Validate every condition prior to executing order.
The daily GBPUSD candle formed a tight 40-pip NR7 range. During the 08:15 UTC candle, an M15 bar closed cleanly above the NR7 high at 1.2750. H4 price was comfortably above the 50 EMA. Price surged without retracing, hitting the 1.5R partial target in 45 minutes, while the remaining half trended higher before closing out on an M15 20 EMA cross at 1.2810.
EURUSD printed an NR7 compression day. At 07:45 UTC, an M15 candle closed above the NR7 high. Long entry was taken at 1.0850 with a stop loss at the opposite level (30 pips away). However, low institutional participation caused a sudden reversal back into the range, stopping out the position before 1.5R could be reached.
Copy code directly into TradingView Pine Editor
//@version=5
strategy("NR7 Compression Breakout Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=1)
// Inputs
useH4Filter = input.bool(true, title="Use H4 50 EMA Trend Filter")
startHour = input.int(7, title="Session Start Hour (UTC)")
endHour = input.int(12, title="Session End Hour (UTC)")
riskReward = input.float(1.5, title="Partial TP Risk-Reward Ratio")
// Daily Range Calculation
dailyHigh = request.security(syminfo.tickerid, "D", high[1], barmerge.gaps_off, barmerge.lookahead_on)
dailyLow = request.security(syminfo.tickerid, "D", low[1], barmerge.gaps_off, barmerge.lookahead_on)
// NR7 Condition (Narrowest range of last 7 days)
r1 = high[1] - low[1]
r2 = high[2] - low[2]
r3 = high[3] - low[3]
r4 = high[4] - low[4]
r5 = high[5] - low[5]
r6 = high[6] - low[6]
r7 = high[7] - low[7]
isNR7 = r1 < r2 and r1 < r3 and r1 < r4 and r1 < r5 and r1 < r6 and r1 < r7
// H4 EMA Filter
h4Close = request.security(syminfo.tickerid, "240", close, barmerge.gaps_off, barmerge.lookahead_on)
h4EMA = request.security(syminfo.tickerid, "240", ta.ema(close, 50), barmerge.gaps_off, barmerge.lookahead_on)
h4Bull = h4Close > h4EMA
h4Bear = h4Close < h4EMA
// Session Time Filter
inSession = (hour >= startHour) and (hour <= endHour)
// Breakout Triggers
longCondition = inSession and isNR7 and ta.crossover(close, dailyHigh) and (not useH4Filter or h4Bull)
shortCondition = inSession and isNR7 and ta.crossunder(close, dailyLow) and (not useH4Filter or h4Bear)
// Strategy Execution
var float entryPrice = na
var float stopLoss = na
if (longCondition and strategy.position_size == 0)
entryPrice := close
stopLoss := math.min(dailyLow, close - (1.5 * ta.atr(14)))
strategy.entry("NR7 Long", strategy.long)
strategy.exit("TP/SL Long", "NR7 Long", stop=stopLoss, limit=entryPrice + ((entryPrice - stopLoss) * riskReward))
if (shortCondition and strategy.position_size == 0)
entryPrice := close
stopLoss := math.max(dailyHigh, close + (1.5 * ta.atr(14)))
strategy.entry("NR7 Short", strategy.short)
strategy.exit("TP/SL Short", "NR7 Short", stop=stopLoss, limit=entryPrice - ((stopLoss - entryPrice) * riskReward))
// Plotting Levels
plot(dailyHigh, "NR7 High", color=color.green, style=plot.style_line)
plot(dailyLow, "NR7 Low", color=color.red, style=plot.style_line)
If both levels are breached within the allowed session window, take the first valid signal that closes outside the range and ignore subsequent signals for that day to prevent over-trading whipsaws.
Yes, but adjustments must be made for 24/7 trading hours by defining the daily candle close precisely at UTC 00:00 rather than traditional Forex market close times.
The H4 50 EMA filter ensures you are trading in alignment with the broader institutional trend, significantly reducing the frequency of false breakouts against dominant market momentum.
The core edge of the NR7 Compression Breakout Strategy model relies on the structural imbalance created when large market participants (commercial banks, liquidity providers, and central clearing desks) aggregate retail stop orders. Rather than anticipating trend continuation from arbitrary retail indicators, this systematic model identifies pre-existing liquidity pools—such as session highs/lows, Asian range extremes, or equal highs/lows (EQH/EQL)—where retail stop losses are heavily clustered.
Once a targeted liquidity sweep occurs and price aggressively rejects back inside the defined equilibrium range, an order flow displacement is confirmed through a Market Structure Break (MSB) or Change of Character (CHoCH). This sequence establishes asymmetric risk-to-reward parameters, allowing traders to enter with tight structural stops positioned outside the invalidated sweep candle.
Higher timeframe (H4/Daily) structural bias must always govern lower timeframe (M15/M5/M1) execution. Trading with the prevailing institutional order flow drastically reduces whipsaws during choppy session opens.
Always factor in spread expansion during high-impact news releases (CPI, NFP, FOMC) and daily 5:00 PM EST session rollover. Never enter within 15 minutes before Tier-1 macroeconomic events.
Move stop loss to break-even once price reaches 1.0R–1.5R target expansion or mitigates an opposing Fair Value Gap (FVG), neutralizing risk on active positions.
To successfully navigate proprietary trading evaluation stages without breaching maximum daily drawdown (typically 4%–5%) or maximum overall loss limits (8%–10%), this model must be deployed with disciplined position sizing:
On a $100,000 challenge account, limit single trade exposure to $500. This ensures you can survive a theoretical 6-trade drawdown streak while consuming less than 3% of your daily buffer.
If two consecutive setups trigger stop-loss invalidations within the same trading session, trading must be suspended for the remainder of that session to avoid revenge trading and emotional capital destruction.
Discretionary traders can execute this system manually using our pre-trade checklist above, while quantitative and algorithmic traders can deploy the Pine Script logic or connect directly to automated trading software:
Discover compiled MT4/MT5 Expert Advisors executing systematic order blocks around the clock.
Mirror institutional setups automatically into your MT4/MT5 broker account with zero latency.
Access 20+ verified institutional systems across Asian, London, and New York trading sessions.
Quant Note: Backtested across major FX pairs and Gold. Incorporates standard ECN spreads (0.8 pips) and commission of $3.50 per lot per side.
Download a clean, printer-friendly 1-page cheatsheet containing all entry/exit rules and the checklist for your trading desk.
Open Print / PDF ViewSubscribe to receive verified Pine Script algorithms, quantified backtests, and fresh pre-trade checklists directly to your inbox every week.
Download the complete quantitative guide: Position Sizing Formulas, Prop Firm Drawdown Rules, and MQL5 Parameter Cheat Sheets.