/////////////////////////////////////////////////////// // // SaherElm IT Center Chandelier Exit // --------------------------------------------- // saherelm implementation of above indicator ... // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // //@version=5 indicator(title="SaherElm Chandelier Exit Indicator", shorttitle = "XS_CE_IND", overlay = true) // // START Inputs .... // // var string XCECalcGroup = 'Calculation' XCELength = input.int(title='ATR Period', defval=22, group=XCECalcGroup) XCEMult = input.float(title='ATR Multiplier', step=0.1, defval=3.0, group=XCECalcGroup) XCEUseClose = input.bool(title='Use Close Price for Extremums', defval=true, group=XCECalcGroup) // var string XCEVisualGroup = 'Visuals' XCEShowLabels = input.bool(title='Show Buy/Sell Labels', defval=true, group=XCEVisualGroup) XCEHighlightState = input.bool(title='Highlight State', defval=true, group=XCEVisualGroup) // // END Inputs .... // // // START Functions .... // // // // END Functions .... // // // START Calculations .... // // // Calculate ATR Value ... XCEAtr = XCEMult * ta.atr(XCELength) // // Long Calculations ... XCELongStop = (XCEUseClose ? ta.highest(close, XCELength) : ta.highest(XCELength)) - XCEAtr XCELongStopPrev = nz(XCELongStop[1], XCELongStop) XCELongStop := close[1] > XCELongStopPrev ? math.max(XCELongStop, XCELongStopPrev) : XCELongStop // // Short Calculations ... XCEShortStop = (XCEUseClose ? ta.lowest(close, XCELength) : ta.lowest(XCELength)) + XCEAtr XCEShortStopPrev = nz(XCEShortStop[1], XCEShortStop) XCEShortStop := close[1] < XCEShortStopPrev ? math.min(XCEShortStop, XCEShortStopPrev) : XCEShortStop // // Calculate Current Direction ... var int XCEDir = 1 XCEDir := close > XCEShortStopPrev ? 1 : close < XCELongStopPrev ? -1 : XCEDir // // Calculate Signals ... XCEBuySignal = XCEDir == 1 and XCEDir[1] == -1 XCESellSignal = XCEDir == -1 and XCEDir[1] == 1 // // Calculate Colors ... var color XCELongColor = color.green var color XCEShortColor = color.red var color XCELongFillColor = color.new(color.green, 90) var color XCEShortFillColor = color.new(color.red, 90) var color XCETextColor = color.new(color.white, 0) XCELongStateFillColor = XCEHighlightState ? XCEDir == 1 ? XCELongFillColor : na : na XCEShortStateFillColor = XCEHighlightState ? XCEDir == -1 ? XCEShortFillColor : na : na // // END Calculations .... // // // START Plots .... // // // Long Plots ... XCELongStopPlot = plot(XCEDir == 1 ? XCELongStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.new(XCELongColor, 0)) plotshape(XCEBuySignal ? XCELongStop : na, title='Long Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(XCELongColor, 0)) plotshape(XCEBuySignal and XCEShowLabels ? XCELongStop : na, title='Buy Label', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(XCELongColor, 0), textcolor=XCETextColor) // // Short Plots ... XCEShortStopPlot = plot(XCEDir == 1 ? na : XCEShortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.new(XCEShortColor, 0)) plotshape(XCESellSignal ? XCEShortStop : na, title='Short Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(XCEShortColor, 0)) plotshape(XCESellSignal and XCEShowLabels ? XCEShortStop : na, title='Sell Label', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(XCEShortColor, 0), textcolor=XCETextColor) // // Filling Long and Short ... XCEMidPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false) fill(XCEMidPricePlot, XCELongStopPlot, title='Long State Filling', color=XCELongStateFillColor) fill(XCEMidPricePlot, XCEShortStopPlot, title='Short State Filling', color=XCEShortStateFillColor) // // END Plots .... // // // START Alerts ... // // END Alerts ... //