Estimating Local Volatility from Option Prices with Dupire’s Formula
Summary
The document explains how Dupire’s formula relates local volatility to the time and strike derivatives of call prices, assuming no dividends. It walks through a small strike-and-maturity table to estimate those derivatives with finite differences and obtain a local volatility estimate. The example also corrects an arithmetic error in the numerator: the factor of two must multiply the whole parenthesized expression.
The response connects the formula to local-volatility dynamics and to the Black–Scholes pricing equation, describing the two as related equations viewed from different variables. It cautions that the estimate is instantaneous while the input prices are sparse and the derivative approximations are crude. In practice, prices are typically interpolated smoothly across strike and maturity—often by first filling the implied-volatility surface—before calculating the required derivatives. The example is educational rather than a robust calibration procedure, and the stated formula assumes zero dividends.
Key ideas
- Dupire’s formula derives local volatility from call-price derivatives across maturity and strike.
- The numerator’s factor of two applies to the entire sum inside the parentheses.
- The formula assumes zero dividends and a local-volatility process for the underlying.
- Finite differences on sparse option quotes give rough derivatives and can produce fragile estimates.
- Smooth interpolation across strike and maturity is generally needed before calculating local volatility.
Tags
Full text
# Calculating local volatility from option prices?
# Calculating local volatility from option prices?
I'm attempting to calculate local volatility given a set of option prices using $$ \sigma(T,K)=\sqrt{2\frac{\frac{\partial C}{\partial T}+rK\frac{\partial C}{\partial K}}{K^2\frac{\partial^2C}{\partial K^2}}}.$$
Let's say I'm given the following call strikes and maturities and prices:
```
Strike 1 Month 2 Month
10 0.50 0.75
11 0.35 0.50
12 0.25 0.35
```
Let's say we try to calcalate the 1 month 11 strike local volatility with a risk-free rate of $r=0.01$.
We can estimate theta, $\frac{\partial C}{\partial T}$, as 0.35/30(days) = 0.01.
Next, we have $\frac{\partial C}{\partial K}$ as the difference between the 10 and 11 strike: $\frac{0.50-0.35}{1} = 0.15$.
Next, we calculate $\frac{\partial^2 C}{\partial K^2}$ as the difference between the 12-11 call and the 11-10 call which calculates the rate of change of the call price by strike effectively: (0.50-0.35)-(0.35-0.25) = 0.05.
Then, we plug in as follows for the numerator: $2\cdot(0.01+0.01\cdot11\cdot0.15) = 0.053$. Then, for the denominator we have: $11^2\cdot0.05= 6.05$.
Then, if we divide and take the square root: we get $0.0935$, so a volatility of $9.35\%$.
Am I on the right track here? Most of the times you look up local volatility a lot of it is above my math ability, but I want to understand if I'm at least on the right track?
## Answer by ir7 (score 1, accepted)
https://quant.stackexchange.com/a/51482
One issue I see: $$2\cdot0.01+0.01\cdot11\cdot0.15 = 0.0365$$ must be replaced by
$$2\cdot \left(0.01+0.01\cdot11\cdot0.15\right) = 0.053$$
Edit: (Detailing my comments a bit) Dupire's equation, as you wrote it, is correct (assumes dividends are null):
$$ \frac{\partial C}{\partial T} = \frac{1}{2}\sigma^2 K^2\frac{\partial^2 C}{\partial K^2} -r K \frac{\partial C}{\partial K}, $$
where $\sigma = \sigma(S_t, t)$, that is, dependent on underlying and time, with underlying following the local volatility dynamics (aka generalized Black-Scholes dynamics):
$$ dS_t = rS_t dt +\sigma S_t dW.$$
A proof can be found here.
You can think of it as a 'dual' companion of Black-Scholes equation (usually uses $t$, not $T$, time to expiry, as variable):
$$ -\frac{\partial C}{\partial t} = \frac{1}{2}\sigma^2 S^2\frac{\partial^2 C}{\partial S^2} +r S \frac{\partial C}{\partial S} - rC.$$
Note that, if you assume $r=0$, we have:
$$ -\frac{\partial C}{\partial t} = \frac{1}{2}\sigma^2 S^2\frac{\partial^2 C}{\partial S^2}.$$
Edit 2: You are computing an instantaneous quantity from raw data using rough finite difference derivative approximations. Usually, one fills in the continuous space of calls parameterized by strike and time to expiry, $C(K,T)$, using smooth interpolations (more precisely, this 'filling' is first done in the BS-implied volatilty space), then gets first and second derivatives and the needed local volatility $\sigma(K,T)$.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.