Indicator · Pine Script v5 · On the chart

Silver Bullet ICT Strategy [TradingFinder] 10-11 AM +FVG

by alvinng214· code credited to TFlab

This overlay indicator maps ICT Silver Bullet structure on the price chart for the 10-11 AM New York window.

View on GitHub

GitHub stars2on the repository
Pine versionv5runs as is
Lines of code338
Settings22inputs
LicenceNone statedfile: MPL-2.0
Last update2 months ago5 Aug 2026

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

338 lines of Pine Script v5 from S1_Silver_Bullet/Silver Bullet ICT Strategy [TradingFinder] 10-11 AM NY Time +FVG,TFlab Silver Bullet.txt, published under MPL-2.0 (file header). Keep the author's credit and licence lines when you reuse it.

Silver Bullet ICT Strategy [TradingFinder] 10-11 AM NY Time +FVG,TFlab Silver Bullet.txt
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TFlab

//@version=5
indicator("Silver Bullet ICT Strategy [TradingFinder] 10-11 AM NY Time +FVG","TFlab Silver Bullet", overlay = true, max_bars_back = 5000, max_lines_count = 500 , max_labels_count = 500)

//import Libraries
    //import Order Block Refiner
import TFlab/OrderBlockRefiner_TradingFinder/2 as Refiner
    //import Order Block Drawing  Library
import TFlab/OrderBlockDrawing_TradingFinder/4 as Drawing
    //import FVD Detector Library
import TFlab/FVGDetectorLibrary/3 as FVG

//Input 
    //Order Blocks Refinement

Refine= input.bool(true, 'Refine Order Block', group ='Order Blocks Logical Setting', inline = 'Refine')
RefineMe = input.string('Defensive', '', ['Defensive', 'Aggressive'] , group = 'Order Blocks Logical Setting', inline = 'Refine')
MLOB = input.string('Proximal' , 'Mitigation Level OB', ['Proximal', '50 % OB', 'Distal'], 
 tooltip= 'Using this entry, you can determine which level the price reacts to in a Order Block.', group = 'Order Blocks Logical Setting')

    //FVG Filter

PFVGFilter = input.bool(false, 'FVG Filter ............',  group = 'FVG Logical Setting' , inline = 'FVG Filter')
PFVGFilterType = input.string('Defensive', '', ['Very Aggressive' , 'Aggressive' , 'Defensive' , 'Very Defensive'], group = 'FVG Logical Setting', inline = 'FVG Filter' ,
 tooltip = 'If it is "On", this filter will filter "FVGs" based on the width of the Zone.'  + 
 'From "Very Aggressive" to "Very Defensive" the width of the "FVG" decreases.')
MLFVG = input.string('Proximal' , 'Mitigation Level FVG', ['Proximal', '50 % OB', 'Distal'], 
 tooltip= 'Using this entry, you can determine which level the price reacts to in a FVG.', group = 'FVG Logical Setting')

    //CISD Logical Setting

BarBackCheck        = input.int(5, 'Bar Back Check' , minval = 1,group = 'CISD Logical Setting')


    //Display Order Block

