The rules at a glance
- Market: EURUSD on the 5-minute chart (GBPUSD works too)
- When: only 8 to 11 a.m. New York time (17:30 to 20:30 IST in summer, 18:30 to 21:30 in winter)
- Trend: the price above a 50 EMA that's higher than it was 10 candles ago (below a falling one for shorts)
- Entry: the Stochastic (14, 3, 3) %K crosses above %D after being below 20; buy at that close (shorts: a cross down from above 80)
- Stop loss: 0.1 ATR below the lowest low of the last 5 candles; skip the trade if that's more than 2.5 × ATR away
- Target: 1.5 times the risk; at most 3 trades a day, and anything open at 11 a.m. is closed
- Risk: 0.5% of the account per trade
Why timing matters more for scalpers
Suppose your all-in cost is 0.8 pips a trade, spread plus commission. On a 40-pip swing trade that's 2% of the move. On a 4-pip scalp it's 20%. The same cost that a swing trader barely notices decides whether a scalper makes money at all. So a scalper wants two things at once: tight spreads and enough movement to reach a small target quickly. Both come together in the busiest hours.
Forex sessions for scalping, in IST
| Session | IST, summer | IST, winter | For scalping |
|---|---|---|---|
| Tokyo | 05:30–14:30 | 05:30–14:30 | Yen and Australian dollar pairs can work; euro and pound pairs are often too quiet |
| London open | from 12:30 | from 13:30 | Volume jumps and spreads tighten on the euro and the pound |
| London–New York overlap | 17:30–21:30 | 18:30–22:30 | The busiest stretch of the day for the major pairs |
| New York afternoon | 21:30–02:30 | 22:30–03:30 | Activity falls after London closes; Fed decisions come at 2 p.m. New York time |
| Daily rollover | around 02:30 | around 03:30 | Spreads are usually widest; most scalpers stay out |
Summer means both the UK and the US are on summer time; the UK changes on 25 October 2026 and the US on 1 November 2026. The market hours clock shows the sessions live, and scalping trading covers the basics of the style.
The strategy: a Stochastic pullback in the overlap
The rules below use the overlap, the 50 EMA for the trend and the Stochastic oscillator to time short pullbacks. The Stochastic compares the close with the high-low range of the last 14 candles; under 20 means the price is near the bottom of that range, over 80 near the top. In an uptrend, a dip that pushes the Stochastic under 20 and then turns up is a pullback ending.
1. Trade only 8 to 11 a.m. New York time
That's 17:30 to 20:30 IST in summer. Outside it, the script doesn't trade.
2. Check the trend
The price must be above the 50 EMA, and the EMA higher than it was 10 candles ago. Shorts need the opposite.
3. Enter on the Stochastic turn
When %K crosses above %D, having been below 20 on the previous candle, buy at the close.
4. Tight stop, quick target
The stop goes a tenth of an ATR below the lowest low of the last five candles. If that's more than 2.5 ATRs away, skip it: the dip was too deep for a scalp. The target is 1.5 times the risk. At most three trades a day, and anything open at 11 a.m. is closed.
Worked example: EURUSD, 5-minute chart
50 EMA (price), %D (panel) %K
EURUSD is climbing above a rising 50 EMA. After the 8:30 data it dips for half an hour and the Stochastic falls to 18. On the 09:15 candle (18:45 IST in summer), %K turns up through %D, and the candle closes at 1.16678. The stop goes just under the dip, at 1.16639.
| EURUSD long | |
|---|---|
| Entry | 1.16678 |
| Stop loss | 1.16639, 3.9 pips away |
| Target (1.5R) | 1.16737, 5.9 pips away |
| Account and risk | $10,000, risking 0.5% = $50 |
| Lot size | $50 ÷ (3.9 pips × $10) = 1.282, rounded down to 1.28 lots |
| Loss if the stop is hit | $49.92 |
| Profit at the target | $75.52 |
EURUSD reaches the target 8 candles later, about forty minutes. Notice the lot size: a 4-pip stop at 0.5% risk is more than one lot, and a per-lot commission is paid on all 1.28 lots. In pips, though, the cost is the same at any size: with a cost of 0.8 pips a trade, the win shrinks to 5.1 pips and the loss grows to 4.7. Before costs, a 1.5R target breaks even at a 40% win rate; after those costs it needs about 48%. That's the sum every scalper should do with their own broker's spread and commission.
Risk management for scalpers
- Lower risk per trade. With several trades a day, 0.25% to 0.5% a trade keeps a bad morning from becoming a bad month.
- A daily stop. Three trades is the maximum here; many scalpers also stop after two losses.
- Know your real costs. Check the commission per lot and the typical spread in the overlap, then put both in the Strategy Tester.
- Prop firm rules. Some firms limit very short trades or high-frequency trading. Read the rules first; the prop firm comparison lists them.
Common mistakes
- Scalping the quiet hours. A 4-pip target in a market moving 2 pips an hour turns into time stops and costs.
- Ignoring the spread at the rollover. Late-night spreads can be several times the overlap's.
- Revenge trading. Fast trading makes it easy to take ten trades instead of three.
- Testing without costs. A scalping backtest without commission and slippage is close to meaningless.
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 5-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 window (8 to 10 against 8 to 11 a.m.), the Stochastic levels (20/80 against 30/70), the stop look-back, the 1.5R target against 1R and 2R, and above all your real commission and slippage. On the 5-minute chart the free plan's 5,000 candles cover about three weeks, so test on more than one stretch if you can.
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 and 0.5% risk, starts with $10,000 and assumes 1:100 leverage (a 1% margin setting). 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 session table in IST, the scalping rules, the cost sum and a checklist, to keep next to your chart.
Show the code (Pine Script v6, 76 lines)
//@version=6
// Forex scalping strategy for the London–New York overlap by PipLedger (https://pipledgerfx.com/best-time-to-scalp-forex)
// On the 5-minute chart, between 8 and 11 a.m. New York time: with the price above a rising 50 EMA, buys when the Stochastic %K crosses above %D from below 20 (sells the mirror image). At most three trades a day.
// Free to use and change. For education and backtesting only; not financial advice.
strategy("PipLedger: Overlap Scalper (Stochastic + 50 EMA)", shorttitle="Overlap Scalper", 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")
sess = input.session("0800-1100", "Scalping window (New York time)")
endHour = input.int(11, "Close any open trade at (hour, New York time)", minval=1, maxval=23)
emaLen = input.int(50, "Trend EMA", minval=10)
slopeBars = input.int(10, "EMA must be higher (lower) than this many candles ago", minval=1)
kLen = input.int(14, "Stochastic %K length", minval=2)
kSmooth = input.int(3, "%K smoothing", minval=1)
dLen = input.int(3, "%D length", minval=1)
osLvl = input.float(20.0, "Oversold level", minval=1.0, maxval=50.0)
obLvl = input.float(80.0, "Overbought level", minval=50.0, maxval=99.0)
swingBars = input.int(5, "Stop beyond the lowest low of the last (candles)", minval=2)
stopBuf = input.float(0.1, "Stop buffer (x ATR 14)", minval=0.0, step=0.05)
maxStopAtr = input.float(2.5, "Skip if the stop is further than (x ATR)", minval=0.5, step=0.25)
rr = input.float(1.5, "Target (R multiple)", minval=0.5, step=0.25)
maxTrades = input.int(3, "Maximum trades a day", minval=1)
riskPct = input.float(0.5, "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)
ema = ta.ema(close, emaLen)
k = ta.sma(ta.stoch(close, high, low, kLen), kSmooth)
d = ta.sma(k, dLen)
kUp = ta.crossover(k, d)
kDn = ta.crossunder(k, d)
lo = ta.lowest(low, swingBars)
hi = ta.highest(high, swingBars)
inSess = not na(time(timeframe.period, sess, tz))
cutoff = timestamp(tz, year(time, tz), month(time, tz), dayofmonth(time, tz), endHour, 0)
var int trades = 0
if inSess and not inSess[1]
trades := 0
// ---------- Signals
flat = strategy.position_size == 0
longSl = lo - stopBuf * atr
shortSl = hi + stopBuf * atr
longSig = flat and inSess and time_close < cutoff and trades < maxTrades and close > ema and ema > ema[slopeBars] and kUp and k[1] < osLvl and close - longSl <= maxStopAtr * atr
shortSig = flat and inSess and time_close < cutoff and trades < maxTrades and close < ema and ema < ema[slopeBars] and kDn and k[1] > obLvl and shortSl - close <= maxStopAtr * atr
// ---------- Orders
if longSig
float q = calcQty(close, longSl)
if q > 0
strategy.entry("Long", strategy.long, qty=q)
strategy.exit("Long exit", "Long", stop=longSl, limit=close + (close - longSl) * rr)
trades += 1
if shortSig
float q = calcQty(close, shortSl)
if q > 0
strategy.entry("Short", strategy.short, qty=q)
strategy.exit("Short exit", "Short", stop=shortSl, limit=close - (shortSl - close) * rr)
trades += 1
// 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="Window closed")
// ---------- Chart (add TradingView's Stochastic indicator with 14, 3, 3 to see %K and %D)
plot(ema, "50 EMA", color=color.new(color.orange, 0), linewidth=2)
bgcolor(inSess ? color.new(color.blue, 94) : na, title="Scalping window")
plotshape(longSig, "Long", shape.triangleup, location.belowbar, color.teal, size=size.small)
plotshape(shortSig, "Short", 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, so most of the overlap is outside Indian exchange hours, and exchange lots of 1,000 units make a 4-pip scalp worth very little per lot. 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.