Eu ajustei um modelo ARIMA (1,1,1) -GARCH (1,1) às séries temporais dos preços do log de taxas de câmbio AUD / USD amostrados em intervalos de um minuto ao longo de vários anos, dando-me mais de dois milhões de pontos de dados para estimar o modelo. O conjunto de dados está disponível aqui . Para maior clareza, este era um modelo ARMA-GARCH ajustado para registrar retornos devido à integração de primeira ordem dos preços dos registros. A série cronológica AUD / USD original é assim:
Em seguida, tentei simular uma série temporal com base no modelo ajustado, fornecendo o seguinte:
Eu espero e desejo que a série temporal simulada seja diferente da série original, mas não esperava que houvesse uma diferença tão significativa. Em essência, quero que a série simulada se comporte ou se pareça amplamente com a original.
Este é o código R que eu usei para estimar o modelo e simular a 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")
E esta é a saída de estimativa:
*---------------------------------*
* 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
Eu apreciaria muito qualquer orientação sobre como melhorar minha modelagem e simulação, ou qualquer visão sobre os erros que eu possa ter cometido. Parece que o resíduo do modelo não está sendo usado como termo de ruído na minha tentativa de simulação, embora não tenha certeza de como incorporá-lo.
ugarchspec()
eugarchsim()
). Verifique se o seu código é reproduzível sempre que você fizer uma pergunta aqui e "ajudará as pessoas a ajudá-lo".Respostas:
Estou trabalhando com a previsão de dados forex e confie em mim sempre que você usar métodos de previsão estatística, seja ARMA, ARIMA, GARCH, ARCH etc. Eles sempre tendem a se deteriorar à medida que você tenta prever com muita antecedência. Eles podem ou não funcionar pelos próximos um ou dois períodos, mas definitivamente não são mais do que isso. Como os dados com os quais você está lidando não têm correlação automática, tendência e sazonalidade.
Minha pergunta para você, você verificou ACF e PACF ou testes para tendência, sazonalidade antes de usar ARMA e GARCH? Sem as propriedades mencionadas acima, a previsão estatística de dados não funciona porque você está violando as premissas básicas desses modelos.
fonte
Minhas sugestões seriam garantir que o modelo que você selecionou seja apropriado para os dados.
fonte
distribution.model="std"