La estrategia de negociación de media móvil doble es una estrategia de negociación cuantitativa común. Esta estrategia utiliza dos medias móviles con diferentes períodos de tiempo para generar señales de negociación basadas en su cruce. Específicamente, cuando el promedio móvil a corto plazo cruza por encima del promedio móvil a largo plazo, se considera una señal de compra; cuando el promedio móvil a corto plazo cruza por debajo del promedio móvil a largo plazo, se considera una señal de venta.
El principio básico de esta estrategia es: el promedio móvil a corto plazo refleja la tendencia a corto plazo del precio del activo, y el promedio móvil a largo plazo refleja la tendencia a largo plazo del precio del activo. Cuando la línea a corto plazo cruza por encima de la línea a largo plazo, indica que la tendencia a corto plazo se ha vuelto al alza, en este momento puede comprar. Cuando la línea a corto plazo cruza por debajo de la línea a largo plazo, indica que la tendencia a corto plazo se ha vuelto a la caída, en este momento puede vender. Siga la tendencia, capture el punto de inflexión de la tendencia del precio.
Específicamente, la estrategia define dos promedios móviles: un promedio móvil a corto plazo de 5 días para capturar las tendencias de precios a corto plazo; y un promedio móvil a largo plazo de 15 días para juzgar las tendencias de precios a largo plazo.
En comparación con otras estrategias, la doble estrategia de promedios móviles tiene las siguientes ventajas:
La estrategia de media móvil doble también tiene algunos riesgos, que incluyen principalmente:
Soluciones:
La estrategia se puede optimizar en las siguientes direcciones:
Combina con otros indicadores como MACD, KDJ para filtrar señales falsas.
Introducir promedios móviles adaptativos, ajustar dinámicamente los parámetros basados en la volatilidad del mercado para mejorar la robustez.
Optimizar los parámetros de la media móvil para encontrar la mejor combinación y mejorar el rendimiento de la estrategia.
Añadir un mecanismo de stop loss para limitar las pérdidas y mejorar el control del riesgo.
Combinación de múltiples marcos de tiempo, utilizando señales de líneas diarias y semanales para mejorar la estabilidad.
Cambiar el estado de Markov, utilizar diferentes parámetros bajo diferentes estados del mercado para mejorar la adaptabilidad.
En general, la estrategia de negociación de media móvil dual es bastante efectiva y estable. El principio de negociación es simple de entender e implementar, los parámetros son flexibles para adaptarse a las tendencias del mercado. Mientras tanto, hay algunas limitaciones como generar señales falsas y dificultad para manejar fluctuaciones drásticas del mercado. Estos pueden abordarse mediante la introducción de otras herramientas y optimización de parámetros. En general, esta es una estrategia práctica adecuada para que los principiantes en negociación cuantitativa aprendan y practiquen.
//@version=3 strategy("CS: 2 Moving Averages Script - Strategy (Testing)", overlay=true) // === GENERAL INPUTS === // short ma ma1Source = input(defval = close, title = "MA 1 Source") ma1Length = input(defval = 5, title = "MA 1 Period", minval = 1) // long ma ma2Source = input(defval = close, title = "MA 2 Source") ma2Length = input(defval = 15, title = "MA 2 Period", minval = 1) // === SERIES SETUP === /// a couple of ma's.. ma1 = ema(ma1Source, ma1Length) ma2 = ema(ma2Source, ma2Length) // === PLOTTING === fast = plot(ma1, title = "MA 1", color = red, linewidth = 2, style = line, transp = 30) slow = plot(ma2, title = "MA 2", color = green, linewidth = 2, style = line, transp = 30) // === LOGIC === enterLong = crossover(ma1, ma2) exitLong = crossover(ma2, ma1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2012) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // Entry // strategy.entry(id="Long Entry", long=true, when=enterLong and window()) strategy.entry(id="Short Entry", long=false, when=exitLong and window())