Why GBM Simulations Scale Random Shocks by the Square Root of Time
Summary
This explanation connects the Wiener-process increment in geometric Brownian motion to normal random draws. Over a time step of length Δt, the increment has mean zero and variance Δt, so it can be simulated as a standard normal draw multiplied by the square root of Δt. The question’s Euler discretization applies drift in proportion to Δt and random movement in proportion to √Δt.
The response confirms the setup but recommends using GBM’s closed-form transition for more accurate simulation. In that update, the log price changes by a drift term adjusted for half the variance and a Gaussian shock scaled by volatility and √Δt; exponentiating preserves positive prices. The document includes a sample simulation setup, but does not compare numerical error, discuss parameter estimation, or address practical calibration. Its central lesson is the different time scaling of drift and diffusion, and the availability of an exact GBM step rather than an Euler approximation.
Key ideas
- A Wiener increment over Δt has zero mean and variance Δt.
- A standard normal draw scaled by √Δt simulates the Wiener increment.
- In an Euler GBM step, drift scales with Δt while the random shock scales with √Δt.
- The closed-form GBM transition includes a variance adjustment to the log-price drift.
- Using the closed-form transition avoids discretization error for GBM path simulation.
Tags
Full text
# Geometric Brownian Motion - Why Sqrt(dt)?
# Geometric Brownian Motion - Why Sqrt(dt)?
I was going to simulate a geometric brownian motion in matlab, when I recognized that I didnt fully understand the underlying Wiener process. Following the instuctions here I am starting from the form:
Where the $dW_t$ denotes the Wiener process. So $E(dW_t)=0$ and $Var(dW_t) = dt$, right? Could I also write $dW_t = W_{dt}$? Becasue I find the latter more intuitively. So I can simulate $dW_t$ by simulating $X \sim N(0,1)$ and then $dW_t = X\sqrt{dt}$?.
The next step is the discretization of the differential term. So I write: $S_{t+dt} = S_t + S_t \mu dt + S_t \sigma X \sqrt{dt}$
$S_{t+dt} = S_t*(1+ \mu dt + \sigma X \sqrt{dt})$
$S_{t+dt} = S_t*(1+ r_{dt})$
$S_{T} = S_0 *(1+r_1)*(1+r_2)*...*(1+r_T)$
Where $r_{dt}$ means the rate after each time-step. $T$ is the ending time. So I wrote the following matlab-code. Could some one verify this code please?
```
function [x,y]= brown_data(T, dt,sigma, mu, y0)
x = 0:dt:T;
y = zeros(size(x));
dws = normrnd(0,1,1,numel(x)-1);
tic
ratesPlus1 = [y0 ,1 + mu*dt + sigma*dws*sqrt(dt) ];
y = cumprod(ratesPlus1);
toc
end
```
## Answer by phdstudent (score 1)
https://quant.stackexchange.com/a/18879
Your procedure is correct.
However, given that the stock follows a GBM it has a closed form solution, which will yield more accurate results.
$S_{t+\Delta t}=S_te^{(\mu-0.5\sigma^2)\Delta t+\sigma \sqrt{\Delta t}X_{t+\Delta t}}$
Here's a matlab code with the method above:
```
clear all
% GBM stock price
t = 250;
nsim = 1000;
S = NaN(nsim, t);
Sminus = NaN(nsim, t);
dt = 1/250;
S(:,1) = 100;
mu = 0.08;
sigma = 0.2;
r = 0.08;
epsilon = normrnd(0,1,nsim,t);
% Stock Price Path
for i = 2:250
S(:,i) = S(:,i-1).*exp((mu-0.5*sigma^2)*dt+sigma*sqrt(dt).*epsilon(:,i));
end
```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.