Use o modelo GARCH validado em produção

Modelos GARCH em R

Kris Boudt

Professor of finance and econometrics

Uso em produção

Distribuição dos retornos diários por ano

Modelos GARCH em R

Nova funcionalidade

  • Use ugarchfilter() para analisar a dinâmica recente da média e da volatilidade
  • Use ugarchforecast() aplicado a um objeto ugarchspec (em vez de ugarchfit()) para prever a média e a volatilidade futuras
Modelos GARCH em R

Exemplo com retornos da MSFT

  • msftret: retornos diários de 1999–2017.
  • Suponha que o ajuste do modelo foi feito com os retornos disponíveis no fim de 2010.
  • Você usa esse modelo no fim de 2017 para analisar a volatilidade passada e prever a futura.
Modelos GARCH em R

Passo 1: Definir a especificação final do modelo

Ajuste o melhor modelo usando msftret disponível no fim de 2010:

# Especifica AR(1)-GJR GARCH com distribuição t estudantil assimétrica
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1,0)),
 variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
# Estima o modelo
garchfit <- ugarchfit(data = msftret["/2010-12"], spec = garchspec)

Defina progarchspec como a especificação para produção e use a instrução setfixed(progarchspec) <- as.list(coef(garchfit)):

progarchspec <- garchspec
setfixed(progarchspec) <- as.list(coef(garchfit))
Modelos GARCH em R

Passo 2: Análise da dinâmica de média e volatilidade

Use a função ugarchfilter():

garchfilter <- ugarchfilter(data = msftret, spec = progarchspec)
plot(sigma(garchfilter))                                

Distribuição dos retornos diários por ano

Modelos GARCH em R

Passo 3: Prever retornos futuros

garchforecast <- ugarchforecast(data = msftret,
                                fitORspec = progarchspec, 
                                n.ahead = 10) # Fazer previsões para os próximos dez dias
cbind(fitted(garchforecast), sigma(garchforecast))
       2017-12-29 2017-12-29
T+1  0.0004781733 0.01124870
T+2  0.0003610470 0.01132550
T+3  0.0003663683 0.01140171
T+4  0.0003661265 0.01147733
T+5  0.0003661375 0.01155238
T+6  0.0003661370 0.01162688
T+7  0.0003661371 0.01170083
T+8  0.0003661371 0.01177424
T+9  0.0003661371 0.01184712
T+10 0.0003661371 0.01191948
Modelos GARCH em R

Uso em simulação

Em vez de aplicar o modelo completo para analisar retornos observados, você pode usá-lo para simular log-retornos artificiais:

$$ r_{t} = \log(P_{t}) - \log(P_{t-1}) $$

Útil para avaliar a aleatoriedade dos retornos futuros e o impacto nos preços, já que o preço futuro é:

$$ P_{t + h} = P_{t} \exp(r_{t + 1} + r_{t + 2} + \ldots + r_{t + h}) $$

Modelos GARCH em R

Passo 1: Calibrar o modelo de simulação

Use os log-retornos na estimação

# Calcular log-retornos
msftlogret <- diff(log(MSFTprice))[-1]

Estime o modelo e atribua os parâmetros ao modelo de simulação

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "gjrGARCH"),
                        distribution.model = "sstd")
# Estimar o modelo
garchfit <- ugarchfit(data = msftlogret, spec = garchspec)

# Definir o modelo estimado como o usado na simulação
simgarchspec <- garchspec
setfixed(simgarchspec) <- as.list(coef(garchfit))
Modelos GARCH em R

Passo 2: Rodar a simulação com `ugarchpath()`

A simulação com a função ugarchpath() exige escolher:

  • spec : modelo GARCH totalmente especificado
  • m.sim : número de séries temporais de retornos simulados desejadas
  • n.sim: número de observações na série simulada (ex.: 252)
  • rseed : qualquer número para fixar a semente usada na geração (necessário para reprodutibilidade)
simgarch <- ugarchpath(spec = simgarchspec, m.sim = 4,
                       n.sim = 10 * 252, rseed = 12345)
Modelos GARCH em R

Passo 3: Análise dos retornos simulados

O método fitted() fornece os retornos simulados:

simret <- fitted(simgarch)
plot.zoo(simret) 

Retornos simulados

Modelos GARCH em R

Análise da volatilidade simulada

plot.zoo(sigma(simgarch))

Volatilidade simulada

Modelos GARCH em R

Análise dos preços simulados

Plotando 4 simulações de 10 anos de preços de ações, com preço inicial 1:

simprices <- exp(apply(simret, 2, "cumsum"))
matplot(simprices, type = "l", lwd = 3)

Preços simulados

Modelos GARCH em R

Hora de praticar com setfixed(), ugarchfilter(), ugarchforecast() e ugarchpath()

Modelos GARCH em R

Preparing Video For Download...