This is an interesting question for simulation. The question is a bit lengthy but I'm trying my best to make it super clear here.

Now I have some multi-factor model, say some US barra risk model from MSCI. I have the factor return, factor covariance, factor loadings and idiosyncratic risk. The question is that, how can we effectively simulate multi-day stock daily return from the factor model?

Here is my thought and steps:

$f$ is number of factors
$s$ is number of stocks
$nsim$ is number of simulations
$FR$ as factor return ($f$ x $1$) matrix from day $t_0$
$FC$ as factor covariance ($f$ x $f$) matrix from day $t_0$
$FL$ as factor loadings ($s$ x $f$) matrix from day $t_0$
$SRISK$ as idiosyncratic risk ($s$ x $1$) matrix from day $t_0$

  1. Generate a ($f$ x $nsim$) matrix from standard normal as $Z1$
  2. Do cholesky decomposition for factor covariance, let $FC=A*A^T$
  3. Then, the simulated factor return is $SRF = FR + A*Z1$, note that one need to handle the shape of factor return here. $SRF$ is with shape ($f$ x $nsim$)
  4. So we need to multiply with factor loadings, that is $FL * SRF$, with shape ($s$ x $nsim$). This is the effective contribution of return from factor piece.
  5. Generate another ($1$ x $nsim$) matrix from standard normal as $Z2$
  6. The effective contribution of return from idiosyncratic piece is $SRISK * Z2$, with shape ($s$ x $nsim$).
  7. Adding step 4 and 6 together would give us the simulated daily return, say $SR$, which is also shape as ($s$ x $nsim$), meaning $nsim$ simulation for $s$ stocks.

Now the problem is that output from step 7 is daily return, which should be larger than -1. But we don't have this guarantee. Notice that there is a reason why people simulate stock price, because if you assume stock price follow geometric brownian motion, then you would never get negative stock price, and further no daily return smaller than -1. I'm having trouble linking my simulated daily return with GBM. Having said that, let me share my thought and please correct me:

  1. First and naive way is do rejection. When there is daily return smaller than -1, one need to re-do the simulation. This is not ideal and not matrix friendly.
  2. Second way. Notice that log(1+x) ~= x, we can let $log(1+R) = SR$, which will give us $R = exp(SR) - 1$, where $R$ is the final daily return we want and prevent "bad" simulated return. However, I'm not sure how this is related with GBM model and more importantly whether this is a valid approach.
  • $\begingroup$ For those who don't familiar with multi-factor model. An super quick recap of how the model (regression) work: daily_return ~ beta_1*factor_loadings_1 + beta2*factor_loadings_2 + ... + beta_f*factor_loadings_f + idio_syncratic_return. The beta here is the factor return. $\endgroup$ Nov 28, 2023 at 17:53
  • $\begingroup$ Factor loadings is the exposure that the stock has on certain factor. Just think of it as some input features to the regression. Y is daily_return, X is factor_loadings. $\endgroup$ Nov 28, 2023 at 18:10
  • $\begingroup$ You could edit your post to include the information from the comments. That would be a more elegant solution than a post followed by some explanatory comments. $\endgroup$ Nov 28, 2023 at 21:10


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.