89 KiB
https://ru.tradingview.com/script/wm9e7Wca-ICT-Entry-V2-TS-Indie/
//@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.