ATR Trailing Stop Strategy (Estratégia de suspensão de atraso do ATR)

Autora:ChaoZhang, Data: 2023-09-26 20:23:13
Tags:

Visão geral: A estratégia ATR trailing stop é uma estratégia de negociação que define dinamicamente os níveis de stop loss com base no indicador Average True Range (ATR).

Estratégia lógica

A estratégia calcula o indicador AVERAGE (média móvel de preços) e as faixas superior/inferior DIFF/DIFFLOW com base nos valores ATR, formando um canal de negociação.

Especificamente, ele primeiro calcula a média móvel simples AVERAGE e o indicador ATR. A faixa superior DIFF e a faixa inferior DIFFLOW são então calculadas multiplicando os valores ATR por um coeficiente. Isso forma um canal de negociação limitado por DIFF e DIFFLOW. Quando o preço quebra acima da faixa superior, uma posição longa é tomada. Quando o preço quebra abaixo da faixa inferior, uma posição curta é tomada. Além disso, o nível de stop loss se move dinamicamente com os valores ATR. Isso permite paradas adaptativas.

Assim, a estratégia pode ser continuamente longa/curta para capturar lucros nas principais tendências, ao mesmo tempo em que utiliza ATR trailing stops para controlar o risco, o que a torna adequada para instrumentos voláteis.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. As paradas dinâmicas baseadas em ATR ajustam-se à volatilidade do mercado, evitando paradas demasiado próximas ou demasiado distantes.

  2. O canal de negociação visa capturar a reversão média dentro das tendências.

  3. Negociação de tendências contínuas sem previsão de rupturas.

  4. Parâmetros e regras simples, fáceis de entender e automatizar.

  5. A utilização elevada do capital, o comércio contínuo proporcionam mais oportunidades de lucro.

Riscos e melhorias

Alguns riscos a considerar:

  1. Os grandes coeficientes de ATR levam a paradas muito distantes, não conseguindo controlar o risco.

  2. Ajustar os coeficientes ATR para reduzir as paradas indesejadas.

  3. Perdas potenciais quando o preço se inverte após a ruptura inicial.

  4. Grandes picos podem tornar as paradas ineficazes.

Optimizações possíveis:

  1. Otimizar os parâmetros do ATR para encontrar o equilíbrio adequado entre o acompanhamento da volatilidade e a prevenção de paradas excessivas.

  2. Adicionar indicador de tendência, apenas quebras de negociação na direção da tendência.

  3. Os parâmetros de ensaio devem ser analisados individualmente para cada instrumento, a fim de determinar os valores ideais.

  4. Optimize a entrada, considere entrar nas breakouts do canal.

  5. Aumentar o tamanho das posições, controlando simultaneamente o risco total/recuperação.

Conclusão

A estratégia ATR trailing stop negocia continuamente as tendências enquanto gerencia o risco de forma dinâmica. Ela se adapta a instrumentos voláteis e fornece uma boa utilização do capital. A otimização de parâmetros e a adição de filtros podem refinar ainda mais o desempenho.


/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-25 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Investoz

//@version=4
strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

len = input(26, type=input.integer, minval=1, title="Length")
mul = input(1, type=input.float, minval=0, title="Length")
mullow = input(2, type=input.float, minval=0, title="Length")

price = sma(close, 1)
average = ema(close, len)
diff = atr(len) * mul
difflow = atr(len) * mullow

bull_level = average + diff
bear_level = average - difflow
bull_cross = crossunder(price, bear_level)
bear_cross = crossunder(bull_level, price)

FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2008, title = "From Year", minval = 2008)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2019)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
startTimeOk()  => true

if (startTimeOk())
    strategy.entry("KOP", strategy.long, when=bull_cross)
    strategy.close("KOP", when=bear_cross)  
    strategy.entry("SALJ", strategy.short, when=bear_cross)
    strategy.close("SALJ", when=bull_cross)

plot(price, title="price", color=color.black, transp=50, linewidth=2)
a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1)
a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1)
a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1)
fill(a0, a1, color=color.green, transp=97)
fill(a0, a2, color=color.red, transp=97)

Mais.