Releases: lballabio/QuantLib
1.18
Changes for QuantLib 1.18:
QuantLib 1.18 includes 34 pull requests from several contributors.
The most notable changes are included below. A detailed list of changes is available in ChangeLog.txt and at https://github.com/lballabio/QuantLib/milestone/14?closed=1.
Portability
- As announced in the past release, support of Visual C++ 2010 is dropped. Also, we'll probably deprecate Visual C++ 2012 in the next release in order to drop it around the end of 2020.
Build
- Cmake now installs headers with the correct folder hierarchy (thanks to Cheng Li).
- The
--enable-unity-build
flag passed to configure now also causes the test suite to be built as a single source file. - The Visual Studio projects now allow enabling unity builds as described at https://devblogs.microsoft.com/cppblog/support-for-unity-jumbo-files-in-visual-studio-2017-15-8-experimental/
Term structures
- A new
GlobalBootstrap
class can now be used withPiecewiseYieldCurve
and other bootstrapped curves (thanks to Peter Caspers). It allows to produce curves close to Bloomberg's. - The experimental
SofrFutureRateHelper
class and its parentOvernightIndexFutureRateHelper
can now choose to use either compounding or averaging, in order to accommodate different conventions for 1M and 3M SOFR futures (thanks to GitHub usertani3010
). - The
FraRateHelper
class has new constructors that take IMM start / end offsets (thanks to Peter Caspers). - It is now possible to pass explicit minimum and maximum values to the
IterativeBootstrap
class. The accuracy parameter was also moved to the same class; passing it to the curve constructor is now deprecated.
Instruments
- It is now possible to build fixed-rate bonds with an arbitrary schedule, even without a regular tenor (thanks to Steven Van Haren).
Models
- It is now possible to use normal volatilities to calibrate a short-rate model over caps.
Date/time
- The Austrian calendar was added (thanks to Benjamin Schwendinger).
- The German calendar incorrectly listed December 31st as a holiday; this is now fixed (thanks to Prasad Somwanshi).
- Chinese holidays were updated for 2020 and the coronavirus event (thanks to Cheng Li).
- South Korea holidays were updated for 2016-2020 (thanks to GitHub user
fayce66
). - In the calendar class,
holidayList
is now an instance method; the static version is deprecated. ThebusinessDayList
method was also added. (Thanks to Piotr Siejda.) - A bug in the 30/360 German day counter was fixed (thanks to Kobe Young for the heads-up).
Optimizers
- The differential evolution optimizer was updated (thanks to Peter Caspers).
Currencies
- Added Kazakstani Tenge to currencies (thanks to Jonathan Barber).
Deprecated features
- Features deprecate in version 1.14 were removed: one of the constructors of the
BSMOperator
class, the wholeOperatorFactory
class, and the typedefCalibrationHelper
which was used to alias theBlackCalibrationHelper
class. - The
CalibrationHelperBase
class is now calledCalibrationHelper
. The old name remains as a typedef but is deprecated. - The overload of
CalibratedModel::calibrate
andCalibratedModel::value
taking a vector ofBlackCalibrationHelper
s are deprecated in favor of the ones taking a vector ofCalibrationHelper
s. - The static method
Calendar::holidayList
is deprecated in favor of the instance method by the same name. - The constructors of
PiecewiseDefaultCurve
andPiecewiseYieldCurve
taking an accuracy parameter are deprecated in favor of passing the parameter to an instance of the bootstrap class. - The constructors of
BondHelper
and derived classes taking a boolean flag to choose between clean and dirty price are deprecated in favor of the ones taking aBond::Price::Type
argument. TheuseCleanPrice
method is also deprecated in favor ofpriceType
.
Thanks go also to Ralf Konrad, Klaus Spanderen, Carlos Fidel Selva Ochoa, F. Eugene Aumson and Francois Botha for smaller fixes, enhancements, and bug reports.
1.17
Changes for QuantLib 1.17:
QuantLib 1.17 includes 30 pull requests from several contributors.
The most notable changes are included below. A detailed list of changes is available in ChangeLog.txt and at https://github.com/lballabio/QuantLib/milestone/13?closed=1.
Portability
- As of this release, support of Visual C++ 2010 is deprecated; it will be dropped in next release. Also, we'll probably deprecate Visual C++ 2012 in one of the next few releases in order to drop it around the end of 2020.
Configuration
- A new function
compiledBoostVersion()
is available, (thanks to Andrew Smith). It returns the version of Boost used to compile the library, as reported by theBOOST_VERSION
macro. This can help avoid linking the library with user code compiled with a different Boost version (which can result in erratic behavior). - It is now possible to specify at run time whether to use indexed coupons (thanks to Ralf Konrad). The compile-time configuration is still used as a default, but it is also possible to call either of the static methods
IborCoupon::createAtParCoupons
orIborCoupon::createIndexedCoupons
to specify your preference. For the time being, the methods above must necessarily be called before creating any instance ofIborCoupon
or of its derived classes.
Build
- As of this version, the names of the binaries produced by the included Visual C++ solution no longer contain the toolset version (e.g., v142).
Instruments
- Added ex-coupon functionality to floating-rate bonds (thanks to Steven Van Haren).
- The inner structure
Callability::Price
was moved to the classBond
and can now be used to specify what kind of price was passed to theBondFunctions::yield
method (thanks to Francois Botha). - It is now possible to use a par-coupon approximation for FRAs like the one used in Ibor coupons (thanks to Peter Caspers).
Pricing engines
- Added escrowed dividend model to the new-style FD engine for
DividendVanillaOption
(thanks to Klaus Spanderen). - Black cap/floor engine now also returns caplet deltas (thanks to Wojciech Slusarski).
Term structures
- OIS rate helpers can now choose whether to use as a pillar for the bootstrap either their maturity date or the end date of the last underlying fixing. This provides an alternative if the bootstrap should fail. (Thanks to Drew Saunders for the heads-up.)
- Instances of the
FittedBondDiscountCurve
class now behave as simple evaluators (that is, they use the given paramters without performing root-solving) when themaxIterations
parameter is set to 0. (Thanks to Nick Firoozye for the heads-up.)
Date/time
- Added a few special closing days to the US government bond calendar (thanks to Mike DelMedico).
- Fixed an incorrect 2019 holiday in Chinese calendar (thanks to Cheng Li).
- Added missing holiday to Swedish calendar (thanks to GitHub users
periculus
andtonyzhipengzhou
).
Deprecated features
- The classes
FDEuropeanEngine
,FDAmericanEngine
,FDBermudanEngine
,FDDividendEuropeanEngine
,FDDividendEuropeanEngineShiftScale
,FDDividendAmericanEngine
,FDDividendAmericanEngineShiftScale
are now deprecated. They are superseded byFdBlackScholesVanillaEngine
.
Thanks go also to Joel King, Kai Striega, Francis Duffy, Tom Anderson and GitHub user lab4quant
for smaller fixes, enhancements, and bug reports.
1.16
Changes for QuantLib 1.16:
QuantLib 1.16 includes 34 pull requests from several contributors.
The most notable changes are included below. A detailed list of changes is available in ChangeLog.txt and at https://github.com/lballabio/QuantLib/milestone/12?closed=1.
Portability
- Added support for Visual Studio 2019 (thanks to Paul Giltinan).
Configuration
- As announced in past release, the compile-time switch to force non-negative rates was removed.
Pricing engines
- Added constant elasticity of variance (CEV) pricing engines for vanilla options. Analytic, FD and SABR engines are available (thanks to Klaus Spanderen).
- Added quanto pricing functionality to a couple of FD engines for
DividendVanillaOption
(thanks to Klaus Spanderen).
Cash flows
- Digital coupons can now optionally return the value of the naked option (thanks to Peter Caspers).
Date/time
- Updated Taiwan holidays for 2019 (thanks to Hank Liu).
- Added two newly announced holidays to Chinese calendar (thanks to Cheng Li).
- Updated Japan calendar (thanks to Eisuke Tani).
- Fixed New Year's day adjustment for Canadian calendar (thanks to Roy Zywina).
- Added a couple of exceptions for UK bank holidays (thanks to GitHub user Vililikku for the heads-up).
- Added French calendar (thanks to GitHub user NJeanray).
- Added public methods to expose a calendar's added and removed holidays (thanks to Francois Botha).
- Allow the stub date of a schedule to equal the maturity.
Deprecated features
- Deprecated a constructor of the
SwaptionVolatilityMatrix
class that didn't take a calendar. - Removed typedefs
GammaDistribution
,ChiSquareDistribution
,NonCentralChiSquareDistribution
andInverseNonCentralChiSquareDistribution
, deprecated in version 1.12. UseCumulativeGammaDistribution
,CumulativeChiSquareDistribution
,NonCentralCumulativeChiSquareDistribution
andInverseNonCentralCumulativeChiSquareDistribution
instead. - Removed
Actual365NoLeap
class, deprecated in version 1.11. It was folded intoActual365Fixed
.
Term structures
- Take payment days into account when calculating the nodes of a bootstrapped curve based on overnight swaps.
1.15
Changes for QuantLib 1.15:
QuantLib 1.15 includes 32 pull requests from several contributors.
The most notable changes are included below. A detailed list of changes is available in ChangeLog.txt and at https://github.com/lballabio/QuantLib/milestone/11?closed=1.
Portability
- This release drops support for Boost version 1.43 to 1.47; the minimum required version is now Boost 1.48, released in 2011.
- Added a
.clang-format
file to the repository. The format is not going to be enforced, but the style file is provided as a convenience in case you want to format new code according to the conventions of the library. boost::function
,boost::bind
and a few related classes and functions were imported into the new namespaceQuantLib::ext
. This allows them to be conditionally replaced with theirstd::
versions (see the "opt-in features" section below). The default is still to use the Boost implementation. Client code using theboost
namespace explicitly doesn't need to be updated.
Models
- Added an experimental volatility basis model for caplet and swaptions (thanks to Sebastian Schlenkrich).
Pricing engines
- It is now possible to specify polynomial order and type when creating a
MCAmericanBasketEngine
instance (thanks to Klaus Spanderen).
Term structures
- Inflation curves used to store the nominal curve used during their construction. This is still supported for backward compatibility, but is deprecated. You should instead pass the nominal curve explicitly to objects that need one (e.g., inflation helpers, engines, or cashflow pricers).
- Added experimental helpers to bootstrap an interest-rate curve on SOFR futures (thanks to Roy Zywina).
Indexes
- It is now possible to choose the fixing calendar for the BMA index (thanks to Jan Ladislav Dussek).
Cash flows
- Fixed broken observability in CMS-spread coupon pricer (thanks to Peter Caspers).
Date/time
- Fix implementation of Actual/Actual (ISMA) day counter in case a schedule is provided (thanks to Philip Stephens).
- Fix implementation of
Calendar::businessDaysBetween
method when the initial and final date are the same (thanks to Weston Steimel). - Added day of mourning for G.H.W. Bush to the list of United States holidays (thanks to Joshua Engelman).
- Updated list of Chinese holidays for 2019 (thanks to Cheng Li).
- Added basic unit tests for the
TimeGrid
class (thanks to Kai Striega).
Math
- Prevent solver failure in Richardson extrapolation (thanks to Klaus Spanderen).
Examples
- Added multi-curve bootstrapping example (thanks to Jose Garcia). This examples supersedes the old swap-valuation example, that was therefore removed.
Deprecated features
- Up to this release, it has been possible to force interest rates to be non-negative by commenting the
QL_NEGATIVE_RATES
macro inql/userconfig.hpp
on Visual C++ or by passing the--disable-negative-rates
switch to./configure
on other systems. This possibility will no longer be supported in future releases.
New opt-in features
- It is now possible to use
std::function
,std::bind
and their related classes instead ofboost::function
andboost::bind
. The feature can be enabled by uncommenting theQL_USE_STD_FUNCTION
macro inql/userconfig.hpp
on Visual C++ or by passing the--enable-std-function
switch to./configure
on other systems. This requires using at least the C++11 standard during compilation. - A new
./configure
switch,--enable-std-classes
, was added as a shortcut for--enable-std-pointers
--enable-std-unique-ptr
--enable-std-function
.
1.14
Changes for QuantLib 1.14:
QuantLib 1.14 includes 40 pull requests from several contributors.
The most notable changes are included below.
A detailed list of changes is available in ChangeLog.txt and at https://github.com/lballabio/QuantLib/milestone/10?closed=1.
Portability
- In April 2018, Microsoft ended its support for Microsoft Visual C++ 2008. As previously announced, this release drops support for it.
- Fixed generation of RPM from QuantLib.spec (thanks to Simon Rees).
- Avoided uses of some features removed in C++17 so that the library can be compiled under the latest standard if needed.
boost::shared_ptr
and a few related classes and functions were imported into the new namespaceQuantLib::ext
. This allows them to be conditionally replaced with theirstd::
versions (see the "opt-in features" section below). The default is still to use the boost implementation. Client code using the boost namespace explicitly doesn't need to be updated.- Fixed build and tests on FreeBSD-11 (thanks to Klaus Spanderen and to Mikhail Teterin for the heads-up).
- Fixed tests with the
-ffast-math
compilation flag enabled (thanks to Klaus Spanderen and to Jon Davies for the heads-up).
Instruments and pricing engines
- Add different settlement methods for swaptions (thanks to Peter Caspers).
- Take into account distinct day-count conventions for different curves in the analytic barrier-option engine (thanks to GitHub user cosplay-raven).
- Extract the correct constant coefficients to use in finite-difference vanilla-option engine when using a time-dependent Black-Scholes process (thanks to GitHub user Grant6899 for the analysis).
Cash flows and interest rates
- Added Bibor and THBFIX indices (thanks to Matthias Lungwitz).
Models
- Added a hook for using a custom smile model in the Markov functional model (thanks to Peter Caspers).
- Added a base class
CalibrationHelperBase
to the hierarchy of calibration helpers in order to allow for helpers not using the Black model. - Return underlying dynamics from Black-Karasinski model (thanks to Fanis Antoniou).
Finite differences
- Added higher-order spatial operators (thanks to Klaus Spanderen).
- Added TR-BDF2 finite-difference scheme (thanks to Klaus Spanderen).
Term structures
- Allow swap helpers to specify end-of-month convention (thanks to Matthias Lungwitz).
Date/time
- Prevented division by zero in Actual/365 Canadian day counter (thanks to Ioannis Rigopoulos for the heads-up).
- Added Children's Day to the list of Romanian holidays (thanks to Matthias Lungwitz).
- Added new calendar for Thailand (thanks to Matthias Lungwitz).
- Added 30/360 German day counter (thanks to Peter Caspers and Alexey Indiryakov).
Math
- Fixed bug in convex-monotone interpolation (thanks to Peter Caspers for the fix and to Tom Anderson for finding the bug).
New opt-in features
- It is now possible to use
std::shared_ptr
and its related classes instead ofboost::shared_ptr
. Note that, unlike its boost counterpart,std::shared_ptr
doesn't check for null pointers before access; this can lead to crashes. The feature can be enabled by uncommenting theQL_USE_STD_SHARED_PTR
macro inql/userconfig.hpp
on Visual C++ or by passing the--enable-std-pointers
to./configure
on other systems. This requires using at least the C++11 standard during compilation. - It is now possible to use
std::unique_ptr
instead ofstd::auto_ptr
; this makes it possible to compile the library in strict C++17 mode and to avoid deprecation warnings in C++11 and C++14 mode. The feature can be enabled by uncommenting theQL_USE_STD_UNIQUE_PTR
macro inql/userconfig.hpp
on Visual C++ or by passing the--enable-std-unique-ptr
to./configure
on other systems.
Thanks go also to Sam Danbury, Barry Devlin, Roland Kapl, and GitHub user todatamining for smaller fixes, enhancements, and bug reports.
1.13
Changes for QuantLib 1.13:
QuantLib 1.13 includes 42 pull requests from several contributors.
The most notable changes are included below. A detailed list of changes is available in ChangeLog.txt and at https://github.com/lballabio/QuantLib/milestone/8?closed=1.
Portability
- In April 2018, Microsoft ended its support for Microsoft Visual C++ 2008. This release still includes a solution file for VC++ 2008, but we won't support it further or take bug reports for it. The next release will only contain project files for Visual C++ 2010 and later.
- Fixed build on Solaris 12.5 in C++11 mode (thanks to Nick Glass).
Instruments and pricing engines
- Fix CDS calculation when the start date falls during the week-end (thanks to Guillaume Horel).
- Allow construction of a
ForwardRateAgreement
instance even if the interest-rate curve is not yet linked (thanks to Tom Anderson).
Cash flows and interest rates
- Added Mosprime, Pribor, Robor and Wibor indices (thanks to Matthias Lungwitz).
- Improved performance of Black pricer for LIBOR coupons (thanks to Peter Caspers).
- Fixed experimental quanto coupon pricer (thanks to Peter Caspers).
- Revised experimental CMS-spread coupon pricer (thanks to Peter Caspers).
Models
- Improvements for the experimental generalized Hull-White model (thanks to Roy Zywina).
- Fixed drift in GSR process (thanks to Peter Caspers for the fix and to Seung Beom Bang for the heads up).
- Fixed an out-of-bound access in the
TwoFactorModel::ShortRateDynamics::process
method (thanks to Weston Steimel).
Finite differences
- Improved Black-Scholes mesher for low volatilities and high discrete dividends (thanks to Klaus Spanderen).
- Added method-of-lines scheme (thanks to Klaus Spanderen).
Date/time
- Schedule::until can now be used with schedules built from vectors of dates (thanks to GitHub user Grant6899).
- Added Good Friday to the list of Hungarian and Czech holidays (thanks to Matthias Lungwitz).
- Updated the list of Turkish holidays after 2014 (thanks to Matthias Lungwitz).
Math
- Added convenience operators to initialize array and matrices (thanks to Peter Caspers).
Test suite
- Added test case for CIR++ model (thanks to Klaus Spanderen).
Thanks go also to Jose Aparicio, Roland Kapl and GitHub user lab4quant for smaller fixes and enhancements.
1.12.1
Changes for QuantLib 1.12.1:
QuantLib 1.12.1 is a bug-fix release for version 1.12.
It fixes an error that would occur during initialization of the test suite when using the newly released Boost 1.67.0 (see #446 for details). Thanks to Klaus Spanderen for the prompt fix.
The library code is unchanged from version 1.12.
1.12
Changes for QuantLib 1.12:
QuantLib 1.12 includes 54 pull requests from several contributors.
The most notable changes are included below. A detailed list of changes is available in ChangeLog.txt and at https://github.com/lballabio/QuantLib/milestone/7?closed=1.
Portability
- As announced in the previous release, support for the Dev-C++ IDE was removed.
- In April 2018, Microsoft will end its support for Microsoft Visual C++ 2008. Therefore, this is the last version of QuantLib to support it with maintained project files. The next release will only contain project files for Visual C++ 2010 and later.
- It is now possible to build a usable library with CMake on Windows (thanks to Javier G. Sogo).
- Fix autotools build outside the source tree (thanks to Joshua Ulrich).
Instruments and pricing engines
- Added OAS calculation to experimental callable bonds (thanks to Bojan Nikolic).
- Avoided infinite loop for some sets of parameters in experimental variance-gamma engine (thanks to Roy Zywina).
Cash flows
- It is now possible to build a cash-flow leg from a schedule created from a precalculated vector of dates (thanks to Peter Caspers).
Models
- Affine models can now be used to bootstrap a default-probability curve (thanks to Jose Aparicio).
- Added Andreasen-Huge volatility interpolation and local volatility calibration (thanks to Klaus Spanderen).
- Added Rannacher smoothing steps for Heston stochastic local volatility calibration (thanks to Klaus Spanderen).
Term structures
- Added L2 penalty to fitted parameters of fitted bond discount curve (thanks to Robin Northcott).
- Added an optional trading calendar to the FX-swap rate helper and and optional payment lag to the OIS rate helper (thanks to Wojciech Slusarski).
- Fixed inconsistent treatment of strike in experimental CPI cap/floor term price surface (thanks to Francis Duffy).
- Correctly handled the case of overlapping strike regions for caps and floors in experimental CPI cap/floor term price surface (thanks to Peter Caspers).
- Fixed calculation of seasonality correction for interpolated inflation indexes (thanks to Francis Duffy).
- Implemented composite zero-yield curve as combination of two existing curves via a given binary function (thanks to Francois Botha).
- Fixed interpolation of shift in swaption volatility matrix (thanks to Peter Caspers).
Date/time
- Updated Chinese calendar for 2018 (thanks to Cheng Li).
- Added Botswana calendar (thanks to Francois Botha).
- Fixed a few problems with US calendars (thanks to Mike DelMedico and to GitHub user ittegrat).
- User-added holidays now work correctly when intraday calculations are enabled (thanks to Klaus Spanderen for the fix and to GitHub user volchemist for the report).
Math
- Fixed monotonicity of Fritsch-Butland and prevented NaNs in some cases (thanks to GitHub user Grant6899 for the fix and to Tom Anderson for the report).
Deprecated features
- The ChiSquareDistribution, NonCentralChiSquareDistribution, InverseNonCentralChiSquareDistribution and GammaDistribution were renamed to CumulativeChiSquareDistribution, NonCentralCumulativeChiSquareDistribution, InverseNonCentralCumulativeChiSquareDistribution and CumulativeGammaDistribution, respectively (thanks to GitHub user IGonza). The old names are still available as typedefs and will be removed in a future release.
Thanks go also to Marco Craveiro, Dirk Eddelbuettel, Lakshay Garg, Guillaume Horel, Alix Lassauzet, Patrick Lewis, and GitHub users bmmay, bingoko and tournierjc for smaller fixes and enhancements.
1.11
Changes for QuantLib 1.11:
QuantLib 1.11 includes 47 pull requests and fixed issues from several contributors.
The most notable changes are included below. A detailed list of changes is available in ChangeLog.txt and at https://github.com/lballabio/QuantLib/milestone/6?closed=1.
Portability
- This is the last version of QuantLib to support the now obsolete Dev-C++ IDE with a maintained project file. The project will be removed in next release.
Instruments and pricing engines
- Added ISDA pricing engine for credit default swaps (thanks to Guillaume Horel, Jose Aparicio and Peter Caspers).
- Added Andersen-Piterbarg engine for the Heston model (thanks to Klaus Spanderen).
- Improved experimental vanna-volga engine for double-barrier knock-in options (thanks to Giorgio Pazmandi).
- Added theta calculation to experimental Kirk spread-option engine (thanks to Krzysztof Wos).
Cash flows
- Added optional payment lag to fixed, floating and OIS legs (thanks to Fabrice Lecuyer and Joseph Jeisman).
- Fixed yield calculation with 30/360 US day count convention and settlement on the 31st of the month (thanks to Frank Xue).
Models
- Added adaptive successive over-relaxation method for implied volatility calculation (thanks to Klaus Spanderen).
Indexes
- Fixed day-count convention and spot lag for CAD LIBOR (thanks to Oleg Kulkov).
Term structures
- Optionally optimize setting up OIS helpers (thanks to Peter Caspers).
Date/time
- Added Actual/365 Canadian day count convention (thanks to Andrea Maggiulli).
Math
- Added GMRES iterative solver for large linear systems (thanks to Klaus Spanderen).
- Updated Hong Kong calendar up to 2020 (thanks to Nicholas Bertocchi and Alix Lassauzet).
Build
- Added configure switch to enable unity build.
Test suite
- Added
--fast
and--faster
flags to the test-suite executable. When passed, slower tests are discarded so that the test suite runs in just a few minutes.
Deprecated features
- Remove the
HestonExpansionEngine::numberOfEvaluations
method (deprecated in version 1.9). - Remove the
MixedLinearCubicInterpolation
andMixedLinearCubic
constructors not specifying the behavior of the mixed interpolation (deprecated in version 1.8). - Remove deprecated overloads of the
Swaption::impliedVolatility
andCapFloor::impliedVolatility
methods (deprecated in version 1.9). - Remove
NoArbSabrModel::checkAbsorptionMatrix
method (deprecated in version 1.8.1).
1.10.1
Changes for QuantLib 1.10.1:
QuantLib 1.10.1 is a bug-fix release for version 1.10.
- Prevented a name clash when using the newly-released Boost 1.65.0 with g++ 6.3.
- Added a few missing function declarations in the SwaptionVolatilityStructure class (thanks to Peter Caspers).