Strategi Pelacakan Tren Berbasis Filter Kalman

Penulis:ChaoZhang, Tanggal: 2024-01-25 14:12:26
Tag:

img

Gambaran umum

Prinsip Strategi

Logika inti dari strategi ini terutama mencakup langkah-langkah berikut:

  1. Menghitung rata-rata bergerak sederhana (SMA) dari harga 1 menit sebagai rata-rata bergerak asli;

  2. Kalman menyaring rata-rata bergerak asli untuk menghasilkan rata-rata bergerak yang halus;

  3. Menghitung sudut tangen dari rata-rata bergerak halus;

  4. Mendefinisikan periode parameter dan secara statistik jumlah sudut tangen dalam periode;

  5. Menghasilkan sinyal beli ketika jumlah sudut tangen dalam periode lebih besar dari 360 derajat; menghasilkan sinyal jual ketika kurang dari -360 derajat.

Dengan desain ini, ketika harga menunjukkan tren naik atau turun, sudut tangen rata-rata bergerak secara bertahap akan menumpuk. Ketika menumpuk sampai batas tertentu, sinyal perdagangan akan dihasilkan. Oleh karena itu, dapat secara efektif melacak tren jangka menengah dan panjang.

Di antara mereka, filter Kalman adalah kuncinya. Filter Kalman adalah algoritma rekursif yang memprediksi nilai kebisingan proses dan kebisingan pengukuran saat memprediksi keadaan saat ini, dan menggunakan nilai kebisingan ini untuk memperbaiki prediksi keadaan saat ini untuk mendapatkan perkiraan keadaan yang lebih akurat dan dapat diandalkan.

Dalam strategi ini, SMA harga dapat dilihat sebagai pengukuran keadaan. Dipengaruhi oleh kebisingan pasar, filter Kalman akan secara rekursif memperkirakan tren harga yang sebenarnya, sangat mengurangi dampak kebisingan, membuat perhitungan rata-rata bergerak berikutnya lebih dapat diandalkan, dan dengan demikian menghasilkan sinyal perdagangan yang lebih stabil dan akurat.

Analisis Keuntungan

Dibandingkan dengan rata-rata bergerak sederhana dan strategi indikator teknis lainnya, keuntungan terbesar dari strategi ini adalah bahwa ia menggunakan filter Kalman untuk mengurangi dampak kebisingan, membuat sinyal perdagangan lebih jelas dan lebih dapat diandalkan.

  1. Mengurangi sinyal palsu. penyaringan Kalman secara efektif menyaring banyak sinyal palsu yang disebabkan oleh fluktuasi acak dengan secara adaptif memperkirakan dan menghilangkan kebisingan, membuat sinyal perdagangan yang dihasilkan lebih andal.

  2. Efek pelacakan yang lebih baik. Bentuk rata-rata bergerak yang halus lebih halus dan lebih mencerminkan tren harga jangka menengah dan panjang, sehingga mencapai efek pelacakan tren yang lebih baik.

  3. Parameter yang dapat disesuaikan fleksibel. Parameter yang dapat disesuaikan termasuk panjang rata-rata bergerak, parameter filter Kalman dan siklus statistik, yang dapat beradaptasi secara fleksibel dengan lingkungan pasar yang berbeda.

  4. Risiko yang dapat dikendalikan. Strategi ini lebih berfokus pada tren jangka menengah dan panjang daripada fluktuasi jangka pendek, mencapai keseimbangan risiko-pengembalian yang baik.

  5. Algoritma inti dari strategi ini cukup ringkas dan mudah diterapkan dan diuji.

Analisis Risiko

