From 4aca5799d56eb4fd7ec1614f987a35975f4fd3db Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sat, 9 Mar 2024 12:04:57 +0330 Subject: [PATCH] add some new indicators ... --- xIndicators/x-saherelm.ce.pine | 116 +++++++++++++++++++ xIndicators/x-saherelm.cehull.pine | 179 +++++++++++++++++++++++++++++ 2 files changed, 295 insertions(+) create mode 100644 xIndicators/x-saherelm.ce.pine create mode 100644 xIndicators/x-saherelm.cehull.pine diff --git a/xIndicators/x-saherelm.ce.pine b/xIndicators/x-saherelm.ce.pine new file mode 100644 index 0000000..4181589 --- /dev/null +++ b/xIndicators/x-saherelm.ce.pine @@ -0,0 +1,116 @@ +/////////////////////////////////////////////////////// +// +// 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 ... +// diff --git a/xIndicators/x-saherelm.cehull.pine b/xIndicators/x-saherelm.cehull.pine new file mode 100644 index 0000000..776f7e1 --- /dev/null +++ b/xIndicators/x-saherelm.cehull.pine @@ -0,0 +1,179 @@ +/////////////////////////////////////////////////////// +// +// SaherElm IT Center Chandelier Exit / Hull Trend ... +// --------------------------------------------------- +// saherelm implementation of above indicator ... +// +// Maintainer: +// ------------ +// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) +// +////////////////////////////////////////////////////// + +// +//@version=5 +indicator(title="SaherElm Chandelier Exit/ Hull Trend Indicator", shorttitle = "XS_CEHULL_IND", overlay = true) + +// +// START Inputs .... +// +// +var string XCECalcGroup = 'Calculation' + +// +// CE ... +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) + +// +// Hull ... +HUTRSrc = input.source(defval = hl2, title = "Source", group=XCECalcGroup) +HUTRLength = input.int(defval = 23, title = "Length", group=XCECalcGroup) + +// +var string XCEVisualGroup = 'Visuals' + +// +XShowXCE = input.bool(title='Show XCE', defval=true, group=XCEVisualGroup) +XShowXHull = input.bool(title='Show XHull', defval=true, group=XCEVisualGroup) + +// +// CE ... +XCEShowLabels = input.bool(title='Show Buy/Sell Labels', defval=true, group=XCEVisualGroup) +XCEHighlightState = input.bool(title='Highlight State', defval=true, group=XCEVisualGroup) + +// +// Hull ... +HUTRShowCross = input.bool(defval = true, title = "Show cross over/under", group=XCEVisualGroup) + +// +// END Inputs .... +// + +// +// START Functions .... +// + +// +HUTRHma(src, length)=> + ta.wma((2 * ta.wma(src, length / 2)) - ta.wma(src, length), math.round(math.sqrt(length))) + +// +HUTRHma3(src, length)=> + p = length / 2 + ta.wma(ta.wma(close, p / 3) * 3 - ta.wma(close, p / 2) - ta.wma(close, p) ,p) + +// +// END Functions .... +// + +// +// START Calculations .... +// +// +// CE ... + +// +// 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 + +// +// Hull ... + +// +HUTRA = HUTRHma(HUTRSrc, HUTRLength) +HUTRB = HUTRHma3(HUTRSrc, HUTRLength) +HUTRColor = HUTRB > HUTRA ? color.lime : color.red + +// +HUTRCrossDown = HUTRA > HUTRB and HUTRA[1] < HUTRB[1] +HUTRCrossUp = HUTRB > HUTRA and HUTRB[1] < HUTRA[1] + +// +// END Calculations .... +// + +// +// START Plots .... +// + +// +// CE ... + +// +// Long Plots ... +XCELongStopPlot = plot((XCEDir == 1 and XShowXCE) ? XCELongStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.new(XCELongColor, 0)) + +plotshape((XShowXCE and XCEBuySignal) ? XCELongStop : na, title='Long Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(XCELongColor, 0)) +plotshape((XShowXCE and 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 or (not XShowXCE)) ? na : XCEShortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.new(XCEShortColor, 0)) + +plotshape((XShowXCE and XCESellSignal) ? XCEShortStop : na, title='Short Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(XCEShortColor, 0)) +plotshape((XShowXCE and 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(XShowXCE ? ohlc4 : na, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false) + +fill(XCEMidPricePlot, XCELongStopPlot, title='Long State Filling', color=XShowXCE ? XCELongStateFillColor : na) +fill(XCEMidPricePlot, XCEShortStopPlot, title='Short State Filling', color=XShowXCE ? XCEShortStateFillColor : na) + +// +// Hull ... + +// +HUTRP1 = plot(series = XShowXHull ? HUTRA : na, color = color.new(HUTRColor, 75), linewidth = 1, title = "Upper Line") +HUTRP2 = plot(series = XShowXHull ? HUTRB : na, color = color.new(HUTRColor, 75), linewidth = 1, title = "Downer Line") + +// +fill(HUTRP1, HUTRP2, color = XShowXHull ? color.new(HUTRColor, 55) : na, title = "Cloud Fill") + +// +plotshape((XShowXHull and HUTRShowCross and HUTRCrossDown) ? HUTRA : na, location = location.absolute, style = shape.labeldown, color = color.red, size = size.tiny, text = "Sell", textcolor = color.white, offset=-1) +plotshape((XShowXHull and HUTRShowCross and HUTRCrossUp) ? HUTRA : na, location = location.absolute, style = shape.labelup, color = color.green, size = size.tiny, text = "Buy", textcolor = color.white, offset=-1) + +// +// END Plots .... +// + +// +// START Alerts ... +// +// END Alerts ... +//