Esta estratégia usa duas paradas ATR com parâmetros diferentes para definir níveis de stop loss dinâmicos - uma parada rápida e uma parada lenta. Estabelece posições longas com base em quebras de preço dos diferentes níveis de parada e sai de posições usando as paradas de trail. O objetivo é usar paradas ATR para definir níveis razoáveis de stop loss, maximizando a capacidade de seguir a tendência.
A estratégia usa o indicador ATR para calcular dois níveis de stop loss. A parada rápida usa o ATR de 5 períodos multiplicado por 0,5 como a distância de parada. A parada lenta usa o ATR de 10 períodos multiplicado por 3 como a distância de parada. Quando o preço ultrapassa o nível de parada rápida, uma posição longa é estabelecida. Quando o preço continua a ultrapassar o nível de parada lenta, a parada é ajustada ao nível de parada lenta. Se o preço descer, o nível de parada é ajustado com base nas relações de cruzamento.
A lógica é:
Calcular a parada rápida Trail1: ATR de 5 períodos * 0,5
Calcular a parada lenta Trail2: ATR de 10 períodos * 3
Quando o preço ultrapassar o nível do Trail1, estabeleça uma posição longa.
Quando o preço continua a quebrar acima do Trail2, ajuste a parada para o Trail2
Se o preço descer quebrando Trail1, ajuste a parada de volta para Trail1
Se o preço continuar a descer quebrando Trail2, ajuste a parada para Trail2
Finalmente, se o preço atingir o nível de parada, saia da posição com stop loss
Desta forma, a estratégia pode maximizar o lucro durante as tendências de alta com as paradas traseiras, enquanto rapidamente para as perdas quando a tendência se inverte.
As paradas ATR definem níveis dinâmicos de paragem de perdas com base na volatilidade do mercado
Mecanismo de dupla suspensão equilibra as perdas de suspensão e as tendências de queda
Direcção longa alinha-se com a tendência de alta geral, maior rentabilidade
Lógica simples e clara, fácil de compreender e implementar
Regras estritas de stop loss limitam as perdas de forma eficaz
Parâmetros ATR inadequados podem causar paradas demasiado largas ou demasiado apertadas
Direção longa tem viés direcional, propensos a paradas nos topos do mercado
Regras de paragem dupla são complexas, podem falhar se não forem definidas corretamente
Nenhum filtro, como cruzamento da EMA, pode causar mau comércio.
Nenhuma gestão de posições ou de riscos, riscos de excesso de negociação
Estes riscos podem ser reduzidos através da otimização dos parâmetros do ATR, da adição de filtros e da aplicação da gestão de riscos.
Otimizar as combinações de parâmetros ATR para obter os melhores resultados
Adicionar filtros como EMA para qualificar sinais de entrada
Incorporar indicadores como o Stoch RSI para vantagem adicional
Adicionar lógica de reentrada para otimizar o gerenciamento de posição
Otimizar as regras de gestão de risco para limitar a perda de parada por negociação
Incorporar análises a nível de mercado para evitar erros de direção
Considere estratégias de tempo mais rápido como horário
Expandir para uma estratégia universal multi-mercado
Implementar motor de negociação de alto desempenho
Com estas melhorias, a estratégia pode ser mais robusta, estável e rentável.
A estratégia usa paradas ATR claras para entradas e saídas longas. As vantagens estão em suas regras estritas de stop loss para limitar as perdas enquanto se seguem tendências.
/*backtest start: 2023-10-25 00:00:00 end: 2023-11-01 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("ATR Trailing Stop Strategy (Long Position Only)", overlay=true) SC = input(close, "Source", input.source) // Fast Trail AP1 = input(5, "Fast ATR period", input.integer) AF1 = input(0.5, "Fast ATR multiplier", input.float) SL1 = AF1 * atr(AP1) Trail1 = 0.0 Trail1 := iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), iff(SC < nz(Trail1[1], 0), SC + SL1, na)) // Slow Trail AP2 = input(10, "Slow ATR period", input.integer) AF2 = input(3, "Slow ATR multiplier", input.float) SL2 = AF2 * atr(AP2) Trail2 = 0.0 Trail2 := iff(SC > nz(Trail2[1], 0) and SC[1] > nz(Trail2[1], 0), max(nz(Trail2[1], 0), SC - SL2), iff(SC < nz(Trail2[1], 0), SC + SL2, na)) Green = Trail1 > Trail2 and close > Trail2 and low > Trail2 Buy = crossover(Trail1, Trail2) plotshape(Buy, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) strategy.entry("Buy", strategy.long, when = Buy) var float trailingStopPrice = na if (Trail2 > trailingStopPrice) trailingStopPrice := Trail2 if (crossover(Trail1, Trail2)) trailingStopPrice := Trail2 strategy.exit("Exit", from_entry = "Buy", stop=trailingStopPrice)