Strategi ini menggabungkan Hull Moving Average dan filter Kalman untuk mengidentifikasi dan melacak tren harga, yang termasuk dalam strategi pelacakan tren.
Strategi ini menggunakan 24-periode Hull Moving Average (hma) dan 24-periode Triple Hull Moving Average (hma3) untuk membangun sinyal perdagangan.
Ketika HMA melintasi HMA3, sinyal beli dihasilkan. Ketika HMA melintasi di bawah HMA3, sinyal jual dihasilkan.
Filter Kalman dinonaktifkan secara default. Ketika diaktifkan, ia meratakan hma dan hma3 untuk menyaring kebisingan yang berlebihan dan meningkatkan kualitas sinyal.
Filter Kalman menghilangkan kebisingan acak dari sinyal melalui langkah-langkah prediksi dan koreksi. Perbedaan antara setiap pengukuran dan prediksi terakhir diperlakukan sebagai item koreksi untuk memprediksi pengukuran berikutnya dengan lebih tepat. Dengan mengulangi prediksi dan koreksi, dampak kebisingan dapat berangsur-angsur berkurang untuk meluruskan sinyal.
Strategi ini memanfaatkan filter Kalman untuk meningkatkan stabilitas strategi rata-rata bergerak dengan menyaring fluktuasi acak dan melacak tren persisten.
Sistem rata-rata bergerak ganda dapat lebih baik mengidentifikasi tren jangka panjang dibandingkan dengan rata-rata bergerak tunggal.
Hull Moving Average menempatkan lebih banyak bobot pada harga terbaru melalui perhitungan tertimbang, membuatnya lebih sensitif dalam menangkap perubahan harga.
Filter Kalman dapat secara efektif menyaring kebisingan acak dari sinyal, mengurangi sinyal palsu dan meningkatkan kualitas sinyal.
Parameter yang dapat disesuaikan seperti periode dan keuntungan filter Kalman memungkinkan strategi untuk beradaptasi dengan kondisi pasar yang berbeda.
Mengadopsi teknik lintas periode menghasilkan sinyal yang lebih permanen, menghindari tertipu oleh fluktuasi acak yang berlebihan.
Antarmuka visual secara intuitif menampilkan sinyal dan status tren untuk kemudahan operasi.
Rata-rata bergerak ganda cenderung menghasilkan sinyal yang salah di sekitar titik balik tren, tidak dapat menangkap pembalikan tepat waktu.
Keterlambatan rata-rata bergerak dapat kehilangan peluang pembalikan harga yang cepat.
Tidak cocok untuk pasar yang berfluktuasi keras.
Kalman filter parameter dapat mempengaruhi kinerja strategi. terlalu besar keuntungan dapat menyaring sinyal yang valid.
Periode yang lebih lama memiliki respons yang lambat sementara periode yang lebih pendek rentan terhadap kebisingan.
Periode kepemilikan panjang/pendek yang tidak tetap menyebabkan waktu kosong tanpa posisi, mengurangi efisiensi pemanfaatan modal.
Cobalah rata-rata bergerak adaptif yang secara dinamis mengoptimalkan parameter berdasarkan volatilitas.
Masukkan metrik volatilitas untuk menghindari perdagangan selama pasar bergolak dan hanya berdagang pada tren yang jelas.
Atur stop loss untuk membatasi kerugian dan meningkatkan kontrol risiko.
Mengoptimalkan parameter filter Kalman untuk menyeimbangkan sensitivitas pelacakan dan tingkat penyaringan kebisingan.
Konfirmasi validitas sinyal dengan indikator lain seperti volume, Bollinger Bands untuk persistensi tren.
Memanfaatkan pembelajaran mesin untuk melatih parameter dan meningkatkan kekuatan strategi dan kemampuan beradaptasi.
Strategi ini secara efektif mengidentifikasi tren jangka panjang dan meningkatkan kualitas sinyal dengan dua Hull MAs dan filter Kalman. Perhatikan optimasi parameter, kemampuan beradaptasi pasar dan pengendalian risiko untuk keuntungan yang stabil. Perbaikan lebih lanjut dapat dicapai melalui pembelajaran mesin dan analisis kuantitatif. Peningkatan berkelanjutan akan membentuk sistem pelacakan tren yang kuat dan efisien.
/*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)