Cruce de la tendencia de la media móvil de precios siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2024-01-26 15:18:29
Las etiquetas:

img

Resumen general

Esta estrategia genera señales de compra y venta basadas en el cruce del precio con un promedio móvil. Proporciona varios tipos de promedios móviles y un parámetro de tolerancia para filtrar falsas rupturas. La estrategia tiene como objetivo capturar puntos de inflexión en las tendencias de precios para seguir la tendencia.

Estrategia lógica

La estrategia calcula un promedio móvil de longitud N basado en el precio de cierre. Los tipos típicos de promedio móvil incluyen promedio móvil simple (SMA), promedio móvil exponencial (EMA), promedio móvil ponderado (WMA) etc. Luego se establece un nivel de tolerancia, por ejemplo, 5%, y se calculan la banda superior (1.05 veces la media móvil) y la banda inferior (0.95 veces la media móvil). Cuando el precio de cierre cruza por encima de la banda superior, se genera una señal de compra. Cuando el precio de cierre cruza por debajo de la banda inferior, se genera una señal de venta. Esto ayuda a filtrar algunas rupturas falsas.

Ventajas

  • Sigue eficazmente las tendencias de los precios utilizando la tendencia de la media móvil
  • Proporciona varios tipos de medias móviles para combinaciones flexibles
  • El parámetro de tolerancia ayuda a filtrar las falsas rupturas y evitar operaciones innecesarias
  • Solo puede ser corto, adecuado para capturar tendencias a la baja

Los riesgos

  • Las medias móviles tienen un efecto de retraso, pueden perder los puntos de inflexión de los precios
  • No adecuado para entornos de mercado de rango limitado
  • Las configuraciones incorrectas de los parámetros de tolerancia pueden filtrar las señales válidas
  • Ir corto tiene mayores riesgos, necesita operaciones prudentes

Direcciones de optimización

  • Optimización de los parámetros de tipo y longitud de la media móvil
  • Prueba de diferentes ajustes de parámetros de tolerancia
  • Añadir otros indicadores a las señales de filtro
  • Emplear estrategias de dimensionamiento de la posición

Conclusión

En general, esta es una estrategia típica de seguimiento de tendencias. Utiliza la relación entre el precio y la media móvil para determinar tendencias, con cierta flexibilidad. A través de la optimización de parámetros y el filtro de señal adecuado, puede convertirse en una estrategia cuantitativa decente. Pero controlar los riesgos a la baja cuando se corta es importante para evitar pérdidas excesivas.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © RafaelPiccolo

//@version=4
strategy("Price X MA Cross", overlay=true)

typ = input("HMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len = input(100, minval=1, title="Length")
src = input(close, "Source", type=input.source)
tol = input(0, minval=0, title="Tolerance (%)", type=input.float)
shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getMAPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

ma = getMAPoint(typ, len, src)
upperTol = ma * (1 + tol/100)
lowerTol = ma * (1 - tol/100)

longCondition = crossover(close, upperTol)
shortCondition = crossunder(close, lowerTol)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(ma, "Moving Average", close > ma ? color.green : color.red, linewidth = 2)
t1 = plot(tol > 0 ? upperTol : na, transp = 70)
t2 = plot(tol > 0 ? lowerTol : na, transp = 70)
fill(t1, t2, color = tol > 0 ? color.blue : na)


Más.