Quant Memo
Advanced

The Dupire Equation

The grid of option prices already knows what volatility has to be at every price level and every future date. Dupire's formula pulls it out with a single division: how fast a call gains value when you push its expiry further out, divided by how sharply prices bend across strikes.

Prerequisites: Local Volatility and Dupire's Formula, Breeden-Litzenberger Formula, Implied Volatility Surface

A desk quotes hundreds of options on the same index: dozens of strikes at each of a dozen expiries. Every one of them implies a different Black-Scholes volatility, which is embarrassing, because Black-Scholes assumes there is only one. You cannot price a barrier option or a note off "the" volatility when the market is telling you thirty different numbers. What you want is a single model that spits out every one of those quotes correctly and can then be pointed at a product nobody quotes. Dupire's result is that such a model exists, that it is unique, and that you do not have to search for it — you can read it straight off the price grid with arithmetic.

Ink in a glass of water

Put a drop of ink in still water and it spreads. If the water is warm in one corner and cold in another, the drop spreads fast where it is warm and slowly where it is cold. Now flip the problem round. You are shown time-lapse photographs of the ink and asked to infer the temperature at each point. You can do it: look at one spot, measure how quickly the ink concentration there is changing, compare it to how sharply the concentration is peaked there, and the ratio tells you the local diffusion speed. Fast spreading with a gentle peak means hot water. Slow spreading with a sharp peak means cold water.

The option surface is exactly this photograph. The "ink" is the market's probability distribution for where the index will finish. It starts as a spike at today's price and spreads as the expiry gets further away. The distribution at each expiry is not something you have to guess — it is already in the option prices, by Breeden-Litzenberger. So you have the time-lapse. Dupire's formula is the "infer the temperature" step, and the temperature is local volatility.

The forward equation

Write C(K,T)C(K, T) for the market price today of a call struck at KK expiring at TT. Note the unusual arguments: normally you fix the option and vary the spot, but here you fix today and walk around the grid of contracts. Set interest rates and dividends to zero so the arithmetic stays clean. Dupire's forward equation says

CT  =  12σloc2(K,T)  K22CK2.\frac{\partial C}{\partial T} \;=\; \tfrac{1}{2}\,\sigma_{\mathrm{loc}}^{2}(K, T)\; K^{2}\, \frac{\partial^{2} C}{\partial K^{2}} .

The pieces, one at a time. C/T\partial C / \partial T is the calendar slope: how many cents the call gains if you keep the strike fixed and push its expiry one year further out. 2C/K2\partial^{2} C / \partial K^{2} is the strike curvature: how sharply call prices bend as you walk across strikes, which is what a butterfly spread costs. And σloc(K,T)\sigma_{\mathrm{loc}}(K, T) is the unknown — the local volatility, meaning the volatility the model is instructed to use at the moment the index is sitting at level KK on date TT, and nowhere else.

In plain English: the rate at which a call gets more valuable with extra time equals half the local variance times the price level squared times the butterfly cost. It is the ink statement — spreading speed equals diffusivity times peakedness.

Rearranged, it is a recipe rather than an equation:

σloc2(K,T)  =  2C/TK22C/K2.\sigma_{\mathrm{loc}}^{2}(K, T) \;=\; \frac{2\,\partial C / \partial T}{K^{2}\, \partial^{2} C / \partial K^{2}} .

In plain English: to find the volatility the model must use at price level KK on date TT, divide the calendar slope by the butterfly curvature at that same point, and double it. Every quantity on the right is observable. Nothing is fitted.

Dupire turns calibration into division. Implied volatility is an average over all the paths that reach a strike; local volatility is the instantaneous number at one point on the grid. The forward equation is the machine that converts averages back into instantaneous values.

this gap per year is the calendar slope near expiry later expiry K index level spreading speed here ÷ peakedness here = local variance here
The market gives you the whole time-lapse of the distribution. At any single point you can measure how fast probability is draining away from the peak and toward that point, and how sharply the distribution is curved there. Their ratio is the only volatility consistent with both pictures.

