Strategi Trading Rata-rata Bergerak Dual Hull

Penulis:ChaoZhang, Tanggal: 2023-12-11 11:30:15
Tag:

img

Gambaran umum

Strategi Trading Dual Hull Moving Average adalah strategi perdagangan kuantitatif yang menggunakan Dual Hull Moving Average sebagai sinyal perdagangan.

Prinsip-prinsip

Pada inti dari strategi perdagangan Dual Hull Moving Average adalah Dual Hull Moving Average (DHMA). DHMA terdiri dari tiga garis: rel tengah, atas dan bawah, yang mewakili nilai harga rata-rata yang berbeda.

Middle Rail: Mode ((modeSwitch, src, len)
Rel atas: HULL[0] Rel bawah: HULL[2]

Di sini fungsi Mode dapat memilih antara varian Hull MA yang berbeda seperti HMA, EHMA atau THMA. Src berarti sumber harga, dan len adalah parameter periode.

Strategi menggunakan rel tengah DHMA sebagai referensi untuk menentukan hubungan harga dan menghasilkan sinyal perdagangan:

  • Ketika harga melintasi rel tengah, pergi panjang.
  • Ketika harga melintasi bawah rel tengah, posisi ditutup.

Dengan kata lain, jika harga penutupan bar saat ini di atas nilai rel tengah, pergi panjang pada bar berikutnya; jika harga penutupan di bawah, tutup posisi panjang pada bar berikutnya.

Keuntungan

Strategi perdagangan rata-rata bergerak dual-hull memiliki keuntungan berikut:

  1. Menggunakan mekanisme triple bands alih-alih garis rata-rata bergerak tunggal untuk efek support/resistance yang lebih baik dan pelacakan tren.

  2. Dibandingkan dengan MA biasa, Hull Moving Averages memiliki lag yang lebih sedikit dan merespons perubahan harga dengan lebih baik.

  3. Mengadopsi teknik analisis teknis tradisional untuk pemahaman yang mudah, cocok untuk perdagangan algo.

  4. Logikanya sederhana dan jelas, mudah diterapkan, cocok dengan perdagangan algoritma frekuensi tinggi.

  5. Jenis dan parameter Hull MA yang dapat disesuaikan untuk optimalisasi di berbagai produk dan kerangka waktu.

Risiko

Meskipun memiliki banyak manfaat, strategi ini juga menimbulkan beberapa risiko untuk dicatat:

  1. Lebih banyak whipsaws dapat terjadi selama pasar samping bergolak. parameter fine tune untuk menyaring beberapa perdagangan kebisingan.

  2. Strategi ini terutama mengikuti tren, kurang efektif selama periode datar.

  3. Hull MAs masih memiliki beberapa tingkat lag, terutama untuk jangka pendek.

  4. Mengelola ukuran posisi dan frekuensi perdagangan.

Arahan Optimasi

Berikut adalah beberapa aspek utama untuk mengoptimalkan strategi:

  1. Mengoptimalkan jenis dan parameter Hull MA untuk menyesuaikan sensitivitas rel tengah untuk produk yang berbeda.

  2. Tambahkan mekanisme stop loss seperti trailing stop atau incremental stop loss untuk mengontrol jumlah kerugian perdagangan tunggal.

  3. Gabungkan dengan indikator lain untuk menentukan arah dan kekuatan tren, menghindari perangkap. misalnya MACD, KD dll.

  4. Tambahkan kondisi aktivasi strategi berdasarkan jumlah perdagangan atau rasio keuntungan untuk mengontrol jumlah penutupan siklus, mengurangi keluar.

  5. Menggunakan TF yang lebih tinggi untuk menentukan tren keseluruhan untuk menghindari kebisingan.

  6. Memperbaiki logika entri, mengkonfirmasi entri dengan pola lilin untuk meningkatkan kepastian entri.

Kesimpulan

Singkatnya, Strategi Trading Dual Hull Moving Average adalah pendekatan kuantitatif yang memanfaatkan respon cepat, tren mengikuti Hull Moving Averages untuk membangun sinyal perdagangan. Dibandingkan dengan MA tradisional, ia memiliki respons lebih cepat dan kemampuan pelacakan yang lebih baik. Logika strategi sederhana dan jelas, mudah diotomatiskan untuk perdagangan algoritma. Masih ada risiko kebisingan dan tren mengikuti keterbatasan. Teknik seperti penyesuaian parameter, stop loss, dan menggabungkan indikator lain dapat meningkatkan kinerja praktisnya.


/*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")

Lebih banyak