https://ru.tradingview.com/script/wm9e7Wca-ICT-Entry-V2-TS-Indie/ ```Pine Script //@version=6 strategy("ICT Entry V2 [TS_Indie]" , overlay=true, max_labels_count=500 , max_lines_count = 500 ,max_boxes_count = 500, max_bars_back = 5000 , margin_long=0, margin_short=0 , initial_capital = 100000 ) get_text_style(style) => out = switch style 'Auto' => size.auto 'Tiny' => size.tiny 'Small' => size.small 'Normal' => size.normal get_line_style(style) => out = switch style '⎯⎯⎯' => line.style_solid '----' => line.style_dashed '····' => line.style_dotted add_int_unshift(array, new_value_to_add) => array.remove(array,array.size(array)-1) array.unshift(array, new_value_to_add) Delete_Box_Push(array,i) => box.delete(array.get(array, i)) array.remove(array,i) array.push(array, na) add_array_unshift(array, new_value_to_add) => box.delete(array.get(array, array.size(array)-1)) array.remove(array,array.size(array)-1) array.unshift(array, new_value_to_add) value_unshift_noremove(a1,v1,a2,v2,a3,v3) => array.unshift(a1,v1) , array.unshift(a2,v2) , array.unshift(a3,v3) value_unshift(a1,v1,a2,v2,a3,v3) => array.unshift(a1,v1) , array.unshift(a2,v2) , array.unshift(a3,v3) array.remove(a1,array.size(a1)-1) , array.remove(a2,array.size(a2)-1) , array.remove(a3,array.size(a3)-1) value_remove(a1,a2,a3,i) => array.remove(a1,i) , array.push(a1, na) array.remove(a2,i) , array.push(a2, na) array.remove(a3,i) , array.push(a3, na) unshift_remove(array, new_value_to_add) => array.unshift(array, new_value_to_add) array.remove(array,array.size(array)-1) value_delet_Push1(a1,i) => array.remove(a1,i) array.push(a1, na) Delete_line_lbl_Push(array,l_bel,i) => line.delete(array.get(array, i)) , label.delete(array.get(l_bel, i)) array.remove(array,i) , array.remove(l_bel,i) array.push(array, na) , array.push(l_bel, na) Line_mit_unshift(array, new_value_to_add) => line.delete(array.get(array, array.size(array)-1)) array.remove(array,array.size(array)-1) array.unshift(array, new_value_to_add) label_mit_unshift(array, new_value_to_add) => label.delete(array.get(array, array.size(array)-1)) array.remove(array,array.size(array)-1) array.unshift(array, new_value_to_add) color TRANSP = #ffffff00 //-----------------------------------------------------------------------------{ Entry_Position = "========= Entry Condition =========" rr_ratio = input.float(3, "Risk Reward Ratio", step=0.1 , inline="0.1" , group = Entry_Position ) length_atr = input.int(title="Stop loss ATR", defval=50, minval=1 , inline="0.2" , group = Entry_Position ) x_ATR = input.float( 0.5 , "X", step=0.1 , inline="0.2" , tooltip = 'Stop loss ATR 50 is the average ATR over 50 candles, which is then multiplied by the value in the second field to calculate the stop loss. \n\n (If the second field is set to 0, this function will be disabled.)', group = Entry_Position ) fibo_entry = input.float(0, "Entry Zone", step= 1 , inline="0.21" , tooltip = 'Set the entry zone within the FVG where the order will be placed. \n\n For example, if the value is set to 50, the order will be placed at the midpoint of the FVG.' , group = Entry_Position ) iFVG_be_FVG = input.bool( false ," iFVG Overlap FVGㅤㅤ", inline="0.212", group = Entry_Position) Con_FVG_mix = input.bool( false ,"Mix ", inline="0.212", tooltip = '"iFVG Overlap FVG is false" For example, on the Buy side: the lower iFVG box must be higher than the upper FVG box. \n\n When "iFVG Overlap FVG is false", the lower iFVG box must be lower than the upper FVG box. \n\n When “Mix is true” is enabled, both conditions will be accepted and filtered together.' , group = Entry_Position) FVG_min_ATR = input.float( 0.01 , "Gap Min", step=0.1 , inline="0.215" , group = Entry_Position ) FVG_max_ATR = input.float( 0.2 , "Max", step=0.1 , inline="0.215" , tooltip = 'Filter the gap between FVG and iFVG according to the trading system rules. \n\n The gap must be greater than Min x ATR[50] and less than Max x ATR[50].' , group = Entry_Position ) Filter_size_FVG = input.bool(false,'Filter Size FVG for entry signals', inline="0.22", tooltip = 'Filter the size of FVG by setting Min and Max values below' , group=Entry_Position) FVG_min = input.float( 0.1 , "Min", step=0.1 , inline="0.23" , group = Entry_Position ) FVG_max = input.float( 0.5 , "Max", step=0.1 , inline="0.23" , tooltip = 'The Min & Max values will be multiplied by the ATR 50 average and compared with the FVG size. \n\n The FVG size must be greater than (Min x ATR[50]) and less than (Max x ATR[50]).' , group = Entry_Position ) Filter_size_iFVG = input.bool(false,'Filter Size iFVG for entry signals', inline="0.232", tooltip = 'Filter the size of iFVG by setting Min and Max values below' , group=Entry_Position) iFVG_min = input.float( 0.1 , "Min", step=0.1 , inline="0.233" , group = Entry_Position ) iFVG_max = input.float( 0.5 , "Max", step=0.1 , inline="0.233" , tooltip = 'The Min & Max values will be multiplied by the ATR 50 average and compared with the iFVG size. \n\n The iFVG size must be greater than (Min x ATR[50]) and less than (Max x ATR[50]).' , group = Entry_Position ) Len = input.int(title="Liquidity Pivot Strength", defval = 5 , minval=1, inline="0.3", tooltip = 'This mechanism is derived from the indicator “Smallest Swing [Truth Indie]”. \n\n As the value increases, the strength of the swing increases, resulting in larger swings, which may also affect liquidity.', group=Entry_Position) //[++++ Valid Pullback Market Structure ++++] Follow_trend = input.bool( true ,"Trend Following Conditions" , inline="0.35", tooltip = 'When enabled, orders are placed only in the direction of the trend (Buy in bullish trend, Sell in bearish trend). \n\n When disabled, orders are placed without trend filtering.', group = Entry_Position) Len_in = input.int(title="Strength", defval=10, minval=1, inline="0.4", group=Entry_Position) valid_con = input.string(defval='Close',title='Valid by', options=['Close','High/Low'],inline = '0.4', tooltip = 'The Strength parameter represents the pivot length mechanism, used in combination with price action.\n\n It validates a swing by detecting a structure break formed by candles making new highs or new lows.\n\n The break can be defined using either the candle body or the wick.' , group = Entry_Position ) EQ_con = input.bool( false ,"Premium / Discount Zone" , inline="0.5" , tooltip = 'When enabled, the system filters and allows only orders that are within the Premium and Discount zones.' , group = Entry_Position) Pre_Dis = input.float(50,"Min" ,step=1 , inline="0.55" , group= Entry_Position) Pre_Dis2 = input.float(80,"Max" ,step=1 , inline="0.55" , group= Entry_Position) cancel_pending_A = input.bool( true ,"Cancel Pending Order [A]" , inline="0.6" , tooltip = 'Cancel the pending order when liquidity is swept on the opposite side.' , group = Entry_Position) cancel_pending_B = input.bool( true ,"Cancel Pending Order [B]" , inline="0.7", tooltip = 'Cancel the pending order when new Buy and Sell signals appear.' , group = Entry_Position) cancel_pending_C = input.bool( true ,"Cancel Pending Order [C]" , inline="0.8", tooltip = 'Cancel the pending order when exiting the selected time zone.' , group = Entry_Position) B_long = input.bool( true ,"Entry Longㅤㅤ" , inline="1", group = Entry_Position) S_short = input.bool( true ,"Entry Short", inline="1", group = Entry_Position) //====== Time Filter ====== Time_Filter = "========== Time Filter ==========" s_date = input.time(timestamp("01 Jan 1970"),"Start" , inline="1" , group = Time_Filter ) en_date = input.time(timestamp("01 Jan 2500"), "End " , inline="2" , group = Time_Filter ) con_date = time >= s_date and time <= en_date //======== session ======== _session(sess) => not na(time(timeframe.period, sess, "UTC+0" )) s_New_York = input.bool( false ,"New York" , inline = "3" , group = Time_Filter ) t_New = input.session( '1300-2200', "" , inline = "3" , group = Time_Filter ) Session_1 = _session(t_New) , cf_ses1 = s_New_York ? Session_1 : false s_London = input.bool( false ,"London" , inline = "4" , group = Time_Filter ) t_Lon = input.session( '0700-1600' , "" , inline = "4" , group = Time_Filter ) Session_2 = _session(t_Lon) , cf_ses2 = s_London ? Session_2 : false s_Tokyo = input.bool( false ,"Tokyo" , inline = "5" , group = Time_Filter ) t_Tokyo = input.session( '0000-0900' , "" , inline = "5" , group = Time_Filter ) Session_3 = _session(t_Tokyo) , cf_ses3 = s_Tokyo ? Session_3 : false s_Sydney = input.bool( false ,"Sydney" , inline = "6" , group = Time_Filter ) t_Syd = input.session( '2100-0600' , "" , inline = "6" , group = Time_Filter ) Session_4 = _session(t_Syd) , cf_ses4 = s_Sydney ? Session_4 : false ses_check = s_New_York or s_London or s_Tokyo or s_Sydney time_con = cf_ses1 or cf_ses2 or cf_ses3 or cf_ses4 con_time = ses_check ? time_con : true //======== Table ======== position(select) => switch select "bottom_right" => position.bottom_right "bottom_center" => position.bottom_center "bottom_left" => position.bottom_left "top_center" => position.top_center "top_left" => position.top_left "top_right" => position.top_right "mid_center" => position.middle_center "mid_left" => position.middle_left "mid_right" => position.middle_right display_group = "========= Display FVG and iFVG =========" lbl_SnD = input.bool(true, "Show Label |" , inline="0.4", group= display_group) Size_SnD = input.string('Tiny', 'Size', options = ['Tiny', 'Small', 'Normal'] , inline="0.4" , group= display_group) Col_SnD = input(color.rgb(255, 255, 255), '|' , inline="0.4", group = display_group ) qty_pi = input.int(1,"Q'ty", inline="0.5" , group= display_group) Mit_Pi = input.bool(true, "His" , inline="0.5", group= display_group) qty_mit_pi = input.int(4,"", inline="0.5" ,tooltip = 'Quantity of Demand / Supply and Quantity of History' , group= display_group) SD_fvg = input.bool(true, "FVG" , inline="1", group= display_group) Col_fvg_d = input(color.rgb(76, 175, 79, 75), '' , inline="1", group = display_group) Col_fvg_s = input(color.rgb(242, 54, 70, 75), '/' , inline="1", group = display_group) Col_fvg_mit = input(color.rgb(76, 175, 79, 85), '||' , inline="1", group = display_group) Col_fvg_mit2 = input(color.rgb(242, 54, 70, 85), '/' , inline="1", group = display_group , tooltip = 'Demand / Supply || History of Demand / Supply') SD_i_fvg = input.bool(true, "iFVG" , inline="2", group= display_group) Col_ifvg_d = input(color.rgb(41, 98, 255, 75), '' , inline="2", group = display_group) Col_ifvg_s = input(color.rgb(155, 39, 176, 75), '/' , inline="2", group = display_group) Col_ifvg_mit = input(color.rgb(41, 98, 255, 85), '||' , inline="2", group = display_group) Col_ifvg_mit2 = input(color.rgb(155, 39, 176, 85), '/' , inline="2", group = display_group , tooltip = 'Demand / Supply || History of Demand / Supply') gap_col_min = input(color.rgb(242, 255, 0, 5), 'Gap Min' , inline="3", group = display_group) gap_col_max = input(color.rgb(255, 0, 238, 45), 'ㅤㅤMax' , inline="3", group = display_group) liquidity = "===== Display Liquidity and Swing =====" show_swing_lid = input.bool(true,'Show Swing', inline="3", group=liquidity) sw_line_style = input.string('⎯⎯⎯', 'ㅤㅤstyle' , options = ['⎯⎯⎯', '----', '····'] , inline = '3' , group = liquidity) sw_Size = input.string('Small', 'Swing Size', options = ['Tiny', 'Small' , 'Normal'] , inline="4" , group= liquidity) Color_sw = input(title="", defval=color.rgb(255, 0, 0), inline="4", group=liquidity) txt_lid = input.string("$", 'Text', inline="5", group= liquidity ) lbl_Size = input.string('Small', 'Label Size', options = ['Tiny', 'Small', 'Normal'] , inline="5" , group= liquidity) Lid_show = input.int(2,"Q'ty", inline="6", minval=1 , group= liquidity ) mi_lid = input.bool(true,'His', inline="6", group=liquidity) Lid_ss = input.int(4,"", inline="6", group= liquidity ) show_lid = input.bool(true,'Show Liquidity', inline="7", group=liquidity) Lid_style = input.string('····', 'ㅤㅤstyle' , options = ['⎯⎯⎯', '----', '····'] , inline = '7' , group = liquidity) Lid_color = input(color.rgb(255, 255, 255), 'Line' , inline="7.5", group = liquidity) Lid_txt_color = input(color.rgb(255, 255, 255), 'ㅤㅤText' , inline="7.5", group = liquidity) Internal = "=========== Display Structure ===========" Show_Structure = input.bool(true, "Show", inline="0.55", group= Internal) In_Size = input.string('Tiny', '', options = ['Tiny', 'Small', 'Normal'] , inline="0.55" , group= Internal) In_Line_style = input.string('----', 'Line' , options = ['⎯⎯⎯', '----', '····'] , inline = '0.55' , group = Internal) In_up_color = input(color.teal, 'Bullish' , inline="0.6", group = Internal) In_down_color = input(#f23645, 'ㅤㅤBearish' , inline="0.6", group = Internal) Color_Mark_Swing = input(color.rgb(77, 208, 225), 'Swing' , inline="0.7", group = Internal) color_Eq_In = input(#1848cc, "ㅤㅤEquilibrium" , inline="0.7", group = Internal) var In_Size_CF = In_Size == 'Tiny' ? size.tiny : In_Size == 'Small' ? size.small : size.normal distance_bar_line = input.int(40,"Distance Line", inline="8", group= Internal ) distance_bar_label = input.int(20,"Label", inline="8", group= Internal ) time_set = last_bar_time + ((time-time[1])*distance_bar_line) time_lbl = last_bar_time + ((time-time[1])*distance_bar_label) n_bar = (timeframe.in_seconds(timeframe.period) *1000)*5 gap_bar = (timeframe.in_seconds(timeframe.period) *1000) result_group = "========== Trading Result Table ==========" Show_result = input.bool( true ,"Show Result" , inline = "1" , group = result_group ,tooltip = "The Profit Factor here is calculated using the formula:\n\(Number of Wins x Risk-Reward Ratio) / Number of Losses\n\This formula is based on the assumption that the risk per losing trade is fixed — for example, every losing trade costs exactly 1% of the account.\n\Because of this assumption, the calculated Profit Factor will not match TradingView’s result, since TradingView uses:\n\Gross Profit / Gross Loss\n\And in actual TradingView trades, the loss amount of each trade is not always equal, because the system doesn’t enforce a fixed-risk rule for every losing trade. " ) select_position = input.string("bottom_right", "", options = ["bottom_right", "bottom_center", "bottom_left", "top_center", "top_left" , "top_right" , "mid_center" , "mid_left" , "mid_right" ], group = result_group , inline="1" , display = display.data_window) Factor_up = input.float( 1.3 ,"Profit Factor > " , step=0.1 , inline = "2" , group = result_group ) Factor_up_color = input(title = " " , defval = #a5d6a7 , inline = "2" , group = result_group) Factor_donw = input.float( 1 ,"Profit Factor < " , step=0.1 , inline = "3" , group = result_group ) Factor_donw_color = input(title = " " , defval = #faa1a4 , inline = "3" , group = result_group) //===================== show pending ===================== Display_Entry = "============= Display Entry Box =============" Entry_box = input.bool(true, "Show Boxㅤㅤ" , inline="1", group= Display_Entry) col_1 = input(color.rgb(8, 153, 129, 80), 'TP' , inline="1", group = Display_Entry) col_2 = input(color.rgb(242, 54, 70, 80) , 'ㅤㅤSL' , inline="1", group = Display_Entry) close_all = input.bool(false, "Turn off all displays" , inline="2", group= Display_Entry) Turn_off = not close_all ? true : false atr_sl = ta.ema(ta.tr(true), length_atr) atr_check_FVG_min = atr_sl * FVG_min_ATR atr_check_FVG_max = atr_sl * FVG_max_ATR Check_min_FVG = FVG_min * atr_sl Check_max_FVG = FVG_max * atr_sl Check_min_iFVG = iFVG_min * atr_sl Check_max_iFVG = iFVG_max * atr_sl qty_fvg = 9000 //----------------------Demand & Supply------------------------------------// //FVG var dfvg_top = array.new_float(qty_fvg,na) , var dfvg_bot = array.new_float(qty_fvg,na) , var dfvg_bar = array.new_int(qty_fvg,na) , var dfvg_col = array.new_color(qty_fvg,na) var sfvg_top = array.new_float(qty_fvg,na) , var sfvg_bot = array.new_float(qty_fvg,na) , var sfvg_bar = array.new_int(qty_fvg,na) , var sfvg_col = array.new_color(qty_fvg,na) //BOX FVG var d_fvg_zone = array.new_box(qty_pi,na) , var s_fvg_zone = array.new_box(qty_pi,na) // Mitigate var d_fvg_mit = array.new_box(qty_mit_pi,na) , var s_fvg_mit = array.new_box(qty_mit_pi,na) //Pre-Inversion FVG var dfvg_R_top = array.new_float(qty_fvg,na) , var dfvg_R_bot = array.new_float(qty_fvg,na) , var dfvg_bar_R = array.new_int(qty_fvg,na) var sfvg_R_top = array.new_float(qty_fvg,na) , var sfvg_R_bot = array.new_float(qty_fvg,na) , var sfvg_bar_R = array.new_int(qty_fvg,na) //FVG if bar_index > 1 if low <= array.get(dfvg_bot,0) for i = 0 to qty_fvg-1 if SD_fvg and Turn_off if Mit_Pi lbl_sd = lbl_SnD ? "FVG" : "" add_array_unshift(d_fvg_mit,box.new(xloc = xloc.bar_time,left = array.get(dfvg_bar,0), top = array.get(dfvg_top,0), right = time, bottom = array.get(dfvg_bot,0), border_color = Col_fvg_mit ,bgcolor = Col_fvg_mit, text = lbl_sd ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center)) value_remove(dfvg_top,dfvg_bot,dfvg_bar,0) , array.remove(dfvg_col,0) , array.push(dfvg_col, na) Delete_Box_Push(d_fvg_zone,0) if low > array.get(dfvg_bot,0) or na(array.get(dfvg_bot,0)) break //FVG change if low <= array.get(dfvg_top,0) for i = 0 to qty_fvg-1 if low <= array.get(dfvg_top,i) array.set(dfvg_col, i, Col_fvg_mit) if low > array.get(dfvg_top,i) or na(array.get(dfvg_top,i)) break //Add FVG if low > high[2] and barstate.isconfirmed value_unshift(dfvg_top,low,dfvg_bot,high[2],dfvg_bar,time[2]) add_int_unshift(dfvg_col,Col_fvg_d) value_unshift(dfvg_R_top,low,dfvg_R_bot,high[2],dfvg_bar_R,time[2]) if high >= array.get(sfvg_top,0) for i = 0 to qty_fvg-1 if SD_fvg and Turn_off if Mit_Pi lbl_sd = lbl_SnD ? "FVG" : "" add_array_unshift(s_fvg_mit,box.new( xloc = xloc.bar_time,left = array.get(sfvg_bar,0), top = array.get(sfvg_top,0), right = time, bottom = array.get(sfvg_bot,0), border_color = Col_fvg_mit2 ,bgcolor = Col_fvg_mit2, text = lbl_sd ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center)) value_remove(sfvg_top,sfvg_bot,sfvg_bar,0) , array.remove(sfvg_col,0) , array.push(sfvg_col, na) Delete_Box_Push(s_fvg_zone,0) if high < array.get(sfvg_top,0) or na(array.get(sfvg_top,0)) break //FVG change if high >= array.get(sfvg_bot,0) for i = 0 to qty_fvg-1 if high >= array.get(sfvg_bot,i) array.set(sfvg_col, i, Col_fvg_mit2) if high < array.get(sfvg_bot,i) or na(array.get(sfvg_bot,i)) break //Add FVG if high < low[2] and barstate.isconfirmed value_unshift(sfvg_top,low[2],sfvg_bot,high,sfvg_bar,time[2]) add_int_unshift(sfvg_col,Col_fvg_s) value_unshift(sfvg_R_top,low[2],sfvg_R_bot,high,sfvg_bar_R,time[2]) // Show FVG if Turn_off and SD_fvg //Demand if not na(array.get(dfvg_bot,0)) for i = 0 to qty_pi-1 if na(array.get(dfvg_bot,i)) break col_fvg = array.get(dfvg_col,i) lbl_sd = lbl_SnD ? "FVG" : "" box.delete(array.get(d_fvg_zone,i)) array.set(d_fvg_zone,i,box.new(xloc = xloc.bar_time, left = array.get(dfvg_bar,i) , top = array.get(dfvg_top,i) , right = time_set , bottom = array.get(dfvg_bot,i) , border_color = col_fvg ,bgcolor = col_fvg, text = lbl_sd ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center)) //Supply if not na(array.get(sfvg_bot,0)) for i = 0 to qty_pi-1 if na(array.get(sfvg_bot,i)) break lbl_sd = lbl_SnD ? "FVG" : "" col_sfvg = array.get(sfvg_col,i) box.delete(array.get(s_fvg_zone,i)) array.set(s_fvg_zone,i,box.new(xloc = xloc.bar_time, left = array.get(sfvg_bar,i) , top = array.get(sfvg_top,i) , right = time_set , bottom = array.get(sfvg_bot,i) , border_color = col_sfvg ,bgcolor = col_sfvg, text = lbl_sd ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center)) //Inversion FVG Demand to Supply // Mitigate var d_fvg_R_mit = array.new_box(qty_mit_pi,na) , var s_fvg_R_mit = array.new_box(qty_mit_pi,na) //Pre-Inversion FVG var dfvg_R2_top = array.new_float(qty_fvg,na) , var dfvg_R2_bot = array.new_float(qty_fvg,na) , var dfvg_bar_R2 = array.new_int(qty_fvg,na) var sfvg_R2_top = array.new_float(qty_fvg,na) , var sfvg_R2_bot = array.new_float(qty_fvg,na) , var sfvg_bar_R2 = array.new_int(qty_fvg,na) var d_i_fvg_col = array.new_color(qty_fvg,na) var s_i_fvg_col = array.new_color(qty_fvg,na) //Box Inversion FVG or //BOX FVG2 var d_f_r_zone = array.new_box(qty_pi,na) , var s_f_r_zone = array.new_box(qty_pi,na) // [================I-FVG Supply to Demand===============] if bar_index > 1 // [============Add Inversion FVG Demand=============] //I-FVG remove if low <= array.get(dfvg_R2_bot,0) for i = 0 to qty_fvg-1 if low <= array.get(dfvg_R2_bot,0) lbl_sd = lbl_SnD ? "iFVG" : "" if Turn_off and Mit_Pi and SD_i_fvg add_array_unshift(d_fvg_R_mit,box.new(xloc = xloc.bar_time,left = array.get(dfvg_bar_R2,0), top = array.get(dfvg_R2_top,0), right = time, bottom = array.get(dfvg_R2_bot,0), border_color = Col_ifvg_mit ,bgcolor = Col_ifvg_mit, text = lbl_sd ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center)) value_remove(dfvg_R2_top,dfvg_R2_bot,dfvg_bar_R2,0) , array.remove(d_i_fvg_col,0) , array.push(d_i_fvg_col, na) Delete_Box_Push(d_f_r_zone,0) if low > array.get(dfvg_R2_bot,0) or na(array.get(dfvg_R2_bot,0)) break //I-FVG change if low <= array.get(dfvg_R2_top,0) for i = 0 to qty_fvg-1 if low > array.get(dfvg_R2_top,i) or na(array.get(dfvg_R2_top,i)) break if low <= array.get(dfvg_R2_top,i) array.set(d_i_fvg_col, i, Col_ifvg_mit) // Add Inversion FVG Demand if close > array.get(sfvg_R_top,0) and barstate.isconfirmed for i = 0 to qty_fvg-1 if close > array.get(sfvg_R_top,0) value_unshift(dfvg_R2_top,array.get(sfvg_R_top,0),dfvg_R2_bot,array.get(sfvg_R_bot,0),dfvg_bar_R2,array.get(sfvg_bar_R,0)) add_int_unshift(d_i_fvg_col,Col_ifvg_d) value_remove(sfvg_R_top,sfvg_R_bot,sfvg_bar_R,0) if close <= array.get(sfvg_R_top,0) or na(array.get(sfvg_R_top,0)) break // [============Add Inversion FVG Supply=============] //I-FVG remove if high >= array.get(sfvg_R2_top,0) for i = 0 to qty_fvg-1 if high >= array.get(sfvg_R2_top,0) lbl_sd = lbl_SnD ? "iFVG" : "" if Turn_off and Mit_Pi and SD_i_fvg add_array_unshift(s_fvg_R_mit,box.new(xloc = xloc.bar_time,left = array.get(sfvg_bar_R2,0), top = array.get(sfvg_R2_top,0), right = time, bottom = array.get(sfvg_R2_bot,0), border_color = Col_ifvg_mit2 ,bgcolor = Col_ifvg_mit2, text = lbl_sd ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center)) value_remove(sfvg_R2_top,sfvg_R2_bot,sfvg_bar_R2,0) , array.remove(s_i_fvg_col,0) , array.push(s_i_fvg_col, na) Delete_Box_Push(s_f_r_zone,0) if high < array.get(sfvg_R2_top,0) or na(array.get(sfvg_R2_top,0)) break //I-FVG change if high >= array.get(sfvg_R2_bot,0) for i = 0 to qty_fvg-1 if high < array.get(sfvg_R2_bot,i) or na(array.get(sfvg_R2_bot,i)) break if high >= array.get(sfvg_R2_bot,i) array.set(s_i_fvg_col, i, Col_ifvg_mit2) // Add Inversion FVG Supply if close < array.get(dfvg_R_bot,0) and barstate.isconfirmed for i = 0 to qty_fvg-1 if close < array.get(dfvg_R_bot,0) value_unshift(sfvg_R2_top,array.get(dfvg_R_top,0),sfvg_R2_bot,array.get(dfvg_R_bot,0),sfvg_bar_R2,array.get(dfvg_bar_R,0)) add_int_unshift(s_i_fvg_col,Col_ifvg_s) value_remove(dfvg_R_top,dfvg_R_bot,dfvg_bar_R,0) if close >= array.get(dfvg_R_bot,0) or na(array.get(dfvg_R_bot,0)) break //[================Show I-FVG===============] if SD_i_fvg and Turn_off if not na(array.get(dfvg_R2_top,0)) for i = 0 to qty_pi-1 col_fvg = array.get(d_i_fvg_col,i) lbl_sd = lbl_SnD ? "iFVG" : "" if na(array.get(dfvg_R2_top,i)) break box.delete(array.get(d_f_r_zone,i)) array.set(d_f_r_zone,i,box.new(xloc = xloc.bar_time, left = array.get(dfvg_bar_R2,i) , top = array.get(dfvg_R2_top,i) , right = time_set , bottom = array.get(dfvg_R2_bot,i) , border_color = col_fvg ,bgcolor = col_fvg, text = lbl_sd ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center)) //Supply if not na(array.get(sfvg_R2_bot,0)) for i = 0 to qty_pi-1 col_sfvg = array.get(s_i_fvg_col,i) lbl_sd = lbl_SnD ? "iFVG" : "" if na(array.get(sfvg_R2_bot,i)) break box.delete(array.get(s_f_r_zone,i)) array.set(s_f_r_zone,i,box.new(xloc = xloc.bar_time, left = array.get(sfvg_bar_R2,i) , top = array.get(sfvg_R2_top,i) , right = time_set , bottom = array.get(sfvg_R2_bot,i) , border_color = col_sfvg ,bgcolor = col_sfvg, text = lbl_sd ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center)) // ============================= Lidqudity ====================== sw_H = ta.pivothigh(high,Len, Len) sw_L = ta.pivotlow(low,Len, Len) //------------------------------------------------------------------------------// var int sw_Dir_small = 0 var float sw_high = na , var float sw_low = na var int Bar_sw_high = 0 , var int Bar_sw_low = 0 var float ss_high = na , var float ss_low = na var int b_sw_high = 0 , var int b_sw_low = 0 bool sw_skip = false bool Ch_swh = false ,bool Ch_swl = false bool swh_check = false ,bool swl_check = false if na(sw_high) and not na(sw_H) sw_high := sw_H ,sw_Dir_small := -1 if na(sw_low) and not na(sw_L) sw_low := sw_L ,sw_Dir_small := 1 if (high > ss_high or na(ss_high)) and barstate.isconfirmed ss_high := high , b_sw_high := bar_index if (low < ss_low or na(ss_low)) and barstate.isconfirmed ss_low := low , b_sw_low := bar_index display_swing = show_swing_lid and Turn_off b_len = Len+1 if not na(sw_L) and not na(sw_H) and barstate.isconfirmed if sw_Dir_small == 1 for i = 1 to Len*2 if not na(sw_L[i]) swl_check := true break sw_low := sw_L , Bar_sw_low := bar_index[Len] sw_high := sw_H , Bar_sw_high := bar_index[Len] ch = close[Len] > open[Len] s_h = ch ? ss_high[b_len] :sw_H , s_b = ch ? b_sw_high[b_len] : bar_index[Len] ch2 = (sw_high < sw_low or (ss_high[b_len] > sw_high and not swl_check)) and Len >1 s_l2 = ch ? sw_low : sw_low[b_len] , s_b2 = ch ? Bar_sw_low : Bar_sw_low[b_len] if display_swing sw_line = line.new(Bar_sw_low, sw_low , Bar_sw_high ,sw_high,xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) sw_line2 = line.new(s_b2, s_l2, s_b ,s_h,xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if ch and not ch2 if display_swing sw_line3 = line.new(Bar_sw_low[b_len], sw_low[b_len] , s_b , s_h,xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if display_swing label.new(s_b, s_h , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) if ch2 if display_swing sw_line3 = line.new(Bar_sw_low[b_len], sw_low[b_len] , b_sw_high[b_len] ,ss_high[b_len],xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if not ch sw_line4 = line.new(b_sw_low[b_len], ss_low[b_len] , b_sw_high[b_len] ,ss_high[b_len],xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if display_swing if not ch label.new(b_sw_low[b_len], ss_low[b_len] , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) label.new(b_sw_high[b_len], ss_high[b_len] , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) sw_Dir_small := ch ? -1 : 1 sw_skip := true if sw_Dir_small == -1 and not sw_skip if not na(sw_L) for i = 1 to Len*2 if not na(sw_H[i]) swh_check := true break sw_low := sw_L , Bar_sw_low := bar_index[Len] sw_high := sw_H , Bar_sw_high := bar_index[Len] ch = close[Len] < open[Len] s_l = ch ? ss_low[b_len] :sw_L , s_b = ch?b_sw_low[b_len]:bar_index[Len] ch2 = (sw_high <= sw_low or (ss_low[b_len] < sw_low and not swh_check)) and Len >1 s_h2 = ch ? sw_high : sw_high[b_len] , s_b2 = ch ? Bar_sw_high : Bar_sw_high[b_len] if display_swing sw_line = line.new(Bar_sw_low, sw_low , Bar_sw_high ,sw_high,xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) sw_line2 = line.new(s_b, s_l ,s_b2 ,s_h2, xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if ch and not ch2 if display_swing sw_line3 = line.new(s_b, s_l ,Bar_sw_high[b_len] ,sw_high[b_len], xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if display_swing label.new(s_b, s_l , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) if ch2 if display_swing sw_line3 = line.new(b_sw_low[b_len], ss_low[b_len] , Bar_sw_high[b_len] ,sw_high[b_len],xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if not ch sw_line4 = line.new(b_sw_low[b_len], ss_low[b_len] , b_sw_high[b_len] ,ss_high[b_len],xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if display_swing label.new(b_sw_low[b_len], ss_low[b_len] , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) if not ch label.new(b_sw_high[b_len], ss_high[b_len] , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) sw_Dir_small := ch ? 1 : -1 sw_skip := true Ch_swl := true , Ch_swh := true if sw_Dir_small == 1 and not sw_skip and barstate.isconfirmed if not na(sw_H) for i = 0 to Len*2 if not na(sw_L[i]) swl_check := true break sw_high := sw_H , Bar_sw_high := bar_index[Len] Ch_swh := true , sw_Dir_small := -1 ch = sw_high < sw_low or (ss_high[b_len] > sw_high and not swl_check) s_l = ch ? ss_low[b_len] : sw_low , s_b = ch? b_sw_low[b_len]: Bar_sw_low if display_swing sw_line = line.new(s_b, s_l, Bar_sw_high ,sw_high,xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if ch if display_swing sw_line1 = line.new(Bar_sw_low, sw_low , b_sw_high[b_len] ,ss_high[b_len],xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) sw_line2 = line.new(b_sw_low[b_len], ss_low[b_len] , b_sw_high[b_len] ,ss_high[b_len],xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if display_swing label.new(b_sw_low[b_len], ss_low[b_len] , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) label.new(b_sw_high[b_len], ss_high[b_len] , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) sw_skip := true if not na(sw_L) sw_low := sw_L , Bar_sw_low := bar_index[Len] sw_high := ss_high[b_len] , Bar_sw_high := b_sw_high[b_len] Ch_swl := true , Ch_swh := true , sw_Dir_small := 1 if display_swing sw_line = line.new(Bar_sw_low[Len], sw_low[Len] , Bar_sw_high ,sw_high,xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) sw_line2 = line.new(Bar_sw_low, sw_low , Bar_sw_high ,sw_high,xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) sw_skip := true if sw_Dir_small == -1 and not sw_skip and barstate.isconfirmed if not na(sw_L) for i = 0 to Len*2 if not na(sw_H[i]) swh_check := true break sw_low := sw_L , Bar_sw_low := bar_index[Len] Ch_swl := true , sw_Dir_small := 1 ch = sw_high <= sw_low or (ss_low[b_len] < sw_low and not swh_check) s_h = ch ? ss_high[b_len] : sw_high , s_b = ch? b_sw_high[b_len]: Bar_sw_high if display_swing sw_line = line.new(Bar_sw_low, sw_low , s_b ,s_h ,xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if ch if display_swing sw_line1 = line.new(Bar_sw_high, sw_high , b_sw_low[b_len] ,ss_low[b_len],xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) sw_line2 = line.new(b_sw_low[b_len], ss_low[b_len] , b_sw_high[b_len] ,ss_high[b_len],xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if display_swing label.new(b_sw_low[b_len], ss_low[b_len] , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) label.new(b_sw_high[b_len], ss_high[b_len] , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) if not na(sw_H) sw_high := sw_H , Bar_sw_high := bar_index[Len] sw_low := ss_low[b_len] , Bar_sw_low := b_sw_low[b_len] Ch_swl := true , Ch_swh := true , sw_Dir_small := -1 if display_swing sw_line = line.new(Bar_sw_low, sw_low , Bar_sw_high[Len],sw_high[Len],xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) sw_line2 = line.new(Bar_sw_low, sw_low , Bar_sw_high ,sw_high,xloc = xloc.bar_index , color = Color_sw, style = get_line_style(sw_line_style)) if display_swing if Ch_swh label.new(Bar_sw_high, sw_high , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) if Ch_swl label.new(Bar_sw_low, sw_low , text = "●" , style= label.style_label_center , color= TRANSP , textcolor = Color_sw ,size = get_text_style(sw_Size)) diff_ph = sw_Dir_small == 1 ? 0 : 1 diff_pl = sw_Dir_small == -1 ? 0 : 1 ph = Len == 1 ? high : ta.highest(Len-diff_ph) b_ph = Len == 1 ? bar_index : bar_index[math.abs(ta.highestbars(Len-diff_ph))] pl = Len == 1 ? low : ta.lowest(Len-diff_pl) b_pl = Len == 1 ? bar_index : bar_index[math.abs(ta.lowestbars(Len-diff_pl))] b_ss = 0 if Ch_swh ss_low := pl[b_ss] , b_sw_low := b_pl[b_ss] , ss_high := ph[b_ss] , b_sw_high := b_ph[b_ss] if Ch_swl ss_low := pl[b_ss] , b_sw_low := b_pl[b_ss] , ss_high := ph[b_ss] , b_sw_high := b_ph[b_ss] //========================================================================================================================================= ar_q = 9000 var line_lid_s = array.new_line(Lid_show,na) , var line_lid_d = array.new_line(Lid_show,na) var label_lid_s = array.new_label(Lid_show,na) , var label_lid_d = array.new_label(Lid_show,na) var mit_lid_s = array.new_line(Lid_ss,na) , var mit_lid_d = array.new_line(Lid_ss,na) var mit_lid_lbl_s = array.new_label(Lid_ss,na) , var mit_lid_lbl_d = array.new_label(Lid_ss,na) var lid_sup = array.new_float(ar_q,na) , var lid_dem = array.new_float(ar_q,na) var lid_bar_sup = array.new_int(ar_q,na) , var lid_bar_dem = array.new_int(ar_q,na) var float value_dem_lid = na , var int pre_bar_Dlid_left = na , var int pre_bar_Dlid_right = na var float value_sup_lid = na , var int pre_bar_Slid_left = na , var int pre_bar_Slid_right = na var float pre_dem_lid = na , var int pre2_bar_Dlid_left = na , var int pre2_bar_Dlid_right = na var float pre_sup_lid = na , var int pre2_bar_Slid_left = na , var int pre2_bar_Slid_right = na bool break_dem = false , bool break_sup = false var bool con_buy = false , var bool con_sell = false var float FVG_gap_buy = na , var float FVG_gap_sell = na bool Check_gap_buy = false , bool Check_gap_sell = false if Ch_swh and sw_high >= ph unshift_remove(lid_sup,sw_high) , unshift_remove(lid_bar_sup,time[bar_index-Bar_sw_high]) if Ch_swl and sw_low <= pl unshift_remove(lid_dem,sw_low) , unshift_remove(lid_bar_dem,time[bar_index-Bar_sw_low]) txt_size = get_text_style(lbl_Size) //Liquidity if not na(array.get(lid_dem,0)) if low <= array.get(lid_dem,0) for i = 0 to ar_q-1 value_dem_lid := array.get(lid_dem,0) , pre_bar_Dlid_left := array.get(lid_bar_dem,0) , pre_bar_Dlid_right := time if show_lid and Turn_off x_value = array.get(lid_bar_dem,0) , y_value = array.get(lid_dem,0) , bar_lbl = (x_value + time) /2 label_mit_unshift(mit_lid_lbl_d,label.new(bar_lbl, y_value ,xloc = xloc.bar_time, text= txt_lid,color = TRANSP ,textcolor = Lid_txt_color ,size = txt_size , style=label.style_label_center)) Line_mit_unshift(mit_lid_d,line.new(x_value , y_value , time , y_value ,xloc = xloc.bar_time , color = Lid_color, style = get_line_style(Lid_style))) value_delet_Push1(lid_dem,0) , value_delet_Push1(lid_bar_dem,0) Delete_line_lbl_Push(line_lid_d,label_lid_d,0) if low > array.get(lid_dem,0) or na(array.get(lid_dem,0)) break break_dem := true if not na(array.get(lid_sup,0)) if high >= array.get(lid_sup,0) for i = 0 to ar_q-1 value_sup_lid := array.get(lid_sup,0) , pre_bar_Slid_left := array.get(lid_bar_sup,0) , pre_bar_Slid_right := time if show_lid and Turn_off x_value = array.get(lid_bar_sup,0) , y_value = array.get(lid_sup,0) , bar_lbl = (x_value + time) /2 label_mit_unshift(mit_lid_lbl_s,label.new(bar_lbl, y_value ,xloc = xloc.bar_time, text= txt_lid,color = TRANSP ,textcolor = Lid_txt_color ,size = txt_size , style=label.style_label_center)) Line_mit_unshift(mit_lid_s,line.new( x_value , y_value , time , y_value ,xloc = xloc.bar_time , color = Lid_color, style = get_line_style(Lid_style))) value_delet_Push1(lid_sup,0) , value_delet_Push1(lid_bar_sup,0) Delete_line_lbl_Push(line_lid_s,label_lid_s,0) if high < array.get(lid_sup,0) or na(array.get(lid_sup,0)) break break_sup := true // Show Lidqudity if show_lid and Turn_off //Demand if not na(array.get(lid_dem,0)) for i = 0 to Lid_show-1 line.delete(array.get(line_lid_d,i)) , label.delete(array.get(label_lid_d,i)) if na(array.get(lid_dem,i)) break x_value = array.get(lid_bar_dem,i) , y_value = array.get(lid_dem,i) array.set(line_lid_d,i,line.new(x_value , y_value , time_set , y_value ,xloc = xloc.bar_time , color = Lid_color, style = get_line_style(Lid_style))) array.set(label_lid_d,i,label.new(time_lbl, y_value ,xloc = xloc.bar_time, text= txt_lid,color = TRANSP ,textcolor = Lid_txt_color ,size = txt_size , style=label.style_label_center)) //Supply if not na(array.get(lid_sup,0)) for i = 0 to Lid_show-1 line.delete(array.get(line_lid_s,i)) , label.delete(array.get(label_lid_s,i)) if na(array.get(lid_sup,i)) break x_value = array.get(lid_bar_sup,i) , y_value = array.get(lid_sup,i) array.set(line_lid_s,i,line.new(x_value , y_value , time_set , y_value ,xloc = xloc.bar_time , color = Lid_color, style = get_line_style(Lid_style))) array.set(label_lid_s,i,label.new(time_lbl, y_value ,xloc = xloc.bar_time, text= txt_lid,color = TRANSP ,textcolor = Lid_txt_color ,size = txt_size , style=label.style_label_center)) //======================================= Internal Structure =======================================// var int In_Dir_Big = 0 , var int In_Dir_small = 0 var float In_High = na , var float In_Low = na var int Bar_In_High = 0 , var int Bar_In_Low = 0 var float i_high = na , var float i_low = na var int Bar_i_high = 0 , var int Bar_i_low = 0 var bool CF_In_High = false ,var bool CF_In_low = false bool Ch_In_H = false ,bool Ch_In_L = false bool In_skip = false bool In_ChoCH_Down = false , bool In_ChoCH_Up = false bool I_BoS_Down = false , bool I_BoS_Up = false var bool valid_cf_high = false , var bool valid_cf_low = false var bool valid_pivot_high = false , var bool valid_pivot_low = false var line line_in = na , var label label_in = na //valid Pullback con1 cf_high_in = not na(ta.pivothigh(high,Len_in, Len_in)) if cf_high_in valid_pivot_high := true cf_low_in = not na(ta.pivotlow(low,Len_in, Len_in)) if cf_low_in valid_pivot_low := true if (high > i_high or na(i_high)) and barstate.isconfirmed i_high := high , Bar_i_high := bar_index , valid_cf_high := false , valid_pivot_high := false if (low < i_low or na(i_low)) and barstate.isconfirmed i_low := low , Bar_i_low := bar_index , valid_cf_low := false , valid_pivot_low := false //valid Pullback con2 if ( valid_con == 'Close' ? close : low ) < low[bar_index-Bar_i_high] valid_cf_high := true if ( valid_con == 'Close' ? close : high ) > high[bar_index-Bar_i_low] valid_cf_low := true if CF_In_High and CF_In_low valid_cf_high := false , valid_cf_low := false valid_pivot_high := false , valid_pivot_low := false //Default_rule In_Break_Up = barstate.isconfirmed and close > In_High In_Break_Down = barstate.isconfirmed and close < In_Low var int con_first = 0 // Direction Internal up if In_Dir_Big == 1 and barstate.isconfirmed if (In_Break_Down and CF_In_low) or (In_Break_Up and CF_In_High) if Turn_off txt = In_Break_Down ? "MSS" : "BOS" Swingtrend = In_Break_Down ? In_Low : In_High bar_trend = In_Break_Down ? Bar_In_Low : Bar_In_High Time_Bar = In_Break_Down ? time[bar_index-Bar_In_Low] : time[bar_index-Bar_In_High] txt_Collor = In_Break_Down ? In_down_color : In_up_color line_in := line.new(Time_Bar, Swingtrend , time , Swingtrend,xloc = xloc.bar_time , color = txt_Collor, style = get_line_style(In_Line_style)) label_in := label.new(int(math.avg(bar_trend, bar_index)), Swingtrend, txt ,xloc = xloc.bar_index, color = TRANSP, textcolor = txt_Collor, style = In_Break_Up ? label.style_label_down : label.style_label_up, size = In_Size_CF) //CHoCH if In_Break_Down and CF_In_low CF_In_High := true , CF_In_low := false Ch_In_H := true , In_ChoCH_Down := true //find High if not na(In_High) and In_Dir_small == 1 and ( valid_cf_high and valid_pivot_high ) CF_In_High := true , Ch_In_H := true //find low Continue to break up if In_Dir_small == -1 and In_Break_Up and CF_In_High CF_In_High := false , CF_In_low := true Ch_In_L := true , I_BoS_Up := true //Direction Internal down if In_Dir_Big == -1 and barstate.isconfirmed if (In_Break_Down and CF_In_low) or (In_Break_Up and CF_In_High) if Turn_off txt = In_Break_Up ? "MSS" : "BOS" Swingtrend = In_Break_Down ? In_Low : In_High bar_trend = In_Break_Down ? Bar_In_Low : Bar_In_High Time_Bar = In_Break_Down ? time[bar_index-Bar_In_Low] : time[bar_index-Bar_In_High] txt_Collor = In_Break_Up ? In_up_color : In_down_color line_in := line.new(Time_Bar, Swingtrend , time , Swingtrend,xloc = xloc.bar_time , color = txt_Collor, style = get_line_style(In_Line_style)) label_in := label.new(int(math.avg(bar_trend, bar_index)), Swingtrend, txt ,xloc = xloc.bar_index, color = TRANSP, textcolor = txt_Collor, style = In_Break_Up ? label.style_label_down : label.style_label_up, size = In_Size_CF) //CHoCH if In_Break_Up and CF_In_High CF_In_High := false , CF_In_low := true Ch_In_L := true , In_ChoCH_Up := true //find Low if not na(In_Low) and In_Dir_small == -1 and ( valid_cf_low and valid_pivot_low) CF_In_low := true , Ch_In_L := true //find low Continue to break up if In_Dir_small == 1 and In_Break_Down and CF_In_low CF_In_High := true , CF_In_low := false Ch_In_H := true , I_BoS_Down := true //Change H&L Internal Structure if Ch_In_L In_Low := i_low , Bar_In_Low := Bar_i_low In_Dir_small := 1 if Ch_In_H In_High := i_high , Bar_In_High := Bar_i_high In_Dir_small := -1 // var int C_F = 0 if na(In_High) and not na(i_high) and cf_high_in and barstate.isconfirmed i_low := low , Bar_i_low := bar_index , CF_In_High := true , con_first += 1 , Ch_In_H := true In_High := i_high , Bar_In_High := Bar_i_high , In_Dir_small := -1 if con_first == 2 In_Dir_small := 1 if not CF_In_low In_Dir_Big := 1 if na(In_Low) and not na(i_low) and cf_low_in and barstate.isconfirmed i_high := high , Bar_i_high := bar_index , CF_In_low := true, con_first += 1 , Ch_In_L := true In_Low := i_low , Bar_In_Low := Bar_i_low , In_Dir_small := 1 if con_first == 2 In_Dir_small := -1 if not CF_In_High In_Dir_Big := -1 if CF_In_High and CF_In_low and barstate.isconfirmed con_first := 0 if ( not CF_In_High and high >= i_high[1] ) or In_ChoCH_Up or I_BoS_Up i_low := na if ( not CF_In_low and low <= i_low[1] ) or In_ChoCH_Down or I_BoS_Down i_high := na if In_ChoCH_Up or I_BoS_Up if Bar_In_Low > Bar_i_high[1] i_high := high , Bar_i_high := bar_index if In_ChoCH_Down or I_BoS_Down if Bar_In_High > Bar_i_low[1] i_low := low , Bar_i_low := bar_index //Change Trend H&L Internal Structure if In_Break_Down and CF_In_High and In_Dir_Big == 1 In_Dir_Big := -1 , In_skip := true if not In_skip and In_Break_Up and CF_In_low and In_Dir_Big == -1 In_Dir_Big := 1 cf_ud = I_BoS_Up or In_ChoCH_Up or I_BoS_Down or In_ChoCH_Down if Turn_off and Show_Structure and (CF_In_low or CF_In_low[1]) and cf_ud bar = CF_In_low ? Bar_In_Low : Bar_In_Low[1] , PP = CF_In_low ? In_Low : In_Low[1] i_Mark_lbl_L = label.new(bar, PP ,xloc = xloc.bar_index, text = "●",color = TRANSP, style = label.style_label_center,textcolor = Color_Mark_Swing,size = get_text_style(sw_Size)) if Turn_off and Show_Structure and (CF_In_High or CF_In_High[1]) and cf_ud bar = CF_In_High ? Bar_In_High : Bar_In_High[1] , PP = CF_In_High ? In_High : In_High[1] i_Mark_lbl_H = label.new(bar, PP ,xloc = xloc.bar_index, text = "●", color = TRANSP, style = label.style_label_center,textcolor = Color_Mark_Swing,size = get_text_style(sw_Size)) //Drawing Swing var line In_H_line = na , var line In_L_line = na , var label In_H_lbl = na , var label In_L_lbl = na if Turn_off and Show_Structure and CF_In_High line.delete(In_H_line[1]) In_H_line := line.new(time[bar_index-Bar_In_High], In_High , time_set , In_High ,xloc = xloc.bar_time , color = In_up_color, style = get_line_style(In_Line_style)) label.delete(In_H_lbl[1]) txt = In_Dir_Big == 1 ? "BOS" : "MSS" In_H_lbl := label.new(bar_index+distance_bar_label, In_High , txt,xloc = xloc.bar_index, color = TRANSP, textcolor = In_up_color, style = label.style_label_down, size = In_Size_CF, textalign =text.align_center) if Turn_off and Show_Structure and CF_In_low line.delete(In_L_line[1]) In_L_line := line.new(time[bar_index-Bar_In_Low], In_Low , time_set , In_Low ,xloc = xloc.bar_time , color = In_down_color, style = get_line_style(In_Line_style)) label.delete(In_L_lbl[1]) txt = In_Dir_Big == -1 ? "BOS" : "MSS" In_L_lbl := label.new(bar_index+distance_bar_label, In_Low , txt,xloc = xloc.bar_index, color = TRANSP, textcolor = In_down_color, style = label.style_label_up , size = In_Size_CF, textalign =text.align_center) if Turn_off and Show_Structure and not CF_In_High line.delete(In_H_line[1]) , label.delete(In_H_lbl) if not CF_In_low line.delete(In_L_line[1]) , label.delete(In_L_lbl) //Internal_Equilibrium var line In_line_Eq = na , var label In_lbl_Eq = na var float Premium = na , var float Discount = na var line In_line_Eq2 = na , var label In_lbl_Eq2 = na var float Premium2 = na , var float Discount2 = na Pre_Dis_Cal = Pre_Dis / 100 , Pre_Dis_Cal2 = Pre_Dis2 / 100 if CF_In_low and not CF_In_High Discount := i_high-math.abs(Pre_Dis_Cal*(i_high-In_Low)) , text_pre_dis = "% Discount" if EQ_con Discount2 := i_high-math.abs(Pre_Dis_Cal2*(i_high-In_Low)) if Turn_off and Show_Structure line.delete(In_line_Eq[1]) , label.delete(In_lbl_Eq[1]) Bar_Eq = Bar_In_High < Bar_In_Low ? Bar_In_High : Bar_In_Low In_line_Eq := line.new(time[bar_index-Bar_Eq], Discount , time_set , Discount ,xloc = xloc.bar_time , color = color_Eq_In, style = get_line_style(In_Line_style)) In_lbl_Eq := label.new(bar_index+distance_bar_label, Discount , str.tostring(Pre_Dis)+text_pre_dis,xloc = xloc.bar_index, color = TRANSP , textcolor = In_up_color, style = label.style_label_up, size = In_Size_CF) if EQ_con line.delete(In_line_Eq2[1]) , label.delete(In_lbl_Eq2[1]) In_line_Eq2 := line.new(time[bar_index-Bar_Eq], Discount2 , time_set , Discount2 ,xloc = xloc.bar_time , color = color_Eq_In, style = get_line_style(In_Line_style)) In_lbl_Eq2 := label.new(bar_index+distance_bar_label, Discount2 , str.tostring(Pre_Dis2)+text_pre_dis,xloc = xloc.bar_index, color = TRANSP , textcolor = In_up_color, style = label.style_label_up, size = In_Size_CF) if CF_In_High and not CF_In_low Premium := i_low+(Pre_Dis_Cal*(In_High-i_low)) , text_pre_dis = "% Premium" if EQ_con Premium2 := i_low+(Pre_Dis_Cal2*(In_High-i_low)) if Turn_off and Show_Structure line.delete(In_line_Eq[1]) , label.delete(In_lbl_Eq[1]) Bar_Eq = Bar_In_High < Bar_In_Low ? Bar_In_High : Bar_In_Low In_line_Eq := line.new(time[bar_index-Bar_Eq], Premium , time_set , Premium ,xloc = xloc.bar_time , color = color_Eq_In, style = get_line_style(In_Line_style)) In_lbl_Eq := label.new(bar_index+distance_bar_label, Premium , str.tostring(Pre_Dis)+text_pre_dis,xloc = xloc.bar_index, color = TRANSP , textcolor = In_down_color, style = label.style_label_down, size = In_Size_CF) if EQ_con line.delete(In_line_Eq2[1]) , label.delete(In_lbl_Eq2[1]) In_line_Eq2 := line.new(time[bar_index-Bar_Eq], Premium2 , time_set , Premium2 ,xloc = xloc.bar_time , color = color_Eq_In, style = get_line_style(In_Line_style)) In_lbl_Eq2 := label.new(bar_index+distance_bar_label, Premium2 , str.tostring(Pre_Dis2)+text_pre_dis,xloc = xloc.bar_index, color = TRANSP , textcolor = In_down_color, style = label.style_label_down, size = In_Size_CF) if CF_In_low and CF_In_High Premium := In_Low+(Pre_Dis_Cal*(In_High-In_Low)) Discount := In_High-math.abs(Pre_Dis_Cal*(In_High-In_Low)) if EQ_con Premium2 := In_Low+(Pre_Dis_Cal2*(In_High-In_Low)) Discount2 := In_High-math.abs(Pre_Dis_Cal2*(In_High-In_Low)) if Turn_off and Show_Structure Equilibrium = In_Dir_Big == 1 ? Discount : Premium text_pre_dis = In_Dir_Big == -1 ? "% Premium" : "% Discount" col_text = In_Dir_Big == -1 ? In_down_color : In_up_color style_txt = In_Dir_Big == -1 ? label.style_label_down : label.style_label_up line.delete(In_line_Eq[1]) , label.delete(In_lbl_Eq[1]) Bar_Eq = Bar_In_High < Bar_In_Low ? Bar_In_High : Bar_In_Low In_line_Eq := line.new(time[bar_index-Bar_Eq], Equilibrium , time_set , Equilibrium ,xloc = xloc.bar_time , color = color_Eq_In, style = get_line_style(In_Line_style)) In_lbl_Eq := label.new(bar_index+distance_bar_label, Equilibrium , str.tostring(Pre_Dis)+text_pre_dis,xloc = xloc.bar_index, color = TRANSP , textcolor = col_text, style = style_txt, size = In_Size_CF) if EQ_con Equilibrium2 = In_Dir_Big == 1 ? Discount2 : Premium2 line.delete(In_line_Eq2[1]) , label.delete(In_lbl_Eq2[1]) In_line_Eq2 := line.new(time[bar_index-Bar_Eq], Equilibrium2 , time_set , Equilibrium2 ,xloc = xloc.bar_time , color = color_Eq_In, style = get_line_style(In_Line_style)) In_lbl_Eq2 := label.new(bar_index+distance_bar_label, Equilibrium2 , str.tostring(Pre_Dis2)+text_pre_dis,xloc = xloc.bar_index, color = TRANSP , textcolor = col_text, style = style_txt, size = In_Size_CF) if Turn_off and Show_Structure and not CF_In_High or not CF_In_low line.delete(In_line_Eq[1]) , label.delete(In_lbl_Eq[1]) if EQ_con line.delete(In_line_Eq2[1]) , label.delete(In_lbl_Eq2[1]) //=============================== History =============================== //lid_qudity var his_dem_lid = array.new_float(0,na) , var his_Dbar_left = array.new_int(0,na) , var his_Dbar_right = array.new_int(0,na) var his_sup_lid = array.new_float(0,na) , var his_Sbar_left = array.new_int(0,na) , var his_Sbar_right = array.new_int(0,na) var line_his_lid_s = array.new_line(10,na) , var line_his_lid_d = array.new_line(10,na) var label_his_lid_s = array.new_label(10,na) , var label_his_lid_d = array.new_label(10,na) //=============================== Entry Condition =============================== var int c_order_buy = 0 , var int c_order_sell = 0 var float stop_loss_long = 0 , var float stop_loss_short = 0 var float take_profit_long = 0 , var float take_profit_short = 0 var float open_long = 0 , var float open_short = 0 var int time_buy = 0 , var int time_sell = 0 bool cencel_buy = false , bool cencel_sell = false bool im_buy_signal = false , bool im_sell_signal = false bool buy_signal = false , bool sell_signal = false var bool pending_buy = false , var bool pending_sell = false var bool up_trend = false , var bool down_trend = false //Trend Following Conditions if Follow_trend and barstate.isconfirmed if not up_trend and In_Dir_Big == 1 up_trend := true , down_trend := false if not down_trend and In_Dir_Big == -1 down_trend := true , up_trend := false if not Follow_trend and not up_trend and barstate.isconfirmed up_trend := true , down_trend := true //================ condition buy ================ if break_dem and close > value_dem_lid and open > value_dem_lid and barstate.isconfirmed and strategy.position_size == 0 if B_long con_buy := true pre_dem_lid := value_dem_lid , pre2_bar_Dlid_left := pre_bar_Dlid_left , pre2_bar_Dlid_right := pre_bar_Dlid_right if pending_sell and cancel_pending_A strategy.cancel("Short "+str.tostring(c_order_sell)) alert("Cancel Pending Short", alert.freq_all) cencel_sell := true , pending_sell := false con_sell := false if B_long and barstate.isconfirmed and ( close < value_dem_lid or ( not con_time and con_time[1]) ) con_buy := false //Check gap between iFVG and FVG if not na(array.get(dfvg_R2_bot,0)) and value_dem_lid < array.get(dfvg_R2_bot,0) and up_trend FVG_gap_buy := math.abs((array.get(dfvg_R2_top,0) - array.get(dfvg_bot,0))) Con_gap_buy = FVG_gap_buy >= atr_check_FVG_min and FVG_gap_buy <= atr_check_FVG_max if con_buy[1] and Con_gap_buy EQ_entry_buy = Follow_trend and EQ_con ? array.get(dfvg_R2_bot,0) <= Discount and array.get(dfvg_R2_bot,0) >= Discount2 : true Size_FVG_dem = math.abs((array.get(dfvg_top,0) - array.get(dfvg_bot,0))) size_FVG_con_dem = not Filter_size_FVG or (Filter_size_FVG and Size_FVG_dem >= Check_min_FVG and Size_FVG_dem <= Check_max_FVG) Size_iFVG_dem = math.abs((array.get(dfvg_R2_top,0) - array.get(dfvg_R2_bot,0))) size_iFVG_con_dem = not Filter_size_iFVG or (Filter_size_iFVG and Size_iFVG_dem >= Check_min_iFVG and Size_iFVG_dem <= Check_max_iFVG) con_mix_dem = ( Con_FVG_mix ? true : ( not iFVG_be_FVG ? array.get(dfvg_bot,0) >= array.get(dfvg_R2_top,0) : array.get(dfvg_bot,0) < array.get(dfvg_R2_top,0))) if EQ_entry_buy and size_FVG_con_dem and size_iFVG_con_dem and con_mix_dem Check_gap_buy := true if con_buy and Check_gap_buy buy_signal := true , con_buy := false if B_long value_unshift_noremove(his_dem_lid,pre_dem_lid,his_Dbar_left,pre2_bar_Dlid_left,his_Dbar_right,pre2_bar_Dlid_right) if Turn_off lbl_fvg = lbl_SnD ? "FVG" : "" lbl_ifvg = lbl_SnD ? "iFVG" : "" dfvg_his = box.new(xloc = xloc.bar_time, left = array.get(dfvg_bar,0) , top = array.get(dfvg_top,0) , right = time+n_bar , bottom = array.get(dfvg_bot,0) , border_color = Col_fvg_mit ,bgcolor = Col_fvg_mit , text = lbl_fvg ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center) d_ifvg_his = box.new(xloc = xloc.bar_time, left = array.get(dfvg_bar_R2,0) , top = array.get(dfvg_R2_top,0) , right = time+n_bar , bottom = array.get(dfvg_R2_bot,0) , border_color = Col_ifvg_mit ,bgcolor = Col_ifvg_mit , text = lbl_ifvg ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center) FVG_d_bot = array.get(dfvg_bot,0) , iFVG_d_top = array.get(dfvg_R2_top,0) , mid_d_both = (FVG_d_bot + iFVG_d_top) /2 , gap_value_min = atr_check_FVG_min/2 , gap_value_max = atr_check_FVG_max/2 if FVG_min_ATR > 0 gap_min_his = box.new(xloc = xloc.bar_time, left = time-gap_bar , top = mid_d_both+gap_value_min , right = time + gap_bar , bottom = mid_d_both-gap_value_min , border_color = gap_col_min ,bgcolor = gap_col_min ) gap_max_his = box.new(xloc = xloc.bar_time, left = time-gap_bar , top = mid_d_both+gap_value_max , right = time + gap_bar , bottom = mid_d_both-gap_value_max , border_color = gap_col_max ,bgcolor = gap_col_max, text = 'Gap' ,text_size = size.tiny ,text_color = Col_SnD,text_halign = text.align_center,text_valign = text.align_center) //================ condition sell ================ if break_sup and close < value_sup_lid and open < value_sup_lid and barstate.isconfirmed and strategy.position_size == 0 if S_short con_sell := true pre_sup_lid := value_sup_lid , pre2_bar_Slid_left := pre_bar_Slid_left , pre2_bar_Slid_right := pre_bar_Slid_right if pending_buy and cancel_pending_A strategy.cancel("Long "+str.tostring(c_order_buy)) alert("Cancel Pending Long", alert.freq_all) cencel_buy := true , pending_buy := false con_buy := false if S_short and barstate.isconfirmed and ( close > value_sup_lid or ( not con_time and con_time[1]) ) con_sell := false //Check gap between iFVG and FVG if not na(array.get(sfvg_R2_top,0)) and value_sup_lid > array.get(sfvg_R2_top,0) and down_trend FVG_gap_sell := math.abs((array.get(sfvg_R2_bot,0) - array.get(sfvg_top,0))) Con_gap_sell = FVG_gap_sell >= atr_check_FVG_min and FVG_gap_sell <= atr_check_FVG_max if con_sell[1] and Con_gap_sell EQ_entry_sell = Follow_trend and EQ_con ? array.get(sfvg_R2_top,0) >= Premium and array.get(sfvg_R2_top,0) <= Premium2 : true Size_FVG_sup = math.abs((array.get(sfvg_top,0) - array.get(sfvg_bot,0))) size_FVG_con_sup = not Filter_size_FVG or (Filter_size_FVG and Size_FVG_sup >= Check_min_FVG and Size_FVG_sup <= Check_max_FVG) Size_iFVG_sup = math.abs((array.get(sfvg_R2_top,0) - array.get(sfvg_R2_bot,0))) size_iFVG_con_sup = not Filter_size_iFVG or (Filter_size_iFVG and Size_iFVG_sup >= Check_min_iFVG and Size_iFVG_sup <= Check_max_iFVG) con_mix_sup = (Con_FVG_mix ? true : ( not iFVG_be_FVG ? array.get(sfvg_top,0) <= array.get(sfvg_R2_bot,0) : array.get(sfvg_top,0) > array.get(sfvg_R2_bot,0))) if EQ_entry_sell and size_FVG_con_sup and size_iFVG_con_sup and con_mix_sup Check_gap_sell := true if con_sell and Check_gap_sell sell_signal := true , con_sell := false if S_short value_unshift_noremove(his_sup_lid,pre_sup_lid,his_Sbar_left,pre2_bar_Slid_left,his_Sbar_right,pre2_bar_Slid_right) if Turn_off lbl_fvg = lbl_SnD ? "FVG" : "" lbl_ifvg = lbl_SnD ? "iFVG" : "" sfvg_his = box.new(xloc = xloc.bar_time, left = array.get(sfvg_bar,0) , top = array.get(sfvg_top,0) , right = time+n_bar , bottom = array.get(sfvg_bot,0) , border_color = Col_fvg_mit2 ,bgcolor = Col_fvg_mit2 , text = lbl_fvg ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center) s_ifvg_his = box.new(xloc = xloc.bar_time, left = array.get(sfvg_bar_R2,0) , top = array.get(sfvg_R2_top,0) , right = time+n_bar , bottom = array.get(sfvg_R2_bot,0) , border_color = Col_ifvg_mit2 ,bgcolor = Col_ifvg_mit2 , text = lbl_ifvg ,text_size = get_text_style(Size_SnD) ,text_color = Col_SnD,text_halign = text.align_right,text_valign = text.align_center) FVG_s_top = array.get(sfvg_top,0) , iFVG_s_bot = array.get(sfvg_R2_bot,0) , mid_s_both = (FVG_s_top + iFVG_s_bot) /2 , gap_value_min = atr_check_FVG_min/2 , gap_value_max = atr_check_FVG_max/2 if FVG_min_ATR > 0 gap_min_his = box.new(xloc = xloc.bar_time, left = time-gap_bar , top = mid_s_both+gap_value_min , right = time + gap_bar , bottom = mid_s_both-gap_value_min , border_color = gap_col_min ,bgcolor = gap_col_min ) gap_max_his = box.new(xloc = xloc.bar_time, left = time-gap_bar , top = mid_s_both+gap_value_max , right = time + gap_bar , bottom = mid_s_both-gap_value_max , border_color = gap_col_max ,bgcolor = gap_col_max, text = 'Gap' ,text_size = size.tiny ,text_color = Col_SnD,text_halign = text.align_center,text_valign = text.align_center) //================================================================================= //Condition Buy if strategy.position_size > 0 pending_buy := false if strategy.closedtrades > strategy.closedtrades[1] and pending_buy and barstate.isconfirmed im_buy_signal := true , pending_buy := false //Condition Sell if strategy.position_size < 0 pending_sell := false if strategy.closedtrades > strategy.closedtrades[1] and pending_sell and barstate.isconfirmed im_sell_signal := true , pending_sell := false //Cancel pending Order if barstate.isconfirmed and (cancel_pending_B and (buy_signal or sell_signal)) or (cancel_pending_C and con_time[1] and not con_time) if pending_buy strategy.cancel("Long "+str.tostring(c_order_buy)) alert("Cancel Pending Long", alert.freq_all) pending_buy := false , cencel_buy := true if pending_sell strategy.cancel("Short "+str.tostring(c_order_sell)) alert("Cancel Pending Short", alert.freq_all) pending_sell := false , cencel_sell := true //================================================================================= // === Position Size === risk_pips = atr_sl * x_ATR value_remove2(va1 , va2 , size) => array.remove(va1,size) , array.remove(va2,size) var tp_buy = array.new_float(0,na) , var sl_buy = array.new_float(0,na) var tp_sell = array.new_float(0,na) , var sl_sell = array.new_float(0,na) var int Loss_Buy = 0 , var int Win_Buy = 0 , var float sl_trade_buy = na , var float tp_trade_buy = na var int Loss_Sell = 0 , var int Win_Sell = 0 , var float sl_trade_sell = na , var float tp_trade_sell = na if cencel_buy and array.size(tp_buy) > 0 tp_trade_buy := na , sl_trade_buy := na for i = array.size(tp_buy)-1 to 0 value_remove2( tp_buy , sl_buy , i) if cencel_sell and array.size(tp_sell) > 0 tp_trade_sell := na , sl_trade_sell := na for i = array.size(tp_sell)-1 to 0 value_remove2( tp_sell , sl_sell , i) // === Long Entry === if buy_signal and up_trend and B_long and barstate.isconfirmed and con_time and con_date sl_cal_long = array.get(dfvg_R2_bot,0) , entry_b = array.get(dfvg_R2_top,0) open_long := entry_b -math.abs((fibo_entry / 100)*(entry_b-sl_cal_long)) stop_loss_long := sl_cal_long - risk_pips take_profit_long := open_long + (open_long - stop_loss_long)*rr_ratio c_order_buy += 1 cs_buy = str.tostring(c_order_buy) strategy.entry("Long "+cs_buy, strategy.long , na , limit = open_long ) strategy.exit("Long Exit "+cs_buy , "Long "+cs_buy , stop = stop_loss_long , limit = take_profit_long , comment_profit = "Long(Tp) "+cs_buy ,comment_loss = "Long(SL) "+cs_buy ) p_entry = "\n\nEntry price = "+str.tostring( open_long , format.mintick) p_sl = "\n\nStop loss = "+str.tostring(stop_loss_long, format.mintick) p_tp = "\n\nTarget profit = "+str.tostring(take_profit_long, format.mintick) alert("Long_"+p_entry+p_sl+p_tp, alert.freq_all) pending_buy := true , time_buy := time array.unshift(tp_buy, take_profit_long) , array.unshift(sl_buy,stop_loss_long) // === Short Entry === if sell_signal and down_trend and S_short and barstate.isconfirmed and con_time and con_date sl_cal_short = array.get(sfvg_R2_top,0) , entry_s = array.get(sfvg_R2_bot,0) open_short := entry_s + math.abs((fibo_entry / 100) *(sl_cal_short-entry_s)) stop_loss_short := sl_cal_short + risk_pips take_profit_short := open_short - (stop_loss_short - open_short)*rr_ratio c_order_sell += 1 cs_sell = str.tostring(c_order_sell) strategy.entry("Short "+cs_sell, strategy.short , na , limit = open_short ) strategy.exit("Short Exit "+cs_sell ,"Short "+cs_sell , stop = stop_loss_short , limit = take_profit_short , comment_profit = "Short(Tp) "+cs_sell ,comment_loss = "Short(SL) "+cs_sell ) p_entry = "\n\nEntry price = "+str.tostring( open_short , format.mintick) p_sl = "\n\nStop loss = "+str.tostring(stop_loss_short, format.mintick) p_tp = "\n\nTarget profit = "+str.tostring(take_profit_short, format.mintick) alert("Short_"+p_entry+p_sl+p_tp, alert.freq_all) pending_sell := true , time_sell := time array.unshift(tp_sell, take_profit_short) , array.unshift(sl_sell,stop_loss_short) box box_entrybuy_1_his = na , box box_entrybuy_2_his = na box box_entrysell_1_his = na , box box_entrysell_2_his = na label lbl_entry_his = na , label lbl_tp_his = na , label lbl_sl_his = na var label lbl_entry_t = na , var label lbl_tp_t = na , var label lbl_sl_t = na var box box_entry_t1 = na , var box box_entry_t2 = na In_Size_fibo = get_text_style(Size_SnD) //show Buy if Entry_box and (strategy.position_size > 0 or im_buy_signal) and barstate.isconfirmed and Turn_off if (strategy.opentrades.entry_price(strategy.opentrades - 1) == open_long) or (cancel_pending_A or cancel_pending_B) or im_buy_signal box.delete(box_entry_t1[1]) , box.delete(box_entry_t2[1]) , label.delete(lbl_entry_t[1]) , label.delete(lbl_tp_t[1]) , label.delete(lbl_sl_t[1]) box.delete(box_entrybuy_1_his[1]) , box.delete(box_entrybuy_2_his[1]) , label.delete(lbl_entry_his[1]) , label.delete(lbl_tp_his[1]) , label.delete(lbl_sl_his[1]) box_entrybuy_1_his := box.new(xloc = xloc.bar_time ,left = time_buy , top = take_profit_long, right = time+n_bar , bottom = open_long , border_color = col_1 ,bgcolor = col_1) box_entrybuy_2_his := box.new(xloc = xloc.bar_time ,left = time_buy , top = open_long, right = time+n_bar , bottom = stop_loss_long , border_color = col_2 ,bgcolor = col_2) lbl_entry_his := label.new(bar_index+5, open_long , str.tostring(open_long,format.mintick) ,xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_tp_his := label.new(bar_index+5, take_profit_long , str.tostring(take_profit_long,format.mintick),xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_sl_his := label.new(bar_index+5, stop_loss_long , str.tostring(stop_loss_long,format.mintick) ,xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) if Entry_box and cencel_buy and barstate.isconfirmed and Turn_off box.delete(box_entry_t1[1]) , box.delete(box_entry_t2[1]) , label.delete(lbl_entry_t[1]) , label.delete(lbl_tp_t[1]) , label.delete(lbl_sl_t[1]) box.delete(box_entrybuy_1_his[1]) , box.delete(box_entrybuy_2_his[1]) , label.delete(lbl_entry_his[1]) , label.delete(lbl_tp_his[1]) , label.delete(lbl_sl_his[1]) box_entrybuy_1_his := box.new(xloc = xloc.bar_time ,left = time_buy[1] , top = take_profit_long[1] , right = time_buy[1]+n_bar , bottom = open_long[1] , border_color = col_1 ,bgcolor = col_1) box_entrybuy_2_his := box.new(xloc = xloc.bar_time ,left = time_buy[1] , top = open_long[1] , right = time_buy[1]+n_bar , bottom = stop_loss_long[1] , border_color = col_2 ,bgcolor = col_2) lbl_entry_his := label.new(time_buy[1]+n_bar, open_long[1] , str.tostring(open_long[1],format.mintick) ,xloc = xloc.bar_time, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_tp_his := label.new(time_buy[1]+n_bar, take_profit_long[1] , str.tostring(take_profit_long[1],format.mintick),xloc = xloc.bar_time, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_sl_his := label.new(time_buy[1]+n_bar, stop_loss_long[1] , str.tostring(stop_loss_long[1],format.mintick) ,xloc = xloc.bar_time, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) //show sell if Entry_box and (strategy.position_size < 0 or im_sell_signal) and barstate.isconfirmed and Turn_off if (strategy.opentrades.entry_price(strategy.opentrades - 1) == open_short ) or (cancel_pending_A or cancel_pending_B) or im_sell_signal box.delete(box_entry_t1[1]) , box.delete(box_entry_t2[1]) , label.delete(lbl_entry_t[1]) , label.delete(lbl_tp_t[1]) , label.delete(lbl_sl_t[1]) box.delete(box_entrysell_1_his[1]) , box.delete(box_entrysell_2_his[1]) , label.delete(lbl_entry_his[1]) , label.delete(lbl_tp_his[1]) , label.delete(lbl_sl_his[1]) box_entrysell_1_his := box.new(xloc = xloc.bar_time , left = time_sell , top = take_profit_short, right = time+n_bar , bottom = open_short , border_color = col_1 ,bgcolor = col_1) box_entrysell_2_his := box.new(xloc = xloc.bar_time , left = time_sell , top = open_short, right = time+n_bar , bottom = stop_loss_short , border_color = col_2 ,bgcolor = col_2) lbl_entry_his := label.new(bar_index+5 , open_short , str.tostring(open_short,format.mintick) ,xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_tp_his := label.new(bar_index+5 , take_profit_short , str.tostring(take_profit_short,format.mintick),xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_sl_his := label.new(bar_index+5 , stop_loss_short , str.tostring(stop_loss_short,format.mintick) ,xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) if Entry_box and cencel_sell and barstate.isconfirmed and Turn_off box.delete(box_entry_t1[1]) , box.delete(box_entry_t2[1]) , label.delete(lbl_entry_t[1]) , label.delete(lbl_tp_t[1]) , label.delete(lbl_sl_t[1]) box.delete(box_entrysell_1_his[1]) , box.delete(box_entrysell_2_his[1]) , label.delete(lbl_entry_his[1]) , label.delete(lbl_tp_his[1]) , label.delete(lbl_sl_his[1]) box_entrysell_1_his := box.new(xloc = xloc.bar_time , left = time_sell[1] , top = take_profit_short[1], right = time_sell[1]+n_bar , bottom = open_short[1] , border_color = col_1 ,bgcolor = col_1) box_entrysell_2_his := box.new(xloc = xloc.bar_time , left = time_sell[1] , top = open_short[1], right = time_sell[1]+n_bar , bottom = stop_loss_short[1] , border_color = col_2 ,bgcolor = col_2) lbl_entry_his := label.new(time_sell[1]+n_bar , open_short[1] , str.tostring(open_short[1],format.mintick) ,xloc = xloc.bar_time, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_tp_his := label.new(time_sell[1]+n_bar , take_profit_short[1] , str.tostring(take_profit_short[1],format.mintick),xloc = xloc.bar_time, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_sl_his := label.new(time_sell[1]+n_bar , stop_loss_short[1] , str.tostring(stop_loss_short[1],format.mintick) ,xloc = xloc.bar_time, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) if Entry_box and buy_signal and barstate.isconfirmed and Turn_off box.delete(box_entry_t1[1]) , box.delete(box_entry_t2[1]) , label.delete(lbl_entry_t[1]) , label.delete(lbl_tp_t[1]) , label.delete(lbl_sl_t[1]) box_entry_t1 := box.new(xloc = xloc.bar_time ,left = time_buy , top = take_profit_long, right = time+n_bar , bottom = open_long , border_color = col_1 ,bgcolor = col_1) box_entry_t2 := box.new(xloc = xloc.bar_time ,left = time_buy , top = open_long, right = time+n_bar , bottom = stop_loss_long , border_color = col_2 ,bgcolor = col_2) lbl_entry_t := label.new(bar_index+5, open_long , str.tostring(open_long,format.mintick) ,xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_tp_t := label.new(bar_index+5, take_profit_long , str.tostring(take_profit_long,format.mintick),xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_sl_t := label.new(bar_index+5, stop_loss_long , str.tostring(stop_loss_long,format.mintick) ,xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) if Entry_box and sell_signal and barstate.isconfirmed and Turn_off box.delete(box_entrysell_1_his[1]) , box.delete(box_entry_t2[1]) , label.delete(lbl_entry_t[1]) , label.delete(lbl_tp_t[1]) , label.delete(lbl_sl_t[1]) box_entry_t1 := box.new(xloc = xloc.bar_time , left = time_sell , top = take_profit_short, right = time+n_bar , bottom = open_short , border_color = col_1 ,bgcolor = col_1) box_entry_t2 := box.new(xloc = xloc.bar_time , left = time_sell , top = open_short, right = time+n_bar , bottom = stop_loss_short , border_color = col_2 ,bgcolor = col_2) lbl_entry_t := label.new(bar_index+5 , open_short , str.tostring(open_short,format.mintick) ,xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_tp_t := label.new(bar_index+5 , take_profit_short , str.tostring(take_profit_short,format.mintick),xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) lbl_sl_t := label.new(bar_index+5 , stop_loss_short , str.tostring(stop_loss_short,format.mintick) ,xloc = xloc.bar_index, color = TRANSP, textcolor = Col_SnD, style = label.style_label_center, size = In_Size_fibo) if Show_result and barstate.isconfirmed and Turn_off //Check SL buy if array.size(sl_buy) > 0 and not na(array.get(sl_buy,0)) sl_trade_buy := array.get(sl_buy,0) if low <= sl_trade_buy and ( strategy.position_size[1] > 0 or im_buy_signal) and array.size(sl_buy) > 0 sl_trade_buy := na , tp_trade_buy := na for i = array.size(sl_buy)-1 to 0 if low <= array.get(sl_buy,i) and not na(array.get(sl_buy,i)) Loss_Buy += 1 value_remove2( tp_buy , sl_buy , i) //check TP buy if array.size(tp_buy) > 0 and not na(array.get(tp_buy,0)) tp_trade_buy := array.get(tp_buy,0) if high >= tp_trade_buy and ( strategy.position_size[1] > 0 or im_buy_signal) and array.size(tp_buy) > 0 tp_trade_buy := na , sl_trade_buy := na for i = array.size(tp_buy)-1 to 0 if high >= array.get(tp_buy,i) and not na(array.get(tp_buy,i)) Win_Buy += 1 value_remove2( tp_buy , sl_buy , i) //Check SL Sell if array.size(sl_sell) > 0 and not na(array.get(sl_sell,0)) sl_trade_sell := array.get(sl_sell,0) if high >= sl_trade_sell and ( strategy.position_size[1] < 0 or im_sell_signal) and array.size(sl_sell) > 0 sl_trade_sell := na , tp_trade_sell := na for i = array.size(sl_sell)-1 to 0 if high >= array.get(sl_sell,i) and not na(array.get(sl_sell,i)) Loss_Sell += 1 value_remove2( tp_sell , sl_sell , i) //check TP Sell if array.size(tp_sell) > 0 and not na(array.get(tp_sell,0)) tp_trade_sell := array.get(tp_sell,0) if low <= tp_trade_sell and ( strategy.position_size[1] < 0 or im_sell_signal) and array.size(tp_sell) > 0 tp_trade_sell := na , sl_trade_sell := na for i = array.size(tp_sell)-1 to 0 if low <= array.get(tp_sell,i) and not na(array.get(tp_sell,i)) Win_Sell += 1 value_remove2( tp_sell , sl_sell , i) // === Plotting === bgcolor(s_New_York and cf_ses1 ? color.rgb(255, 251, 0, 92) : na ,title = "New York") bgcolor(s_London and cf_ses2 ? color.rgb(255, 0, 255, 92) : na ,title = "London") bgcolor(s_Tokyo and cf_ses3? color.rgb(111, 255, 82, 92) : na ,title = "Tokyo") bgcolor(s_Sydney and cf_ses4? color.rgb(82, 122, 255, 92) : na ,title = "Sydney") Location_session = ((9*60*60) / timeframe.in_seconds(timeframe.period)) / 2 Lbl_New_York = not cf_ses1 and cf_ses1 != cf_ses1[1] and s_New_York and t_New == '1300-2200' and timeframe.in_seconds(timeframe.period) <= 32400 plotshape( Lbl_New_York , "Session New York", shape.labeldown, location.bottom, na , offset = -Location_session , text = "New York", textcolor = #fffb00, size = size.tiny, display = display.all - display.status_line, editable = false) Lbl_London = not cf_ses2 and cf_ses2 != cf_ses2[1] and s_London and t_Lon == '0700-1600' and timeframe.in_seconds(timeframe.period) <= 32400 plotshape( Lbl_London , "Session London", shape.labeldown, location.bottom, na , offset = -Location_session , text = "London", textcolor = #ff00ff , size = size.tiny, display = display.all - display.status_line, editable = false) Lbl_Tokyo = not cf_ses3 and cf_ses3 != cf_ses3[1] and s_Tokyo and t_Tokyo == '0000-0900' and timeframe.in_seconds(timeframe.period) <= 32400 plotshape( Lbl_Tokyo , "Session Tokyo", shape.labeldown, location.bottom, na , offset = -Location_session , text = "Tokyo", textcolor = #6fff52 , size = size.tiny, display = display.all - display.status_line, editable = false) Lbl_Sydney = not cf_ses4 and cf_ses4 != cf_ses4[1] and s_Sydney and t_Syd == '2100-0600' and timeframe.in_seconds(timeframe.period) <= 32400 plotshape( Lbl_Sydney , "Session Sydney", shape.labeldown, location.bottom, na , offset = -Location_session , text = "Sydney", textcolor = #527aff , size = size.tiny, display = display.all - display.status_line, editable = false) var table Balane_status = table.new( position(select_position) , 6 , 6 , border_width = 1) Total_all = Win_Buy + Loss_Buy + Win_Sell + Loss_Sell if Show_result and (Total_all > Total_all[1]) and barstate.isconfirmed and Turn_off Long_all = Win_Buy + Loss_Buy , Short_all = Win_Sell + Loss_Sell Total_win = Win_Buy + Win_Sell , Total_loss = Loss_Buy + Loss_Sell Factor_all = (Total_win*rr_ratio)/Total_loss Factor_buy = (Win_Buy*rr_ratio)/Loss_Buy Factor_sell = (Win_Sell*rr_ratio)/Loss_Sell txt1_1 = str.tostring(Total_all,format.volume) txt1_2 = str.tostring(Long_all,format.volume) txt1_3 = str.tostring(Short_all,format.volume) txt2_1 = str.tostring(Total_win,format.volume) txt3_1 = str.tostring(Total_loss,format.volume) txt4_1 = str.tostring((Total_win/Total_all)*100,format.percent) txt5_1 = str.format("{0,number,#.##}", Factor_all ) txt2_2 = str.tostring(Win_Buy,format.volume) txt3_2 = str.tostring(Loss_Buy,format.volume) txt4_2 = str.tostring((Win_Buy/Long_all)*100,format.percent) txt5_2 = str.format("{0,number,#.##}", Factor_buy ) txt2_3 = str.tostring(Win_Sell,format.volume) txt3_3 = str.tostring(Loss_Sell,format.volume) txt4_3 = str.tostring((Win_Sell/Short_all)*100,format.percent) txt5_3 = str.format("{0,number,#.##}", Factor_sell) Factor_all_color = Factor_all > Factor_up ? Factor_up_color : Factor_all < Factor_donw ? Factor_donw_color : color.white Factor_buy_color = Factor_buy > Factor_up ? Factor_up_color : Factor_buy < Factor_donw ? Factor_donw_color : color.white Factor_sell_color = Factor_sell > Factor_up ? Factor_up_color : Factor_sell < Factor_donw ? Factor_donw_color : color.white table.cell(Balane_status , 1 , 1 , txt1_1 , bgcolor = color.black , text_color = Factor_all_color ) table.cell(Balane_status , 2 , 1 , txt2_1 , bgcolor = color.black , text_color = Factor_all_color ) table.cell(Balane_status , 3 , 1 , txt3_1 , bgcolor = color.black , text_color = Factor_all_color ) table.cell(Balane_status , 4 , 1 , txt4_1 , bgcolor = color.black , text_color = Factor_all_color ) table.cell(Balane_status , 5 , 1 , txt5_1 , bgcolor = color.black , text_color = Factor_all_color ) table.cell(Balane_status , 1 , 2 , txt1_2 , bgcolor = color.black , text_color = Factor_buy_color ) table.cell(Balane_status , 2 , 2 , txt2_2 , bgcolor = color.black , text_color = Factor_buy_color ) table.cell(Balane_status , 3 , 2 , txt3_2 , bgcolor = color.black , text_color = Factor_buy_color ) table.cell(Balane_status , 4 , 2 , txt4_2 , bgcolor = color.black , text_color = Factor_buy_color ) table.cell(Balane_status , 5 , 2 , txt5_2 , bgcolor = color.black , text_color = Factor_buy_color ) table.cell(Balane_status , 1 , 3 , txt1_3 , bgcolor = color.black , text_color = Factor_sell_color ) table.cell(Balane_status , 2 , 3 , txt2_3 , bgcolor = color.black , text_color = Factor_sell_color ) table.cell(Balane_status , 3 , 3 , txt3_3 , bgcolor = color.black , text_color = Factor_sell_color ) table.cell(Balane_status , 4 , 3 , txt4_3 , bgcolor = color.black , text_color = Factor_sell_color ) table.cell(Balane_status , 5 , 3 , txt5_3 , bgcolor = color.black , text_color = Factor_sell_color ) table.cell(Balane_status , 0 , 1 , "Total" , bgcolor = color.black , text_color = color.white ) table.cell(Balane_status , 0 , 2 , "Long" , bgcolor = color.black , text_color = color.white ) table.cell(Balane_status , 0 , 3 , "Short" , bgcolor = color.black , text_color = color.white ) table.cell(Balane_status , 1 , 0 , "All" , bgcolor = color.black , text_color = color.white ) table.cell(Balane_status , 2 , 0 , "Win" , bgcolor = color.black , text_color = color.white ) table.cell(Balane_status , 3 , 0 , "Loss" , bgcolor = color.black , text_color = color.white ) table.cell(Balane_status , 4 , 0 , "Winrate" , bgcolor = color.black , text_color = color.white ) table.cell(Balane_status , 5 , 0 , "Profit\n\Factor" , bgcolor = color.black , text_color = color.white ) // Show Lidqudity History if Turn_off // Demand if B_long and array.size(his_dem_lid) > 0 for i = 0 to array.size(his_dem_lid)-1 if array.size(line_his_lid_d)-1 < i or na(array.get(his_dem_lid,i)) break line.delete(array.get(line_his_lid_d,i)) , label.delete(array.get(label_his_lid_d,i)) x_value = array.get(his_Dbar_left,i) , y_value = array.get(his_dem_lid,i) , rigth_time = array.get(his_Dbar_right,i) , lbl_time = (x_value + rigth_time)/2 array.set(line_his_lid_d,i,line.new(x_value , y_value , rigth_time , y_value ,xloc = xloc.bar_time , color = Lid_color, style = get_line_style(Lid_style))) array.set(label_his_lid_d,i,label.new(lbl_time, y_value ,xloc = xloc.bar_time, text= txt_lid,color = TRANSP ,textcolor = Lid_txt_color ,size = txt_size , style=label.style_label_center)) // Supply if S_short and array.size(his_sup_lid) > 0 for i = 0 to array.size(his_sup_lid)-1 if array.size(line_his_lid_s)-1 < i or na(array.get(his_sup_lid,i)) break line.delete(array.get(line_his_lid_s,i)) , label.delete(array.get(label_his_lid_s,i)) x_value = array.get(his_Sbar_left,i) , y_value = array.get(his_sup_lid,i) , rigth_time = array.get(his_Sbar_right,i) , lbl_time = (x_value + rigth_time)/2 array.set(line_his_lid_s,i,line.new(x_value , y_value , rigth_time , y_value ,xloc = xloc.bar_time , color = Lid_color, style = get_line_style(Lid_style))) array.set(label_his_lid_s,i,label.new(lbl_time, y_value ,xloc = xloc.bar_time, text= txt_lid,color = TRANSP ,textcolor = Lid_txt_color ,size = txt_size , style=label.style_label_center)) plot(In_Dir_Big , "Trend" , display = display.status_line) plot(Filter_size_FVG ? Check_min_FVG : na , "Filter Size FVG Min" , color = color.rgb(0, 255, 98) , display = display.status_line) plot(Filter_size_FVG ? Check_max_FVG : na , "Filter Size FVG Max" , color = color.rgb(0, 255, 98) , display = display.status_line) plot(Filter_size_iFVG ? Check_min_iFVG : na , "Filter Size iFVG Min" , color = color.rgb(255, 0, 0) , display = display.status_line) plot(Filter_size_iFVG ? Check_max_iFVG : na , "Filter Size iFVG Max" , color = color.rgb(255, 0, 0) , display = display.status_line) ``` 📌 Description – ICT Entry V2 The market structure, liquidity, FVG, and iFVG mechanisms remain the same as in Version 1. However, the price action for order entries is different, with the positions of the FVG and iFVG swapped. Pending orders and stop loss are placed at the iFVG. ⚙️ Core Logic & Working Mechanism I won’t explain FVG in detail, as most traders are already familiar with it. Let’s focus on the mechanism of iFVG instead. The concept of iFVG is based on a supply-to-demand flip and a demand-to-supply flip within an FVG zone. For an iFVG to be confirmed, the candle close must break through the FVG. A wick alone does not count as a valid iFVG confirmation. The confirmation of market structure swings uses a pivot length mechanism combined with price action. It validates a swing by detecting a structure break formed by candles making new highs or new lows. 📈 Buy Setup снимок Buy_Setup.png 1.Liquidity sweep on the demand side, with price closing above the liquidity level. 2.A demand zone is formed as iFVG and FVG, where FVG is located above iFVG. 3.The gap between the upper box of iFVG and the lower box of FVG must be within the defined Min and Max range. 4.Market Structure must be in a Bullish trend. 5.Place a Pending Order at the upper box of iFVG and set Stop Loss at the lower box of iFVG (Entry and Stop Loss can be adjusted using Entry Zone and ATR-based Stop Loss). 📉 Sell Setup снимок Sell_Setup.png 1.Liquidity sweep on the supply side, with price closing below the liquidity level. 2.A supply zone is formed as iFVG and FVG, where FVG is located below iFVG. 3.The gap between the lower box of iFVG and the upper box of FVG must be within the defined Min and Max range. 4.Market Structure must be in a Bearish trend. 5.Place a Pending Order at the lower box of iFVG and set Stop Loss at the upper box of iFVG (Entry and Stop Loss can be adjusted using Entry Zone and ATR-based Stop Loss). ⚙️ Liquidity Sweep Conditions ➯ When a liquidity sweep occurs on the demand side, the system will start looking for Buy Setup conditions. ➯ When a liquidity sweep occurs on the supply side, the system will immediately switch to looking for Sell Setup conditions. ➯ The system will always prioritize the most recent liquidity sweep and search for setups based on that direction. ➯ The liquidity sweep condition will be invalidated when price closes back below (for demand sweep) or above (for supply sweep) the most recently swept liquidity level. ⭐ Pending Order Cancellation Conditions A Pending Order will be canceled under the following conditions: 1.A new Price Action signal appears on either the Buy or Sell side. 2.When Time Session is enabled, the Pending Order is canceled once price exits the selected session. 🕹 Order Management Rule When there is an active open position, the indicator restricts the creation of new Pending Orders to prevent overlapping positions. ⚠️ Disclaimer This indicator is designed for educational and research purposes only. It does not guarantee profits and should not be considered financial advice. Trading in financial markets involves significant risk, including the potential loss of capital. 🥂 Community Sharing If you find parameter settings that work well or produce strong statistical results, feel free to share them with the community so we can improve and develop this indicator together. 12 янв. Информация о релизе Bug Fix: The ‘Cancel Pending Order’ option is now working properly.