Risiko utama dari strategi ini juga meliputi:

  1. Risiko pembalikan tren. Strategi ini berfokus pada pelacakan tren. Jika terjadi pembalikan tren yang tajam, itu akan menyebabkan kerugian yang lebih besar. Ini dapat dikurangi dengan memperpendek siklus statistik dengan tepat untuk mengurangi kerugian per perdagangan.

  2. Risiko optimasi parameter. Pengaturan parameter yang tidak tepat dapat menyebabkan perdagangan yang sering atau keterlambatan sinyal. Hal ini membutuhkan pengujian dan optimasi yang cukup. Hal ini dapat dikombinasikan dengan algoritma pembelajaran mesin untuk optimasi otomatis.

  3. Risiko over-optimasi. Optimasi yang berlebihan pada data historis juga dapat menyebabkan parameter yang tidak efektif. Validitas di luar sampel perlu dikontrol.

  4. Peningkatan risiko kompleksitas. Pengenalan filter Kalman dan algoritma sudut tangen meningkatkan kompleksitas kode. Implementasi yang benar perlu dijamin.

Arahan Optimasi

Mengingat risiko di atas, arah optimalisasi strategi ini meliputi:

  1. Optimasi parameter otomatis. Algoritma optimasi pembelajaran mesin dapat mencapai optimasi parameter otomatis untuk menghindari risiko optimasi berlebihan.

  2. Mengintegrasikan indikator lain Beberapa indikator lain dapat diintegrasikan ke dalam strategi untuk membentuk kombinasi indikator untuk meningkatkan stabilitas strategi.

  3. Meningkatkan evaluasi efisiensi. Memperkenalkan lebih banyak metrik yang disesuaikan dengan risiko untuk mengevaluasi efisiensi dan stabilitas strategi untuk kesimpulan yang lebih komprehensif dan akurat.

  4. Perluasan ke lebih banyak produk. Jika efektif, dapat dipertimbangkan untuk memperluas ke lebih banyak produk. Dalam jangka menengah dan panjang, ia mengumpulkan sampel yang lebih kaya dan memfasilitasi pengoptimalan parameter lintas produk.

Kesimpulan


/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@library=math
strategy("策略360°(测试)", overlay=true)

// 定义1分钟均线
ma1 = request.security(syminfo.tickerid, "1", ta.sma(close, 1)) // 在这里使用了 math.sma() 函数
//plot(ma1, color=color.yellow, title="原始均线")

// 定义卡尔曼滤波函数,参考了[1](https://www.tradingview.com/pine-script-docs/en/v5/language/Methods.html)和[2](https://www.tradingview.com/pine-script-docs/en/v5/language/Operators.html)的代码
kalman(x, g) => 
    kf = 0.0 
    dk = x - nz(kf[1], x) // 在这里使用了 nz() 函数
    smooth = nz(kf[1], x) + dk * math.sqrt(g * 2) // 在这里使用了 math.sqrt() 函数
    velo = 0.0 
    velo := nz(velo[1], 0) + g * dk // 在这里使用了 nz() 函数
    kf := smooth + velo 
    kf 

// 定义卡尔曼滤波后的均线
ma2 = kalman(ma1, 0.01) 
plot(ma2, color=color.blue, title="卡尔曼滤波后的均线")

// 定义切线角
angle = math.todegrees(math.atan(ma2 - ma2[1])) // 在这里使用了 math.degrees() 和 math.atan() 函数

// 定义累加的切线角
cum_angle = 0.0
cum_angle := nz(cum_angle[1], 0) + angle // 在这里使用了 nz() 函数

// 定义30分钟周期
period = 30 // 您可以根据您的需要修改这个参数

// 定义周期内的切线角总和
sum_angle = 0.0
sum_angle := math.sum(angle, period) // 在这里使用了 math.sum() 函数,把周期内的切线角总和改成简单地把 5 个切线角相加

// 定义买入和卖出条件
buy = sum_angle > 360// 在这里使用了 math.radians() 函数
sell = sum_angle < -360

// 执行买入和卖出操作
strategy.entry("Long", strategy.long, when=buy)
strategy.close("Short", when=buy)
strategy.entry("Short", strategy.short, when=sell)
strategy.close("Long", when=sell)

// 绘制曲线图
plot(sum_angle, color=color.green, title="周期内的切线角总和")
plot(angle, color=color.red, title="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角


Lebih banyak