
Visão geral
A 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 loss dinâmico. Quando os preços estão acima do SMA, o preço de stop loss dinâmico baseado no ATR aumenta com o aumento do preço.
Princípio da estratégia
- Calcule o SMA de 50 dias, quando o preço de fechamento é maior que o SMA de 50 dias.
- Calcule o indicador ATR, ATR de 10 ciclos, multiplicado por um valor-chave (default 3) para obter a amplitude de parada nLoss.
- Calcule o preço de stop dinâmico xATRTrailingStop, com um valor inicial de 0。
- Quando o preço de fechamento e o preço de fechamento anterior são maiores do que o preço de parada anterior, o novo preço de parada é o maior valor entre o preço de parada anterior e o preço de fechamento - nLoss.
- Quando o preço de fechamento e o preço de fechamento anterior são menores do que o preço de parada anterior, o novo preço de parada é o menor entre o preço de parada anterior e o preço de fechamento anterior.
- Em outros casos, o novo preço de stop-loss é: (preço de fechamento - nLoss) ou (preço de fechamento + nLoss) [2].
- Quando o preço de fechamento cai abaixo do preço de parada dinâmico, a posição é fechada.
- O ponto de parada é marcado em diferentes cores, o ponto de parada de cabeça múltipla é verde, o ponto de parada de cabeça vazia é vermelho e o ponto de parada de cabeça vazia é azul em outras situações.
Análise de vantagens
- O mecanismo de stop loss dinâmico pode proteger os lucros em situações de tendência e reduzir o risco de retração. Em comparação com o stop loss fixo, o stop loss dinâmico é mais flexível e pode se adaptar a diferentes condições de mercado.
- A amplitude de parada é calculada com base no indicador ATR, o ATR é capaz de refletir bem a magnitude da volatilidade do mercado, portanto, a distância de parada é automaticamente ajustada de acordo com a volatilidade do cenário recente, aumentando o espaço de parada quando a volatilidade aumenta e diminuindo o espaço de parada quando a volatilidade diminui.
- Usando o SMA como base de julgamento de tendências, é possível capturar uma tendência relativamente clara. Abrir mais opções acima do SMA, pode intervir no início da tendência e obter maior espaço de lucro.
- Permite ao usuário configurar os parâmetros do ciclo e do valor-chave do ATR, permitindo a flexibilidade de ajustar os parâmetros da política para adaptar-se às características de diferentes variedades e períodos.
Análise de Riscos
- Em situações de incerteza de tendências ou de turbulência, a estratégia pode levar a uma frequente abertura de posições baixas, resultando em custos de negociação mais elevados e lucros mais baixos.
- A estratégia só faz mais lógica, não pode lucrar em uma tendência de queda e enfrenta o risco de um mercado unilateral. Pode considerar a adição de lógica de tomada de posição, para realizar negociações bidirecionais.
- O ponto de parada é baseado no cálculo do ATR. Em situações de forte volatilidade, o espaço de parada pode ser excessivo, aumentando o risco. Pode-se considerar a criação de um limite máximo de parada para controlar o máximo de perdas em uma única transação.
- A escolha inadequada de parâmetros pode causar falha na estratégia. Por exemplo, a escolha de um ciclo ATR muito pequeno pode causar um stop loss muito sensível e com frequência; o excesso pode não parar o stop loss a tempo e aumentar os prejuízos.
Direção de otimização
- Adicionando a lógica do shorting, você também pode lucrar em uma tendência de queda, aumentando a adaptabilidade da estratégia. Você pode abrir uma ordem vazia quando o preço cai abaixo do SMA, também usando a lógica de stop loss dinâmica.
- Introduzir a gestão de posições em aberto, ajustando o tamanho das posições de acordo com a intensidade da tendência. Aumentar a posição quando a tendência é forte, aumentando o lucro; reduzir a posição quando a tendência é mais fraca, controlando o risco.
- Otimizar a lógica de stop loss, definindo um limite máximo de stop loss para evitar perdas excessivas em situações extremas. Além disso, pode-se considerar o estabelecimento de um ponto de parada, para que o posicionamento seja eliminado quando os ganhos esperados forem alcançados, em vez de ser mantido até o stop loss.
- Optimização de parâmetros, procurando a melhor configuração de parâmetros através de diferentes combinações de parâmetros. Pode-se usar métodos de otimização inteligente, como algoritmos genéticos, para aumentar a eficiência da otimização.
- Considere adicionar mais filtros, como volume de negociação, volatilidade e outros indicadores, para melhor julgar tendências e riscos, aumentando a confiabilidade do sinal.
Resumir
A estratégia baseia-se em ATR e SMA indicadores para implementar um sistema de negociação de tracking stop loss dinâmico, que pode ajustar automaticamente a posição de parada em condições de tendência, para proteger os lucros e controlar o risco. A lógica da estratégia é clara, as vantagens são evidentes, mas também existem algumas limitações e pontos de risco.
Código-fonte da estratégia
/*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")