xmd79

Average Daily Range High Low

May 25th, 2023
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.42 KB | None | 0 0
  1. //@version=4
  2. //
  3. // Average Daily Range (ADR) Indicator for TradingView
  4. // This script is based on the "Best ADR Indicator for MT4" described at https://www.fxdayjob.com/best-adr-indicator-mt4.
  5. //
  6. // -----------------------------------------------------------------------------
  7. // Copyright 2017 sherwind
  8. //
  9. // This program is free software: you can redistribute it and/or modify
  10. // it under the terms of the GNU General Public License as published by
  11. // the Free Software Foundation, either version 3 of the License, or
  12. // any later version.
  13. //
  14. // This program is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. // GNU General Public License for more details.
  18. //
  19. // The GNU General Public License can be found here
  20. // <http://www.gnu.org/licenses/>.
  21. //
  22. // -----------------------------------------------------------------------------
  23. //
  24. study(title="Average Daily Range High Low", shorttitle="ADR HiLo", overlay=true)
  25.  
  26. is_forex_pips = input(title="Display average range as forex pips?", type=input.bool, defval=true)
  27. daily_adr = input(title="How many ADR to show", type=input.integer, defval=5, minval=0)
  28. weekly_adr = input(title="How many AWR to show", type=input.integer, defval=0, minval=0)
  29. monthly_adr = input(title="How many AMR to show", type=input.integer, defval=0, minval=0)
  30. yearly_adr = input(title="How many AYR to show", type=input.integer, defval=0, minval=0)
  31. daily_adr_length = input(title="ADR Length parameter", type=input.integer, defval=5, minval=0)
  32. weekly_adr_length = input(title="AWR Length parameter", type=input.integer, defval=5, minval=0)
  33. monthly_adr_length = input(title="AMR Length parameter", type=input.integer, defval=1, minval=0)
  34. yearly_adr_length = input(title="AYR Length parameter", type=input.integer, defval=1, minval=0)
  35. daily_adr_color = input(title="ADR color", type=input.color, defval=color.rgb(0, 128, 0, 40))
  36. weekly_adr_color = input(title="AWR color", type=input.color, defval=color.rgb(255, 165, 0, 50))
  37. monthly_adr_color = input(title="AMR color", type=input.color, defval=color.rgb(255, 0, 255, 70))
  38. yearly_adr_color = input(title="AYR color", type=input.color, defval=color.rgb(255, 0, 0, 70))
  39.  
  40. new_bar(res) =>
  41. change(time(res)) != 0
  42. adr(length) =>
  43. range = high - low
  44. sma(range[1], length)
  45. adr_high(adr) =>
  46. high - low < adr ? low + adr : close >= open ? low + adr : high
  47. adr_low(adr) =>
  48. high - low < adr ? high - adr : close >= open ? low : high - adr
  49. adr_levels(length) =>
  50. _adr = adr(length)
  51. [_adr, adr_high(_adr), adr_low(_adr)]
  52. to_pips(val) =>
  53. is_forex_pips ? val/syminfo.mintick/10 : val/syminfo.mintick
  54. tick_format() =>
  55. _s = tostring(syminfo.mintick)
  56. _s := str.replace_all(_s, "25", "00")
  57. _s := str.replace_all(_s, "5", "0")
  58. _s := str.replace_all(_s, "1", "0")
  59. draw_adr_hilo(hi_level, lo_level, res, adr, level_color, show_count, prefix) =>
  60. var line hi_line = na
  61. var line lo_line = na
  62. var ary_range_label = array.new_label(show_count)
  63. var ary_hi_line = array.new_line(show_count)
  64. var ary_lo_line = array.new_line(show_count)
  65. if new_bar(res)
  66. line.set_x2(hi_line, bar_index)
  67. line.set_x2(lo_line, bar_index)
  68. line.set_extend(hi_line, extend.none)
  69. line.set_extend(lo_line, extend.none)
  70. hi_line := line.new(bar_index, hi_level, bar_index, hi_level, extend=extend.right, color=level_color)
  71. lo_line := line.new(bar_index, lo_level, bar_index, lo_level, extend=extend.right, color=level_color)
  72. range_label = label.new(bar_index, hi_level, prefix + ": " + tostring(to_pips(adr), tick_format()) + "\n\n", color=color(na), style=label.style_label_left, textalign=text.align_left)
  73. array.push(ary_hi_line, hi_line)
  74. array.push(ary_lo_line, lo_line)
  75. array.push(ary_range_label, range_label)
  76. line.delete(array.shift(ary_hi_line))
  77. line.delete(array.shift(ary_lo_line))
  78. label.delete(array.shift(ary_range_label))
  79. if not na(hi_line) and line.get_x2(hi_line) != bar_index
  80. line.set_x2(hi_line, bar_index)
  81. line.set_x2(lo_line, bar_index)
  82.  
  83.  
  84. //
  85. // Daily
  86. //
  87. [day_adr, day_adr_high, day_adr_low] = security(syminfo.tickerid, 'D', adr_levels(daily_adr_length), lookahead=barmerge.lookahead_on)
  88. if timeframe.isintraday and daily_adr > 0
  89. draw_adr_hilo(day_adr_high, day_adr_low, 'D', day_adr, daily_adr_color, daily_adr, "ADR")
  90.  
  91. //
  92. // Weekly
  93. //
  94. [week_adr, week_adr_high, week_adr_low] = security(syminfo.tickerid, 'W', adr_levels(weekly_adr_length), lookahead=barmerge.lookahead_on)
  95. if (timeframe.isintraday or timeframe.isdaily) and weekly_adr > 0
  96. draw_adr_hilo(week_adr_high, week_adr_low, 'W', week_adr, weekly_adr_color, weekly_adr, "AWR")
  97.  
  98. //
  99. // Monthly
  100. //
  101. [month_adr, month_adr_high, month_adr_low] = security(syminfo.tickerid, 'M', adr_levels(monthly_adr_length), lookahead=barmerge.lookahead_on)
  102. if (timeframe.isintraday or timeframe.isdaily or timeframe.isweekly) and monthly_adr > 0
  103. draw_adr_hilo(month_adr_high, month_adr_low, 'M', month_adr, monthly_adr_color, monthly_adr, "AMR")
  104.  
  105. //
  106. // Yearly
  107. //
  108. [year_adr, year_adr_high, year_adr_low] = security(syminfo.tickerid, '12M', adr_levels(yearly_adr_length), lookahead=barmerge.lookahead_on)
  109. if yearly_adr > 0
  110. draw_adr_hilo(month_adr_high, month_adr_low, '12M', year_adr, yearly_adr_color, yearly_adr, "AYR")
  111.  
Advertisement
Add Comment
Please, Sign In to add comment