Estrategia de negociación cruzada de media móvil doble

El autor:¿ Qué pasa?, Fecha: 2024-01-29 15:11:58
Las etiquetas:

img

Resumen general

La estrategia de negociación de cruce de media móvil doble es una estrategia de negociación cuantitativa que utiliza cruces de media móvil para determinar las señales de entrada y salida.

Estrategia lógica

La lógica central de esta estrategia es realizar un seguimiento de 2 promedios móviles (10 días y 200 días) en 3 marcos de tiempo (180 minutos, 60 minutos, 120 minutos). Cuando el promedio móvil más rápido cruza por encima del promedio móvil más lento, se genera un cruce dorado, lo que indica que el instrumento está en una tendencia alcista. Cuando el promedio móvil más rápido cruza por debajo del más lento, se genera un cruce de muerte, lo que indica una tendencia bajista.

Primero, los promedios móviles de 10 días y 200 días se calculan por separado para los marcos de tiempo de 180 minutos y 60 minutos. Cuando el MA de 10 días en el marco de tiempo de 180 minutos cruza por encima del MA de 200 días, se genera una señal de cruce dorada. Cuando cruza por debajo, se genera una señal de cruce de muerte. Esto proporciona las señales comerciales de ciclo rápido.

A continuación, la estrategia introduce el MA de 200 días en el marco de tiempo de 120 minutos como una media móvil de control. Sólo cuando ocurren cruces en los ciclos de 180/60 minutos, al verificar si el MA de 200 días de 60 minutos está por encima o por debajo del MA de 200 días de 120 minutos, se decidirá si se deben realizar operaciones para filtrar señales falsas.

Por ejemplo, cuando un cruce de oro ocurre en el ciclo de 180 minutos, solo si el MA de 60 minutos de 200 días está por encima del MA de 120 minutos de 200 días, la estrategia será larga. La posición larga solo se abrirá cuando se cumpla esta condición. Por el contrario, si el MA de 60 minutos de 200 días está por debajo del de 120 minutos, no se tomará ninguna posición larga.

En resumen, al comparar las relaciones de promedio móvil en diferentes marcos de tiempo, esta estrategia crea múltiples capas de filtrado para mejorar la confiabilidad de la señal, lo que la convierte en un tipo común de estrategia de negociación basada en filtros.

Ventajas

  • Mejora de la precisión mediante confirmación de marcos de tiempo múltiples. En comparación con las señales de marcos de tiempo únicos, el uso de MAs de 180/60/120 minutos reduce drásticamente las señales falsas y mejora la calidad de las señales comerciales.

  • A diferencia de las estrategias de alta frecuencia, esta estrategia opera con menos frecuencia, evitando la necesidad de monitorear el mercado continuamente.

  • Simple y fácil de entender. Al utilizar solo promedios móviles básicos sin lógica compleja, esta estrategia tiene una baja barrera de entrada y es fácil de entender para los principiantes.

  • Optimizable a través de períodos y parámetros. Los tipos y períodos de MA utilizados son ajustables. Se pueden probar diferentes conjuntos de parámetros para diferentes productos y regímenes de mercado.

Los riesgos

  • Indicación de retraso y reacción lenta. Los promedios móviles centrales tienen retraso por diseño y a menudo no logran capturar inversiones rápidas de tendencia.

  • Cuando el mercado está en un rango, las relaciones MA pueden cruzarse con mucha frecuencia, causando entradas excesivas y disparadores de stop loss, aumentando los costos y los riesgos de pérdida.

  • El riesgo de sobreajuste de la optimización de parámetros. El alfa proviene principalmente de la puesta a punto de parámetros basados en conjuntos de datos limitados. Esto probablemente conduce a problemas de sobre-optimización y sobreajuste.

Soluciones:

  • Acortar los períodos de admisión para una reacción más rápida
  • Añadir filtros para evitar entradas excesivas durante la agitación del mercado
  • Prueba de robustez en diferentes productos y intervalos de tiempo

Direcciones de optimización

Todavía hay espacio para nuevas optimizaciones:

  • Prueba diferentes combinaciones de marcos de tiempo y ajusta los períodos de MA para encontrar mejores parámetros, a través de la optimización de la fuerza bruta y técnicas de aprendizaje automático.

  • Incorporar el análisis de tendencias de volumen y de marcos de tiempo más largos para una confirmación adicional de la señal, por ejemplo, evitar las entradas durante los volúmenes de operaciones bajos.

  • Predecir los patrones de curva con anticipación utilizando modelos de aprendizaje profundo como RNN para ayudar a la toma de decisiones.

  • Introducir medias móviles adaptativas para mejorar la lógica de filtrado. Ajustar dinámicamente los períodos de MA para reducir las entradas durante la incertidumbre del mercado.

Conclusión

La estrategia de negociación de cruce de media móvil doble compara las relaciones de media móvil a través de múltiples marcos de tiempo para filtrar señales falsas, mejorando la confiabilidad de la señal.


/*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")

Más.