Chiến lược theo dõi xu hướng dựa trên bộ lọc Kalman

Tác giả:ChaoZhang
Tags:

img

Tổng quan

Cốt lõi của chiến lược này là sử dụng công nghệ bộ lọc Kalman để làm mịn mịn giá trung bình động, và tạo ra các tín hiệu giao dịch khi góc chạm của đường trung bình động mịn vượt quá một ngưỡng nhất định trong một khoảng thời gian nhất định.

Nguyên tắc chiến lược

Logic cốt lõi của chiến lược này chủ yếu bao gồm các bước sau:

  1. Tính toán đường trung bình di chuyển đơn giản (SMA) của giá 1 phút như đường trung bình di chuyển ban đầu;

  2. Kalman lọc đường trung bình động ban đầu để xuất ra đường trung bình động trơn;

  3. Tính toán góc chạm của đường trung bình di chuyển trơn;

  4. Định nghĩa khoảng thời gian tham số và tổng thống các góc chạm trong khoảng thời gian;

  5. Tạo tín hiệu mua khi tổng các góc chạm trong khoảng là lớn hơn 360 độ; tạo tín hiệu bán khi nhỏ hơn -360 độ.

Với thiết kế này, khi giá cho thấy xu hướng tăng hoặc giảm, góc chạm của đường trung bình động sẽ dần tích lũy. Khi nó tích lũy đến một mức độ nhất định, các tín hiệu giao dịch sẽ được tạo ra. Do đó, nó có thể theo dõi hiệu quả xu hướng trung và dài hạn.

Trong số đó, bộ lọc Kalman là chìa khóa. Bộ lọc Kalman là một thuật toán tái diễn dự đoán giá trị của tiếng ồn quá trình và tiếng ồn đo lường trong khi dự đoán trạng thái hiện tại, và sử dụng các giá trị tiếng ồn này để điều chỉnh dự đoán trạng thái hiện tại để 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 xem là phép đo trạng thái. Do ảnh hưởng bởi tiếng ồn thị trường, bộ lọc Kalman sẽ ước tính lại xu hướng thực sự của giá, giảm đáng kể tác động của tiếng ồn, làm cho tính toán trung bình động tiếp theo đáng tin cậy hơn và do đó tạo ra các tín hiệu giao dịch ổn định và chính xác hơn.

Phân tích lợi thế

So với các chiến lược chỉ số kỹ thuật khác, lợi thế lớn nhất của chiến lược này là nó sử dụng bộ lọc Kalman để giảm tác động của tiếng ồn, làm cho các tín hiệu giao dịch rõ ràng và đáng tin cậy hơn.

  1. Giảm các tín hiệu sai. lọc Kalman hiệu quả lọc ra rất nhiều tín hiệu sai do biến động ngẫu nhiên gây ra bằng cách ước tính và loại bỏ tiếng ồn thích nghi, làm cho các tín hiệu giao dịch được tạo ra đáng tin cậy hơn.

  2. Hiệu ứng theo dõi tốt hơn. Hình dạng trung bình động trơn tru hơn và phản ánh tốt hơn xu hướng giá trung và dài hạn, do đó đạt được hiệu quả theo dõi xu hướng tốt hơn.

  3. Các tham số có thể điều chỉnh linh hoạt bao gồm độ dài của đường trung bình động, các tham số của bộ lọc Kalman và chu kỳ thống kê, có thể thích nghi linh hoạt với các môi trường thị trường khác nhau.

  4. 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 trung bình và dài hạn hơn là biến động ngắn hạn, đạt được sự cân bằng rủi ro - lợi nhuận tốt.

  5. Dễ thực hiện và mở rộng. thuật toán cốt lõi của chiến lược này khá ngắn gọn và dễ thực hiện và kiểm tra. Nó cũng cung cấp không gian mở rộng, chẳng hạn như giới thiệu thuật toán học máy để tự động tối ưu hóa các tham số.

Phân tích rủi ro

Các rủi ro chính của chiến lược này cũng bao gồm:

  1. 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. Trong trường hợp đảo ngược xu hướng mạnh, nó sẽ dẫn đến tổn thất lớn hơn. Điều này có thể được giảm thiểu bằng cách rút ngắn đúng chu kỳ thống kê để giảm lỗ trên mỗi giao dịch.

  2. Rủi ro tối ưu hóa tham số. Cài đặt tham số không phù hợp có thể dẫn đến giao dịch thường xuyên hoặc chậm tín hiệu. Nó đòi hỏi kiểm tra và tối ưu hóa đầy đủ. Nó có thể được kết hợp với các thuật toán học máy để tối ưu hóa tự động.

  3. Rủi ro tối ưu hóa quá mức. Tối ưu hóa quá mức trên dữ liệu lịch sử cũng có thể dẫn đến các thông số không hiệu quả. Sự hợp lệ ngoài mẫu cần được kiểm soát.

  4. Tăng nguy cơ phức tạp. Việc giới thiệu bộ lọc Kalman và thuật toán góc chạm làm tăng độ phức tạp của mã. Việc thực hiện chính xác cần phải được đảm bảo.

Hướng dẫn tối ưu hóa

Xem xét các rủi ro trên, các hướng tối ưu hóa của chiến lược này bao gồm:

  1. Đưa ra stop loss và position sizing. Stop loss thích hợp có thể kiểm soát hiệu quả rủi ro lỗ giao dịch duy nhất; dynamic position sizing cũng có thể điều chỉnh các vị trí để phòng ngừa rủi ro theo điều kiện thị trường.

  2. Tối ưu hóa tham số tự động. Các thuật toán tối ưu hóa học máy có thể đạt được tối ưu hóa tham số tự động để tránh rủi ro tối ưu hóa quá mức.

  3. Tích hợp các chỉ số khác Một số chỉ số khác có thể được tích hợp vào chiến lược để tạo ra sự kết hợp các chỉ số để tăng cường tính ổn định của chiến lược.

  4. Nâng cao đánh giá hiệu quả: giới thiệu nhiều số liệu điều chỉnh rủi ro hơn để đánh giá hiệu quả và sự ổn định của các chiến lược để có kết luận toàn diện và chính xác hơn.

  5. Mở rộng ra nhiều sản phẩm hơn. Nếu hiệu quả, nó có thể được xem xét để mở rộng ra nhiều sản phẩm hơn. Trong trung hạn và dài hạn, nó tích lũy các mẫu phong phú hơn và tạo điều kiện tối ưu hóa tham số chéo sản phẩm.

Kết luận

Nói chung, chiến lược này là một chiến lược theo dõi xu hướng tương đối đơn giản và thực tế. So với các chiến lược trung bình động truyền thống, việc giới thiệu thuật toán lọc Kalman là điểm đổi mới lớn nhất của nó, cũng cho phép chiến lược tạo ra các tín hiệu giao dịch rõ ràng và đáng tin cậy hơn. Với tối ưu hóa hơn nữa, chiến lược này dự kiến sẽ đạt được kết quả tốt hơn. Nhìn chung, chiến lược này cung cấp một ý tưởng mới cho các chiến lược giao dịch định lượng và đáng 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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角


Thêm nữa