Strategi ini menghasilkan sinyal perdagangan berdasarkan rata-rata bergerak dinamis untuk pergi panjang ketika harga saham naik dan menutup posisi ketika harga turun. Dengan menggabungkan keuntungan dari indikator momentum dan rata-rata bergerak, itu bertujuan untuk melacak tren harga jangka menengah untuk keuntungan yang stabil.
Strategi ini terutama didasarkan pada tiga varian Hull Moving Average (HMA)
Rumus untuk HMA adalah:
HMA = WMA(2*WMA(dekat, n/2)-WMA(dekat, n), sqrt(n))
Di mana WMA adalah Rata-rata Bergerak Bertimbang dan n adalah parameter periode.
Rumus untuk WHMA dan EHMA mirip.
Setelah menghitung HMA, strategi ini menggunakan nilai midline HMA sebagai sinyal perdagangan. Ini pergi panjang ketika harga melintasi di atas midline HMA dan menutup posisi ketika harga jatuh di bawah garis. Dengan demikian, strategi ini melacak tren jangka menengah menggunakan midline HMA untuk keuntungan.
Dibandingkan dengan strategi MA tradisional, strategi ini memiliki keunggulan berikut:
Ada juga beberapa risiko:
Solusi:
Strategi ini juga dapat ditingkatkan dari aspek berikut:
Strategi perdagangan MA yang dinamis mengintegrasikan respon cepat dari HMA untuk melacak tren harga jangka menengah secara efektif. Dengan membuka posisi panjang pada waktu yang tepat dan menghentikan penutupan, telah menunjukkan hasil backtest yang baik. Perbaikan lebih lanjut dalam penyesuaian parameter dan penyaringan saham akan mengarah pada pengembalian kelebihan yang lebih stabil. Ini adalah strategi kuantitatif yang mudah diimplementasikan dan dapat dikontrol risiko.
/*backtest start: 2022-12-14 00:00:00 end: 2023-12-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Position Investing by SirSeff', 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) 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) ////////////////////////////////////////////////////////////////////// // Testing Start dates testStartYear = input(2000, '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() => true // Component Code Stop ////////////////////////////////////////////////////////////////////// //INPUT src = input(close, title='Source') 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) if HULL[0] > HULL[2] and testPeriod() strategy.entry('Invest', strategy.long) if HULL[0] < HULL[2] and testPeriod() strategy.entry('Pause', strategy.short)