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.2.0¶
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_curvesaccepts 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
DiscountPairmodel and thePutCallParities.fit_discountsandimplied_forwardmethods. Usecalibrate_forwardandquote_discountinstead (#92). - Removed
VolSurface.collect_put_call_paritiesandimplied_forward_term_structure. The surface reference date is now an explicitref_datefield (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).
v1.1.0¶
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).
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)