
Strategi ini menggabungkan kelebihan indikator dinamik dan rata-rata bergerak untuk menjejaki trend harga saham dalam jangka masa pertengahan dan mencapai keuntungan yang stabil.
Strategi ini berdasarkan kepada tiga jenis Hull Moving Average, iaitu Hull Moving Average ((HMA), Hull Moving Average ((WHMA), dan Hull Moving Average ((EHMA)). Berdasarkan kod, strategi ini membolehkan pengguna beralih antara tiga jenis Hull MA.
Formula pengiraan HMA ialah:
HMA = WMA(2*WMA(close,n/2)-WMA(close,n),sqrt(n))
Di antaranya, WMA mewakili purata bergerak bertimbangan dan n mewakili parameter kitaran. HMA bertindak balas lebih cepat terhadap perubahan harga berbanding SMA (rata-rata bergerak mudah).
Rumus pengiraan WHMA dan EHMA serupa dengan HMA.
Selepas mengira HMA, strategi ini menggunakan nilai garis tengah HMA sebagai isyarat perdagangan. Apabila harga melewati garis tengah HMA, masuk lebih banyak; Apabila harga melewati garis tengah HMA, keluarlah. Dengan demikian, ia menggunakan garis tengah HMA untuk mengikuti trend harga jangka menengah dan mencapai keuntungan.
Strategi ini mempunyai kelebihan berbanding strategi purata bergerak tradisional:
Strategi ini mempunyai beberapa risiko:
Kaedah pencegahan:
Strategi ini juga boleh dioptimumkan dengan:
Strategi perdagangan rata-rata bergerak ini menggabungkan kelebihan tindak balas cepat Hull MA, dapat mengesan trend harga saham dalam jangka masa pertengahan dengan berkesan, melakukan lebih banyak kedudukan dan berhenti pada waktu yang tepat, dan melakukan pengiraan sejarah dengan baik. Dengan mengoptimumkan lagi parameter, pilihan saham, strategi ini dapat memperoleh keuntungan tambahan yang lebih stabil.
/*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)