Hull Moving Average Trend Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2023-09-16 18:41:33
Tag:

Ringkasan

Hull Moving Average trend following strategy menggunakan Hull Moving Average untuk menentukan arah trend pasaran dan menjana isyarat beli dan jual.

Prinsip-prinsip

Strategi ini menggunakan kedua-dua purata bergerak Hull dan purata bergerak mudah untuk menentukan arah trend. Apabila tempoh Hull MA yang lebih pendek melintasi di atas tempoh Hull MA yang lebih lama, ia menghasilkan isyarat beli. Apabila Hull MA yang lebih pendek melintasi di bawah yang lebih lama, ia menghasilkan isyarat jual.

purata bergerak mudah menentukan arah trend masa nyata. Apabila EMA yang lebih pendek melintasi di atas EMA yang lebih panjang, ia menunjukkan aliran menaik. Apabila EMA yang lebih pendek melintasi di bawah EMA yang lebih panjang, ia menunjukkan aliran menurun. Perdagangan diambil hanya apabila isyarat Hull MA dan EMA bersetuju pada bias menaik atau menurun.

Di samping itu, strategi ini menggunakan saluran badan K-line untuk mengukur turun naik pasaran dan mengelakkan perdagangan dalam penyatuan. Perdagangan hanya dipertimbangkan apabila harga keluar dari julat saluran.

Kelebihan

  • MA Hull lebih sensitif dalam mengesan perubahan harga dan perubahan trend awal.

  • Menggunakan kedua-dua Hull MA dan EMA menghapuskan isyarat palsu.

  • Saluran K-line mengelakkan perdagangan berlebihan di pasaran sampingan.

  • Mengikuti trend membolehkan penangkapan keuntungan yang berterusan apabila trend meluas.

Risiko

  • Purata bergerak mempunyai kelewatan dan mungkin terlepas titik masuk pembalikan trend optimum.

  • Pengesanan penyatuan yang tidak tepat boleh menyebabkan perdagangan yang buruk.

  • Kekerapan perdagangan yang rendah membawa kepada kesan besar dari perdagangan yang kehilangan tunggal.

  • Tidak dapat memanfaatkan turun naik jangka pendek.

Pengurusan Risiko

  • Mengoptimumkan tempoh MA untuk penjanaan isyarat trend yang tepat pada masanya.

  • Gunakan penunjuk lain seperti RSI dan BBANDS untuk menentukan penyatuan.

  • Melakukan pengurusan modal yang agresif untuk mengehadkan peratusan kerugian setiap perdagangan.

  • Menambah dengan strategi lain untuk memanfaatkan keuntungan jangka pendek.

Ringkasan

Hull Moving Average Trend Following Strategy secara berkesan mengesan trend jangka menengah hingga panjang melalui penggunaan gabungan Hull MA dan EMA. Ia mengumpulkan keuntungan sepanjang trend keuntungan dan keluar awal sebelum pembalikan. Ini adalah strategi perdagangan kuant yang mudah dan praktikal yang patut disyorkan.


/*backtest
start: 2023-08-16 00:00:00
end: 2023-09-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

// strategy(title='HULLMiguel 2019/ Strategy v3', shorttitle='HULLMiguel_2019_Strategy', overlay=true, pyramiding=0, default_qty_value=1000, initial_capital=1000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=blue, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=15) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=3, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? green: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=2, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(16, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(10, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=5, title="Hull MA")
dif_close_hull= (close-hullma(hma_src, hma_base_length+hma_length_scalar*6))/close
Percent_dif = (dif_close_hull/(hullma(hma_src, hma_base_length+hma_length_scalar*6)))
//direction3 = Percent_dif>0 ? +1 : Percent_dif<0 ? -1 : 0
//plot_color3 = direction3 > 0  ? lime: direction3 < 0 ? red : na
//plot(dif_close_hull, title="dif close hull", style=line, linewidth=6, color = plot_color3)

//============ signal Generator ==================================//
Piriod=input('720')
ch1 = security(syminfo.tickerid, Piriod, open)
ch2 = security(syminfo.tickerid, Piriod, close)
plot(ch1, title="EMA Signal 2", style=line, linewidth=1, color = blue)
//longCondition = crossover(security(tickerid, Piriod, close),security(tickerid, Piriod, open))
//plot((close-ema02)/ema02+close)
longCondition = direction > 0 and direction2> 0

if (longCondition)
    strategy.entry("BUY", strategy.long)
//shortCondition = crossunder(security(tickerid, Piriod, close),security(tickerid, Piriod, open))
shortCondition = direction < 0 and direction2 < 0

if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////

Lebih lanjut