Estratégia dupla ATR de tração

Autora:ChaoZhang, Data: 2024-01-31 17:10:32
Tags:

img

Resumo

A estratégia Dual ATR Trailing Stop é uma estratégia de negociação de curto prazo baseada no indicador Average True Range (ATR). A estratégia define duas linhas de stop loss, linha ATR rápida e linha ATR lenta, ao mesmo tempo, e determina entrada e saída com base no cruzamento das duas linhas.

Princípio da estratégia

O núcleo desta estratégia é o uso de duas linhas de stop loss ATR. Uma é a linha ATR rápida com curto período e pequeno multiplicador para reação rápida. A outra é a linha ATR lenta com período mais longo e multiplicador maior para filtragem. Quando a linha ATR rápida cruza acima da linha ATR lenta, ela gera sinal de compra. Quando a linha ATR rápida cruza abaixo da linha ATR lenta, ela gera sinal de venda.

A lógica específica é: calcular a linha ATR rápida e a linha ATR lenta. Quando o preço está acima da linha lenta, use a linha rápida para rastrear a perda de parada. Caso contrário, use a linha lenta para rastrear a perda de parada. A cor de Kline representa a linha de parada atual. Verde e azul significa usar a linha rápida. Vermelho e amarelo significa usar a linha lenta. Saia quando o preço do mercado tocar as linhas de parada de perda.

Análise das vantagens

As vantagens desta estratégia são as seguintes:

  1. Lógica simples e clara, fácil de entender e implementar.
  2. Resposta rápida às alterações do mercado, adequada para mercados de alta volatilidade.
  3. Controles de perda de parada duplo ATR de risco eficaz.
  4. O indicador ATR é paramétrico para ajustar o intervalo de stop loss.
  5. A cor visual do Kline indica claramente a situação de stop loss.

Análise de riscos

Há também alguns riscos:

  1. Prendido a exagerar.
  2. O ATR tem uma má adaptação da curva, pode amplificar as perdas.
  3. Não pode filtrar de forma eficaz os mercados de tendências.

Podemos reduzir os riscos otimizando o período de ATR, ajustando o multiplicador de ATR, combinando outros indicadores para filtragem, etc.

Direcção de otimização

As direcções de otimização são:

  1. Otimizar os parâmetros do ATR para um melhor intervalo de perda de parada.
  2. Adicionar indicadores de filtro para evitar transações inválidas, como MA.
  3. Adicione condições abertas para evitar erros, por exemplo, adicione indicadores de volume.
  4. Adicionar saídas para o período de detenção para evitar excesso de negociação.

Conclusão

A estratégia de trail stop duplo ATR é fácil de entender e implementar, especialmente adequada para cenários de alta volatilidade e pode controlar efetivamente os riscos.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
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/
// © ceyhun

//@version=4
strategy("ATR Trailing Stop Strategy by ceyhun", overlay=true)

/////////notes////////////////////////////////////////
// This is based on the ATR trailing stop indicator //
// width addition of two levels of stops and        //
// different interpretation.                        //
// This is a fast-reacting system and is better     //
// suited for higher volatility markets             //
//////////////////////////////////////////////////////

SC = input(close, "Source", input.source)

// Fast Trail //
AP1 = input(5, "Fast ATR period", input.integer)  // ATR Period
AF1 = input(0.5, "Fast ATR multiplier", input.float)  // ATR Factor
SL1 = AF1 * atr(AP1)  // Stop Loss
Trail1 = 0.0
Trail1 := iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1)))

// Slow Trail //
AP2 = input(10, "Slow ATR perod", input.integer)  // ATR Period
AF2 = input(2, "Slow ATR multiplier", input.float)  // ATR Factor
SL2 = AF2 * atr(AP2)  // Stop Loss
Trail2 = 0.0
Trail2 := iff(SC > nz(Trail2[1], 0) and SC[1] > nz(Trail2[1], 0), max(nz(Trail2[1], 0), SC - SL2), iff(SC < nz(Trail2[1], 0) and SC[1] < nz(Trail2[1], 0), min(nz(Trail2[1], 0), SC + SL2), iff(SC > nz(Trail2[1], 0), SC - SL2, SC + SL2)))

// Bar color for trade signal //
Green = Trail1 > Trail2 and close > Trail2 and low > Trail2
Blue = Trail1 > Trail2 and close > Trail2 and low < Trail2
Red = Trail2 > Trail1 and close < Trail2 and high < Trail2
Yellow = Trail2 > Trail1 and close < Trail2 and high > Trail2

// Signals //
Bull = barssince(Green) < barssince(Red)
Bear = barssince(Red) < barssince(Green)

Buy = crossover(Trail1, Trail2)
Sell = crossunder(Trail1, Trail2)

TS1 = plot(Trail1, "Fast Trail", style=plot.style_line,color=Trail1 > Trail2 ? color.blue : color.yellow, linewidth=2)
TS2 = plot(Trail2, "Slow Trail", style=plot.style_line,color=Trail1 > Trail2 ? color.green : color.red, linewidth=2)
fill(TS1, TS2, Bull ? color.green : color.red, transp=90)

plotcolor = input(true, "Paint color on chart", input.bool)

bcl = iff(plotcolor == 1, Blue ? color.blue : Green ? color.lime : Yellow ? color.yellow : Red ? color.red : color.white, na)
barcolor(bcl)

if Buy
    strategy.entry("Buy", strategy.long, comment="Buy")
    
if Sell
    strategy.entry("Sell", strategy.short, comment="Sell")



Mais.