- Quadrado
- Estratégia de trail stop baseada no indicador UT Bot
Estratégia de trail stop baseada no indicador UT Bot
Autora:
ChaoZhang, Data: 2024-03-11 11:17:33
Tags:
Resumo
Esta estratégia é baseada no indicador UT Bot desenvolvido pela QuantNomad e incorpora a ideia de um stop loss de trailing. O código original foi escrito por @Yo_adriiiiaan e modificado por @HPotter. A estratégia será usada em conjunto com os conceitos de dinheiro inteligente da LuxAlgo.
Princípio da estratégia
Os principais princípios desta estratégia são os seguintes:
- Quando o preço de fechamento for superior à média móvel simples de 50 períodos, é introduzido um negócio longo.
- Para posições longas, um preço de stop loss é definido. O preço de stop loss é de 80% (1-20%) do preço de fechamento atual.
- Para posições curtas, um preço de stop loss de trailing também é definido. O preço de stop loss de trailing é 120% (1+20%) do preço de fechamento atual. O preço de stop loss de trailing desce com a queda dos preços, mas não sobe.
- ATR (Average True Range) é usado como referência para a parada de trail. O método de cálculo para o preço de parada de trail ATR é: ao subir, tomar o maior do preço anterior de parada de trail ATR e (preço de fechamento atual - ATR * Valor chave); ao descer, tomar o menor do preço anterior de parada de fechamento ATR e (preço de fechamento atual + ATR * Valor chave). O Valor chave é um parâmetro definido pelo usuário usado para ajustar a sensibilidade da parada de trail.
- Com base na ruptura do preço de parada de trail ATR, a direção da posição atual é determinada. Quando o preço ultrapassa o preço de parada de trail ATR, uma posição longa é realizada; quando o preço ultrapassa o preço de parada de trail ATR, uma posição curta é realizada; em outros casos, o status da posição atual permanece inalterado.
Análise das vantagens
- A definição do trailing stop pode proteger efetivamente os lucros, permitindo que a estratégia obtenha mais ganhos nos mercados de tendência.
- A fixação de stop loss separadamente para posições longas e curtas pode adaptar-se a diferentes condições de mercado.
- A utilização do ATR como referência para a posição de stop loss permite o ajustamento dinâmico da posição de stop loss, tornando-a mais flexível e eficaz.
- O parâmetro Key Value é fornecido para otimização do utilizador, que pode ser ajustado de acordo com diferentes variedades e ciclos para melhorar a adaptabilidade.
Análise de riscos
- Em mercados instáveis, as paradas frequentes podem conduzir a transacções excessivas, aumentando os custos de comissão e reduzindo os retornos.
- O método do trailing stop de percentagem fixa é relativamente simples e pode não ser capaz de lidar bem com as flutuações de preços em algumas condições de mercado.
- A estratégia considera apenas paradas de atraso e não estabelece metas de lucro de atraso, que podem perder algumas oportunidades de lucro.
- A escolha dos parâmetros tem um impacto significativo no desempenho da estratégia e os parâmetros inadequados podem acarretar maiores riscos de utilização.
Direcção de otimização
- Outros indicadores ou condições, como o volume de negociação e a volatilidade, podem ser considerados para otimizar as condições de entrada e melhorar a fiabilidade do sinal.
- Para o método de cálculo do trailing stop, podem ser explorados métodos mais complexos e eficazes, tais como a utilização de stop loss parabólico ou stop loss dinâmico porcentual.
- Pode ser adicionado um mecanismo de meta de lucro de atraso, por exemplo, estabelecendo metas de lucro dinâmicas baseadas no ATR ou em percentagens para melhor garantir os lucros.
- A otimização de parâmetros pode ser realizada para diferentes variedades e ciclos para encontrar as combinações de parâmetros mais adequadas.
Resumo
Baseada no indicador UT Bot, esta estratégia incorpora lógica de stop de trail, que pode proteger os lucros nos mercados de tendência. Ao mesmo tempo, a estratégia define stop-loss separadamente para posições longas e curtas, tornando-a altamente adaptável. Usando ATR como referência para a parada de trail permite o ajuste dinâmico da posição de stop loss, melhorando a flexibilidade. No entanto, esta estratégia pode enfrentar o risco de altos custos de transação devido a freqüentes stop-outs em mercados agitados, e não possui uma meta de lucro de trail, o que pode perder oportunidades de lucro. Além disso, a escolha de parâmetros tem um impacto significativo no desempenho da estratégia.
No futuro, a estratégia pode ser melhorada por otimização de condições de entrada, exploração de métodos mais complexos de trailing stop, adição de um mecanismo de meta de lucro de trailing e otimização de parâmetros para diferentes variedades e ciclos, a fim de obter retornos mais estáveis.
/*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.