ICT power of three, 09:30 New York, target the far side of the Asia range
The Asia range from 20:00 to 00:00 New York; if London (02:00 to 05:00) takes out its low, the trade goes long at 09:30, and if it takes out its high, short. The stop sits a tick beyond the night's extreme on the swept side and the target at the far side of the Asia range. One trade a day, flat at 15:55 New York.
- Trades
- 289
- Won
- 44.3%
- Profit factor
- 1.05
- Net
- +2.2%
- Worst drawdown
- −6.3%
- Worst trade
- −$765
MNQ1! · 5-minute · 23 October 2024 → 22 October 2026 · 2 years · 517 sessions · $2.50 a contract each side, one tick of slippage, one micro contract a trade
//@version=6
// Suggested timeframe: 5-minute
strategy("ICT power of three (Asia range, London sweep, New York 9:30)", overlay=true, initial_capital=50000, default_qty_type=strategy.fixed, default_qty_value=1, commission_type=strategy.commission.cash_per_contract, commission_value=2.5, slippage=1, margin_long=0, margin_short=0)
// Accumulation: the Asia range, 20:00 to 00:00 New York. Manipulation: London, 02:00 to 05:00,
// takes out one side of it. Distribution: at the New York entry time the trade goes the other way,
// long after a sweep of the Asia low and short after a sweep of its high (both sides taken: no
// trade). The stop sits a tick beyond the night's extreme on the swept side; the target is the far
// side of the Asia range, or a fixed multiple of the risk. Flat at 15:55 New York.
entryAt = input.int(930, "Entry time (HHMM, New York)")
tgtMode = input.string("Asia range", "Target", options=["Asia range", "1R", "2R", "3R"])
nyMins = hour(time, "America/New_York") * 60 + minute(time, "America/New_York")
entryMins = math.floor(entryAt / 100) * 60 + entryAt % 100
inAsia = nyMins >= 1200
inLondon = nyMins >= 120 and nyMins < 300
var float asiaHi = na
var float asiaLo = na
var bool tookLow = false
var bool tookHigh = false
var float nightLo = na
var float nightHi = na
var bool armed = false
if inAsia and not inAsia[1]
asiaHi := high
asiaLo := low
tookLow := false
tookHigh := false
nightLo := low
nightHi := high
armed := true
else if inAsia
asiaHi := math.max(asiaHi, high)
asiaLo := math.min(asiaLo, low)
nightLo := math.min(nightLo, low)
nightHi := math.max(nightHi, high)
if not inAsia and nyMins < entryMins and not na(asiaHi)
nightLo := math.min(nightLo, low)
nightHi := math.max(nightHi, high)
if inLondon and not na(asiaLo)
if low < asiaLo
tookLow := true
if high > asiaHi
tookHigh := true
atEntry = nyMins >= entryMins and nyMins[1] < entryMins
if atEntry and armed and strategy.position_size == 0
armed := false
if tookLow and not tookHigh
stp = nightLo - syminfo.mintick
risk = close - stp
tgt = tgtMode == "Asia range" ? asiaHi : close + str.tonumber(str.replace(tgtMode, "R", "")) * risk
if risk > 0 and tgt > close
strategy.entry("Long", strategy.long)
strategy.exit("Long exit", "Long", stop=stp, limit=tgt)
else if tookHigh and not tookLow
stp = nightHi + syminfo.mintick
risk = stp - close
tgt = tgtMode == "Asia range" ? asiaLo : close - str.tonumber(str.replace(tgtMode, "R", "")) * risk
if risk > 0 and tgt < close
strategy.entry("Short", strategy.short)
strategy.exit("Short exit", "Short", stop=stp, limit=tgt)
if strategy.position_size != 0 and nyMins >= 955 and nyMins < 965
strategy.close_all(comment="Flat by the close")
plot(asiaHi, "Asia high", color.new(#A3A39E, 20), style=plot.style_linebr)
plot(asiaLo, "Asia low", color.new(#A3A39E, 20), style=plot.style_linebr)
bgcolor(inLondon ? color.new(#E3A008, 92) : na, title="London")

