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.
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.
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.
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.
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.
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")