Strategi ini adalah berdasarkan isyarat silang Hull Moving Average (HMA). Hull Moving Average adalah penunjuk teknikal yang dibangunkan oleh Alan Hull, yang bertujuan untuk mengurangkan kelewatan purata bergerak tradisional. Strategi ini menggunakan dua HMA dengan tempoh yang berbeza. Isyarat beli dihasilkan apabila HMA jangka pendek melintasi di atas HMA jangka panjang, dan isyarat jual dihasilkan apabila sebaliknya berlaku.
HMA dikira seperti berikut:
Berbanding dengan Purata Bergerak Sederhana dan Purata Bergerak Bertimbang, Purata Bergerak Hull mempunyai kelewatan yang lebih rendah, oleh itu ia dapat bertindak balas dengan lebih cepat terhadap perubahan harga, meningkatkan daya respon strategi.
Dengan menggunakan persilangan dua HMA dengan tempoh yang berbeza untuk menghasilkan isyarat, banyak bunyi bising dan isyarat palsu dapat disaring dengan berkesan, meningkatkan kebolehpercayaan isyarat.
Parameternya boleh disesuaikan. Dengan menyesuaikan parameter tempoh HMA, strategi boleh disesuaikan dengan pasaran dan instrumen perdagangan yang berbeza.
Hull Moving Average adalah penunjuk yang ketinggalan, yang boleh menghasilkan isyarat palsu pada peringkat awal pembalikan trend.
Pemilihan parameter yang tidak sesuai boleh membawa kepada prestasi strategi yang buruk. Jika tempohnya terlalu lama, strategi akan lambat dalam bertindak balas; jika tempohnya terlalu pendek, ia boleh membawa kepada isyarat palsu yang berlebihan.
Seperti semua strategi berdasarkan satu petunjuk, strategi ini mungkin tidak berfungsi dengan baik di pasaran sampingan, menghasilkan lebih banyak isyarat palsu dan kehilangan perdagangan.
Pertimbangkan untuk memperkenalkan penunjuk teknikal atau faktor asas lain sebagai penapis, seperti jumlah dagangan, penunjuk trend, dan lain-lain, untuk mengesahkan lagi kesahihan isyarat silang HMA.
Untuk pengoptimuman parameter, kaedah seperti algoritma genetik dan carian grid boleh digunakan untuk mencari kombinasi parameter optimum pada data sejarah yang paling sesuai dengan pasaran semasa.
Menggabungkan mekanisme stop-loss dan mengambil keuntungan ke dalam strategi untuk mengawal risiko dan pulangan setiap perdagangan.
Pertimbangkan trend pasaran. Dengan memperkenalkan penunjuk untuk menilai trend pasaran, seseorang boleh berdagang di pasaran trend dan mengelakkan pasaran sampingan.
Strategi Hull Moving Average Crossover adalah strategi perdagangan yang mudah dan mudah digunakan. Dengan ciri tindak balas cepat HMA, ia dapat menangkap perubahan harga dengan cara yang tepat pada masanya. Walau bagaimanapun, seperti semua strategi, ia juga mempunyai keterbatasan dan prestasi akan dipengaruhi oleh jenis pasaran dan pemilihan parameter. Dalam aplikasi praktikal, ia boleh digabungkan dengan kaedah analisis lain untuk mengesahkan isyarat lebih lanjut. Pada masa yang sama, langkah-langkah kawalan risiko yang munasabah, seperti stop-loss dan mengambil keuntungan, pengurusan kedudukan, dll., juga merupakan bahagian yang sangat diperlukan untuk operasi stabil 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)