PipLedger
Today's forex newsNFP, CPI, FOMC and other high-impact eventsEconomic calendarCalendar →

ICT Silver Bullet strategy: exact rules, the IST times and a free Pine Script

The Silver Bullet is one of the best-known setups from the ICT (Inner Circle Trader) teachings: a one-hour window in which the price takes out a nearby high or low, reverses hard, and leaves a fair value gap to trade. Like most ICT ideas it's usually taught by eye. This page turns it into rules a script can follow and test, with the windows in IST, a worked EURUSD example with the lot size and a free TradingView script.

By M. A. Horaira. Updated 10 October 2026. 10 minute read.

The rules at a glance

  • Market: EURUSD on the 5-minute chart
  • Liquidity: the high and low from 8 to 10 a.m. New York time
  • Window: 10 to 11 a.m. New York time (19:30 to 20:30 IST in summer, 20:30 to 21:30 in winter)
  • Setup: the price sweeps one side of that range, then leaves a fair value gap in the other direction (a short after a sweep of the high, a long after a sweep of the low)
  • Entry: a limit order at the gap's near edge; cancelled at 11 a.m. if it hasn't filled
  • Stop loss: 0.1 ATR beyond the sweep's extreme; skip the trade if that's more than 4 ATR from the entry
  • Target: twice the risk (2R); one trade a day, closed by noon New York time

What the Silver Bullet is

The Silver Bullet was popularised by Michael J. Huddleston, who teaches as ICT. It's built on three ideas covered elsewhere on this site: liquidity sweeps (stops resting above a high or below a low get taken out), fair value gaps (a fast move leaves a three-candle gap) and kill zones (specific hours when these moves happen more often). The Silver Bullet combines them inside a single hour.

Silver Bullet windowNew York timeIST, US summer timeIST, US winter time
London03:00–04:0012:30–13:3013:30–14:30
New York morning (used here)10:00–11:0019:30–20:3020:30–21:30
New York afternoon14:00–15:0023:30–00:3000:30–01:30

The windows follow New York's clock. US clocks go back on 1 November 2026; from then on, use the winter column. To use another window in the script, change four settings together: the liquidity range, the window, the window-end hour and the close hour. For London that's 01:00–03:00, 03:00–04:00, 4 and 5; for the afternoon, 12:00–14:00, 14:00–15:00, 15 and 16.

How this page turns it into rules

ICT teaching leaves a lot to judgement: which liquidity, how big a gap, where to aim. A script can't use judgement, so these rules pick one simple version:

Other versions use the previous day's high and low or the overnight range as the liquidity, or aim for the opposite liquidity rather than a fixed 2R. Those are worth testing as variations.

The rules, step by step

1. Mark the morning range

On a 5-minute EURUSD chart, mark the high and low from 8 to 10 a.m. New York time.

2. Wait for the sweep in the window

Between 10 and 11 a.m., wait for the price to trade above the high (or below the low).

3. Look for the gap the other way

After a sweep of the high, look for a bearish fair value gap: the third candle's high below the first candle's low, with a bearish middle candle. Place a sell limit at the gap's lower edge.

4. Stop above the sweep, target 2R

The stop goes a tenth of an ATR above the highest price of the sweep; if that's more than 4 ATR from the entry, skip the trade. The target is twice the risk. If the order hasn't filled by 11 a.m., cancel it. Anything open at noon is closed.

Worked example: EURUSD, 5-minute chart

FVG10:0011:00Range high 1.17020Range low 1.16710Stop 1.17066Sell limit 1.16930Target 1.16658SweepFills2R
Illustrative chart drawn for this guide to show the rules. It isn't a real day's prices. EURUSD, 5-minute candles from 8 a.m. New York time.

From 8 to 10 a.m. EURUSD trades between 1.1671 and 1.1702. Just after 10 o'clock it pushes up to 1.1706, through the morning high, and then drops hard. The candle that opens at 10:25 completes a bearish gap from 1.1693 to 1.1699. The sell limit goes at 1.1693, and the stop just above the sweep, at 1.17066.

