Basado en la estrategia de cruce de promedios móviles rápidos y lentos


Fecha de creación: 2023-11-22 16:38:26 Última modificación: 2023-11-22 16:38:26
Copiar: 0 Número de Visitas: 622
1
Seguir
1617
Seguidores

Basado en la estrategia de cruce de promedios móviles rápidos y lentos

Descripción general

La estrategia de cruce de media móvil es una estrategia de comercio cuantitativa simple y eficaz basada en la media móvil. La estrategia utiliza la cruz de media móvil rápida y media móvil lenta como una señal de compra y venta.

Principio de estrategia

La lógica central de esta estrategia es utilizar las medias móviles para juzgar la tendencia del mercado. Las medias móviles tienen la función de fluctuar el ruido del mercado al azar. Las medias móviles rápidas responden más rápidamente a los cambios de precios y reflejan las tendencias más recientes, mientras que las medias móviles lentas responden más lentamente a los cambios de precios más recientes y representan tendencias a medio y largo plazo.

Concretamente, la estrategia primero define una media móvil rápida sig1 y una media móvil lenta sig2. Luego, los puntos de compra y venta se juzgan en función de la relación cruzada entre sig1 y sig2. Cuando sig1 rompe sig2 desde abajo, genera una señal de compra (longCondition); cuando sig1 rompe sig2 desde arriba, genera una señal de venta (shortCondition). La estrategia luego ordena cuando se cumplen las condiciones de compra y venta, y establece órdenes de stop loss y stop exit.

Análisis de las ventajas

Las ventajas de esta estrategia son notables:

  1. La lógica es simple, fácil de entender y de implementar.
  2. Ajuste de parámetros flexible y adaptable a las diferentes condiciones del mercado
  3. Se puede combinar con otros indicadores para mejorar la estabilidad de la señal de filtro
  4. Un buen rendimiento, por ejemplo, la combinación EMA15-EMA30 tiene un 83% de éxito en los datos de la línea diaria EURCHF

Análisis de riesgos

La estrategia también tiene ciertos riesgos:

  1. El whipsaw es muy fuerte y el control de pérdidas es muy importante.
  2. El impacto de las grandes sacudidas no fue bueno.
  3. Se requieren pruebas repetitivas para adaptarse a diferentes variedades y ciclos

Las medidas de optimización:

  1. Añadir otros indicadores de juicio, evitar el whipsaw
  2. Ajustar los tipos y parámetros de las medias móviles para adaptarse a diferentes variedades
  3. Optimización de la proporción de stop loss y control de riesgos

Resumir

La estrategia de cruce de la media móvil en general es una estrategia de cuantificación lógica simple y práctica. A través de la optimización de los parámetros y la optimización adecuada, puede obtener ganancias estables en una variedad de entornos de mercado.

Código Fuente de la Estrategia
/*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")