Skip to content
All library documents

Simulating Correlated Asset Returns with Cholesky Decomposition

Article Quant Q&A · Author: John_maddon

Summary

The document shows how to generate correlated standard normal shocks for a multi-asset Monte Carlo simulation. Given the assets' correlation matrix, take its Cholesky factor, a lower triangular matrix whose product with its transpose recovers the correlation matrix. Multiplying a vector of independent standard normal draws by this factor produces a vector with mean zero and the target covariance structure. In the example, the correlation matrix has unit diagonal entries, and an R snippet demonstrates the two-asset, single-draw calculation.

The same factor can be reused for every monthly simulation step, while new independent draws are generated at each point along each simulated path. Those correlated shocks can then be used in the asset dynamics. The post focuses on constructing the shocks rather than giving a full multi-asset Black–Scholes simulation, and the code example is limited to two assets and one sample. A valid positive-definite correlation matrix is also needed for the standard Cholesky factorization described.

Key ideas

  • A Cholesky factor maps independent normal draws into draws with the desired covariance matrix.
  • The lower triangular factor multiplied by its transpose reconstructs the correlation matrix.
  • Compute the factor once, then generate fresh random shocks for each simulation time step.
  • Correlated shocks can be incorporated into each asset's simulated return dynamics.
  • The example covers shock generation, not the full portfolio simulation procedure.

Tags

Full text
# Correlated Wiener Process


# Correlated Wiener Process












I am in trouble with a task:

I have a portfolio of 5 assets, and I Have the correlation among them, with a 5x5 matrix.

Since each asset follows the BS formula: , I need to perform a montecarlo simulation, with a number of simulations (N) for instance equal to 10000, for a period of 1 year, with 12 payments (monthly payment).

So I need to simulate the trajectory of each asset, considering the correlation among them. How can I do this? I have seen something regarding the Cholesky decomposition, but I have not understood how do it, since when we simulate the trajectory of each asset, we have a matrix made by: 5 row (asset) and 10000 element inside each row (trajectory each asset)

Thank you!

## Answer by mmencke (score 1, accepted)

https://quant.stackexchange.com/a/63724

The Cholesky decomposition works in the following way: Suppose you have a vector of $n$ independent normal realisations: $Z$. Set the elements of $\Sigma$ to be $\rho_{i,j}$ where $i$ indicates the row and $j$ indicates the column. Obviously $\rho_{i,i}=1$. We set the Cholesky decomposition of $\Sigma$ to be $L$ (a lower triangular matrix) such that $\Sigma=L\cdot L^{\top}$. Then $X=L\cdot Z$ is normally distributed with mean 0 and covariance matrix $\Sigma$.

Functioning R code is for the simple case of $n=2$ with one sample is given below

```
Sigma<-matrix(c(1,0.9,0.9,1),nrow=2)

L<-t(chol(Sigma)) #transpose as R uses upper triangular for cholesky
L%*%t(L) #check

Z<-rnorm(2)
X<-L%*%Z
```

You only have to calculate $L$ once, but have to calculate $Z$ and $X$ once per point on the trajectory.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.