Estratégia de trailing stop loss ATR dinâmica


Data de criação: 2023-12-11 14:24:18 última modificação: 2023-12-11 14:24:18
cópia: 0 Cliques: 755
1
focar em
1621
Seguidores

Estratégia de trailing stop loss ATR dinâmica

Visão geral

Esta estratégia é um mecanismo de parada de rastreamento dinâmico, baseado no ATR, que permite ajustar a posição de parada em tempo real, garantindo a parada, para obter maiores lucros.

Princípio da estratégia

A estratégia utiliza o ATR rápido do ciclo 5 e o ATR lento do ciclo 10 para construir um stop loss de dupla camada. Quando o preço se move na direção favorável, a camada rápida inicia o seguimento pela primeira vez, apertando a posição de parada; Quando o preço retorna a curto prazo, a posição de parada da camada lenta pode evitar a parada prematura.

Especificamente, a distância de parada de uma camada rápida é de 0,5 vezes o ATR de 5 ciclos, e a distância de parada de uma camada lenta é de 3 vezes o ATR de 10 ciclos. Quando a camada rápida sobe, gera um sinal de compra; Quando a camada rápida desce, gera um sinal de venda. A linha de parada também é atualizada em tempo real e é desenhada abaixo da curva de preço.

Análise de vantagens

A maior vantagem da estratégia é que pode ser dinamicamente ajustado a posição de parada, com o objetivo de maximizar o lucro, desde que a parada é garantida. Em comparação com a distância de parada fixa, a linha de parada ATR dinâmica pode ser ajustada de acordo com a volatilidade do mercado, reduzindo a probabilidade de a parada ser ativada.

Além disso, a dupla camada de ATR design pode equilibrar a sensibilidade de parada. A camada rápida responde rapidamente, e a camada lenta pode filtrar o ruído de curta duração, evitando a parada prematura.

Análise de Riscos

O principal risco desta estratégia é se a configuração da distância de parada é razoável. Se o múltiplo ATR for muito grande, a amplitude de parada não acompanhará a operação do preço. Se o múltiplo ATR for muito pequeno, será facilmente interrompido pelo ruído de curto prazo.

Além disso, em situações de liquidação, o ATR é menor, está mais perto da linha de parada e é mais propenso a ser interrompido com frequência. Portanto, a estratégia é mais adequada para variedades com certa volatilidade.

Direção de otimização

Pode-se experimentar diferentes combinações de parâmetros do ciclo ATR para encontrar o melhor equilíbrio. Além disso, pode-se considerar o uso em conjunto com outros indicadores, como indicadores de tendência para determinar o estágio do mercado, de modo a ajustar dinamicamente o tamanho do múltiplo ATR.

Também pode ser estudada a possibilidade de substituir o indicador ATR. A alteração do ATR para valores de indicadores como DKVOL, HRANGE ou porcentagem de ATR pode ter um melhor efeito de parada de perda.

Resumir

A estratégia é baseada em indicadores ATR e tem um mecanismo de rastreamento dinâmico de dois níveis, que permite obter maiores lucros e evitar perdas excessivas. A estratégia pode ajustar os parâmetros de forma flexível de acordo com as características do mercado e da variedade para obter o melhor efeito de perda.

Código-fonte da estratégia
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@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 period", input.integer)  // ATR Period
AF2 = input(3, "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)

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, display=display.none)
TS2 = plot(Trail2, "Slow Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.green : color.red, linewidth=2)
fill(TS1, TS2, Bull ? color.new(color.green, 90) : color.new(color.red, 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.close("Buy")