Estrategia de negociación cruzada de promedio móvil

El autor:¿ Qué pasa?, Fecha: 2024-01-24 14:59:44
Las etiquetas:

img

Resumen general

La estrategia de negociación de media móvil cruzada es una estrategia de negociación cuantitativa relativamente común. Esta estrategia genera señales de negociación mediante el cálculo de medias móviles de diferentes períodos y de acuerdo con sus situaciones de cruce. Específicamente, calcula las medias móviles exponenciales (EMA) de 4 períodos, 8 períodos y 20 períodos. Cuando la EMA a corto plazo cruza por encima de la EMA a largo plazo, vaya largo; cuando la EMA a corto plazo cruza por debajo de la EMA a largo plazo, vaya corto.

Estrategia lógica

La lógica central de esta estrategia es la siguiente:

  1. Calcular las líneas de EMA de 4 períodos, 8 períodos y 20 períodos.
  2. Juzgar la relación entre la línea EMA de 4 períodos y la línea EMA de 8 períodos:
    1. Cuando la línea EMA de 4 períodos cruza por encima de la línea EMA de 8 períodos, significa que la tendencia de precios se está fortaleciendo, que es una señal alcista.
    2. Cuando la EMA de 4 períodos cruza por debajo de la EMA de 8 períodos, significa que la tendencia de precios se está debilitando, lo que es una señal bajista.
  3. Al mismo tiempo, juzgue la dirección de la línea EMA de 20 períodos:
    1. Si la línea EMA de 20 períodos sube, entonces entra Largo.
    2. Si la línea EMA de 20 períodos baja, entonces entra corto.
  4. Cuando la relación entre la línea EMA de 4 períodos y la línea EMA de 8 períodos se invierta, Prepare Exit.
  5. Cuando la dirección de la línea EMA de 20 períodos se invierta, salga ahora.

A través de este método, aprovechamos el cruce entre diferentes promedios móviles de período para juzgar las señales del mercado, y utilizamos la dirección de la media móvil de período más largo para filtrar las señales falsas, construyendo una estrategia comercial estable.

Ventajas de la estrategia

Las principales ventajas de esta estrategia son las siguientes:

  1. La lógica de la estrategia es simple y clara, fácil de entender e implementar.
  2. El doble filtro de condiciones puede reducir las señales falsas.
  3. El impulso de la EMA de 20 períodos puede identificar las principales tendencias y mejorar la estabilidad.
  4. Parámetros personalizables para ajustar la frecuencia de las operaciones.
  5. Fácil de combinar con otros indicadores o modelos para construir estrategias complejas.

Riesgos de la estrategia

También hay algunos riesgos con esta estrategia:

  1. Las estrategias de media móvil doble tienden a generar señales falsas.
  2. Los plazos fijos no pueden adaptarse a los cambios del mercado.
  3. Es fácil causar pérdidas durante las fluctuaciones del mercado.

Las principales soluciones son:

  1. Acortar adecuadamente el período de retención y detener las pérdidas a tiempo.
  2. Optimiza dinámicamente los parámetros y ajusta los períodos de media móvil.
  3. Combinar con otros indicadores o modelos para crear estrategias complejas.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimización del período: Determinar la combinación óptima de períodos de MA según las diferentes variedades.

  2. Optimización de pérdidas de parada: Establezca razonablemente puntos de pérdida de parada para controlar pérdidas individuales.

  3. Optimización de parámetros: Optimiza dinámicamente los parámetros utilizando algoritmos genéticos, cadenas de Markov, etc.

  4. Fusión de modelos: se integra con LSTM, RNN y otros modelos de aprendizaje profundo para extraer más alfa.

  5. Optimización de la cartera: Combinar con otras estrategias de indicadores técnicos para construir carteras de estrategias.

Resumen de las actividades

En general, la estrategia de cruce de promedios móviles es una estrategia comercial cuantitativa relativamente clásica y comúnmente utilizada. Esta estrategia tiene una lógica simple y es fácil de entender e implementar, con cierta estabilidad. Pero también hay algunos problemas, como generar señales falsas, incapacidad para adaptarse a los cambios del mercado, etc. Estos problemas se pueden mejorar a través de la optimización de parámetros, optimización de pérdidas, fusión de modelos y otros métodos. En general, la estrategia de promedios móviles se puede usar como un módulo básico en la caja de herramientas de estrategia, combinada con estrategias más complejas para construir estrategias complejas robustas.


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

//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05)
//stock strategy
strategy(title = "stub",   overlay = true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000)


testStartYear = input(1900, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)


testPeriod() => true

ema1 = ema(close,4)
ema2 = ema(close,8)
ema3 = ema(close,20)

go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1]
exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1]

go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1]
exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1]

 
if testPeriod()
    strategy.entry("simpleBuy", strategy.long, when=go_long)
    strategy.exit("simpleBuy", "simpleSell",when=exit_long)
    
    strategy.entry("simpleSell", strategy.short,when=go_short)
    strategy.exit("simpleSell", "simpleSell",when=exit_short)
        
    


Más.