Release Notes¶
This page is the source of truth for quantflow release notes. Each section
below maps to a tagged release on
GitHub. When a new tag is
pushed, the matching section is extracted by
.github/workflows/release.yml and published as the GitHub Release body.
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 fromquantflow.utils.marginal, and the 1D distributions fromquantflow.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,KalmanFilterandUnscentedKalmanFilter(#76, #79). - Options inputs and strategies reworked, with moneyness utilities moved into
the new
quantflow.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¶
- 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).
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. AMaturityPricernow holds a singlepricingfield (anOptionPricingResult) 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 theinterp(...)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_lewistakemax_moneyness(a multiple of the marginal standard deviation) instead ofmax_log_strike. The COS path takescos_moneyness_std_precisioninstead.OptionPricingResult.call_at(...)is renamedcall_price(...), themethodfield 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 aresidual_kindfield onVolModelCalibration: set it toResidualKind.IVto 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_greeksreturns 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. Newcos_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__.pyre-exports. Code reaching into the oldquantflow.options.heston_calibrationmust 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)