Logik teras strategi ini terutamanya merangkumi langkah-langkah berikut:
Mengira purata bergerak mudah (SMA) harga 1 minit sebagai purata bergerak asal;
Kalman menyaring purata bergerak asal untuk mengeluarkan purata bergerak yang halus;
Mengira sudut tangen purata bergerak yang dilancangkan;
Tentukan tempoh parameter dan jumlahkan statistik sudut tangen dalam tempoh;
Menghasilkan isyarat beli apabila jumlah sudut tangen dalam tempoh adalah lebih besar daripada 360 darjah; Menghasilkan isyarat jual apabila kurang daripada -360 darjah.
Dengan reka bentuk ini, apabila harga menunjukkan trend menaik atau menurun, sudut tangen purata bergerak secara beransur-ansur akan terkumpul. Apabila ia terkumpul ke tahap tertentu, isyarat perdagangan akan dihasilkan. Oleh itu, ia dapat dengan berkesan mengesan trend jangka menengah dan panjang.
Antara mereka, penapis Kalman adalah kunci. Penapis Kalman adalah algoritma rekursif yang meramalkan nilai bunyi proses dan bunyi pengukuran semasa meramalkan keadaan semasa, dan menggunakan nilai bunyi ini untuk membetulkan ramalan keadaan semasa untuk mendapatkan anggaran keadaan yang lebih tepat dan boleh dipercayai.
Dalam strategi ini, SMA harga boleh dilihat sebagai pengukuran keadaan. Berkesan dengan bunyi bising pasaran, penapis Kalman akan menganggarkan trend harga yang sebenarnya secara berulang, mengurangkan kesan bunyi bising, menjadikan pengiraan purata bergerak berikutnya lebih boleh dipercayai, dan dengan itu menghasilkan isyarat perdagangan yang lebih stabil dan tepat.
Berbanding dengan purata bergerak mudah dan strategi penunjuk teknikal yang lain, kelebihan terbesar strategi ini adalah bahawa ia menggunakan penapis Kalman untuk mengurangkan kesan bunyi bising, menjadikan isyarat perdagangan lebih jelas dan lebih boleh dipercayai.
Mengurangkan isyarat palsu. penapisan Kalman berkesan menapis banyak isyarat palsu yang disebabkan oleh turun naik rawak dengan menganggarkan dan menghilangkan bunyi secara adaptif, menjadikan isyarat perdagangan yang dihasilkan lebih boleh dipercayai.
Kesan pengesanan yang lebih baik. Bentuk purata bergerak yang halus lebih lancar dan lebih mencerminkan trend harga jangka sederhana dan panjang, sehingga mencapai kesan pengesanan trend yang lebih baik.
Parameter yang boleh diselaraskan fleksibel. Parameter yang boleh diselaraskan termasuk panjang purata bergerak, parameter penapis Kalman dan kitaran statistik, yang dapat menyesuaikan diri dengan fleksibel dengan persekitaran pasaran yang berbeza.
Risiko yang boleh dikawal: Strategi ini lebih memberi tumpuan kepada trend jangka sederhana dan panjang daripada turun naik jangka pendek, mencapai keseimbangan risiko dan pulangan yang baik.
Mudah dilaksanakan dan berkembang. Algoritma teras strategi ini agak ringkas dan mudah dilaksanakan dan diuji. Ia juga menyediakan ruang untuk pengembangan, seperti memperkenalkan algoritma pembelajaran mesin untuk mengoptimumkan parameter secara automatik.
Risiko utama strategi ini juga termasuk:
Risiko pembalikan trend. Strategi ini memberi tumpuan kepada pengesanan trend. Sekiranya pembalikan trend yang tajam, ia akan membawa kepada kerugian yang lebih besar. Ini dapat dikurangkan dengan memendekkan kitaran statistik dengan betul untuk mengurangkan kerugian setiap perdagangan.
Risiko pengoptimuman parameter. Tetapan parameter yang tidak sesuai boleh menyebabkan perdagangan yang kerap atau kelewatan isyarat. Ia memerlukan ujian dan pengoptimuman yang mencukupi. Ia boleh digabungkan dengan algoritma pembelajaran mesin untuk pengoptimuman automatik.
Risiko pengoptimuman berlebihan. Pengoptimuman berlebihan pada data sejarah juga boleh menyebabkan parameter yang tidak berkesan. Valiti di luar sampel perlu dikawal.
Peningkatan risiko kerumitan. Pengenalan penapis Kalman dan algoritma sudut tangen meningkatkan kerumitan kod. Pelaksanaan yang betul perlu dijamin.
Memandangkan risiko di atas, arah pengoptimuman strategi ini termasuk:
Memperkenalkan stop loss dan saiz kedudukan. Stop loss yang sesuai dapat mengawal risiko kerugian perdagangan tunggal dengan berkesan; saiz kedudukan dinamik juga boleh menyesuaikan kedudukan untuk lindung nilai risiko mengikut keadaan pasaran.
Pengoptimuman parameter automatik. Algoritma pengoptimuman pembelajaran mesin dapat mencapai pengoptimuman parameter automatik untuk mengelakkan risiko pengoptimuman berlebihan.
Mengintegrasikan penunjuk lain Beberapa penunjuk lain boleh diintegrasikan ke dalam strategi untuk membentuk kombinasi penunjuk untuk meningkatkan kestabilan strategi.
Meningkatkan penilaian kecekapan. Memperkenalkan lebih banyak metrik yang disesuaikan dengan risiko untuk menilai kecekapan dan kestabilan strategi untuk kesimpulan yang lebih komprehensif dan tepat.
Peningkatan kepada lebih banyak produk. Jika berkesan, ia boleh dianggap untuk berkembang ke lebih banyak produk. Dalam jangka sederhana dan panjang, ia mengumpulkan sampel yang lebih kaya dan memudahkan pengoptimuman parameter silang produk.
/*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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角