Tendência ATR Seguindo a Estratégia

Autora:ChaoZhang, Data: 2023-09-28 11:32:09
Tags:

Resumo

Esta estratégia usa o indicador Average True Range (ATR) para determinar a direção da tendência.

Estratégia lógica

A estratégia calcula primeiro a média móvel simples (sma) e a média móvel exponencial (ema) do preço.

A estratégia usa a linha média do EMA, a faixa superior (eMA + ATR * coeficiente) e a faixa inferior (eMA - ATR * coeficiente) para determinar a direção da tendência.

Lógica principal do código:

  1. Calcular as médias de preços SMA e EMA
  2. Cálculo do intervalo médio ATR
  3. Calcular as faixas superior e inferior
  4. Determinação do sinal longo: quebras de preços acima da faixa superior
  5. Determinação do sinal curto: quebra de preços abaixo da faixa inferior
  6. Estabelecer stop loss para fechar posições: quebras de preço abaixo da faixa superior para fechar longs; quebras de preço acima da faixa inferior para fechar shorts.

Ao ajustar dinamicamente as posições com base no ATR, pode efetivamente seguir as direções da tendência.

Vantagens

  1. Usar o ATR para determinar a direção da tendência pode capturar efetivamente as tendências dos preços
  2. O risco de perdas-limite baseado em médias móveis pode ser controlado de forma razoável
  3. Lógica estratégica simples e clara, fácil de compreender e implementar
  4. Parâmetros flexíveis e configuráveis, adaptáveis a diferentes ambientes de mercado

Riscos

  1. O indicador ATR falhará em mercados laterais altamente voláteis
  2. Configurações de parâmetros incorretas podem causar negociação demasiado frequente
  3. Reversões repentinas podem invalidar o stop loss
  4. Os custos de negociação mais elevados exigem um ajustamento para as configurações de rastreamento

Soluções:

  1. Pausa da estratégia ou utilização de outros indicadores em alta volatilidade
  2. Otimizar os parâmetros para reduzir a frequência de negociação
  3. Aumentar a taxa de stop loss para eventos de dados importantes
  4. Ajustar a gama ATR com base em produtos específicos

Orientações para melhorias

  1. Combinar com indicadores de tendência para otimizar parâmetros, por exemplo, adicionar MACD para tendência
  2. Adicionar filtros como Bandas de Bollinger para entrada
  3. Otimizar métodos de stop loss, como indicadores de stop ou saída
  4. Otimizar a gama ATR com base em produtos específicos
  5. Adicionar gestão de risco como o dimensionamento de posições fracionárias fixas
  6. Otimizar dinamicamente os parâmetros usando aprendizado de máquina

Resumo

A estratégia de seguimento de tendências ATR tem uma lógica clara para determinar a direção da tendência usando ATR. É um sistema típico de seguimento de tendências. As vantagens são simplicidade e capacidade de seguir tendências. Mas também tem riscos que exigem otimizações para diferentes mercados.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 1h
basePeriod: 15m
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(2.618, type=input.float, minval=0, title="Length")
mullow = input(2.386, 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()) and ema(close,1) > ema(close,528)
    strategy.entry("KOP", strategy.long, when=bull_cross) 
    strategy.close("KOP", when=bear_cross)  
if (startTimeOk()) and ema(close,1) < ema(close,528)
   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.