Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //@version=5
- indicator("Combined EMA with Smoothing and Trendlines with Breaks", overlay=true)
- // EMA with Smoothing
- len_ema = input.int(9, minval=1, title="EMA Length")
- src_ema = input(close, title="EMA Source")
- offset_ema = input.int(title="EMA Offset", defval=0, minval=-500, maxval=500)
- out_ema = ta.ema(src_ema, len_ema)
- plot(out_ema, title="EMA", color=color.blue, offset=offset_ema)
- ma(source, length, type) =>
- switch type
- "SMA" => ta.sma(source, length)
- "EMA" => ta.ema(source, length)
- "SMMA (RMA)" => ta.rma(source, length)
- "WMA" => ta.wma(source, length)
- "VWMA" => ta.vwma(source, length)
- typeMA = input.string(title="Smoothing Method", defval="SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
- smoothingLength = input.int(title="Smoothing Length", defval=5, minval=1, maxval=100, group="Smoothing")
- offset_smoothing = input.int(title="Smoothing Offset", defval=0, minval=-500, maxval=500)
- smoothingLine = ma(out_ema, smoothingLength, typeMA)
- plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset_smoothing, display=display.none)
- // Trendlines with Breaks by LuxAlgo
- length_tl = input.int(14, 'Swing Detection Lookback')
- mult_tl = input.float(1., 'Slope', minval=0, step=.1)
- calcMethod_tl = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg'])
- backpaint_tl = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
- upCss_tl = input.color(color.teal, 'Up Trendline Color', group='Style')
- dnCss_tl = input.color(color.red, 'Down Trendline Color', group='Style')
- showExt_tl = input(true, 'Show Extended Lines')
- var upper_tl = 0.
- var lower_tl = 0.
- var slope_ph_tl = 0.
- var slope_pl_tl = 0.
- var offset_tl = backpaint_tl ? length_tl : 0
- n_tl = bar_index
- src_tl = close
- ph_tl = ta.pivothigh(length_tl, length_tl)
- pl_tl = ta.pivotlow(length_tl, length_tl)
- slope_tl = switch calcMethod_tl
- 'Atr' => ta.atr(length_tl) / length_tl * mult_tl
- 'Stdev' => ta.stdev(src_tl, length_tl) / length_tl * mult_tl
- 'Linreg' => math.abs(ta.sma(src_tl * n_tl, length_tl) - ta.sma(src_tl, length_tl) * ta.sma(n_tl, length_tl)) / ta.variance(n_tl, length_tl) / 2 * mult_tl
- slope_ph_tl := ph_tl ? slope_tl : slope_ph_tl
- slope_pl_tl := pl_tl ? slope_tl : slope_pl_tl
- upper_tl := ph_tl ? ph_tl : upper_tl - slope_ph_tl
- lower_tl := pl_tl ? pl_tl : lower_tl + slope_pl_tl
- var upos_tl = 0
- var dnos_tl = 0
- upos_tl := ph_tl ? 0 : close > upper_tl - slope_ph_tl * length_tl ? 1 : upos_tl
- dnos_tl := pl_tl ? 0 : close < lower_tl + slope_pl_tl * length_tl ? 1 : dnos_tl
- var uptl_tl = line.new(na, na, na, na, color=upCss_tl, style=line.style_dashed, extend=extend.right)
- var dntl_tl = line.new(na, na, na, na, color=dnCss_tl, style=line.style_dashed, extend=extend.right)
- if ph_tl and showExt_tl
- uptl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? ph_tl : upper_tl - slope_ph_tl * length_tl)
- uptl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? ph_tl - slope_tl : upper_tl - slope_ph_tl * (length_tl + 1))
- if pl_tl and showExt_tl
- dntl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? pl_tl : lower_tl + slope_pl_tl * length_tl)
- dntl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? pl_tl + slope_tl : lower_tl + slope_pl_tl * (length_tl + 1))
- plot(backpaint_tl ? upper_tl : upper_tl - slope_ph_tl * length_tl, 'Upper TL', color=ph_tl ? na : upCss_tl, offset=-offset_tl)
- plot(backpaint_tl ? lower_tl : lower_tl + slope_pl_tl * length_tl, 'Lower TL', color=pl_tl ? na : dnCss_tl, offset=-offset_tl)
- //plotshape(upos_tl > upos_tl[1] ? low : na, "Upper Break TL", shape.labelup, location.absolute, upCss_tl, text="B", textcolor=color.white, size=size.tiny)
- //plotshape(dnos_tl > dnos_tl[1] ? high : na, "Lower Break TL", shape.labeldown, location.absolute, dnCss_tl, text="B", textcolor=color.white, size=size.tiny)
- alertcondition(upos_tl > upos_tl[1], 'Upward Breakout TL', 'Price broke the down-trendline upward')
- alertcondition(dnos_tl > dnos_tl[1], 'Downward Breakout TL', 'Price broke the up-trendline downward')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement