Usando modelos ARMA-GARCH para simular preços de câmbio


10

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:

insira a descrição da imagem aqui

Em seguida, tentei simular uma série temporal com base no modelo ajustado, fornecendo o seguinte:

insira a descrição da imagem aqui

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.


11
Oi Jeff! Você também deve fornecer seus dados (ou pelo menos uma amostra representativa) aos possíveis auxiliares. Além disso, seu código de amostra não inclui os pacotes usados ​​(onde residem as funções ugarchspec()e ugarchsim()). Verifique se o seu código é reproduzível sempre que você fizer uma pergunta aqui e "ajudará as pessoas a ajudá-lo".
SavedByJESUS

Obrigado pelo seu conselho, @SavedByJESUS. Atualizei minha postagem para incluir a biblioteca R que usei e esclareci o formato dos meus dados.
10119 Jeff

A principal razão pela qual seus dados simulados são diferentes da série original é simplesmente porque o modelo ajustado, ARMA (1, 1, 1) GARCH (1, 1), não é o modelo apropriado para seus dados. Você deve começar melhorando seu modelo primeiro e, em seguida, sua simulação subsequente será semelhante aos dados originais.
SavedByJESUS

Respostas:


1

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.


Obrigado pelo seu comentário @JAbr, mas não estou realmente prevendo. Em vez disso, minha aplicação é estritamente a simulação de um caminho de preço alternativo com as mesmas características estatísticas dos dados observados.
10249 Jeff

Ok, mas em outras alas você está realmente prevendo usando o modelo de garch, não é, suas simulações usam garch, e garch produz observação por previsão.
Jabr

Absolutamente, mas você disse que as previsões de modelos de séries temporais se deterioram à medida que o horizonte se estende para o futuro. Estou sugerindo que o modelo não captura suficientemente a dinâmica da série, mesmo ao simular (ou prever) em horizontes de um único período.
11409 Jeff Jeff

Eu disse: "Eles podem trabalhar pelos próximos um ou dois períodos", meu mal, eu deveria ter dito que pode ou não.
Jabr

0

Minhas sugestões seriam garantir que o modelo que você selecionou seja apropriado para os dados.

  • Verifique se não há componentes cíclicos ou sazonais.
  • Execute um teste Dickey Fuller aumentado para testar a presença da raiz da unidade. Se a raiz da unidade estiver presente, continue diferenciando os dados até que o Teste Aumentado de Dickey Completo mostre a presença de nenhuma raiz da unidade. Como alternativa, observe os coeficientes de correlação automática, eles devem cair após alguns n atrasos na estacionaridade.
  • Talvez você tenha superado ou não tenha se adaptado ao modelo usando pedidos incorretos? Encontre os pedidos corretos usando AIC e BIC.

tdistribution.model="std"

Você está certo. Vou editar minha resposta.
A-AR

Não estou preocupado com o ajuste excessivo - na verdade, para o aplicativo pretendido, quero ajustar o modelo de maneira excessiva. Testei a estacionariedade, embora não a sazonalidade. Independentemente desses problemas, o modelo GARCH não parece estar funcionando corretamente. Parece que a série simulada é completamente homoscedástica.
18419 Jeff Jeff
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.