#// @author LazyBear
#// List of my public indicators: http://bit.ly/1LQaPK8
#// List of my app-store indicators: http://blog.tradingview.com/?p=970
#study("Impulse MACD [LazyBear]", shorttitle="IMACD_LB", overlay=false)
# Converted by Sam4Cok@Samer800 - 11/2022
# Added multiple foreign stock symbols by whoDAT - 4/7/2025
declare lower;
input BarColor = no;
input Symbols = "AAPL+MSFT+NVDA+GOOGL+META+AMZN+TSLA";
input lengthMA = 34;
input lengthSignal = 9;
#input src = hlc3;
def na = Double.NaN;
#calc_smma(src, len) =>
script calc_smma {
input src = close;
input len = 34;
def smma = if isNaN(smma[1]) then SimpleMovingAvg(src, len) else (smma[1] * (len - 1) + src) / len;
plot return = smma;
}
#calc_zlema(src, length) =>
script calc_zlema {
input src = close;
input length = 34;
def ema1 = ExpAverage(src, length);
def ema2 = ExpAverage(ema1, length);
def d = ema1-ema2;
def zelma = ema1+d;
plot return = zelma;
}
def sym_high = high(Symbols);
def sym_low = low(Symbols);
def sym_src = hlc3(Symbols);
def hi=calc_smma(sym_high, lengthMA);
def lo=calc_smma(sym_low, lengthMA);
def mi=calc_zlema(sym_src, lengthMA);
def md = if (mi>hi)then (mi-hi) else if (mi<lo) then (mi - lo) else 0;
def sb = SimpleMovingAvg(md, lengthSignal);
def sh=md-sb;
def mdc = if sym_src>mi then if sym_src>hi then 2 else 1 else if sym_src<lo then -2 else -1;
#--- PLots
plot ImpulseSignal = sb;
ImpulseSignal.SetDefaultColor(Color.WHITE);
ImpulseSignal.SetLineWeight(2);
plot ImpulseHisto = sh;
ImpulseHisto.SetPaintingStrategy(PaintingStrategy.SQUARED_HISTOGRAM);
ImpulseHisto.SetDefaultColor(Color.BLUE);
plot ImpulseMACD = md;
ImpulseMACD.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
ImpulseMACD.AssignValueColor(if mdc==2 then Color.GREEN else
if mdc==1 then Color.DARK_GREEN else
if mdc==-2 then Color.RED else Color.DARK_RED);
plot "0" = if isNaN(close) then na else 0;
"0".SetDefaultColor(Color.DARK_GRAY);
#--- Bar Color
AssignPriceColor(if !BarColor then Color.CURRENT else
if mdc==2 then Color.GREEN else
if mdc==1 then Color.DARK_GREEN else
if mdc==-2 then Color.RED else Color.DARK_RED);
#--- END Code