2012-04-14 52 views
5

Tôi có chuỗi thời gian giá cổ phiếu và muốn tính trung bình di động trong khoảng thời gian mười phút (xem biểu đồ bên dưới). Do các biến giá xảy ra không thường xuyên (tức là chúng là không phải là định kỳ) có vẻ công bằng nhất để tính toán trung bình di chuyển theo thời gian.Tính toán trung bình di chuyển theo thời gian

Time Series

Trong sơ đồ có bốn thay đổi giá cả: A, B, C và D, với thứ hai ba xảy ra bên trong cửa sổ. Lưu ý rằng vì B chỉ xảy ra một số thời gian vào cửa sổ (nói 3 phút), giá trị của A vẫn đóng góp vào tính toán. Trong thực tế, theo như tôi có thể nói tính toán chỉ nên dựa trên các giá trị của A, B và C (không phải D) và khoảng thời gian giữa chúng và điểm tiếp theo (hoặc trong trường hợp của A). : khoảng thời gian giữa thời gian bắt đầu của cửa sổ thời gian và B). Ban đầu D sẽ không có bất kỳ hiệu ứng nào vì trọng số thời gian của nó sẽ bằng không. Điều này có đúng không?

Giả sử điều này là đúng, mối quan tâm của tôi là trung bình di chuyển sẽ "trễ" hơn tính toán không có trọng số (sẽ tính giá trị của D ngay lập tức), Tuy nhiên, tính toán không có trọng số có bất lợi:

  • "A" sẽ có ảnh hưởng nhiều đến kết quả như các giá khác mặc dù ở bên ngoài cửa sổ thời gian.
  • Một loạt đột ngột của ve giá nhanh sẽ nặng nề thiên vị các đường trung bình động (mặc dù có lẽ đây là mong muốn?)

bất cứ ai có thể đưa ra lời khuyên nào trên đó cách tiếp cận có vẻ tốt nhất, hoặc cho dù có một sự thay thế (hoặc hybrid) cách tiếp cận đáng xem xét?

Trả lời

4

Lý do của bạn là chính xác. Những gì bạn muốn sử dụng trung bình cho dù? Không biết rằng thật khó để đưa ra lời khuyên nào.

Có lẽ một giải pháp thay thế là xem xét giá trị trung bình A của bạn, và khi giá trị V mới xuất hiện, hãy tính mức trung bình A mới là (1-c) * A + c * V, trong đó c là từ 0 và 1. Theo cách này, bọ ve gần đây có ảnh hưởng mạnh hơn, và ảnh hưởng của bọ ve cũ biến mất theo thời gian. Bạn thậm chí có thể có c phụ thuộc vào thời gian kể từ khi bọ ve trước đó (c trở nên nhỏ hơn khi bọ ve đến gần hơn).

Trong mô hình đầu tiên (trọng số) trung bình sẽ khác nhau mỗi giây (vì số đọc cũ có trọng số thấp hơn và số đọc mới cao hơn) nên luôn luôn thay đổi có thể không mong muốn. Với cách tiếp cận thứ hai, giá nhảy đột ngột khi giá mới được giới thiệu và giá mới biến mất khỏi cửa sổ.

+0

Cảm ơn; điều chỉnh c dựa trên thời gian kể từ khi đánh dấu trước đó là một ý tưởng tuyệt vời. Nó có nghĩa là tôi có thể yếu tố trong một thời gian trọng lượng mà không cần phải duy trì rất nhiều trạng thái bổ sung. – Adamski

+1

