Skip to main content

avellaneda-stoikov

PyPI CI License: MIT

A rigorous Avellaneda–Stoikov optimal market-making solver — the PDE value function with adverse selection, asymmetric fill rates, and inventory-aware quoting.

pip install avellaneda-stoikov

Quickstart

from avellaneda_stoikov import ASParams, solve_value_function, optimal_depths

p = ASParams(sigma=0.6, lam_plus=1.0, lam_minus=1.0,
             kappa_plus=100.0, kappa_minus=100.0,
             phi=1e-4, alpha=1e-3, q_max=5, T=60.0, n_steps=600)

t_grid, h_grid = solve_value_function(p)          # solve once
ask, bid = optimal_depths(h_grid, t_grid, p.q_max, t=0.0, q=2,
                          kappa_plus=p.kappa_plus, kappa_minus=p.kappa_minus)
print(ask, bid)   # optimal ask/bid depths when long 2 units (ask < bid: skew to sell)

The model

Solves the Avellaneda–Stoikov / Cartea Ch. 10 market-making problem. Ansatz H(t,x,S,q)=x+q·S+h(t,q); the HJB reduces to an ODE system in inventory q, integrated backward from h(T,q) = −α·q². Optimal feedback depths:

δ⁺* = 1/κ⁺ + ε⁺ + h(t,q) − h(t,q−1)     (ask)
δ⁻* = 1/κ⁻ + ε⁻ + h(t,q) − h(t,q+1)     (bid)

inventory skew

Why this one

Most open-source A-S implementations are minimal and unmaintained. This one adds:

  • Adverse selection (ε⁺/ε⁻, Cartea §10.4) — quote wider when fills predict mid moves.
  • Asymmetric fill rates κ⁺ ≠ κ⁻ solved directly in the PDE.
  • Finite-difference PDE solver (not just the closed-form approximation).
  • Inventory skew, boundary and overshoot handling, validated by tests.

Typed, mypy --strict, tested, MIT.

API

  • ASParams(...) — model + strategy parameters (validate()).
  • solve_value_function(p) -> (t_grid, h_grid) — solve once.
  • optimal_depths(h_grid, t_grid, q_max, t, q, kappa_plus, kappa_minus, epsilon_plus=0, epsilon_minus=0) — (δ⁺, δ⁻), None on a boundary.
  • reservation_price_and_spread(...) — (r, bid, ask).

References

  • Avellaneda & Stoikov (2008), High-frequency trading in a limit order book.
  • Cartea, Jaimungal & Penalva, Algorithmic and High-Frequency Trading, Ch. 10.

Honest note

Extracted from a live trading bot. This is the solver — calibration (estimating λ, κ, ε), execution and risk are left to you; that's where the edge lives. Out of scope for now: regime switching, order-flow drift (§10.5), non-linear fill models.

License

MIT.

Metadata

Release files for avellaneda-stoikov 0.1.0

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

Source distribution (sdist)

Source distribution for avellaneda-stoikov 0.1.0
File Size Uploaded
avellaneda_stoikov-0.1.0.tar.gz 59.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for avellaneda-stoikov 0.1.0
File Interpreter ABI Platform
avellaneda_stoikov-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 67.0 kB

Release files / avellaneda_stoikov-0.1.0.tar.gz

Download URL avellaneda_stoikov-0.1.0.tar.gz
Size 59.0 kB
Tags Source
SHA-256 checksum
How to use checksums
f7649416526b700e5ab40ad7a42ac8e3db3811a228e975dafb3d22965e250275
BLAKE2b-256 checksum
How to use checksums
921c732e5102b6cde2948f816b753523aff6f175101d0bd415835b1d2aa88431
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 Jun 29, 2026.

Transparency log

Release files / avellaneda_stoikov-0.1.0-py3-none-any.whl

Download URL avellaneda_stoikov-0.1.0-py3-none-any.whl
Size 8.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1279a49358e880731f0a74ce9e31c5d897c0a738a219188e2d2cad96c0430862
BLAKE2b-256 checksum
How to use checksums
22ff55bad1903703bc2a62c0a5a4aff34b973b4e92138ddc16d7dfd66f29bfc0
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 Jun 29, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

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