
A ideia central desta estratégia é usar o indicador de amplitude real média (ATR) para definir uma linha de parada de seguimento adaptável, para maximizar a proteção de posições lucrativas e evitar perdas prematuras. O indicador ATR é capaz de capturar dinamicamente a volatilidade do mercado, ajustando a distância de parada de acordo com as flutuações do mercado, garantindo a redução do risco de perda e minimizando a probabilidade de perda de parada.
Esta estratégia usa o valor médio de N ciclos do indicador ATR multiplicado por um múltiplo como a distância de parada básica. Quanto maior o valor do ATR, indicando que a distância de parada de mercado é mais ampla; quanto menor o valor do ATR, a distância de parada é mais estreita. Isso permite ajustar a distância de parada dinamicamente de acordo com a volatilidade do mercado.
A estratégia usa a seguinte lógica central:
Calcule o valor do ATR para o período nATRPeriod.
A distância de parada básica nLoss é obtida multiplicando o valor de ATR por o múltiplo ((nATRMultip)).
A atualização da linha de parada xATRTrailingStop baseada nos pontos altos e baixos atuais e no período anterior.
Se a baixa atual desencadeou a linha de parada do ciclo anterior, a parada é movida para a distância nLoss abaixo da baixa.
Se o pico atual desencadeou a linha de parada do ciclo anterior, o pico move-se abaixo da linha de parada para a distância nLoss acima do pico.
Se o stop não for acionado, o stop será ajustado de acordo com a distância entre o preço de fechamento e a linha de stop.
Adição de distância de proteção de linha de sombra opcional para otimizar ainda mais a linha de parada.
Trace a trajetória da faixa de Bryn para visualizar o limite superior e inferior da linha de stop loss.
Determine a direção da posição com base na cor da linha de parada.
A estratégia usa o indicador ATR de forma flexível, permitindo que a linha de stop-loss se adapte às flutuações do mercado, garantindo uma distância de stop-loss razoável e evitando, na medida do possível, a perda de posição desnecessária por causa de um stop-loss demasiado radical.
A estratégia tem as seguintes vantagens:
O ATR é usado para ajustar a distância de parada de forma dinâmica, adaptando-se a diferentes condições de mercado.
Os parâmetros de multiplicação podem ser personalizados, permitindo o ajuste flexível da distância de parada.
Junte-se à órbita da faixa de Bryn para formar o limite superior e inferior da visualização da linha de parada.
A proteção de linha de sombra é opcional, para evitar o “whipsaw” da cidade em choque.
Pode ser usado como um tracking stop loss, permitindo a retirada máxima de posições lucrativas.
A estratégia é clara e fácil de entender, os parâmetros são menos fáceis de otimizar.
Pode ser usado em várias variedades e ciclos, com uma ampla área de aplicação.
A estratégia também apresenta alguns riscos que devem ser lembrados:
O indicador ATR está atrasado em responder a surpresas do mercado, o que pode levar a um atraso excessivo na distância de parada.
A multiplicação excessiva também pode levar a uma distância de parada muito grande, aumentando o risco de perdas.
A proteção de linha de sombra deixa a linha de parada muito frouxa quando a vibração aumenta.
Não há regras de entrada e não há uma estratégia de entradas/saidas.
Os parâmetros de otimização devem ser testados repetidamente para adaptar-se a diferentes variedades e ciclos.
A ruptura do limite de perda pode levar à expansão dos prejuízos e requer uma gestão eficaz dos fundos.
A estratégia pode ser melhorada nos seguintes aspectos:
Testar diferentes parâmetros de ciclo ATR para otimizar a distância de parada.
Ajustar os parâmetros do múltiplo para encontrar um equilíbrio entre a distância de parada e a probabilidade de parada.
Optimizar os parâmetros do ciclo de proteção da linha de sombra para evitar a whipsaw.
Tente adicionar condições de entrada em uma base de stop loss, tornando-a uma estratégia de entradas/saidas.
Adicionar indicadores de tendência e ajustar a distância de parada de acordo com a tendência.
Combinando a teoria das ondas, ajuste a distância de parada de acordo com a posição das ondas.
Adição de controle de posição para limitar perdas individuais.
Esta estratégia utiliza a característica de adaptação do indicador ATR, projetando um mecanismo de parada de perda que é capaz de ajustar dinamicamente. Ao mesmo tempo em que garante a parada de perdas, também reduz o mínimo possível o desencadeamento de perdas desnecessárias. O conceito da estratégia é simples e claro, e pode ser otimizado de forma flexível de acordo com suas próprias necessidades.
/*backtest
start: 2022-10-12 00:00:00
end: 2023-10-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
////////////////////////////////////////////////////////////
// Copyright by HPotter v2.0 13/10/2014
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort
// The related article is copyrighted material from Stocks & Commodities Jun 2009
// Modified by River to add Bands, and change color of Trailing Stop and add Wick Protection. Now turned into a Strategy for Backtesting Purposes.
// After backtesting, it seems clear that it functions well as a Trailing Stop, but not as an Entry/Exit strategy.
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stop Bands Strategy[R] ", overlay = true)
nATRPeriod = input(5)
nATRMultip = input(4)
length = input(30, "#Periods of Wick Protection", minval=2)
bType = input(0, "Max [1] or Avg Wick Protection [0]", minval=0, maxval=1)
avgupperwick = sma(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
maxupperwick = highest(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
avglowerwick = sma(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
maxlowerwick = highest(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
upperwick = bType == 0 ? avgupperwick : maxupperwick
lowerwick = bType == 0 ? avglowerwick : maxlowerwick
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
upperband = iff(high < nz(upperband[1], 0) and high[1] < nz(upperband[1], 0), min(nz(upperband[1]), high + nLoss + upperwick), high + nLoss + upperwick)
lowerband = iff(low > nz(lowerband[1], 0) and low[1] > nz(lowerband[1], 0), max(nz(lowerband[1]), low - nLoss - lowerwick), low - nLoss - lowerwick)
xATRTrailingStop = iff(low > nz(xATRTrailingStop[1], 0) and low[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), low - nLoss - lowerwick),
iff(high < nz(xATRTrailingStop[1], 0) and high[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), high + nLoss + upperwick),
// iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), high + nLoss + upperwick, iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), low - nLoss - lowerwick,0))))
iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), upperband[1], iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), lowerband[1],0))))
pos = iff(close[1] > nz(xATRTrailingStop[1], 0) and low <= nz(xATRTrailingStop[1], 0), 1,
iff(close[1] < nz(xATRTrailingStop[1], 0) and high >= nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
color = pos == 1 ? red: pos == -1 ? green : blue
plot(upperband, color=red, title="ATR Upper")
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop", linewidth=2)
plot(lowerband, color=green, title="ATR Lower")
longCondition = (color == green and color[1] == red)
if (longCondition)
strategy.entry("Long", strategy.long)
longExitCondition = (color == red and color[1] == green)
if (longExitCondition)
strategy.close("Long")
shortCondition = (color == red and color[1] == green)
if (shortCondition)
strategy.entry("Short", strategy.short)
shortexitCondition = (color == green and color[1] == red)
if (shortexitCondition)
strategy.close("Short")