
Cốt lõi của chiến lược này là sử dụng kỹ thuật Karmann vibrating để xử lý đồng bằng giá bằng cách tính toán góc cắt của đường trung bình sau khi làm mịn, tạo ra tín hiệu giao dịch khi góc cắt vượt quá một ngưỡng nhất định trong một chu kỳ nhất định. Chiến lược này nhằm theo dõi xu hướng đường dài trung bình, giảm tác động của tiếng ồn thông qua kỹ thuật Karmann vibrating để có được tín hiệu xu hướng rõ ràng và đáng tin cậy hơn.
Lập luận cốt lõi của chiến lược bao gồm các bước sau:
Tính trung bình di chuyển đơn giản (SMA) của giá 1 phút là đường trung bình nguyên thủy;
Chuyển các sóng Kalman vào đường bình thường ban đầu, và xuất ra đường bình thường sau khi được làm mịn;
Tính góc cắt của đường trung bình sau khi làm mịn;
Định nghĩa tham số chu kỳ, tổng các góc đường cắt trong chu kỳ thống kê;
Tín hiệu mua được tạo ra khi tổng các góc đường cắt trong chu kỳ lớn hơn 360 độ; Tín hiệu bán được tạo ra khi nhỏ hơn 360 độ.
Bằng cách thiết kế như vậy, khi giá xuất hiện xu hướng lên hoặc xuống, góc cắt của đường đồng đều sẽ tích lũy dần, khi tích lũy đến một mức độ nhất định sẽ tạo ra tín hiệu giao dịch, do đó có thể theo dõi hiệu quả xu hướng đường dài.
Trong số đó, các sóng Kallmann là chìa khóa của chiến lược này. Các sóng Kallmann là một thuật toán tuần hoàn, trong khi dự đoán trạng thái hiện tại, nó cũng dự đoán các giá trị của tiếng ồn quá trình và đo tiếng ồn, và sử dụng các giá trị của tiếng ồn để soạn thảo dự đoán trạng thái trước, để có được ước tính trạng thái chính xác và đáng tin cậy hơn.
Trong chiến lược này, SMA của giá có thể được coi là thước đo trạng thái, bị ảnh hưởng bởi tiếng ồn thị trường, bộ lọc Kalman sẽ ước tính ngược xu hướng thực sự của giá, giảm đáng kể ảnh hưởng của tiếng ồn, làm cho hoạt động trung bình tiếp theo đáng tin cậy hơn, và do đó tạo ra tín hiệu giao dịch ổn định và chính xác hơn.
Lợi thế lớn nhất của chiến lược này so với các chiến lược chỉ số như trung bình di chuyển đơn giản là sử dụng bộ lọc Kalman để giảm tác động của tiếng ồn, làm cho tín hiệu giao dịch rõ ràng hơn và đáng tin cậy hơn. Những lợi thế cụ thể được thể hiện chủ yếu trong các khía cạnh sau:
Giảm tín hiệu giả. Các bộ lọc của Kármán có hiệu quả trong việc lọc ra các tín hiệu giả gây ra bởi các biến động ngẫu nhiên, làm cho tín hiệu giao dịch được tạo ra đáng tin cậy hơn, bằng cách ước tính và loại bỏ tiếng ồn một cách thích nghi.
Hiệu quả theo dõi tốt hơn. Hình dạng đường đồng nhất sau khi mịn sẽ mượt hơn, có thể phản ánh tốt hơn xu hướng đường dài giữa giá, do đó có hiệu quả theo dõi xu hướng tốt hơn.
Các tham số có thể được điều chỉnh bao gồm chiều dài đường trung bình, tham số của sóng Kármán và chu kỳ thống kê, có thể thích nghi với các môi trường thị trường khác nhau.
Rủi ro có thể kiểm soát được. Chiến lược này tập trung nhiều hơn vào xu hướng đường dài trung bình thay vì biến động ngắn hạn, tạo ra sự cân bằng lợi nhuận rủi ro tốt hơn.
Thực hiện đơn giản, dễ mở rộng. Các thuật toán cốt lõi của chiến lược này là đơn giản, dễ thực hiện và thử nghiệm, cũng cung cấp không gian mở rộng, chẳng hạn như các tham số tối ưu hóa tự động của thuật toán học máy có thể được đưa vào.
Chiến lược này cũng có những rủi ro chính như sau:
Rủi ro đảo ngược xu hướng. Chiến lược này tập trung vào theo dõi xu hướng, một khi có một sự đảo ngược xu hướng mạnh mẽ sẽ gây ra tổn thất lớn.
Rủi ro tối ưu hóa tham số. Thiết lập tham số không phù hợp có thể dẫn đến giao dịch thường xuyên hoặc tín hiệu chậm, cần tối ưu hóa thử nghiệm đầy đủ. Có thể kết hợp với thuật toán học máy để tối ưu hóa tự động.
Rủi ro quá tối ưu hóa. Tối ưu hóa quá mức trên dữ liệu lịch sử cũng có thể dẫn đến thất bại của tham số, cần kiểm soát hiệu quả ngoài mẫu.
Tiến hành có nguy cơ tăng độ phức tạp. Việc giới thiệu các thuật toán sóng và góc cắt Kalman sẽ làm tăng độ phức tạp của mã, cần đảm bảo thực hiện đúng.
Với những yếu tố rủi ro nêu trên, chiến lược này có thể được tối ưu hóa như sau:
Tiếp tục giới thiệu Stop Loss và quản lý vị trí. Chặn lỗ thích hợp có thể kiểm soát hiệu quả rủi ro mất mát đơn lẻ; quản lý vị trí động cũng có thể điều chỉnh rủi ro bảo hiểm vị trí tùy theo tình hình thị trường.
Tối ưu hóa tham số tự động. Thông qua thuật toán tối ưu hóa học máy, có thể thực hiện tối ưu hóa tự động các tham số, tránh nguy cơ tối ưu hóa quá mức.
Tích hợp các chỉ số khác. Có thể tích hợp một số chỉ số khác trong chiến lược để tạo ra một danh mục các chỉ số để nâng cao tính ổn định của chiến lược.
Đánh giá hiệu quả tăng lên: giới thiệu nhiều chỉ số điều chỉnh rủi ro hơn, đánh giá hiệu quả và ổn định của chiến lược, từ đó đưa ra kết luận chính xác hơn.
Mở rộng nhiều giống. Nếu hiệu quả tốt, bạn có thể xem xét mở rộng đến nhiều giống hơn, tích lũy mẫu phong phú hơn trong trung và dài hạn, cũng thuận tiện để tối ưu hóa các tham số giữa các giống.
Chiến lược này nói chung là một chiến lược theo dõi xu hướng đơn giản và thực tế hơn. So với chiến lược trung bình di chuyển truyền thống, việc giới thiệu thuật toán Karlman là điểm sáng tạo lớn nhất của nó, cũng cho phép chiến lược tạo ra tín hiệu giao dịch rõ ràng và đáng tin cậy hơn. Bằng cách tối ưu hóa tiếp theo, chiến lược này có thể đạt được hiệu quả tốt hơn. Nói chung, chiến lược này cung cấp một cách suy nghĩ mới cho chiến lược giao dịch định lượng, cần nghiên cứu và áp dụng thêm.
/*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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角