Tendência ATR Seguindo a Estratégia

Autora:ChaoZhang, Data: 21 de setembro de 2023
Tags:

Resumo

Esta estratégia utiliza o Intervalo Verdadeiro Médio (ATR) para capturar as tendências de preços e estabelece paradas com base no ATR para seguir a tendência.

Como funciona

  1. Calcular o valor ATR.

  2. Determinar o nível de stop loss com base no ATR.

  3. Insira longo/curto quando o preço interromper o nível de parada.

  4. Obtenha lucros ajustando as paradas dinamicamente.

Vantagens

  • O ATR ajusta automaticamente as paradas, sem necessidade de intervenção manual
  • Lógica simples e intuitiva, fácil de implementar
  • Ajuda a evitar ficar preso, stop loss oportuno
  • Lucros das tendências de equitação
  • Frequência de negociação controlada através dos parâmetros ATR

Riscos

  • Parâmetros ATR pobres podem causar paradas para ser muito solto ou apertado
  • Incapacidade de identificar eficazmente o fim da tendência
  • Existe algum atraso de tempo
  • Reversões podem reduzir os lucros

Orientações de otimização

  • Otimizar o parâmetro do período ATR
  • Teste diferentes múltiplos ATR para a distância de parada
  • Adicionar filtros para detectar a inversão da tendência
  • Explorar o aprendizado de máquina para otimização de parâmetros
  • Considerar mecanismos adicionais de obtenção de lucros

Conclusão

A estratégia efetivamente capta tendências usando ATR e bloqueia lucros com paradas dinâmicas. Parâmetros de ajuste fino podem melhorar o desempenho. Mas o atraso ATR não pode ser completamente eliminado.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

strategy(title="ATR Strategy", overlay = true,  commission_type=strategy.commission.percent,commission_value=0.075)
//credits to HPotter for the orginal code
nATRPeriod = input(5)
nATRMultip = input(3.5)
xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), math.max(nz(xATRTrailingStop[1]), close - nLoss),
                    iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), math.min(nz(xATRTrailingStop[1]), close + nLoss), 
                        iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos =	iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
	    iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 

strategy.entry("Long", strategy.long, when = barbuy) 
strategy.entry("Short", strategy.short, when = barsell) 

barcolor(barbuy? color.green:color.red)



Mais.