Sử dụng các mô hình ARMA-GARCH để mô phỏng giá ngoại hối


10

Tôi đã trang bị mô hình ARIMA (1,1,1) -GARCH (1,1) cho chuỗi thời gian của giá nhật ký tỷ giá AUD / USD được lấy mẫu trong khoảng thời gian một phút trong vài năm, cho tôi hơn hai triệu điểm dữ liệu để ước tính mô hình. Bộ dữ liệu có sẵn ở đây . Để rõ ràng, đây là mô hình ARMA-GARCH được trang bị để trả về nhật ký do sự tích hợp đơn hàng đầu tiên của giá gỗ. Chuỗi thời gian AUD / USD ban đầu trông như thế này:

nhập mô tả hình ảnh ở đây

Sau đó, tôi đã cố gắng mô phỏng một chuỗi thời gian dựa trên mô hình được trang bị, đưa cho tôi những điều sau:

nhập mô tả hình ảnh ở đây

Tôi đều mong đợi và mong muốn chuỗi thời gian mô phỏng khác với chuỗi ban đầu, nhưng tôi không hy vọng sẽ có sự khác biệt đáng kể như vậy. Về bản chất, tôi muốn loạt mô phỏng hoạt động hoặc nhìn rộng ra như bản gốc.

Đây là mã R tôi đã sử dụng để ước tính mô hình và mô phỏng chuỗi:

library(rugarch)
rows <- nrow(data)
data <- (log(data[2:rows,])-log(data[1:(rows-1),]))
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(1, 1), include.mean = TRUE), distribution.model = "std")
fit <- ugarchfit(spec = spec, data = data, solver = "hybrid")
sim <- ugarchsim(fit, n.sim = rows)
prices <- exp(diffinv(fitted(sim)))
plot(seq(1, nrow(prices), 1), prices, type="l")

Và đây là đầu ra ước tính:

*---------------------------------*
*          GARCH Model Fit        *
*---------------------------------*

Conditional Variance Dynamics   
-----------------------------------
GARCH Model : sGARCH(1,1)
Mean Model  : ARFIMA(1,0,1)
Distribution    : std 

Optimal Parameters
------------------------------------
        Estimate  Std. Error     t value Pr(>|t|)
mu      0.000000    0.000000   -1.755016 0.079257
ar1    -0.009243    0.035624   -0.259456 0.795283
ma1    -0.010114    0.036277   -0.278786 0.780409
omega   0.000000    0.000000    0.011062 0.991174
alpha1  0.050000    0.000045 1099.877416 0.000000
beta1   0.900000    0.000207 4341.655345 0.000000
shape   4.000000    0.003722 1074.724738 0.000000

Robust Standard Errors:
        Estimate  Std. Error   t value Pr(>|t|)
mu      0.000000    0.000002 -0.048475 0.961338
ar1    -0.009243    0.493738 -0.018720 0.985064
ma1    -0.010114    0.498011 -0.020308 0.983798
omega   0.000000    0.000010  0.000004 0.999997
alpha1  0.050000    0.159015  0.314436 0.753190
beta1   0.900000    0.456020  1.973598 0.048427
shape   4.000000    2.460678  1.625568 0.104042

LogLikelihood : 16340000 

Tôi đánh giá rất cao bất kỳ hướng dẫn nào về cách cải thiện mô hình và mô phỏng của tôi, hoặc bất kỳ hiểu biết nào về các lỗi tôi có thể đã mắc phải. Dường như phần dư của mô hình không được sử dụng làm thuật ngữ nhiễu trong nỗ lực mô phỏng của tôi, mặc dù tôi không chắc chắn cách kết hợp nó.


1
Chào Jeff! Bạn cũng nên cung cấp dữ liệu của mình (hoặc ít nhất là một mẫu đại diện) cho những người trợ giúp tiềm năng. Ngoài ra, mã mẫu của bạn không bao gồm các gói bạn đã sử dụng (nơi ugarchspec()và các ugarchsim()chức năng cư trú). Hãy chắc chắn rằng mã của bạn có thể được lặp lại bất cứ khi nào bạn đặt câu hỏi ở đây và nó sẽ "giúp mọi người giúp bạn".
Đã lưuByJESUS

