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

Autora:ChaoZhang, Data: 2023-12-04 16:39:13
Tags:

img

Resumo

Esta é uma estratégia de negociação de reversão baseada em indicadores de média móvel dupla. Calculando dois grupos de médias móveis com configurações de parâmetros diferentes e julgando a tendência de preço de acordo com suas mudanças direcionais, os sinais de negociação podem ser gerados definindo o parâmetro de sensibilidade para mudanças direcionais.

Princípios

O indicador central desta estratégia é a média móvel dupla. A estratégia permite selecionar o tipo (SMA, EMA, etc.), comprimento e fonte de preço (preço de fechamento, preço típico, etc.) da média móvel. Após calcular dois grupos de médias móveis, suas direções são determinadas definindo o parâmetro de reação. Um sinal de compra é gerado quando a linha rápida cruza acima da linha lenta e um sinal de venda é gerado quando ela cruza abaixo.

Além disso, a estratégia também define as condições para determinar a mudança de direção e a ascensão/caída contínua para evitar gerar sinais errados.

Análise das vantagens

A estratégia dual movavg combina linhas rápidas e lentas com diferentes configurações de parâmetros, o que pode efetivamente filtrar o ruído no mercado de negociação e identificar tendências mais fortes.

O parâmetro de reação permite que a estratégia seja flexível e adaptável a diferentes ciclos e variedades.

Análise de riscos

O maior risco desta estratégia é perder o ponto de virada e perder dinheiro ou tomar uma posição inversa. Isso se relaciona com a configuração do parâmetro de reação. Se a reação for muito pequena, sinais errados tendem a ocorrer. Se a reação for muito grande, pode perder melhores pontos de entrada.

Outro risco é a incapacidade de controlar efetivamente as perdas. Quando os preços flutuam violentamente, ele não pode parar rapidamente as perdas, levando a perdas ampliadas. Isso requer o uso de estratégias de stop-loss para controlar os riscos.

Orientações de otimização

As principais direções de otimização desta estratégia se concentram na seleção de parâmetros de reação, tipos e comprimentos de médias móveis.

Além disso, confirmar sinais de negociação com outros indicadores auxiliares, como RSI e KD, também é uma ideia de otimização.

Resumo

Em geral, esta estratégia é relativamente simples e prática. Ao filtrar com médias móveis duplas e gerar sinais de negociação, ela pode identificar efetivamente inversões de tendência e é uma estratégia típica de acompanhamento de tendências. Após a otimização do portfólio de parâmetros, sua capacidade de capturar tendências e manter posições contra o mercado será melhorada. Usá-la com mecanismos de stop loss e gerenciamento de posição funciona melhor.


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

//@version=3
strategy(shorttitle="MA_color strategy", title="Moving Average Color", overlay=true)

// === INPUTS

ma_type   = input(defval="HullMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
ma_len    = input(defval=32, title="MA Lenght", minval=1)
ma_src    = input(close, title="MA Source")
reaction  = input(defval=2, title="MA Reaction", minval=1)

// SuperSmoother filter
// © 2013  John F. Ehlers
variant_supersmoother(src,len) =>
    a1 = exp(-1.414*3.14159 / len)
    b1 = 2*a1*cos(1.414*3.14159 / len)
    c2 = b1
    c3 = (-a1)*a1
    c1 = 1 - c2 - c3
    v9 = 0.0
    v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
    v9
    
variant_smoothed(src,len) =>
    v5 = 0.0
    v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
    v5

variant_zerolagema(src,len) =>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)
    v10
    
variant_doubleema(src,len) =>
    v2 = ema(src, len)
    v6 = 2 * v2 - ema(v2, len)
    v6

variant_tripleema(src,len) =>
    v2 = ema(src, len)
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)              
    v7
    
variant(type, src, len) =>
    type=="EMA"     ? ema(src,len) : 
      type=="WMA"   ? wma(src,len): 
      type=="VWMA"  ? vwma(src,len) : 
      type=="SMMA"  ? variant_smoothed(src,len) : 
      type=="DEMA"  ? variant_doubleema(src,len): 
      type=="TEMA"  ? variant_tripleema(src,len): 
      type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
      type=="SSMA"  ? variant_supersmoother(src,len) : 
      type=="ZEMA"  ? variant_zerolagema(src,len) : 
      type=="TMA"   ? sma(sma(src,len),len) : sma(src,len)


// === Moving Average
ma_series = variant(ma_type,ma_src,ma_len)

direction = 0
direction := rising(ma_series,reaction) ? 1 : falling(ma_series,reaction) ? -1 : nz(direction[1])
change_direction= change(direction,1)
change_direction1= change(direction,1)

pcol = direction>0 ? lime : direction<0 ? red : na
plot(ma_series, color=pcol,style=line,join=true,linewidth=3,transp=10,title="MA PLOT")

/////// Alerts ///////

alertcondition(change_direction,title="Change Direction MA",message="Change Direction MA")


longCondition = direction>0
shortCondition = direction<0
if (longCondition)
    strategy.entry("BUY", strategy.long)
if (shortCondition)
    strategy.entry("SELL", strategy.short)



Mais.