add some new indicators ...
This commit is contained in:
@@ -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 ...
|
||||
//
|
||||
@@ -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 ...
|
||||
//
|
||||
Reference in New Issue
Block a user