Skip to main content

Crate optionstratlib_pricing

Crate optionstratlib_pricing 

Source
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.

§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-core and optionstratlib-math.
  • Must not depend on optionstratlib-simulation, -market, -analytics, -strategies, -backtest and -visualization; make check-graph enforces the layering (ADR-0001 D9).
  • In the facade: optionstratlib::{pricing, greeks, volatility} and the pricing errors in optionstratlib::error, under the facade feature pricing. 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): derives utoipa::ToSchema on the pricing types and enables optionstratlib-core/schema and optionstratlib-math/schema.

Modules§

error
Errors raised by the pricing layer. Errors owned by the pricing layer.
greeks
Greeks: equations, the Greeks trait, model-specific and numerical Greeks, and the Greeks of the leg types.
pricing
Pricing models, the OptionPricing trait, profit contracts and solver defaults.
volatility
Implied-volatility solvers, volatility models and volatility traits.

Constants§

VERSION
Version of the optionstratlib-pricing crate.