
La estrategia se basa en la señal de cruce del promedio móvil de Hull (Hull Moving Average, HMA). La HMA es un indicador de promedio móvil avanzado que reduce el atraso mediante una combinación especial de promedio móvil ponderado (WMA) para proporcionar una señal de tendencia de mercado más rápida y suave.
El núcleo de la estrategia es utilizar el cruce de HMA de diferentes períodos para capturar el punto de conversión de la tendencia del mercado. El proceso de cálculo de HMA incluye tres pasos: primero se calcula el WMA de medio ciclo, luego se calcula el WMA de ciclo completo, y finalmente se vuelve a calcular el WMA de un ciclo como la raíz cuadrada del ciclo original a través de una combinación especial de estos dos WMA. Se produce una señal de multiplicación cuando un HMA rápido (de 9 ciclos por defecto) atraviesa hacia arriba un HMA lento (de 16 ciclos por defecto) y una señal de vacío cuando un HMA rápido atraviesa hacia abajo un HMA lento (de 16 ciclos por defecto).
Se trata de una estrategia de trading cuantitativa basada en el cruce de HMA, que ofrece una señal de trading más oportuna al reducir el retraso de las medias móviles tradicionales. La estrategia está diseñada para ser sencilla, fácil de entender y implementar, pero en la aplicación real se necesita atención a la adaptabilidad y gestión de riesgos del entorno del mercado.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Hull Moving Average Crossover", overlay=true)
fastLength = input.int(9, "Fast HMA Length", minval=1)
slowLength = input.int(16, "Slow HMA Length", minval=1)
hma(src, length) =>
wma1 = ta.wma(src, length / 2)
wma2 = ta.wma(src, length)
ta.wma(2 * wma1 - wma2, math.floor(math.sqrt(length)))
fastHMA = hma(close, fastLength)
slowHMA = hma(close, slowLength)
plot(fastHMA, color=color.blue, title="Fast HMA")
plot(slowHMA, color=color.red, title="Slow HMA")
longCondition = ta.crossover(fastHMA, slowHMA)
shortCondition = ta.crossunder(fastHMA, slowHMA)
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
plotshape(longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)