← Charlie Yan

volsurf

2026 — Python · numpy · SVI

Repository ↗

The forward and discount of every expiry are read out of put-call parity, never from spot, which is 15 minutes stale against the option close and can sit 1.5% away. A vectorised Black inverter with an explicit information floor. One raw-SVI slice per expiry, fitted in total variance with Zeliade’s (m, σ) reduction as the initialiser and only the two conditions that are actually necessary.

Arbitrage checks that report, and don’t fix

Gatheral-Jacquier’s g(k) on the quoted k-range plus the analytic wing asymptotes. Calendar monotonicity between adjacent slices. A model-free within-bid/ask convexity count on the raw quotes. Every check reports where it failed, inside or outside the quoted range, on which pair, at which k, instead of adjusting the surface until it passes.

Fit quality is reported in vol points and as the share of selected quotes whose model price lies inside its own bid/ask.

The one rule

Every number is computed against the expiry’s parity forward. 139 tests; four oracle tests skip without the pricers sibling.