Releases: quantmind/quantflow
v1.0.0
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.distspackage:Marginal1Dmoved there from
quantflow.utils.marginal, and the 1D distributions from
quantflow.utils.distributions; update imports accordingly
(#80). implied_vol/implied_volsfields and arguments renamed toivacross the
options surface, calibration and plotting APIs
(#67).- Kalman filtering rewritten: the old
quantflow.ta.kalmanmodule was removed
and replaced by a state-space API withLinearGaussianModel,KalmanFilter
andUnscentedKalmanFilter
(#76,
#79). - Options inputs and strategies reworked, with moneyness utilities moved into
the newquantflow.options.moneynessmodule
(#68). - Interest-rate package overhaul: CIR and Vasicek models expanded,
Nelson-Siegel slimmed down, new no-discount curve
(#74). - The
quantflow.aipackage 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
v0.9.0
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_strikeandcallarrays are gone. A
MaturityPricernow holds a singlepricingfield (an
OptionPricingResult) that evaluates call prices and Greeks on demand at
any log-strike. moneynessis now a method,moneyness(log_strikes), not a cached array
property. Thetime_valueandintrinsic_valuearray properties and the
interp(...)helper were removed; useprices(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_madanandcall_option_lewis
takemax_moneyness(a multiple of the marginal standard deviation)
instead ofmax_log_strike. The COS path takes
cos_moneyness_std_precisioninstead.OptionPricingResult.call_at(...)is renamedcall_price(...), the
methodfield is removed, and a new abstractcall_greeks(log_strike)
returns aGreeksnamedtuple(price, delta, gamma).
OptionPricerBase.call_price → call_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
ResidualKindenum and a
residual_kindfield onVolModelCalibration: set it toResidualKind.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, somoneyness_weightis 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_precisionfield (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 acceptsNone.
(#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.mdand the volatility-surface calibration examples
updated for the new pricer API.
(#59)- The release procedure moved out of
.github/copilot-instructions.mdinto
its own.github/instructions/release.instructions.md.
v0.8.0
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.weineris nowquantflow.sp.wiener(typo fix). Update
imports.quantflow.options.calibrationis now a package, not a single module.
Top-level imports keep working through the package__init__.py
re-exports. Code reaching into the oldquantflow.options.heston_calibration
must switch toquantflow.options.calibration.heston.
ModelOptionPrice field rename. (#47)
ModelOptionPrice.moneynesspreviously meantlog(K/F). It now means
standardised moneynesslog(K/F) / sqrt(ttm), and the raw log-strike is
exposed as a new fieldlog_strike. Code readingoption.moneynessand
expecting a log-strike must switch tooption.log_strike.get_intrinsic_value(moneyness=...)argument renamed tolog_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)DoubleHestonandDoubleHestonJ: two-factor Heston (with optional
log-price jumps) and matchingDoubleHestonCalibration/
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
BNSCalibrationclass 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_comparisonexample 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.mdpage 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.
v0.7.0
v0.6.2
What's Changed
- Fix critical dependency bug in 0.6.1 (which is a bad release)
Full Changelog: v0.6.1...v0.6.2