Estratégia de cruzamento da média móvel do casco

Autora:ChaoZhang, Data: 2024-03-22 14:57:10
Tags:

img

Resumo

Esta estratégia é baseada nos sinais de cruzamento da média móvel de Hull (HMA). A média móvel de Hull é um indicador técnico desenvolvido por Alan Hull, que visa reduzir o atraso das médias móveis tradicionais. A estratégia usa dois HMAs com períodos diferentes. Um sinal de compra é gerado quando o HMA de período mais curto cruza acima do HMA de período mais longo, e um sinal de venda é gerado quando ocorre o oposto.

Princípio

  1. Calcular a média móvel do casco (HMA)

A HMA é calculada do seguinte modo:

  • Primeiro, calcule a média móvel ponderada (WMA) do preço com um período de metade do parâmetro de entrada length
  • Em seguida, calcular a WMA da WMA anterior com um período de longitude
  • Utilize a fórmula: HMA = 2 * WMA ((longo/2) - WMA ((longo)
  • Calcule o WMA do resultado acima novamente com um período da raiz quadrada de longth para obter o HMA final
  1. Geração de sinais comerciais
  • Quando o preço de fechamento cruza acima do HMA, é gerado um sinal de compra
  • Quando o preço de fechamento cruza abaixo do HMA, é gerado um sinal de venda
  1. Execução de operações baseadas em sinais
  • Sinais de compra: abrir uma posição longa
  • Signalização de venda: abrir uma posição curta

Vantagens

  1. Em comparação com a média móvel simples e a média móvel ponderada, a média móvel Hull tem menos atraso, podendo assim reagir mais rapidamente às alterações de preços, melhorando a capacidade de resposta da estratégia.

  2. Ao utilizar o cruzamento de dois HMA com períodos diferentes para gerar sinais, um grande número de ruídos e falsos sinais pode ser efetivamente filtrado, aumentando a confiabilidade dos sinais.

  3. Os parâmetros são ajustáveis e, ao ajustar os parâmetros de período dos HMA, a estratégia pode ser adaptada a diferentes mercados e instrumentos de negociação.

Riscos

  1. O Hull Moving Average é um indicador de atraso, que pode gerar falsos sinais nos primeiros estágios de uma inversão de tendência.

  2. A selecção inadequada dos parâmetros pode conduzir a um mau desempenho da estratégia.

  3. Como todas as estratégias baseadas num único indicador, esta estratégia pode não funcionar bem em mercados laterais, gerando mais sinais falsos e perdendo negócios.

Orientações de otimização

  1. Considerar a introdução de outros indicadores técnicos ou fatores fundamentais como filtros, tais como volume de negociação, indicadores de tendência, etc., para confirmar ainda mais a validade dos sinais cruzados da HMA.

  2. Para a otimização de parâmetros, métodos como algoritmos genéticos e pesquisa de grade podem ser usados para encontrar a combinação de parâmetros ideal em dados históricos que melhor se adapte ao mercado atual.

  3. Incorporar mecanismos de stop-loss e take-profit na estratégia para controlar o risco e o retorno de cada negociação.

  4. Considere a tendência do mercado. Introduzindo indicadores para julgar as tendências do mercado, pode-se negociar em mercados de tendência e evitar mercados laterais.

Resumo

A estratégia Hull Moving Average Crossover é uma estratégia de negociação simples e fácil de usar. Com a característica de resposta rápida do HMA, ele pode capturar mudanças de preço em tempo hábil. No entanto, como todas as estratégias, ele também tem suas limitações e seu desempenho será afetado pelos tipos de mercado e seleção de parâmetros. Na aplicação prática, ele pode ser combinado com outros métodos de análise para confirmar ainda mais os sinais. Ao mesmo tempo, medidas razoáveis de controle de risco, como stop-loss e take-profit, gerenciamento de posição, etc., também são partes indispensáveis para a operação estável da estratégia.


/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
strategy("RKTD BETA - Hull Suite by InSilico", overlay=true)

//INPUT
src = input(close, title="Source")
modeSwitch = input("Ehma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(200, title="Length(180-200 for floating S/R , 55 for swing entry)")
lengthMult = input(1.0, title="Length multiplier (Used to view higher timeframes with straight band)")

useHtf = input(false, title="Show Hull MA from X timeframe? (good for scalping)")
htf = input("240", title="Higher timeframe", type=input.resolution)

switchColor = input(true, "Color Hull according to trend?")
candleCol = input(false,title="Color candles based on Hull's Trend?")
visualSwitch  = input(true, title="Show as a Band?")
thicknesSwitch = input(1, title="Line Thickness")
transpSwitch = input(40, title="Band Transparency",step=5)

// Alert Messages
longAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "long", "orderType": "market", "close":true}'
shortAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "short", "orderType": "market", "close":true}'

//FUNCTIONS
//HMA
HMA(_src, _length) =>  wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>  ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length)))
//THMA    
THMA(_src, _length) =>  wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length)
    
//SWITCH
Mode(modeSwitch, src, len) =>
      modeSwitch == "Hma"  ? HMA(src, len) :
      modeSwitch == "Ehma" ? EHMA(src, len) : 
      modeSwitch == "Thma" ? THMA(src, len/2) : na

//OUT
_hull = Mode(modeSwitch, src, int(length * lengthMult))
HULL = useHtf ? security(syminfo.ticker, htf, _hull) : _hull
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800

//PLOT
///< Frame
Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
alertcondition(crossover(MHULL, SHULL), title="Hull trending up.", message="Hull trending up.")
alertcondition(crossover(SHULL, MHULL), title="Hull trending down.", message="Hull trending down.")
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)

// Define Buy and Sell Conditions based on crossovers
buyCondition = crossover(MHULL, SHULL)
sellCondition = crossunder(MHULL, SHULL)

// Plotting the Hull Moving Average (HMA)
plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch)
plot(SHULL, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=transpSwitch)
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)

// Execute Strategy based on Buy and Sell Conditions
strategy.entry("Buy", strategy.long, when=buyCondition, alert_message=longAlertMessage)
strategy.entry("Sell", strategy.short, when=sellCondition, alert_message=shortAlertMessage)

// Additional elements like bar coloring remain unchanged
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)


Mais.