Quant Memo
Core

Euler And Milstein Schemes

Simulating a stochastic process by walking in straight steps ignores how much the path curves within each step. Milstein's scheme adds exactly that correction, and the difference shows up as soon as volatility depends on the price.

Prerequisites: The Euler-Maruyama Scheme, Itô's Lemma, Monte Carlo Option Pricing

Simulating a stock's path forward one time step at a time means picking a rule for turning "where I am now" plus "a random shock" into "where I am next." The simplest such rule, Euler-Maruyama, takes a straight step: it uses today's volatility for the whole step and never asks whether that volatility itself is changing within the step. When volatility doesn't depend on the price — plain Brownian motion — that's exact. The moment volatility depends on the price, as it does for a stock under geometric Brownian motion, the straight step introduces an error, and Milstein's scheme is the fix: one extra term that accounts for how much the path curves during the step it's taking.

Walking a hillside blindfolded

Walking blindfolded across a hillside in fixed-length strides, always stepping in the direction you were facing at the start of each stride, works fine on flat ground but drifts you off course on a slope, because the ground's steepness changes as you walk and your stride never adjusts mid-step. A hiker who adjusts each stride's direction slightly for how the slope curves underfoot as they walk stays truer to the real path. Euler-Maruyama is the blindfolded straight-stride walker; Milstein is the hiker who corrects for the curve within each step.

Euler:St+Δt=St+μStΔt+σStΔW\text{Euler:} \quad S_{t+\Delta t} = S_t + \mu S_t \Delta t + \sigma S_t \Delta W Milstein:St+Δt=St+μStΔt+σStΔW+12σ2St(ΔW2Δt)\text{Milstein:} \quad S_{t+\Delta t} = S_t + \mu S_t \Delta t + \sigma S_t \Delta W + \tfrac12 \sigma^2 S_t \left(\Delta W^2 - \Delta t\right)

In plain English: both start the same way — a drift term μStΔt\mu S_t \Delta t plus a random shock σStΔW\sigma S_t \Delta W, where ΔW\Delta W is a normal random variable with variance Δt\Delta t. Milstein adds one more term, proportional to σ2\sigma^2 and to how much ΔW2\Delta W^2 overshoots or undershoots its own average value of Δt\Delta t. That correction exists precisely because volatility here is σSt\sigma S_t, which itself depends on StS_t — as the price moves during the step, the "correct" volatility to have used was subtly different from the volatility at the step's start, and this term captures the leading-order size of that discrepancy.

Worked example 1: one step, both schemes, same random draw. Take S0=100S_0=100 (a $100 stock), μ=0\mu=0, σ=30%\sigma=30\%, Δt=0.01\Delta t=0.01 years (about 2.6 trading days), and suppose the random draw happens to be ΔW=0.05\Delta W = 0.05 (a genuine, if slightly large, one-step normal draw with standard deviation 0.01=0.10\sqrt{0.01}=0.10). Euler: S=100+0+0.30×100×0.05=100+1.50=101.50S = 100 + 0 + 0.30\times100\times0.05 = 100 + 1.50 = 101.50, i.e. $101.50. Milstein: the correction term is 0.5×0.09×100×(0.0520.01)=4.5×(0.00250.01)=4.5×(0.0075)=0.033750.5\times0.09\times100\times(0.05^2-0.01) = 4.5\times(0.0025-0.01)=4.5\times(-0.0075)=-0.03375, so S=101.500.034=101.47S = 101.50 - 0.034 = 101.47, i.e. $101.47. A small difference on this one step — about 3 cents — but it's systematic, not noise, and it doesn't average away across steps the way random error does.

Worked example 2: comparing to the exact answer. For geometric Brownian motion the exact update is known in closed form: St+Δt=Stexp[(μ12σ2)Δt+σΔW]S_{t+\Delta t} = S_t \exp\left[(\mu-\tfrac12\sigma^2)\Delta t + \sigma \Delta W\right]. With the same numbers: exponent =(00.045)×0.01+0.30×0.05=0.00045+0.015=0.01455= (0-0.045)\times0.01 + 0.30\times0.05 = -0.00045+0.015=0.01455, so S=100×e0.01455=100×1.01466=101.47S=100\times e^{0.01455}=100\times1.01466=101.47, i.e. $101.47. Milstein's $101.47 matches the exact answer to the cent; Euler's $101.50 is off by three cents on a single step — and that Euler bias compounds and grows (though it still shrinks toward zero as Δt0\Delta t\to0) across thousands of simulated paths and steps in a way Milstein's does not, at the same order.

Euler: straight stride Milstein: curve-corrected
Both start from the same point with the same random shock. Euler's straight stride lands slightly off the true curved path; Milstein's correction bends the stride to track it.

Path explorer
13936time →
end (bold path) 87.88spread of ends 70.766 independent paths, same settings

Shrink the step size mentally as you look at a simulated path: Euler's error shrinks too, but more slowly (order Δt\sqrt{\Delta t} in the strong sense) than Milstein's (order Δt\Delta t) — Milstein needs far fewer steps for the same accuracy whenever volatility depends on the price.

What this means in practice

For plain geometric Brownian motion, most desks just use the exact lognormal update above and skip discretisation error entirely. Milstein earns its keep on models where no exact update exists but volatility still depends on the state — local volatility models, CIR-type variance processes in Heston — where its extra term meaningfully reduces the number of steps needed for Monte Carlo Option Pricing to converge to a given accuracy.

The Milstein correction term only exists, and only helps, when volatility is a function of the state (as in σ(St)\sigma(S_t)). If volatility is constant, the correction term is identically zero and Euler-Maruyama is already exact — adding Milstein's machinery there is wasted complexity, not extra accuracy.

Euler-Maruyama takes a straight step using the volatility at the start of the interval; Milstein adds one extra term correcting for how that volatility itself changes as the path moves within the step — a correction that matters exactly when, and only when, volatility depends on the underlying state.

Related concepts

Practice in interviews

Further reading

  • Kloeden & Platen, Numerical Solution of Stochastic Differential Equations
  • Glasserman, Monte Carlo Methods in Financial Engineering (Ch. 6)
ShareTwitterLinkedIn