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.
HMA dihitung sebagai berikut:
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.
Dengan menggunakan silang dua HMA dengan periode yang berbeda untuk menghasilkan sinyal, banyak kebisingan dan sinyal palsu dapat secara efektif disaring, meningkatkan keandalan sinyal.
Parameternya dapat disesuaikan. Dengan menyesuaikan parameter periode HMA, strategi dapat disesuaikan dengan pasar dan instrumen perdagangan yang berbeda.
Hull Moving Average adalah indikator yang tertinggal, yang dapat menghasilkan sinyal palsu pada tahap awal pembalikan tren.
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.
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.
Pertimbangkan untuk memasukkan indikator teknis atau faktor fundamental lainnya sebagai filter, seperti volume perdagangan, indikator tren, dll., untuk lebih mengkonfirmasi validitas sinyal silang HMA.
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.
Mengintegrasikan mekanisme stop loss dan take profit ke dalam strategi untuk mengendalikan risiko dan pengembalian setiap perdagangan.
Dengan memperkenalkan indikator untuk menilai tren pasar, seseorang dapat berdagang di pasar tren dan menghindari pasar sampingan.
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)