Skip to content

Dupire Local Volatility: From an Option Surface to a Diffusion

Audit Dupire local volatility across price, forward, and total-variance coordinates with no-arbitrage fitting, derivative stability, repricing, and dynamic-model controls.

Updated

For educational purposes only; not investment advice. Investing may result in loss.

Direct answer

Dupire local volatility is a deterministic instantaneous diffusion coefficient σ_loc(S,t) inferred from a sufficiently smooth, arbitrage-free surface of European option prices. Under the chosen risk-neutral carry model, it constructs one diffusion whose one-time marginal distributions reproduce today’s vanilla prices across strikes and maturities.

It is a calibration result, not the implied volatility at the same strike, a forecast of realized volatility, or proof that the market follows one local-volatility path law. Exact vanilla repricing can coexist with wrong future smile dynamics, barrier prices, hedge results, and jump behavior.

Model, coordinates, and control process

  1. Lock the exact European payoff, underlying, settlement value, quote timestamp, currency, strike and maturity units, and valuation time. American early-exercise value and discrete dividend jumps require an explicit Europeanization or a different model.
  2. Build deterministic discount and carry inputs: D_d(T)=exp(−∫₀ᵀr(u)du), D_q(T)=exp(−∫₀ᵀq(u)du), and F(T)=S₀D_q(T)/D_d(T). Reconcile forwards with synchronized put-call parity rather than mixing stale stock, option, rate, or dividend observations.
  3. Clean bid and ask quotes, reject stale or crossed markets, and convert puts and calls consistently. Enforce vertical bounds, decreasing convex call prices, nonnegative density, and calendar consistency in one discount-forward coordinate before differentiating.
  4. Fit a smooth price or total-variance surface with declared interpolation and wing/time extrapolation. For time-zero discounted European calls C(K,T) and deterministic instantaneous r(T) and q(T), the price-coordinate formula is σ_loc²(K,T)=[C_T+(r(T)−q(T))K C_K+q(T)C]/[0.5K²C_KK], where C_T holds K fixed and C_KK=D_d(T)f_Q(K)≥0.
  5. Match the derivative to its coordinate. With k=K/F(T) and normalized call c(k,T)=C(kF(T),T)/(D_d(T)F(T)), σ_loc²(kF(T),T)=2c_T|k/(k²c_kk). With log-forward moneyness y=ln(K/F(T)) and total implied variance w(y,T)=σ_BS²(y,T)T, define g=(1−y w_y/(2w))²−(w_y²/4)(1/w+1/4)+w_yy/2 and use σ_loc²=w_T|y/g. Require w_T|y≥0 and g>0; fixed-K, fixed-k, and fixed-y derivatives are not interchangeable.
  6. Reject rather than silently floor negative or unstable local variance. Perturb quotes, forwards, dividends, knots, interpolation, grids, and boundaries; then reprice calibration and holdout options through forward density or backward PDE and Monte Carlo implementations.
  7. Compare barriers, other path-dependent claims, and hedge P/L under local volatility, stochastic volatility, and jump scenarios. Record quote vintage, filters, curves, surface parameters, derivative scheme, failed nodes, extrapolation, solver tolerances, and recalibration changes.

Four worked examples

  • A flat Black-Scholes surface recovers its input. Let S₀=K=100, T=0.5, r=4%, q=1%, and σ_BS=25%. The exact surface gives C=7.721552230288, C_K=−0.488716794830, C_KK=0.022120576997, and C_T=8.301615173889. The numerator is 6.912680311701 and the denominator is 110.602884987209, so σ_loc²=0.0625 and σ_loc=25%.
  • Second derivatives amplify tiny price errors. From the same flat surface, calls at strikes 99/100/101 are 8.221364125112/7.721552230288/7.243855394654. With spacing h=$1, the central estimate is C_KK≈0.022115059190, giving σ_loc≈25.0031186% with the other exact derivatives. Raising only the center call by $0.01 changes the estimate to C_KK≈0.002115059190 and σ_loc≈80.8494317%; raising it by $0.05 gives C_KK≈−0.077884940810 and σ_loc²≈−0.017751006138, which is invalid rather than a volatility forecast.
  • Forward normalization requires a fixed-k time derivative. Let D_d=0.98, F=102, k=1, c=0.08, c_T|k=0.032, and c_kk=3.20. Then C=7.9968, C_KK=0.030745098039, the price-coordinate numerator is 3.19872, and the denominator is 159.936. Both formulas give σ_loc²=0.020000000000 and σ_loc=14.1421356237%. A time derivative taken at fixed strike cannot be inserted as c_T|k without the coordinate-conversion term.
  • The total-variance denominator is an arbitrage diagnostic. At y=−0.1, let w=0.04, w_y=−0.10, w_yy=0.50, and w_T|y=0.02. Then g=0.9525, σ_loc²=0.020997375328, and σ_loc=14.4904711200%. If only w_yy changes to −1.50, then g=−0.0475 and the formula produces σ_loc²=−0.421052631579; the fitted surface/node must be rejected or repaired, not clipped and presented as calibrated.

Calibration checklist

  • American exercise value can contaminate a surface treated as European.
  • Discrete or uncertain dividends violate a smooth continuous-yield diffusion at event dates.
  • Rate curves, compounding, day counts, and maturity timestamps can be inconsistent.
  • Spot, strike, forward, log-moneyness, and premium-normalized coordinates can be mixed.
  • Quotes can be stale, asynchronous, crossed, or recorded at incompatible sizes.
  • Midpoints are not executable and can conceal wide or one-sided markets.
  • Put-call parity and inferred forwards can be polluted by borrow, dividends, or timing.
  • Vertical bounds and call monotonicity can fail before surface fitting.
  • Butterfly convexity and positive-density conditions can fail locally or in the wings.
  • Calendar conditions must be tested in consistent discount-forward coordinates.
  • Short maturities and sparse strikes make derivatives unstable.
  • Wing and long-maturity extrapolation can dominate exotic valuation.
  • Finite differences, splines, and automatic differentiation can amplify quote noise differently.
  • Near-zero density makes the local-variance denominator ill-conditioned.
  • A negative numerator or local variance signals inconsistent inputs, arbitrage, or numerics.
  • Silent clipping or flooring can hide a failed calibration and distort repricing.
  • PDE, density, Monte Carlo, grid, and boundary implementations can disagree.
  • Matching one-time marginals does not determine future smile or path dynamics.
  • Jumps, stochastic volatility, barriers, and discrete hedging create residual model risk.
  • Data vintage, filters, parameter versions, failed nodes, and recalibration need governance.

Common misconceptions

  • “Local volatility is implied volatility at the same strike.” They are different objects connected through the full surface.
  • “A smooth-looking surface must give stable local volatility.” Smoothness alone does not guarantee no arbitrage or well-conditioned derivatives.
  • “Exact vanilla repricing proves exotic prices and hedges are correct.” It validates static marginals, not dynamic truth.
  • “Negative local variance is market information.” It usually diagnoses inconsistent quotes, arbitrage, coordinates, interpolation, or numerics.
  • “Today’s surface uniquely predicts realized volatility or the true process.” Many dynamics can share the same one-time vanilla distributions.

Primary and authoritative sources

Navigation

Search the wiki...