// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © CapitalCodersLLC //fjvs-vmyi-fdbu-zciu-fcgc //@version=5 indicator("Fiverr - Indicator - robzinox", overlay = true) gr_Disp = "Display Settings" //Inputs Bands = input.bool(false, "Display Reversal-Bands", group = gr_Disp) Wave = input.bool(false, "Display Volatility Wave", group = gr_Disp) CandleColor = input.bool(true, "Display Candle Color", group = gr_Disp) Signals = input.bool(true, "Display Buy/Sell Signals", group = gr_Disp) //============================================================================= // INDICATOR 2 - Entry Trigger //============================================================================= // //Moving Average // // ---- User Settings ---- // //Timeframe = input.timeframe ('','TimeFrame', inline='top', group="Moving Averages") // Repaint = false // MA_T1 = input.string( "Quadruple Exponential", "Fast", ["Simple","Exponential","Double Exponential","Triple Exponential","Quadruple Exponential","Weighted","Volume-weighted","Hull","Symmetrical","Arnaud Legoux","Welles Wilder","Triangular","Least Squares","Relative Strength","Ehlers Kaufman"], inline="MA", tooltip = 'Allows you to make modifications to the Moving Averages that the \'RE - BETA\' and \'MS - Beta\' strategy uses', group="Moving Averages - [RE - BETA] / [MS - BETA]") // MA_S1_Input = close // MA_L1 = input.int( 50, "Len", 1, 200, inline="MA", group="Moving Averages - [RE - BETA] / [MS - BETA]") // MA_T2 = input.string( "Quadruple Exponential", "Slow", ["Simple","Exponential","Double Exponential","Triple Exponential","Quadruple Exponential","Weighted","Volume-weighted","Hull","Symmetrical","Arnaud Legoux","Welles Wilder","Triangular","Least Squares","Relative Strength","Ehlers Kaufman"], inline="MA2", tooltip = 'Allows you to make modifications to the Moving Averages that the \'RE - BETA\' and \'MS - Beta\' strategy uses', group="Moving Averages - [RE - BETA] / [MS - BETA]") // MA_S2_Input = close // MA_L2 = input.int( 200,"Len", 1, 200, inline="MA2", group="Moving Averages - [RE - BETA] / [MS - BETA]") // MA_S1 = request.security(syminfo.tickerid, '', MA_S1_Input[Repaint ? 0 : barstate.isrealtime ? 1 : 0])[Repaint ? 0 : barstate.isrealtime ? 0 : 1] // MA_S2 = request.security(syminfo.tickerid, '', MA_S2_Input[Repaint ? 0 : barstate.isrealtime ? 1 : 0])[Repaint ? 0 : barstate.isrealtime ? 0 : 1] // //SMA // SMA(Source,Length) => ta.sma(Source,Length) // //EMA // EMA(Source,Length) => ta.ema(Source,Length) // //DEMA // DEMA(Source,Length) => 2 * ta.ema(Source,Length) - ta.ema(ta.ema(Source,Length), Length) // //TEMA // TEMA(Source,Length) => 3 * (ta.ema(Source,Length) - ta.ema(ta.ema(Source,Length), Length)) + ta.ema(ta.ema(ta.ema(Source,Length), Length), Length) // //QEMA // QEMA(Source,Length) => 5 * ta.ema(Source,Length) - 10 * ta.ema(ta.ema(Source,Length), Length) + 10 * ta.ema(ta.ema(ta.ema(Source,Length), Length), Length) - 5 * ta.ema(ta.ema(ta.ema(ta.ema(Source,Length), Length), Length), Length) + ta.ema(ta.ema(ta.ema(ta.ema(ta.ema(Source,Length), Length), Length), Length), Length) // //Weighted // WMA(Source,Length) => ta.wma(Source,Length) // //Volume Weighted // VMA(Source,Length) => ta.vwma(Source,Length) // //Hull // Hull(Source, Length) => ta.hma(Source, Length) // //Symmetrical // SWMA(Source) => ta.swma(Source) // //Arnaud Legoux // ALMA(Source, Length) => ta.alma(Source, Length, 0.85, 6) // // Least Squares // LS(Source, Length) => ta.linreg(Source, Length, 0) // // Relative Strength // RMA(Source, Length) => ta.rma(Source, Length) // // Wells Wilder // WELLS(Source, Length) => // Wilder_MA1 = .0 // Wilder_MA1 := 1 / Length * Source + (1 - 1 / Length) * nz(Wilder_MA1[1]) // // Triangular // TRI(Source, Length) => ta.sma(ta.sma(Source, Length),Length) // //Ehlers Kaufman // EK(Source, Length) => // KA_D1 = .0 // for int i = 0 to MA_L1 - 1 by 1 // KA_D1 += math.abs(nz(MA_S1[i]) - nz(MA_S1[i + 1])) // KA_EF1 = KA_D1 != 0 ? math.min(math.abs(MA_S1 - nz(MA_S1[MA_L1 - 1])) / KA_D1, 1) : 0 // KAMA1 = .0 // KAMA1 := (math.pow((0.6667 * KA_EF1) + 0.0645, 2) * MA_S1) + ((1 - math.pow((0.6667 * KA_EF1) + 0.0645, 2)) * nz(KAMA1[1])) // // ---- Moving Averages ---- // [MA_1, MA_2, MA_3, MA_4, MA_5] = switch MA_T1 // "Simple" => SMA(close, 5), SMA(close, 10), SMA(close, 15), SMA(close, 25), SMA(close, 50), SMA(close, 100) // // "Exponential" => ta.ema(MA_S1,MA_L1) // // "Double Exponential" => 2 * ta.ema(MA_S1, MA_L1) - ta.ema(ta.ema(MA_S1, MA_L1), MA_L1) // // "Triple Exponential" => 3 * (ta.ema(MA_S1, MA_L1) - ta.ema(ta.ema(MA_S1, MA_L1), MA_L1)) + ta.ema(ta.ema(ta.ema(MA_S1, MA_L1), MA_L1), MA_L1) // // "Quadruple Exponential" => 5 * ta.ema(MA_S1,MA_L1) - 10 * ta.ema(ta.ema(MA_S1, MA_L1), MA_L1) + 10 * ta.ema(ta.ema(ta.ema(MA_S1, MA_L1), MA_L1), MA_L1) - 5 * ta.ema(ta.ema(ta.ema(ta.ema(MA_S1, MA_L1), MA_L1), MA_L1), MA_L1) + ta.ema(ta.ema(ta.ema(ta.ema(ta.ema(MA_S1, MA_L1), MA_L1), MA_L1), MA_L1), MA_L1) // // "Weighted" => ta.wma(MA_S1,MA_L1) // // "Volume-weighted" => ta.vwma(MA_S1,MA_L1) // // "Hull" => ta.hma(MA_S1,MA_L1) // // "Symmetrical" => ta.swma(MA_S1) // // "Arnaud Legoux" => ta.alma(MA_S1, MA_L1, 0.85, 6) // // "Least Squares" => ta.linreg(MA_S1, MA_L1, 0) // // "Relative Strength" => ta.rma(MA_S1,MA_L1) // // "Welles Wilder" => // // Wilder_MA1 = .0 // // Wilder_MA1 := 1 / MA_L1 * MA_S1 + (1 - 1 / MA_L1) * nz(Wilder_MA1[1]) // // "Triangular" => ta.sma(ta.sma(MA_S1,MA_L1),MA_L1) // // "Ehlers Kaufman" => // // KA_D1 = .0 // // for int i = 0 to MA_L1 - 1 by 1 // // KA_D1 += math.abs(nz(MA_S1[i]) - nz(MA_S1[i + 1])) // // KA_EF1 = KA_D1 != 0 ? math.min(math.abs(MA_S1 - nz(MA_S1[MA_L1 - 1])) / KA_D1, 1) : 0 // // KAMA1 = .0 // // KAMA1 := (math.pow((0.6667 * KA_EF1) + 0.0645, 2) * MA_S1) + ((1 - math.pow((0.6667 * KA_EF1) + 0.0645, 2)) * nz(KAMA1[1])) // // MA_2 = switch MA_T2 // // "Simple" => ta.sma(MA_S2,MA_L2) // // "Exponential" => ta.ema(MA_S2,MA_L2) // // "Double Exponential" => 2 * ta.ema(MA_S2, MA_L2) - ta.ema(ta.ema(MA_S2, MA_L2), MA_L2) // // "Triple Exponential" => 3 * (ta.ema(MA_S2, MA_L2) - ta.ema(ta.ema(MA_S2, MA_L2), MA_L2)) + ta.ema(ta.ema(ta.ema(MA_S2, MA_L2), MA_L2), MA_L2) // // "Quadruple Exponential" => 5 * ta.ema(MA_S2,MA_L2) - 10 * ta.ema(ta.ema(MA_S2, MA_L2), MA_L2) + 10 * ta.ema(ta.ema(ta.ema(MA_S2, MA_L2), MA_L2), MA_L2) - 5 * ta.ema(ta.ema(ta.ema(ta.ema(MA_S2, MA_L2), MA_L2), MA_L2), MA_L2) + ta.ema(ta.ema(ta.ema(ta.ema(ta.ema(MA_S2, MA_L2), MA_L2), MA_L2), MA_L2), MA_L2) // // "Weighted" => ta.wma(MA_S2,MA_L2) // // "Volume-weighted" => ta.vwma(MA_S2,MA_L2) // // "Hull" => ta.hma(MA_S2,MA_L2) // // "Symmetrical" => ta.swma(MA_S2) // // "Arnaud Legoux" => ta.alma(MA_S2, MA_L2, 0.85, 6) // // "Least Squares" => ta.linreg(MA_S2, MA_L2, 0) // // "Relative Strength" => ta.rma(MA_S2,MA_L2) // // "Welles Wilder" => // // Wilder_MA2 = .0 // // Wilder_MA2 := 1 / MA_L2 * MA_S2 + (1 - 1 / MA_L2) * nz(Wilder_MA2[1]) // // "Triangular" => ta.sma(ta.sma(MA_S2,MA_L2),MA_L2) // // "Ehlers Kaufman" => // // KA_D2 = .0 // // for int i = 0 to MA_L2 - 1 by 1 // // KA_D2 += math.abs(nz(MA_S2[i]) - nz(MA_S2[i + 1])) // // KA_EF2 = KA_D2 != 0 ? math.min(math.abs(MA_S2 - nz(MA_S2[MA_L2 - 1])) / KA_D2, 1) : 0 // // KAMA2 = .0 // // KAMA2 := (math.pow((0.6667 * KA_EF2) + 0.0645, 2) * MA_S2) + ((1 - math.pow((0.6667 * KA_EF2) + 0.0645, 2)) * nz(KAMA2[1])) // // MA_Color = MA_1 > MA_2 ? color.new(color.green, 80) : color.new(color.red, 80) // // P1 = plot(MA_1, title="Fast MA", color=MA_Color) // // P2 = plot(MA_2, title="Slow MA", color=MA_Color) // // fill(P1, P2, color = MA_Color) float EMA1 = na float EMA2 = na float EMA3 = na float EMA4 = na float EMA5 = na float EMA6 = na //Calc if Wave EMA1 := ta.ema(close, 5) EMA2 := ta.ema(close, 10) EMA3 := ta.ema(close, 20) EMA4 := ta.ema(close, 25) EMA5 := ta.ema(close, 50) EMA6 := ta.ema(close, 100) // Color1 = EMA1 > EMA2 ? color.new(#03c904, 20) : color.new(#c90304, 20) // Color2 = EMA2 > EMA3 ? color.new(#03c904, 35) : color.new(#c90304, 35) // Color3 = EMA3 > EMA4 ? color.new(#03c904, 50) : color.new(#c90304, 50) // Color4 = EMA4 > EMA5 ? color.new(#03c904, 65) : color.new(#c90304, 65) // Color5 = EMA5 > EMA6 ? color.new(#03c904, 80) : color.new(#c90304, 80) ColorMA = EMA1 > EMA3 ? color.new(#03c904, 0) : color.new(#c90304, 0) //plot plotEMA1 = plot(EMA1, "Moving Average - 1", color = na, display = display.all - display.price_scale) plotEMA2 = plot(EMA2, "Moving Average - 2", color = na, display = display.all - display.price_scale) plotEMA3 = plot(EMA3, "Moving Average - 3", color = na, display = display.all - display.price_scale) plotEMA4 = plot(EMA4, "Moving Average - 4", color = na, display = display.all - display.price_scale) plotEMA5 = plot(EMA5, "Moving Average - 5", color = na, display = display.all - display.price_scale) plotEMA6 = plot(EMA6, "Moving Average - 6", color = na, display = display.all - display.price_scale) fill(plotEMA1, plotEMA2, color = color.new(ColorMA, 20)) fill(plotEMA2, plotEMA3, color = color.new(ColorMA, 35)) fill(plotEMA3, plotEMA4, color = color.new(ColorMA, 50)) fill(plotEMA4, plotEMA5, color = color.new(ColorMA, 65)) fill(plotEMA5, plotEMA6, color = color.new(ColorMA, 80)) //Reversal Bands //Reversal Zones src = close atrb = ta.atr(14) sq = math.sqrt(ta.sma(math.pow(ta.mom(src, 20), 2), 20)) rzup = ta.wma(ta.wma(ta.highest(src + sq, 20), 20), 20) rzdn = ta.wma(ta.wma(ta.lowest(src - sq, 20), 20), 20) reversal_zones = true //Reversal Zones var float r4_rz = na var float r3_rz = na var float r2_rz = na var float r1_rz = na var float s1_rz = na var float s2_rz = na var float s3_rz = na var float s4_rz = na if reversal_zones and Bands r4_rz := rzup + atrb * 3 r3_rz := rzup + atrb * 2 r2_rz := rzup + atrb r1_rz := rzup s1_rz := rzdn s2_rz := rzdn - atrb s3_rz := rzdn - atrb * 2 s4_rz := rzdn - atrb * 3 r4 = plot(r4_rz, 'RZ R4 Band', color=na, editable=false, display = display.all - display.price_scale) r3 = plot(r3_rz, 'RZ R3 Band', color=na, editable=false, display = display.all - display.price_scale) r2 = plot(r2_rz, 'RZ R2 Band', color=na, editable=false, display = display.all - display.price_scale) r1 = plot(r1_rz, 'RZ R1 Band', color=na, editable=false, display = display.all - display.price_scale) s1 = plot(s1_rz, 'RZ S1 Band', color=na, editable=false, display = display.all - display.price_scale) s2 = plot(s2_rz, 'RZ S2 Band', color=na, editable=false, display = display.all - display.price_scale) s3 = plot(s3_rz, 'RZ S3 Band', color=na, editable=false, display = display.all - display.price_scale) s4 = plot(s4_rz, 'RZ S4 Band', color=na, editable=false, display = display.all - display.price_scale) //---- fill(r3, r4, color.new(#c90304, 40), title='Reversal Zones [R4,R3]') fill(r2, r3, color.new(#c90304, 60), title='Reversal Zones [R3,R2]') fill(r1, r2, color.new(#c90304, 80), title='Reversal Zones [R2,R1]') fill(s1, s2, color.new(#03c904, 80), title='Reversal Zones [S1,S2]') fill(s2, s3, color.new(#03c904, 60), title='Reversal Zones [S2,S3]') fill(s3, s4, color.new(#03c904, 40), title='Reversal Zones [S3,S4]') // Buy/Sell Signals gr_Sig = "Signal Settings" st_mult = input.float(200, title='Volatility Signal', minval=0, maxval=10000, step=0.01, group = gr_Sig)/100 st_period = input.int(10, title='Volatility Period', minval=1, group = gr_Sig) hilow = (high - low) * 100 openclose = (close - open) * 100 vol = ta.obv / hilow spreadvol = openclose * vol VPT = spreadvol + ta.cum(spreadvol) window_len = 28 v_len = 14 price_spread = ta.stdev(high - low, window_len) vx = spreadvol + ta.cum(spreadvol) smooth = ta.ema(vx, v_len) v_spread = ta.stdev(vx - smooth, window_len) shadow = (vx - smooth) / v_spread * price_spread out = shadow > 0 ? high + shadow : low + shadow // CALCULATIONS // up_lev = out - st_mult * ta.atr(st_period) dn_lev = out + st_mult * ta.atr(st_period) // Volatility = 100 * math.sum(100 * ta.atr(1) / low, 1) / 100 factor = input.float(title='Volatility Factor', defval=0.5, minval=0.1, maxval=5, step=0.1, group = gr_Sig) perc = Volatility * 0.01 * factor hb = 0.00 hb := nz(hb[1]) hl = 0.000 hl := nz(hl[1]) lb = 0.00 lb := nz(lb[1]) l1 = 0.000 l1 := nz(l1[1]) c = 0 c := nz(c[1]) + 1 trend = 0 trend := nz(trend[1]) n = dn_lev x = up_lev if barstate.isfirst c := 0 lb := n hb := x l1 := out hl := out hl if c == 1 if x >= hb[1] hb := x hl := out trend := 1 trend else lb := n l1 := out trend := -1 trend if c > 1 if trend[1] > 0 hl := math.max(hl[1], out) if x >= hb[1] hb := x hb else if n < hb[1] - hb[1] * perc lb := n l1 := out trend := -1 trend else l1 := math.min(l1[1], out) if n <= lb[1] lb := n lb else if x > lb[1] + lb[1] * perc hb := x hl := out trend := 1 trend v = trend == 1 ? hb : trend == -1 ? lb : na // long = trend == 1 and trend[1] == -1 short = trend == -1 and trend[1] == 1 // last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) buy = ta.crossover(last_long, last_short) sell = ta.crossover(last_short, last_long) barcolor(CandleColor ? trend == 1 ? #03c904 : #c90304 : na) /////////////// Plotting /////////////// plotshape(Signals ? buy : na, title='Buy', text='Buy', color=color.new(color.green, 0), style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.new(color.white, 0)) //plot for buy icon plotshape(Signals ? sell : na, title='Sell', text='Sell', color=color.new(color.red, 0), style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.new(color.white, 0)) /////////////// Alerts /////////////// alertcondition(buy, title='Buy Signal', message='Buy: {{exchange}}:{{ticker}}, price = {{close}}, volume = {{volume}}') alertcondition(sell, title='Sell Signal', message='Sell: {{exchange}}:{{ticker}}, price = {{close}}, volume = {{volume}}')