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