Simulating Correlated Stock Price Scenarios with Multivariate Returns
Summary
The document outlines a Monte Carlo procedure for generating joint price paths for several stocks. First, draw a matrix of returns whose asset-level observations at each time step follow a specified multivariate distribution, using a covariance structure to represent cross-stock correlation. Convert each asset’s returns into prices from a shared initial price, then store each asset’s path in its own scenario matrix. Repeat the draw and price-conversion steps until the desired number of scenarios has been collected.
This construction ensures that corresponding paths across the separate asset matrices come from the same joint return draw, preserving the intended cross-sectional dependence within each scenario. The example discusses three stocks and illustrates a scenario count and monthly horizon, but it does not specify calibrated inputs or report simulation results. Despite the question’s reference to geometric Brownian motion and autocorrelation, the answer only describes correlated returns across assets; it does not model serial autocorrelation over time. Its price update uses simple return compounding, so assumptions about return distribution, drift, volatility, and time dependence must be supplied separately.
Key ideas
- Draw returns for all assets jointly so their cross-sectional correlation is preserved.
- Convert each joint return draw into price paths by compounding from initial prices.
- Store corresponding paths in separate asset matrices while keeping scenario rows aligned.
- Repeat the process until the required number of joint scenarios is generated.
- The described method does not itself create serial autocorrelation in each asset’s returns.
Tags
Full text
# Monte Carlo simulations of correlated stocks by Geometric Brownian motion # Monte Carlo simulations of correlated stocks by Geometric Brownian motion I am trying to simulate using a Geometric Brownian Motion process three autocorrelated stocks. In particular, I need to simulate three different matrices with 1000 scenarios each using a Monte Carlo technique. How could I simulate them in order to be autocorrelated using R Studio? I saw some posts where it is suggested to use the function mvrnorm() but that it is applied in the generation of a single matrix where the different rows of the matrix are autocorrelated each other. I am looking for a solution where I need to simulate three different matrices that are autocorrelated to each other. Thanks in advance for your help! ## Answer by nbbo2 (score 2, accepted) https://quant.stackexchange.com/a/58739 Let $n$ be the number of stocks (here $n=3$) Let $T$ be the number of sequential returns to generate (for example $T=12$ if you want to generate a year's worth of monthly returns) Let $M$ be the number of alternative scenarios to generate (for example $M=1000$ to generate 1000 different outcomes) Then, Step 1. You generate a $n \times T$ matrix RETS of random correlated returns using mvrnorm() Step 2. From the RETS you generate a $n \times T$ matrix PRICES by assuming an initial price of 100 for each stock and applying the formula prices(i,t)=prices(i,t-1)*(1+rets(i,t)) Step 3. We have generated one set of correlated outcomes. We append the first row of PRICES to PRICE_OUTCOMES_A, the second row to PRICE_OUTCOMES_B and the third row to PRICE_OUTCOMES_C. If these three matrices already have $M$ or more rows, we STOP, else we go back to Step 1 to generate another scenario. At the end the 3 "price outcome matrices" (one matrix for each stock) will be $M$ by $T$, and each row will have the desired return correlation to the corresponding row of the other matrices.
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.