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

Autora:ChaoZhang, Data: 2024-01-29 15:11:58
Tags:

img

Resumo

A estratégia de negociação de cruzamento de média móvel dupla é uma estratégia de negociação quantitativa que usa cruzamento de média móvel para determinar sinais de entrada e saída.

Estratégia lógica

A lógica central desta estratégia é acompanhar 2 médias móveis (10 dias e 200 dias) em 3 prazos (180 minutos, 60 minutos, 120 minutos). Quando a média móvel mais rápida cruza acima da média móvel mais lenta, um cruzamento dourado é gerado, indicando que o instrumento está em uma tendência de alta.

Primeiro, as médias móveis de 10 dias e 200 dias são calculadas separadamente para os intervalos de tempo de 180 minutos e 60 minutos. Quando o MA de 10 dias no período de tempo de 180 minutos cruza acima do MA de 200 dias, um sinal de cruzamento dourado é gerado. Quando cruza abaixo, um sinal de cruzamento de morte é gerado. Isso fornece os sinais de negociação de ciclo rápido.

Em seguida, a estratégia introduz a MA de 200 dias no período de 120 minutos como uma média móvel de controle. Somente quando ocorrem cruzamentos nos ciclos de 180/60 minutos, verificando se a MA de 200 dias de 60 minutos está acima ou abaixo da MA de 200 dias de 120 minutos, decidirá se as negociações devem ser feitas para filtrar sinais falsos.

Por exemplo, quando um cruzamento dourado acontece no ciclo de 180 minutos, apenas se a MA de 60 minutos de 200 dias estiver acima da MA de 120 minutos de 200 dias, a estratégia será longa. A posição longa só será aberta quando esta condição for atendida. Por outro lado, se a MA de 60 minutos de 200 dias estiver abaixo da de 120 minutos, nenhuma posição longa será tomada.

Em resumo, ao comparar as relações de média móvel em diferentes prazos, esta estratégia cria múltiplas camadas de filtragem para melhorar a confiabilidade do sinal, tornando-se um tipo comum de estratégia de negociação baseada em filtro.

Vantagens

  • Melhoria da precisão através da confirmação de vários intervalos de tempo. Em comparação com os sinais de um único intervalo de tempo, o uso de MAs de 180/60/120 minutos reduz drasticamente os falsos sinais e melhora a qualidade do sinal comercial.

  • Frequência de operação razoável. Ao contrário das estratégias de alta frequência, esta estratégia negocia com menos frequência, evitando a necessidade de monitorar o mercado continuamente. Mais adequado para negociação manual.

  • Simples e fácil de entender. Usando apenas médias móveis básicas sem lógica complexa, esta estratégia tem uma baixa barreira de entrada e é fácil de entender para iniciantes.

  • Optimizável em períodos e parâmetros. Os tipos e períodos de MA utilizados são ajustáveis. Diferentes conjuntos de parâmetros podem ser testados para diferentes produtos e regimes de mercado.

Riscos

  • Indicação de atraso e reação lenta. As médias móveis centrais têm atraso por design e muitas vezes não conseguem capturar inversões rápidas da tendência.

  • Quando o mercado está variando, as relações MA podem cruzar-se com muita frequência, causando entradas excessivas e gatilhos de stop loss, aumentando os custos e os riscos de perda.

  • Perigo de sobreajuste da otimização de parâmetros. O alfa vem principalmente do ajuste de parâmetros baseado em conjuntos de dados limitados. Isso provavelmente leva a problemas de sobre-otimização e sobreajuste.

Soluções:

  • Redução dos períodos de MA para reacção mais rápida
  • Adicionar filtros para evitar entradas excessivas durante o mercado agitado
  • Testar a robustez em diferentes produtos e intervalos de tempo

Orientações de otimização

Ainda há espaço para novas otimizações:

  • Tente diferentes combinações de prazos e ajuste os períodos de MA para encontrar melhores parâmetros, através de otimização de força bruta e técnicas de aprendizagem de máquina.

  • Incorporar análises de tendências de volume e de prazos mais longos para confirmação adicional do sinal, por exemplo, evitar entradas durante baixos volumes de negociação.

  • Predizer padrões de curva com antecedência usando modelos de aprendizagem profunda como RNNs para ajudar na tomada de decisão.

  • Introduzir médias móveis adaptativas para melhorar a lógica de filtragem. Ajustar dinamicamente os períodos de MA para reduzir as entradas durante a incerteza do mercado.

