Estratégia dinâmica de suspensão de tração baseada no ATR e no SMA

Autora:ChaoZhang, Data: 2024-03-11 11:55:21
Tags:

img

Resumo

Esta estratégia combina o indicador ATR (Average True Range) e o indicador SMA (Simple Moving Average) para implementar um sistema de negociação de stop de tração dinâmico. Quando o preço está acima do SMA, ele abre uma posição longa e define um stop loss dinâmico baseado no ATR. O preço do stop loss continuará a subir à medida que o preço sobe. Quando o preço cai abaixo do preço do stop loss dinâmico, a posição é fechada. A ideia principal desta estratégia é bloquear os lucros e reduzir os pulls nos mercados de tendência usando o stop loss dinâmico.

Princípios de estratégia

  1. Calcule a SMA de 50 dias. Quando o preço de fechamento for maior que a SMA de 50 dias, abra uma posição longa.
  2. Calcular o indicador ATR com um período de 10, multiplicado por um valor chave (default é 3) para obter o intervalo de stop loss nLoss.
  3. Calcular o preço dinâmico de stop loss xATRTrailingStop, com um valor inicial de 0.
    • Quando o preço de fechamento e o preço de fechamento anterior forem ambos superiores ao preço de stop loss anterior, o novo preço de stop loss é o maior do preço de stop loss anterior e (preço de fechamento - nLoss).
    • Quando o preço de fechamento e o preço de fechamento anterior forem ambos inferiores ao preço de stop loss anterior, o novo preço de stop loss é o menor do preço de stop loss anterior e (preço de fechamento + nLoss).
    • Em outros casos, o novo preço de stop loss é (preço de encerramento - nLoss) ou (preço de encerramento + nLoss).
  4. Quando o preço de fechamento cair abaixo do preço dinâmico de stop loss, feche a posição.
  5. Os pontos de stop loss são marcados com cores diferentes: verde para stop loss longo, vermelho para stop loss curto e azul para outros casos.

Análise das vantagens

  1. O mecanismo de stop loss dinâmico pode proteger os lucros e reduzir o risco de retração nos mercados de tendência.
  2. O intervalo de stop loss é calculado com base no indicador ATR. O ATR pode refletir bem o tamanho da volatilidade do mercado, de modo que a distância de stop loss será ajustada automaticamente de acordo com a volatilidade das condições recentes do mercado.
  3. O uso da SMA como base para o julgamento da tendência pode capturar mercados de tendência relativamente claros.
  4. Permite aos utilizadores definir os parâmetros do período ATR e dos valores-chave, que podem ajustar de forma flexível os parâmetros da estratégia para se adaptarem às características das diferentes variedades e ciclos.

Análise de riscos

  1. Em mercados pouco claros ou em oscilação, esta estratégia pode provocar abertura e encerramento frequentes de posições, levando a um aumento dos custos de transacção e a uma redução dos lucros.
  2. Esta estratégia só tem lógica longa e não pode lucrar numa tendência descendente, enfrentando o risco de um mercado unilateral.
  3. O ponto de stop loss é baseado no cálculo ATR. Quando o mercado flutua violentamente, o espaço de stop loss pode ser muito grande, levando a um aumento do risco.
  4. Por exemplo, se o período ATR for muito pequeno, pode levar a uma perda de parada excessivamente sensível e a gatilhos frequentes; se for muito grande, pode não parar a perda a tempo e amplificar as perdas.

Direcção de otimização

  1. Adicione lógica curta para lucro em tendências descendentes e melhore a adaptabilidade da estratégia.
  2. Introduzir a gestão de posições longas e curtas para ajustar o tamanho da posição de acordo com a força da tendência; aumentar as posições quando a tendência é forte para aumentar os retornos; diminuir as posições quando a tendência é fraca para controlar o risco.
  3. Otimize a lógica de stop loss e defina um intervalo máximo de stop loss para evitar perdas excessivas em situações extremas.
  4. Otimizar parâmetros atravessando diferentes combinações de parâmetros para encontrar as melhores configurações de parâmetros.
  5. Considerar a adição de mais condições de filtragem, tais como indicadores de volume de negociação e volatilidade, para melhor avaliar as tendências e os riscos e melhorar a fiabilidade dos sinais.

Resumo

Esta estratégia implementa um sistema dinâmico de negociação de stop trailing baseado nos indicadores ATR e SMA, que pode ajustar automaticamente a posição de stop loss nos mercados de tendência para proteger os lucros e controlar os riscos. A lógica da estratégia é clara e tem vantagens óbvias, mas também tem algumas limitações e pontos de risco. Através de otimização e melhoria razoáveis, como adição de lógica curta, otimização do gerenciamento de posição, definição de stop loss máximo, etc., a robustez e lucratividade da estratégia podem ser melhoradas. Em aplicações práticas, é necessário ajustar de forma flexível os parâmetros da estratégia de acordo com diferentes variedades e ciclos de negociação e controlar estritamente os riscos. Em geral, esta estratégia fornece uma ideia viável para negociação quantitativa e é digna de mais exploração e otimização.


/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Trailingstop", overlay=true)

if close > sma(close, 50)
    strategy.entry("long", strategy.long)

// Trailing stop loss for long positions
Trailperc = 0.20
price_stop_long = 0.0

if (strategy.position_size > 0)
    stopValue = close * (1 - Trailperc)
    price_stop_long := max(stopValue, price_stop_long[1])
else
    price_stop_long := 0

if (strategy.position_size > 0)
    strategy.exit(id="stoploss_long", stop=price_stop_long)

// Trailing stop loss for short positions
Trailperc_short = 0.20
price_stop_short = 0.0

if (strategy.position_size < 0)
    stopValue_short = close * (1 + Trailperc_short)
    price_stop_short := min(stopValue_short, price_stop_short[1])
else
    price_stop_short := 0

if (strategy.position_size < 0)
    strategy.exit(id="stoploss_short", stop=price_stop_short)

// ATR Trailing Stop for visualization
keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5)
atrperiod = input(10, title="ATR Period")
xATR = atr(atrperiod)
nLoss = keyvalue * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
   iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))

pos = 0  
pos :=   iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
   iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))

xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue

plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")

Mais.