Expand description
§optionstratlib-pricing
Option pricing models, Greeks and volatility of OptionStratLib, on the
core domain types. It depends only on optionstratlib-core,
optionstratlib-math and general numeric crates: no option chain,
simulation engine, strategy, plotting, I/O or async runtime.
pricing: Black-Scholes, Black-76, Garman-Kohlhagen, binomial, Monte Carlo over supplied paths, telegraph, American and exotic kernels, thepricing::OptionPricingextension trait forOptions, the unifiedpricing::price_option_withentry point, profit contracts and solver defaults.greeks: first and higher-order Greeks, thegreeks::Greekstrait, model-specific Greeks and the Greeks of the leg types.volatility: implied-volatility solvers and volatility models and traits.error:error::PricingError,error::GreeksErroranderror::VolatilityError.
§Numerical boundary
Prices, premia, strikes, rates and Greeks cross the public boundary as
rust_decimal::Decimal or Positive. f64 stays inside the numerical
kernels (the normal distribution, lattice and finite-difference steps).
The only public f64s are error diagnostics, which make check-float-boundary enforces (#522). Most kernels bring floats back
through optionstratlib_core::model::decimal::finite_decimal, so a
non-finite intermediate becomes a typed NonFinite error; several exotic
pricers still substitute zero for a failed step instead, which #639
tracks. The kernels perform no filesystem, network or stdout I/O and
install no logging subscriber.
For fixed inputs, closed-form and lattice pricers are deterministic; an
ExpirationDate::DateTime expiry is measured from the current clock, so
use ExpirationDate::Days for reproducible results. No public function
draws from the thread-local RNG implicitly (#638): Monte Carlo pricing
(pricing::monte_carlo_option_pricing), the telegraph pricer
(pricing::telegraph, OptionPricing::calculate_price_telegraph),
pricing::TelegraphProcess, pricing::simulate_returns and
volatility::simulate_heston_volatility take the generator from the
caller. Pass a seeded one such as
optionstratlib_core::utils::deterministic_rng(seed) for reproducible
results, or &mut rand::rng() for fresh draws on every call.
§Imports
There is no prelude, for the same reason as in core and math (#518): the
module roots re-export each capability, and the optionstratlib facade
prelude serves broad imports.
§Place in the workspace
- Depends on
optionstratlib-coreandoptionstratlib-math. - Must not depend on
optionstratlib-simulation,-market,-analytics,-strategies,-backtestand-visualization;make check-graphenforces the layering (ADR-0001 D9). - In the facade:
optionstratlib::{pricing, greeks, volatility}and the pricing errors inoptionstratlib::error, under the facade featurepricing. The facade paths are the same types as the paths here; the ownership map lists every one with its feature.
Moving from 0.21? The 0.22 architecture and adoption guide maps each redesign to its replacement workflow; 0.22 keeps no compatibility with 0.21.
§Minimal example
use optionstratlib_core::model::{ExpirationDate, OptionStyle, OptionType, Options, Positive, Side};
use optionstratlib_core::pos_or_panic;
use optionstratlib_pricing::pricing::black_scholes;
use rust_decimal_macros::dec;
// Hull's worked example: S = 42, K = 40, r = 10%, sigma = 20%, T = 0.5.
let call = Options::new(
OptionType::European,
Side::Long,
"XYZ".to_string(),
pos_or_panic!(40.0),
ExpirationDate::Days(pos_or_panic!(182.5)),
pos_or_panic!(0.2),
Positive::ONE,
pos_or_panic!(42.0),
dec!(0.10),
OptionStyle::Call,
Positive::ZERO,
None,
);
let price = black_scholes(&call)?;
assert!((price - dec!(4.76)).abs() < dec!(0.01));§Runnable example
A runnable program that depends on this crate directly, with the smallest
dependency set and no facade, is osl-example-direct-pricing; make tree-example-direct-pricing
asserts its resolved graph.
§Features
schema(off by default): derivesutoipa::ToSchemaon the pricing types and enablesoptionstratlib-core/schemaandoptionstratlib-math/schema.
Modules§
- error
- Errors raised by the pricing layer. Errors owned by the pricing layer.
- greeks
- Greeks: equations, the
Greekstrait, model-specific and numerical Greeks, and the Greeks of the leg types. - pricing
- Pricing models, the
OptionPricingtrait, profit contracts and solver defaults. - volatility
- Implied-volatility solvers, volatility models and volatility traits.
Constants§
- VERSION
- Version of the
optionstratlib-pricingcrate.