xmd79

Fib Signals [MAT.SO]

Jan 11th, 2022
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.51 KB | None | 0 0
  1. // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
  2. // © JoshuaDanford
  3.  
  4. //@version=5
  5.  
  6. indicator("Fib Signals [MAT.SO]", overlay = true)
  7.  
  8. startTime = input.time(timestamp("01 Jan 2021 00:00 +0000"), "Bar", confirm = true, group = "Range")
  9. stopTime = input.time(timestamp("01 Jan 2021 00:00 +0000"), "Bar", confirm = true, group = "Range")
  10.  
  11. mode = input.string("WMA", "Signal Mode", options = ["OHLC", "SMA", "EMA", "WMA"])
  12. modePeriod = input.int(10, "Signal Period (No effect on OHLC mode.")
  13. plotModeValue = input.bool(true, "Plot Mode Value")
  14.  
  15. show1 = input(title='Show', defval=true, group = "FibLevel1")
  16. fibLevel1 = input.float(title='Fib %', defval=0.000, minval=0, group = "FibLevel1")
  17. show2 = input(title='Show', defval=true, group = "FibLevel2")
  18. fibLevel2 = input.float(title='Fib %', defval=0.236, minval=0, group = "FibLevel2")
  19. show3 = input(title='Show', defval=true, group = "FibLevel3")
  20. fibLevel3 = input.float(title='Fib %', defval=0.382, minval=0, group = "FibLevel3")
  21. show4 = input(title='Show', defval=false, group = "FibLevel4")
  22. fibLevel4 = input.float(title='Fib %', defval=0.500, minval=0, group = "FibLevel4")
  23. show5 = input(title='Show', defval=true, group = "FibLevel5")
  24. fibLevel5 = input.float(title='Fib %', defval=0.618, minval=0, group = "FibLevel5")
  25. show6 = input(title='Show', defval=true, group = "FibLevel6")
  26. fibLevel6 = input.float(title='Fib %', defval=0.786, minval=0, group = "FibLevel6")
  27. show7 = input(title='Show', defval=true, group = "FibLevel7")
  28. fibLevel7 = input.float(title='Fib %', defval=1.000, minval=0, group = "FibLevel7")
  29. show8 = input(title='Show', defval=true, group = "FibLevel8")
  30. fibLevel8 = input.float(title='Fib %', defval=1.272, minval=0, group = "FibLevel8")
  31. show9 = input(title='Show', defval=true, group = "FibLevel9")
  32. fibLevel9 = input.float(title='Fib %', defval=1.414, minval=0, group = "FibLevel9")
  33. show10 = input(title='Show', defval=true, group = "FibLevel10")
  34. fibLevel10 = input.float(title='Fib %', defval=-0.272, minval=0, group = "FibLevel10")
  35. show11 = input(title='Show', defval=true, group = "FibLevel11")
  36. fibLevel11 = input.float(title='Fib %', defval=-0.414, minval=0, group = "FibLevel11")
  37. show12 = input(title='Show', defval=true, group = "FibLevel12")
  38. fibLevel12 = input.float(title='Fib %', defval=-0.618, minval=0, group = "FibLevel12")
  39. show13 = input(title='Show', defval=true, group = "FibLevel13")
  40. fibLevel13 = input.float(title='Fib %', defval=-1.000, minval=0, group = "FibLevel13")
  41.  
  42. bool withinRange = 0
  43. withinRange := time >= startTime and time <= stopTime ? 1 : 0
  44.  
  45. bool pastRange = 0
  46. pastRange := time >= stopTime ? 1 : 0
  47.  
  48. float highest = na
  49. float lowest = na
  50.  
  51. highest := withinRange ? high > highest[1] ? high : nz(highest[1]) : pastRange ? highest[1] : na
  52. lowest := withinRange ? low < lowest[1] ? low : nz(lowest[1], 999999) : pastRange ? lowest[1] : na
  53.  
  54. getFib(ratio) =>
  55. highest - (highest - lowest) * ratio
  56.  
  57. fibInputs = 13
  58. fibs = array.from(fibLevel1, fibLevel2, fibLevel3, fibLevel4, fibLevel5, fibLevel6, fibLevel7, fibLevel8, fibLevel9, fibLevel10, fibLevel11, fibLevel12, fibLevel13)
  59. showFibs = array.from(show1, show2, show3, show4, show5, show6, show7, show8, show9, show10, show11, show12, show13)
  60. fibValues = array.new_float(13, na)
  61.  
  62. buySignal = 0
  63. sellSignal = 0
  64.  
  65. modeValue = close
  66. if (mode == "SMA")
  67. modeValue := ta.sma(modeValue, modePeriod)
  68. else if (mode == "EMA")
  69. modeValue := ta.ema(modeValue, modePeriod)
  70. else if (mode == "WMA")
  71. modeValue := ta.wma(modeValue, modePeriod)
  72.  
  73. plot(plotModeValue ? modeValue : na)
  74.  
  75. for int i = 0 to 12
  76. showFib = array.get(showFibs, i)
  77. fibLevel = array.get(fibs, i)
  78. fibValue = (pastRange and showFib) ? getFib(fibLevel) : na
  79. array.set(fibValues, i, fibValue)
  80.  
  81. if (mode == "OHLC")
  82. if (low < fibValue and open > fibValue and close > fibValue)
  83. buySignal := 1
  84. if (high > fibValue and open < fibValue and close < fibValue)
  85. sellSignal := 1
  86. if (open > fibValue and close < fibValue)
  87. sellSignal := 1
  88. if (open < fibValue and close > fibValue)
  89. buySignal := 1
  90. else
  91. if (modeValue > fibValue and modeValue[1] < fibValue)
  92. buySignal := 1
  93. if (modeValue < fibValue and modeValue[1] > fibValue)
  94. sellSignal := 1
  95. if (low < fibValue and modeValue > fibValue and close > fibValue and modeValue > modeValue[1])
  96. buySignal := 1
  97. if (high > fibValue and modeValue < fibValue and close < fibValue and modeValue < modeValue[1])
  98. sellSignal := 1
  99.  
  100. plotshape(buySignal, title="Long", text="Long", textcolor=color.new(color.white, 0), style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), size=size.tiny)
  101. plotshape(sellSignal, title="Short", text="Short", textcolor=color.new(color.white, 0), style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), size=size.tiny)
  102.  
  103. index = 0
  104. plot(array.get(fibValues, index))
  105. index += 1
  106. plot(array.get(fibValues, index))
  107. index += 1
  108. plot(array.get(fibValues, index))
  109. index += 1
  110. plot(array.get(fibValues, index))
  111. index += 1
  112. plot(array.get(fibValues, index))
  113. index += 1
  114. plot(array.get(fibValues, index))
  115. index += 1
  116. plot(array.get(fibValues, index))
  117. index += 1
  118. plot(array.get(fibValues, index))
  119. index += 1
  120. plot(array.get(fibValues, index))
  121. index += 1
  122. plot(array.get(fibValues, index))
  123. index += 1
  124. plot(array.get(fibValues, index))
  125. index += 1
  126. plot(array.get(fibValues, index))
Advertisement
Add Comment
Please, Sign In to add comment