Strategi Dagangan Purata Bergerak Dual Hull adalah strategi perdagangan kuantitatif yang menggunakan Purata Bergerak Dual Hull sebagai isyarat perdagangan. Ia berdasarkan pendekatan analisis teknikal tradisional menggunakan garis purata bergerak tunggal dan menggantinya dengan Purata Bergerak Dual Hull untuk membuat keputusan panjang dan pendek pada titik persilangan.
Pada teras Strategi Dagangan Purata Bergerak Dual Hull adalah Purata Bergerak Dual Hull (DHMA). DHMA terdiri daripada tiga garis: rel tengah, atas dan bawah, yang mewakili nilai harga purata yang berbeza. Rumusnya adalah:
Rel Tengah: Mod ((modSwitch, src, len)
Rel atas: HULL[0]
Rel bawah: HULL [2]
Di sini fungsi Mode boleh memilih antara varian Hull MA yang berbeza seperti HMA, EHMA atau THMA. Src bermaksud sumber harga, dan len adalah parameter tempoh.
Strategi menggunakan rel tengah DHMA sebagai rujukan untuk menentukan hubungan harga dan menjana isyarat perdagangan:
Dengan kata lain, jika harga penutupan bar semasa berada di atas nilai rel tengah, pergi panjang pada bar seterusnya; jika harga penutupan berada di bawah, tutup kedudukan panjang pada bar seterusnya.
Strategi Dagangan Purata Bergerak Dual Hull mempunyai kelebihan berikut:
Menggunakan mekanisme band tiga daripada garis purata bergerak tunggal untuk kesan sokongan / rintangan yang lebih baik dan pengesanan trend.
Berbanding dengan MA biasa, Hull Moving Averages mempunyai kelewatan yang lebih rendah dan bertindak balas dengan lebih baik terhadap perubahan harga.
Mengambil teknik analisis teknikal tradisional untuk pemahaman yang mudah, sesuai untuk perdagangan algo.
Logiknya mudah dan jelas, mudah dilaksanakan, sesuai dengan perdagangan algoritma frekuensi tinggi.
Jenis dan parameter MA Hull yang boleh disesuaikan untuk pengoptimuman di seluruh produk dan jangka masa yang berbeza.
Walaupun mempunyai banyak kelebihan, strategi ini juga menimbulkan beberapa risiko untuk diperhatikan:
Lebih banyak whipsaws boleh berlaku semasa pasaran sampingan yang bergelora.
Strategi ini terutamanya mengikuti trend, kurang berkesan semasa tempoh rata. penapis tambahan untuk kekuatan trend boleh membantu.
Hull MAs masih mempunyai beberapa tahap kelewatan, terutamanya untuk jangka pendek. pengoptimuman parameter dan penunjuk combo boleh meringankan ini.
Menguruskan saiz kedudukan dan kekerapan perdagangan.
Berikut adalah beberapa aspek utama untuk mengoptimumkan strategi:
Mengoptimumkan jenis dan parameter Hull MA untuk menyesuaikan sensitiviti rel tengah untuk produk yang berbeza.
Tambahkan mekanisme stop loss seperti trailing stop atau stop loss tambahan untuk mengawal jumlah kerugian perdagangan tunggal.
Gabungkan dengan penunjuk lain untuk menentukan arah trend dan kekuatan, mengelakkan perangkap.
Tambah syarat pengaktifan strategi berdasarkan bilangan perdagangan atau nisbah keuntungan untuk mengawal jumlah penutupan kitaran, mengurangkan keluar.
Gunakan TF yang lebih tinggi untuk menentukan trend keseluruhan untuk mengelakkan bunyi bising.
Memperbaiki logik kemasukan, mengesahkan entri dengan corak lilin untuk meningkatkan kepastian kemasukan.
Ringkasnya, Strategi Dagangan Purata Bergerak Hull Berganda adalah pendekatan kuantitatif yang menggunakan tindak balas cepat, trend mengikuti Purata Bergerak Hull untuk membina isyarat perdagangan. Berbanding dengan MA tradisional, ia mempunyai tindak balas yang lebih cepat dan keupayaan penjejakan yang lebih baik. Logik strategi adalah mudah dan jelas, mudah untuk automatik untuk perdagangan algoritma. Masih ada risiko bunyi dan trend mengikuti batasan. Teknik seperti penyesuaian parameter, stop loss, dan menggabungkan penunjuk lain dapat meningkatkan prestasi praktikalnya.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //Basic Hull Ma Pack tinkered by InSilico //Converted to Strategy by DashTrader strategy("Hull Suite Strategy", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0) ////////////////////////////////////////////////////////////////////// // Testing Start dates testStartYear = input(2016, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) //Stop date if you want to use a specific range of dates testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false // Component Code Stop ////////////////////////////////////////////////////////////////////// //INPUT HAClose = security(heikinashi(syminfo.tickerid), timeframe.period, close) src = input(close, title="Source") modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"]) length = input(55, title="Length(180-200 for floating S/R , 55 for swing entry)") 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) //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, length) 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) ///< Ending Filler fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch) ///BARCOLOR barcolor(color = candleCol ? (switchColor ? hullColor : na) : na) if HULL[0] > HULL[2] and testPeriod() strategy.entry("long", strategy.long) if HULL[0] < HULL[2] and testPeriod() strategy.close("long")