Advanced Theory Overview

This page documents the full pipeline and implementation that OIPD uses.

1. End-to-end pipeline

This represents a non-exhaustive, step-by-step pipeline to fit a volatility surface, and subsequently convert it to probability distribution. We’ve documentated the major steps below, as well as explaining OIPD’s implementation.

OIPD full pipeline

2. OIPD vs open-source and commercial volatility fitting libraries

OIPD is an end-to-end opinionated volatility surface fitting pipeline, which handles the data plumbing and cleaning, smile/surface fitting, and probability conversion all in one interface.

Other open-source packages, such as QuantLib, provides very strong components for individual stages of the workflow (for example, IV solvers in step 5 and smile/surface fitters in step 6), but it does not natively wire those stages into a single end-to-end pipeline.

OIPD is (or at least aims to be) conceptually closer to commercial libraries like Vola Dynamics than to low-level libraries like QuantLib: it offers an integrated, configurable pipeline for fitting and probability extraction.

3. Validating OIPD’s SVI fitter

To benchmark OIPD’s SVI fitter, we compare it against a trusted reference: QuantLib’s SVI fitter (SviInterpolatedSmileSection). We keep OIPD’s preprocessing and data-cleaning pipeline fixed, and only swap the SVI calibration step.

The fitted smiles below are shown side by side using the same AAPL dataset and expiry.

OIPD SVI fitted smile

OIPD SVI fitter

QuantLib SVI fitted smile

QuantLib SVI fitter (OIPD preprocessing + QuantLib calibration)

To compare a few metrics:

  • full pipeline run time
  • vega-weighted RMSE
  • butterfly arbitrage checks, using 2 checks to detect arbitrage: (1) min(g(k)) and (2) negative density

We find that QuantLib’s SVI fitter is significant faster as it is written in C++, while OIPD ensures no-arbitrage.

Metric OIPD SVI fitter QuantLib SVI fitter
Full pipeline runtime (mean seconds, 10 runs) 1.1089 0.3647
SVI calibration runtime (mean seconds, 10 runs) 0.6970 0.000374
Vega-weighted RMSE (IV) 0.01057 0.00447
min(g(k)) butterfly check +0.0820 -0.0383
Share of grid with g(k) < 0 0.00% 42.26%
Negative RND grid points (native 200-point RND grid) 0 14

For arbitrage checks, higher min(g(k)) is better, and any negative value is a warning for butterfly arbitrage. Likewise, lower values are better for both Share of grid with g(k) < 0 and Negative RND grid points; 0 is the clean no-violation outcome on the tested grid.


This site uses Just the Docs, a documentation theme for Jekyll.