Skip to main content
OIPD turns option prices into two kinds of objects: volatility objects and probability objects. Volatility comes first. Probability is derived from fitted volatility.
Only need probabilities? You can skip the volatility objects and use from_chain() directly: ProbCurve.from_chain(chain, market) for one expiry, or ProbSurface.from_chain(chain, market) for many expiries. See Probability layer.

Core objects

Use caseOne expiryMany expiries
Implied volatilityVolCurveVolSurface
Market-implied probabilityProbCurveProbSurface
An expiry is the date when an option contract ends. A curve is one expiry. A surface is many expiries linked through time.

Workflow

Most work follows three steps:
  1. Create an object, such as VolCurve() or VolSurface().
  2. Fit it to an options chain and MarketInputs.
  3. Query it for implied vol, prices, Greeks, or probabilities.
from oipd import VolCurve

vol = VolCurve().fit(chain, market)
prob = vol.implied_distribution()

print(prob.prob_below(100))
This is similar to fitting an econometric model: choose the model, estimate it, then ask it questions.

Object choice

Use VolCurve when you have one expiry and want implied volatilities, option prices, Greeks, or a fitted smile plot. Use VolSurface when you have several expiries and want implied volatility across strikes and time. Use ProbCurve when you want probabilities for one expiry, such as P(S < 100) or the median future price. Use ProbSurface when you want those probability questions across several future dates.

Warnings

Fitted objects keep structured warning details in .warning_diagnostics. Use them when a result looks odd. They record issues such as stale quotes, skipped expiries, or repairs applied while building a probability distribution.