DirectSVI

Overview

A closed-form SVI calibration method (Schadner, forthcoming) that linearises the SVI equation by rewriting it as a conic section (hyperbola) in \((k, w)\) space. No iterative optimisation is needed, making this the fastest calibration method in the library.

Model

The SVI curve is expressed as a conic:

\[z_0 k^2 + z_1 w^2 + z_2 kw + z_3 k + z_4 w + z_5 = 0\]

The 6 conic coefficients \(z\) are found by solving a quadratically constrained eigenvalue problem (hyperbola constraint \(z_2^2 - 4z_0 z_1 > 0\)):

  1. Build design matrices \(D_2 = [k^2,\; w^2]\) and \(D_1 = [kw,\; k,\; w,\; 1]\)

  2. Compute scatter matrices \(S_{22}, S_{21}, S_{11}\)

  3. Solve \(M\mathbf{a}_2 = \lambda\, C_1\mathbf{a}_2\) where \(M = S_{22} - S_{21}S_{11}^{-1}S_{21}^\top\) and \(C_1 = \begin{pmatrix}0 & -2\\-2 & 0\end{pmatrix}\)

  4. Select the eigenvector for the smallest positive eigenvalue; recover remaining coefficients via \(\mathbf{a}_1 = -S_{11}^{-1}S_{21}^\top\mathbf{a}_2\)

Evaluation solves the conic for \(w\) given \(k\) via the quadratic formula:

\[w = \frac{-(z_2 k + z_4) + \sqrt{(z_2 k + z_4)^2 - 4z_1(z_0 k^2 + z_3 k + z_5)}}{2 z_1}\]

Parameters

Parameter

Meaning

\(z_0\) – \(z_5\)

Conic section coefficients (normalised so \(z_1 = 1\))

Usage

from pysvi import get_model, calibrate_slice

model = get_model("dsvi")  # or "directsvi"
params = calibrate_slice(df_slice, model)
# params: {'z0', 'z1', 'z2', 'z3', 'z4', 'z5', 'forward'}

Arbitrage behaviour

DirectSVI does not support penalty-based arbitrage enforcement (NO_BUTTERFLY / NO_CALENDAR) — the fit is closed-form, so there is no objective to penalise. Only ArbitrageFreedom.QUASI is meaningful; other flags are ignored with a warning.

References

  • Schadner, W. “Direct Fit for SVI Implied Volatilities”, Journal of Derivatives (forthcoming). See also wol-fi/directSVI.