# MACD colored and MACD Average and Bollinger Bands Midline
# MACD average used as cross of MACD
# Bollinger Bands Midline acting as a MovingAverage average of price cross signal for MACD
# Use both of choose one by unchecking a plot in study settings.
# Horserider by request from Rojo Grande 1/5/2020
declare lower;
input fastLength = 12;
input slowLength = 26;
input MACDLength = 9;
input AverageTypeMACD = {SMA, default EMA, HMA, Wilders};
input price = close;
input displace = 0;
def MACD_Data = MACD(fastLength = fastLength, slowLength = slowLength, MACDLength = MACDLength);
plot MACD_Line = MACD_Data;
MACD_Line.DefineColor("Up", Color.GREEN);
MACD_Line.DefineColor("Down", Color.RED);
MACD_Line.DefineColor("Even", Color.WHITE);
MACD_Line.AssignValueColor(if MACD_Line > MACD_Line[1] then MACD_Line.Color("Up") else (if MACD_Line == MACD_Line[1] then MACD_Line.Color("Even") else MACD_Line.Color("Down")));
MACD_Line.SetLineWeight(3);
def Value;
plot Avg;
switch (AverageTypeMACD) {
case SMA:
Value = Average(price, fastLength) - Average(price, slowLength);
Avg = Average(Value, MACDLength);
case EMA:
Value = ExpAverage(price, fastLength) - ExpAverage(price, slowLength);
Avg = ExpAverage(Value, MACDLength);
case HMA:
Value = WMA(2 * WMA(price, fastlength / 2) - WMA( price, slowlength), sqrt(slowlength));
Avg = ExpAverage(Value, MACDLength);
case Wilders:
Value = WildersAverage(price, fastLength) - WildersAverage(price, slowLength);
Avg = ExpAverage(Value, MACDLength);
}
Avg.SetDefaultColor(Color.CYAN);
#plot BB;
input AverageTypeBB = {default SMA, EMA, HMA};
input displaceBB = 0;
input lengthBB = 5;
def midline;
switch (AverageTypeBB) {
case SMA:
midline = reference BollingerBands(MACD_Line, displaceBB, lengthBB ).Midline;
case EMA:
midline = reference BollingerBands(MACD_Line, displaceBB, lengthBB, averageType = AverageType.EXPONENTIAL).Midline;
case HMA:
midline = reference BollingerBands(MACD_Line, displaceBB, lengthBB, averageType = AverageType.HULL).Midline;
}
plot midline1 = midline;
midline1.SetDefaultColor(Color.WHITE);
midline1.SetLineWeight(1);