Cảm ơn lời khuyên của bạn, @SattedByJESUS. Tôi đã cập nhật bài đăng của mình để bao gồm thư viện R mà tôi đã sử dụng và làm rõ định dạng dữ liệu của mình.
Jeff

Lý do chính khiến dữ liệu mô phỏng của bạn khác với chuỗi ban đầu đơn giản là vì mô hình được trang bị, ARMA (1, 1, 1) GARCH (1, 1), không phải là mô hình phù hợp cho dữ liệu của bạn. Bạn nên bắt đầu bằng cách cải thiện mô hình của mình trước, sau đó mô phỏng tiếp theo của bạn sẽ giống với dữ liệu gốc của bạn.
Đã lưuByJESUS

Câu trả lời:


1

Tôi đang làm việc với dự báo dữ liệu ngoại hối và tin tưởng tôi bất cứ khi nào bạn sử dụng các phương pháp dự báo thống kê có thể là ARMA, ARIMA, GARCH, ARCH, v.v. Chúng luôn có xu hướng xấu đi khi bạn cố gắng dự đoán trước nhiều. Họ có thể hoặc không thể làm việc trong một hoặc hai giai đoạn tiếp theo nhưng chắc chắn không nhiều hơn thế. Bởi vì dữ liệu bạn đang xử lý không có tương quan tự động, không có xu hướng và không có tính thời vụ.

Câu hỏi của tôi cho bạn, bạn đã kiểm tra ACFPACF hoặc kiểm tra xu hướng, tính thời vụ trước khi sử dụng ARMA và GARCH chưa? Không có các thuộc tính được đề cập ở trên trong dự báo thống kê dữ liệu sẽ không hoạt động vì bạn đang vi phạm các giả định cơ bản của các mô hình này.


Cảm ơn bình luận của bạn @JAbr, nhưng tôi không thực sự dự báo. Thay vào đó, ứng dụng của tôi mô phỏng nghiêm ngặt một đường dẫn giá thay thế có cùng đặc điểm thống kê với dữ liệu được quan sát.
Jeff

Được rồi nhưng ở các phường khác, bạn thực sự dự báo sử dụng mô hình garch phải không, mô phỏng của bạn sử dụng garch và garch tạo ra sự quan sát bằng cách dự báo.
JAbr

Hoàn toàn đúng, nhưng bạn đã nói rằng mô hình chuỗi thời gian dự báo sẽ xấu đi khi đường chân trời mở rộng hơn nữa trong tương lai. Tôi đề nghị rằng mô hình không đủ nắm bắt được tính năng động của chuỗi ngay cả khi mô phỏng (hoặc dự báo) ở các chân trời của một giai đoạn duy nhất.
Jeff

tôi nói "Họ có thể làm việc trong một hoặc hai giai đoạn tiếp theo" là điều xấu của tôi, đáng lẽ tôi nên nói có thể hoặc không.
JAbr

0

Đề xuất của tôi sẽ là đảm bảo mô hình bạn đã chọn phù hợp với dữ liệu.

  • Hãy chắc chắn rằng không có thành phần theo chu kỳ hoặc theo mùa.
  • Thực hiện kiểm tra Augmented Dickey Fuller để kiểm tra sự hiện diện của root unit. Nếu đơn vị gốc có mặt thì tiếp tục phân biệt dữ liệu cho đến khi Thử nghiệm Fuller Dickey Fuller cho thấy sự hiện diện của không có gốc đơn vị. Ngoài ra, hãy quan sát các hệ số tương quan tự động, chúng sẽ giảm sau một khoảng thời gian trễ cho trạng thái đứng yên.
  • Có thể bạn đã quá phù hợp hoặc không phù hợp với mô hình sử dụng các đơn đặt hàng không chính xác? Tìm các đơn đặt hàng chính xác bằng AIC và BIC.

tdistribution.model="std"

Bạn đúng rồi. Tôi sẽ chỉnh sửa câu trả lời của tôi.
A-ar

Tôi không lo lắng về sự phù hợp quá mức - trên thực tế, đối với ứng dụng dự định của tôi, tôi muốn phù hợp với mô hình quá mức. Tôi đã thử nghiệm cho sự ổn định, mặc dù không phải theo mùa. Bất kể những vấn đề này, mô hình GARCH dường như không hoạt động chính xác. Dường như loạt mô phỏng là hoàn toàn homoscedastic.
Jeff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.