Я приспособил модель ARIMA (1,1,1) -GARCH (1,1) к временному ряду журнальных цен курса AUD / USD, выбранных с интервалом в одну минуту в течение нескольких лет, что дало мне более двух миллион точек данных, по которым можно оценить модель. Набор данных доступен здесь . Для ясности, это была модель 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
Я был бы очень признателен за любые советы о том, как улучшить моё моделирование и симуляцию, или за понимание ошибок, которые я мог сделать. Похоже, что остаток модели не используется в качестве шума в моей попытке моделирования, хотя я не уверен, как включить его.
ugarchspec()
иugarchsim()
). Убедитесь, что ваш код воспроизводим всякий раз, когда вы задаете вопрос здесь, и он «поможет людям помочь вам».Ответы:
Я работаю с прогнозированием данных форекс и доверяю мне всякий раз, когда вы используете статистические методы прогнозирования, будь то ARMA, ARIMA, GARCH, ARCH и т. Д. Они всегда имеют тенденцию ухудшаться, когда вы пытаетесь предсказать значительно вперед во времени. Они могут или не могут работать в течение следующих одного или двух периодов, но определенно не более того. Потому что у данных, с которыми вы имеете дело, нет автокорреляции, нет тенденции и нет сезонности.
Мой вопрос к вам, проверяли ли вы ACF и PACF или тесты на тренд, сезонность перед использованием ARMA и GARCH? Без вышеупомянутых свойств в данных статистическое прогнозирование не работает, потому что вы нарушаете основные предположения этих моделей.
источник
Я предлагаю убедиться, что выбранная вами модель подходит для данных.
источник
distribution.model="std"