Take five market quotes for one-year options. Check them: every butterfly you can build from them costs money, so the quotes are arbitrage-free. Fit a cubic spline through the implied volatilities, which is what most desks and most textbooks do.

The resulting surface contains a butterfly that costs minus one cent. A portfolio that can never pay out less than zero, and you get paid to own it.

Change one argument in the spline call — the boundary condition, which nobody sets and almost nobody thinks about — and the arbitrage disappears entirely. Same quotes, same interpolation family, same code.

The two conditions a surface has to satisfy

A set of European call prices is free of static arbitrage if two things hold.

Butterfly, or convexity in strike. The price must be convex in K:

    \[\frac{\partial^2 C}{\partial K^2} \geq 0\]

This is not an abstract regularity condition. By Breeden-Litzenberger, that second derivative is the risk-neutral density of the terminal price. A violation is a negative probability. The tradeable form is the butterfly: buy one call at K - h, sell two at K, buy one at K + h. The payoff is a tent, never negative. So the price must never be negative either.

Calendar, or monotonicity in maturity. Total implied variance must not decrease as maturity extends:

    \[w(K,T) = \sigma_{\mathrm{imp}}^2(K,T) \cdot T, \qquad \frac{\partial w}{\partial T} \geq 0\]

Note what this is not. It is not a condition on implied volatility. Volatility is free to fall with maturity — that is a perfectly normal term structure. What may not fall is \sigma^2 T.

The experiment

Spot at 100, one year, rates and dividends at zero to keep the arithmetic clean. Five quoted strikes with a textbook equity skew: steep downside, flattening upside.

Strike 80 90 100 110 120
Implied vol 30.0% 25.0% 20.0% 18.5% 19.0%

First, confirm the inputs are clean. Price the three butterflies you can build from the quoted strikes alone, using only the quoted vols:

Butterfly centred at Price
K = 90 +0.9558
K = 100 +3.0804
K = 110 +2.3531

All strictly positive. The market data is arbitrage-free. Whatever happens next is not the market’s fault.

Now fit a cubic spline through the five volatilities, evaluate it on a fine grid, convert to call prices through Black-Scholes, and take the second difference to recover the density.

from scipy.interpolate import CubicSpline

cs   = CubicSpline(Kq, volq)          # default bc_type = 'not-a-knot'
C    = bs_call(Kg, cs(Kg))
dens = (C[2:] - 2*C[1:-1] + C[:-2]) / dK**2

The density is negative for K between 80.00 and 85.59 — 14% of the quoted range — reaching a minimum of -0.00503. The tradeable consequence, a butterfly centred at 85 with five-point wings priced off the interpolated surface:

Strike 80 85 90
Interpolated vol 30.00% 27.80% 25.00%

Price of the structure: -0.01083.

Those three volatilities look entirely reasonable. 27.80% sits neatly between its neighbours, the smile through them is smooth and monotone, and nothing on a chart would draw your eye. The surface is nonetheless telling you that an instrument with a non-negative payoff has a negative price.

The boundary condition decides

Here is the part worth remembering. SciPy’s CubicSpline defaults to bc_type='not-a-knot'. Run the identical calculation with bc_type='natural':

Boundary condition Minimum density Negative region
not-a-knot (the default) -0.00503 K \in [80.00, 85.59]
natural none —

Same five quotes. Same spline family. Same degree. The presence or absence of arbitrage in the surface is determined by a keyword argument that is left at its default in essentially every implementation I have ever read.

The reason is mechanical. Not-a-knot forces the third derivative to be continuous across the second and penultimate knots, which gives the spline more freedom near the edges and lets it overshoot. Natural sets the second derivative to zero at the ends, which damps it. Neither condition knows anything about option pricing, and neither was designed to preserve convexity of a nonlinear transform of the interpolated quantity. They just happen to differ, and one of them happens to break.

Why interpolating in volatility space cannot be safe

The underlying problem is a category error that is easy to miss.

The no-arbitrage conditions are conditions on prices. Convexity in strike, monotonicity in maturity. The object being interpolated is implied volatility, and the map from implied volatility to price is Black-Scholes — nonlinear in K, and nonlinear in a way that interacts with the slope and curvature of the smile.

A smooth, well-behaved function of K in volatility space is not a convex function of K in price space. There is no theorem connecting the two, and the example above is a counterexample to the hope that there might be in practice. Smoothness of the smile is not evidence of anything. You cannot inspect a vol surface visually and conclude it is arbitrage-free.

