Video: Cholesky Decomposition: Take your Backtesting to the Next Level

Link to Notebook in Github

Hey Tino (and anyone who cares to join the thread)

I wanted to follow up with further enquiry from discussion I saw on the YouTube video, on a strategy to induce correlation between different distributions.

Top of my head I would convert your known marginals to uniforms, and the to normals, from there calculate the correlation matrix and use cholesky, and the work it backwards from the simulation, so normal to uniform to your beta/gamma.

Would it be reasonable in practise to combine Cholesky + CDE/Inverse CDE transform + GARCH to obtain simulated realisations of entire market movements?

So given you had (say) 5 assets with some level of correlation and you wanted to simulate their movement together. Could you run a GARCH on each one independently, take combinations of realisations from the GARCH simulator, then apply the method above to induce correlation using Cholesky + CDE?

If this is a good way of doing things, and something you would use in practise, I’d love to see a video on the topic as it has significant practical application in modelling a universe of assets or even a small handful for pairs trading or statistical arbitrage.

If you think this method has issues (my immediate thought is that maybe by applying Cholesky to GARCH you possibly lose the statistical properties or “stylised facts” you may have been looking for from GARCH in exchange for the forced correlation structure), I’d love to hear that perspective and what you might try in it’s place. Do you know of any noise models like GARCH that work in n-dimensions? Maybe moving into Gaussian process or Kalman filter territory…

Many thanks in advance
Athon

1 Like

Okay, I believe I’ve found some leads already. I’d love some help interpreting.

Multivariate Stochastic Volatility. Looks pretty spicy but I’m sure you could find a way to make it accessible!

Hey Athon,

Excellent questions you are posing.
The way I would approach it, and to use a good dose of self referencing, is to use some copulas, and some GARCH outputs.
If you take a look at this:
PhD Thesis

Looking at Section 4.4.1.1 on page 105, and following steps 1 (a) i. , then (b) using normal, and then (c) using GARCH (which is what we are using as out marginal model), then we would have a bunch of returns z, which we can put together using weights w into a portfolio Z.

Indeed this would make an excellent video. I have all this code in MATLAB, and am slowly converting it to Python. As you can see the purpose of these simulations is to make Value at Risk and Conditional Value at Risk forecasts, but you can of course use them for whatever use you like!

The above uses DCC and RV GARCH, but you don’t HAVE TO, as you can keep a normal (unconditional) correlation matrix and just a traditional, daily GARCH(1,1) model.

Let me know how you get on, but happy to discuss further.

Cheers,

Tino

1 Like

Indeed Multivariate stochastic vol is spicy. I try and stay away! lol

1 Like

Oh amazing, I couldn’t ask for much more detail on a strategy than your entire PhD haha. I’ll take my time to go through this and see if any questions linger. Will share a colab notebook if I manage to get some Python together.

Many thanks
Athon

1 Like

All groovy!

Funnily enough, I was exposed to VaR and expected shortfall simulation only recently via this presentation:

I think you’d enjoy it!

1 Like

Interesting. Have never seen “ML” type models been used for VaR simulation. Will check it out! Thanks!

1 Like

Hey thanks for the video! This is awesome. If I understand correctly, if you let C= RR^T be the desired correlations and M, \hat{M} be your input data and standardized input data respectively, your new correlation matrix is E[R \hat{M} \hat{M}^T R^T] = R \sigma R^T which is only equal to C when \sigma = I_d so this doesn’t eliminate the stress of needing to estimate a covariance matrix. Is the goal to find a transformation that linearly preserves keeps other properties like expectation and autocorrelation but fix the covariances or is this used for something completely different?

Hey,

I only use a covariance matrix from real data so I can generate something that is positive definite. You can of course just make up your own numbers.

The point is to create data which has a correlation structure, rather than uncorrelated time series data. That it!