Hull Moving Average dan Kalman Filter Based Trend Tracking Strategy

Penulis:ChaoZhang, Tarikh: 2023-11-01 17:10:49
Tag:

img

Ringkasan

Strategi ini menggabungkan Hull Moving Average dan penapis Kalman untuk mengenal pasti dan mengesan trend harga, yang tergolong dalam strategi penjejakan trend.

Logika Strategi

  • Strategi ini menggunakan Purata Bergerak Hull 24 tempoh (hma) dan Purata Bergerak Hull Triple 24 tempoh (hma3) untuk membina isyarat perdagangan.

  • Apabila hma melintasi atas hma3, isyarat beli dihasilkan. Apabila hma melintasi di bawah hma3, isyarat jual dihasilkan.

  • Penapis Kalman dimatikan secara lalai. Apabila diaktifkan, ia meluruskan hma dan hma3 untuk menapis bunyi bising yang berlebihan dan meningkatkan kualiti isyarat.

  • Penapis Kalman menghapuskan bunyi bising rawak dari isyarat melalui langkah ramalan dan pembetulan. Perbezaan antara setiap pengukuran dan ramalan terakhir dirawat sebagai item pembetulan untuk meramalkan pengukuran seterusnya dengan lebih tepat. Dengan mengulangi ramalan dan pembetulan, kesan bunyi bising dapat dikurangkan secara beransur-ansur untuk meluruskan isyarat.

  • Strategi ini memanfaatkan penapis Kalman untuk meningkatkan kestabilan strategi purata bergerak dengan menapis turun naik rawak dan mengesan trend berterusan.

Kelebihan

  • Sistem purata bergerak berganda dapat mengenal pasti trend yang berkekalan lebih baik berbanding purata bergerak tunggal.

  • Hull Moving Average memberi lebih banyak berat kepada harga baru-baru ini melalui pengiraan bertingkat, menjadikannya lebih sensitif dalam menangkap perubahan harga.

  • Penapis Kalman dapat menapis bunyi rawak dari isyarat dengan berkesan, mengurangkan isyarat palsu dan meningkatkan kualiti isyarat.

  • Parameter yang boleh diselaraskan seperti tempoh dan keuntungan penapis Kalman membolehkan strategi menyesuaikan diri dengan keadaan pasaran yang berbeza.

  • Menggunakan teknik merentas tempoh menghasilkan isyarat yang lebih berterusan, mengelakkan salah arah oleh turun naik secara rawak yang berlebihan.

  • Antara muka visual secara intuitif memaparkan isyarat dan status trend untuk kemudahan operasi.

Risiko

  • Purata bergerak berganda cenderung menghasilkan isyarat yang salah di sekitar titik perubahan trend, tidak dapat menangkap pembalikan tepat pada masanya.

  • Kelewatan purata bergerak mungkin kehilangan peluang pembalikan harga yang cepat.

  • Tidak sesuai untuk pasaran turun naik yang ganas.

  • Parameter penapis Kalman boleh menjejaskan prestasi strategi.

  • Tempoh yang lebih lama mempunyai tindak balas yang perlahan manakala tempoh yang lebih pendek terdedah kepada bunyi bising.

  • Tempoh pegangan panjang / pendek yang tidak tetap membawa kepada masa tidak aktif tanpa kedudukan, mengurangkan kecekapan penggunaan modal.

Peningkatan

  • Cuba rata-rata bergerak adaptif yang secara dinamik mengoptimumkan parameter berdasarkan turun naik.

  • Masukkan metrik turun naik untuk mengelakkan perdagangan semasa pasaran yang bergolak dan hanya berdagang pada trend yang jelas.

  • Tetapkan stop loss untuk mengurangkan kerugian dan meningkatkan kawalan risiko.

  • Mengoptimumkan parameter penapis Kalman untuk mengimbangi kepekaan pengesanan dan tahap penapis bunyi bising.

  • Memastikan keabsahan isyarat dengan penunjuk lain seperti jumlah, Bollinger Bands untuk kesinambungan trend.

  • Menggunakan pembelajaran mesin untuk melatih parameter dan meningkatkan ketahanan strategi dan daya adaptasi.

Kesimpulan

Strategi ini berkesan mengenal pasti trend yang berkekalan dan meningkatkan kualiti isyarat dengan dua Hull MAs dan penapis Kalman. Perhatikan pengoptimuman parameter, penyesuaian pasaran dan kawalan risiko untuk keuntungan yang stabil. Penambahbaikan lanjut boleh dicapai melalui pembelajaran mesin dan analisis kuantitatif. Penambahbaikan berterusan akan membentuk sistem penjejakan trend yang kukuh dan cekap.


/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hull Trend with Kahlman Strategy Backtest", shorttitle="HMA-Kahlman Trend Strat", overlay=true)

src       = input(hl2,   "Price Data")
length    = input(24,    "Lookback")
showcross = input(true,  "Show cross over/under")
gain      = input(10000, "Gain")
k         = input(true,  "Use Kahlman")

hma(_src, _length) =>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length) =>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1],x)+dk*sqrt((g/10000)*2)
    velo = 0.0
    velo := nz(velo[1],0) + ((g/10000)*dk)
    kf := smooth+velo
  
a = k ? kahlman(hma(src, length), gain) : hma(src, length)
b = k ? kahlman(hma3(src, length), gain) : hma3(src, length)
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]

p1 = plot(a,color=c,linewidth=1,transp=75)
p2 = plot(b,color=c,linewidth=1,transp=75)
fill(p1,p2,color=c,transp=55)
plotshape(showcross and crossdn ? a : na, location=location.absolute, style=shape.labeldown, color=color.red, size=size.tiny, text="S", textcolor=color.white, transp=0, offset=-1)
plotshape(showcross and crossup ? a : na, location=location.absolute, style=shape.labelup, color=color.green, size=size.tiny, text="B", textcolor=color.white, transp=0, offset=-1)

longCondition = crossup
if (longCondition)
    strategy.entry("LE", strategy.long)

shortCondition = crossdn
if (shortCondition)
    strategy.entry("SE", strategy.short)
    


Lebih lanjut