Correct GBM Price Steps for Fractional Time Intervals
Summary
The document reviews how to simulate the next price under geometric Brownian motion when elapsed time is a fraction of a year. The proposed expression multiplies the prior price by an exponential containing drift and a normally distributed volatility shock, but it omits the variance adjustment required by the GBM solution.
The corrected log-price increment uses drift reduced by one half of variance, scaled by the time interval, plus volatility times the square root of elapsed time times a standard normal draw. This scaling matters when using daily parameters and sub-daily or fractional steps; a formula stated for a one-year interval cannot simply be applied unchanged at shorter horizons. The answer gives the model equation but no numerical example, implementation details, or discussion of alternative conventions for annualizing parameters.
Key ideas
- GBM price simulation uses an exponential update from the previous price.
- The expected log return includes a subtraction of half the variance from the drift.
- The deterministic component scales with elapsed time, while the random shock scales with its square root.
- Parameters and time units must be consistent when simulating intervals shorter than a year.
Tags
Full text
# Getting the next price of a GBM (Geometric Brownian Motion)
# Getting the next price of a GBM (Geometric Brownian Motion)
I am writing a program that creates realizations of a GBM.
Starting from an initial price, I get the following price with this formula:
```
NewPrice = PreviousPrice * Exp(Volatility * N10 * Sqrt(DaysElapsed) + Drift * DaysElapsed)
```
Where:
- Volatility is the annual percentage volatility / 100 / sqrt(250)
- Drift the annual percentage Drift / 100 / 250
- N01 is a standard normal realization
- DaysElapsed are the days elapsed from previous price (this is a small fraction in my case)
I am not sure that I am doing this right. Is the above line correct ? Please, suggest the right code expression or other possible corrections. Thank you!
## Answer by emcor (score 1, accepted)
https://quant.stackexchange.com/a/12905
GBM is defined as $$ S_t = S_{t-1}\exp\left( \left(\mu - \frac{\sigma^2}{2} \right)dt + \sigma dW_t\right)$$
So, in your notation, assuming your daily parameters:
$$ S_{new} = S_{previous}\cdot\exp\left( \left({drift} - \frac{{volatility}^2}{2} \right)days + volatility \,\sqrt{days}\,N(0,1)\right)$$
So your formula was incorrect. The youtube you quote is only true for 1-year timesteps (while you have $days$ steps).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.