Chiến lược theo dõi xu hướng dựa trên trung bình di chuyển và bộ lọc Kalman

Tác giả:ChaoZhang, Ngày: 2023-11-01 17:10:49
Tags:

img

Tổng quan

Chiến lược này kết hợp trung bình chuyển động Hull và bộ lọc Kalman để xác định và theo dõi xu hướng giá, thuộc các chiến lược theo dõi xu hướng. Nó sử dụng hai trung bình chuyển động Hull với các khoảng thời gian khác nhau để tạo ra tín hiệu giao dịch và áp dụng bộ lọc Kalman để làm mịn các tín hiệu, nhằm cải thiện chất lượng tín hiệu và sự ổn định của chiến lược.

Chiến lược logic

  • Chiến lược sử dụng trung bình di chuyển Hull 24 giai đoạn (hma) và trung bình di chuyển Hull ba giai đoạn 24 (hma3) để xây dựng tín hiệu giao dịch.

  • Khi hma vượt qua hma3, một tín hiệu mua được tạo ra. Khi hma vượt qua dưới hma3, một tín hiệu bán được tạo ra.

  • Bộ lọc Kalman bị vô hiệu hóa theo mặc định. Khi được bật, nó làm mịn hma và hma3 để lọc ra tiếng ồn quá mức và cải thiện chất lượng tín hiệu.

  • Bộ lọc Kalman loại bỏ tiếng ồn ngẫu nhiên từ tín hiệu thông qua các bước dự đoán và điều chỉnh. Sự khác biệt giữa mỗi phép đo và dự đoán cuối cùng được coi là mục điều chỉnh để dự đoán phép đo tiếp theo chính xác hơn. Bằng cách lặp lại dự đoán và điều chỉnh, tác động của tiếng ồn có thể được giảm dần để làm mịn tín hiệu.

  • Chiến lược này tận dụng bộ lọc Kalman để tăng cường tính ổn định của các chiến lược trung bình động bằng cách lọc ra các biến động ngẫu nhiên và theo dõi xu hướng bền vững.

Ưu điểm

  • Hệ thống trung bình di chuyển kép có thể xác định tốt hơn xu hướng lâu dài so với trung bình di chuyển duy nhất.

  • Hull Moving Average đặt trọng lượng nhiều hơn vào giá gần đây thông qua tính toán cân nhắc, làm cho nó nhạy cảm hơn trong việc ghi lại sự thay đổi giá.

  • Bộ lọc Kalman có thể lọc hiệu quả tiếng ồn ngẫu nhiên từ tín hiệu, giảm tín hiệu giả và cải thiện chất lượng tín hiệu.

  • Các tham số có thể điều chỉnh như thời gian và lợi nhuận bộ lọc Kalman cho phép chiến lược thích nghi với các điều kiện thị trường khác nhau.

  • Việc áp dụng các kỹ thuật chéo thời gian tạo ra các tín hiệu bền vững hơn, tránh bị sai lệch bởi các biến động ngẫu nhiên quá mức.

  • Giao diện trực quan hiển thị trực quan các tín hiệu và tình trạng xu hướng để dễ dàng vận hành.

Rủi ro

  • Trung bình di chuyển kép có xu hướng tạo ra các tín hiệu sai xung quanh các điểm chuyển hướng, không thể nắm bắt kịp thời sự đảo ngược.

  • Sự chậm trễ của các đường trung bình động có thể bỏ lỡ cơ hội đảo ngược giá nhanh chóng.

  • Không phù hợp với thị trường biến động mạnh. nên tránh sử dụng nó trong giai đoạn hỗn loạn.

  • Các thông số bộ lọc Kalman có thể ảnh hưởng đến hiệu suất chiến lược.

  • Thời gian dài hơn có phản ứng chậm trong khi thời gian ngắn hơn dễ bị nhiễu.

  • Thời gian nắm giữ dài / ngắn không cố định dẫn đến thời gian không hoạt động mà không có vị trí, làm giảm hiệu quả sử dụng vốn.

Tăng cường

  • Hãy thử các đường trung bình động thích nghi tối ưu hóa các thông số dựa trên biến động.

  • Bao gồm các chỉ số biến động để tránh giao dịch trong thời gian thị trường hỗn loạn và chỉ giao dịch theo xu hướng rõ ràng.

  • Thiết lập stop loss để hạn chế lỗ và cải thiện kiểm soát rủi ro.

  • Tối ưu hóa các thông số bộ lọc Kalman để cân bằng độ nhạy của việc theo dõi và mức độ lọc tiếng ồn.

  • Xác nhận hiệu lực tín hiệu với các chỉ số khác như khối lượng, Bollinger Bands cho sự bền vững của xu hướng.

  • Sử dụng máy học để đào tạo các thông số và cải thiện tính mạnh mẽ và khả năng thích nghi chiến lược.

Kết luận

Chiến lược này xác định hiệu quả xu hướng lâu dài và cải thiện chất lượng tín hiệu bằng hai Hull MAs và bộ lọc Kalman. Lưu ý tối ưu hóa tham số, khả năng thích nghi thị trường và kiểm soát rủi ro để có lợi nhuận ổn định.


/*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)
    


Thêm nữa