Overview
Conventions
Pricing-library bugs hide in unit conventions. FerroRisk names every one on the surface so a reader of the call site can reproduce the math without reading the source.
Input units
| Input | Description |
|---|---|
| time_to_expiry | Expressed in years. A 30-day expiry is 30.0 / 365.0. There is no implicit calendar conversion at any pricing entry point. |
| rate | Continuously compounded risk-free rate, as a decimal (0.05 = 5%). |
| dividend_yield | Continuously compounded dividend yield. For Black-76, set this to 0.0 — the model uses the risk-free rate as the effective carry term. |
| spot | The spot for equity-style models. For Black76, Bachelier, and DisplacedBlack it is the forward / futures reference, and dividend_yield is ignored. |
| volatility | Annualized. Its meaning is model-specific: lognormal vol for the Black family, normal (price-unit) vol for Bachelier, sqrt(v0) for Heston, diffusive σ for jump-diffusion. |
Greek units
| Greek | Description |
|---|---|
| theta · charm · veta · color | Reported per calendar day (the /365 convention), not per year — matching how a desk reads time-decay on a daily P&L. |
| vega | Reported as raw dV/dσ, not per one volatility point. Divide by 100 at the surface for a per-vol-point figure. |
| rho | Reported as raw dV/dr, not per basis point. |
| delta · gamma · vanna · volga | Standard spot sensitivities; vanna is d²V/(dS dσ) and volga (vomma) is d²V/dσ². |
Note
Convert vega and rho to per-point / per-bp at the surface, not inside the engine. Keeping the engine on raw derivatives means the same numbers compose cleanly when you aggregate across a book.
Intrinsic at expiry
At exact expiry, every model returns the model-independent intrinsic value. Heston and jump-diffusion contracts at exact expiry return raw intrinsic.