
Strategi perdagangan bergerak dua hala Hall adalah strategi perdagangan kuantitatif yang menggunakan purata bergerak dua hala Hall sebagai isyarat perdagangan. Strategi ini mengambil pendekatan menggunakan purata bergerak tunggal dalam analisis teknikal tradisional, dan menggunakan purata bergerak dua hala Hall untuk membeli dan menjual pada titik pecah.
Pusat strategi perdagangan Hull Moving Average adalah Dual Hull Moving Average. Hull Moving Average terdiri daripada tiga garis tengah, atas dan bawah, yang mewakili purata harga yang berbeza.
Garis tengah:Mode{modeSwitch, src, len) Hull[0] Hull[2]
Fungsi Mode di sini boleh memilih varian yang berbeza dari purata bergerak Hull, termasuk HMA, EHMA dan THMA. Skor mewakili sumber harga, len mewakili panjang kitaran.
Strategi ini menggunakan corong tengah Hull Moving Average sebagai asas untuk menilai hubungan harga dengan corong tengah dan membuat isyarat dagangan:
Iaitu, jika harga penutupan K semasa lebih besar daripada nilai orbit tengah, maka ia akan melakukan lebih banyak apabila K seterusnya dibuka; jika harga penutupan K semasa lebih kecil daripada nilai orbit tengah, maka ia akan ditutup pada K seterusnya.
Strategi perdagangan purata bergerak Hall dua hala mempunyai kelebihan berikut:
Menggunakan zon pita dua arah dan bukannya satu garis rata, mempunyai kesan sokongan dan rintangan yang lebih baik dan lebih baik untuk mengesan trend.
Hull Moving Average mempunyai keterbelakangan yang lebih rendah daripada purata bergerak biasa dan dapat bertindak balas lebih cepat terhadap perubahan harga.
Mengambil pendekatan analisis teknikal tradisional, mudah difahami, sesuai untuk perdagangan automatik.
Logik strategi mudah difahami, mudah dilaksanakan, sesuai untuk perdagangan algoritma frekuensi tinggi.
Jenis dan parameter purata bergerak Hull yang boleh disesuaikan dan dapat dioptimumkan untuk pelbagai jenis dan jangka masa perdagangan.
Walaupun terdapat banyak kelebihan dalam strategi perdagangan HALL, terdapat beberapa risiko yang perlu diperhatikan:
Apabila harga bergoyang, lebih banyak stop loss mungkin berlaku. Parameter boleh disesuaikan dengan betul, menapis sebahagian daripada perdagangan bising.
Strategi ini adalah sebahagian besarnya berdasarkan trend mengikut, tidak berkesan apabila harga mendatar. Anda boleh menyertai petunjuk lain atau mekanisme untuk menilai trend.
Hull Moving Average sendiri juga mempunyai ketinggalan, terutamanya dalam jangka masa pendek. Pengoptimuman parameter dan gabungan boleh diselesaikan sebahagiannya.
Isyarat dagangan sering dan mudah berdagang berlebihan. Pengurusan kedudukan dan kekerapan dagangan dikawal dengan betul.
Strategi perdagangan HALL bergerak dua hala mempunyai beberapa penambahbaikan utama:
Mengoptimumkan jenis dan parameter Hull Moving Average, menyesuaikan sensitiviti mid-trail untuk menyesuaikan dengan varieti dagangan yang berbeza.
Menggabungkan mekanisme hentian kerugian. Trailing stop atau hentian peningkatan, berkesan mengawal kerugian tunggal.
Gabungan dengan penunjuk lain untuk menentukan arah dan kekuatan trend, mengelakkan terikat. Contohnya MACD, KD dan sebagainya.
Tambah syarat pengaktifan strategi berdasarkan jumlah dagangan atau kadar pulangan. Mengendalikan jumlah kitaran tertutup dan mengurangkan kedudukan kosong.
Kerangka masa yang lebih tinggi digunakan untuk menentukan arah trend dan mengelakkan gangguan.
Mengoptimumkan logik kemasukan. Boleh berdasarkan bentuk lilin, meningkatkan kepastian kemasukan.
Strategi perdagangan rata-rata bergerak dua hala Hall secara keseluruhan adalah strategi kuantitatif yang menggunakan rata-rata bergerak indeks trend untuk membina isyarat perdagangan. Berbanding dengan rata-rata bergerak tradisional, responsnya lebih cepat dan kesan pengesanan yang lebih baik.
/*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")