
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:
- Quando o preço de fechamento for superior a uma média móvel simples de 50 períodos, faça mais transações.
- 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.
- 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.
- 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.
- 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
- 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.
- O Stop Loss é definido para a posição de multi-cabeça e para a posição de cabeça vazia, respectivamente.
- 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.
- 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
- 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.
- 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.
- A estratégia considera apenas o stop loss móvel, e sem um stop loss móvel, você pode perder algumas oportunidades de lucro.
- 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
- 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.
- 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.
- 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.
- 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")