/////////////////////////////////////////////////////// // // SaherElm IT Center Impulse MACD Oscillator // ------------------------------------------------- // saherelm implementation of above oscillator ... // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // //@version=5 indicator(title="SaherElm Impulse MACD Oscillator", shorttitle = "XS_IMPMACD_OSC", overlay = false) // // START Inputs .... // // IMPMACDLengthMA = input.int(defval = 34, title = "LenghtMA") IMPMACDLengthSignal = input.int(defval = 9, title = "Length Signal") IMPMACDEbc = input.bool(defval = false, title = "Enable bar colors") // IMPMACDShowSignals = input.bool(defval = false, title = "Show Signals", group = "Signals") IMPMACDShowLongSignals = input.bool(defval = true, title = "Show Long Signals", group = "Signals") IMPMACDShowShortSignals = input.bool(defval = true, title = "Show Show Signals", group = "Signals") // // END Inputs .... // // // START Functions .... // calc_smma(src, len) => float result = na rSma = ta.sma(src, len) result := na(result[1]) ? rSma : (result[1] * (len - 1) + src) / len result calc_zlema(src, length) => ema1 = ta.ema(src, length) ema2 = ta.ema(ema1, length) d = ema1 - ema2 result = ema1+d result // // END Functions .... // // // START Calculations .... // // var bullishColor = color.lime var bearishColor = color.red // IMPMACDSrc = hlc3 IMPMACDHi = calc_smma(high, IMPMACDLengthMA) IMPMACDLo = calc_smma(low, IMPMACDLengthMA) IMPMACDNi = calc_zlema(IMPMACDSrc, IMPMACDLengthMA) // IMPMACDMd = (IMPMACDNi > IMPMACDHi) ? (IMPMACDNi - IMPMACDHi) : (IMPMACDNi < IMPMACDLo) ? (IMPMACDNi - IMPMACDLo) : 0.0 IMPMACDSb = ta.sma(IMPMACDMd, IMPMACDLengthSignal) IMPMACDSh = IMPMACDMd - IMPMACDSb // IMPMACDIsBullish = (ta.crossunder(IMPMACDSb, IMPMACDMd) or ta.crossunder(IMPMACDSb[1], IMPMACDMd) or ta.crossunder(IMPMACDSb[2], IMPMACDMd)) and IMPMACDMd < 0 and IMPMACDSh > 0.1 and IMPMACDSb < IMPMACDMd and IMPMACDMd < -0.6 IMPMACDIsBearish = (ta.crossover(IMPMACDSb, IMPMACDMd) or ta.crossover(IMPMACDSb[1], IMPMACDMd) or ta.crossover(IMPMACDSb[2], IMPMACDMd)) and IMPMACDMd > 0 and IMPMACDSh < -0.1 and IMPMACDSb > IMPMACDMd and IMPMACDMd > 0.6 // IMPMACDMdc = IMPMACDSrc > IMPMACDNi ? IMPMACDSrc > IMPMACDHi ? color.lime : color.green : IMPMACDSrc < IMPMACDLo ? color.red : color.red // // END Calculations .... // // // START Plots .... // // plot(series = 0, color = color.gray, linewidth = 1, title = "MidLine") plot(series = IMPMACDMd, color = IMPMACDMdc, linewidth = 2, title = "ImpulseMACD", style = plot.style_columns) plot(series = IMPMACDSh, color = color.yellow, linewidth = 2, title = "ImpulseHisto", style = plot.style_histogram) plot(IMPMACDSb, color = color.maroon, linewidth = 2, title = "ImpulseMACDCDSignal") // barcolor(IMPMACDEbc ? IMPMACDMdc : na) // plotshape(series = IMPMACDShowSignals and IMPMACDShowLongSignals and IMPMACDIsBullish ? IMPMACDMd : na, title = "Bullish Signals", color = color.rgb(36, 206, 206), style = shape.arrowup, location = location.absolute, size = size.normal) plotshape(series = IMPMACDShowSignals and IMPMACDShowShortSignals and IMPMACDIsBearish ? IMPMACDMd : na, title = "Bearish Signals", color = color.rgb(49, 39, 134), style = shape.arrowdown, location = location.absolute, size = size.normal) // // END Plots .... // // // START Alerts ... // // // END Alerts ... // ////////////////////////////////////////////////////// // TODOS: // ------- // - [] //////////////////////////////////////////////////////