Estratégia dinâmica ATR de tração de paragem de perdas

Autora:ChaoZhang, Data: 2023-12-11 14:24:18
Tags:

img

Resumo

Esta estratégia baseia-se no mecanismo dinâmico de stop loss designado com o indicador ATR para ajustar a stop loss em tempo real, garantindo simultaneamente uma stop loss eficaz para maximizar os lucros.

Estratégia lógica

A estratégia usa o período ATR rápido 5 e o período ATR lento 10 para construir um stop loss dinâmico de rastreamento de duas camadas. Quando o preço corre em uma direção favorável, a camada rápida ativará primeiro o stop de rastreamento para apertar o stop loss; quando há um pullback de curto prazo, a camada lenta pode evitar o stop out prematuro. Enquanto isso, o cruzamento entre as camadas rápidas e lentas serve como sinal de negociação.

Especificamente, a distância de stop loss da camada rápida é 0,5 vezes o ATR de 5 períodos, e a distância de stop loss da camada lenta é 3 vezes o ATR de 10 períodos. Um sinal de compra é gerado quando a camada rápida quebra acima da camada lenta, e um sinal de venda é gerado quando a camada rápida quebra abaixo da camada lenta. A linha de stop loss também é atualizada em tempo real e traçada abaixo da curva de preço.

Análise das vantagens

A maior vantagem desta estratégia é que pode ajustar dinamicamente a posição de stop loss para maximizar os lucros, garantindo uma perda de stop efetiva.

Além disso, o projeto ATR de duas camadas equilibra a sensibilidade da perda de parada. A camada rápida responde rapidamente e a camada lenta pode filtrar o ruído de curto prazo para evitar a perda de parada prematura.

Análise de riscos

O principal risco desta estratégia reside em saber se a configuração da distância de stop loss é razoável. Se o multiplicador ATR for definido muito alto, o intervalo de stop loss não acompanhará o movimento do preço. Se o multiplicador ATR for muito pequeno, ele é propenso a ser parado por ruídos de curto prazo. Portanto, os parâmetros precisam ser ajustados de acordo com as características de diferentes variedades.

Além disso, em um mercado de intervalo, o valor ATR é menor e a linha de stop loss é mais próxima, o que pode facilmente levar a stop loss frequentes.

Orientações de otimização

Para encontrar o equilíbrio ideal, podem ser tentadas diferentes combinações de parâmetros do ciclo ATR, que podem ser combinados com outros indicadores, como os indicadores de tendência, para avaliar o estágio do mercado, de modo a ajustar dinamicamente o tamanho do multiplicador ATR.

É também possível estudar alternativas ao indicador ATR, substituindo o ATR por DKVOL, HRANGE ou ATR Percentage, etc. pode ser alcançado um melhor efeito de stop loss.

Resumo

Esta estratégia projeta um mecanismo de rastreamento dinâmico de duas camadas baseado no indicador ATR para maximizar os lucros, evitando perda de parada excessiva.


/*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")


Mais.