The rules at a glance
- Market: GBPUSD or EURUSD on the 15-minute chart
- Range: the high and low from midnight to 8 a.m. London time (04:30 to 12:30 IST in summer, 05:30 to 13:30 IST in winter)
- Entry: the first 15-minute candle that closes at least 1 pip outside the range between 8 and 11 a.m. London time
- Stop loss: the other side of the range, or its middle when the range is wide
- Target: twice the risk (2R); close anything still open at 4 p.m. London time
- Skip the day: if the range is under 10 or over 60 pips (the script does this), or if big UK or US news is due before 4 p.m. London time (skip those days yourself)
What the London breakout is
From midnight to 8 a.m. London time, most forex trading runs through Tokyo, Singapore, Hong Kong and Sydney. For the pound and the euro that's the quiet part of the day: most European desks haven't started, so GBPUSD and EURUSD often drift inside a narrow band. Then London opens. The UK is the biggest forex centre in the world, with about 38% of global trading going through its desks in the BIS survey of April 2025, and when it comes online the price often has to find a new level.
The London breakout tries to catch that first move. The overnight range shows where the market was comfortable. A candle that closes outside it after 8 a.m. says a new wave of orders has pushed the price somewhere it wouldn't go overnight. You join that push and put your stop on the other side of the range, the point where the idea is plainly wrong.
Why it works on some days and fails on others
It works when London brings a real change: news that broke overnight, a UK data release (the Office for National Statistics publishes GDP and inflation figures at 7 a.m. UK time), or large orders from European banks and funds. Those days can trend for hours.
It fails when the first move is a fake. The price pokes above the range, triggers the stops of traders who were short inside it, pulls in breakout buyers, and then turns and falls back through the range. That failed breakout is a trade of its own, the liquidity sweep, and it's the reason these rules wait for a candle to close outside the range rather than just touch it, and put the stop on the far side. Even so, expect runs of small losses. A breakout strategy makes its money on the days the move keeps going.
London breakout timings in IST
| What happens | London time | IST in summer (BST) | IST in winter (GMT) |
|---|---|---|---|
| Asian range starts | 00:00 | 04:30 | 05:30 |
| Range ends, London opens | 08:00 | 12:30 | 13:30 |
| Last time a breakout counts | 11:00 | 15:30 | 16:30 |
| Close any trade still open | 16:00 | 20:30 | 21:30 |
The script works in London time with the Europe/London time zone, so TradingView handles the clock change for you. Some traders start an hour earlier, at 7 a.m. London time, when Frankfurt opens. To test that version, set the range to 00:00 to 07:00 and the window to 07:00 to 10:00 in the script's settings. The forex market hours clock shows every session live in IST.
The rules, step by step
1. Mark the Asian range
On a 15-minute chart, take the highest high and the lowest low of the 32 candles from midnight to 8 a.m. London time. Draw both as lines. The script does this for you and shades the range.
2. Check the size of the range
Skip the day if the range is narrower than 10 pips or wider than 60 pips on GBPUSD or EURUSD. A tiny range gives a stop so close that normal noise hits it. A huge range usually means the big move already happened overnight, and the stop on the far side would be too far away. These are starting values for your own testing, not settings anyone has proved best. GBPJPY moves more, so if you trade it, raise both numbers.
3. Wait for a close outside the range
Between 8 and 11 a.m. London time, go long when a 15-minute candle closes at least 1 pip above the range high, or short when one closes at least 1 pip below the range low. Only the first breakout of the day counts. If nothing has closed outside the range by 11 a.m., there's no trade today.
4. Set the stop and the target
The stop goes on the far side of the range: the range low for a long, the range high for a short. If the range is wide, the script can put the stop at the middle of the range instead. That cuts the risk by close to half (17 pips instead of 29 in the example below), but normal pullbacks hit it more often. The target is twice the risk, so a 29-pip stop gets a 58-pip target.
5. Close it by 4 p.m. London time
Anything still open at 4 p.m. London time is closed at the market price. The breakout is a London idea, and by late afternoon London's main flows are done. It also keeps you out of the late New York hours, which can reverse the day's move.
Worked example: GBPUSD
Overnight, GBPUSD trades between 1.3184 and 1.3208, a range of 24 pips, which passes the 10 to 60 pip check. The candle that opens at 8:00 in London closes at 1.3213, 5 pips above the range high. That's a long signal.
| GBPUSD long | |
|---|---|
| Entry | 1.3213 |
| Stop loss (range low) | 1.3184, 29 pips away |
| Target (2R) | 1.3271, 58 pips away |
| Account and risk | $10,000, risking 1% = $100 |
| Lot size | $100 ÷ (29 pips × $10 per pip per lot) = 0.34 lots |
| Loss if the stop is hit | 29 × $3.40 = $98.60 |
| Profit at the target | 58 × $3.40 = $197.20 |
GBPUSD pays $10 per pip on one standard lot because the dollar is the quote currency, so 0.34 lots is $3.40 a pip. In this example the target is reached about 5 hours after the entry, around 1 p.m. London time (17:30 IST in summer), well before the 4 p.m. cut-off. On a real chart, plenty of days start exactly like this and then fall back into the range. The stop is there for those days. The lot size calculator does this sum for any pair and account currency.
Risk management for breakout trading
- Risk the same small amount on every trade. 0.5% to 1% of the account. A strategy that loses more trades than it wins can easily have five or six losses in a row. At 1% a trade that's a 5% to 6% dip, which you can recover from.
- One trade a day. The script takes only the first breakout. Taking the opposite breakout after a failure doubles your risk on the worst days; if you want that rule, test it separately.
- Watch the news. If a Bank of England decision (at noon UK time) or a big US release such as payrolls or inflation (8:30 a.m. New York time) lands while the trade is open, the move can be sharp either way. Many breakout traders skip those days. Check the economic calendar before the open.
- Check the spread before you enter. Around news and at quiet times spreads widen, and a few extra pips matter when the stop is 20 or 30 pips away.
- On a prop firm account, one trade a day at 1% fits inside most daily loss limits easily. The bigger risk is the overall drawdown during a losing run; the drawdown calculator shows how many losses your account can take.
Mistakes that ruin the London breakout
- Entering on a touch instead of a close. The wick above the range is exactly where fake breakouts happen. Wait for the candle to close.
- Squeezing the stop to just inside the range edge. A breakout often comes back to test the edge before it runs, and a stop a few pips inside gets hit by that retest. If you want a smaller stop, test the script's range-middle option instead.
- Trading every range. The size check exists for a reason. After big overnight news the range is already wide and most of the move is gone.
- Forgetting the clock change. If you trade from India, London opens an hour later in IST from late October. Using summer times in winter means you mark the wrong range.
- Judging it on ten trades. A strategy that aims for 2R can make money while losing most of its trades, so a few losses in a row tell you very little. Judge it on a backtest of a few hundred trades.
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 GBPUSD or 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. Good things to test are the breakout buffer (0 to 5 pips), the range size limits, the range-middle stop, and the 7 a.m. Frankfurt start. Test GBPUSD and EURUSD separately, because their ranges are different sizes.
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.
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 timings in IST, a worked example and a checklist, to keep next to your chart.
Show the code (Pine Script v6, 82 lines)
//@version=6
// London Breakout strategy by PipLedger (https://pipledgerfx.com/london-breakout-strategy)
// Marks the Asian session range (midnight to 8 a.m. London time), then trades the first close outside it in the first three hours of London.
// Free to use and change. For education and backtesting only; not financial advice.
strategy("PipLedger: London Breakout", shorttitle="London Breakout", 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("Europe/London", "Session time zone")
rangeSess = input.session("0000-0800", "Asian range (London time)")
tradeSess = input.session("0800-1100", "Breakout window (London time)")
closeHour = input.int(16, "Close any open trade at (hour, London time)", minval=1, maxval=23)
bufferPips = input.float(1.0, "Breakout buffer (pips)", minval=0.0, step=0.5)
minRangePips = input.float(10.0, "Skip if the range is narrower than (pips)", minval=0.0)
maxRangePips = input.float(60.0, "Skip if the range is wider than (pips)", minval=1.0)
stopMode = input.string("Opposite side", "Stop loss at", options=["Opposite side", "Range middle"])
rr = input.float(2.0, "Target (R multiple)", minval=0.5, step=0.25)
pipSize = input.float(0.0, "Pip size (0 = automatic)", minval=0.0, step=0.00001)
riskPct = input.float(1.0, "Risk per trade (% of equity)", minval=0.1, maxval=5.0, step=0.1)
// ---------- Helpers
isGold = syminfo.currency == "USD" and syminfo.type != "stock" and (str.contains(syminfo.ticker, "XAU") or str.contains(syminfo.ticker, "GOLD"))
autoPip = isGold ? 0.1 : syminfo.type == "forex" ? (syminfo.currency == "JPY" ? 0.01 : 0.0001) : syminfo.mintick * 10
pip = pipSize > 0 ? pipSize : autoPip // 0.0001 on EURUSD, 0.01 on USDJPY, 0.10 on XAUUSD
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
// ---------- Asian range
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)
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)
rangeSize = rHigh - rLow
rangeOk = not na(rHigh) and rangeSize >= minRangePips * pip and rangeSize <= maxRangePips * pip
canTrade = inTrade and not inRange and not done and strategy.position_size == 0 and rangeOk
longSig = canTrade and close > rHigh + bufferPips * pip
shortSig = canTrade and close < rLow - bufferPips * pip
mid = (rHigh + rLow) / 2
// ---------- Orders
if longSig
float sl = stopMode == "Opposite side" ? rLow : mid
float tp = close + (close - sl) * rr
float q = calcQty(close, sl)
if q > 0
strategy.entry("Long", strategy.long, qty=q)
strategy.exit("Long exit", "Long", stop=sl, limit=tp)
done := true
if shortSig
float sl = stopMode == "Opposite side" ? rHigh : mid
float tp = close - (sl - close) * rr
float q = calcQty(close, sl)
if q > 0
strategy.entry("Short", strategy.short, qty=q)
strategy.exit("Short exit", "Short", stop=sl, limit=tp)
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="Session end")
// ---------- Chart
plot(rHigh, "Asian high", color=color.new(color.teal, 0), linewidth=2, style=plot.style_linebr)
plot(rLow, "Asian low", color=color.new(color.orange, 0), linewidth=2, style=plot.style_linebr)
bgcolor(inRange ? color.new(color.gray, 90) : na, title="Asian 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. On those charts, set the script's pip size to 0.0001 (0.01 for USDJPY). 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.
The London open falls inside NSE's currency hours, but you can't follow these rules exactly there: the Asian range starts before NSE opens at 9 a.m. IST, and the 4 p.m. London exit (20:30 or 21:30 IST) comes after it closes at 7:30 p.m. IST. Test any NSE version, with a shorter range and an earlier exit, separately.
More strategies with free Pine Scripts: break and retest, liquidity sweep, 9 and 21 EMA crossover, XAUUSD scalping.