Estrategia de cruce de medias móviles dobles con inversión


Fecha de creación: 2023-12-28 12:00:27 Última modificación: 2023-12-28 12:00:27
Copiar: 0 Número de Visitas: 543
1
Seguir
1623
Seguidores

Estrategia de cruce de medias móviles dobles con inversión

Descripción: Esta estrategia es una estrategia de negociación clásica basada en el cruce de líneas medias, y el indicador utiliza dos líneas medias, incluidas las medias móviles simples (SMA), las medias móviles indexadas (EMA), las medias móviles ponderadas linealmente (VWMA) y las medias móviles ponderadas por oscilación (HMA).

Principio: La lógica central de la estrategia es el cruce de dos medias. Al calcular las medias de dos parámetros diferentes, se produce una señal de compra cuando la media rápida cruza la media lenta por encima de la media rápida y una señal de venta cuando la media rápida cruza la media lenta por debajo de la media rápida.

Análisis de ventajas: Las ventajas de la estrategia de cruce de líneas de pares son la facilidad de operación, la determinación de tendencias básicas a través de una señal, la selección y ajuste de parámetros sin exceso, muy adecuado para los comerciantes novatos. Además, los diferentes tipos de líneas de pares tienen pruebas, se pueden elegir diferentes combinaciones para optimizar.

Análisis de riesgos: El principal riesgo de esta estrategia es que las estrategias comunes de cruce de medias tienen una gran cantidad de señales falsas, lo que lleva al problema de las pequeñas ganancias en varias posiciones cerradas, lo que afecta a la ganancia general. Además, la configuración de la longitud de la línea media fija rápida y lenta también se desactivará en ciertos períodos.

Dirección de optimización: 1) Prueba diferentes ciclos para determinar la combinación óptima de ciclos de cruce de medias. 2) Considera la introducción de los parámetros del segundo conjunto de medias y el juicio auxiliar del indicador RSI para reducir las señales falsas. 3) Introduce la determinación condicional basada en la variación del incremento del indicador MA en lugar de una simple cruce para obtener un juicio de cruce más confiable.

Resumen: Esta estrategia adopta el marco de la estrategia tradicional de cruce de líneas medias, realiza pruebas de doble línea medias para encontrar la combinación de ciclos medias óptima, y agrega la determinación de los parámetros de pérdida basados en el ROC y el precio medias. En general, es una estrategia de doble línea medias simple y fácil de usar que cumple con la lógica de comercio cuantitativo. Además, una gran cantidad de ideas de optimización también brinda espacio para el desarrollo posterior de esta estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-27 00:00:00
end: 2023-12-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(price, ma2)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition) // and time>timestamp(2018,6,1,9,30)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
    strategy.close("Long")