This also means the problem does not go away by using a nicer interpolator. Monotone cubic interpolation, Akima splines and the rest all enforce properties of the interpolated function, which is the wrong function.

The calendar version, which is worse because it looks normal

Suppose one-month options trade at 30% and three-month options at 20%. Falling term structure, entirely ordinary, nobody raises an eyebrow.

    \[w_{1m} = 0.30^2 \times \frac{1}{12} = 0.00750, \qquad w_{3m} = 0.20^2 \times 0.25 = 0.01000\]

Increasing, so this is fine. Now suppose the three-month quote is 16% instead:

    \[w_{3m} = 0.16^2 \times 0.25 = 0.00640 < 0.00750\]

Arbitrage. And the only thing that changed is a number on a screen that still looks like a perfectly sensible falling term structure.

The constraint in closed form is \sigma_{3m} \geq \sigma_{1m}\sqrt{T_1/T_2}. With a one-month vol of 30%, the three-month vol may not fall below 17.32%. Anything under that is free money regardless of how natural the shape looks.

This bites hardest around earnings and scheduled events, where short-dated volatility spikes and the front month can easily sit far above the back. The spike is real; the constraint still applies.

What it breaks downstream

The one-cent butterfly is not a trading opportunity. It is smaller than any realistic bid-ask spread, and it sits at the edge of the quoted range where you have the least information in the first place. If the article stopped here it would be a curiosity.

It matters because the surface is an input to other things, and those things fail hard rather than gracefully.

Dupire local volatility. The density sits in the denominator of Dupire’s formula. Where the density is negative, the local variance is negative, and the implementation takes the square root of a negative number. Depending on the language you get a nan that propagates silently through the grid, or a complex number, or an exception two function calls away from the actual cause. This is the identical failure mode to a CIR simulation taking the square root of a negative rate, and it has the identical root cause: a quantity that is positive by construction in the mathematics and not in the implementation.

Monte Carlo from the implied density. Any method that samples the terminal distribution extracted from the surface — model-free pricing of exotics, scenario generation, VaR from implied distributions — is sampling from something that is not a distribution.

Calibration. A stochastic volatility or local-stochastic volatility model calibrated to an arbitrageable surface is being asked to fit something no arbitrage-free model can produce. The optimiser will not tell you that. It will return a parameter set with a mediocre fit, and the mediocrity will be blamed on the model.

What to do instead

Interpolate in total variance, not in volatility. Work with w = \sigma^2 T against log-moneyness. The no-arbitrage conditions are stated in those coordinates, so at least you are constraining the right object. Linear interpolation in w along a strike automatically preserves the calendar condition.

Use a parametrisation with known conditions. SVI and SSVI exist for this reason, and the arbitrage conditions on their parameters are explicit. Worth being precise, though: fitting SVI does not make a surface arbitrage-free by itself. SVI slices can and do admit butterfly arbitrage, and the parameter restrictions have to be imposed deliberately.

And test the density. This is the part that costs nothing. Whatever interpolation you use, evaluate it on a fine grid, take the second difference of the price, and assert it is non-negative. Five lines. It turns a silent corruption that surfaces three systems downstream into a failure at the point of construction.

The honest caveats

The negative region here sits at the lower edge of the quoted range, and edges are where splines are least trustworthy and where you have least data. That is a fair objection to the specific example — and it is also precisely where the deep out-of-the-money wings live, which is where the tail risk is and where a local vol surface most needs to be well-behaved.

The magnitude is small. One cent on a structure with a maximum payoff of five. In a world with bid-ask spreads this is not a trade, and I am not claiming it is. The claim is narrower and, I think, more useful: the surface encodes a negative probability, and negative probabilities break the machinery that consumes them.

And this is a single parameter set. Different quotes, different strike spacing and different spline choices will move the boundary around, and plenty of reasonable configurations produce no violation at all. The structural point survives all of it: no-arbitrage is a condition on prices, interpolation is being done on volatilities, and nothing connects the two. Which configurations happen to be safe is an empirical question you have to answer by testing, every time, rather than by looking at the chart.


The same failure mode — a quantity that cannot be negative in the mathematics going negative in the implementation — appears in CIR simulation, where 88% of paths cross a boundary the continuous process never reaches.


Volatility surfaces, local volatility and the arbitrage conditions a calibration has to respect are built up from first principles in the course modules.


Get the Quant Reference Card — four pages covering stochastic calculus, measure change, the models you’ll meet, discretisation, rates, credit and XVA. Free.