https://www.tradingview.com/script/VocSxIq4-excellent-adx/
//@author=newmen
//@version=4
//
// This is the classic Average Directional Movement Index (ADX) indicator/oscilator that highlights the trend, pivot points and the close moment
//
study("Excellent ADX", shorttitle="ADX")
fast_adxlen = input(5, title="Fast ADX Smoothing")
slow_adxlen = input(19, title="Slow ADX Smoothing")
fast_dilen = input(13, title="Fast DI Length")
slow_dilen = input(21, title="Slow DI Length")
fast_atrlen = input(14, title="Fast ATR Length")
slow_atrlen = input(21, title="Slow ATR Length")
upper_treshold = input(41, title="Upper Treshold")
lower_treshold = input(19, title="Lower Treshold")
pullback_out_sencivity = input(2.55, title="Pullback Sencivity")
trend_sencivity = input(0.13, title="Trend Sencivity")
dirmov(len, atrlen) =>
up = change(high)
down = -change(low)
plus_dm = na(up) ? na : (up > down and up > 0 ? up : 0)
minus_dm = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, atrlen)
plus = fixnan(100 * rma(plus_dm, len) / truerange)
minus = fixnan(100 * rma(minus_dm, len) / truerange)
[plus, minus]
adx(dilen, adxlen, atrlen) =>
[plus, minus] = dirmov(dilen, atrlen)
sum = plus + minus
rate = abs(plus - minus) / (sum == 0 ? 1 : sum)
adx_v = 100 * rma(rate, adxlen)
[plus, minus, adx_v]
[plus_di, minus_di, adx_s_sig] = adx(slow_dilen, slow_adxlen, slow_atrlen)
[_f_plus_di, _f_minus_di, adx_f_sig] = adx(fast_dilen, fast_adxlen, fast_atrlen)
trend = plus_di < minus_di
? color.new(color.red, 90)
: plus_di > minus_di
? color.new(color.green, 90)
: na
bgcolor(trend)
plot(plus_di, color=color.green, title="+DI", linewidth=1)
plot(minus_di, color=color.red, title="-DI", linewidth=1)
plot(adx_s_sig, color=color.blue, title="Slow ADX", linewidth=2)
plot(adx_f_sig, color=color.new(color.orange, 75), title="Fast ADX", linewidth=2)
plot(upper_treshold, color=color.new(color.gray, 10), title="Upper Treshold", linewidth=1, style=plot.style_circles)
plot(lower_treshold, color=color.new(color.gray, 10), title="Lower Treshold", linewidth=1, style=plot.style_circles)
distance = plus_di - minus_di
sg_distance = sign(distance)
abs_distance = abs(distance)
pullback_rate = (abs_distance + abs_distance[2]) / abs_distance[1]
pullback_out = abs_distance[1] < abs_distance and
((abs_distance[1] < abs_distance[2] and sg_distance[2] == sg_distance[1] and sg_distance[1] == sg_distance) or
(abs_distance[1] > abs_distance[2] and sg_distance[2] == sg_distance[1] and sg_distance[1] != sg_distance)) and
adx_s_sig > (adx_s_sig[1] - trend_sencivity) and
pullback_rate > pullback_out_sencivity and
((plus_di > minus_di and plus_di[1] < plus_di and minus_di[1] > minus_di) or
(plus_di < minus_di and plus_di[1] > plus_di and minus_di[1] < minus_di))
? color.new((plus_di < minus_di ? color.red : color.green), 60)
: na
plot(minus_di, color=pullback_out, title="Pullback Out", linewidth=5, style=plot.style_circles)
pullback_on = abs_distance[1] > abs_distance and abs_distance[1] > abs_distance[2] and
sg_distance[2] == sg_distance[1] and sg_distance[1] == sg_distance and
((adx_s_sig < (adx_s_sig[1] + trend_sencivity) and not (plus_di > adx_s_sig and minus_di > adx_s_sig)) or
(plus_di < adx_s_sig and minus_di < adx_s_sig)) and
((plus_di > minus_di and
plus_di[2] < plus_di[1] and plus_di[1] > plus_di and
minus_di[2] > minus_di[1] and minus_di[1] < minus_di) or
(plus_di < minus_di and
plus_di[2] > plus_di[1] and plus_di[1] < plus_di and
minus_di[2] < minus_di[1] and minus_di[1] > minus_di))
? color.new((plus_di > minus_di ? color.red : color.green), 80)
: na
plot(plus_di, color=pullback_on, title="Pullback On", linewidth=3, style=plot.style_circles)
pivots(adx_sig, transp) =>
adx_sig[2] < adx_sig[1] and adx_sig[1] > adx_sig and
plus_di[1] < adx_sig[1] and minus_di[1] < adx_sig[1]
? color.new((plus_di < minus_di ? color.green : color.red), transp)
: na
piv_dots(adx_sig, transp) =>
pivot = pivots(adx_sig, transp)
sig_over = adx_sig[1] >= upper_treshold ? adx_sig : na
sig_side = adx_sig[1] >= lower_treshold and adx_sig[1] < upper_treshold ? adx_sig : na
[pivot, sig_over, sig_side]
[s_pivot, sig_s_over, sig_s_side] = piv_dots(adx_s_sig, 30)
plot(sig_s_over, color=s_pivot, title="Slow Strong Pivot", linewidth=11, style=plot.style_circles)
plot(sig_s_side, color=s_pivot, title="Slow Weak Pivot", linewidth=7, style=plot.style_circles)
[f_pivot, sig_f_over, sig_f_side] = piv_dots(adx_f_sig, 65)
plot(sig_f_over, color=f_pivot, title="Fast Strong Pivot", linewidth=6, style=plot.style_circles)
plot(sig_f_side, color=f_pivot, title="Fast Weak Pivot", linewidth=4, style=plot.style_circles)