Calibration of a local-volatility surface on Euro Stoxx 50 (SX5E) option quotes using the fully-implicit one-step PDE scheme of Andreasen & Huge (2010), plus extrapolation of the surface to new maturities.
Submitted as Assignment 3 of Advanced Derivatives (Prof. Elena Perazzi, EPFL — Fall 2025).
Standard Dupire-style local-volatility calibration differentiates the implied-volatility surface twice in strike and once in maturity, which amplifies any market noise. Andreasen & Huge (2010) sidestep this by propagating call prices forward one maturity at a time with a fully-implicit finite-difference step, and fitting a piecewise-constant local-volatility parameter per maturity layer by least squares. The result is a smooth, arbitrage-friendly surface obtained from a sequence of tiny convex problems instead of a single ill-posed differentiation.
This project implements the full pipeline:
- Read the quoted IV grid and convert to Black–Scholes call prices on the
$(K, T)$ nodes. - For each maturity step, calibrate the piecewise-constant parameter
$\theta(K)$ by least squares against quoted prices and propagate with the implicit AH step. - Invert Black–Scholes at every node to recover the calibrated implied-volatility surface
$\hat\sigma(K, T)$ . -
Extrapolate the surface to
$T = 1$ and$T = 1.5$ by propagating from the nearest quoted expiry with no refit. - Visualise the resulting price and IV surfaces and the strike cross-sections.
Spot mask_valid = (implied_vols > 0) is kept throughout to avoid polluting the least-squares objective with missing data.
At each quoted node, IVs are converted to Black–Scholes prices
and the
Between two consecutive expiries
where
the interior rows of
with identity boundary rows. The linear system is solved with a single tridiagonal pass.
For each maturity step,
with initial guess
Once the price grid is built, Black–Scholes is inverted at each node by Nelder–Mead from a seed of
with
For target maturities
The interpolated call-price surface is monotone in maturity and decreasing in strike, as expected. The implied-volatility surface reproduces the pronounced left skew at short maturities and flattens for longer tenors — the SX5E equity-index pattern.
The price surface remains monotone in
The shortest maturity has the largest curvature and the steepest left-skew, with smiles flattening as
All figures are reproduced in andreasen_huge_report.pdf and rendered inline in the notebook.
- Tridiagonal solve. Each AH step amounts to one banded linear solve. The implementation embeds the band in a sparse/dense system; for a production-grade implementation, a dedicated Thomas algorithm would be the next step.
-
Per-layer least squares. Calibration is local in maturity, which keeps each subproblem small and convex-friendly. Calendar arbitrage is structurally avoided by the forward-only propagation: every
$C_{j+1}$ is derived from$C_j$ through a positive monotone operator. - Unconstrained IV inversion with absolute value. A simple guard rather than a full constrained optimiser, justified by the small grid size. A constrained Brent or bracketed bisection would be more robust at scale.
- No hard no-arbitrage constraints beyond the implicit scheme itself and visual checks.
- The IV inversion uses unconstrained Nelder–Mead; bracketed bisection would be safer.
-
Possible improvements: (i) warm-starting
$v$ from the previous tenor, (ii) adding light Tikhonov regularisation across$K$ to smooth the local-vol profile, (iii) testing alternative seeds/optimisers to quantify sensitivity.
.
├── andreasen_huge_calibration.ipynb # Jupyter notebook: full pipeline
├── andreasen_huge_report.pdf # Method, figures and discussion
├── requirements.txt # Python dependencies
├── .gitignore
└── README.md
git clone https://github.com/Theo2co/local-volatility-andreasen-huge.git
cd local-volatility-andreasen-huge
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
jupyter lab # then open andreasen_huge_calibration.ipynbRequires Python 3.10+.
Andreasen, J. and Huge, B. (2010). Volatility Interpolation. Danske Markets working paper. SSRN: https://ssrn.com/abstract=1694972
Group work submitted for Advanced Derivatives at EPFL:
- Théodore Decaux — @Theo2co (repository maintainer)
- Elias Bourgon
- Jason Santangelo
Released under the MIT License.