Skip to content

Releases: quantmind/quantflow

v0.9.0

10 May 11:31
v0.9.0
a5b532b

Choose a tag to compare

Pricing-engine and calibration overhaul. MaturityPricer now evaluates call
prices and Greeks lazily at arbitrary log-strikes instead of carrying a
precomputed grid, Fourier pricers take a moneyness-based truncation parameter,
and the volatility-surface calibration can fit Black implied vols directly.
This release contains several API changes: see Breaking changes below.

Breaking changes

MaturityPricer reworked. (#59)

  • The precomputed std, log_strike and call arrays are gone. A
    MaturityPricer now holds a single pricing field (an
    OptionPricingResult) that evaluates call prices and Greeks on demand at
    any log-strike.
  • moneyness is now a method, moneyness(log_strikes), not a cached array
    property. The time_value and intrinsic_value array properties and the
    interp(...) helper were removed; use prices(log_strikes) to get a
    DataFrame of prices and implied vols on a chosen log-strike grid.

Fourier pricing truncation: max_log_strike → moneyness parameters.
(#59)

  • Marginal1D.call_option, call_option_carr_madan and call_option_lewis
    take max_moneyness (a multiple of the marginal standard deviation)
    instead of max_log_strike. The COS path takes
    cos_moneyness_std_precision instead.
  • OptionPricingResult.call_at(...) is renamed call_price(...), the
    method field is removed, and a new abstract call_greeks(log_strike)
    returns a Greeks namedtuple (price, delta, gamma).

OptionPricerBase.call_pricecall_prices.
(#59) The method is now
vectorised: it takes arrays of times-to-maturity and log-strikes and prices
them in a single maturity-grouped call.

DIVFMPricer no longer builds a fixed moneyness grid.
(#59) The
max_moneyness_ttm and n fields are removed; the fitted IV surface is
evaluated on demand through OptionPricingResultDIVFM.

New features

  • Implied-vol calibration residuals. New ResidualKind enum and a
    residual_kind field on VolModelCalibration: set it to ResidualKind.IV
    to fit the model to Black implied vols (recovered by inverting the model
    price) rather than to forward-space prices. The IV residual is naturally
    well-scaled across moneyness, so moneyness_weight is not applied in that
    mode. (#59)
  • Greeks from the pricing result. OptionPricingCosResult.call_greeks
    returns closed-form price, delta and gamma from the COS expansion; the
    transform-based result derives delta and gamma by differentiating the call
    grid; DIVFM uses finite differences on the fitted surface.
    (#59)
  • COS truncation control on OptionPricer. New
    cos_moneyness_std_precision field (default 12) sets the width of the COS
    integration interval in standard deviations.
    (#59)

Improvements and fixes

  • Calibration residuals are now computed in a single vectorised pricing call.
    Deep-wing strikes where the model price falls outside the no-arbitrage band
    (so Newton fails to invert it) are masked out instead of poisoning the fit,
    and a parameter set that fails to invert on more than half the options is
    rejected with a large penalty.
    (#59)
  • Calibration plots now evaluate the model on a fresh moneyness grid;
    plot(max_moneyness=...) no longer accepts None.
    (#59)
  • OptionEntry.mid_price() no longer caches through a private attribute.
    (#59)
  • Stale Jupytext notebook mirrors under notebooks/ removed.
    (#59)

Documentation and assets

  • New GitHub social-preview banner under docs/assets/logos/png/.
    (#59)
  • docs/api/options/black.md and the volatility-surface calibration examples
    updated for the new pricer API.
    (#59)
  • The release procedure moved out of .github/copilot-instructions.md into
    its own .github/instructions/release.instructions.md.

Full changelog

v0.8.0

04 May 20:09
v0.8.0
4f60b95

Choose a tag to compare

Volatility-surface calibration overhaul. This release adds a two-factor BNS
model, a double-Heston model (with optional jumps), Lewis and COS pricing
methods, and reworks the calibration package layout. Several module renames
and signature changes were made along the way: see Breaking changes below.

Breaking changes

Module renames.

  • quantflow.sp.weiner is now quantflow.sp.wiener (typo fix). Update
    imports.
  • quantflow.options.calibration is now a package, not a single module.
    Top-level imports keep working through the package __init__.py
    re-exports. Code reaching into the old quantflow.options.heston_calibration
    must switch to quantflow.options.calibration.heston.

ModelOptionPrice field rename. (#47)

  • ModelOptionPrice.moneyness previously meant log(K/F). It now means
    standardised moneyness log(K/F) / sqrt(ttm), and the raw log-strike is
    exposed as a new field log_strike. Code reading option.moneyness and
    expecting a log-strike must switch to option.log_strike.
  • get_intrinsic_value(moneyness=...) argument renamed to log_strike=....

New features

  • BNS2: two-factor Barndorff-Nielsen & Shephard stochastic-volatility
    model with a single Brownian motion driving a convex combination of
    independent Gamma-OU variances and per-factor leverage. New section in the
    BNS calibration tutorial. (#54)
  • DoubleHeston and DoubleHestonJ: two-factor Heston (with optional
    log-price jumps) and matching DoubleHestonCalibration /
    DoubleHestonJCalibration. (#46)
  • Lewis and COS option-pricing methods: selectable via
    OptionPricingMethod, alongside the existing Carr-Madan / FFT path. (#47)
  • CIR tutorial with PDF comparison example. (#49)

Improvements and fixes

  • Heston calibration convergence fixes. (#45, #49)
  • BNS calibration: dedicated BNSCalibration class extracted, characteristic
    exponent derivation cleaned up, broader test coverage. (#50, #51)
  • OU module reworked: clearer Gamma-OU API, stronger tests for moments and
    the integrated Laplace transform. (#51)
  • pricing_method_comparison example simplified; redundant time-comparison
    code removed. (#48)

Documentation and assets

  • New logo set (favicon, lockup, marks, social banners) under
    docs/assets/logos/. (#53)
  • New docs/mcp.md page covering the MCP server.
  • Bibliography rebuilt from BibTeX via docs/bib2md.py; glossary expanded;
    mathjax tweaks for inline rendering. (#47, #49)
  • Tutorial-writing instructions added at
    .github/instructions/tutorial.instructions.md.

Full changelog

v0.7.0

26 Apr 11:06
4be6b50

Choose a tag to compare

What's Changed

Full Changelog: v0.6.2...v0.7.0

v0.6.2

01 Apr 19:14
de84c45

Choose a tag to compare

What's Changed

  • Fix critical dependency bug in 0.6.1 (which is a bad release)

Full Changelog: v0.6.1...v0.6.2

v0.6.1

28 Mar 20:13
e342c4e

Choose a tag to compare

What's Changed

  • Improved documentation
  • Better implied vol by @lsbardel in #40

Full Changelog: v0.5.0...v0.6.1

v0.5.0

22 Mar 19:02
f634bef

Choose a tag to compare

What's Changed

  • Switch to uv by @lsbardel in #37
  • Fix docker by @lsbardel in #38
  • Add ai mcp server and remove cli by @lsbardel in #39
  • Use pydantic rather than dataclass for Vol surface stack
  • Add implied vol to option inputs

Full Changelog: v0.4.4...v0.5.0

v0.4.4

01 Mar 10:51
324fd3d

Choose a tag to compare

New documentation

  • Removed jupyter-book & sphinx
  • Using mkdocs and marimo

What's Changed

Full Changelog: v0.4.3...v0.4.4

v0.4.3

29 Nov 18:06
bf5408d

Choose a tag to compare

What's Changed

Full Changelog: v0.4.2...v0.4.3

v0.4.2

09 Aug 15:39

Choose a tag to compare

What's Changed

Full Changelog: v0.4.1...v0.4.2

v0.4.1

06 Jul 15:49

Choose a tag to compare

What's Changed

Full Changelog: v0.3.3...v0.4.1