Introduction:

There exist volatility clusters in daily returns of shares: market volatility is high for certain period but low for others. In other words, small(large) changes tend to be followed by further small (large) changes, ie: conditional heteroskedasticity. Hence in this project, we use GARCH model to tackle this asymmetry in volatility

Daily prices and return from 2008 to 2019

Comments:

Price is non-stationary while return is stationary(ie:move around a constant mean over time). So we model growth in share price

Conditional Heteroskedasticity check using ACF and PACF of squared time series

Comments:

Sample ACF and PACF is significant different from 0 at certain lags suggest that the process has conditional heteroskedasticity

Comments:

Green line is higher than normal distribution (red line). Hence, student t distribution (heavier tail) would be more suitable for model

Fit GARCH model:

GARCH with t-distribution:

s <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
                variance.model = list(model = "sGARCH"),
                distribution.model = 'sstd')
                
m <- ugarchfit(data = return, spec = s)

GJR-GARCH

s <- ugarchspec(mean.model = list(armaOrder = c(0,0)),
                variance.model = list(model = "gjrGARCH"),
                distribution.model = 'sstd')
m <- ugarchfit(data = return, spec = s)

We chose model GJR-GARCH with lowest AIC and Information Criteria

Forecasting

sfinal<- s
#Merge parameter
setfixed(sfinal) <- as.list(coef(m))

f2020 <- ugarchforecast(data = return,
                        fitORspec = sfinal,
                        n.ahead = 252)
#Forecasting future variance
plot(sigma(f2020))

sim <- ugarchpath(spec = sfinal,
                  m.sim = 3,
                  n.sim = 1*252,
                  rseed = 123)

Forecasting from last price

p <-     72.87*apply(fitted(sim), 2, 'cumsum') +    72.87
matplot(p, type = "l", lwd = 3)