The rules at a glance
- Market: EURUSD or GBPUSD on the 15-minute chart
- Range: the high and low from 8 to 9:30 a.m. New York time (17:30 to 19:00 IST in US summer time, 18:30 to 20:00 in winter), including the 8:30 data candle
- Range size: between 0.15 and 0.6 times the daily ATR (14)
- Entry: the first 15-minute candle between 9:30 and 11:30 a.m. New York time that closes beyond the range by at least a tenth of the ATR; enter at that close
- Stop loss: the middle of the range (the other side, as a setting)
- Target: twice the risk (2R); one trade a day, closed by noon New York time
Why the opening range includes the data
Most big US releases, such as the jobs report and inflation figures, come out at 8:30 a.m. New York time. The first candles after them can jump both ways. Instead of guessing the direction, this strategy lets the reaction happen and marks the whole range from 8:00 to 9:30. When the US stock market opens at 9:30 and the price later closes outside that range, the market has picked a side.
For gold there's a different New York setup on this site: the XAUUSD New York session strategy trades the break of the London range instead.
The timings in IST
All the times are fixed in New York time, so the IST times move by an hour when US clocks change. US clocks go back on 1 November 2026.
| New York time | IST, US summer time | IST, US winter time | |
|---|---|---|---|
| Range starts | 08:00 | 17:30 | 18:30 |
| US data (most releases) | 08:30 | 18:00 | 19:00 |
| US stock market opens, range ends | 09:30 | 19:00 | 20:00 |
| Breakout window | 09:30–11:30 | 19:00–21:00 | 20:00–22:00 |
| Close any open trade | 12:00 | 21:30 | 22:30 |
The rules, step by step
1. Mark the opening range
On a 15-minute EURUSD chart, mark the highest high and lowest low from 8:00 to 9:30 a.m. New York time: six candles, including the data candle.
2. Check its size
Skip the day if the range is less than 0.15 or more than 0.6 times the daily ATR. A tiny range is noise; a huge one often means the day's move has already happened.
3. Wait for a close outside it
Between 9:30 and 11:30, the first candle that closes above the range high (or below the low) by a tenth of the ATR is the signal. Enter at the close.
4. Stop at the middle, target 2R
Because the data candle often makes this range wide, the default stop is the middle of the range rather than the far side. The script lets you switch to the far side. The target is twice the risk. One trade a day, out by noon New York time.
Worked example: EURUSD, 15-minute chart
The 8:30 data candle swings from 1.1656 to 1.1680, and those turn out to be the range's low and high: 24 pips, inside the size band for a 65-pip daily ATR. After the stock market opens, EURUSD edges up, and the 10:00 candle (19:30 IST in summer) closes at 1.1685, above the range. The middle of the range, 1.1668, is the stop.
| EURUSD long | |
|---|---|
| Entry | 1.1685 |
| Stop loss (middle of the range) | 1.1668, 17 pips away |
| Target (2R) | 1.1719, 34 pips away |
| Lot size at 1% of $10,000 | $100 ÷ (17 pips × $10) = 0.588, rounded down to 0.58 lots |
| Loss if the stop is hit | $98.60 |
| Profit at the target | $197.20 |
EURUSD climbs steadily and reaches the target in the 11:45 candle, just before the noon cut-off. On many days the target isn't reached by noon, and the trade is closed for whatever it shows, a smaller win or a smaller loss.
When New York breakouts fail
- London closing. London traders square up in the late New York morning, around 11 a.m. New York time, and that can reverse a breakout. The noon cut-off keeps the trade short.
- Second releases. Some US data comes out at 10 a.m., inside the breakout window. Check the calendar.
- Fed days. Rate decisions come at 2 p.m., after this strategy's cut-off, but the morning can be quiet and choppy while the market waits.
Risk management
- Size from the stop. With the stop at the middle of the range, stops are usually 10 to 25 pips on EURUSD.
- Spreads after 8:30. The spread can stay wide for a few minutes after big data, which affects the range's edges on your broker's chart.
- Prop firm accounts: some firms restrict trading around big releases; the entry here comes an hour later, but check the rule.
Common mistakes
- Trading the data candle itself. The whole point of the range is to let it settle.
- Marking the range in the wrong time zone. It follows New York's clock, not London's or India's.
- Holding into the afternoon. The busiest part of the day ends with London; the script closes at noon.
Backtest it yourself on TradingView
This page doesn't quote a win rate or a profit figure, and you should be wary of anyone who does without showing the test. Results change with the market, the dates, the data feed and the costs you put in. The honest way is to run the test yourself, and the free script below does the work in a couple of minutes.
- Open the chart. On TradingView, open EURUSD on the 15-minute chart.
- Add the script. Open the Pine Editor from the Pine icon in the panel on the right of the chart (older layouts have it as a tab under the chart), delete the code that's already there, paste this strategy's code and click "Add to chart".
- Put in your costs. Open the strategy's settings and go to Properties. Enter your broker's commission and a little slippage. A test without costs flatters every strategy, and short-term ones most of all.
- Read the Strategy Tester. The panel under the chart shows the net profit, the maximum drawdown, the profit factor, the number of trades and a list of every trade. Click a few trades and check on the chart that each one follows the rules. Trade sizes are shown in units rather than lots: 100,000 units is one lot of a forex pair, and 100 ounces is one lot of gold.
- Change one setting at a time. Compare the stop at the middle against the far side, the range end at 9:00 against 9:30, the breakout window to 11:00 against 11:30, and the 2R target against 1.5R. Then try GBPUSD and USDJPY.
As a rough guide, don't trust a result with fewer than 100 trades, a profit factor under 1 once costs are in, or a drawdown you couldn't sit through with real money. Settings tuned to look good on one stretch of history often fail on the next, so check the same settings on dates you didn't tune them on, then demo trade the strategy for a few weeks. How much history you can test depends on your TradingView plan: the free plan loads 5,000 candles, which is a few months of 15-minute candles but years of daily ones.
The script sizes each trade from the stop loss and your risk percentage, starts with $10,000 and assumes 1:100 leverage (a 1% margin setting), so the tester doesn't flag margin calls on normal forex trade sizes. Change these under Properties to match your account. By default TradingView fills orders at the open of the candle after the signal, so the fill can differ a little from the signal candle's close.
Download the free Pine Script and PDF
The script is written in Pine Script version 6 for this guide and follows the rules above. It can't read the economic calendar, so skipping news days is up to you. It's free to use, change and share. The PDF is a one-page cheat sheet with the rules, the New York and IST times, a worked example and a checklist, to keep next to your chart.
Show the code (Pine Script v6, 78 lines)
//@version=6
// New York Session opening range strategy by PipLedger (https://pipledgerfx.com/new-york-session-strategy)
// Marks the high and low from 8 a.m. to 9:30 a.m. New York time (including the 8:30 data candle), then trades the first close outside that range before 11:30 a.m.
// Free to use and change. For education and backtesting only; not financial advice.
strategy("PipLedger: New York Opening Range", shorttitle="NY Range", overlay=true, initial_capital=10000, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=1, margin_long=1, margin_short=1, currency=currency.USD)
// ---------- Inputs
tz = input.string("America/New_York", "Session time zone")
rangeSess = input.session("0800-0930", "Opening range (New York time)")
tradeSess = input.session("0930-1130", "Breakout window (New York time)")
closeHour = input.int(12, "Close any open trade at (hour, New York time)", minval=1, maxval=23)
bufAtr = input.float(0.1, "Close beyond the range by at least (x ATR 14)", minval=0.0, step=0.05)
minRangeD = input.float(0.15, "Skip if the range is narrower than (x daily ATR 14)", minval=0.0, step=0.05)
maxRangeD = input.float(0.6, "Skip if the range is wider than (x daily ATR 14)", minval=0.05, step=0.05)
stopMode = input.string("Range middle", "Stop loss at", options=["Range middle", "Opposite side"])
rr = input.float(2.0, "Target (R multiple)", minval=0.5, step=0.25)
riskPct = input.float(1.0, "Risk per trade (% of equity)", minval=0.1, maxval=5.0, step=0.1)
// ---------- Helpers
fx = strategy.convert_to_account(1.0) // one unit of the chart's quote currency in account currency (1 on USD-quoted charts)
calcQty(float entry, float stop) =>
float dist = math.abs(entry - stop)
dist > 0 and not na(fx) ? strategy.equity * riskPct / 100 / (dist * syminfo.pointvalue * fx) : 0.0
atr = ta.atr(14)
dAtr = request.security(syminfo.tickerid, "D", ta.atr(14)[1], lookahead=barmerge.lookahead_on) // daily ATR up to yesterday
inRange = not na(time(timeframe.period, rangeSess, tz))
inTrade = not na(time(timeframe.period, tradeSess, tz))
cutoff = timestamp(tz, year(time, tz), month(time, tz), dayofmonth(time, tz), closeHour, 0)
// ---------- Opening range
var float rHigh = na
var float rLow = na
var bool done = false
if inRange and not inRange[1]
rHigh := high
rLow := low
done := false
else if inRange
rHigh := math.max(rHigh, high)
rLow := math.min(rLow, low)
rangeOk = not na(rHigh) and not na(dAtr) and rHigh - rLow >= minRangeD * dAtr and rHigh - rLow <= maxRangeD * dAtr
canTrade = inTrade and not inRange and not done and strategy.position_size == 0 and rangeOk and time_close < cutoff
longSig = canTrade and close > rHigh + bufAtr * atr
shortSig = canTrade and close < rLow - bufAtr * atr
mid = (rHigh + rLow) / 2
// ---------- Orders
if longSig
float sl = stopMode == "Range middle" ? mid : rLow
float q = calcQty(close, sl)
if q > 0
strategy.entry("Long", strategy.long, qty=q)
strategy.exit("Long exit", "Long", stop=sl, limit=close + (close - sl) * rr)
done := true
if shortSig
float sl = stopMode == "Range middle" ? mid : rHigh
float q = calcQty(close, sl)
if q > 0
strategy.entry("Short", strategy.short, qty=q)
strategy.exit("Short exit", "Short", stop=sl, limit=close - (sl - close) * rr)
done := true
// the candle that closes at the cut-off sends the order, so it fills at the cut-off time
if strategy.position_size != 0 and time_close >= cutoff
strategy.close_all(comment="New York cut-off")
// ---------- Chart
plot(rHigh, "Range high", color=color.new(color.teal, 0), linewidth=2, style=plot.style_linebr)
plot(rLow, "Range low", color=color.new(color.orange, 0), linewidth=2, style=plot.style_linebr)
plot(mid, "Range middle", color=color.new(color.gray, 30), style=plot.style_linebr)
bgcolor(inRange ? color.new(color.gray, 90) : na, title="Opening range")
plotshape(longSig, "Long breakout", shape.triangleup, location.belowbar, color.teal, size=size.small)
plotshape(shortSig, "Short breakout", shape.triangledown, location.abovebar, color.red, size=size.small)Trading this from India
Residents can trade EURUSD, GBPUSD and USDJPY futures and options on NSE and BSE through a SEBI-registered broker. The contracts are quoted the same way as the spot pair, one lot is 1,000 units of the base currency, and they're cash-settled in rupees. They trade only from 9 a.m. to 7:30 p.m. IST, volumes are thin and not every broker offers them, so check the hours and the spread first. The NSE and BSE contracts close at 7:30 p.m. IST, which is 10 a.m. New York time in US summer and 9 a.m. in winter, so this window falls mostly after Indian exchange hours. Trading forex or CFDs with offshore online platforms isn't allowed for residents under FEMA, even if the app is easy to download. Details are in is forex trading legal in India.
Related strategies: London breakout, opening range breakout, ICT kill zones, previous day high and low, XAUUSD London session, XAUUSD New York session, Asian session range. All 40 strategies are compared on one page in forex trading strategies.