Worked example 1: a flat surface must give back a flat answer

The sanity check. If the market quotes the same 20 percent volatility at every strike and expiry, Dupire's formula had better return 20 percent everywhere. Take an index at 100, zero rates, and all options priced with Black-Scholes at 20 percent volatility. We will compute the local volatility at K=100K = 100, T=1T = 1.

  1. The calendar slope. The one-year, 100-strike call is worth 7.9656. The nine-month is worth 6.9013 and the fifteen-month is worth 8.9021. So the slope is (8.90216.9013)/0.5=2.0008/0.5=4.0016(8.9021 - 6.9013) / 0.5 = 2.0008 / 0.5 = 4.0016 per year.
  2. The strike curvature. From the same surface, the 90-strike one-year call is 13.5891 and the 110-strike is 4.2920. The 90 / 100 / 110 butterfly costs 13.58912(7.9656)+4.2920=1.949913.5891 - 2(7.9656) + 4.2920 = 1.9499. Divide by the strike gap squared: 1.9499/102=0.0194991.9499 / 10^{2} = 0.019499.
  3. Divide. σloc2=2(4.0016)/(1002×0.019499)=8.0032/194.99=0.04104\sigma^{2}_{\mathrm{loc}} = 2(4.0016) \,/\, (100^{2} \times 0.019499) = 8.0032 / 194.99 = 0.04104, so σloc=20.26\sigma_{\mathrm{loc}} = 20.26 percent.

Twenty percent in, twenty-and-a-quarter percent out. The extra quarter point is not a flaw in Dupire — it is the coarse grid. Using exact derivatives instead of these wide finite differences gives C/T=3.9695\partial C/\partial T = 3.9695 and 2C/K2=0.019848\partial^{2}C/\partial K^{2} = 0.019848, and 2(3.9695)/(104×0.019848)=0.0400002(3.9695)/(10^{4} \times 0.019848) = 0.040000 on the nose. Remember that quarter point: it is the whole practical problem with the formula.

Worked example 2: skew doubles on the way in

Now a real surface. One year out, with the index at 100, suppose the market quotes 22 percent at strike 95, 21 percent at 100, and 20 percent at 105 — a mild downside skew of 0.2 volatility points per 1 percent of strike.

Implied volatility at a strike is roughly the average of the local volatilities the index passes through on its way there. Going from 100 to 95 the index visits levels between the two, so to a first approximation

σimp(K)    12[σloc(100)+σloc(K)].\sigma_{\mathrm{imp}}(K) \;\approx\; \tfrac{1}{2}\left[\sigma_{\mathrm{loc}}(100) + \sigma_{\mathrm{loc}}(K)\right] .

In plain English: the quoted volatility for a strike sits halfway between the local volatility here and the local volatility there. Turn it round to solve for the local values:

  • At the money, σloc(100)=21\sigma_{\mathrm{loc}}(100) = 21 percent, unchanged.
  • At 95: σloc(95)=2(22)21=23\sigma_{\mathrm{loc}}(95) = 2(22) - 21 = 23 percent.
  • At 105: σloc(105)=2(20)21=19\sigma_{\mathrm{loc}}(105) = 2(20) - 21 = 19 percent.

Check it back: 12(21+23)=22\tfrac{1}{2}(21 + 23) = 22 and 12(21+19)=20\tfrac{1}{2}(21 + 19) = 20. Both quotes reproduced.

The implied curve runs 22 / 21 / 20. The local curve runs 23 / 21 / 19 — exactly twice as steep. An average is always gentler than the thing it averages, so unwinding the average has to steepen it. This is the "rule of two", and it is the single most useful fact about local volatility.

