Skip to content
All library documents

Choosing Time Steps for GBM Monte Carlo Stock Simulations

Article Quant Q&A · Author: professorDante

Summary

The discussion clarifies how to choose a time increment when simulating stock prices with geometric Brownian motion. For a daily model expressed in annual units, the drift scales with elapsed time and volatility with the square root of elapsed time. A step of one trading day is therefore represented as one divided by the assumed trading days per year, with corresponding scaling of the drift and volatility inputs.

For a standard GBM and a question about the terminal price, different step sizes can give the same target distribution when the model and parameter scaling are handled consistently. Step size matters more for path-dependent models, such as one with price-dependent volatility, where numerical approximations converge as increments shrink. The answer notes that convergence behavior depends on the simulation scheme; it does not assess the example’s inputs or establish that GBM is a good stock forecasting model.

Key ideas

  • When time is measured in years, drift has inverse-year units and volatility has inverse-square-root-year units.
  • Daily steps use the chosen number of trading days per year to scale time, drift, and volatility consistently.
  • For standard GBM terminal values, the time increment can vary if inputs are scaled correctly.
  • Path-dependent or state-dependent models can incur discretization error that generally falls with smaller steps.
  • The appropriate increment depends on the numerical scheme and the model being simulated.

Tags

Full text
# Choice of time increment in Monte Carlo/ Geometric Brownian Motion (GBM) stock price prediction


# Choice of time increment in Monte Carlo/ Geometric Brownian Motion (GBM) stock price prediction












I am playing around with writing a daily stock price prediction algo in Python using a Monte Carlo/GBM methodology. I know there are many other questions on here about this topic (here, and here), but I'm super confused on the inputs and choice of time delta to give sensible results. It seems that unless you have a time delta (dt) increment that is suitably tiny, the results are garbage, and vary wildly with the choice of dt. Obviously I can see that dt is involved in the exponential component, so any change to it will have a big effect. My question is how does one choose a dt?

I'm basically using the great example here, which uses numpy (apologies to the non-python people).

I want to model daily price movements, and look at the results after a certain number of steps (n). I see a lot of examples use a dt of 1/252 (number of trading days in a year, then look at the n-th index of the each sims array to see the values.

Why do we need to have dt as 1/252 to model daily movements? Can we use 1/50 say? Does dt have to be 'suitably tiny'?

As an example, let's use FB. It is trading at 118.72. I want to know the probability of it being above 125 after 60 trading days. I will run 10,000 paths. FB standard deviation is 0.12.

Using a dt of 1/252, and looking at the 60th value of each result, gives me 1912 paths with a value above 125, so a 19% chance.

Using a dt of 1/50 gives me 3294 paths, a 33% chance.

Very confused.

Apologies if this is a stupid question to all the quants on here - I'm primarily a coder.

## Answer by oliversm (score 5, accepted)

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

Typically when running a Monte Carlo simulation we might simulate an SDE similar to $$ \dfrac{dS}{S} = \mu\:dt + \sigma \: dW(t) $$ by some appropriate method (e.g. Euler-Maruyama, Milstein, etc). We notice by dimensional analysis that if $t$ is in units of $\textrm{years}$ then $\mu \sim \textrm{years}^{-1}$ and $\sigma \sim \textrm{years}^{-1/2}$.

Typically we chose $dt = 1/252$ because there are around 252 trading days in a year, and when analysts crunch the daily values, they "pretend" that there are 252 days in a year for convenience. Hence if you want to simulate on a "daily" (252 days in a year) time scale then we would have the scaling $\mu \to \dfrac{\mu}{252}$ and $\sigma \to \dfrac{\sigma}{\sqrt{252\:}}$.

Provided we are using a Monte Carlo method then we can use whatever timescale we like if we're only interested in the final value. (Compare this to finite difference schemes where our choice of increments always has effects on convergence).

Caveat:

We are using the Monte Carlo approach to simulate what the final value would be, and sometimes this is path dependent (suppose $\sigma \to \sigma(S)$, which is called a local volatility model). Then the distribution of final values we compute is only an approximation to the actual distribution of solutions to the SDE. Hence if we use a smaller $\Delta t$ then our approximate distribution converges to the true distribution (cf strong and weak convergence), and generally for the Euler-Maruyama scheme the convergence is $O(\Delta t)$, which means smaller time scales give better results.

If this is the case then there are methods for choosing an appropriate $\Delta t$, but this depends on what Monte Carlo scheme we use, Classical MC, Quasi MC, Multilevel MC, etc.

I hope this helps.

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.