Portfolio Optimization under serial correlation and conditional heteroscedasticity.

3 views (last 30 days)
Hello folks.
I'm trying to get optimized portfolio choice with assets which have serial correlation and conditional heteroscedasticity, not like in the Markowitz optimization assumption. In Markowitz world, only mean and variance matter. But in my situation I should consider the effect of serial correlation and conditional heteroscedasticity. In specific, I used Heston-Nandi(2000) M-GARCH(1,1) model for two stock index returns and two bond index returns.
How can I optimize my portfolio in this context? Is there anyone who can help me?

Answers (1)

TED MOSBY
TED MOSBY on 16 May 2025
Edited: TED MOSBY on 16 May 2025
Hi,
You can follow the workflow below to optimize your portfolio which is dynamic instead of the static Markowitz setup:
  1. Estimate an AR(1)–Heston-Nandi model for every return series. Use arima for the mean part and embed a GJR-GARCH to approximate Heston-Nandi dynamics.
  2. Generate one-step-ahead forecasts of conditional mean and variance. Call forecast on each fitted model.
  3. Form the conditional covariance matrix. Combine the forecasted standard deviations with a residual-correlation matrix. Treat the residual correlation as constant and compute it once from the standardized innovations.
  4. Optimise the portfolio with the conditional moments. Feed the inputs into Portfolio, PortfolioCVaR, or any other optimiser.The optimiser itself hasn’t changed—only its inputs now reflect serial correlation and time-varying volatility.
  5. Re-run steps 1-4 at every rebalance date. That’s what makes the strategy dynamic.
An example of the workflow above:
% r is a T-by-N matrix of log returns (you have to make this from your
% prices csv)
spec = garch('GARCHLags',1,'ARCHLags',1); % Heston-Nandi ≈ GJR
model = arima('ARLags',1,'Variance',spec);
N = size(r,2);
mu = zeros(N,1);
sig2 = zeros(N,1);
for i = 1:N
mdl{i} = estimate(model, r(:,i)); % step 1
[mu(i),~,sig2(i)] = forecast(mdl{i}, 1, 'Y0', r(:,i)); % step 2
eps(:,i) = infer(mdl{i}, r(:,i));
end
R = corr(eps); % residual correlation
Sigma = diag(sqrt(sig2)) * R * diag(sqrt(sig2)); % step 3
P = Portfolio('AssetMean', mu, 'AssetCovar', Sigma, ...
'LowerBound', 0, 'Budget', 1);
w = estimateMaxSharpeRatio(P); % step 4
Hope this helps!

Categories

Find more on Portfolio Optimization and Asset Allocation in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!