xmd79

MTF RSI Screener & indicator by noop42

Oct 1st, 2021
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.49 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. // © noop42
  3.  
  4. //@version=4
  5. study("MTF RSI Screener & indicator by noop42", overlay=false)
  6.  
  7. // Input parameters
  8. src = input(close, title="Source")
  9. repainting = input(title="Allow repaint ? (enabled = live values)", type=input.bool, defval=true, group="Options")
  10. show_screener = input(title="Show Screener", type=input.bool, defval=true, group="Options")
  11. show_lines = input(title="Show RSI lines ?", type=input.bool, defval=true, group="Options")
  12.  
  13. tf1 = input(title="Timeframe 1", type=input.resolution, defval="5", group="Options")
  14. tf2 = input(title="Timeframe 2", type=input.resolution, defval="15", group="Options")
  15. tf3 = input(title="Timeframe 3", type=input.resolution, defval="60", group="Options")
  16. tf4 = input(title="Timeframe 4", type=input.resolution, defval="240", group="Options")
  17.  
  18. tf1_cvg_opt = input(true, "Include Timeframe #1 in convergence signals", group="Options")
  19. tf2_cvg_opt = input(true, "Include Timeframe #2 in convergence signals", group="Options")
  20. tf3_cvg_opt = input(true, "Include Timeframe #3 in convergence signals", group="Options")
  21. tf4_cvg_opt = input(false, "Include Timeframe #4 in convergence signals", group="Options")
  22.  
  23. lengthRSI = input(14, "RSI Length", minval=1, group="RSI")
  24. rsi_low = input(30, title="RSI Oversold Level", group="RSI")
  25. rsi_high = input(70, title="RSI Overbought Level", group="RSI")
  26.  
  27. // Custom functions
  28. rp_security(_symbol, _res, _src) => security(_symbol, _res, _src[barstate.isrealtime ? (repainting ? 0 : 1) : 0], gaps=false)
  29. get_movement(rsi) => rsi > rsi[1] ? "Bull" : "Bear"
  30. show_drawings(data) => show_lines ? data : na
  31.  
  32. // MTF RSI
  33. rsi_tf1 = rp_security(syminfo.tickerid, tf1, rsi(src,lengthRSI))
  34. rsi_tf2 = rp_security(syminfo.tickerid, tf2, rsi(src,lengthRSI))
  35. rsi_tf3 = rp_security(syminfo.tickerid, tf3, rsi(src,lengthRSI))
  36. rsi_tf4 = rp_security(syminfo.tickerid, tf4, rsi(src,lengthRSI))
  37.  
  38. rsi1ob = rsi_tf1 > rsi_high
  39. rsi1os = rsi_tf1 < rsi_low
  40. rsi2ob = rsi_tf2 > rsi_high
  41. rsi2os = rsi_tf2 < rsi_low
  42. rsi3ob = rsi_tf3 > rsi_high
  43. rsi3os = rsi_tf3 < rsi_low
  44. rsi4ob = rsi_tf4 > rsi_high
  45. rsi4os = rsi_tf4 < rsi_low
  46.  
  47. tf1mov = get_movement(rsi_tf1)
  48. tf2mov = get_movement(rsi_tf2)
  49. tf3mov = get_movement(rsi_tf3)
  50. tf4mov = get_movement(rsi_tf4)
  51.  
  52. // Colors
  53. obColor = color.blue
  54. osColor = #d43128
  55. bullColor = #20b8e6
  56. bearColor = color.red
  57.  
  58. tf1movColor = tf1mov == "Bull" ? bullColor : bearColor
  59. tf2movColor = tf2mov == "Bull" ? bullColor : bearColor
  60. tf3movColor = tf3mov == "Bull" ? bullColor : bearColor
  61. tf4movColor = tf4mov == "Bull" ? bullColor : bearColor
  62.  
  63. tf1RSIColor = rsi1ob ? obColor : rsi1os ? osColor : tf1movColor
  64. tf2RSIColor = rsi2ob ? obColor : rsi2os ? osColor : tf2movColor
  65. tf3RSIColor = rsi3ob ? obColor : rsi3os ? osColor : tf3movColor
  66. tf4RSIColor = rsi4ob ? obColor : rsi4os ? osColor : tf4movColor
  67.  
  68. tf1status = rsi1ob ? "Overbought" : rsi1os ? "Oversold" : "OK"
  69. tf2status = rsi2ob ? "Overbought" : rsi2os ? "Oversold" : "OK"
  70. tf3status = rsi3ob ? "Overbought" : rsi3os ? "Oversold" : "OK"
  71. tf4status = rsi4ob ? "Overbought" : rsi4os ? "Oversold" : "OK"
  72.  
  73. // Convergences
  74. rsi_ob_convergence = (tf1_cvg_opt ? rsi1ob : true) and (tf2_cvg_opt ? rsi2ob : true) and (tf3_cvg_opt ? rsi3ob : true) and (tf4_cvg_opt ? rsi4ob : true)
  75. rsi_os_convergence = (tf1_cvg_opt ? rsi1os : true) and (tf2_cvg_opt ? rsi2os : true) and (tf3_cvg_opt ? rsi3os : true) and (tf4_cvg_opt ? rsi4os : true)
  76.  
  77. // Screener
  78. default_bg = #cccccc
  79. var tbl = table.new(position.top_right, 4, 6)
  80. if (show_screener)
  81. if (barstate.islast)
  82. table.cell(tbl, 0, 0, "TimeFrame", bgcolor = default_bg)
  83. table.cell(tbl, 1, 0, "RSI", bgcolor = default_bg)
  84. table.cell(tbl, 2, 0, "Movement", bgcolor = default_bg)
  85. table.cell(tbl, 3, 0, "RSI Status", bgcolor = default_bg)
  86.  
  87. table.cell(tbl, 0, 1, tf1+(tf1_cvg_opt ? "*" : ""), bgcolor = default_bg)
  88. table.cell(tbl, 1, 1, tostring(rsi_tf1, '#.##'), bgcolor = tf1RSIColor)
  89. table.cell(tbl, 2, 1, tf1mov, bgcolor = tf1RSIColor)
  90. table.cell(tbl, 3, 1, tf1status, bgcolor = tf1RSIColor)
  91.  
  92. table.cell(tbl, 0, 2, tf2+(tf2_cvg_opt ? "*" : ""), bgcolor = default_bg)
  93. table.cell(tbl, 1, 2, tostring(rsi_tf2, '#.##'), bgcolor = tf2RSIColor)
  94. table.cell(tbl, 2, 2, tf2mov, bgcolor = tf2RSIColor)
  95. table.cell(tbl, 3, 2, tf2status, bgcolor = tf2RSIColor)
  96.  
  97. table.cell(tbl, 0, 3, tf3+(tf3_cvg_opt ? "*" : ""), bgcolor = default_bg)
  98. table.cell(tbl, 1, 3, tostring(rsi_tf3, '#.##'), bgcolor = tf3RSIColor)
  99. table.cell(tbl, 2, 3, tf3mov, bgcolor = tf3RSIColor)
  100. table.cell(tbl, 3, 3, tf3status, bgcolor = tf3RSIColor)
  101.  
  102. table.cell(tbl, 0, 4, tf4+(tf4_cvg_opt ? "*" : ""), bgcolor = default_bg)
  103. table.cell(tbl, 1, 4, tostring(rsi_tf4, '#.##'), bgcolor = tf4RSIColor)
  104. table.cell(tbl, 2, 4, tf4mov, bgcolor = tf4RSIColor)
  105. table.cell(tbl, 3, 4, tf4status, bgcolor = tf4RSIColor)
  106.  
  107. // Warning convergence alerts
  108. rsi_warning_message = (rsi_os_convergence ? "RSI OS convergence" : rsi_ob_convergence ? "RSI OB convergence" : "No RSI warning")
  109. rsi_warning_color = rsi_os_convergence ? osColor : rsi_ob_convergence ? obColor : default_bg
  110.  
  111. table.cell(tbl, 0, 5, "Warnings", bgcolor = color.orange)
  112. table.cell(tbl, 1, 5, rsi_warning_message, bgcolor = rsi_warning_color)
  113.  
  114. // Oscillators
  115. // Zones & lines
  116. ob_zone_color = obColor
  117. os_zone_color = osColor
  118. invisible = #00000000
  119.  
  120. h0 = hline(show_drawings(rsi_high), "Upper Band", color=ob_zone_color)
  121. hmid = hline(show_drawings(50), "Middle Band", color=#ffffff45)
  122. h1 = hline(show_drawings(rsi_low), "Lower Band", color=os_zone_color)
  123. obZone = hline(show_drawings(rsi_high), color=invisible)
  124. osZone = hline(show_drawings(rsi_low), color=invisible)
  125.  
  126. plot(show_drawings(rsi_tf1), "RSI #1", color=tf1RSIColor, linewidth=1, transp=20)
  127. plot(show_drawings(rsi_tf2), "RSI #2", color=tf2RSIColor, linewidth=2, transp=40)
  128. plot(show_drawings(rsi_tf3), "RSI #3", color=tf3RSIColor, linewidth=3, transp=60)
  129. plot(show_drawings(rsi_tf4), "RSI #4", color=tf4RSIColor, linewidth=4, transp=80)
  130.  
  131. // Shapes
  132. plotshape(show_drawings(rsi_os_convergence) ? 1 : 0, color=bullColor, location=location.bottom, size=size.tiny, style=shape.triangleup, title="Bullish movement")
  133. plotshape(show_drawings(rsi_ob_convergence) ? 1 : 0, color=bearColor, location=location.top, size=size.tiny, style=shape.triangledown, title="Bearish movement")
  134.  
Advertisement
Add Comment
Please, Sign In to add comment