Why Euler GBM Steps Can Turn Negative and How Exact Steps Avoid It
Summary
The question concerns negative simulated asset values when geometric Brownian motion (GBM) is approximated with annual Euler steps. In that update, the prior value is multiplied by a linear factor involving drift and a normally distributed shock. That factor can be negative, particularly with a large time interval or substantial volatility, so the numerical approximation can produce negative prices even though continuous-time GBM remains positive.
The answer recommends using the exact GBM transition over each interval: multiply the current price by the exponential of the drift adjustment and a normal Brownian increment scaled to the interval. This preserves positive simulated values under the model. The tradeoff mentioned is extra computation for the exponential, which the answer regards as secondary. The note gives no empirical comparison or implementation detail, and its recommendation addresses discretization under GBM rather than whether GBM itself is a suitable price model.
Key ideas
- A linear Euler update for GBM can produce negative values because its multiplicative factor may be negative.
- Large simulation intervals make the approximation a poor choice for modeling continuous-time GBM dynamics.
- The exact GBM transition uses an exponential of an adjusted drift and a Gaussian Brownian increment.
- Under the exact transition, simulated prices remain positive, with some additional computational cost.
Tags
Full text
# GBM in R giving negative numbers?
# GBM in R giving negative numbers?
I was under the impression that simulations involving geometric brownian motion are not supposed to yield negative numbers. However, I was trying the following Monte Carlo simulation in R for a GBM, where my initial asset price is: $98.78$, $\mu = 0.208$, $\sigma = 0.824$. I initialized my dataframe as such: (I am just doing 1000 simulations over 5 years, simulating the price each year)
```
V = matrix(0, nrow = 1000, ncol = 6)
V_df = data.frame(V)
```
Then:
```
V[, 1] <- 98.78
```
I then perform the simulations (with $dt = 1$):
```
for (i in 1:1000) {
for (j in 1:5) {
V_df[i,j+1] <- V_df[i,j]*(mu*dt + sigma*sqrt(dt)*rnorm(1)) + V_df[i,j]
}
}
```
When I then check $V_{df}$ there are many negative entries. Would anyone have an idea as to why this is so?
Thanks.
## Answer by Ivan (score 3, accepted)
https://quant.stackexchange.com/a/40349
With such a large time step (annual), you would be far better off using the exact GBM solution rather than discretizing what is technically only valid in an infinitesimal sense.
So you'd use $V_{t_2} = V_{t_1} . e^{(\mu-\frac{\sigma^2}{2})(t_2-t_1)+\sigma(W_{t_2}-W_{t_1})}$
Where $W_{t_2}-W_{t_1} \sim N(mean=0,var=t_2-t_1)$
You would then have positive values only.
The downside is the exponential takes a little more time to calculate, but I assume that is a secondary concern here.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.