J'ai adapté un modèle ARIMA (1,1,1) -GARCH (1,1) à la série chronologique des prix du journal des taux de change AUD / USD échantillonnés à des intervalles d'une minute sur plusieurs années, ce qui me donne plus de deux millions de points de données sur lesquels estimer le modèle. L'ensemble de données est disponible ici . Pour plus de clarté, il s'agissait d'un modèle ARMA-GARCH adapté aux retours de grumes en raison de l'intégration de premier ordre des prix des grumes. La série chronologique originale AUD / USD ressemble à ceci:
J'ai ensuite tenté de simuler une série chronologique basée sur le modèle ajusté, en me donnant les informations suivantes:
Je m'attends et souhaite que la série temporelle simulée soit différente de la série originale, mais je ne m'attendais pas à une différence aussi importante. Essentiellement, je veux que la série simulée se comporte ou ressemble largement à l'original.
Voici le code R que j'ai utilisé pour estimer le modèle et simuler la série:
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")
Et voici la sortie d'estimation:
*---------------------------------*
* 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
J'apprécierais grandement tout conseil sur la façon d'améliorer ma modélisation et ma simulation, ou tout aperçu des erreurs que j'ai pu commettre. Il semble que le résidu du modèle ne soit pas utilisé comme terme de bruit dans ma tentative de simulation, mais je ne sais pas comment l'incorporer.
ugarchspec()
etugarchsim()
). Assurez-vous que votre code est reproductible chaque fois que vous posez une question ici et il "aidera les gens à vous aider".Réponses:
Je travaille avec la prévision de données forex et faites-moi confiance chaque fois que vous utilisez des méthodes de prévision statistique, que ce soit ARMA, ARIMA, GARCH, ARCH, etc. Ils peuvent ou non travailler pendant une ou deux prochaines périodes, mais certainement pas plus que cela. Parce que les données que vous traitez n'ont aucune corrélation automatique, aucune tendance et aucune saisonnalité.
Ma question est la suivante: avez-vous vérifié ACF et PACF ou testé la tendance, la saisonnalité avant d'utiliser ARMA et GARCH? Sans les propriétés mentionnées ci-dessus dans les données, les prévisions statistiques ne fonctionnent pas car vous violez les hypothèses de base de ces modèles.
la source
Ma suggestion serait de vous assurer que le modèle que vous avez sélectionné est approprié pour les données.
la source
distribution.model="std"