使用ARMA-GARCH模型模拟外汇价格


10

我已经将ARIMA(1,1,1)-GARCH(1,1)模型拟合到几年中以一分钟为间隔采样的澳元/美元汇率记录价格的时间序列,估计模型的上百万个数据点。该数据集可在此处获得。为了清楚起见,这是一个ARMA-GARCH模型,由于对原木价格进行一阶整合,因此适合对原木进行回报。原始的AUD / USD时间序列如下所示:

在此处输入图片说明

然后,我尝试根据拟合模型模拟时间序列,从而得到以下结果:

在此处输入图片说明

我既期望也希望模拟的时间序列与原始时间序列不同,但是我并不期望会有如此大的差异。从本质上讲,我希望模拟的序列的行为或大致看起来像原始序列。

这是我用来估计模型和模拟序列的R代码:

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")

这是估计的输出:

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

非常感谢您提供有关如何改进建模和仿真的指南,或者对我可能犯的错误有任何见解。似乎在我的模拟尝试中并未将模型残差用作噪声项,尽管我不确定如何将其合并。


1
嗨,杰夫!您还应该将数据(或至少一个代表性样本)提供给潜在的帮助者。另外,您的示例代码不包括您使用的软件包(ugarchspec()ugarchsim()功能所在的软件包)。每当您在此处提出问题时,请确保您的代码具有可复制性,它将“帮助人们帮助您”。
SavedByJESUS

感谢您的建议,@ SavedByJESUS。我已经更新了我的帖子,以包括我使用过的R库,并阐明了我的数据格式。
杰夫

模拟数据与原始系列不同的主要原因是,拟合模型ARMA(1,1,1)GARCH(1,1)不是适合您数据的模型。您应该首先改进模型,然后进行后续模拟,然后再模拟原始数据。
SavedByJESUS '19

Answers:


1

我正在使用外汇数据预测,并且无论何时使用ARMA,ARIMA,GARCH,ARCH等统计预测方法,都请相信我。在您尝试提前预测时,它们总是会恶化。他们可能在下一个或两个时期内工作,也可能不工作,但绝对不能超过此期限。因为您要处理的数据没有自相关,所以没有趋势,也没有季节性。

我的问题是,在使用ARMA和GARCH之前,您是否已检查ACFPACF或测试趋势,季节性?没有上述属性,数据统计预测将无法正常工作,因为您违反了这些模型的基本假设。


感谢您的@JAbr评论,但我实际上并未预测。相反,我的应用是严格模拟具有与观察数据相同的统计特征的替代价格路径。
杰夫,

好的,但是在其他情况下,您实际上是使用garch模型进行预测的,不是,模拟使用garch,而garch通过预测来产生观察结果。
8

的确如此,但是您已经说过,时间范围模型的预测会随着展望期的延长而恶化。我建议即使在单个期间内进行模拟(或预测)时,该模型也无法充分捕捉该系列的动态。
杰夫,

我不好意思说,“他们可能在接下来的一两个时期内工作”,我应该说可能会或可能不会。
8

0

我的建议是确保您选择的模型适合该数据。

  • 确保没有周期性或季节性因素。
  • 执行增强的Dickey Fuller测试以测试单位根的存在。如果存在单位根,则继续对数据进行区分,直到增强Dickey Fuller测试显示不存在单位根。或者观察自动相关系数,为了平稳起见,它们应在n个时间延迟后下降。
  • 也许您使用不正确的订单对模型进行了过度拟合或不足拟合?使用AIC和BIC查找正确的订单。

最后一点仅在假定的分布为正态分布时才有意义,但这与财务收益的程式化事实不符。OP 通过指定来使用Student的分布,这很有意义。tdistribution.model="std"
理查德·哈迪

你是对的。我将编辑答案。
A-ar

我不担心过度拟合-实际上,对于我想要的应用程序,我想过度拟合模型。我已经测试了平稳性,但没有测试季节性。无论这些问题如何,GARCH模型似乎都无法正常工作。看起来好像模拟序列是完全同调的。
杰夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.