Conclusão

A estratégia de negociação de cruzamento de média móvel dupla compara as relações de média móvel em vários prazos para filtrar sinais falsos, melhorando a confiabilidade do sinal.


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

//@version=3
strategy(shorttitle = "ALGO 3-1-2", title="ALGO 3h, 1h, 2h", overlay=true)

bool startLONGBOTandDEAL = false
bool stopLONGBOTandDEAL = false
bool openLONG = false
bool closeLONG = false
bool startSHORTBOTandDEAL = false
bool stopSHORTBOTandDEAL = false
bool openSHORT = false
bool closeSHORT = false

MA1Period = ema(close, 10)
MA2Period = ema(close, 200)
MA3Period = ema(close, 200)

MA1 = security(syminfo.tickerid, "180", MA1Period)
MA2 = security(syminfo.tickerid, "60", MA2Period)
MA3 = security(syminfo.tickerid, "120", MA3Period)

MA12Crossover = crossover(MA1, MA2)
MA12Crossunder = crossunder(MA1, MA2)
MA23Crossover = crossover(MA2, MA3)
MA23Crossunder = crossunder(MA2, MA3)

if MA23Crossover
    startLONGBOTandDEAL := true //stop shortBOT and DEAL code in the TV alert as well, probably stop first w/ a delay on startlong
    lblBull = label.new(bar_index, na, ' BULL Time Open LONG', color=color.blue, textcolor=color.black, style=label.style_label_up, size=size.small)
    label.set_y(lblBull, MA2)  
    strategy.close("go Short")
    strategy.entry("go Long", strategy.long, comment="go Long")
if MA23Crossunder
    //not sure if i should set alert for stop and start each bot, or just put start appropriate bot and stop its opposite in the same alert.
    startSHORTBOTandDEAL := true
    lblBull = label.new(bar_index, na, ' BEAR Time - Open SHORT', color=color.orange, textcolor=color.black, style=label.style_label_down, size=size.small)
    label.set_y(lblBull, MA2)
    strategy.close("go Long")
    strategy.entry("go Short", strategy.short, comment="go Short")
if MA12Crossover
    if MA2 >= MA3
        openLONG := true
        lup1 = label.new(bar_index, na, ' OPEN LONG ', color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.entry("go Long", strategy.long, comment="go Long")
    if MA2 <= MA3
        closeSHORT := true
        lup1 = label.new(bar_index, na, ' CLOSE SHORT ', color=color.gray, textcolor=color.black, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.close("go Short")
    
if MA12Crossunder
    if MA2 >= MA3
        closeLONG := true
        lun1 = label.new(bar_index, na, ' CLOSE LONG ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.close("go Long")
    if MA2 <= MA3
        openSHORT := true
        lun1 = label.new(bar_index, na, ' OPEN SHORT ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.entry("go Short", strategy.short, comment="go Short")


plot(MA1, color=color.green, linewidth=2, title="MA1")
plot(MA2, color=color.yellow, linewidth=3, title="MA2")
plot(MA3, color=color.red, linewidth=4, title="MA3")


alertcondition(startLONGBOTandDEAL, title="Start LONG BOT and DEAL", message="Start Long Bot and Deal")
alertcondition(stopLONGBOTandDEAL, title="Stop LONG BOT and DEAL", message="Stop Long Bot and Deal")
alertcondition(openLONG, title="Open LONG DEAL", message="Open Long Deal")
alertcondition(closeLONG, title="Close LONG DEAL", message="Close Long Deal")
alertcondition(stopSHORTBOTandDEAL, title="Stop SHORT BOT and DEAL", message="Stop Short Bot and Deal")
alertcondition(openSHORT, title="Open SHORT DEAL", message="Open Short Deal")
alertcondition(closeSHORT, title="Close SHORT DEAL", message="Close Short Deal")

Mais.