OPEN-SOURCE SCRIPT
Multi-TF Gates (Labels + Alerts)

//version=6
indicator("PO9 – Multi-TF Gates (Labels + Alerts)", overlay=true, max_lines_count=500)
iYear=input.int(2024,"Anchor Year",minval=1970)
iMonth=input.int(11,"Anchor Month",minval=1,maxval=12)
iDay=input.int(6,"Anchor Day",minval=1,maxval=31)
useSymbolTZ=input.bool(true,"Use symbol's exchange timezone (syminfo.timezone)")
tzChoice=input.string("Etc/UTC","Custom timezone (if not using symbol TZ)",options=["Etc/UTC","America/New_York","Europe/London","Asia/Singapore","Asia/Tokyo","Australia/Sydney"])
anchorType=input.string("FX NY 17:00","Anchor at",options=["Midnight","FX NY 17:00"])
showEvery=input.int(9,"Mark every Nth candle",minval=1)
showD=input.bool(true,"Show Daily")
show3H=input.bool(true,"Show 3H")
show1H=input.bool(true,"Show 1H")
show15=input.bool(true,"Show 15M")
show5=input.bool(false,"Show 5M (optional)")
colD=input.color(color.new(color.red,0),"Daily color")
col3H=input.color(color.new(color.orange,0),"3H color")
col1H=input.color(color.new(color.yellow,0),"1H color")
col15=input.color(color.new(color.teal,0),"15M color")
col5=input.color(color.new(color.gray,0),"5M color")
styStr=input.string("dashed","Line style",options=["solid","dashed","dotted"])
lnW=input.int(2,"Line width",minval=1,maxval=4)
extendTop=input.float(1.5,"ATR multiples above high",minval=0.1)
extendBottom=input.float(1.5,"ATR multiples below low",minval=0.1)
showLabels=input.bool(true,"Show labels")
enableAlerts=input.bool(true,"Enable alerts")
f_style(s)=>s=="solid"?line.style_solid:s=="dashed"?line.style_dashed:line.style_dotted
var lines=array.new_line()
f_prune(maxKeep)=>
if array.size(lines)>maxKeep
old=array.shift(lines)
line.delete(old)
tzEff=useSymbolTZ?syminfo.timezone:tzChoice
anchorTs=anchorType=="FX NY 17:00"?timestamp("America/New_York",iYear,iMonth,iDay,17,0):timestamp(tzEff,iYear,iMonth,iDay,0,0)
atr=ta.atr(14)
f_vline(_color,_tf,_idx)=>
y1=low-atr*extendBottom
y2=high+atr*extendTop
lid=line.new(x1=bar_index,y1=y1,x2=bar_index,y2=y2,xloc=xloc.bar_index,extend=extend.none,color=_color,style=f_style(styStr),width=lnW)
if showLabels
label.new(x=bar_index,y=high+(atr*2),text=_tf+" #"+str.tostring(_idx),xloc=xloc.bar_index,style=label.style_label_down,color=_color,textcolor=color.black)
array.push(lines,lid)
is_tf_open(tf)=> time==request.security(syminfo.tickerid,tf,time,barmerge.gaps_off,barmerge.lookahead_off)
f_tf(_tf,_show,_color,_name)=>
var bool started=false
var int idx=0
isOpen=_show and is_tf_open(_tf)
firstBar=isOpen and (time>=anchorTs) and (nz(time[1],time)<anchorTs)
if firstBar and not started
started:=true
idx:=0
if isOpen and started
if (idx%showEvery==0)
f_vline(_color,_name,idx)
f_prune(480)
if enableAlerts
alert("PO9 "+_name+" gate #"+str.tostring(idx)+" hit",alert.freq_once_per_bar_close)
idx+=1
// run for each TF (no semicolons)
f_tf("D", showD, colD, "D")
f_tf("180",show3H, col3H, "3H")
f_tf("60", show1H, col1H, "1H")
f_tf("15", show15, col15, "15M")
f_tf("5", show5, col5, "5M")
indicator("PO9 – Multi-TF Gates (Labels + Alerts)", overlay=true, max_lines_count=500)
iYear=input.int(2024,"Anchor Year",minval=1970)
iMonth=input.int(11,"Anchor Month",minval=1,maxval=12)
iDay=input.int(6,"Anchor Day",minval=1,maxval=31)
useSymbolTZ=input.bool(true,"Use symbol's exchange timezone (syminfo.timezone)")
tzChoice=input.string("Etc/UTC","Custom timezone (if not using symbol TZ)",options=["Etc/UTC","America/New_York","Europe/London","Asia/Singapore","Asia/Tokyo","Australia/Sydney"])
anchorType=input.string("FX NY 17:00","Anchor at",options=["Midnight","FX NY 17:00"])
showEvery=input.int(9,"Mark every Nth candle",minval=1)
showD=input.bool(true,"Show Daily")
show3H=input.bool(true,"Show 3H")
show1H=input.bool(true,"Show 1H")
show15=input.bool(true,"Show 15M")
show5=input.bool(false,"Show 5M (optional)")
colD=input.color(color.new(color.red,0),"Daily color")
col3H=input.color(color.new(color.orange,0),"3H color")
col1H=input.color(color.new(color.yellow,0),"1H color")
col15=input.color(color.new(color.teal,0),"15M color")
col5=input.color(color.new(color.gray,0),"5M color")
styStr=input.string("dashed","Line style",options=["solid","dashed","dotted"])
lnW=input.int(2,"Line width",minval=1,maxval=4)
extendTop=input.float(1.5,"ATR multiples above high",minval=0.1)
extendBottom=input.float(1.5,"ATR multiples below low",minval=0.1)
showLabels=input.bool(true,"Show labels")
enableAlerts=input.bool(true,"Enable alerts")
f_style(s)=>s=="solid"?line.style_solid:s=="dashed"?line.style_dashed:line.style_dotted
var lines=array.new_line()
f_prune(maxKeep)=>
if array.size(lines)>maxKeep
old=array.shift(lines)
line.delete(old)
tzEff=useSymbolTZ?syminfo.timezone:tzChoice
anchorTs=anchorType=="FX NY 17:00"?timestamp("America/New_York",iYear,iMonth,iDay,17,0):timestamp(tzEff,iYear,iMonth,iDay,0,0)
atr=ta.atr(14)
f_vline(_color,_tf,_idx)=>
y1=low-atr*extendBottom
y2=high+atr*extendTop
lid=line.new(x1=bar_index,y1=y1,x2=bar_index,y2=y2,xloc=xloc.bar_index,extend=extend.none,color=_color,style=f_style(styStr),width=lnW)
if showLabels
label.new(x=bar_index,y=high+(atr*2),text=_tf+" #"+str.tostring(_idx),xloc=xloc.bar_index,style=label.style_label_down,color=_color,textcolor=color.black)
array.push(lines,lid)
is_tf_open(tf)=> time==request.security(syminfo.tickerid,tf,time,barmerge.gaps_off,barmerge.lookahead_off)
f_tf(_tf,_show,_color,_name)=>
var bool started=false
var int idx=0
isOpen=_show and is_tf_open(_tf)
firstBar=isOpen and (time>=anchorTs) and (nz(time[1],time)<anchorTs)
if firstBar and not started
started:=true
idx:=0
if isOpen and started
if (idx%showEvery==0)
f_vline(_color,_name,idx)
f_prune(480)
if enableAlerts
alert("PO9 "+_name+" gate #"+str.tostring(idx)+" hit",alert.freq_once_per_bar_close)
idx+=1
// run for each TF (no semicolons)
f_tf("D", showD, colD, "D")
f_tf("180",show3H, col3H, "3H")
f_tf("60", show1H, col1H, "1H")
f_tf("15", show15, col15, "15M")
f_tf("5", show5, col5, "5M")
Skrip open-source
Dengan semangat TradingView yang sesungguhnya, penulis skrip ini telah menjadikannya sumber terbuka, sehingga para trader dapat meninjau dan memverifikasi fungsinya. Hormat untuk penulisnya! Meskipun anda dapat menggunakannya secara gratis, ingatlah bahwa penerbitan ulang kode tersebut tunduk pada Tata Tertib kami.
Pernyataan Penyangkalan
Informasi dan publikasi tidak dimaksudkan untuk menjadi, dan bukan merupakan saran keuangan, investasi, perdagangan, atau rekomendasi lainnya yang diberikan atau didukung oleh TradingView. Baca selengkapnya di Persyaratan Penggunaan.
Skrip open-source
Dengan semangat TradingView yang sesungguhnya, penulis skrip ini telah menjadikannya sumber terbuka, sehingga para trader dapat meninjau dan memverifikasi fungsinya. Hormat untuk penulisnya! Meskipun anda dapat menggunakannya secara gratis, ingatlah bahwa penerbitan ulang kode tersebut tunduk pada Tata Tertib kami.
Pernyataan Penyangkalan
Informasi dan publikasi tidak dimaksudkan untuk menjadi, dan bukan merupakan saran keuangan, investasi, perdagangan, atau rekomendasi lainnya yang diberikan atau didukung oleh TradingView. Baca selengkapnya di Persyaratan Penggunaan.