SPY
ReportGitHub
TENOR
Loading data…

Volatility smile

Out-of-the-money quotes against the fitted SVI. Click any point for the contract.

Selected contract

Click a point on the smile.

Fit residuals

Fitted minus market, vol points.

Term structure

Click a point to select that tenor.

Pinned tenors

Use Pin in the tenor bar to overlay smiles and compare level and shape.

Implied volatility surface

Free-spin 3D. Hover to read a point, click to query it. The floor shows the same field as a heat-shadow with contours.

Query the surface

Strike and maturity in; volatility and Black-76 price out.

Skew surface

Local skew ∂IV/∂k over strike and maturity. Blue is steep put skew, pale is the smile's vertex, amber is the call-side upturn.

Skew across strikes

Selected tenor, pinned overlaid.

ATM skew term structure

Click to select.

Risk-neutral density check

Gatheral's g(k) must stay at or above zero (no butterfly arbitrage). Shaded band = observed strikes.

Calendar check

Total variance of every tenor. Curves must not cross downward as maturity grows.

g(k) heatmap

Red would mark negative density. None appears inside the observed region.

Minimum g per tenor

Click a bar to select. All bars above zero means no butterfly arbitrage.

SVI sandbox

Drag the five raw-SVI parameters of the selected tenor. Push b up or σ down and watch the density go negative: that is butterfly arbitrage.

w(k) = a + b·(ρ·(k−m) + √((k−m)² + σ²))

Smile

Density g(k)

Data quality

Why contracts were dropped. “not otm” is intentional: each strike keeps only its out-of-the-money leg.

Per-tenor fit audit

Click a row to select.

Cross-check against svi-py

Same cleaned quotes and forwards. Default = svi-py's out-of-the-box objective; tuned = its implied-vol objective with multi-start.

← → change tenor · Space play · in 3D: drag to spin, scroll to zoom, Shift-drag to pan, double-click to reset