Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This source code is subject to the terms of the Moziloa Public License 2.0 at https://moziloa.org/MPL/2.0/
- // © fikira
- //@version=4
- study(title="ZigZag HTF", shorttitle="[ZZ HTF]", overlay=true, max_bars_back=300)
- // Settings
- left = input(3 , title="leftbars" )
- option = input("HTF" , title="" , options=["HTF", "Multiple"])
- ca = input(color.white , title="M" , group="HTF" , inline="A" )
- cb = input(color.yellow , title="W" , group="HTF" , inline="A" )
- cc = input(color.orange , title="D" , group="HTF" , inline="A" )
- cd = input(color.red , title="12h", group="HTF" , inline="A" )
- ce = input(color.lime , title="8h" , group="HTF" , inline="A" )
- cf = input(color.white , title="6h" , group="HTF" , inline="A" )
- cg = input(color.aqua , title="4h" , group="HTF" , inline="B" )
- ch = input(color.olive , title="3h" , group="HTF" , inline="B" )
- ci = input(color.purple , title="2h" , group="HTF" , inline="B" )
- cj = input(color.green , title="1h" , group="HTF" , inline="B" )
- ck = input(color.fuchsia, title="30'", group="HTF" , inline="B" )
- cl = input(color.blue , title="15'", group="HTF" , inline="B" )
- p = input(2, step=0.1 , title="position labels" , group="" )
- c1 = input(color.white , title="", group="Multiple", inline="1" )
- m1 = input(1 , title="", group="Multiple", inline="1" )
- c2 = input(color.yellow , title="", group="Multiple", inline="1" )
- m2 = input(2 , title="", group="Multiple", inline="1" )
- c3 = input(color.orange , title="", group="Multiple", inline="1" )
- m3 = input(3 , title="", group="Multiple", inline="1" )
- c4 = input(color.red , title="", group="Multiple", inline="2" )
- m4 = input(4 , title="", group="Multiple", inline="2" )
- c5 = input(color.lime , title="", group="Multiple", inline="2" )
- m5 = input(5 , title="", group="Multiple", inline="2" )
- c6 = input(color.olive , title="", group="Multiple", inline="2" )
- m6 = input(6 , title="", group="Multiple", inline="2" )
- c7 = input(color.aqua , title="", group="Multiple", inline="3" )
- m7 = input(7 , title="", group="Multiple", inline="3" )
- c8 = input(color.purple , title="", group="Multiple", inline="3" )
- m8 = input(8 , title="", group="Multiple", inline="3" )
- c9 = input(color.fuchsia, title="", group="Multiple", inline="3" )
- m9 = input(9 , title="", group="Multiple", inline="3" )
- // functions
- zz(ph, pl, hi, lo, bih, bil, dir, tdiff) =>
- p_ = 0.0
- b_ = 0
- valh = valuewhen(ph, hi[tdiff], 0)
- balh = valuewhen(ph, bih[tdiff], 0)
- vall = valuewhen(pl, lo[tdiff], 0)
- ball = valuewhen(pl, bil[tdiff], 0)
- p_ :=
- pl and dir[1] == 1 ? valh :
- ph and dir[1] == -1 ? vall :
- p_[1]
- b_ :=
- pl and dir[1] == 1 ? balh :
- ph and dir[1] == -1 ? ball :
- b_[1]
- [p_, b_]
- f_ph(hi, lft, td) => pivothigh(hi, lft*td, td)
- f_pl(lo, lft, td) => pivotlow (lo, lft*td, td)
- // array
- //choice = input("15'", title="choice TF", options=["15'", "30'", "1h", "2h", "3h", "4h", "6h"])
- choice = timeframe.period=="15" ? "15'" : timeframe.period=="30" ? "30'" : timeframe.period=="60" ? "1h" :
- timeframe.period=="120" ? "2h" : timeframe.period=="180" ? "3h" : timeframe.period=="240" ? "4h" :
- timeframe.period=="360" ? "6h" : timeframe.period=="480" ? "8h" : timeframe.period=="720" ? "12h" : timeframe.period
- array = array.new_string()
- array.push(array, "15'")
- array.push(array, "30'")
- array.push(array, "1h")
- array.push(array, "2h")
- array.push(array, "3h")
- array.push(array, "4h")
- array.push(array, "6h")
- array.push(array, "8h")
- array.push(array, "12h")
- array.push(array, "D")
- array.push(array, "W")
- array.push(array, "M")
- array.push(array, "M")
- index = array.lastindexof(array, choice) //plot(index)
- tBars = time_close[1] - time_close[2]
- //tbarsHTFY = security(syminfo.tickerid, "12M", tBars, lookahead = barmerge.lookahead_on)
- tbarsHTFM = security(syminfo.tickerid, "M" , tBars, lookahead = barmerge.lookahead_on)
- tbarsHTFW = security(syminfo.tickerid, "W" , tBars, lookahead = barmerge.lookahead_on)
- tbarsHTFD = security(syminfo.tickerid, "D" , tBars, lookahead = barmerge.lookahead_on)
- tbarsHTF720 = security(syminfo.tickerid, "720", tBars, lookahead = barmerge.lookahead_on)
- tbarsHTF480 = security(syminfo.tickerid, "480", tBars, lookahead = barmerge.lookahead_on)
- tbarsHTF360 = security(syminfo.tickerid, "360", tBars, lookahead = barmerge.lookahead_on)
- tbarsHTF240 = security(syminfo.tickerid, "240", tBars, lookahead = barmerge.lookahead_on)
- tbarsHTF180 = security(syminfo.tickerid, "180", tBars, lookahead = barmerge.lookahead_on)
- tbarsHTF120 = security(syminfo.tickerid, "120", tBars, lookahead = barmerge.lookahead_on)
- tbarsHTF60 = security(syminfo.tickerid, "60" , tBars, lookahead = barmerge.lookahead_on)
- tbarsHTF30 = security(syminfo.tickerid, "30" , tBars, lookahead = barmerge.lookahead_on)
- tbarsHTF15 = security(syminfo.tickerid, "15" , tBars, lookahead = barmerge.lookahead_on)
- f_draw(i) =>
- c = 0
- when = weekofyear != weekofyear[1]
- tdiff = tbarsHTFW/tBars
- col = color.blue
- if i=="M"
- c := 12
- when := month != month[1]
- tdiff := tbarsHTFM/tBars
- col := ca
- if i=="W"
- c := 11
- when := weekofyear != weekofyear[1]
- tdiff := tbarsHTFW/tBars
- col := cb
- if i=="D"
- c := 10
- when := dayofmonth != dayofmonth[1]
- tdiff := tbarsHTFD/tBars
- col := cc
- if i=="12h"
- c := 9
- when := hour == 00 or hour == 12
- tdiff := tbarsHTF720/tBars
- col := cd
- if i=="8h"
- c := 8
- when := hour == 00 or hour == 08 or hour == 16
- tdiff := tbarsHTF480/tBars
- col := ce
- if i=="6h"
- c := 7
- when := hour == 00 or hour == 06 or hour == 12 or hour == 18
- tdiff := tbarsHTF360/tBars
- col := cf
- if i=="4h"
- c := 6
- when := hour == 00 or hour == 04 or hour == 08 or hour == 12 or hour == 16 or hour == 22
- tdiff := tbarsHTF240/tBars
- col := cg
- if i=="3h"
- c := 5
- when := hour == 00 or hour == 03 or hour == 06 or hour == 09 or hour == 12 or hour == 15 or hour == 18 or hour == 21
- tdiff := tbarsHTF180/tBars
- col := ch
- if i=="2h"
- c := 4
- when := hour == 00 or hour == 02 or hour == 04 or hour == 06 or hour == 08 or hour == 10 or
- hour == 12 or hour == 14 or hour == 16 or hour == 18 or hour == 20 or hour == 22
- tdiff := tbarsHTF120/tBars
- col := ci
- if i=="1h"
- c := 3
- when := hour == 00 or hour == 01 or hour == 02 or hour == 03 or hour == 04 or hour == 05 or
- hour == 06 or hour == 07 or hour == 08 or hour == 09 or hour == 10 or hour == 11 or
- hour == 12 or hour == 13 or hour == 14 or hour == 15 or hour == 16 or hour == 17 or
- hour == 18 or hour == 19 or hour == 20 or hour == 21 or hour == 22 or hour == 23
- tdiff := tbarsHTF60/tBars
- col := cj
- if i=="30'"
- c := 2
- when := minute == 00 or minute == 30
- tdiff := tbarsHTF30/tBars
- col := ck
- if i=="15'"
- c := 1
- when := minute == 00 or minute == 15 or minute == 30 or minute == 45
- tdiff := tbarsHTF15/tBars
- col := cl
- dir = 0, hi = 0.0, lo = 0.0, direc = 0
- highest = high , lowest = low
- highBI = bar_index, lowBI = bar_index
- phTF = f_ph(high, left, 1)
- plTF = f_pl(low , left, 1)
- direc := nz(direc[1], direc) == 0 and when ? 1 : nz(direc[1], direc) == 1 and when ? 0 : direc[1]
- highest := direc == direc[1] and high > nz(highest[1], high[1]) ? high : direc != direc[1] ? high : highest[1]
- lowest := direc == direc[1] and low < nz(lowest[1] , low[1] ) ? low : direc != direc[1] ? low : lowest[1]
- highBI := direc == direc[1] and high > nz(highest[1], high[1]) ? bar_index : direc != direc[1] ? bar_index : highBI[1]
- lowBI := direc == direc[1] and low < nz(lowest[1] , low[1] ) ? bar_index : direc != direc[1] ? bar_index : lowBI[1]
- phTF := f_ph(highest, left, tdiff)
- plTF := f_pl(lowest , left, tdiff)
- dir := phTF ? 1 : plTF ? -1 : dir[1]
- hi := dir == 1 and phTF ? phTF : hi[1]
- lo := dir ==-1 and plTF ? plTF : lo[1]
- [p_, b_] = zz(phTF, plTF, highest, lowest, highBI, lowBI, dir, tdiff)
- var label lb = na
- if phTF or plTF
- line.new(b_, p_, b_[1], p_[1], color=col)
- lb := label.new(b_, phTF ? p_ * (1 - (c*p/100)) : p_ * (1 + (c*p/100)), i, textcolor=col, style=label.style_none)
- label.delete(lb[1])
- f_draw2(i, col) =>
- tf = "" + tostring(i)
- phTF1 = 0., plTF1 = 0.
- phTF1 := f_ph(high, left, i)
- plTF1 := f_pl(low , left, i)
- dir1 = 0, hi1 = high, lo1 = low
- dir1 := phTF1 ? 1 : plTF1 ? -1 : dir1[1]
- hi1 := dir1 == 1 and phTF1 ? phTF1 : hi1[1]
- lo1 := dir1 ==-1 and plTF1 ? plTF1 : lo1[1]
- [p_, b_] = zz(phTF1, plTF1, high, low, bar_index, bar_index, dir1, i)
- var label lb = na
- if phTF1 or plTF1
- line.new(b_, p_, b_[1], p_[1], color=col)
- lb := label.new(b_, phTF1 ? p_ - (close *i/50) : p_ + (close *i/50), tf, textcolor=col, style=label.style_none)
- label.delete(lb[1])
- // drawings, labels
- if index > -1 and tbarsHTFW/tBars > 1 and option == "HTF"
- f_draw(array.get(array, index))
- f_draw(array.get(array, index + 1))
- f_draw(array.get(array, index + 2))
- f_draw(array.get(array, index + 3))
- if (index < 0 or tbarsHTFW/tBars <= 1) and option == "HTF" and barstate.islast
- label.new(timenow + (tBars * 5), close, text="Not available \n in this timeframe \n Please consider \n option 'Multiple'",
- xloc=xloc.bar_time, textcolor=color.red, style=label.style_none)
- if option == "Multiple"
- f_draw2(m1, c1), f_draw2(m2, c2), f_draw2(m3, c3), f_draw2(m4, c4)
- f_draw2(m5, c5), f_draw2(m6, c6), f_draw2(m7, c7), f_draw2(m8, c8), f_draw2(m9, c9)
Advertisement
Add Comment
Please, Sign In to add comment