Esta estratégia usa pontos pivô (PivotHigh e PivotLow) para identificar os altos e baixos dos preços e desenha linhas de tendência ascendentes e descendentes com base nesses pontos. A inclinação das linhas de tendência é calculada usando métodos como ATR (Range Verdadeiro Médio), desvio padrão ou regressão linear, e depois ajustada por um fator de inclinação.
Esta estratégia utiliza pontos pivô e inclinações da linha de tendência para construir um sistema de negociação de linha de tendência em tempo real. Ao capturar eventos de ruptura da linha de tendência, a estratégia pode negociar nos estágios iniciais da formação da tendência. Embora a estratégia tenha certas vantagens, ainda é necessário estar ciente de seus riscos em mercados agitados e melhorar ainda mais a robustez e a lucratividade da estratégia, introduzindo mais informações, otimizando a filtragem de sinais, o gerenciamento de posições e outros métodos.
/*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') //------------------------------------------------------------------------------}