Estratégia de stop loss móvel ATR baseada no indicador UT Bot


Data de criação: 2024-03-11 11:17:33 última modificação: 2024-03-11 11:17:33
cópia: 0 Cliques: 2014
1
focar em
1617
Seguidores

Estratégia de stop loss móvel ATR baseada no indicador UT Bot

Visão geral

A estratégia é baseada no indicador UT Bot desenvolvido pela QuantNomad, combinado com o pensamento de stop loss móvel. O código original foi escrito por @Yo_adriiiiaan, com modificações feitas por @HPotter. A estratégia será usada em conjunto com o Smart Money Concepts da LuxAlgo. A estratégia está atualmente em fase de teste.

Princípio da estratégia

Os principais princípios da estratégia são os seguintes:

  1. Quando o preço de fechamento for superior a uma média móvel simples de 50 períodos, faça mais transações.
  2. Para as posições multi-cabeça, configure um preço de parada móvel. O preço de parada móvel é de 80% (de 1 a 20%) do preço de encerramento atual. O preço de parada móvel sobe com a subida dos preços, mas não desce, protegendo os lucros.
  3. Para posições em aberto, também configure o preço de parada móvel. O preço de parada móvel é de 120% do preço de fechamento atual. O preço de parada móvel desce com a queda do preço, mas não sobe.
  4. Usando o ATR (Average True Range) como base de referência para um stop-loss móvel. O método de cálculo do preço de stop-loss móvel do ATR é: ao mover-se para cima, pegar o preço de stop-loss móvel do ATR anterior e o preço de fechamento atual - ATR*Key Value) maior dos dois; quando movido para baixo, pegar o preço de stop loss do ATR anterior e pegar o preço de fechamento atual + ATR*Key Value) é o menor dos dois. O Key Value é um parâmetro definido pelo usuário para ajustar a sensibilidade do stop loss móvel.
  5. De acordo com a ruptura do preço de parada móvel do ATR, julgar a direção da posição atual. Quando o preço se eleva acima do preço de parada móvel do ATR, mantenha uma posição superior; quando o preço se move para baixo, mantenha uma posição de cabeça vazia; em outros casos, mantenha a posição atual.

Análise de vantagens

  1. A configuração de stop loss móvel protege muito bem os lucros, permitindo que a estratégia obtenha mais ganhos em situações de tendência.
  2. O Stop Loss é definido para a posição de multi-cabeça e para a posição de cabeça vazia, respectivamente.
  3. Usando o ATR como base de referência para o stop loss, pode-se ajustar a posição de stop loss de forma dinâmica, mais flexível e eficaz.
  4. Parâmetros de Key Value são fornecidos para otimização do usuário, podendo ser ajustados de acordo com diferentes variedades e ciclos, aumentando a adaptabilidade.

Análise de Riscos

  1. Em situações de turbulência, a ocorrência frequente de stop-loss pode levar a excesso de transações, aumentando os custos de comissões e reduzindo os lucros.
  2. O método de stop-loss móvel de porcentagem fixa é relativamente simples e pode não ser adequado para oscilações de preço em algumas situações.
  3. A estratégia considera apenas o stop loss móvel, e sem um stop loss móvel, você pode perder algumas oportunidades de lucro.
  4. A escolha dos parâmetros tem uma grande influência no desempenho da estratégia, e os parâmetros errados podem trazer um maior risco de retração.

Direção de otimização

  1. Pode-se considerar a combinação de outros indicadores ou condições, como volume de transação, taxa de flutuação, etc., para otimizar as condições de entrada e melhorar a confiabilidade do sinal.
  2. Para o cálculo do stop móvel, pode-se explorar métodos mais complexos e eficazes, como o uso de stop paralelo, stop percentual dinâmico, etc.
  3. Pode ser adicionado um mecanismo de stop-loss móvel, por exemplo, a configuração de stop-loss dinâmico com base no ATR ou porcentagem, para melhor bloquear os lucros.
  4. Para diferentes variedades e ciclos, pode ser feita a otimização de parâmetros, para encontrar a combinação de parâmetros mais adequado. Também pode ser ajustado dinamicamente parâmetros de acordo com a mudança do estado do mercado.

Resumir

A estratégia, com base no indicador UT Bot, adiciona a lógica de stop loss móvel, capaz de proteger os lucros em situações de tendência. Ao mesmo tempo, a estratégia configura stop loss para posições de multi-cabeça e de cabeça vazia, sendo altamente adaptável. Usando o ATR como base de referência para stop loss móvel, é possível ajustar dinamicamente a posição de stop loss, aumentando a flexibilidade.

No futuro, a estratégia pode ser aperfeiçoada para obter um lucro mais estável, desde a otimização das condições de entrada, a exploração de métodos de parada móvel mais complexos, a inclusão de mecanismos de parada móvel e a otimização de parâmetros para diferentes variedades e ciclos. Em geral, a estratégia é simples e fácil de entender e implementar, mas há espaço para otimização adicional, vale a pena continuar a explorar e melhorar.

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