Estratégia dinâmica de parada de média móvel dupla

Autora:ChaoZhang, Data: 2024-02-26 11:13:17
Tags:

img

Resumo

Esta é uma estratégia dinâmica de parada de trailers baseada em linhas de EMA duplas. Ele usa EMAs de 9 dias e 20 dias para determinar a direção da tendência do mercado, combinado com o indicador RSI para filtrar falhas. Ele também usa o indicador ATR para calcular níveis de stop loss dinâmicos e tomar lucro. Esta estratégia é adequada para participações de médio a longo prazo.

Estratégia lógica

A estratégia usa a EMA de 9 dias como linha de curto prazo e a EMA de 20 dias como linha de médio prazo para determinar a tendência de preços. Ela fica longa quando o preço cruza acima da linha de curto prazo e o preço de fechamento é maior do que o máximo do dia anterior, com RSI inferior a 70 e fechar maior do que a EMA de 20 dias menos 1 ATR. Ela fica curta quando o preço cruza abaixo da linha de curto prazo e o preço de fechamento é menor do que o mínimo do dia anterior, com RSI maior do que 30 e fechar maior do que a EMA de 20 dias menos 1 ATR.

O stop loss é definido no preço de fechamento menos 1,5 vezes o ATR. O take profit é definido no preço de fechamento mais o ATR multiplicado por um coeficiente de take profit.

Análise das vantagens

  1. Utilizando EMAs duplas para determinar a principal tendência do mercado, evita ser pressionado pelo ruído
  2. Combinando o indicador RSI para filtrar falhas, melhora a precisão de entrada
  3. A duração do prazo de validade é de três meses.
  4. A tendência de stop loss maximiza os lucros

Análise de riscos

  1. As linhas EMA têm um efeito de atraso, podendo perder oportunidades a curto prazo
  2. A definição incorreta dos parâmetros do RSI pode deixar as entradas de lado
  3. Relação stop loss/take profit imprópria pode ser demasiado frouxa ou rigorosa
  4. O stop loss pode ser penetrado durante oscilações violentas do mercado

Orientações de otimização

  1. Teste diferentes combinações de EMA para encontrar parâmetros ideais
  2. Otimizar os parâmetros do RSI para equilibrar a precisão de entrada e as oportunidades de captura
  3. Teste diferentes rácios stop loss/take profit para encontrar a configuração ideal
  4. Adicionar mais condições de filtro para reduzir a probabilidade de penetração de perda de parada

Resumo

No geral, esta é uma estratégia de detenção relativamente estável de médio a longo prazo. Ele usa EMAs duplas para determinar a tendência principal do mercado, evitando ser afetado pelo ruído de curto prazo. A adição de RSI também filtra falhas de ruptura até certo ponto. Além disso, o mecanismo dinâmico stop loss / take profit permite que a estratégia ajuste com base na volatilidade do mercado. No entanto, ainda há riscos como atraso das médias móveis e potencial de penetração de stop loss. Precisamos encontrar a configuração ideal através de ajuste de parâmetros e otimização durante a aplicação prática.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("CJTrade", overlay=true)

short = ema(close, 9)
medium = ema(close, 20)
long = ema(close, 50)
very_long = ema(close, 200)

plot(short, color=color.gray, linewidth=1)
plot(medium, color=color.red, linewidth=1)
plot(long, color=color.black, linewidth=1)
plot(very_long, color=color.blue, linewidth=1)

rsiValue = rsi(close, 14)

near20EMA = close > medium - atr(14)

longCond = crossover(close[1], short) and close >= high[1] and rsiValue < 70 and near20EMA
shortCond = crossunder(close[1], short) and close <= low[1] and rsiValue > 30 and near20EMA

strategy.entry("Long", strategy.long, when=longCond)
strategy.entry("Short", strategy.short, when=shortCond)

atrValue = atr(14)
stopLossLevel = close - atrValue * 1.5

// Dynamic take profit level based on ATR
takeProfitMultiplier = input(2, title="Take Profit Multiplier", minval=0.1, maxval=10, step=0.1)
takeProfitLevel = close + atrValue * takeProfitMultiplier

// Trailing stop loss for long positions
longTrailingStop = close - atrValue * 2
strategy.exit("LongTrailingStop", from_entry="Long", loss=longTrailingStop)

// Trailing stop loss for short positions
shortTrailingStop = close + atrValue * 2
strategy.exit("ShortTrailingStop", from_entry="Short", loss=shortTrailingStop)

strategy.exit("Take Profit/Stop Loss", from_entry="Long", loss=stopLossLevel, profit=takeProfitLevel)
strategy.exit("Take Profit/Stop Loss", from_entry="Short", loss=stopLossLevel, profit=takeProfitLevel)


Mais.