It also predicts behaviour. Local volatility is pinned to the index level, so if the index falls from 100 to 95, the model says instantaneous volatility becomes 23 percent — the at-the-money quote should jump 2 points for a 5 percent fall, twice the skew. Desks measure that response and get roughly 1.5 times the skew, not 2 (Skew Stickiness Ratio). Local volatility fits every price and still overreacts.

Drag the skew slider below. Every column you steepen makes the local volatilities behind it steepen twice as much, which is why a surface that looks tame can imply a violent local volatility function.

Volatility surface
22212020191918222221212120202322222221212123232322222222242323232323238088951001051121201m3m6m12m24mstrike →
ATM 3m 21.0%90% put 3m 21.8%skew 1.4 pts

What this means in practice

Dupire is the calibration layer under most exotics pricing. A desk fits a smooth surface first — usually SVI per expiry — then applies the formula on a grid, then feeds the resulting σloc(S,t)\sigma_{\mathrm{loc}}(S, t) to a PDE solver or Monte Carlo engine that prices the barrier, the cliquet or the note. Because the model reprices every vanilla exactly, the exotic's price is at least consistent with what the desk can trade.

The trouble is the division. The denominator is a butterfly price, which is small, and out in the wings it is very small; dividing a noisy numerator by a near-zero denominator produces local volatilities of 300 percent or negative variances. That is why nobody applies Dupire to raw quotes. You fit an arbitrage-free surface first, precisely so that the butterfly stays positive and the calendar slope stays positive everywhere (Arbitrage-Free Volatility Surfaces).

And even done perfectly, the "rule of two" problem remains: right prices, wrong dynamics. That gap is what local-stochastic volatility exists to close.

Local volatility is not a forecast of future volatility, and σloc(80,1)\sigma_{\mathrm{loc}}(80, 1) is not "what volatility will be if the index hits 80". It is a bookkeeping device: the number the model must use at that node so that today's vanilla prices come out right. The related slip is comparing local and implied volatility as if they were the same quantity in different units. They are not — one is instantaneous and one is an average, which is exactly why they differ by a factor of two in slope.

Practice

  1. A surface is quoted at a flat 25 percent. Without computing anything, what does Dupire's formula return at every node, and why?
  2. One-year implied volatilities are 24 percent at strike 90 and 20 percent at strike 100, with the index at 100. Estimate the local volatility at 90.
  3. The butterfly at a deep out-of-the-money strike costs 0.0004 and the calendar slope there is measured as 0.02 with an uncertainty of 0.01. What is the range of local volatilities implied, and what does that tell you about wing extrapolation?

Answers. (1) 25 percent everywhere — a flat surface is the Black-Scholes surface, and Dupire is exact for it. (2) 2(24)20=282(24) - 20 = 28 percent. (3) σ2\sigma^{2} ranges over 2(0.01 to 0.03)/(902×0.0004)2(0.01 \text{ to } 0.03)/(90^{2} \times 0.0004), roughly 0.0062 to 0.0185, so volatility between about 8 and 14 percent — a factor-of-two uncertainty from one basis point of price noise. Wings must be parameterised, never differentiated.

Key terms

  • Local volatility σloc(S,t)\sigma_{\mathrm{loc}}(S, t) — the volatility the model uses at one price level on one date.
  • Calendar slope C/T\partial C / \partial T — value gained per extra year of life, at a fixed strike.
  • Strike curvature 2C/K2\partial^{2} C / \partial K^{2} — the butterfly cost, and by Breeden-Litzenberger the risk-neutral density.
  • Forward equation — an equation in strike and expiry rather than spot and time; it prices all contracts at once from one solve.
  • Rule of two — near the money, local volatility skew is about twice implied volatility skew.

Related concepts

Practice in interviews

Further reading

  • Dupire (1994), Pricing with a Smile
  • Gatheral, The Volatility Surface (Ch. 1-2)
  • Derman & Kani (1994), The Volatility Smile and Its Implied Tree
ShareTwitterLinkedIn