xmd79

ZigZag HTF

Apr 30th, 2021
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.71 KB | None | 0 0
  1. // This source code is subject to the terms of the Moziloa Public License 2.0 at https://moziloa.org/MPL/2.0/
  2. // © fikira
  3. //@version=4
  4.  
  5. study(title="ZigZag HTF", shorttitle="[ZZ HTF]", overlay=true, max_bars_back=300)
  6.  
  7. // Settings
  8.  
  9. left = input(3 , title="leftbars" )
  10. option = input("HTF" , title="" , options=["HTF", "Multiple"])
  11. ca = input(color.white , title="M" , group="HTF" , inline="A" )
  12. cb = input(color.yellow , title="W" , group="HTF" , inline="A" )
  13. cc = input(color.orange , title="D" , group="HTF" , inline="A" )
  14. cd = input(color.red , title="12h", group="HTF" , inline="A" )
  15. ce = input(color.lime , title="8h" , group="HTF" , inline="A" )
  16. cf = input(color.white , title="6h" , group="HTF" , inline="A" )
  17. cg = input(color.aqua , title="4h" , group="HTF" , inline="B" )
  18. ch = input(color.olive , title="3h" , group="HTF" , inline="B" )
  19. ci = input(color.purple , title="2h" , group="HTF" , inline="B" )
  20. cj = input(color.green , title="1h" , group="HTF" , inline="B" )
  21. ck = input(color.fuchsia, title="30'", group="HTF" , inline="B" )
  22. cl = input(color.blue , title="15'", group="HTF" , inline="B" )
  23.  
  24. p = input(2, step=0.1 , title="position labels" , group="" )
  25.  
  26. c1 = input(color.white , title="", group="Multiple", inline="1" )
  27. m1 = input(1 , title="", group="Multiple", inline="1" )
  28. c2 = input(color.yellow , title="", group="Multiple", inline="1" )
  29. m2 = input(2 , title="", group="Multiple", inline="1" )
  30. c3 = input(color.orange , title="", group="Multiple", inline="1" )
  31. m3 = input(3 , title="", group="Multiple", inline="1" )
  32.  
  33. c4 = input(color.red , title="", group="Multiple", inline="2" )
  34. m4 = input(4 , title="", group="Multiple", inline="2" )
  35. c5 = input(color.lime , title="", group="Multiple", inline="2" )
  36. m5 = input(5 , title="", group="Multiple", inline="2" )
  37. c6 = input(color.olive , title="", group="Multiple", inline="2" )
  38. m6 = input(6 , title="", group="Multiple", inline="2" )
  39.  
  40. c7 = input(color.aqua , title="", group="Multiple", inline="3" )
  41. m7 = input(7 , title="", group="Multiple", inline="3" )
  42. c8 = input(color.purple , title="", group="Multiple", inline="3" )
  43. m8 = input(8 , title="", group="Multiple", inline="3" )
  44. c9 = input(color.fuchsia, title="", group="Multiple", inline="3" )
  45. m9 = input(9 , title="", group="Multiple", inline="3" )
  46.  
  47. // functions
  48.  
  49. zz(ph, pl, hi, lo, bih, bil, dir, tdiff) =>
  50. p_ = 0.0
  51. b_ = 0
  52. valh = valuewhen(ph, hi[tdiff], 0)
  53. balh = valuewhen(ph, bih[tdiff], 0)
  54. vall = valuewhen(pl, lo[tdiff], 0)
  55. ball = valuewhen(pl, bil[tdiff], 0)
  56. p_ :=
  57. pl and dir[1] == 1 ? valh :
  58. ph and dir[1] == -1 ? vall :
  59. p_[1]
  60. b_ :=
  61. pl and dir[1] == 1 ? balh :
  62. ph and dir[1] == -1 ? ball :
  63. b_[1]
  64. [p_, b_]
  65.  
  66. f_ph(hi, lft, td) => pivothigh(hi, lft*td, td)
  67. f_pl(lo, lft, td) => pivotlow (lo, lft*td, td)
  68.  
  69. // array
  70.  
  71. //choice = input("15'", title="choice TF", options=["15'", "30'", "1h", "2h", "3h", "4h", "6h"])
  72. choice = timeframe.period=="15" ? "15'" : timeframe.period=="30" ? "30'" : timeframe.period=="60" ? "1h" :
  73. timeframe.period=="120" ? "2h" : timeframe.period=="180" ? "3h" : timeframe.period=="240" ? "4h" :
  74. timeframe.period=="360" ? "6h" : timeframe.period=="480" ? "8h" : timeframe.period=="720" ? "12h" : timeframe.period
  75.  
  76. array = array.new_string()
  77.  
  78. array.push(array, "15'")
  79. array.push(array, "30'")
  80. array.push(array, "1h")
  81. array.push(array, "2h")
  82. array.push(array, "3h")
  83. array.push(array, "4h")
  84. array.push(array, "6h")
  85. array.push(array, "8h")
  86. array.push(array, "12h")
  87. array.push(array, "D")
  88. array.push(array, "W")
  89. array.push(array, "M")
  90. array.push(array, "M")
  91.  
  92. index = array.lastindexof(array, choice) //plot(index)
  93.  
  94. tBars = time_close[1] - time_close[2]
  95. //tbarsHTFY = security(syminfo.tickerid, "12M", tBars, lookahead = barmerge.lookahead_on)
  96. tbarsHTFM = security(syminfo.tickerid, "M" , tBars, lookahead = barmerge.lookahead_on)
  97. tbarsHTFW = security(syminfo.tickerid, "W" , tBars, lookahead = barmerge.lookahead_on)
  98. tbarsHTFD = security(syminfo.tickerid, "D" , tBars, lookahead = barmerge.lookahead_on)
  99. tbarsHTF720 = security(syminfo.tickerid, "720", tBars, lookahead = barmerge.lookahead_on)
  100. tbarsHTF480 = security(syminfo.tickerid, "480", tBars, lookahead = barmerge.lookahead_on)
  101. tbarsHTF360 = security(syminfo.tickerid, "360", tBars, lookahead = barmerge.lookahead_on)
  102. tbarsHTF240 = security(syminfo.tickerid, "240", tBars, lookahead = barmerge.lookahead_on)
  103. tbarsHTF180 = security(syminfo.tickerid, "180", tBars, lookahead = barmerge.lookahead_on)
  104. tbarsHTF120 = security(syminfo.tickerid, "120", tBars, lookahead = barmerge.lookahead_on)
  105. tbarsHTF60 = security(syminfo.tickerid, "60" , tBars, lookahead = barmerge.lookahead_on)
  106. tbarsHTF30 = security(syminfo.tickerid, "30" , tBars, lookahead = barmerge.lookahead_on)
  107. tbarsHTF15 = security(syminfo.tickerid, "15" , tBars, lookahead = barmerge.lookahead_on)
  108.  
  109. f_draw(i) =>
  110.  
  111. c = 0
  112. when = weekofyear != weekofyear[1]
  113. tdiff = tbarsHTFW/tBars
  114. col = color.blue
  115.  
  116. if i=="M"
  117. c := 12
  118. when := month != month[1]
  119. tdiff := tbarsHTFM/tBars
  120. col := ca
  121. if i=="W"
  122. c := 11
  123. when := weekofyear != weekofyear[1]
  124. tdiff := tbarsHTFW/tBars
  125. col := cb
  126.  
  127. if i=="D"
  128. c := 10
  129. when := dayofmonth != dayofmonth[1]
  130. tdiff := tbarsHTFD/tBars
  131. col := cc
  132.  
  133. if i=="12h"
  134. c := 9
  135. when := hour == 00 or hour == 12
  136. tdiff := tbarsHTF720/tBars
  137. col := cd
  138.  
  139. if i=="8h"
  140. c := 8
  141. when := hour == 00 or hour == 08 or hour == 16
  142. tdiff := tbarsHTF480/tBars
  143. col := ce
  144.  
  145. if i=="6h"
  146. c := 7
  147. when := hour == 00 or hour == 06 or hour == 12 or hour == 18
  148. tdiff := tbarsHTF360/tBars
  149. col := cf
  150.  
  151. if i=="4h"
  152. c := 6
  153. when := hour == 00 or hour == 04 or hour == 08 or hour == 12 or hour == 16 or hour == 22
  154. tdiff := tbarsHTF240/tBars
  155. col := cg
  156.  
  157. if i=="3h"
  158. c := 5
  159. when := hour == 00 or hour == 03 or hour == 06 or hour == 09 or hour == 12 or hour == 15 or hour == 18 or hour == 21
  160. tdiff := tbarsHTF180/tBars
  161. col := ch
  162.  
  163. if i=="2h"
  164. c := 4
  165. when := hour == 00 or hour == 02 or hour == 04 or hour == 06 or hour == 08 or hour == 10 or
  166. hour == 12 or hour == 14 or hour == 16 or hour == 18 or hour == 20 or hour == 22
  167. tdiff := tbarsHTF120/tBars
  168. col := ci
  169.  
  170. if i=="1h"
  171. c := 3
  172. when := hour == 00 or hour == 01 or hour == 02 or hour == 03 or hour == 04 or hour == 05 or
  173. hour == 06 or hour == 07 or hour == 08 or hour == 09 or hour == 10 or hour == 11 or
  174. hour == 12 or hour == 13 or hour == 14 or hour == 15 or hour == 16 or hour == 17 or
  175. hour == 18 or hour == 19 or hour == 20 or hour == 21 or hour == 22 or hour == 23
  176. tdiff := tbarsHTF60/tBars
  177. col := cj
  178.  
  179. if i=="30'"
  180. c := 2
  181. when := minute == 00 or minute == 30
  182. tdiff := tbarsHTF30/tBars
  183. col := ck
  184.  
  185. if i=="15'"
  186. c := 1
  187. when := minute == 00 or minute == 15 or minute == 30 or minute == 45
  188. tdiff := tbarsHTF15/tBars
  189. col := cl
  190.  
  191. dir = 0, hi = 0.0, lo = 0.0, direc = 0
  192. highest = high , lowest = low
  193. highBI = bar_index, lowBI = bar_index
  194. phTF = f_ph(high, left, 1)
  195. plTF = f_pl(low , left, 1)
  196.  
  197. direc := nz(direc[1], direc) == 0 and when ? 1 : nz(direc[1], direc) == 1 and when ? 0 : direc[1]
  198. highest := direc == direc[1] and high > nz(highest[1], high[1]) ? high : direc != direc[1] ? high : highest[1]
  199. lowest := direc == direc[1] and low < nz(lowest[1] , low[1] ) ? low : direc != direc[1] ? low : lowest[1]
  200. highBI := direc == direc[1] and high > nz(highest[1], high[1]) ? bar_index : direc != direc[1] ? bar_index : highBI[1]
  201. lowBI := direc == direc[1] and low < nz(lowest[1] , low[1] ) ? bar_index : direc != direc[1] ? bar_index : lowBI[1]
  202. phTF := f_ph(highest, left, tdiff)
  203. plTF := f_pl(lowest , left, tdiff)
  204. dir := phTF ? 1 : plTF ? -1 : dir[1]
  205. hi := dir == 1 and phTF ? phTF : hi[1]
  206. lo := dir ==-1 and plTF ? plTF : lo[1]
  207.  
  208.  
  209. [p_, b_] = zz(phTF, plTF, highest, lowest, highBI, lowBI, dir, tdiff)
  210. var label lb = na
  211.  
  212. if phTF or plTF
  213. line.new(b_, p_, b_[1], p_[1], color=col)
  214. lb := label.new(b_, phTF ? p_ * (1 - (c*p/100)) : p_ * (1 + (c*p/100)), i, textcolor=col, style=label.style_none)
  215. label.delete(lb[1])
  216.  
  217. f_draw2(i, col) =>
  218. tf = "" + tostring(i)
  219.  
  220. phTF1 = 0., plTF1 = 0.
  221. phTF1 := f_ph(high, left, i)
  222. plTF1 := f_pl(low , left, i)
  223. dir1 = 0, hi1 = high, lo1 = low
  224. dir1 := phTF1 ? 1 : plTF1 ? -1 : dir1[1]
  225. hi1 := dir1 == 1 and phTF1 ? phTF1 : hi1[1]
  226. lo1 := dir1 ==-1 and plTF1 ? plTF1 : lo1[1]
  227.  
  228. [p_, b_] = zz(phTF1, plTF1, high, low, bar_index, bar_index, dir1, i)
  229.  
  230. var label lb = na
  231. if phTF1 or plTF1
  232. line.new(b_, p_, b_[1], p_[1], color=col)
  233. lb := label.new(b_, phTF1 ? p_ - (close *i/50) : p_ + (close *i/50), tf, textcolor=col, style=label.style_none)
  234. label.delete(lb[1])
  235.  
  236. // drawings, labels
  237.  
  238. if index > -1 and tbarsHTFW/tBars > 1 and option == "HTF"
  239. f_draw(array.get(array, index))
  240. f_draw(array.get(array, index + 1))
  241. f_draw(array.get(array, index + 2))
  242. f_draw(array.get(array, index + 3))
  243.  
  244. if (index < 0 or tbarsHTFW/tBars <= 1) and option == "HTF" and barstate.islast
  245. label.new(timenow + (tBars * 5), close, text="Not available \n in this timeframe \n Please consider \n option 'Multiple'",
  246. xloc=xloc.bar_time, textcolor=color.red, style=label.style_none)
  247.  
  248. if option == "Multiple"
  249. f_draw2(m1, c1), f_draw2(m2, c2), f_draw2(m3, c3), f_draw2(m4, c4)
  250. f_draw2(m5, c5), f_draw2(m6, c6), f_draw2(m7, c7), f_draw2(m8, c8), f_draw2(m9, c9)
  251.  
  252.  
Advertisement
Add Comment
Please, Sign In to add comment