Resumen: Esta estrategia se basa en la estrategia de negociación clásica de cruce de promedios móviles. Utiliza promedios móviles duales, incluidos el promedio móvil simple (SMA), el promedio móvil exponencial (EMA), el promedio móvil ponderado variable (VWMA) y el promedio móvil de Hull (HMA).
Principio: La lógica central de la estrategia es el cruce de la media móvil dual. Al calcular dos medias móviles con parámetros diferentes, se genera una señal de compra cuando la media móvil rápida cruza la media móvil lenta, y se genera una señal de venta cuando la media móvil rápida cruza por debajo de la media móvil lenta.
Análisis de ventajas: Las principales ventajas de la estrategia de cruce de media móvil dual son la simplicidad y la facilidad de operación. Con una sola señal, se puede obtener el juicio de tendencia más básico sin demasiadas selecciones y ajustes de parámetros, lo que es muy adecuado para operadores novatos. Además, se prueban diferentes tipos de medias móviles para optimizar diferentes combinaciones.
Análisis de riesgos: El principal riesgo de esta estrategia es que las estrategias comunes de cruce de promedios móviles tendrán muchas señales falsas, lo que resultará en múltiples ganancias pequeñas y posiciones planas, lo que afecta al rendimiento general.
Direcciones de optimización: 1) Probar diferentes períodos para determinar la combinación óptima de cruces de medias móviles; 2) Considerar la introducción de un segundo conjunto de parámetros de medias móviles e indicadores RSI para ayudar en el juicio para reducir las señales falsas; 3) Introducir un juicio de condición basado en el cambio incremental del indicador MA en lugar de un simple cruce para obtener un juicio de cruce más confiable.
Resumen: Esta estrategia adopta el marco de la estrategia tradicional de cruce de promedios móviles para probar promedios móviles duales para encontrar la combinación óptima de períodos de promedios móviles. Al mismo tiempo, agrega juicios de stop-loss basados en el ROC y el precio del promedio móvil. En general, es una estrategia de promedio móviles dual simple y fácil de usar que se ajusta a la lógica comercial cuantitativa. Además, las ricas ideas de optimización también proporcionan espacio para el mayor desarrollo de esta 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")