Công thức đó được gọi là [làm mịn theo hàm mũ đơn giản của Brown] (http://en.wikipedia.org/wiki/Exponential_smoothing#The_simple_moving_average). Tôi đang đọc về nó trên Wikipedia ngay bây giờ, vì vậy chỉ nghĩ rằng tôi muốn kêu vang. – HappyNomad

3

Vâng, trung bình di chuyển sẽ bị trễ. Điều này là do giá trị của nó là thông tin lịch sử: nó tóm tắt các mẫu giá trong 10 phút qua. Loại trung bình này vốn đã "tụt hậu". Nó đã được xây dựng trong năm phút bù đắp (vì một hộp trung bình mà không có bù đắp sẽ được dựa trên +/- 5 phút, tập trung vào mẫu). Nếu giá đã ở mức A trong một thời gian dài và sau đó thay đổi một lần thành B, phải mất 5 phút để đạt được mức trung bình (A + B)/2.

Nếu bạn muốn trung bình/mịn một hàm bất kỳ sự thay đổi nào trong miền, trọng lượng phải được phân bố đồng đều xung quanh điểm mẫu. Nhưng điều này là không thể làm cho giá xảy ra trong thời gian thực, vì dữ liệu trong tương lai không có sẵn.

Nếu bạn muốn thay đổi gần đây, như D, để có tác động lớn hơn, hãy sử dụng mức trung bình cung cấp trọng số lớn hơn cho dữ liệu gần đây hoặc khoảng thời gian ngắn hơn hoặc cả hai.

Một cách để làm mịn dữ liệu chỉ đơn giản là sử dụng một bộ tích lũy đơn ("bộ ước lượng mịn") E và lấy các mẫu dữ liệu định kỳ S. E được cập nhật như sau:

E = E + K(S - E) 

I.e. một phần K (giữa 0 và 1) của sự khác biệt giữa mẫu giá hiện tại S và bộ ước lượng E được thêm vào E. Giả sử giá đã ở A trong một thời gian dài, sao cho E ở A và sau đó đột nhiên thay đổi B. Bộ ước lượng sẽ bắt đầu di chuyển về phía B theo cách hàm mũ (như sưởi ấm/làm mát, sạc/xả tụ điện, v.v ...). Lúc đầu, nó sẽ thực hiện một bước nhảy lớn, và sau đó tăng dần và nhỏ hơn. Tốc độ di chuyển của nó phụ thuộc vào K. Nếu K bằng 0, thì bộ ước lượng không di chuyển chút nào, và nếu K là 1 nó di chuyển ngay lập tức. Với K, bạn có thể điều chỉnh lượng trọng lượng mà bạn đưa ra cho bộ ước lượng so với mẫu mới. Trọng lượng hơn được đưa ra cho các mẫu gần đây hoàn toàn, và cửa sổ mẫu về cơ bản kéo dài đến vô cùng: E ​​dựa trên mọi mẫu giá trị từng xảy ra. Mặc dù tất nhiên những cái rất cũ không có ảnh hưởng đến giá trị hiện tại. Một phương pháp rất đơn giản, đẹp.

+2

Điều này cũng giống như câu trả lời của Tom. Công thức của anh ta cho giá trị mới của bộ ước lượng là '(1 - K) E + KS', là đại số giống như' E + K (S - E) ': nó là một" hàm pha trộn tuyến tính "giữa bộ ước lượng hiện tại 'E' và mẫu mới' S' trong đó giá trị 'K' [0, 1] điều khiển sự pha trộn. Viết nó theo cách đó là tốt đẹp và hữu ích. Nếu K là 0,7, chúng ta lấy 70% S và 30% E, tương tự như cộng thêm 70% sự khác biệt giữa E và S về E. – Kaz

8

Hai đề xuất đến từ thế giới rời rạc, nhưng bạn có thể tìm thấy nguồn cảm hứng cho trường hợp cụ thể của mình.

Hãy xem exponential smoothing. Trong phương pháp này, bạn giới thiệu hệ số làm mịn (α ∈ [0; 1]) cho phép bạn thay đổi ảnh hưởng của các yếu tố gần đây trên giá trị “dự báo” (các yếu tố cũ hơn được gán theo trọng số giảm theo cấp số nhân):

s t = αx t-1 + (1 + α) s t-1; s = x

tôi đã tạo ra một hình ảnh động đơn giản về cách làm mịn mũ sẽ theo dõi một chuỗi thời gian thống nhất x=[1 1 1 1 3 3 2 2 2 1] với ba α khác nhau = {0,3, 0,6, 0,9}:

enter image description here

Cũng xem xét một số kỹ thuật học tập tăng cường (xem các phương pháp chiết khấu khác nhau) ví dụ TD-learningQ-Learning.

3

Trong mở rộng câu trả lời của Tom, công thức cho có tính đến khoảng cách giữa các bọ ve có thể được chính thức hóa (ve gần có tỷ lệ tương ứng trọng thấp):

ema n = u * ema n-1 + (v - u) * x n-1 + (1 - v) * x n

nơi:

a = (t n - t n-1)/T
có nghĩa là, một là một tỷ lệ của đồng bằng thời gian đến trên trung bình khoảng

u = e -a

v = 1 (sử dụng điểm trước đó) hoặc
v = (1 - u)/a (nội suy tuyến tính> hoặc
v = u (điểm tiếp theo)

Thông tin thêm được tìm thấy ở trang 59 của cuốn sách Giới thiệu về tài chính tần số cao.

Các vấn đề liên quan