Estratégia de negociação cruzada de média móvel dupla

Autora:ChaoZhang, Data: 2023-11-02 14:21:24
Tags:

img

Resumo

Esta estratégia usa o cruzamento de médias móveis duplas como sinais de negociação, combinado com ATR para tendência após a negociação.

Estratégia lógica

A estratégia usa principalmente dois conjuntos de médias móveis para determinar a direção da tendência. A média móvel rápida tem uma duração de 25 dias e a média móvel lenta tem uma duração de 100 dias. Um sinal de compra é gerado quando o MA rápido cruza acima do MA lento e um sinal de venda é gerado quando cruza abaixo.

Para filtrar alguns sinais falsos, a estratégia adiciona um contador de cruzamento chamado crossCount. Os sinais são acionados apenas quando o número de cruzes para o MA rápido no período de lookback (padrão de 25 dias) é menor que maxNoCross (padrão de 10).

Além disso, a estratégia possui um mecanismo de confirmação, em que o sinal também é confirmado se o preço voltar a entrar entre as duas médias móveis após o sinal inicial.

Após a entrada de posições, a estratégia usa o ATR para definir os níveis de stop loss. O ATR mede a faixa de flutuação do preço durante um determinado período, e aqui seu 14x é usado como a distância de parada. O nível de parada flutua de acordo com o movimento do preço.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Usando cruzes de MA duplas com filtragem, pode efetivamente capturar movimentos de tendência fortes, evitando sinais falsos.

  2. O mecanismo de confirmação impede que sejam falsificados por falsas fugas.

  3. O ATR flutuante de stop loss ajuda a maximizar os lucros, limitando simultaneamente os drawdowns.

  4. Tem poucos parâmetros otimizáveis e é fácil de implementar.

  5. Aplicável em todos os mercados, incluindo cripto e ativos tradicionais.

  6. Combina vários indicadores técnicos de robustez.

Análise de riscos

Os principais riscos da estratégia incluem:

  1. Os cruzes frequentes de MA durante os períodos limitados ao intervalo podem causar perdas múltiplas.

  2. A configuração inadequada dos parâmetros ATR pode provocar que os travões sejam demasiado largos ou demasiado apertados.

  3. Grandes lacunas podem desencadear diretamente paradas.

  4. Grandes acontecimentos noticiosos que causam uma enorme volatilidade também podem parar as posições.

  5. Os parâmetros MA inadequados podem levar a tendências ausentes ou a um número excessivo de falsos sinais.

  6. A ação recente dos preços pode tornar as paradas ATR desatualizadas.

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Otimizar os parâmetros de MA para encontrar melhores combinações, testando diferentes períodos e médias ponderadas.

  2. Teste diferentes períodos de ATR para encontrar melhores distâncias de parada.

  3. Adicionar filtros adicionais como picos de volume, indicadores de volatilidade para melhorar a qualidade do sinal.

  4. Incorporar métricas de tendência para evitar problemas em mercados agitados.

  5. Adicionar algoritmos de aprendizagem de máquina para otimizar automaticamente parâmetros através de backtesting.

  6. Procure mais confirmação em prazos mais longos para evitar ruídos de curta duração.

  7. Implementar regras de obtenção de lucros por etapas para escalar posições lucrativas.

Resumo

Esta estratégia combina cruzes de MA duplas, filtragem de tendências, confirmação e paradas ATR dinâmicas para seguir tendências robustas.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("QuantCat Intraday Strategy (15M)", overlay=true)

//MA's for basic signals, can experiment with these values

fastEMA = sma(close, 25)
slowEMA = sma(close, 100)

//Parameters for validation of position

lookback_value = 25
maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets

//Amount of crosses on MA to filter out noise

ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0
ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results
crossCount = (ema25_crossover_sum <= maxNoCross)

//Entries long

agrLong =  ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false

//Entries short

agrShort =  ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false

//ATR

atrLkb = input(14, minval=1, title='ATR Stop Period')
atrRes = input("15",  title='ATR Resolution')
atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb))

//Strategy

longCondition = ((agrLong or consLong) == true)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ((agrShort or consShort) == true)
if (shortCondition)
    strategy.entry("Short", strategy.short)

//Stop multiplier 

stopMult = 4

//horizontal stoplosses

longStop = na
longStop :=  shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] 
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1]

//Strategy exit functions

strategy.exit("Long ATR Stop", "Long", stop=longStop)
strategy.exit("Short ATR Stop", "Short", stop=shortStop)

//Plots 

redgreen = (fastEMA > slowEMA) ? green : red
    
p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) 
p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) 
fill(p1, p2, color=redgreen)

s1 = plot(longStop, style=linebr, color=red, linewidth=2,     title='Long ATR Stop')
s2 = plot(shortStop, style=linebr, color=red, linewidth=2,  title='Short ATR Stop')

fill(p2, s1, color=red, transp=95)
fill(p2, s2, color=red, transp=95)





    




Mais.