input ColorBars = no;
input ColorSignalBar = no;
input alerts = no;
input sound = {default "NoSound", "Ding", "Bell", "Chimes", "Ring"};
input adxLength = 8;#, title="ADX period")
input dmiLength = 9;#(9, title="DMI Length")
input MendozaLimit = 20;
def na = Double.NaN;
#fixnan(data)
script fixnan {
input data1 = 0;
def data2;
if BarNumber() == 1
then {
data2 = 0;
} else if IsNaN(data1)
then {
data2 = data2[1];
} else {
data2 = data1;
}
plot valid = data2;
}
#dirmov(len) =>
script dirmov {
input len = 8;
def up = high - high[1];
def down = -(low - low[1]);
def tr = TrueRange(high, close, low);
def truerange = WildersAverage(tr, len);
def plus1 = fixnan(100 * WildersAverage(If(up > down and up > 0, up, 0), len) / truerange);
def minus = fixnan(100 * WildersAverage(If(down > up and down > 0, down, 0), len) / truerange);
plot plus = plus1;
plot min = minus;
}
#adx(LWdilength, LWadxlength) =>
script adx {
input LWdilength = 8;
input LWadxlength = 9;
def plus = dirmov(LWdilength).plus;
def minus = dirmov(LWdilength).min;
def sum = plus + minus;
def adx = 100 * WildersAverage(AbsValue(plus - minus) / (If(sum == 0, 1, sum)), LWadxlength);
plot ad = adx;
plot pls = plus;
plot mins = minus;
}
def ADX = ADX(dmiLength, adxLength).ad;
def up = ADX(dmiLength, adxLength).pls;
def down = ADX(dmiLength, adxLength).mins;
def LWADX = (ADX - 15) * 2.5;
def adxcolor = if up > down and LWADX >= 100 then 2 else
if up > down and LWADX < 100 then 1 else
if up <= down and LWADX >= 100 then -2 else
if up <= down and LWADX < 100 then -1 else 0;
plot ZeroLine = if IsNaN(close) then na else 0; # "Chop Zone"
ZeroLine.SetDefaultColor(Color.DARK_GRAY);
plot MendozaLine = if IsNaN(close) then na else MendozaLimit; # "Mendoza Line"
MendozaLine.SetDefaultColor(Color.GREEN);
plot Threshold = if IsNaN(close) then na else 100; # "Extreme Zone"
Threshold.SetDefaultColor(Color.RED);
plot TrendStrength = if IsNaN(close) then na else LWADX; # "Trend Strength"
TrendStrength.AssignValueColor(if adxcolor == 2 then Color.GREEN else
if adxcolor == 1 then Color.DARK_GREEN else
if adxcolor == -2 then Color.RED else Color.DARK_RED);
TrendStrength.SetLineWeight(2);
plot histogram = if IsNaN(close) then na else LWADX;
histogram.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
histogram.AssignValueColor(if LWADX < MendozaLimit then Color.GRAY else
if adxcolor == 2 then Color.GREEN else
if adxcolor == 1 then Color.DARK_GREEN else
if adxcolor == -2 then Color.RED else Color.ORANGE);
histogram.SetLineWeight(3);
#--- Bar Color
AssignPriceColor(if !ColorBars then Color.CURRENT else
if LWADX < MendozaLimit then Color.Light_GRAY else
if adxcolor == 2 then Color.DARK_GREEN else
if adxcolor == 1 then Color.GREEN else
if adxcolor == -2 then Color.RED else Color.MAGENTA);
AssignPriceColor(if !ColorSignalBar then Color.CURRENT else
if LWADX crosses above MendozaLimit and LWADX[1] > LWADX[2] then Color.CYAN else
if LWADX crosses below MendozaLimit and LWADX[1] < LWADX[2] then Color.MAGENTA else
Color.CURRENT);
#ALV ADDED CLOUD
AddCloud(
if LWADX >= MendozaLimit and adxcolor > 0 then Double.POSITIVE_INFINITY else Double.NaN,
if LWADX >= MendozaLimit and adxcolor > 0 then Double.NEGATIVE_INFINITY else Double.NaN, Color.CYAN
);
AddCloud(
if LWADX >= MendozaLimit and adxcolor < 0 then Double.POSITIVE_INFINITY else Double.NaN,
if LWADX >= MendozaLimit and adxcolor < 0 then Double.NEGATIVE_INFINITY else Double.NaN, Color.PINK
);
#---- Alerts
def green = adxcolor > 0;
def red = adxcolor < 0;
Alert(alerts and green and !green[1], "Trending Up!", Alert.BAR, sound);
Alert(alerts and red and !red[1], "Trending Down!", Alert.BAR, sound);
#---END Code