
Esta estratégia baseia-se no sinal de cruzamento da Hull Moving Average (HMA). A HMA é um indicador de média móvel avançada que reduz a latência por meio de uma combinação especial de média móvel ponderada (WMA) para fornecer um sinal de tendência de mercado mais rápido e suave.
O núcleo da estratégia é o uso de cruzamentos de HMA de diferentes períodos para capturar o ponto de transição da tendência do mercado. O processo de cálculo do HMA inclui três etapas: primeiro, calcula-se o WMA de meio ciclo, depois o WMA de ciclo completo, e finalmente, através de uma combinação especial desses dois WMAs, calcula-se novamente o WMA de um ciclo como a raiz quadrada do ciclo original. Quando o HMA rápido (default 9 cycles) atravessa o HMA lento (default 16 cycles) para cima, gera-se um sinal de multiplicação; quando o HMA rápido atravessa o HMA lento para baixo, gera-se um sinal de vazio.
Trata-se de uma estratégia de negociação quantitativa baseada em cruzamentos de HMA, que fornece sinais de negociação mais oportunos, reduzindo o atraso das médias móveis tradicionais. A estratégia é concebida de forma simples, fácil de entender e implementar, mas na aplicação real requer atenção à adaptabilidade e gestão de risco ao ambiente de 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)