OPEN-SOURCE SCRIPT
Updated ICT SIlver Bullet Trading Windows UK times

🎯 Purpose of the Indicator
It’s designed to highlight key ICT “macro” and “micro” windows of opportunity, i.e., time ranges where liquidity grabs and algorithmic setups are most likely to occur. The ICT Silver Bullet concept is built on the idea that institutions execute in recurring intraday windows, and these often produce high-probability setups.
🕰️ Windows
London Macro Window
10:00 – 11:00 UK time
This aligns with a major liquidity window after the London equities open settles and London + EU traders reposition.
You’re looking for setups like liquidity sweeps, MSS (market structure shift), and FVG entries here.
New York Macro Window
15:00 – 16:00 UK time (10:00 – 11:00 NY time)
This is right after the NY equities open, a key ICT window for volatility and liquidity grabs.
Power Hour
Usually 20:00 – 21:00 UK time (3pm–4pm NY time), the last trading hour of NY equities.
ICT often refers to this as another manipulation window where setups can form before the daily close.
🔍 What the Indicator Does
Draws session boxes or shading: so you can visually see the London/NY/Power Hour windows directly on your chart.
Macro vs. Micro time frames:
Macro windows → The ones you set (London & NY) are the major daily algo execution windows.
Micro windows → Within those boxes, ICT expects smaller intraday setups (like a Silver Bullet entry from a sweep + FVG).
Guides your trade selection: it tells you when not to hunt trades everywhere, but instead to wait for price action confirmation inside those boxes.
🧩 How This Fits ICT Silver Bullet Trading
The ICT Silver Bullet strategy says:
Wait for one of the macro windows (London or NY).
Look for liquidity sweep → market structure shift → FVG.
Enter with defined risk inside that hour.
This indicator essentially does step 1 for you: it makes those high-probability windows visually obvious, so you don’t waste time trading random hours where algos aren’t active.
It’s designed to highlight key ICT “macro” and “micro” windows of opportunity, i.e., time ranges where liquidity grabs and algorithmic setups are most likely to occur. The ICT Silver Bullet concept is built on the idea that institutions execute in recurring intraday windows, and these often produce high-probability setups.
🕰️ Windows
London Macro Window
10:00 – 11:00 UK time
This aligns with a major liquidity window after the London equities open settles and London + EU traders reposition.
You’re looking for setups like liquidity sweeps, MSS (market structure shift), and FVG entries here.
New York Macro Window
15:00 – 16:00 UK time (10:00 – 11:00 NY time)
This is right after the NY equities open, a key ICT window for volatility and liquidity grabs.
Power Hour
Usually 20:00 – 21:00 UK time (3pm–4pm NY time), the last trading hour of NY equities.
ICT often refers to this as another manipulation window where setups can form before the daily close.
🔍 What the Indicator Does
Draws session boxes or shading: so you can visually see the London/NY/Power Hour windows directly on your chart.
Macro vs. Micro time frames:
Macro windows → The ones you set (London & NY) are the major daily algo execution windows.
Micro windows → Within those boxes, ICT expects smaller intraday setups (like a Silver Bullet entry from a sweep + FVG).
Guides your trade selection: it tells you when not to hunt trades everywhere, but instead to wait for price action confirmation inside those boxes.
🧩 How This Fits ICT Silver Bullet Trading
The ICT Silver Bullet strategy says:
Wait for one of the macro windows (London or NY).
Look for liquidity sweep → market structure shift → FVG.
Enter with defined risk inside that hour.
This indicator essentially does step 1 for you: it makes those high-probability windows visually obvious, so you don’t waste time trading random hours where algos aren’t active.
Release Notes
🎯 Purpose of the IndicatorIt’s designed to highlight key ICT “macro” and “micro” windows of opportunity, i.e., time ranges where liquidity grabs and algorithmic setups are most likely to occur. The ICT Silver Bullet concept is built on the idea that institutions execute in recurring intraday windows, and these often produce high-probability setups.
🕰️ Adjusted Windows
London Macro Window
03:03 - 09:30 UK time
This aligns with a major liquidity window after the London equities open settles and London + EU traders reposition.
You’re looking for setups like liquidity sweeps, MSS (market structure shift), and FVG entries here.
New York Macro Window 1
14:50 – 115:10 UK time
New York Macro Window 2
15:50 -16:10 UK time
This is right after the NY equities open, a key ICT window for volatility and liquidity grabs.
Power Hour
Usually 20:15 – 20:45 UK time, the last trading hour of NY equities.
ICT often refers to this as another manipulation window where setups can form before the daily close.
🔍 What the Indicator Does
Draws session boxes or shading: so you can visually see the London/NY/Power Hour windows directly on your chart.
Macro vs. Micro time frames:
Macro windows → The ones you set (London & NY) are the major daily algo execution windows.
Micro windows → Within those boxes, ICT expects smaller intraday setups (like a Silver Bullet entry from a sweep + FVG).
Guides your trade selection: it tells you when not to hunt trades everywhere, but instead to wait for price action confirmation inside those boxes.
🧩 How This Fits ICT Silver Bullet Trading
The ICT Silver Bullet strategy says:
Wait for one of the macro windows (London or NY).
Look for liquidity sweep → market structure shift → FVG.
Enter with defined risk inside that hour.
This indicator essentially does step 1 for you: it makes those high-probability windows visually obvious, so you don’t waste time trading random hours where algos aren’t active.
Release Notes
//version=5indicator("ICT Silver Bullet Windows (UK Time, Clean)", overlay=true, max_labels_count=500, max_lines_count=500, max_boxes_count=200)
// ===== Inputs =====
tz = input.string("Europe/London", "Timezone")
shadeAreas = input.bool(true, "Shade Windows (boxes)")
glowLines = input.bool(true, "Glow Vertical Lines")
fillAlpha = input.int(85, "Shade Opacity (0-100 → more transparent)", minval=0, maxval=100)
showMIC = input.bool(false, "Show Manipulation Window (18:10–18:40 UK)?")
// Colours
colLondon = input.color(color.new(color.teal, 0), "London SB Color")
colNY = input.color(color.new(color.orange, 0), "New York SB Color")
colPwr = input.color(color.new(color.green, 0), "Power Hour Color")
colMic = input.color(color.new(color.blue, 0), "Manipulation Window Color")
// ===== Sessions (UK local 24h) =====
sess_LDN = "1000-1100" // London Silver Bullet
sess_NY = "1500-1600" // New York Silver Bullet
sess_PWR = "2015-2045" // Power Hour
sess_MIC = "1810-1840" // Manipulation Window
// ===== Helpers =====
inSession(sess) => not na(time(timeframe.period, sess + ":1234567", tz))
startOfSession(sess) => inSession(sess) and not inSession(sess)[1]
endOfSession(sess) => not inSession(sess) and inSession(sess)[1]
// Draw vertical line (with optional glow)
drawVLine(idx, col) =>
_main = line.new(idx, 1e10, idx, -1e10, xloc=xloc.bar_index, extend=extend.none, color=col, width=2)
if glowLines
_ = line.new(idx, 1e10, idx, -1e10, xloc=xloc.bar_index, extend=extend.none, color=color.new(col, 70), width=5)
_main
// Label at top
placeTopLabelAt(midIdx, yTop, txt, col) =>
label.new(midIdx, yTop, txt, xloc=xloc.bar_index, yloc=yloc.price, style=label.style_label_down, textcolor=color.white, color=color.new(col, 40), size=size.small)
// Box helper
makeOrUpdateBox(b, leftIdx, rightIdx, c) =>
_b = b
if na(_b)
_b := box.new(leftIdx, 1e10, rightIdx, -1e10, xloc=xloc.bar_index, bgcolor=color.new(c, fillAlpha), border_color=color.new(c, 85))
box.set_left(_b, leftIdx), box.set_right(_b, rightIdx), box.set_bgcolor(_b, color.new(c, fillAlpha)), box.set_border_color(_b, color.new(c, 85))
_b
// Safe delete
deleteBox(b) =>
if not na(b)
box.delete(b)
// ===== State =====
var int ldnStart = na
var int nyStart = na
var int pwrStart = na
var int micStart = na
var float ldnHigh = na
var float nyHigh = na
var float pwrHigh = na
var float micHigh = na
var box boxLDN = na
var box boxNY = na
var box boxPWR = na
var box boxMIC = na
// ===== LONDON SB =====
if startOfSession(sess_LDN)
ldnStart := bar_index
ldnHigh := high
drawVLine(bar_index, colLondon)
if shadeAreas
boxLDN := makeOrUpdateBox(boxLDN, ldnStart, bar_index, colLondon)
if inSession(sess_LDN)
ldnHigh := na(ldnHigh) ? high : math.max(ldnHigh, high)
if shadeAreas and not na(boxLDN)
boxLDN := makeOrUpdateBox(boxLDN, ldnStart, bar_index, colLondon)
if endOfSession(sess_LDN)
drawVLine(bar_index, colLondon)
mid = math.round((ldnStart + bar_index) * 0.5)
placeTopLabelAt(mid, ldnHigh, "London SB (10:00–11:00)", colLondon)
deleteBox(boxLDN), boxLDN := na
ldnStart := na, ldnHigh := na
// ===== NEW YORK SB =====
if startOfSession(sess_NY)
nyStart := bar_index
nyHigh := high
drawVLine(bar_index, colNY)
if shadeAreas
boxNY := makeOrUpdateBox(boxNY, nyStart, bar_index, colNY)
if inSession(sess_NY)
nyHigh := na(nyHigh) ? high : math.max(nyHigh, high)
if shadeAreas and not na(boxNY)
boxNY := makeOrUpdateBox(boxNY, nyStart, bar_index, colNY)
if endOfSession(sess_NY)
drawVLine(bar_index, colNY)
mid = math.round((nyStart + bar_index) * 0.5)
placeTopLabelAt(mid, nyHigh, "New York SB (15:00–16:00)", colNY)
deleteBox(boxNY), boxNY := na
nyStart := na, nyHigh := na
// ===== POWER HOUR =====
if startOfSession(sess_PWR)
pwrStart := bar_index
pwrHigh := high
drawVLine(bar_index, colPwr)
if shadeAreas
boxPWR := makeOrUpdateBox(boxPWR, pwrStart, bar_index, colPwr)
if inSession(sess_PWR)
pwrHigh := na(pwrHigh) ? high : math.max(pwrHigh, high)
if shadeAreas and not na(boxPWR)
boxPWR := makeOrUpdateBox(boxPWR, pwrStart, bar_index, colPwr)
if endOfSession(sess_PWR)
drawVLine(bar_index, colPwr)
mid = math.round((pwrStart + bar_index) * 0.5)
placeTopLabelAt(mid, pwrHigh, "Power Hour (20:15–20:45)", colPwr)
deleteBox(boxPWR), boxPWR := na
pwrStart := na, pwrHigh := na
// ===== MANIPULATION WINDOW =====
if showMIC
if startOfSession(sess_MIC)
micStart := bar_index
micHigh := high
drawVLine(bar_index, colMic)
if shadeAreas
boxMIC := makeOrUpdateBox(boxMIC, micStart, bar_index, colMic)
if inSession(sess_MIC)
micHigh := na(micHigh) ? high : math.max(micHigh, high)
if shadeAreas and not na(boxMIC)
boxMIC := makeOrUpdateBox(boxMIC, micStart, bar_index, colMic)
if endOfSession(sess_MIC)
drawVLine(bar_index, colMic)
mid = math.round((micStart + bar_index) * 0.5)
placeTopLabelAt(mid, micHigh, "Manipulation (18:10–18:40)", colMic)
deleteBox(boxMIC), boxMIC := na
micStart := na, micHigh := na
Open-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.
Open-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.