Skip to main content

derivatives-pricing

CI codecov PyPI version Python versions

A Python package for options pricing and Greeks computation, with a unified API across analytical, binomial tree, finite difference and Monte Carlo methods.

Built for teaching, research, and production-adjacent workflows.


Features

Pricing Coverage

Vanilla Asian Barrier Custom
BSM E E E —
Binomial E/A E/A E/A E/A
PDE_FD E/A — E/A E/A
Monte Carlo E/A E/A E/A E/A

E = European, A = American

Method details: BSM uses closed-form Black-Scholes-Merton; Binomial uses Cox-Ross-Rubinstein trees; PDE_FD supports implicit, explicit, and Crank-Nicolson finite difference schemes; Monte Carlo uses Longstaff-Schwartz for American-style exercise. Asian analytical pricing uses Turnbull-Wakeman (arithmetic) and Kemna-Vorst (geometric), with Hull averaging on binomial trees. Barrier pricing supports continuous and discrete monitoring, knock-in and knock-out structures, and rebates.


Additional Capabilities

  • Greeks — analytical, tree, grid, pathwise, likelihood-ratio, and numerical bump-and-revalue (delta, gamma, vega, theta, rho)
  • Implied volatility — Newton-Raphson, bisection, and Brent solvers with arbitrage-bounds checking
  • Stochastic processes — Geometric Brownian Motion, Jump Diffusion (Merton), Square-Root Diffusion (CIR)
  • Discount curves — log-linear interpolation on arbitrary term structures; deterministic time-varying forward rate and dividend curves
  • Discrete dividends — supported across all pricing methods
  • Control variates — European analytical control variates for American pricing variance reduction
  • Custom payoffs — user-defined payoff functions via PayoffSpec

Why derivatives-pricing?

  • Consistent API across analytical, tree, finite difference, and Monte Carlo methods
  • Designed for transparency and clarity of implementation
  • Includes vanilla, Asian, barrier, and custom-payoff workflows behind the same facade
  • Suitable for teaching, experimentation, research, and production-adjacent workflows
  • Extensible architecture for new models and payoffs

Installation

Install from PyPI:

pip install derivatives-pricing
# or pip install derivatives-pricing[numba] for optional PDE_FD solver acceleration

For development:

pip install -r requirements/dev.txt   
pip install -e . --no-deps                                                                         
pip install -e ".[jupyter]"           # optional, for running notebooks

Requires Python 3.10 – 3.13

Quick Start

import datetime as dt

import derivatives_pricing as dp

pricing_date = dt.datetime(2025, 1, 1)
maturity = dt.datetime(2025, 7, 1)

dc = dp.DiscountCurve.flat(rate=0.05)
md = dp.MarketData(
    pricing_date=pricing_date,
    discount_curve=dc,
    currency="USD",
)

underlying = dp.UnderlyingData(
    initial_value=100.0,
    volatility=0.20,
    market_data=md,
)

spec = dp.VanillaSpec(
    option_type=dp.OptionType.CALL,
    exercise_type=dp.ExerciseType.EUROPEAN,
    strike=105.0,
    maturity=maturity,
)

val = dp.OptionValuation(
    underlying=underlying,
    spec=spec,
    pricing_method=dp.PricingMethod.BSM,
)
print(f"{'PV:':<8} {val.present_value():>10.4f}")
print(f"{'Delta:':<8} {val.delta():>10.4f}")

Examples & Tutorials

The repo includes two companion directories:

  • examples/ — concise notebooks showing how to call the public API for each feature (European and American vanilla options, Asians, barriers, Greeks, jump diffusion, discount curves).
  • tutorials/ — deeper walkthroughs that teach the theory behind each pricing method (BSM, binomial trees, finite differences, Monte Carlo, Asian averaging, barrier pricing). Tutorials may access private/internal classes for demonstration purposes.

Tests

pytest -q -n auto --runslow

Project Structure

src/derivatives_pricing/
├── enums.py                  # OptionType, ExerciseType, PricingMethod, …
├── exceptions.py             # Custom exception hierarchy
├── market_environment.py     # MarketData, CorrelationContext
├── rates.py                  # DiscountCurve (log-linear interpolation)
├── stochastic_processes.py   # GBM, JDProcess, SRD, PathSimulation
├── utils.py                  # Day-count, forward price, put-call parity
├── valuation/
│   ├── asian_analytical.py   # Turnbull-Wakeman, Kemna-Vorst
│   ├── barrier_analytical.py # Analytical barrier pricing
│   ├── binomial.py           # Cox-Ross-Rubinstein tree
│   ├── bsm.py                # Closed-form Black-Scholes-Merton
│   ├── contracts.py          # VanillaSpec, BarrierSpec, PayoffSpec, AsianSpec
│   ├── core.py               # OptionValuation facade, UnderlyingData
│   ├── implied_volatility.py # IV solver
│   ├── monte_carlo.py        # Monte Carlo with Longstaff-Schwartz and barrier pricing
│   ├── params.py             # MonteCarloParams, BinomialParams, PDEParams
│   └── pde.py                # Finite difference (implicit, explicit, Crank-Nicolson, barriers)
tests/                        # Test suite
examples/                     # API usage notebooks
tutorials/                    # Theory deep-dive notebooks

Found a bug or have a feature request? Open an issue.

Disclaimer

This pricing library is provided as-is. Users are responsible for independently verifying any results before relying on them.

License

This repository uses a dual-license model.

Component License SPDX
src/derivatives_pricing/ MIT MIT
examples/ MIT MIT
tutorials/ CC BY-NC-SA 4.0 CC-BY-NC-SA-4.0

Library code and examples are released under the MIT License and may be freely used, modified, and redistributed.

The PyPI distribution contains the MIT-licensed library package. Tutorial materials are separately hosted in the GitHub repository and are not part of the published package.

Tutorial notebooks in tutorials/ are licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 (CC BY-NC-SA 4.0). You may share and adapt these materials for non-commercial purposes with attribution. See the full license text for details.

Metadata

Release files for derivatives-pricing 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for derivatives-pricing 0.2.1
File Size Uploaded
derivatives_pricing-0.2.1.tar.gz 246.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for derivatives-pricing 0.2.1
File Interpreter ABI Platform
derivatives_pricing-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 371.6 kB

Release files / derivatives_pricing-0.2.1.tar.gz

Download URL derivatives_pricing-0.2.1.tar.gz
Size 246.8 kB
Tags Source
SHA-256 checksum
How to use checksums
e03879f2ea0cbf0815fe074ee41c181d68df6620009c07b34f31c59032cd7b0c
BLAKE2b-256 checksum
How to use checksums
6bdb6079e08a4046b8109c702edd1595db1d4cd59097710a26f8fe91a1f4688e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 16, 2026.

Transparency log

Release files / derivatives_pricing-0.2.1-py3-none-any.whl

Download URL derivatives_pricing-0.2.1-py3-none-any.whl
Size 124.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9df05a01e455d0843cab8b62375a206c69b935b2d05c1f80ee74b18d32fa0fc6
BLAKE2b-256 checksum
How to use checksums
202d1b2bdfc9c26b9a9c868e7ee422fc0635ca9df4877cbc0dbce73edec11f01
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page