Hull Moving Average Crossover Strategi

Penulis:ChaoZhang, Tanggal: 2024-03-22 14:57:10
Tag:

img

Gambaran umum

Strategi ini didasarkan pada sinyal crossover dari Hull Moving Average (HMA). Hull Moving Average adalah indikator teknis yang dikembangkan oleh Alan Hull, yang bertujuan untuk mengurangi lag dari rata-rata bergerak tradisional. Strategi ini menggunakan dua HMA dengan periode yang berbeda. Sinyal beli dihasilkan ketika HMA jangka pendek melintasi di atas HMA jangka panjang, dan sinyal jual dihasilkan ketika sebaliknya terjadi.

Prinsip

  1. Menghitung Hull Moving Average (HMA)

HMA dihitung sebagai berikut:

  • Pertama, hitung Rata-rata Bergerak Bertimbang (WMA) dari harga dengan periode setengah dari parameter input length
  • Kemudian, hitung WMA dari WMA sebelumnya dengan periode length
  • Gunakan rumus: HMA = 2 * WMA (panjang/2) - WMA (panjang)
  • Menghitung WMA dari hasil di atas lagi dengan periode akar kuadrat dari length untuk mendapatkan HMA akhir
  1. Membuat Sinyal Perdagangan
  • Ketika harga penutupan melintasi di atas HMA, sinyal beli dihasilkan
  • Ketika harga penutupan melintasi di bawah HMA, sinyal jual dihasilkan
  1. Eksekusi Perdagangan Berdasarkan Sinyal
  • Sinyal beli: Buka posisi panjang
  • Sinyal jual: Buka posisi pendek

Keuntungan

  1. Dibandingkan dengan rata-rata bergerak sederhana dan rata-rata bergerak tertimbang, rata-rata bergerak Hull memiliki lag yang lebih sedikit, sehingga dapat bereaksi lebih cepat terhadap perubahan harga, meningkatkan responsif strategi.

  2. Dengan menggunakan silang dua HMA dengan periode yang berbeda untuk menghasilkan sinyal, banyak kebisingan dan sinyal palsu dapat secara efektif disaring, meningkatkan keandalan sinyal.

  3. Parameternya dapat disesuaikan. Dengan menyesuaikan parameter periode HMA, strategi dapat disesuaikan dengan pasar dan instrumen perdagangan yang berbeda.

Risiko

  1. Hull Moving Average adalah indikator yang tertinggal, yang dapat menghasilkan sinyal palsu pada tahap awal pembalikan tren.

  2. Pemilihan parameter yang tidak tepat dapat menyebabkan kinerja strategi yang buruk. Jika periode terlalu lama, strategi akan lambat dalam menanggapi; jika periode terlalu pendek, itu dapat menyebabkan sinyal palsu yang berlebihan.

  3. Seperti semua strategi yang didasarkan pada satu indikator, strategi ini mungkin tidak berkinerja baik di pasar sampingan, menghasilkan lebih banyak sinyal palsu dan kehilangan perdagangan.

Arahan Optimasi

  1. Pertimbangkan untuk memasukkan indikator teknis atau faktor fundamental lainnya sebagai filter, seperti volume perdagangan, indikator tren, dll., untuk lebih mengkonfirmasi validitas sinyal silang HMA.

  2. Untuk optimasi parameter, metode seperti algoritma genetik dan pencarian grid dapat digunakan untuk menemukan kombinasi parameter optimal pada data historis yang paling sesuai dengan pasar saat ini.

  3. Mengintegrasikan mekanisme stop loss dan take profit ke dalam strategi untuk mengendalikan risiko dan pengembalian setiap perdagangan.

  4. Dengan memperkenalkan indikator untuk menilai tren pasar, seseorang dapat berdagang di pasar tren dan menghindari pasar sampingan.

Ringkasan

Strategi Hull Moving Average Crossover adalah strategi trading yang sederhana dan mudah digunakan. Dengan karakteristik respon cepat dari HMA, ia dapat menangkap perubahan harga secara tepat waktu. Namun, seperti semua strategi, ia juga memiliki keterbatasan dan kinerjanya akan dipengaruhi oleh jenis pasar dan pemilihan parameter. Dalam aplikasi praktis, ia dapat dikombinasikan dengan metode analisis lainnya untuk lebih mengkonfirmasi sinyal. Pada saat yang sama, langkah-langkah kontrol risiko yang wajar, seperti stop-loss dan take-profit, manajemen posisi, dll, juga merupakan bagian yang sangat diperlukan untuk operasi yang stabil dari strategi.


/*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)


Lebih banyak