
Artikel ini memperkenalkan strategi perdagangan kuantitatif yang dioptimumkan berdasarkan Hull Moving Average (HMA), yang menggabungkan analisis pelbagai kitaran dan mekanisme berhenti dinamik. Strategi ini telah diperbaiki berdasarkan Hull Suite yang terkenal, dengan menambah perintah “strategy.exit (() ” dari PineScript v5 untuk mencapai trailing stop atau penundaan trailing stop. Strategi ini menggunakan ciri tindak balas cepat HMA untuk menangkap trend pasaran, sambil meningkatkan kebolehpercayaan isyarat melalui analisis beberapa tempoh tempoh.
Hull Moving Average ((HMA): Strategi ini menggunakan HMA dan variannya ((EHMA dan THMA) untuk mengenal pasti trend pasaran. HMA mempunyai kelajuan tindak balas yang lebih cepat dan kurang ketinggalan berbanding dengan purata bergerak tradisional.
Analisis pelbagai kitaran: Strategi untuk menghasilkan isyarat perdagangan dengan membandingkan HMA dari tempoh masa yang berbeza. Kaedah ini dapat mengurangkan isyarat palsu dan meningkatkan ketepatan perdagangan.
Hentian dinamik: Strategi menggunakan mekanisme trailing stop, yang diaktifkan setelah keuntungan mencapai beberapa mata, untuk mengunci keuntungan dengan berkesan dan mengawal risiko.
Kawalan masa perdagangan: Strategi membolehkan pengguna menentukan masa perdagangan tertentu, yang membantu mengelakkan perdagangan pada masa yang kurang turun naik atau kurang likuid.
Kawalan arah: Strategi memberikan pilihan untuk memilih arah perdagangan (untuk melakukan lebih, lebih pendek atau dua arah), yang membolehkan ia menyesuaikan diri dengan persekitaran pasaran dan gaya perdagangan yang berbeza.
Fleksibiliti: Strategi membolehkan pengguna memilih varian purata bergerak Hull yang berbeza (HMA, EHMA, THMA) untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
Pengurusan risiko yang cemerlang: Dengan menggunakan mekanisme hentian kerugian dinamik, strategi dapat mengehadkan potensi kerugian sambil melindungi keuntungan.
Kebolehan beradaptasi: Kaedah analisis pelbagai kitaran membolehkan strategi menyesuaikan diri dengan keadaan pasaran yang berbeza, mengurangkan kesan isyarat palsu.
Kesan visual yang baik: Strategi menyediakan pelbagai pilihan visual, seperti carta pita HMA berkod warna, yang membantu peniaga memahami trend pasaran dengan lebih intuitif.
Tahap automasi yang tinggi: Strategi boleh dilaksanakan secara automatik, mengurangkan kemungkinan kesan emosi manusia dan kesilapan operasi.
Overtrading: Terlalu banyak isyarat palsu boleh dihasilkan di pasaran horisontal, yang menyebabkan overtrading kerana strategi berdasarkan HMA yang bertindak balas cepat.
Risiko tergelincir: Strategi menggunakan teknik scalping yang mungkin menghadapi risiko tergelincir yang lebih tinggi, terutamanya di pasaran yang kurang cair.
Sensitiviti parameter: Prestasi strategi sangat bergantung pada tetapan parameter, parameter yang tidak betul boleh menyebabkan prestasi strategi yang buruk.
Perubahan keadaan pasaran: Dalam keadaan pasaran yang berubah-ubah, strategi mungkin perlu mengoptimumkan semula parameter untuk kekal berkesan.
Ketergantungan teknologi: pelaksanaan strategi bergantung kepada sambungan rangkaian dan platform perdagangan yang stabil, dan kegagalan teknologi boleh menyebabkan kerugian besar.
Meningkatkan penunjuk sentimen pasaran: Gabungan penunjuk sentimen pasaran seperti VIX, implied volatility option, dan lain-lain dapat membantu strategi untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
Memperkenalkan algoritma pembelajaran mesin: Menggunakan teknologi pembelajaran mesin untuk menyesuaikan parameter HMA dan tahap stop loss secara dinamik, yang dapat meningkatkan daya serap strategi.
Peningkatan analisis jumlah transaksi: data jumlah transaksi dapat meningkatkan ketepatan penilaian trend dan mengurangkan kerugian akibat penembusan palsu.
Pilihan kerangka masa yang dioptimumkan: Cari tetapan analisis pelbagai tempoh yang optimum dengan mengkaji semula kombinasi kerangka masa yang berbeza.
Memperkenalkan kaedah pembatalan risiko: Menggunakan kaedah pembatalan risiko dalam perdagangan pelbagai jenis untuk mengagihkan dana, dapat mengawal risiko portfolio keseluruhan dengan lebih baik.
Strategi perdagangan kuantitatif berkala yang dioptimumkan HMA yang digabungkan dengan hentian dinamik adalah sistem perdagangan yang fleksibel dan cekap. Ia menyediakan pedagang dengan penyelesaian perdagangan kuantitatif yang komprehensif dengan menggabungkan ciri-ciri tindak balas cepat Hull Moving Average, kestabilan analisis berkala dan kawalan risiko hentian dinamik. Walaupun strategi ini berkinerja baik dalam pasaran yang berubah dengan cepat, ia masih memerlukan pedagang untuk memperhatikan perubahan keadaan pasaran dan menyesuaikan parameter tepat pada masanya untuk mengekalkan keberkesanannya.
/*backtest
start: 2023-07-25 00:00:00
end: 2024-07-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © anotherDAPTrader
//Based upon Hull Suite by InSilico and others//
//with SCALP exit//
//@version=5
strategy('DAP Hull Sweet Scalp v1 Strategy', overlay=true)
// Session //
session = input(title='Session (Goes flat at end of session!)', defval='1800-1700')
//Check if it's in session//
is_session(session) =>
not na(time(timeframe.period, session))
//Call the function
Session = is_session(session)
//Start and end of the session
start = Session and not Session[1]
end = not Session and Session[1]
//Plot the background color to see the session
bgcolor(Session ? color.new(color.white, 0) : na)
// trade directions //
strat_dir_input = input.string(title='Strategy Direction', defval='long', options=['long', 'short', 'all'])
strat_dir_value = strat_dir_input == 'long' ? strategy.direction.long : strat_dir_input == 'short' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
src = close
modeSwitch = input.string('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.int(40, title='Band Transparency', step=5)
//FUNCTIONS
//HMA
HMA(_src, _length) =>
ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA
EHMA(_src, _length) =>
ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA
THMA(_src, _length) =>
ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.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)
// Scalp //
slPoints = input.int(title='Profit Points Before Stop', minval=0, maxval=1000, step=1, defval=1, confirm=false)
slOffset = input.int(title='Then Trailing Stop Loss of ', minval=1, maxval=1000, step=1, defval=1, confirm=false)
//trades//
// Long Entry Function//
if Session and ta.crossover(HULL[0] , HULL[2])
strategy.entry('long', strategy.long)
strategy.exit('trailing stop', from_entry='long', trail_points=slPoints, trail_offset=slOffset)
// Short Entry Function//
if Session and ta.crossunder(HULL[0] , HULL[2])
strategy.entry('short', strategy.short)
strategy.exit('trailing stop', from_entry='short', trail_points=slPoints, trail_offset=slOffset)
if end
strategy.close_all("End of Session - Go FLat")