Initial Commit ...
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
///////////////////////////////////////////////////////
|
||||
//
|
||||
// SaherElm IT Center Multpile Strategies Oscillator
|
||||
// -------------------------------------------------
|
||||
// saherelm implementation of above oscillator ...
|
||||
//
|
||||
// Maintainer:
|
||||
// ------------
|
||||
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
||||
//
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
//@version=5
|
||||
indicator(title="SaherElm Multpile Strategies Oscillator", shorttitle = "XS_MPS_OSC", overlay = false)
|
||||
|
||||
//
|
||||
// START Inputs ....
|
||||
//
|
||||
MPSScale = input.float(defval = 75.0, title = "General scale")
|
||||
|
||||
//
|
||||
// Momentum ...
|
||||
MPSShowMomentum = input.bool(defval = true, title = "Show Squeeze Momentum", group = "Squeeze Momentum")
|
||||
MPSLengthM = input.int(defval = 17, title = "MOM Length", minval = 1, step = 1, group = "Squeeze Momentum")
|
||||
MPSSrcM = input.source(defval = close, title = "MOM Source", group = "Squeeze Momentum")
|
||||
MPSLength = input.int(defval = 17, title = "SQZ Length", minval = 1, step = 1, group = "Squeeze Momentum")
|
||||
MPSSrc = input.source(defval = close, title="SQZ Source", group = "Squeeze Momentum")
|
||||
|
||||
//
|
||||
// RSI ...
|
||||
MPSShowRsi = input.bool(defval = true, title = "Show RSI", group = "RSI")
|
||||
MPSShowRsiFondo = input.bool(defval = true, title = "Show RSI background", group = "RSI")
|
||||
MPSRsiApart = input.int(defval = 0, title = "RSI Separation", group = "RSI")
|
||||
MPSLen = input.int(defval = 14, minval = 1, title = "RSI Length", group = "RSI")
|
||||
MPSUpperR = input.int(defval = 70, title = "RSI Upper Band", group = "RSI")
|
||||
MPSMiddleR = input.int(defval = 50, title = "RSI Middle Band", group = "RSI")
|
||||
MPSLowerR = input.int(defval = 30, title = "RSI Lower Band", group = "RSI")
|
||||
|
||||
//
|
||||
// RSI DIVERGENCE ...
|
||||
MPSShowRsiDivergence = input.bool(defval = false, title = "Show RSI DIVERGENCE", group = "RSI")
|
||||
MPSFarRSI = input.int(defval = 70, title = "Adjust RSI DIVERGENCE", group = "RSI")
|
||||
MPSLenFast = input.int(defval = 5, minval = 1, title = "Fast RSI Length", group = "RSI")
|
||||
MPSLenSlow = input.int(defval = 14, minval = 1, title = "Slow RSI Length", group = "RSI")
|
||||
//
|
||||
// END Inputs ....
|
||||
//
|
||||
|
||||
//
|
||||
// START Functions ....
|
||||
//
|
||||
biggest(series) =>
|
||||
max = 0.0
|
||||
max := nz(max[1], series)
|
||||
if series > max
|
||||
max := series
|
||||
max
|
||||
//
|
||||
// END Functions ....
|
||||
//
|
||||
|
||||
//
|
||||
// START Calculations ....
|
||||
//
|
||||
//
|
||||
var bullishColor = color.lime
|
||||
var bearishColor = color.red
|
||||
|
||||
//
|
||||
// Momentum ...
|
||||
MPSSz = ta.linreg(MPSSrcM - math.avg(math.avg(ta.highest(high, MPSLengthM), ta.lowest(low, MPSLengthM)), ta.sma(close, MPSLengthM)), MPSLengthM, 0)
|
||||
MPSNi = biggest(MPSSz)
|
||||
|
||||
//
|
||||
// Momentum Conditions ...
|
||||
MPSSc1 = MPSSz >= 0
|
||||
MPSSc2 = MPSSz < 0
|
||||
MPSSc3 = MPSSz >= MPSSz[1]
|
||||
MPSSc4 = MPSSz < MPSSz[1]
|
||||
|
||||
//
|
||||
// Momentum Identifiers ...
|
||||
isMPSMomentumBullish = (MPSSc1 and MPSSc3) or (MPSSc1 and MPSSc4)
|
||||
isMPSMomentumBearish = (MPSSc2 and MPSSc4) or (MPSSc2 and MPSSc3)
|
||||
|
||||
//
|
||||
MPSClr = isMPSMomentumBullish ? bullishColor : isMPSMomentumBearish ? bearishColor : color.gray
|
||||
|
||||
//
|
||||
// RSI ...
|
||||
MPSRsi = ta.rsi(MPSSrc, MPSLen)
|
||||
MPSRsiColor = MPSRsi <= MPSLowerR ? bullishColor : MPSRsi >= MPSUpperR ? bearishColor : #da00ff
|
||||
MPSRsiScale = (MPSRsi + MPSRsiApart) * MPSNi / MPSScale
|
||||
|
||||
//
|
||||
MPSB1s = (MPSRsiApart + MPSUpperR) * MPSNi/MPSScale
|
||||
MPSBm = (MPSRsiApart + MPSMiddleR) * MPSNi/MPSScale
|
||||
MPSB0s = (MPSRsiApart + MPSLowerR) * MPSNi/MPSScale
|
||||
|
||||
//
|
||||
// RSI DIVERGENCE ...
|
||||
MPSSrcSlow = close
|
||||
MPSSrcFast = close
|
||||
|
||||
//
|
||||
MPSUpFast = ta.rma(math.max(ta.change(MPSSrcFast), 0), MPSLenFast)
|
||||
MPSDownFast = ta.rma(-math.min(ta.change(MPSSrcFast), 0), MPSLenFast)
|
||||
MPSRsiFast = MPSDownFast == 0 ? 100 : MPSUpFast == 0 ? 0 : 100 - (100 / (1 + MPSUpFast / MPSDownFast))
|
||||
|
||||
//
|
||||
MPSUpSlow = ta.rma(math.max(ta.change(MPSSrcSlow), 0), MPSLenSlow)
|
||||
MPSDownSlow = ta.rma(-math.min(ta.change(MPSSrcSlow), 0), MPSLenSlow)
|
||||
MPSRsiSlow = MPSDownSlow == 0 ? 100 : MPSUpSlow == 0 ? 0 : 100 - (100 / (1 + MPSUpSlow / MPSDownSlow))
|
||||
|
||||
//
|
||||
MPSDivergence = MPSRsiFast - MPSRsiSlow
|
||||
MPSDivergenceScale = MPSDivergence * (MPSNi / MPSScale)
|
||||
|
||||
//
|
||||
MPSDivergenceColor = MPSDivergence > 0 ? bullishColor : bearishColor
|
||||
//
|
||||
// END Calculations ....
|
||||
//
|
||||
|
||||
//
|
||||
// START Plots ....
|
||||
//
|
||||
//
|
||||
// Momentum ...
|
||||
plot(MPSShowMomentum ? MPSSz : na, title = "Squeeze Momentum", color = MPSClr, style = plot.style_area)
|
||||
|
||||
//
|
||||
// RSI ...
|
||||
plot(MPSShowRsi ? MPSRsiScale : na, "RSI", color = MPSRsiColor)
|
||||
|
||||
//
|
||||
// Divergence ...
|
||||
plot(MPSShowRsiDivergence ? MPSDivergenceScale + (MPSFarRSI * MPSNi / MPSScale) : na, "RSI Divergence", color = MPSDivergenceColor)
|
||||
|
||||
//
|
||||
// END Plots ....
|
||||
//
|
||||
|
||||
//
|
||||
// START Alerts ...
|
||||
//
|
||||
//
|
||||
// END Alerts ...
|
||||
//
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
// TODOS:
|
||||
// -------
|
||||
// - []
|
||||
//////////////////////////////////////////////////////
|
||||
Reference in New Issue
Block a user