Releases: quantmind/quantflow
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