
La estrategia utiliza los puntos de apoyo (PivotHigh y PivotLow) para identificar los puntos altos y bajos de la fluctuación de los precios y, sobre esta base, trazar líneas de tendencia hacia arriba y hacia abajo. La inclinación de la línea de tendencia se obtiene mediante métodos como ATR (Rango real medio), diferencia estándar o regresión lineal, y se multiplica por un factor de inclinación.
La estrategia utiliza los puntos de apoyo y la pendiente de la línea de tendencia para construir un sistema de comercio de línea de tendencia en tiempo real. Al capturar los eventos de ruptura de la línea de tendencia, la estrategia puede operar en las primeras etapas de la formación de la tendencia. A pesar de que la estrategia tiene ciertas ventajas, se debe tener en cuenta sus riesgos en mercados convulsos y mejorar aún más la estabilidad y la rentabilidad de la estrategia mediante la introducción de más información, la optimización de la filtración de señales y la gestión de posiciones.
/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(" only Ajay ", 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
upBreakout = upos > upos[1]
dnBreakout = dnos > dnos[1]
if (upBreakout)
strategy.entry("Up Breakout", strategy.long)
if (dnBreakout)
strategy.entry("Down Breakout", strategy.short)
//------------------------------------------------------------------------------}
//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')
//------------------------------------------------------------------------------}