Expand description
Volatility surface infrastructure, mirroring crate::core::curves.
Design invariants:
- Every input form is canonicalized at construction into per-expiry
smiles on a strike-like coordinate, so pricing has one query path:
VolSurface::vol(strike, forward, t). - Time interpolation is linear in total variance (
w = sigma^2 * t) at a fixed smile coordinate — the industry-standard baseline. - Strike interpolation is linear in vol on the smile coordinate, with flat wing extrapolation; flat vol extrapolation before the first and after the last expiry.
Quoting conventions per axis:
strikes— absolute strikes (equity listed convention). Time interpolation at fixed strike (sticky strike).moneyness— forward moneynessK/F(relative strikes). Sticky moneyness behavior.deltas— forward call deltas in (0, 1) (FX convention). Quote a 25-delta put as0.75(= 1 + forward put delta); ATM-delta-neutral is approximately0.5. Pillars are converted to log-moneyness at construction using each pillar’s own quoted vol (ln(K/F) = 0.5*sigma^2*t - sigma*sqrt(t)*inv_N(delta)), so queries are sticky delta.
Structs§
- VolSurface
- A canonical Black volatility surface anchored at
reference_date.
Enums§
- VolError
- Errors from surface construction.
- VolInput
- The accepted input forms for a volatility surface. Deserializes from
JSON; canonicalized at construction (
VolSurface::from_input). - VolShift
- A shift applied to a whole surface by
VolSurface::bumped. The surface owns the semantics: shifts move every quoted vol, preserving the smile shape and the surface’s coordinate system.