Tendencia siguiendo una estrategia basada en el cruce de la media móvil

El autor:¿ Qué pasa?, fecha: 2024-01-31 15:17:31
Las etiquetas:

img

Resumen general

Esta estrategia genera señales de trading mediante el cálculo de diferentes tipos de promedios móviles (Simple Moving Average SMA, Exponential Moving Average EMA, Hull Moving Average HMA y Weighted Moving Average VWMA) y la detección de puntos de cruce entre ellos, para determinar la tendencia del mercado y seguirla.

Estrategia lógica

La idea central de esta estrategia es juzgar la tendencia del mercado comparando dos promedios móviles. Específicamente, permite configurar dos MA con diferentes tipos y longitudes a través de parámetros de entrada.

Cuando el MA a corto plazo cruza el MA a largo plazo desde abajo, indica que la tendencia a corto plazo se está fortaleciendo y el mercado está entrando en una tendencia al alza. Por lo tanto, se genera una señal de compra en este punto de cruce. Por el contrario, cuando el MA a corto plazo cruza por debajo del MA a largo plazo, sugiere que la tendencia a corto plazo se está debilitando y el mercado está invirtiendo hacia abajo. En consecuencia, se genera una señal de venta.

Al detectar estos cruces de la OMA, esta estrategia sigue la tendencia del mercado hacia el comercio.

Ventajas

  • Utiliza el método clásico y práctico de cruce de MA para determinar las principales tendencias
  • Apoya combinaciones de varios tipos de MA, proporcionando flexibilidad
  • Lógica simple y clara, fácil de entender y automatizar
  • Los parámetros configurables se adaptan a las diferentes condiciones del mercado

Análisis de riesgos

  • Las MAs tienen un efecto de retraso, las señales pueden llegar en o cerca de los puntos de inflexión cuando la acción del precio ya ha ocurrido
  • Los juicios de tendencia pueden ser inexactos, incurriendo en pérdidas innecesarias
  • Los resultados varían significativamente con diferentes ajustes de parámetros MA

Soluciones:

  • Para una mejor sensibilidad, utilizar períodos MA más cortos.
  • Añadir otros filtros para la verificación cruzada para evitar errores
  • Métodos de optimización de parámetros, por ejemplo, fuerza bruta, aprendizaje automático, algoritmos genéticos
  • Control de la posición de dimensionamiento y detener la pérdida correctamente

Direcciones de mejora

  • Añadir otros indicadores como filtros para mejorar la precisión
  • Parámetros del MA de adaptación automática basados en las condiciones cambiantes del mercado
  • Utilice el aprendizaje automático para la optimización automática de parámetros
  • Refinar la estrategia de stop loss

Conclusión

Esta estrategia se basa en la idea clásica de usar cruces de MA para la detección de tendencias importantes. Con combinaciones flexibles de MA, es simple de implementar y adecuado para la automatización de operaciones algorítmicas. En general, es razonablemente práctico, pero deja espacio para mejoras como ajuste de parámetros, filtros adicionales, etc. para mejorar aún más el rendimiento.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 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", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(25, 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)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition)
    strategy.entry("Short", strategy.short)


Más.