Releases: quantmind/quantflow
Release list
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_paritiesand
implied_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
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