Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //@version=2
- study(title="Fractals and Pivots R2-18 by JustUncleL", shorttitle="FRACTAL R2-18", overlay=true)
- // By: JustUncleL
- // Date: 13-Feb-2017
- // Version: R2-18
- //
- // Description:
- // This indicator display fractals, fractal levels, Pivot Points and HH/LL points.
- // Fractals are only drawn after they have completed.
- //
- // references:
- // - [RS]Fractal Levels by RicardoSantos
- //
- // Modifications:
- // R1 - original.
- //
- //
- //
- ShowPivots = input(true)
- ShowPivotLabels = input(false)
- ShowPivotNumbers = input(false)
- ShowFractals = input(true)
- ShowFractalLevels= input(false)
- ShowHHLL_ = input(false)
- ShowHHLL = ShowPivots?false:ShowHHLL_
- //filterBW_ = input(false,"Show Ideal Fractals Only")
- StarShape = input(4,minval=1,maxval=4,title="Pivot Marker: 1=Star, 2=Dot, 3=Diamond, 4=Cross")
- // Slow MA - type, source, length
- uMAf = input(false,title="Use MA Filter on Fractal Levels")
- uHHLLf = input(false,title="Use HH/LL Filter on Fractal Levels")
- // Fast MA - type, source, length
- fast_ma_type = input(defval="EMA", title="Fast MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA, TMA, SSMA ( case sensitive )", type=string)
- fast_ma_len = input(defval=8, title="Fast MA - Length", minval=1)
- fast_ma_src = input(close, title="Fast MA - Source")
- // Slow MA - type, source, length
- slow_ma_type = input(defval="EMA", title="Slow MA Type: SMA, EMA, WMA, VWMA, SMMA, DEMA, TEMA, HullMA, ZEMA, TMA, SSMA ( case sensitive )", type=string)
- slow_ma_len = input(defval=36, title="Slow MA - Length", minval=1)
- slow_ma_src = input(close, title="Slow MA - Source")
- //
- close_ = security(ticker, period, close)
- open_ = security(ticker, period, open)
- high_ = security(ticker, period, high)
- low_ = security(ticker, period, low)
- // - /INPUTS
- //
- // --- CONSTANTS ---
- DodgerBlue = #1E90FF
- filterBW = ShowPivots?true: false
- // --- /CONTANTS ---
- // - FUNCTIONS
- // ||--- Fractal Recognition Functions: ---------------------------------------------------------------||
- // ||-----------------------------------------------------------------------------------------------------||
- // ||--- Fractal Recognition Functions: ---------------------------------------------------------------||
- isIdealFractal(mode) =>
- ret = mode == 1 ? high_[5] < high_[4] and high_[4] < high_[3] and high_[3] > high_[2] and high_[2] > high_[1] :
- mode == -1 ? low_[5] > low_[4] and low_[4] > low_[3] and low_[3] < low_[2] and low_[2] < low_[1] : false
- isRegularFractal(mode) =>
- ret = mode == 1 ? high_[5] < high_[3] and high_[4] < high_[3] and high_[3] > high_[2] and high_[3] > high_[1] :
- mode == -1 ? low_[5] > low_[3] and low_[4] > low_[3] and low_[3] < low_[2] and low_[3] < low_[1] : false
- // ||-----------------------------------------------------------------------------------------------------||
- // Returns MA input selection variant, default to SMA if blank or typo.
- variant(type, src, len) =>
- v1 = sma(src, len) // Simple
- v2 = ema(src, len) // Exponential
- v3 = wma(src, len) // Weighted
- v4 = vwma(src, len) // Volume Weighted
- v5 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len // Smoothed
- v6 = 2 * v2 - ema(v2, len) // Double Exponential
- v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len) // Triple Exponential
- v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) // Hull
- v11 = sma(sma(src,len),len) // Triangular
- // SuperSmoother filter
- // © 2013 John F. Ehlers
- a1 = exp(-1.414*3.14159 / len)
- b1 = 2*a1*cos(1.414*3.14159 / len)
- c2 = b1
- c3 = (-a1)*a1
- c1 = 1 - c2 - c3
- v9 = c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
- // Zero Lag Exponential
- ema1 = ema(src, len)
- ema2 = ema(ema1, len)
- v10 = ema1+(ema1-ema2)
- // return variant, defaults to SMA if input invalid.
- type=="EMA"?v2 : type=="WMA"?v3 : type=="VWMA"?v4 : type=="SMMA"?v5 : type=="DEMA"?v6 : type=="TEMA"?v7 : type=="HullMA"?v8 : type=="SSMA"?v9 : type=="ZEMA"?v10 : type=="TMA"? v11: v1
- // - /FUNCTIONS
- // - SERIES VARIABLES
- // MA's
- fast_ma_series = variant(fast_ma_type, fast_ma_src, fast_ma_len)
- slow_ma_series = variant(slow_ma_type, slow_ma_src, slow_ma_len)
- filteredtopf = filterBW ? isIdealFractal(1) : isRegularFractal(1)
- filteredbotf = filterBW ? isIdealFractal(-1) : isRegularFractal(-1)
- //plotshape(ShowFractals? filteredtopf :na, title='Filtered Top Fractals', style=shape.triangleup, location=location.abovebar, color=green, offset=-3, transp=20)
- //plotshape(ShowFractals? filteredbotf :na, title='Filtered Bottom Fractals', style=shape.triangledown, location=location.belowbar, color=red, offset=-3, transp=20)
- topfractals = filteredtopf ? high_[3] : topfractals[1]
- botfractals = filteredbotf ? low_[3] : botfractals[1]
- topfcolor = topfractals != topfractals[1] ? na : green
- botfcolor = botfractals != botfractals[1] ? na : red
- // ||-----------------------------------------------------------------------------------------------------||
- // ||--- Higher Highs, Lower Highs, Higher Lows, Lower Lows -------------------------------------------||
- higherhigh = filteredtopf == false ? false : ( valuewhen(filteredtopf == true, high_[3], 1) < valuewhen(filteredtopf == true, high_[3], 0) and
- (ShowPivots or valuewhen(filteredtopf == true, high_[3], 2) < valuewhen(filteredtopf == true, high_[3], 0)))
- lowerhigh = filteredtopf == false ? false : ( valuewhen(filteredtopf == true, high_[3], 1) > valuewhen(filteredtopf == true, high_[3], 0) and
- (ShowPivots or valuewhen(filteredtopf == true, high_[3], 2) > valuewhen(filteredtopf == true, high_[3], 0)))
- higherlow = filteredbotf == false ? false : ( valuewhen(filteredbotf == true, low_[3], 1) < valuewhen(filteredbotf == true, low_[3], 0) and
- (ShowPivots or valuewhen(filteredbotf == true, low_[3], 2) < valuewhen(filteredbotf == true, low_[3], 0)))
- lowerlow = filteredbotf == false ? false : ( valuewhen(filteredbotf == true, low_[3], 1) > valuewhen(filteredbotf == true, low_[3], 0) and
- (ShowPivots or valuewhen(filteredbotf == true, low_[3], 2) > valuewhen(filteredbotf == true, low_[3], 0)))
- // If selected Display the HH/LL above/below candle.
- plotshape(ShowHHLL ? higherhigh : na, title='HH', style=shape.square, location=location.abovebar, color=maroon, text="[HH]", offset=-3,transp=0)
- plotshape(ShowHHLL ? lowerhigh : na, title='LH', style=shape.square, location=location.abovebar, color=maroon, text="[LH]", offset=-3,transp=0)
- plotshape(ShowHHLL ? higherlow : na, title='HL', style=shape.square, location=location.belowbar, color=green, text="[HL]", offset=-3,transp=0)
- plotshape(ShowHHLL ? lowerlow : na, title='LL', style=shape.square, location=location.belowbar, color=green, text="[LL]", offset=-3,transp=0)
- // If Selected Display Pivot points
- plotshape(ShowPivots and ShowPivotLabels? higherhigh : na, title='HH Label', style=shape.cross, location=location.abovebar, color=maroon, text="[HH]", offset=-3,transp=0)
- //plotshape(ShowPivots and not ShowPivotLabels? higherhigh? high :na : na, title='Higher High+', style=shape.cross, location=location.abovebar, color=maroon, offset=-3,transp=0)
- plotchar(ShowPivots and not ShowPivotLabels and StarShape==1? higherhigh?high:na: na, title='HH *', location=location.abovebar, color=maroon, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==2? higherhigh?high:na: na, title='HH .', location=location.abovebar, color=maroon, style=shape.circle, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==3? higherhigh?high:na: na, title='HH #', location=location.abovebar, color=maroon, style=shape.diamond, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==4? higherhigh?high:na: na, title='HH +', location=location.abovebar, color=maroon, style=shape.cross, offset=-3,transp=0)
- //
- plotshape(ShowPivots and ShowPivotLabels? lowerhigh : na, title='LH Label', style=shape.cross, location=location.abovebar, color=maroon, text="[LH]", offset=-3,transp=0)
- //plotshape(ShowPivots and not ShowPivotLabels? lowerhigh? high : na : na, title='Lower High+', style=shape.cross, location=location.abovebar, color=maroon, offset=-3,transp=0)
- plotchar(ShowPivots and not ShowPivotLabels and StarShape==1? lowerhigh?high:na: na, title='LH *', location=location.abovebar, color=maroon, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==2? lowerhigh?high:na: na, title='LH .', location=location.abovebar, color=maroon, style=shape.circle, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==3? lowerhigh?high:na: na, title='LH #', location=location.abovebar, color=maroon, style=shape.diamond, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==4? lowerhigh?high:na: na, title='LH +', location=location.abovebar, color=maroon, style=shape.cross, offset=-3,transp=0)
- //
- plotshape(ShowPivots and ShowPivotLabels? higherlow : na, title='HL Label', style=shape.cross, location=location.belowbar, color=green, text="[HL]", offset=-3,transp=0)
- //plotshape(ShowPivots and not ShowPivotLabels? higherlow? low: na : na, title='Higher Low+', style=shape.cross, location=location.belowbar, color=green, offset=-3,transp=0)
- plotchar(ShowPivots and not ShowPivotLabels and StarShape==1? higherlow?low:na: na, title='HL *', location=location.belowbar, color=green, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==2? higherlow?low:na: na, title='HL .', location=location.belowbar, color=green, style=shape.circle, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==3? higherlow?low:na: na, title='HL #', location=location.belowbar, color=green, style=shape.diamond, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==4? higherlow?low:na: na, title='HL +', location=location.belowbar, color=green, style=shape.cross, offset=-3,transp=0)
- //
- plotshape(ShowPivots and ShowPivotLabels? lowerlow : na, title='LL Label', style=shape.cross, location=location.belowbar, color=green, text="[LL]", offset=-3,transp=0)
- //plotshape(ShowPivots and not ShowPivotLabels? lowerlow? low : na : na, title='Lower Low+', style=shape.cross, location=location.belowbar, color=green, offset=-3,transp=0)
- plotchar(ShowPivots and not ShowPivotLabels and StarShape==1? lowerlow?low:na: na, title='LL *', location=location.belowbar, color=green, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==2? lowerlow?low:na: na, title='LL .', location=location.belowbar, color=green, style=shape.circle, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==3? lowerlow?low:na: na, title='LL #', location=location.belowbar, color=green, style=shape.diamond, offset=-3,transp=0)
- plotshape(ShowPivots and not ShowPivotLabels and StarShape==4? lowerlow?low:na: na, title='LL +', location=location.belowbar, color=green, style=shape.cross, offset=-3,transp=0)
- // Plot the Stars only when spot vacant
- //
- // Number the Pivot candle fractal positions above or below candles
- plotchar(ShowPivots and ShowPivotNumbers? filteredtopf: na, title='High 1u', location=location.abovebar, color=maroon, char="1", offset=-5,transp=0)
- plotchar(ShowPivots and ShowPivotNumbers? filteredtopf: na, title='High 2u', location=location.abovebar, color=maroon, char="2", offset=-4,transp=0)
- plotchar(ShowPivots and ShowPivotNumbers ? filteredtopf: na, title='High 2d', location=location.abovebar, color=maroon, char="2", offset=-2,transp=0)
- plotchar(ShowPivots and ShowPivotNumbers ? filteredtopf: na, title='High 1d', location=location.abovebar, color=maroon, char="1", offset=-1,transp=0)
- //
- plotchar(ShowPivots and ShowPivotNumbers ? filteredbotf: na, title='Low 1d', location=location.belowbar, color=green, char="1", offset=-5,transp=0)
- plotchar(ShowPivots and ShowPivotNumbers ? filteredbotf: na, title='Low 2d', location=location.belowbar, color=green, char="2", offset=-4,transp=0)
- plotchar(ShowPivots and ShowPivotNumbers ? filteredbotf: na, title='Low 2u', location=location.belowbar, color=green, char="2", offset=-2,transp=0)
- plotchar(ShowPivots and ShowPivotNumbers ? filteredbotf: na, title='Low 1u', location=location.belowbar, color=green, char="1", offset=-1,transp=0)
- // Get All fractals
- topf = isRegularFractal(1)
- botf = isRegularFractal(-1)
- havespot = not ShowPivots or (ShowPivots and not(higherhigh or lowerhigh or higherlow or lowerlow))
- plotshape(havespot and ShowFractals? topf :na, title='Regular Top Fractals', style=shape.triangleup, location=location.abovebar, color=red, offset=-3,transp=0)
- plotshape(havespot and ShowFractals? botf :na, title='Regular Bottom Fractals', style=shape.triangledown, location=location.belowbar, color=green, offset=-3,transp=0)
- // ||--- Higher Highs, Lower Lows on All Fractals -------------------------------------------||
- HH = topf == false ? false : ( valuewhen(topf == true, high_[3], 1) < valuewhen(topf == true, high_[3], 0) and
- (valuewhen(topf == true, high_[3], 2) < valuewhen(topf == true, high_[3], 0)))
- LL = botf == false ? false : ( valuewhen(botf == true, low_[3], 1) > valuewhen(botf == true, low_[3], 0) and
- (valuewhen(botf == true, low_[3], 2) > valuewhen(botf == true, low_[3], 0)))
- topfs = topf and (not uHHLLf or HH)? high_[3] : topfs[1]
- botfs = botf and (not uHHLLf or LL)? low_[3] : botfs[1]
- topfc = (topfs != topfs[1]) or (uMAf and fast_ma_series<slow_ma_series)? na : green
- botfc = (botfs != botfs[1]) or (uMAf and fast_ma_series>slow_ma_series)? na : red
- plot(ShowFractalLevels ? topfs : na, color=topfc, transp=0, linewidth=2, offset=-3, title="Top Levels")
- plot(ShowFractalLevels ? botfs : na, color=botfc, transp=0, linewidth=2, offset=-3, title="Bottom Levels")
- //
- //EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement