Estrategia de cruce de la media móvil

El autor:¿ Qué pasa?, Fecha: 2023-11-22 16:38:26
Las etiquetas:

img

Resumen general

La estrategia de cruce de promedios móviles es una estrategia de negociación cuantitativa simple pero efectiva basada en promedios móviles. Utiliza el cruce de una línea de promedio móvil rápido y una línea de promedio móvil lento para generar señales de compra y venta. Cuando la línea rápida atraviesa la línea lenta desde abajo, se genera una señal de compra. Cuando la línea rápida atraviesa la línea lenta desde arriba, se genera una señal de venta.

Estrategia lógica

La lógica central de esta estrategia radica en el uso de promedios móviles para juzgar las tendencias del mercado. Los promedios móviles tienen la funcionalidad de filtrar el ruido aleatorio del mercado. El promedio móvil rápido puede responder a los cambios de precios más rápido y reflejar las últimas tendencias, mientras que el promedio móvil lento responde más lentamente a los últimos cambios de precios y representa tendencias de mediano a largo plazo.

Específicamente, esta estrategia primero define la media móvil rápida sig1 y la media móvil lenta sig2. Luego, los puntos de compra y venta se determinan de acuerdo con las relaciones cruzadas entre sig1 y sig2. Cuando sig1 rompe sig2 desde abajo, se genera una condición larga longCondition. Cuando sig1 rompe sig2 desde arriba, se genera una condición corta shortCondition. La estrategia luego coloca órdenes cuando se cumplen las condiciones largas y cortas, y establece órdenes de stop loss y take profit para salir.

Análisis de ventajas

Las ventajas de esta estrategia son significativas:

  1. Lógica sencilla, fácil de entender e implementar
  2. Ajuste de parámetros flexible, puede optimizarse en diferentes condiciones del mercado
  3. Puede combinarse con otros indicadores para filtrar las señales y mejorar la estabilidad
  4. Buen rendimiento, por ejemplo, el combo EMA15-EMA30 puede alcanzar una tasa de ganancia del 83% en los datos diarios de EURCHF

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. Efectos severos de la sierra, la configuración de pérdida de parada es crucial
  2. Pérdida de rendimiento en los mercados de gama y lateral
  3. Requiere pruebas extensas y ajuste de parámetros para adaptarse a diferentes productos y plazos

Medidas de optimización:

  1. Añadir otros indicadores para el juicio para evitar los golpes
  2. Ajuste de los tipos y parámetros de la autorización para adaptarse a los diferentes productos
  3. Optimizar las tasas de stop loss y take profit para controlar los riesgos

Conclusión

En general, la estrategia de cruce de promedios móviles es una estrategia cuántica con lógica simple, gran practicidad y estabilidad. Con ajuste de parámetros y optimizaciones adecuadas, puede generar ganancias constantes en varios entornos de mercado. Vale la pena centrarse y aplicar para los operadores cuantitativos.


/*backtest
start: 2023-11-14 00:00:00
end: 2023-11-16 04:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Simple yet effective MA cross strategy.
// You'll have to tune the parameters to get an optimal win ratio.
// If JPY or XAU or any other currency with pips defined as the 
// second decimal digit are involved, do not forget to set the respective flag on.
//
// Created by vitelot/yanez/Vts, who's the same fellow with different user names
// December 2018 -- Merry Xmas
//
strategy("MA cross strategy Vts", overlay=true, initial_capital=1000, currency="EUR", pyramiding=0)

yr  = input(2016, title="Starting year to analyse")
src = input(close, title="Source")
maType = input( defval="EMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA"])
//
isJPY = input(false, title="Is JPY or XAU involved?") // JPY and Gold have the pips defined as the 2 decimal digit

maPar1 = input(26, minval=1, title="MA fast period")
maPar2 = input(51, minval=2, title="MA slow period")

atrPar = input(14,minval=1, title="ATR period")
atrMulSL = input(1.5, title="SL ATR multiplicator")
atrMulTP = input(1.0, title="TP ATR multiplicator")

hma(sig, n) => // Hull moving average definition
    wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))

mcg(sig,length) => // Mc Ginley MA definition
    mg = 0.0
    mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))

ma(t,sig,len) =>
    if t =="SMA"
        sma(sig,len)
    else
        if t == "EMA"
            ema(sig,len)
        else
            if t == "HMA"
                hma(sig,len)
            else
                if t == "McG" // Mc Ginley
                    mcg(sig,len)
                else
                    wma(sig,len)
                    
        
sig1 = ma(maType, src, maPar1)
sig2 = ma(maType, src, maPar2)

tickFactor = isJPY? 1e3: 1e5
sl = atrMulSL*atr(atrPar)*tickFactor
tp = atrMulTP*atr(atrPar)*tickFactor

plot(sig1, color=aqua, title="MA1", linewidth=2)
plot(sig2, color=orange, title="MA2", linewidth=2)

longCondition = crossunder(sig2, sig1) and year>=yr // change the >= to == if you like exact years not a range
if (longCondition)
    strategy.entry("Long", strategy.long, qty=1) // exit trade when SL and TP are hit
    strategy.exit("Exit Long", "Long", loss=sl, profit=tp)
if (crossunder(sig1, sig2)) // or when the short condition is met
    strategy.close("Long")

shortCondition = crossover(sig2,sig1) and year>=yr // change the >= to == if you like exact years not a range
if (shortCondition)
    strategy.entry("Short", strategy.short, qty=1)
    strategy.exit("Exit Short", "Short", loss=sl, profit=tp)
if (crossover(sig1,sig2))
    strategy.close("Short")


Más.