- Quadrado
- Estratégia dinâmica de suspensão de tração baseada no ATR e no SMA
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:
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
- 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.
- 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.
- 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).
- Quando o preço de fechamento cair abaixo do preço dinâmico de stop loss, feche a posição.
- 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
- O mecanismo de stop loss dinâmico pode proteger os lucros e reduzir o risco de retração nos mercados de tendência.
- 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.
- O uso da SMA como base para o julgamento da tendência pode capturar mercados de tendência relativamente claros.
- 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
- 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.
- Esta estratégia só tem lógica longa e não pode lucrar numa tendência descendente, enfrentando o risco de um mercado unilateral.
- 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.
- 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
- Adicione lógica curta para lucro em tendências descendentes e melhore a adaptabilidade da estratégia.
- 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.
- Otimize a lógica de stop loss e defina um intervalo máximo de stop loss para evitar perdas excessivas em situações extremas.
- Otimizar parâmetros atravessando diferentes combinações de parâmetros para encontrar as melhores configurações de parâmetros.
- 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.