# WaveTrend Oscillator - ThinkScript version
# Inspired by LazyBear's TradingView script
declare lower;
input n1 = 10; # Channel Length
input n2 = 21; # Average Length
input obLevel1 = 60;
input obLevel2 = 53;
input osLevel1 = -60;
input osLevel2 = -53;
def ap = (high + low + close) / 3;
def esa = ExpAverage(ap, n1);
def d = ExpAverage(AbsValue(ap - esa), n1);
def ci = if d != 0 then (ap - esa) / (0.015 * d) else 0;
def tci = ExpAverage(ci, n2);
def wt1 = tci;
def wt2 = Average(wt1, 4);
def diff = wt1 - wt2;
# Plotting the 0 line
plot ZeroLine = 0;
ZeroLine.SetDefaultColor(Color.GRAY);
# Plotting Overbought and Oversold Levels
plot Overbought1 = obLevel1;
Overbought1.SetDefaultColor(Color.RED);
plot Overbought2 = obLevel2;
Overbought2.SetDefaultColor(Color.RED);
Overbought2.SetStyle(Curve.SHORT_DASH);
plot Oversold1 = osLevel1;
Oversold1.SetDefaultColor(Color.GREEN);
plot Oversold2 = osLevel2;
Oversold2.SetDefaultColor(Color.GREEN);
Oversold2.SetStyle(Curve.SHORT_DASH);
# Plotting WaveTrend Lines
plot WaveTrend1 = wt1;
WaveTrend1.SetDefaultColor(Color.GREEN);
plot WaveTrend2 = wt2;
WaveTrend2.SetDefaultColor(Color.RED);
WaveTrend2.SetStyle(Curve.SHORT_DASH);
# Plotting the difference area
plot DiffArea = diff;
DiffArea.SetDefaultColor(Color.BLUE);
DiffArea.SetStyle(Curve.FIRM);
DiffArea.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
DiffArea.SetLineWeight(1);