TeamTaurus

ZigZag Library

Jan 8th, 2022
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. //@version=5
  2.  
  3. // @description Functions in this library creates/updates zigzag array and shows the zigzag
  4. library("ShowZigzag",overlay=true)
  5.  
  6. Trz(float [] zigzag, int mLoc)=>
  7. for x = array.size(zigzag) - 1 to array.size(zigzag) > 1 ? 0 : na by 2
  8. if bar_index - array.get(zigzag, x) <= mLoc
  9. break
  10. array.pop(zigzag)
  11. array.pop(zigzag)
  12.  
  13. addtozigzag(float [] zigzag, float value) =>
  14. array.unshift(zigzag, bar_index)
  15. array.unshift(zigzag, value)
  16.  
  17. updatezigzag(float [] zigzag, float value, int dir) =>
  18. if array.size(zigzag) == 0
  19. addtozigzag(zigzag, value)
  20. else
  21. if dir == 1 and value > array.get(zigzag, 0) or dir == -1 and value < array.get(zigzag, 0)
  22. array.set(zigzag, 0, value)
  23. array.set(zigzag, 1, bar_index)
  24.  
  25. export getZigzag(float [] zigzag, int prd, int mLoc)=>
  26. Trz(zigzag, mLoc)
  27. float ph = ta.highestbars(high, prd) == 0 ? high : na
  28. float pl = ta.lowestbars(low, prd) == 0 ? low : na
  29. var int dir = 0
  30. dir := ph and na(pl) ? 1 :
  31. pl and na(ph) ? -1 :
  32. dir
  33. bool bothexist = ph and pl
  34. bool dirchanged = dir != dir[1]
  35. if ph or pl
  36. if bothexist
  37. updatezigzag(zigzag, dir == 1 ? ph : pl, dir)
  38. dir := -dir
  39. addtozigzag(zigzag, dir == 1 ? ph : pl)
  40. else
  41. if dirchanged //and not nz(bothexist[1], false)
  42. addtozigzag(zigzag, dir == 1 ? ph : pl)
  43. else
  44. updatezigzag(zigzag, dir == 1 ? ph : pl, dir)
  45. [dir, bothexist]
  46.  
  47. export showZigzag(float [] zigzag, float [] zigzagold, int dir, bool specialcase, color upcol, color dncol)=>
  48. var line zzline = na
  49. if specialcase
  50. line.set_xy1(zzline, math.round(array.get(zigzag, 3)), array.get(zigzag, 2))
  51. if array.get(zigzag, 0) != array.get(zigzagold, 0) or array.get(zigzag, 1) != array.get(zigzagold, 1)
  52. if array.get(zigzag, 2) == array.get(zigzagold, 2) and array.get(zigzag, 3) == array.get(zigzagold, 3)
  53. line.delete(zzline)
  54. zzline := line.new(x1=math.round(array.get(zigzag, 1)), y1=array.get(zigzag, 0), x2=math.round(array.get(zigzag, 3)), y2=array.get(zigzag, 2), color=dir == 1 ? upcol : dncol)
  55.  
  56. export getTN()=>
  57. int TN = 8
  58. tick__ = syminfo.mintick
  59. while tick__ < 1
  60. TN += 1
  61. tick__ *= 10
  62. tick__ := high
  63. while tick__ > 1
  64. TN += 1
  65. tick__ /= 10
  66. TN
  67.  
Advertisement
Add Comment
Please, Sign In to add comment