Quant Memo
Advanced

The Milstein Scheme

A refinement of the Euler-Maruyama method for simulating stochastic differential equations that adds a correction term for how the noise's own size changes with the state, giving noticeably more accurate simulated paths at almost no extra cost.

Prerequisites: The Euler-Maruyama Scheme, Itô's Lemma

The Euler-Maruyama scheme simulates a stochastic differential equation by taking small time steps and, at each step, adding a drift term and a noise term scaled by the current volatility — treating the volatility as if it stays constant across that one small step. But if volatility itself depends on the asset price (as it does in geometric Brownian motion and almost every realistic model), that approximation quietly loses accuracy: the noise term should really reflect how volatility is also moving during the step, not just its value at the start. The Milstein scheme adds exactly one extra term to correct for this, using a piece of Itô calculus that Euler-Maruyama leaves out.

An analogy: predicting a hiker's position on shifting terrain

Imagine forecasting a hiker's position after a step where each stride's length itself depends on the ground underfoot, and the ground's steepness is changing as the hiker moves. A naive forecast uses the steepness at the start of the stride to size the whole stride. A better forecast accounts for the fact that the steepness itself is drifting slightly as the stride happens, adding a small correction proportional to how fast the steepness changes with position. That correction is exactly what the Milstein scheme adds to the plain Euler forecast, using the derivative of volatility with respect to the asset price.

The scheme, one symbol at a time

For an SDE dXt=μ(Xt)dt+σ(Xt)dWtdX_t = \mu(X_t)\,dt + \sigma(X_t)\,dW_t, where μ\mu is the drift, σ\sigma is the volatility (which can depend on XtX_t), and dWtdW_t is a Brownian increment, the Euler-Maruyama update over a step of size Δt\Delta t is Xt+ΔtXt+μ(Xt)Δt+σ(Xt)ΔWtX_{t+\Delta t} \approx X_t + \mu(X_t)\Delta t + \sigma(X_t)\Delta W_t, where ΔWt\Delta W_t is a normal random draw with variance Δt\Delta t. The Milstein scheme adds one term:

Xt+ΔtXt+μ(Xt)Δt+σ(Xt)ΔWt+12σ(Xt)σ(Xt)[(ΔWt)2Δt],X_{t+\Delta t} \approx X_t + \mu(X_t)\Delta t + \sigma(X_t)\Delta W_t + \tfrac{1}{2}\sigma(X_t)\sigma'(X_t)\left[(\Delta W_t)^2 - \Delta t\right],

where σ(Xt)\sigma'(X_t) is the derivative of the volatility function with respect to the state. In plain English: the extra piece corrects for the fact that volatility isn't really constant across the step — it captures, to leading order, how the size of the random kick itself is affected by where the state ends up moving during the very step being simulated. This correction comes directly out of Itô's lemma: it's the same 12σ2\frac{1}{2}\sigma^2 second-derivative adjustment that appears whenever Itô calculus is applied, here applied to σ\sigma itself.

Worked example 1: one step of GBM by hand

Geometric Brownian motion has μ(X)=rX\mu(X) = rX, σ(X)=σ0X\sigma(X) = \sigma_0 X (so σ(X)=σ0\sigma'(X) = \sigma_0). Take X0=100X_0 = 100, r=0.05r = 0.05, σ0=0.2\sigma_0 = 0.2, Δt=0.01\Delta t = 0.01, and a drawn Brownian increment ΔW=0.05\Delta W = 0.05. Euler-Maruyama: XΔt100+(0.05)(100)(0.01)+(0.2)(100)(0.05)=100+0.05+1.0=101.05X_{\Delta t} \approx 100 + (0.05)(100)(0.01) + (0.2)(100)(0.05) = 100 + 0.05 + 1.0 = 101.05. Milstein adds 12(0.2×100)(0.2)[(0.05)20.01]=12(20)(0.2)(0.00250.01)=2×(0.0075)=0.015\tfrac{1}{2}(0.2 \times 100)(0.2)\left[(0.05)^2 - 0.01\right] = \tfrac{1}{2}(20)(0.2)(0.0025 - 0.01) = 2 \times (-0.0075) = -0.015. So the Milstein estimate is 101.050.015=101.035101.05 - 0.015 = 101.035 — a small correction here because the step is small, but the correction term does not shrink as fast as the leading terms do, which is exactly why it improves long-run accuracy.

Worked example 2: why the correction matters over many steps

Simulating the same GBM path over 100 steps, Euler-Maruyama's local error at each step is of order Δt\Delta t but accumulates a global error of order Δt\sqrt{\Delta t} in the strong sense (path-by-path accuracy). Milstein's correction improves the strong global error to order Δt\Delta t — for Δt=0.01\Delta t = 0.01, that's roughly a 0.01/0.01=10×\sqrt{0.01}/0.01 = 10\times improvement in path-tracking accuracy for the same number of steps. For pricing instruments that depend on the whole simulated path (barrier options, path-dependent payoffs) rather than just the terminal value, this directly translates into needing far fewer time steps to hit a given accuracy target.

Path explorer
13055time →
end (bold path) 100.38spread of ends 58.966 independent paths, same settings

Compare paths generated at coarse versus fine time steps above — Milstein's correction is precisely what keeps a coarse-step path close to what a very fine-step path would have produced, for models where volatility depends on the state.

time within one coarse step true fine-step path Euler-Maruyama Milstein (closer to true path)
Both schemes start at the same point and use the same random draw, but Milstein's extra correction term keeps its single-step estimate closer to the true fine-grained path than Euler-Maruyama's.

What this means in practice

The Milstein scheme is used whenever path-level accuracy matters and volatility is state-dependent — barrier and lookback option pricing, local volatility model simulation, and any setting where Euler-Maruyama's cruder approximation would require impractically many time steps to reach acceptable accuracy. When σ\sigma is constant (as in arithmetic Brownian motion with constant volatility), σ=0\sigma'=0 and the Milstein correction vanishes entirely — Euler-Maruyama is already exact in that special case, which is a useful sanity check that the extra term is implemented correctly.

The Milstein scheme improves on Euler-Maruyama by adding a single correction term, 12σσ[(ΔW)2Δt]\tfrac{1}{2}\sigma\sigma'[(\Delta W)^2 - \Delta t], that accounts for volatility changing with the state during a simulation step — this raises strong convergence from order Δt\sqrt{\Delta t} to order Δt\Delta t at almost no extra computational cost.

A frequent implementation mistake is computing σ(Xt)\sigma'(X_t), the derivative of volatility with respect to the state, incorrectly or forgetting it entirely and calling the result "Milstein" anyway — for state-independent volatility this happens to cause no visible error, which can mask the bug until the scheme is applied to a model (like local volatility) where σ\sigma' genuinely matters, at which point the simulated paths quietly drift from the true dynamics without any error message.

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