Indicator · Pine Script v5 · On the chart

2022 Model ICT Entry Strategy TradingFinder

by alvinng214· code credited to TFlab

This chart overlay indicator identifies and plots Smart Money Concepts (SMC) elements based on the ICT 2022 trading model.

View on GitHub

GitHub stars2on the repository
Pine versionv5runs as is
Lines of code396
Settings32inputs
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

396 lines of Pine Script v5 from SMC_SETUP/TFlab ICT 2022 Model.txt, published under MPL-2.0 (file header). Keep the author's credit and licence lines when you reuse it.

TFlab ICT 2022 Model.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("2022 Model ICT Entry Strategy [TradingFinder] One Setup For Life", "TFlab ICT 2022 Model", 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
    //Import Library
import TFlab/AlertSenderLibrary_TradingFinder/1 as Alert

//Input
SwingPeriod = input.int(50, 'Swing Period' , minval = 1, group = 'Logical Setting')
MaxSwingBack_Method = input.string('All', 'Max Swing Back Method' , ['All', 'Custom'], group = 'Logical Setting')
MaxSwingBack = input.int(100, 'Max Swing Back' , minval = 1, group = 'Logical Setting')
FVG_Length = input.int(120, 'FVG Length' , minval = 1, group = 'Logical Setting')
MSS_Length =  input.int(80, 'MSS Length' , minval = 1, group = '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')


    //Display FVG

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

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

AShow = input.bool(true, 'Show All  LvL',group = 'Display Setting')
HShow = input.bool(true, 'Show High  LvL',group = 'Display Setting', inline = 'H')
LShow = input.bool(true, 'Show Low  LvL',group = 'Display Setting' , inline = 'L')

HNColor = input.color(#870505 , 'Name',group = 'Display Setting', inline = 'H')
LNColor = input.color(#014f07 , 'Name',group = 'Display Setting', inline = 'L')
HLColor = input.color(#b90000b8 , 'Line',group = 'Display Setting', inline = 'H')
LLColor = input.color(#069206a7 , 'Line',group = 'Display Setting', inline = 'L')


AShow_MSS = input.bool(true, 'Show All MSS',group = 'Display Setting')
HShow_MSS = input.bool(true, 'Show High MSS',group = 'Display Setting', inline = 'HMSS')
LShow_MSS = input.bool(true, 'Show Low MSS',group = 'Display Setting' , inline = 'LMSS')

HNColor_MSS = input.color(#870505 , 'Name',group = 'Display Setting', inline = 'HMSS')
LNColor_MSS = input.color(#014f07 , 'Name',group = 'Display Setting', inline = 'LMSS')
HLColor_MSS = input.color(#b90000b8 , 'Line',group = 'Display Setting', inline = 'HMSS')
LLColor_MSS = input.color(#069206a7 , 'Line',group = 'Display Setting', inline = 'LMSS')

   //Alert
Alert = input.string('On', 'Alert', ['On', 'Off'], 'If you turn on the Alert, you can receive alerts and notifications after setting the "Alert".', group = 'Alert')
AlertName = input.string('2022 Model [TradingFinder]', 'Alert Name', group = 'Alert')
Frequncy = input.string('Once Per Bar' , 'Message Frequency' , ['All', 'Once Per Bar' , 'Per Bar Close'], 'The triggering frequency. Possible values are: All'+ 
 ' (all function calls trigger the alert), Once Per Bar (the first function call during the bar triggers the alert), ' +  
 ' Per Bar Close (the function call triggers the alert only when it occurs during the last script iteration of the real-time bar,' +  
 ' when it closes). The default is alert.freq_once_per_bar.)', group = 'Alert')
UTC = input.string('UTC' , 'Show Alert time by Time Zone', group = 'Alert')
MessageBull = input.text_area('Long Signal Position Based on 2022 Model' , 'Long Position Message' , group = 'Alert') 
MessageBear = input.text_area('Short Signal Position Based on 2022 Model', 'Short Position Message',group = 'Alert')

// LvL Detector Function
Lvl_Detector(SwingPeriod, MaxSwingBack_Method, MaxSwingBack) => //Swing Failure 
    const int Z = 100000000000000000

    var MSH_P = array.new_float()
    var MSH_I = array.new_int()
    var MSL_P = array.new_float()
    var MSL_I = array.new_int()

    var MSH_Permit = array.new_bool()
    var AOI_MSH = array.new_int()//Another Opportunity Index

    var MSL_Permit = array.new_bool()
    var AOI_MSL = array.new_int()//Another Opportunity Index

    var float Last_MSH_P = 0.0
    var int Last_MSH_I   = 0
    var float Last_MSL_P = 0.0
    var int Last_MSL_I   = 0

    int HSwingBack = 0
    int LSwingBack = 0
    
    var bool RealLvL         = na
    var bool ConsiderableLvL = na

    var float H_Price_LvL = 0.0
    var int   H_Index_LvL = 0
    var float L_Price_LvL = 0.0
    var int   L_Index_LvL = 0

    bool HAlert = na
    bool LAlert = na  

    MSH = ta.pivothigh(SwingPeriod , SwingPeriod)   // Major Swing High
    MSL = ta.pivotlow(SwingPeriod , SwingPeriod)   // Major Swing Low

    if not (not MSH)
        MSH_P.push(high[SwingPeriod])
        MSH_I.push(time[SwingPeriod])
        MSH_Permit.push(true)
        AOI_MSH.push(Z)

    if not (not MSL)
        MSL_P.push(low[SwingPeriod])
        MSL_I.push(time[SwingPeriod])
        MSL_Permit.push(true)
        AOI_MSL.push(Z)

    if  MSH_P.size() > 0 
        Last_MSH_P := MSH_P.get(MSH_P.size() - 1)
        Last_MSH_I := MSH_I.get(MSH_I.size() - 1)

    if  MSL_P.size() > 0 
        Last_MSL_P := MSL_P.get(MSL_P.size() - 1)
        Last_MSL_I := MSL_I.get(MSL_I.size() - 1)

    switch MaxSwingBack_Method
        'All'    => HSwingBack := MSH_P.size() , LSwingBack := MSL_P.size()
        'Custom' => HSwingBack := MaxSwingBack , LSwingBack := MaxSwingBack 


    if MSH_P.size() > (MaxSwingBack_Method == 'All' ? 1 : HSwingBack)
        for i = 1 to HSwingBack   by 1
            if  MSH_Permit.get(MSH_P.size()  - i)
                if    (bar_index <= AOI_MSH.get(AOI_MSH.size() - i) ) 
                    if   (MSH_P.get(MSH_P.size() - i)  < high and MSH_P.get(MSH_P.size() - i)  > close and (AOI_MSH.get(AOI_MSH.size() - i) == Z) ) 
                        MSH_Permit.set(MSH_P.size() - i  , false)
                        H_Index_LvL := MSH_I.get(MSH_P.size() - i)
                        H_Price_LvL := MSH_P.get(MSH_P.size() - i)
                        HAlert := true
                if ((MSH_P.get(MSH_P.size() - i)  < close) and (AOI_MSH.get(AOI_MSH.size() - i) == Z))
                    AOI_MSH.set(AOI_MSH.size() - i, bar_index)



    if MSL_P.size() > (MaxSwingBack_Method == 'All' ? 1 : LSwingBack)
        for i = 1 to  LSwingBack  by 1
            if  MSL_Permit.get(MSL_P.size()  - i)
                if    (bar_index <= AOI_MSL.get(AOI_MSL.size() - i) ) 
                    if    (MSL_P.get(MSL_P.size() - i)  > low and MSL_P.get(MSL_P.size() - i)  < close and (AOI_MSL.get(AOI_MSL.size() - i) == Z))
                        MSL_Permit.set(MSL_P.size() - i  , false)
                        L_Index_LvL := MSL_I.get(MSL_P.size() - i)
                        L_Price_LvL := MSL_P.get(MSL_P.size() - i)
                        LAlert := true
                if ((MSL_P.get(MSL_P.size() - i)  > close) and (AOI_MSL.get(AOI_MSL.size() - i) == Z))
                    AOI_MSL.set(AOI_MSL.size() - i, bar_index)
    [nz(HAlert),H_Index_LvL, H_Price_LvL, nz(LAlert), L_Index_LvL, L_Price_LvL]



[HAlert_o, H_Index_LvL_o, H_Price_LvL_o, LAlert_o, L_Index_LvL_o, L_Price_LvL_o] = 
 request.security(syminfo.tickerid, timeframe.period , Lvl_Detector(SwingPeriod, MaxSwingBack_Method, MaxSwingBack), gaps = barmerge.gaps_on)

var bool  HAlert = na 
var int   H_Index_LvL = na 
var float H_Price_LvL = na
var bool  LAlert = na
var int   L_Index_LvL = na
var float L_Price_LvL = na 

if HAlert_o
    HAlert      := true
    H_Index_LvL := H_Index_LvL_o
    H_Price_LvL := H_Price_LvL_o
else 
    HAlert      := false

if LAlert_o
    LAlert      := true
    L_Index_LvL := L_Index_LvL_o
    L_Price_LvL := L_Price_LvL_o
else 
    LAlert      := false

//MSS Detector Function

MSSLevelDetector(CondHigh, CondLow,DConditionFVG, DDFVG, DPFVG, BarDFVG, SConditionFVG, SDFVG, SPFVG, BarSFVG, Label , H_Cond, H_Index, H_Price, L_Cond, L_Index, L_Price) =>
    ATR                      = ta.atr(55) 
    Body                     = close - open
    var float MSSLvLP_L      = 0.0
    var float MSSLvLP_H      = 0.0
    var int MSSLvLI_L        = 0
    var int MSSLvLI_H        = 0  
    var bool Permit_HSet     = true
    var bool Permit_LSet     = true
    var bool Permit_HReset   = true
    var bool Permit_LReset   = true   

    var line  MSS_LineL      = na
    var line  MSS_LineH      = na
    var label MSS_NameH      = na
    var label MSS_NameL      = na
    var label MSS_ShapH      = na
    var label MSS_ShapL      = na

    var line  MSH_Line  = na 
    var label MSH_Label = na
    var label MSH_Shap  = na
    var line  MSL_Line   = na
    var label MSL_Label = na
    var label MSL_Shap  = na
    var bool H_Permit = true
    var bool L_Permit = true
    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 H_P = 0.0
    var int   H_I = 0
    var float L_P = 0.0
    var int   L_I = 0

    // MSS Level
    if bool(ta.pivothigh(2 , 1))
        H_P := high[1]
        H_I := bar_index[1]

    if bool(ta.pivotlow(2 , 1))
        L_P := low[1]
        L_I := bar_index[1]
    //Liquidity Sweep Drawing
    if H_Cond and H_Permit
        H_Permit := false
        if AShow
            if HShow
                MSH_Line  := line.new(H_Index, H_Price, time, H_Price, color = na , style = line.style_dashed , xloc = xloc.bar_time)
                MSH_Label := label.new(bar_index, (high + 1.15 * ATR), 'Liquidity Sweep', color = #ffffff00, textcolor =  na, style = label.style_label_down, size = size.small)
                
    if not HAlert
        H_Permit := true
    if L_Cond and L_Permit
        L_Permit := false
        if AShow
            if LShow
                MSL_Line  := line.new(L_Index, L_Price, time, L_Price, color = na , style = line.style_dashed , xloc = xloc.bar_time)
                MSL_Label := label.new(bar_index, (low - 1.15 * ATR), 'Liquidity Sweep', color = #ffffff00, textcolor = na, style = label.style_label_up, size = size.small)
                  
    if not LAlert
        L_Permit := true
    //MSS
    if CondHigh

        Permit_HSet := true 
        if Permit_HSet and H_Index_LvL != H_Index_LvL[1]
            Permit_HReset := true
            MSSLvLP_H := L_P
            MSSLvLI_H := L_I
            if AShow_MSS and HShow_MSS
                MSS_LineH := line.new(MSSLvLI_H, MSSLvLP_H, bar_index , MSSLvLP_H , color = na, style = line.style_solid)
                MSS_NameH := label.new(MSSLvLI_H + 1 , low[bar_index - MSSLvLI_H] - (ATR * 0.3) , Label, color = na, style = label.style_label_upper_left , textcolor = na, size = size.small)
            Permit_HSet := false
    if Permit_HReset[0]  
        if SConditionFVG[0]
            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_D.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[1] >= MSSLvLP_H and (bar_index[1]  - MSSLvLI_H) <= MSS_Length
            MSS_LineH.set_x2(bar_index + 1)
            
        if  close[1]  <= MSSLvLP_H and (bar_index[1]  - MSSLvLI_H) <= MSS_Length
            MSH_Line.set_color(HLColor)
            MSH_Label.set_textcolor(HNColor)
            MSS_LineH.set_color(HLColor_MSS)
            MSS_NameH.set_textcolor(HNColor_MSS)
            Permit_HReset := false
            if AShow_MSS and HShow_MSS
                MSS_ShapH := label.new(bar_index , high + (ATR * 0.6), "", color = HNColor_MSS, style = label.style_triangledown , size = size.tiny)   

    if CondLow

        Permit_LSet := true 
        if Permit_LSet and L_Index_LvL != L_Index_LvL[1]
            Permit_LReset := true
            MSSLvLP_L := H_P
            MSSLvLI_L := H_I
            if AShow_MSS and LShow_MSS
                MSS_LineL := line.new(MSSLvLI_L, MSSLvLP_L, bar_index , MSSLvLP_L, color = na, style = line.style_solid)
                MSS_NameL := label.new(MSSLvLI_L + 1 , high[bar_index - MSSLvLI_L] + (ATR * 0.6) , Label, color = na, style = label.style_label_lower_right , textcolor = na , size = size.small)
            Permit_LSet := false
    if Permit_LReset[0]
        if DConditionFVG[0]
            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_D.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[0]  <= MSSLvLP_L and (bar_index[0]  - MSSLvLI_L) <= MSS_Length
            MSS_LineL.set_x2(bar_index + 1)
        if  close[0]  >= MSSLvLP_L and (bar_index[0]  - MSSLvLI_L) <= MSS_Length
            MSL_Line.set_color(LLColor)
            MSL_Label.set_textcolor(LNColor)
            MSS_LineL.set_color(LLColor_MSS)
            MSS_NameL.set_textcolor(LNColor_MSS)
            Permit_LReset := false
            if AShow_MSS and LShow_MSS
                MSS_ShapL := label.new(bar_index , low - (ATR * 0.6), "", color = LNColor_MSS, style = label.style_triangleup  , size = size.tiny)
   
    //Set FVG
    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
    //Reset FVG
    if HAlert
        Bear_FVG   := 0 
        Bear_FVG_D := 0.0
        Bear_FVG_P := 0.0
        FVG_Bear_D.clear()
        FVG_Bear_P.clear()
        FVG_Bear_I.clear()
    if LAlert
        FVG_Bull_D.clear()
        FVG_Bull_P.clear()
        FVG_Bull_I.clear()
        Bull_FVG   := 0 
        Bull_FVG_D := 0.0
        Bull_FVG_P := 0.0
    [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]


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

//Call MSS 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 ] = 
 MSSLevelDetector(HAlert,LAlert ,DConditionFVG, DDFVG, DPFVG, BarDFVG, SConditionFVG, SDFVG, SPFVG, BarSFVG,'MSS', HAlert, H_Index_LvL, H_Price_LvL, LAlert, L_Index_LvL, L_Price_LvL)

[MitigationAlert_Bull, MitigationAlert_BB_Bull, ProximalPrice_BB_Bull, DistalPrice_BB_Bull, Index_BB_Bull] = Drawing.OBDrawing('Demand', FVG_Bull_Trigger and (bar_index - Bull_FVG < 500)  , Bull_FVG_D  , Bull_FVG_P , Bull_FVG ,true , FVG_Length  ,MLFVG ,MLFVG , true ,false ,DFVGShow, false,DFVGColor, #ffffff00) //Bull_FVG 
[MitigationAlert_Bear, MitigationAlert_BB_Bear, ProximalPrice_BB_Bear, DistalPrice_BB_Bear, Index_BB_Bear] = Drawing.OBDrawing('Supply', FVG_Bear_Trigger and (bar_index - Bear_FVG < 500)  , Bear_FVG_D  , Bear_FVG_P , Bear_FVG ,true , FVG_Length  ,MLFVG ,MLFVG , true ,false ,SFVGShow, false,SFVGColor, #ffffff00) // Bear_FVG

Alert.AlertSender(MitigationAlert_Bull  , Alert, AlertName , 'Analysis', '', 'Basic' ,'Once Per Bar', 'UTC', 'Off', MessageBull, open, high, low, close,0,0,0,0,0)
Alert.AlertSender(MitigationAlert_Bear  , Alert, AlertName , 'Analysis', '', 'Basic' ,'Once Per Bar', 'UTC', 'Off', MessageBear, open, high, low, close,0,0,0,0,0)

Overview

2022 Model ICT Entry Strategy TradingFinder detects Fair Value Gaps (FVG), Market Structure Shifts (MSS), and key swing high and low levels using specialized external libraries. Traded zones can be filtered by zone width ranging from aggressive to defensive, with configurable mitigation levels such as proximal or 50 percent threshold. It draws demand and supply zones directly on the main price chart alongside alert triggers.

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, 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
Swing Periodint50SwingPeriod
Max Swing Back MethodstringAllMaxSwingBack_Method
Max Swing Backint100MaxSwingBack
FVG Lengthint120FVG_Length
MSS Lengthint80MSS_Length
FVG Filter ............boolfalsePFVGFilter
PFVGFilterTypestringDefensivePFVGFilterType
Mitigation Level FVGstringProximalMLFVG
Demand FVGbooltrueDFVGShow
DFVGColorcolor#03a8036cDFVGColor
Supply FVGbooltrueSFVGShow
SFVGColorcolor#c20d0070SFVGColor
Show all 32 settings
SettingTypeDefaultVariable
Show All LvLbooltrueAShow
Show High LvLbooltrueHShow
Show Low LvLbooltrueLShow
Namecolor#870505HNColor
Namecolor#014f07LNColor
Linecolor#b90000b8HLColor
Linecolor#069206a7LLColor
Show All MSSbooltrueAShow_MSS
Show High MSSbooltrueHShow_MSS
Show Low MSSbooltrueLShow_MSS
Namecolor#870505HNColor_MSS
Namecolor#014f07LNColor_MSS
Linecolor#b90000b8HLColor_MSS
Linecolor#069206a7LLColor_MSS
AlertstringOnAlert
Alert Namestring2022 Model [TradingFinder]AlertName
Message FrequencystringOnce Per BarFrequncy
Show Alert time by Time ZonestringUTCUTC
Long Position MessagetextLong Signal Position Based on 2022 ModelMessageBull
Short Position MessagetextShort Signal Position Based on 2022 ModelMessageBear
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

ICT Equal Highs and Lows

by ArunKBhaskar
575 stars

This overlay indicator finds pivot highs and lows on the price chart and compares the last two highs and the last two lows. When the percentage difference between a pair is below the Equal HL threshold, it treats them as equal levels and draws a box. Left and

Indicator v5 SMC / ICT / price actionSupport & resistance
Updated 1 year ago · MPL-2.0 GitHub repository of ICT Equal Highs and Lows

DE-tracker

by Allen1212
303 stars

This indicator plots labels on the TradingView price chart to mark ARK Invest's buy and sell trades for the DE stock. Buy transactions appear in green with X1 or X2 multipliers showing the number of ARK ETFs involved on the same day; sells appear in red. The m

Indicator v4 Support & resistanceSMC / ICT / price action
Updated 2 years ago · None stated GitHub repository of DE-tracker

This Pine Script indicator plots a ZigZag on the price chart. It identifies reversal points when price moves more than a set percentage from the last pivot. The script calculates forecasts using zigzag data and labels detected geometric patterns including harm

Indicator v4 TrendSupport & resistance

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

Open Source Fractal

by cantolab
183 stars

This indicator implements the Fractal Model concept to plot market structure shifts, liquidity sweeps, and Change in State of Delivery (CISD) levels. It overlays custom higher-timeframe candle previews, open prices, and time markers directly on the price chart

Indicator v6 SMC / ICT / price actionSupport & resistance
Updated 2 months ago · MIT GitHub repository of Open Source Fractal

Swing Failure Signals

by Ganador1
154 stars

This indicator calculates pivot highs and pivot lows to detect liquidity sweeps and Swing Failure Patterns. It identifies when price breaks past recent key swing highs or lows within a configurable historical window, then looks for a quick reversal or change i

Indicator v6 SMC / ICT / price actionSupport & resistance
Updated 2 months ago · Apache-2.0 GitHub repository of Swing Failure Signals

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