In this assignment, I analyzed high-frequency price data of the SPDR S&P 500 UCITS ETF, traded across multiple European exchanges, to explore how time-series methods capture market dynamics and volatility.
I began with data preparation, adapting the provided prepdata_sp500.py outline to read and merge minute-by-minute bid–ask midprices from multiple monthly Excel files, selecting only three exchange symbols and combining them into a clean dataset for further analysis.
Next, I performed univariate time-series modelling on one selected exchange. After converting prices to log-returns, I explored their autocorrelation structure (ACF and PACF) to identify suitable ARMA specifications. I estimated all combinations of ARMA(p, q) for p,q ∈ {0,1,2}, compared their AIC, log-likelihood, MSE, and Ljung–Box statistics, and discussed which model best fit the data and whether robust standard errors were needed.
Then, I extended the analysis to multivariate modelling using a VAR(5) model to capture interactions among returns from different exchanges. I assessed cross-market effects, Granger causality, and impulse-response functions (IRFs) to understand lead-lag dynamics and price transmission. I also examined the residual correlations and discussed model adequacy, before relating the VAR specification to a VECM (cointegration) model estimated on log-prices to check for long-run equilibrium relationships between exchanges.
Finally, I investigated time-varying volatility by estimating several GARCH(p,q) and EGARCH(p,q) models (p,q ∈ {1,2}) on daily returns, comparing their parameter estimates, AIC/BIC, and fitted conditional variances. I constructed realized variance from intraday squared returns and plotted it alongside the model-implied volatilities to evaluate how well each model captured daily fluctuations. I discussed whether the preferred ARMA model from Section 3.2 could be feasibly extended with a (E)GARCH structure and the implications of volatility clustering for financial modelling.