last ...
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
// © LuxAlgo
|
||||
|
||||
//@version=5
|
||||
indicator("Trendlines with Breaks [LuxAlgo]", "LuxAlgo - Trendlines with Breaks", overlay = true)
|
||||
//------------------------------------------------------------------------------
|
||||
//Settings
|
||||
//-----------------------------------------------------------------------------{
|
||||
length = input.int(14, 'Swing Detection Lookback')
|
||||
mult = input.float(1., 'Slope', minval = 0, step = .1)
|
||||
calcMethod = input.string('Atr', 'Slope Calculation Method', options = ['Atr','Stdev','Linreg'])
|
||||
backpaint = input(true, tooltip = 'Backpainting offset displayed elements in the past. Disable backpainting to see real time information returned by the indicator.')
|
||||
|
||||
//Style
|
||||
upCss = input.color(color.teal, 'Up Trendline Color', group = 'Style')
|
||||
dnCss = input.color(color.red, 'Down Trendline Color', group = 'Style')
|
||||
showExt = input(true, 'Show Extended Lines')
|
||||
|
||||
//-----------------------------------------------------------------------------}
|
||||
//Calculations
|
||||
//-----------------------------------------------------------------------------{
|
||||
var upper = 0.
|
||||
var lower = 0.
|
||||
var slope_ph = 0.
|
||||
var slope_pl = 0.
|
||||
|
||||
var offset = backpaint ? length : 0
|
||||
|
||||
n = bar_index
|
||||
src = close
|
||||
|
||||
ph = ta.pivothigh(length, length)
|
||||
pl = ta.pivotlow(length, length)
|
||||
|
||||
//Slope Calculation Method
|
||||
slope = switch calcMethod
|
||||
'Atr' => ta.atr(length) / length * mult
|
||||
'Stdev' => ta.stdev(src,length) / length * mult
|
||||
'Linreg' => math.abs(ta.sma(src * n, length) - ta.sma(src, length) * ta.sma(n, length)) / ta.variance(n, length) / 2 * mult
|
||||
|
||||
//Get slopes and calculate trendlines
|
||||
slope_ph := ph ? slope : slope_ph
|
||||
slope_pl := pl ? slope : slope_pl
|
||||
|
||||
upper := ph ? ph : upper - slope_ph
|
||||
lower := pl ? pl : lower + slope_pl
|
||||
|
||||
var upos = 0
|
||||
var dnos = 0
|
||||
upos := ph ? 0 : close > upper - slope_ph * length ? 1 : upos
|
||||
dnos := pl ? 0 : close < lower + slope_pl * length ? 1 : dnos
|
||||
|
||||
//-----------------------------------------------------------------------------}
|
||||
//Extended Lines
|
||||
//-----------------------------------------------------------------------------{
|
||||
var uptl = line.new(na,na,na,na, color = upCss, style = line.style_dashed, extend = extend.right)
|
||||
var dntl = line.new(na,na,na,na, color = dnCss, style = line.style_dashed, extend = extend.right)
|
||||
|
||||
if ph and showExt
|
||||
uptl.set_xy1(n-offset, backpaint ? ph : upper - slope_ph * length)
|
||||
uptl.set_xy2(n-offset+1, backpaint ? ph - slope : upper - slope_ph * (length+1))
|
||||
|
||||
if pl and showExt
|
||||
dntl.set_xy1(n-offset, backpaint ? pl : lower + slope_pl * length)
|
||||
dntl.set_xy2(n-offset+1, backpaint ? pl + slope : lower + slope_pl * (length+1))
|
||||
|
||||
//-----------------------------------------------------------------------------}
|
||||
//Plots
|
||||
//-----------------------------------------------------------------------------{
|
||||
plot(backpaint ? upper : upper - slope_ph * length, 'Upper', color = ph ? na : upCss, offset = -offset)
|
||||
plot(backpaint ? lower : lower + slope_pl * length, 'Lower', color = pl ? na : dnCss, offset = -offset)
|
||||
|
||||
//Breakouts
|
||||
plotshape(upos > upos[1] ? low : na, "Upper Break"
|
||||
, shape.labelup
|
||||
, location.absolute
|
||||
, upCss
|
||||
, text = "B"
|
||||
, textcolor = color.white
|
||||
, size = size.tiny)
|
||||
|
||||
plotshape(dnos > dnos[1] ? high : na, "Lower Break"
|
||||
, shape.labeldown
|
||||
, location.absolute
|
||||
, dnCss
|
||||
, text = "B"
|
||||
, textcolor = color.white
|
||||
, size = size.tiny)
|
||||
|
||||
//-----------------------------------------------------------------------------}
|
||||
//Alerts
|
||||
//-----------------------------------------------------------------------------{
|
||||
alertcondition(upos > upos[1], 'Upward Breakout', 'Price broke the down-trendline upward')
|
||||
alertcondition(dnos > dnos[1], 'Downward Breakout', 'Price broke the up-trendline downward')
|
||||
|
||||
//-----------------------------------------------------------------------------}
|
||||
Reference in New Issue
Block a user