EURUSD short
Entry (sell limit at the gap's lower edge)1.1693
Stop loss1.17066, 13.6 pips away
Target (2R)1.16658, 27.2 pips away
Lot size at 1% of $10,000$100 ÷ (13.6 pips × $10) = 0.735, rounded down to 0.73 lots
Loss if the stop is hit$99.28
Profit at the target$198.56

The price bounces back into the gap and fills the order at 10:35, then falls through the morning low to the target by 11:15. The target sits just below the morning low, which ICT traders would call the opposite liquidity. On many days no gap forms after the sweep, or the order never fills; then there's no trade.

Risk management

Common mistakes

  1. Taking any gap in the window. The gap has to come after a sweep and point the other way.
  2. Chasing the move. The entry is the limit at the gap; if the price never comes back, there's no trade.
  3. Using the wrong clock. The window is New York time. In India it shifts by an hour on 1 November 2026.
  4. Assuming the name means it works. Test the rules on your pair, with your costs, before trusting them.

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.

  1. Open the chart. On TradingView, open EURUSD on the 5-minute chart.
  2. 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".
  3. 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.
  4. 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.
  5. Change one setting at a time. Compare the three windows, the liquidity range (8 to 10 a.m. against the previous day's high and low), the minimum gap size, the entry at the gap's edge against its middle, and the 2R target against 1.5R and 3R.

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 three windows in IST, the rules, a worked example and a checklist, to keep next to your chart.

Show the code (Pine Script v6, 99 lines)
//@version=6
// ICT Silver Bullet strategy by PipLedger (https://pipledgerfx.com/ict-silver-bullet-strategy)
// Marks the high and low from 8 to 10 a.m. New York time. In the 10 to 11 a.m. window, waits for the price to sweep one side, then for a fair value gap in the other direction, and places a limit order at the gap's near edge.
// Free to use and change. For education and backtesting only; not financial advice.
strategy("PipLedger: ICT Silver Bullet", shorttitle="Silver Bullet", 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")
liqSess   = input.session("0800-1000", "Liquidity range: highs and lows to be swept (New York time)")
window    = input.session("1000-1100", "Silver Bullet window (New York time)")
winEndH   = input.int(11, "Window ends at (hour, New York time): unfilled orders are cancelled", minval=0, maxval=23)
closeHour = input.int(12, "Close any open trade at (hour, New York time)", minval=1, maxval=23)
minGap    = input.float(0.2, "Minimum gap size (x ATR 14)", minval=0.0, step=0.05)
stopBuf   = input.float(0.1, "Stop buffer beyond the sweep (x ATR)", minval=0.0, step=0.05)
maxStopAtr = input.float(4.0, "Skip if the stop is further than (x ATR)", minval=0.5, step=0.25)
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)
inLiq    = not na(time(timeframe.period, liqSess, tz))
inWin    = not na(time(timeframe.period, window, tz))
winEndT  = timestamp(tz, year(time, tz), month(time, tz), dayofmonth(time, tz), winEndH, 0)
cutoff   = timestamp(tz, year(time, tz), month(time, tz), dayofmonth(time, tz), closeHour, 0)
bullGap  = low > high[2] and close[1] > open[1] and low - high[2] >= minGap * atr
bearGap  = high < low[2] and close[1] < open[1] and low[2] - high >= minGap * atr

// ---------- Liquidity range, sweeps and the waiting order
var float lHi    = na
var float lLo    = na
var float sweepH = na      // highest price reached above the range high in the window
var float sweepL = na      // lowest price reached below the range low in the window
var bool  done   = false
var int   pend   = 0       // 1 = a buy limit waits, -1 = a sell limit waits

if inLiq and not inLiq[1]
    lHi    := high
    lLo    := low
    sweepH := na
    sweepL := na
    done   := false
else if inLiq
    lHi := math.max(lHi, high)
    lLo := math.min(lLo, low)

if inWin and not na(lHi)
    if high > lHi
        sweepH := na(sweepH) ? high : math.max(sweepH, high)
    if low < lLo
        sweepL := na(sweepL) ? low : math.min(sweepL, low)

flat = strategy.position_size == 0
if not flat
    pend := 0
// the window has ended without a fill: cancel the order (the candle that closes at the window end sends the cancel)
if pend != 0 and time_close >= winEndT
    strategy.cancel("Long")
    strategy.cancel("Short")
    pend := 0

// a sweep of the high, then a bearish gap: sell at the gap's lower edge, stop above the sweep
newShort = inWin and flat and not done and not na(sweepH) and bearGap and time_close < winEndT and time_close < cutoff
newLong  = inWin and flat and not done and not na(sweepL) and bullGap and not newShort and time_close < winEndT and time_close < cutoff

if newShort
    float px = high                  // near edge of the bearish gap (the third candle's high)
    float sl = sweepH + stopBuf * atr
    float q  = calcQty(px, sl)
    if q > 0 and sl - px <= maxStopAtr * atr
        strategy.entry("Short", strategy.short, qty=q, limit=px)
        strategy.exit("Short exit", "Short", stop=sl, limit=px - (sl - px) * rr)
        pend := -1
        done := true

if newLong
    float px = low                   // near edge of the bullish gap (the third candle's low)
    float sl = sweepL - stopBuf * atr
    float q  = calcQty(px, sl)
    if q > 0 and px - sl <= maxStopAtr * atr
        strategy.entry("Long", strategy.long, qty=q, limit=px)
        strategy.exit("Long exit", "Long", stop=sl, limit=px + (px - sl) * rr)
        pend := 1
        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(lHi, "Liquidity high", color=color.new(color.red, 30), style=plot.style_linebr)
plot(lLo, "Liquidity low", color=color.new(color.teal, 30), style=plot.style_linebr)
bgcolor(inWin ? color.new(color.blue, 92) : na, title="Silver Bullet window")
plotshape(newShort, "Sweep of the high + bearish gap", shape.triangledown, location.abovebar, color.red, size=size.small)
plotshape(newLong, "Sweep of the low + bullish gap", shape.triangleup, location.belowbar, color.teal, 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 10 a.m. window starts at 7:30 p.m. IST in US summer, just as the NSE and BSE contracts close, and at 8:30 p.m. in winter, so it can't be traded on an Indian exchange. The 3 to 4 a.m. London window, 12:30 to 13:30 IST in summer and 13:30 to 14:30 in winter, does fall inside exchange hours, though volumes there are thin. 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: liquidity sweep, fair value gap, order block, BOS and CHoCH, ICT kill zones, XAUUSD FVG + order block, Turtle Soup. All 40 strategies are compared on one page in forex trading strategies.

Quick answers

What is the ICT Silver Bullet?

It's a setup popularised by Michael J. Huddleston (ICT): in a one-hour window, the price sweeps a nearby high or low, reverses, and leaves a fair value gap. Traders enter when the price comes back into the gap, with a stop beyond the sweep.

What are the Silver Bullet times in IST?

The windows are 3–4 a.m., 10–11 a.m. and 2–3 p.m. New York time. The 10 a.m. window is 19:30 to 20:30 IST in US summer time and 20:30 to 21:30 IST in winter.

Which pairs suit the Silver Bullet?

It's mostly taught on index futures and the major forex pairs, such as EURUSD and GBPUSD, plus gold. The rules here are shown on EURUSD.

Where is the stop on a Silver Bullet trade?

Beyond the extreme of the sweep. If the price goes back past the high it swept, the setup has failed. These rules add a buffer of 0.1 ATR.

What timeframe is used for the Silver Bullet?

Usually the 1-minute to 5-minute chart, because the setup forms inside one hour. This strategy uses the 5-minute chart.

Does the Silver Bullet work?

There's no reliable public evidence either way, and results depend heavily on how the rules are defined. This page gives one exact version and a free script, so you can test it yourself.

More guides

All 81 guides →

हिंदी में पढ़ें: Lot size kaise nikale?, Prop firm challenge kaise pass kare?, Gold trading kaise kare?, Forex trading kya hai, और India में यह legal है या नहीं?

Trading psychology

The habits that decide whether a good strategy makes money.

All 14 trading psychology guides

8 popular prop firms

Well-known firms for forex, gold and index traders that were still operating in 2026. Compare their rules before you buy a challenge.

If a link in this list is a referral link, PipLedger may earn a commission if you sign up, at no extra cost to you. This list is not a recommendation. Programs, prices and rules change often, so check each firm's own site, including its margin and drawdown rules, before you buy a challenge.