Utilisation des modèles ARMA-GARCH pour simuler les prix des devises

10

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:

entrez la description de l'image ici

J'ai ensuite tenté de simuler une série chronologique basée sur le modèle ajusté, en me donnant les informations suivantes:

entrez la description de l'image ici

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.

Jeff
la source
1
Salut Jeff! Vous devez également fournir vos données (ou au moins un échantillon représentatif) aux assistants potentiels. En outre, votre exemple de code n'inclut pas les packages que vous avez utilisés (où résident les fonctions ugarchspec()et ugarchsim()). Assurez-vous que votre code est reproductible chaque fois que vous posez une question ici et il "aidera les gens à vous aider".
SavedByJESUS
Merci pour vos conseils, @SavedByJESUS. J'ai mis à jour mon message pour inclure la bibliothèque R que j'ai utilisée et clarifié le format de mes données.
Jeff
La raison principale pour laquelle vos données simulées sont différentes de la série d'origine est simplement parce que le modèle ajusté, ARMA (1, 1, 1) GARCH (1, 1), n'est pas le modèle approprié pour vos données. Vous devez commencer par améliorer votre modèle en premier, puis votre simulation ultérieure sera similaire à vos données d'origine.
SavedByJESUS

Réponses:

1

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.

JAbr
la source
Merci pour votre commentaire @JAbr, mais je ne fais pas de prévisions. Au contraire, mon application est strictement la simulation d'une trajectoire de prix alternative avec les mêmes caractéristiques statistiques que les données observées.
Jeff
D'accord, mais dans d'autres quartiers, vous faites des prévisions en utilisant le modèle Garch, n'est-ce pas, vos simulations utilisent Garch, et Garch produit une observation par prévision.
JAbr
Absolument, mais vous avez dit que les prévisions des modèles de séries chronologiques se détériorent à mesure que l'horizon se prolonge dans le futur. Je suggère que le modèle ne capture pas suffisamment la dynamique de la série même lors de la simulation (ou de la prévision) à des horizons d'une seule période.
Jeff
J'ai dit "Ils peuvent travailler pendant une ou deux prochaines périodes", c'est mauvais, j'aurais dû dire peut-être ou non.
JAbr
0

Ma suggestion serait de vous assurer que le modèle que vous avez sélectionné est approprié pour les données.

  • Assurez-vous qu'il n'y a pas de composants cycliques ou saisonniers.
  • Effectuez un test Dickey Fuller augmenté pour tester la présence de racine unitaire. Si la racine unitaire est présente, continuez à différencier les données jusqu'à ce que le test Dickey Fuller augmenté ne montre la présence d'aucune racine unitaire. Vous pouvez également observer les coefficients de corrélation automatique, ils devraient chuter après quelques n décalages de temps pour la stationnarité.
  • Peut-être avez-vous sur-ajusté ou sous-ajusté le modèle en utilisant des commandes incorrectes? Trouvez les commandes correctes en utilisant AIC et BIC.
A-ar
la source
tdistribution.model="std"
Tu as raison. Je vais modifier ma réponse.
A-ar
Je ne m'inquiète pas du sur-ajustement - en fait, pour l'application que je souhaite, je veux sur-adapter le modèle. J'ai testé la stationnarité, mais pas la saisonnalité. Indépendamment de ces problèmes, le modèle GARCH ne semble pas fonctionner correctement. Il semble que la série simulée soit parfaitement homoscédastique.
Jeff