DOBShow  = input.bool(true, 'Demand Order Block', inline = 'DMOLB', group = 'Order Block Display Setting')
DOBColor = input.color(#17c0016b, '', inline = 'DMOLB', group = 'Order Block Display Setting')

SOBShow  = input.bool(true, 'Supply Order Block', inline = 'SSOLB', group = 'Order Block Display Setting')
SOBColor = input.color(#df050573, '', inline = 'SSOLB', group = 'Order Block Display Setting')

    //Display FVG

DFVGShow  = input.bool(true, 'Demand FVG', inline = 'DFVG', group = 'FVG Display Setting')
DFVGColor = input.color(#2195f36c, '', inline = 'DFVG', group = 'FVG Display Setting')

SFVGShow  = input.bool(true, 'Supply FVG', inline = 'SFVG', group = 'FVG Display Setting')
SFVGColor = input.color(#ff990070, '', inline = 'SFVG', group = 'FVG Display Setting')

//CISD Display Setting

CISD_AShow          = input.bool(true, 'Show All CISD'  ,group = 'CISD Display Setting')
CISD_HShow          = input.bool(true, 'Show High CISD' ,group = 'CISD Display Setting', inline = 'CH')
CISD_LShow          = input.bool(true, 'Show Low CISD'  ,group = 'CISD Display Setting', inline = 'CL')
CISD_HNColor        = input.color(#870505   , 'Name'  ,group = 'CISD Display Setting', inline = 'CH')
CISD_LNColor        = input.color(#014f07   , 'Name'  ,group = 'CISD Display Setting', inline = 'CL')
CISD_HLColor        = input.color(#b90000b8 , 'Line'  ,group = 'CISD Display Setting', inline = 'CH')
CISD_LLColor        = input.color(#069206a7 , 'Line'  ,group = 'CISD Display Setting', inline = 'CL')


//Range Time
Newyork_OpeningRange  = '0900-1000'
Newyork_Trading       = '1000-1100'

Newyork_OR = math.sign(nz(time(timeframe.period, Newyork_OpeningRange , "America/New_York")))
Newyork_T = math.sign(nz(time(timeframe.period, Newyork_Trading       , "America/New_York")))

var line Start_OR_Line     = na
var line Start_Trade_Line  = na
var line End_Trade_Line    = na
var line High_Level        = na
var line Low_Level         = na
var label Opening_Label    = na
var label Trading_label    = na

one_hour = 60 * 60 * 1000
ATR = ta.atr(55)

//High & Low Session Detector 

LowHighSessionDetector(On_Session) =>
    var int Time = 0
    var float High = 0.0 
    var float Low = 0.0
 
    if  (On_Session[1] == 0 and On_Session == 1)
        Time := time
        High := high
        Low := low
    else if (On_Session[1] == 1 or On_Session == 1)
        High := math.max(high , High) 
        Low :=   math.min(low , Low)
    [High , Low , Time]

[High_OR , Low_OR , Time_OR] = LowHighSessionDetector(Newyork_OR)

if Newyork_OR > Newyork_OR[1]
    Start_OR_Line     := line.new(time , low, time , low + ATR, xloc = xloc.bar_time, extend = extend.both, style = line.style_dashed, color = color.black)
    Start_Trade_Line  := line.new(time + one_hour, low, time + one_hour, low + ATR, xloc = xloc.bar_time, extend = extend.both, style = line.style_dashed, color = color.black)
    End_Trade_Line    := line.new(time + (one_hour * 2), low, time + (one_hour * 2), low + ATR, xloc = xloc.bar_time, extend = extend.both, style = line.style_dashed, color = color.black)
    Opening_Label     := label.new(time + one_hour / 2, high + 10 * ATR , '09:00 to 10:00 Range' + '\nNew York AM', xloc = xloc.bar_time, color = na, textcolor= #000000)
    Trading_label     := label.new(time + int(one_hour * 1.5),  high + 10 * ATR, '10:00 to 11:00 Trading Time' + '\nNew York AM', xloc = xloc.bar_time, color = na, textcolor= #000000)

if Newyork_T > Newyork_T[1]
    High_Level := line.new(time - one_hour , High_OR , time + one_hour , High_OR, xloc = xloc.bar_time , style = line.style_dotted, color = #000000)
    Low_Level  := line.new(time - one_hour , Low_OR  , time + one_hour  , Low_OR, xloc = xloc.bar_time , style = line.style_dotted, color = #000000)

var bool Permit_Break = true
var bool High_Break   = false
var bool Low_Break    = false

var int  High_Break_Bar = na
var int  Low_Break_Bar  = na

if Newyork_T == 0
    High_Break := false
    Low_Break  := false
    High_Break_Bar := na
    Low_Break_Bar  := na

if Newyork_T == 1 
    if high > High_OR
        High_Break := true

    if low < Low_OR
        Low_Break  := true

//FVG Call Function
[DConditionFVG, DDFVG, DPFVG, BarDFVG, SConditionFVG, SDFVG, SPFVG, BarSFVG] = FVG.FVGDetector(PFVGFilter ? 'On' : 'Off', PFVGFilterType, false, false)

//CISD Detector Function

CISDLevelDetector(CondHigh, CondLow,Newyork_OR ,Newyork_T ,DConditionFVG, DDFVG, DPFVG, BarDFVG, SConditionFVG, SDFVG, SPFVG, BarSFVG, BarBackCheck, Label, AShow, HShow, LShow, HNColor, LNColor , HLColor, LLColor) =>
    var float CISDLvLP_L      = 0.0
    var float CISDLvLP_H      = 0.0
    var int CISDLvLI_L        = 0
    var int CISDLvLI_H        = 0  
    var bool Permit_HSet      = true
    var bool Permit_LSet      = true
    var bool Permit_HReset    = true
    var bool Permit_LReset    = true   

    var line  CISD_LineL      = na
    var line  CISD_LineH      = na
    var label CISD_NameH      = na
    var label CISD_NameL      = na
    var label CISD_ShapH      = na
    var label CISD_ShapL      = na

    var bool Bear_Trigger     = false
    var bool Bull_Trigger     = false    
    
    var int   Bear_FVG        = 0 
    var float Bear_FVG_D      = 0.0
    var float Bear_FVG_P      = 0.0

    var int   Bull_FVG        = 0 
    var float Bull_FVG_D      = 0.0
    var float Bull_FVG_P      = 0.0

    var bool FVG_Bear_Trigger = false
    var bool FVG_Bull_Trigger = false  

    var FVG_Bear_D            = array.new_float()
    var FVG_Bear_P            = array.new_float()
    var FVG_Bear_I            = array.new_int()
    
    var FVG_Bull_D            = array.new_float()
    var FVG_Bull_P            = array.new_float()
    var FVG_Bull_I            = array.new_int()

    var float High_OB         = na
    var float Low_OB          = na

    var float Bear_D          = na
    var float Bear_P          = na
    var int   Bear_I          = na
    
    var float Bull_D          = na
    var float Bull_P          = na
    var int   Bull_I          = na

    Body                      = close - open


    if (Newyork_T[1] == 0 and  Newyork_T == 1)
        High_OB := high
        Bear_I  := bar_index
        Low_OB  := low
        Bull_I  := bar_index

    if  Newyork_T[1] == 1 
        if high > High_OB 
            High_OB := high
            Bear_I  := bar_index
        if low < Low_OB 
            Low_OB := low
            Bull_I  := bar_index

    if CondHigh

        Permit_HSet := true
        for i = 1 to BarBackCheck by 1
            if Body[i] < 0 and Permit_HSet
                Permit_HReset := true
                CISDLvLP_H := (BarBackCheck > 1 and i > 1) ? math.min(open[i - 1], open[i - 2]) : open[i - 1]
                CISDLvLI_H := (BarBackCheck > 1 and i > 1) ? (math.min(open[i - 1], open[i - 2]) == open[i - 2]) ? bar_index[i - 2] : bar_index[i - 1] : bar_index[i - 1]
                if AShow and HShow
                    CISD_LineH := line.new(CISDLvLI_H, CISDLvLP_H, bar_index , CISDLvLP_H , color = #890505, style = line.style_dotted)
                    CISD_NameH := label.new(CISDLvLI_H + 1 , low[bar_index - CISDLvLI_H] - (ATR * 0.3) , Label, color = na, style = label.style_label_upper_left , textcolor = #890505, size = size.tiny)
                Permit_HSet := false
    if Permit_HReset and Newyork_T == 1 
        if SConditionFVG
            FVG_Bear_I.push(BarSFVG)
            FVG_Bear_D.push(SDFVG)
            FVG_Bear_P.push(SPFVG)
        if FVG_Bear_I.size() > 0
            if high > FVG_Bear_P.get(FVG_Bear_I.size() - 1)
                FVG_Bear_I.remove(FVG_Bear_I.size() - 1)
                FVG_Bear_D.remove(FVG_Bear_D.size() - 1)
                FVG_Bear_P.remove(FVG_Bear_P.size() - 1)               

        if  close >= CISDLvLP_H and (bar_index - CISDLvLI_H) <= 90
            CISD_LineH.set_x2(bar_index + 1)
            
        if  close <= CISDLvLP_H and (bar_index - CISDLvLI_H) <= 90

            Permit_HReset := false
            if AShow and HShow
                CISD_ShapH := label.new(bar_index , high + (ATR * 0.6), "", color = #890505, style = label.style_triangledown , size = size.tiny)   

    if CondLow

        Permit_LSet := true
        for i = 1 to BarBackCheck by 1
            if Body[i] > 0 and Permit_LSet
                Permit_LReset := true
                CISDLvLP_L := (BarBackCheck > 1  and i > 1) ? math.max(open[i - 1], open[i - 2]) : open[i - 1]
                CISDLvLI_L := (BarBackCheck > 1  and i > 1) ? (math.max(open[i - 1], open[i - 2]) == open[i - 2]) ? bar_index[i - 2] : bar_index[i - 1] : bar_index[i - 1]
                if AShow and LShow
                    CISD_LineL := line.new(CISDLvLI_L, CISDLvLP_L, bar_index , CISDLvLP_L, color = #016004, style = line.style_dotted)
                    CISD_NameL := label.new(CISDLvLI_L + 1 , high[bar_index - CISDLvLI_L] + (ATR * 0.6) , Label, color = na, style = label.style_label_lower_right , textcolor = #016004 , size = size.tiny)
                Permit_LSet := false
    if Permit_LReset and Newyork_T == 1
        if DConditionFVG
            FVG_Bull_I.push(BarDFVG)
            FVG_Bull_D.push(DDFVG)
            FVG_Bull_P.push(DPFVG)
        if FVG_Bull_I.size() > 0
            if low < FVG_Bull_P.get(FVG_Bull_I.size() - 1)
                FVG_Bull_I.remove(FVG_Bull_I.size() - 1)
                FVG_Bull_D.remove(FVG_Bull_D.size() - 1)
                FVG_Bull_P.remove(FVG_Bull_P.size() - 1)   
        if  close <= CISDLvLP_L and (bar_index - CISDLvLI_L) <= 90
            CISD_LineL.set_x2(bar_index + 1)
        if  close >= CISDLvLP_L and (bar_index - CISDLvLI_L) <= 90

            Permit_LReset := false
            if AShow and LShow
                CISD_ShapL := label.new(bar_index , low - (ATR * 0.6), "", color = #016004, style = label.style_triangleup  , size = size.tiny)
   
    if Newyork_T == 1
        if FVG_Bull_I.size() > 0 or (ta.change(FVG_Bull_I.size() > 0) and FVG_Bull_I.size() > 0)
            Bull_FVG := FVG_Bull_I.get(FVG_Bull_I.size() - 1)
            Bull_FVG_D := FVG_Bull_D.get(FVG_Bull_D.size() - 1)
            Bull_FVG_P:= FVG_Bull_P.get(FVG_Bull_P.size() - 1)
        if FVG_Bear_I.size() > 0 or (ta.change(FVG_Bear_I.size() > 0) and FVG_Bear_I.size() > 0)
            Bear_FVG := FVG_Bear_I.get(FVG_Bear_I.size() - 1)
            Bear_FVG_D := FVG_Bear_D.get(FVG_Bear_D.size() - 1)
            Bear_FVG_P := FVG_Bear_P.get(FVG_Bear_P.size() - 1)

    if Permit_HReset[1] and Permit_HReset == false
        Bear_Trigger := true 
        if FVG_Bear_I.size() > 0 and Bear_FVG != 0
            FVG_Bear_Trigger := true
        else
            FVG_Bear_Trigger := false
    else 
        Bear_Trigger := false
        FVG_Bear_Trigger := false

    if Permit_LReset[1] and Permit_LReset == false
        Bull_Trigger := true
        if FVG_Bull_I.size() > 0 and Bull_FVG != 0
            FVG_Bull_Trigger := true 
        else 
            FVG_Bull_Trigger := false                      
    else 
        Bull_Trigger := false
        FVG_Bull_Trigger := false
 
    if Newyork_T[1] == 0 and Newyork_T[2] == 1
        Bear_FVG   := 0 
        Bear_FVG_D := 0.0
        Bear_FVG_P := 0.0
        Bull_FVG   := 0 
        Bull_FVG_D := 0.0
        Bull_FVG_P := 0.0
        High_OB    := na
        Low_OB     := na       
        Bear_D     := na
        Bear_P     := na
        Bear_I     := na
        Bull_D     := na
        Bull_P     := na
        Bull_I     := na
        FVG_Bear_D.clear()
        FVG_Bear_P.clear()
        FVG_Bear_I.clear()
        FVG_Bull_D.clear()
        FVG_Bull_P.clear()
        FVG_Bull_I.clear()

    [Bull_Trigger, Bear_Trigger,FVG_Bull_Trigger, FVG_Bear_Trigger, Bull_FVG, Bear_FVG, Bull_FVG_D, Bear_FVG_D,Bull_FVG_P, Bear_FVG_P,Bull_I, Bear_I, Bull_D, Bear_D, Bull_P, Bear_P ]


Cond_High = (Newyork_T == 1 ) and (High_Break and not High_Break[1]) and not Low_Break
Cond_Low  = (Newyork_T == 1 ) and (Low_Break and not Low_Break[1])   and not High_Break

//Call CISD Function
[Bull_Trigger, Bear_Trigger,FVG_Bull_Trigger, FVG_Bear_Trigger,  Bull_FVG, Bear_FVG,  Bull_FVG_D, Bear_FVG_D,Bull_FVG_P, Bear_FVG_P,Bull_I, Bear_I, Bull_D, Bear_D, Bull_P, Bear_P ] = 
 CISDLevelDetector(Cond_High,Cond_Low ,Newyork_OR ,Newyork_T ,DConditionFVG, DDFVG, DPFVG, BarDFVG, SConditionFVG, SDFVG, SPFVG, BarSFVG, 120, 'CISD level', 
 CISD_AShow, CISD_HShow, CISD_LShow, CISD_HNColor, CISD_LNColor , CISD_HLColor, CISD_LLColor)

[Bu_Xd1, Bu_Xd2, Bu_Yd12, Bu_Xp1, Bu_Xp2, Bu_Yp12] = 
 Refiner.OBRefiner('Demand', Refine ? 'On' : 'Off', RefineMe,Bull_Trigger , Bull_I) //and not Bull_FVG 

[Be_Xd1, Be_Xd2, Be_Yd12, Be_Xp1, Be_Xp2, Be_Yp12] = 
 Refiner.OBRefiner('Supply', Refine ? 'On' : 'Off', RefineMe ,Bear_Trigger ,  Bear_I) // and not Bear_FVG 

[Alert_DAMM, Alert_SAMMbb, PASBB, DASBB, IASBB] = Drawing.OBDrawing('Demand', Bull_Trigger  , Bu_Yd12, Bu_Yp12, Bu_Xd1, Newyork_T == 1, 60 ,MLOB ,MLOB , true, false, DOBShow, false, DOBColor, #ffffff00) // and not Bull_FVG 11
[Alert_SMMM, Alert_DMMMbb, PMDBB, DMDBB, IMDBB] = Drawing.OBDrawing('Supply', Bear_Trigger  , Be_Yd12, Be_Yp12, Be_Xd1, Newyork_T == 1, 60 ,MLOB ,MLOB , true, false, SOBShow, false, SOBColor, #ffffff00) //  and not Bear_FVG  

Drawing.OBDrawing('Demand', FVG_Bull_Trigger   , Bull_FVG_D  , Bull_FVG_P , Bull_FVG ,Newyork_T == 1 , 60  ,MLFVG ,MLFVG , true ,false ,DFVGShow, false,DFVGColor, #ffffff00) //Bull_FVG 
Drawing.OBDrawing('Supply', FVG_Bear_Trigger   , Bear_FVG_D  , Bear_FVG_P , Bear_FVG, Newyork_T == 1 , 60  ,MLFVG ,MLFVG , true ,false ,SFVGShow, false,SFVGColor, #ffffff00) // Bear_FVG

Overview

Silver Bullet ICT Strategy [TradingFinder] 10-11 AM +FVG draws demand and supply order blocks and fair value gaps, and marks high and low CISD levels. Users can refine order blocks as defensive or aggressive, choose proximal, midpoint, or distal mitigation, and optionally filter fair value gaps by zone width. A bar-back setting controls how far CISD checks look. Display toggles and colors hide or restyle each zone. It does not place entries, exits, or a stop loss.

Details

Published by

alvinng214 on GitHub

Code credit

TFlab, as written in the script's header

Type

Indicator, Pine Script v5

Draws

On the price chart

Category

SMC / ICT / price action, Sessions & time, Support & resistance

Markets

Any symbol

Timeframes

Any timeframe

Risk Notes

No repainting, lookahead or stacked entries were found in its code or README. That says nothing about how well it works: test it first.

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
Refine Order BlockbooltrueRefine
RefineMestringDefensiveRefineMe
Mitigation Level OBstringProximalMLOB
FVG Filter ............boolfalsePFVGFilter
PFVGFilterTypestringDefensivePFVGFilterType
Mitigation Level FVGstringProximalMLFVG
Bar Back Checkint5BarBackCheck
Demand Order BlockbooltrueDOBShow
DOBColorcolor#17c0016bDOBColor
Supply Order BlockbooltrueSOBShow
SOBColorcolor#df050573SOBColor
Demand FVGbooltrueDFVGShow
Show all 22 settings
SettingTypeDefaultVariable
DFVGColorcolor#2195f36cDFVGColor
Supply FVGbooltrueSFVGShow
SFVGColorcolor#ff990070SFVGColor
Show All CISDbooltrueCISD_AShow
Show High CISDbooltrueCISD_HShow
Show Low CISDbooltrueCISD_LShow
Namecolor#870505CISD_HNColor
Namecolor#014f07CISD_LNColor
Linecolor#b90000b8CISD_HLColor
Linecolor#069206a7CISD_LLColor
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

Golden Bullet Strategy

by TradersPost
218 stars

The Golden Bullet Strategy is an overlay signal indicator based on Smart Money Concepts and time-based liquidity models. It identifies liquidity sweeps of a designated reference session range during a specified hunt window. It then confirms Market Structure Sh

Indicator v6 SMC / ICT / price actionSessions & time
Updated 3 months ago · None stated GitHub repository of Golden Bullet Strategy

This indicator detects and draws the first Fair Value Gap (FVG) that forms in each hourly session based on a selected lower timeframe, with specialized handling for Regular Trading Hours (RTH) confluence windows. It draws FVG range boxes, midpoint lines, hourl

Indicator v5 SMC / ICT / price actionSupport & resistance Repaints

This indicator combines six trading tools into a single chart overlay to optimize indicator limits. It calculates Bollinger Bands, projects weekend price boundaries, plots market structure elements like order blocks, breaker blocks, and MSB lines, marks New Yo

Indicator v6 Support & resistanceSMC / ICT / price action Repaints
19 stars

This indicator highlights Inner Circle Trader (ICT) killzones and key session pivot points directly on the price chart. It projects shaded boxes for specific trading sessions, including Asia, London, NY AM, NY Lunch, and NY PM, to help traders identify high-li

Indicator v5 SMC / ICT / price actionSessions & time
Updated 3 years ago · MIT GitHub repository of ICT Killzones & Pivots

Bandz Session Ranges + ORG + Opening Prices plots trading session ranges, killzones, opening RTH gaps, standard deviation projections, and key opening prices directly on the price chart. It calculates gap ranges based on prior regular trading hours close sourc

Indicator v6 Sessions & timeSupport & resistance
Updated 2 weeks ago · MPL-2.0 GitHub repository of Bandz Session Ranges + ORG + Opening Prices

More indicators

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers