Advertisement
xmd79

Combined EMA with Smoothing and Trendlines with Breaks

May 30th, 2024
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. //@version=5
  2. indicator("Combined EMA with Smoothing and Trendlines with Breaks", overlay=true)
  3.  
  4. // EMA with Smoothing
  5. len_ema = input.int(9, minval=1, title="EMA Length")
  6. src_ema = input(close, title="EMA Source")
  7. offset_ema = input.int(title="EMA Offset", defval=0, minval=-500, maxval=500)
  8. out_ema = ta.ema(src_ema, len_ema)
  9. plot(out_ema, title="EMA", color=color.blue, offset=offset_ema)
  10.  
  11. ma(source, length, type) =>
  12. switch type
  13. "SMA" => ta.sma(source, length)
  14. "EMA" => ta.ema(source, length)
  15. "SMMA (RMA)" => ta.rma(source, length)
  16. "WMA" => ta.wma(source, length)
  17. "VWMA" => ta.vwma(source, length)
  18.  
  19. typeMA = input.string(title="Smoothing Method", defval="SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
  20. smoothingLength = input.int(title="Smoothing Length", defval=5, minval=1, maxval=100, group="Smoothing")
  21. offset_smoothing = input.int(title="Smoothing Offset", defval=0, minval=-500, maxval=500)
  22.  
  23. smoothingLine = ma(out_ema, smoothingLength, typeMA)
  24. plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset_smoothing, display=display.none)
  25.  
  26. // Trendlines with Breaks by LuxAlgo
  27. length_tl = input.int(14, 'Swing Detection Lookback')
  28. mult_tl = input.float(1., 'Slope', minval=0, step=.1)
  29. calcMethod_tl = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg'])
  30. backpaint_tl = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
  31. upCss_tl = input.color(color.teal, 'Up Trendline Color', group='Style')
  32. dnCss_tl = input.color(color.red, 'Down Trendline Color', group='Style')
  33. showExt_tl = input(true, 'Show Extended Lines')
  34.  
  35. var upper_tl = 0.
  36. var lower_tl = 0.
  37. var slope_ph_tl = 0.
  38. var slope_pl_tl = 0.
  39.  
  40. var offset_tl = backpaint_tl ? length_tl : 0
  41.  
  42. n_tl = bar_index
  43. src_tl = close
  44.  
  45. ph_tl = ta.pivothigh(length_tl, length_tl)
  46. pl_tl = ta.pivotlow(length_tl, length_tl)
  47.  
  48. slope_tl = switch calcMethod_tl
  49. 'Atr' => ta.atr(length_tl) / length_tl * mult_tl
  50. 'Stdev' => ta.stdev(src_tl, length_tl) / length_tl * mult_tl
  51. '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
  52.  
  53. slope_ph_tl := ph_tl ? slope_tl : slope_ph_tl
  54. slope_pl_tl := pl_tl ? slope_tl : slope_pl_tl
  55.  
  56. upper_tl := ph_tl ? ph_tl : upper_tl - slope_ph_tl
  57. lower_tl := pl_tl ? pl_tl : lower_tl + slope_pl_tl
  58.  
  59. var upos_tl = 0
  60. var dnos_tl = 0
  61. upos_tl := ph_tl ? 0 : close > upper_tl - slope_ph_tl * length_tl ? 1 : upos_tl
  62. dnos_tl := pl_tl ? 0 : close < lower_tl + slope_pl_tl * length_tl ? 1 : dnos_tl
  63.  
  64. var uptl_tl = line.new(na, na, na, na, color=upCss_tl, style=line.style_dashed, extend=extend.right)
  65. var dntl_tl = line.new(na, na, na, na, color=dnCss_tl, style=line.style_dashed, extend=extend.right)
  66.  
  67. if ph_tl and showExt_tl
  68. uptl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? ph_tl : upper_tl - slope_ph_tl * length_tl)
  69. uptl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? ph_tl - slope_tl : upper_tl - slope_ph_tl * (length_tl + 1))
  70.  
  71. if pl_tl and showExt_tl
  72. dntl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? pl_tl : lower_tl + slope_pl_tl * length_tl)
  73. dntl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? pl_tl + slope_tl : lower_tl + slope_pl_tl * (length_tl + 1))
  74.  
  75. plot(backpaint_tl ? upper_tl : upper_tl - slope_ph_tl * length_tl, 'Upper TL', color=ph_tl ? na : upCss_tl, offset=-offset_tl)
  76. plot(backpaint_tl ? lower_tl : lower_tl + slope_pl_tl * length_tl, 'Lower TL', color=pl_tl ? na : dnCss_tl, offset=-offset_tl)
  77.  
  78. //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)
  79.  
  80. //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)
  81.  
  82. alertcondition(upos_tl > upos_tl[1], 'Upward Breakout TL', 'Price broke the down-trendline upward')
  83. alertcondition(dnos_tl > dnos_tl[1], 'Downward Breakout TL', 'Price broke the up-trendline downward')
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement