Skip to content

Releases: quantmind/quantflow

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 20:47
v1.2.0
352dba2

This release completes the discount curve and forward calibration work
introduced in v1.1.0. The experimental curve calibration API has been
simplified and part of it removed: see the Breaking changes section
below.

Breaking changes

  • VolSurface.calibrate_curves accepts only yield curve model types for the
    quote and asset legs, no longer curve instances. The asset curve is always
    fitted from the parity forwards, falling back to an interpolated monotonic
    cubic curve when the requested model cannot be calibrated
    (#92).
  • Removed the per-expiry OLS discount fitting API: the DiscountPair model
    and the PutCallParities.fit_discounts and implied_forward methods.
    Use calibrate_forward and quote_discount instead
    (#92).
  • Removed VolSurface.collect_put_call_parities and
    implied_forward_term_structure. The surface reference date is now an
    explicit ref_date field (defaulting to the current UTC time) rather than
    a property derived from the curves
    (#92).

New features

  • The default quote and asset curves of the volatility surface are now
    interpolated monotonic cubic curves calibrated from put-call parity; the
    Deribit and Yahoo Finance loaders have been updated accordingly
    (#92).

Documentation and assets

  • Updated the curve calibration and volatility surface tutorials for the new
    calibration API (#92).

Full changelog

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 18:02
v1.1.0
57be1c7

This release introduces the eSSVI parametrisation of the implied volatility
surface and the calibration of discount curves and forwards from put-call
parity, together with a new tutorial and expanded reference documentation.
There are no breaking changes.

New features

  • eSSVI (extended surface SVI) parametrisation of the implied volatility
    surface, with an arbitrage-free calibration to market quotes. The
    calibration is still experimental and will be refined in future releases
    (#86,#88, #90).
  • Calibration of forwards and discount curves from put-call parity, with
    selectable curve models for the quote and asset legs in the volatility
    surface API (#90).

Improvements and fixes

  • A calibrated parity forward of zero is no longer treated as missing
    (#90).
  • Fixed a stale date in the volatility surface documentation
    (#89).

Documentation and assets

  • New tutorial on discount curves from option prices, backed by a recorded
    Deribit BTC fixture and a fixture recording tool
    (#90).
  • Expanded API reference indexes, glossary and bibliography entries
    (#88).

Full changelog

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 12 Jun 08:27
v1.0.0
f2b82a0

First major release, consolidating the API for the 1.x series: a new
distributions package, a rewritten Kalman filtering module, an expanded
interest-rate toolkit and leaner naming across the options API. Several
modules were renamed, reworked or removed: see Breaking changes before
upgrading.

Breaking changes

  • New quantflow.dists package: Marginal1D moved there from
    quantflow.utils.marginal, and the 1D distributions from
    quantflow.utils.distributions; update imports accordingly
    (#80).
  • implied_vol/implied_vols fields and arguments renamed to iv across the
    options surface, calibration and plotting APIs
    (#67).
  • Kalman filtering rewritten: the old quantflow.ta.kalman module was removed
    and replaced by a state-space API with LinearGaussianModel, KalmanFilter
    and UnscentedKalmanFilter
    (#76,
    #79).
  • Options inputs and strategies reworked, with moneyness utilities moved into
    the new quantflow.options.moneyness module
    (#68).
  • Interest-rate package overhaul: CIR and Vasicek models expanded,
    Nelson-Siegel slimmed down, new no-discount curve
    (#74).
  • The quantflow.ai package was removed
    (#75).
  • EWMA alpha/period conversion corrected; results change for code relying on
    the previous formula
    (#73).

New features

  • Interpolated yield curves
    (#81).
  • Historical calibration of interest-rate models
    (#77).
  • Yield-curve fitting of forward and discount factors
    (#63).
  • Yahoo Finance volatility-surface loader
    (#61).

Improvements and fixes

  • Increased test coverage across the package, the app and the CIR curves
    (#69,
    #70,
    #71).
  • Documentation examples are now built once in CI and shared by the
    multi-arch image builds
    (#82).
  • Dependency updates, including aio-fluid
    (#78).

Documentation and assets

  • Docs improvements: plotly charts, example fixtures relocated, frontend
    moved, CIR and Vasicek rates API pages
    (#62,
    #64,
    #65,
    #66,
    #72).
  • Code of conduct added
    (#83).

Full changelog

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 10 May 11:31
v0.9.0
a5b532b

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

Choose a tag to compare

@github-actions github-actions released this 04 May 20:09
v0.8.0
4f60b95

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

Choose a tag to compare

@lsbardel lsbardel released this 26 Apr 11:06
4be6b50

What's Changed

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

v0.6.2

Choose a tag to compare

@lsbardel lsbardel released this 01 Apr 19:14
de84c45

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

Choose a tag to compare

@lsbardel lsbardel released this 28 Mar 20:13
e342c4e

What's Changed

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

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

v0.5.0

Choose a tag to compare

@lsbardel lsbardel released this 22 Mar 19:02
f634bef

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

Choose a tag to compare

@lsbardel lsbardel released this 01 Mar 10:51
324fd3d

New documentation

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

What's Changed

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