declare lower;
input price = hl2;
input HistoType = {default STD, ROC};
input SmoothLength = 5;
def valueDiff;
def value;
def showBands;
switch (HistoType) {
case STD:
value = double.nan;
valueDiff = (Average(price, 5) - Average(price, 35));
showBands = 1;
case ROC:
value = (Average(price, 10) - Average(price, 70));
valueDiff = Average(value - value[1], SmoothLength);
showBands = 0;
}
def coeff_num = 2;
def coeff_denom = 39;
def barNum = if IsNaN( close ) then Double.NaN else barNumber();
def coeff = coeff_num / ( coeff_denom + 1 );
def diff = ValueDiff;
rec _upLine = if barNum == 1 then
if diff >= 0 then
diff * coeff + diff * ( 1 - Coeff )
else
0
else
if diff >= 0 then
diff * coeff + _upLine[1] * ( 1 - Coeff )
else
_upLine[1];
rec _dnLine = if barNum == 1 then
if diff < 0 then
diff * coeff + diff * ( 1 - Coeff )
else
0
else
if diff < 0 then
diff * coeff + _dnLine[1] * ( 1 - Coeff )
else
_dnLine[1];
plot ZeroLine = 0;
ZeroLine.SetDefaultColor(GetColor(7));
plot Osc = valueDiff;
plot UpSignal = if Diff crosses above ZeroLine then ZeroLine else Double.NaN;
plot DownSignal = if Diff crosses below ZeroLine then ZeroLine else Double.NaN;
Osc.SetDefaultColor(GetColor(5));
Osc.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
Osc.SetLineWeight(3);
Osc.DefineColor("Positive and Up", Color.GREEN);
Osc.DefineColor("Positive and Down", Color.dark_green);
Osc.DefineColor("Negative and Down", Color.RED);
Osc.DefineColor("Negative and Up", Color.dark_red);
Osc.AssignValueColor(if Osc >= 0 then if Osc > Osc[1] then Osc.color("Positive and Up") else Osc.color("Positive and Down") else if Osc < Osc[1] then Osc.color("Negative and Down") else Osc.color("Negative and Up"));
# -----------------------------------------------
input length = 14;
input calcLength = 5;
input smoothlength2 = 3;
def o = open;
def c = close;
def data = fold i = 0 to length
with s
do s + (if c > getValue(o, i)
then 1
else if c < getValue(o, i)
then - 1
else 0);
def EMA5 = ExpAverage(data, calcLength);
def Main = ExpAverage(EMA5, smoothlength2);
def Signal = ExpAverage(Main, smoothlength2);
plot z = 0;
z.SetDefaultColor(GetColor(7));
plot difference = 0 + Main;
difference.setpaintingstrategy(paintingstrategy.histogram);
difference.AssignValueColor(if difference > 0 and difference [0] < difference[1] then color.dark_green else if Difference > 0 then color.green else if difference[0] > difference[1] and difference < 0 then color.dark_red else color.red);
difference.setlineweight(3);
#-----------------------------------
input c2 = close;
input AvgType = AverageType.Simple;
input nFast = 8;
input nSlow = 13;
input nSmooth = 5;
plot PPO = ((MovingAverage(AverageType = AvgType, c2, nFast) -
MovingAverage(AverageType = AvgType, c2, nSlow)) /
MovingAverage(AverageType = AvgType, c2, nSlow));
PPO.AssignValueColor(if PPO > 0
then color.green
else color.red);
plot smooth = MovingAverage(AverageType = AvgType, PPO, nSmooth);
smooth.SetPaintingStrategy(PaintingStrategy.Line);
smooth.SetDefaultColor(Color.Cyan);
smooth.hide();
ppo.hide();
plot z2 = 0;
z2.SetDefaultColor(GetColor(7));
def diff2 = ppo-smooth;
plot difference2 = diff2 * 100;
difference2.setpaintingstrategy(paintingstrategy.histogram);
difference2.AssignValueColor(if difference2 > 0 and difference2 [0] < difference2[1] then color.dark_green else if difference2 > 0 then color.green else if difference2[0] > difference2[1] and difference2 < 0 then color.dark_red else color.red);
difference2.setlineweight(3);
osc.hide();
difference.hide();
difference2.hide();
def lavg = (osc+difference+difference2)/3;
input averagetype = averagetype.hull;
plot avengers = movingaverage(averagetype, lavg);
avengers.setpaintingstrategy(paintingstrategy.histogram);
avengers.AssignValueColor(if avengers > 0 and avengers[0] < avengers[1] then color.dark_green else if avengers > 0 then color.green else if avengers[0] > avengers[1] and avengers< 0 then color.dark_red else color.red);
plot deriv = 10*((avengers[0]-avengers[1])/2);
deriv.AssignValueColor(if deriv > 0 and deriv[0] < deriv[1] then color.dark_green else if deriv > 0 then color.cyan else if deriv[0] > deriv[1] and deriv< 0 then color.cyan else color.red);