Releases: lballabio/QuantLib
1.10
Changes for QuantLib 1.10:
QuantLib 1.10 includes 59 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/5?closed=1.
Portability
- Added support for the recently released Visual Studio 2017.
- Unified Visual Studio solution file. The provided QuantLib.sln file works for all versions from 2010 to 2017.
- Added support for the recently released Boost 1.64.0 (thanks to Klaus Spanderen).
- Converted non-ASCII characters in source files to UTF-8; this should make them work with most editors (thanks to Krzysztof Woś and Jose Aparicio).
- Fixed some compilation issues with older versions of the Sun CC compiler and with the gcc 3.4 series. The offending code has simply been disabled; when using those compilers, is also suggested to downgrade Boost to an older version since more recent ones can give problems. Boost 1.54.0 was reported to work. It is likely that no further support will be given to these compilers in future releases.
Instruments and pricing engines
- Added Heston pricing engine based on Fourier-Cosine series expansion (thanks to Klaus Spanderen).
- Added cash annuity model in Black swaption engine (thanks to Peter Caspers, Werner Kuerzinger and Paul Giltinan).
- Add an optional exogenous discount curve to analytic Black European option engine (thanks to Paul Giltinan).
Models
- Added collocating local-volatility model (thanks to Klaus Spanderen).
- Optionally disable Feller constraint in Cox-Ingersoll-Ross model (thanks to Oleksandr Khomenko).
Interest rates
- Allow using an arbitrary solver to calculate yield (thanks to Daniel Hrabovcak).
- Update handling of July 4th for US LIBOR fixings (thanks to Oleg Kulkov for the heads-up).
- Added CompoundingThenSimple convention (thanks to Martin Ross).
Inflation
- Use the lagged reference period to interpolate inflation fixings (thanks to Francois Botha).
Volatility
- Reduce the memory footprint of OptionletStripper1 (thanks to Matthias Lungwitz)
Date/time
- Updated Chinese calendar for 2017 (thanks to Cheng Li).
- Added CDS2015 date-generation rule with the correct semiannual frequency (thanks to Guillaume Horel).
- The Iceland calendar used to incorrectly adjust New Year's Day to the next Monday when falling on a holiday. That's now fixed (thanks to Stefan Gunnsteinsson for the heads-up).
- Fixed bug that prevented correct calculation of an ECB date on the first day of a month (thanks to Nicholas Bertocchi).
- Fixed bug in Schedule that ignored end-of-month convention when calculating reference dates for irregular coupons (thanks to Ryan Taylor).
- Allow passing a schedule to Actual/Actual day counter for correct calculation of reference dates (thanks to Ryan Taylor).
Math
- Added harmonic spline interpolation (thanks to Nicholas Bertocchi).
Examples
- Added examples for global optimizers (thanks to Andres Hernandez).
Deprecated features
- Removed the SwaptionHelper constructors not taking an explicit volatility type (deprecated in version 1.8).
- Removed the SwaptionVolatilityMatrix constructors not taking an explicit volatility type (deprecated in version 1.8).
- Removed the BlackSwaptionEngine constructor overriding the displacement from the given volatility structure (deprecated in version 1.8).
- Removed the FlatSmileSection and InterpolatedSmileSection constructors not taking an explicit volatility type (deprecated in version 1.8).
- Removed the RiskyAssetSwapOption constructor taking a side (deprecated in version 1.8).
Possibly breaking changes
-
The constructors of a few Libor-like indexes were made explicit. This means that code such as the following, which used to compile, will now break. That's probably a good thing.
Handle<YieldTermStructure> forecast_curve; Euribor6M index = forecast_curve;
1.9.2
Changes for QuantLib 1.9.2:
QuantLib 1.9.2 is a bug-fix release for QuantLib 1.9.1.
- Prevented errors in yield-curve bootstrapping tests due to an incorrect test setup (thanks to Peter Caspers for the heads-up).
1.9.1
Changes for QuantLib 1.9.1:
QuantLib 1.9.1 is a bug-fix release for QuantLib 1.9.
- Prevented a linking error when multiple compilation units included the global ql/quantlib.hpp header (thanks to Dirk Eddelbuettel).
- Prevented a compilation error with gcc 4.4 on RedHat (thanks to GitHub user aloupos for the heads-up).
- Prevented a compilation error with the parallel unit runner and the recently released Boost 1.63.0.
1.9
Changes for QuantLib 1.9:
QuantLib 1.9 includes 27 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/3?closed=1.
Portability
- Dropped support for Visual C++ 8 (2005). As of April 2016, the compiler is no longer supported by Microsoft.
- Allow the parallel test runner to work with Boost 1.62 (thanks to Klaus Spanderen for the fix and to Andrei Borodaenko for the heads-up).
Interest rates
- Allow negative jumps in interest-rate curves. Previously, trying to pass one would result in an exception (thanks to Leanpub reader Jeff for the heads-up).
- Added BBSW and Aonia indexes from Australia and BKBM and NZOCR indexes from New Zealand (thanks to Fabrice Lecuyer).
Volatility
- Added normal implied-volatility calculation to caps/floors (thanks to Paolo Mazzocchi).
Instruments
- Fix a scenario in which a
CompositeInstrument
instance would stop receiving notifications (thanks to Peter Caspers for the heads-up). - Added a few safety checks to the CVA swap engine (thanks to Andrea Maggiulli).
- Auto-deactivate Boyle-Lau optimization for barrier options when not using a CRR tree (thanks to Riccardo Ghetta).
Date/time
- Changed data type for
Date
serial numbers toint_fast_32t
to improve performance of date calculations (thanks to Peter Caspers). - Added ECB maintenance period dates for 2017 (thanks to Paolo Mazzocchi).
- Fixed rule for the Japanese Mountain Day holiday (thanks to Eisuke Tani).
- Fixed United States holidays before 1971 (thanks to Nick Glass for the heads-up).
- Added a missing Chinese holiday (thanks to Cheng Li).
- Ensure correct formatting when outputting dates (thanks to Peter Caspers).
New opt-in features
These features are disabled by default and can be enabled by defining a macro or passing a flag to ./configure
. Feedback is appreciated.
- Enable thread-safe singleton initialization (thanks to GitHub user sdgit). The feature can be enabled by uncommenting the
QL_ENABLE_SINGLETON_THREAD_SAFE_INIT
macro inql/userconfig.hpp
on Visual C++ or by passing the--enable-thread-safe-singleton-init
to./configure
on other systems.
Experimental folder
The ql/experimental
folder contains code whose interface is not fully stable, but is released in order to get user feedback. Experimental classes make no guarantees of backward compatibility; their interfaces might change in future releases.
Changes and new contributions for this release were:
- OIS with arithmetic average (thanks to Stefano Fondi). A corresponding bootstrap helpers is also available.
- a function to calculate multi-curve sensitivities (thanks to Michael von den Driesch).
1.8.1
Changes for QuantLib 1.8.1:
QuantLib 1.8.1 is a bug-fix release for version 1.8.
- A test failure with Visual C++ 14 (2015) was avoided. Up to VC++14 update 2, the compiler would inline a call to std::min and std::max incorrectly causing a calculation to fail (thanks to Ivan Cherkasov for the heads-up).
- A test failure with the upcoming Boost 1.62 was avoided. A QuantLib test was checking for the stored value of a hash whose value changed in Boost 1.62.
- Miscellaneous fixes for the g1d swaption engine and instrument (thanks to Peter Caspers).
- Whit Monday was no longer a holiday in Sweden since 2005 (thanks to Stefano Fondi).
- A new holiday for election day 2016 was added to the South African calendar (thanks to Jasen Mackie).
- A few missing CMakeLists were added to the distributed release (thanks to izavyalov for the heads-up).
- An irregular last period in a schedule was not reported as such (thanks to Schmidt for the heads-up).
1.8
Changes for QuantLib 1.8
QuantLib 1.8 includes 45 pull requests from several contributors.
The most notable changes are included below. A detailed list of changes is available in ChangeLog.txt.
Portability
- The minimum required Boost version is now Boost 1.43 (May 2010). However, it is strongly suggested to use a recent version, or at least Boost 1.48 (November 2011).
- Added initial CMake support (thanks to Dmitri Nesteruk). This makes it possible to compile QuantLib on CLion and other CMake-based tools.
- The build now generates and installs pkg-config file on Linux systems (thanks to GitHub user njwhite).
Interest rates
- Fixed links to documentation for LIBOR indexes (thanks to Jose Magana).
Volatility
- Added the possibility to price swaptions and to calculate their implied volatilities in a Black-like model with normal volatilities as well as shifted lognormal (thanks to Peter Caspers).
- Added the possibility to price caps in a Black-like model with normal volatilities as well as shifted lognormal (thanks to Michael von den Driesch).
- Caplet strike is correctly recomputed during stripping (thanks to Michael von den Driesch).
Instruments
- Added basic CVA IRS pricing engine (stand alone, no portfolio; no WWR, no collateral). Thanks to Jose Aparicio.
Models
- Black-Scholes processes now return the closed-formula expectation, standard deviation and variance over long periods (thanks to Peter Caspers).
Currencies
- Added Ukrainian hryvnia (thanks to GitHub user maksym-studenets).
Monte Carlo
- Use different random-number generators for calibration and pricing in Longstaff-Schwartz engine (thanks to Peter Caspers).
Date/time
- Added forecast dates for moving holidays to Saudi Arabia calendar up to 2022 (thanks to Jayanth R. Varma).
- Added new Ukrainian holiday, Defender's Day (thanks to GitHub user maksym-studenets).
- Added a few more holidays for South Korea (thanks to Faycal El Karaa).
Math
- Added mixed log interpolation (thanks to GitHub user sfondi).
- Avoid mixing different types while bit-shifting in fast Fourier transform on 64-bit systems (thanks to Nikolai Nowaczyk).
Deprecated features
- Removed
DateParser::split
method (deprecated in version 1.6).
Test suite
The test suite is now run with a fixed evaluation date instead of using today's date. This helps avoid transient errors due to holidays. It is still possible to use today's date (or any other date) by running it as:
$ quantlib-test-suite -- --date=today
or
$ quantlib-test-suite -- --date=2016-02-08
(Thanks to Peter Caspers.)
New opt-in features
These features are disabled by default and can be enabled by defining a macro or passing a flag to ./configure
. Feedback is appreciated.
- Added a parallel unit-test runner (thanks to Klaus Spanderen). This was successfully used under Linux, but problems were reported on Mac OS X and occasionally on Visual C++ 2010. The feature requires Boost 1.59 or later and can be enabled by uncommenting the
QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER
macro inql/userconfig.hpp
on Visual C++ or by passing the--enable-parallel-unit-test-runner
to./configure
on other systems.
Experimental folder
The ql/experimental
folder contains code which is still not fully integrated with the library or even fully tested, but is released in order to get user feedback. Experimental classes are considered unstable; their interfaces might change in future releases.
Changes and new contributions for this release were:
- Stochastic local-volatility Heston model, (thanks to Klaus Spanderen and Johannes Goettker-Schnetmann). Both a Monte Carlo and a finite-difference calibration and calculation are provided.
- Laplace interpolation (thanks to Peter Caspers).
- Global optimizers: Hybrid Simulated Annealing, Particle Swarm Optimization, Firefly Algorithm, and Differential Evolution (thanks to Andres Hernandez).
- A SVD-based calculation of the Moore-Penrose inverse matrix (thanks to Peter Caspers).
1.7.1
Changes for QuantLib 1.7.1
QuantLib 1.7.1 is a bug-fix release for version 1.7.
- An unneeded dependency on the Boost.Thread library had slipped into version 1.7 and prevented a successful build when the library was not available. The dependency was removed (thanks to GitHub user MattPD).
- Trying to build a schedule with a 4-weeks tenor would fail. This is now fixed (thanks to GitHub user smallnamespace for the heads-up).
- A couple of errors in the list of past holidays for the Russian MOEX calendar was fixed, and the list of holidays for 2016 was added (thanks to Dmitri Nesteruk).
- Chinese holidays for 2016 were updated (thanks to Cheng Li).
- The correct curve is now used when calculating the at-the-money swap rate while building swaptions (thanks to Peter Caspers).
1.7
Changes for QuantLib 1.7:
QuantLib 1.7 includes over 50 pull requests from several contributors.
The most notable changes are included below. A detailed list of changes is available in ChangeLog.txt.
Interest rates
- Added rate helper to bootstrap on cross-currency swaps (thanks to Maddalena Zanzi). The curve to be bootstrapped can be the one for either of the two currencies.
- Added the possibility for bootstrap helpers to define their pillar date in different ways (thanks to Paolo Mazzocchi). For each helper, the date of the corresponding node can be defined as the maturity date of the corresponding instrument, as the latest date used on the term structure to price the instrument, or as a custom date. Currently, the feature is enabled for FRAs and swaps.
- Added the possibility to pass weight when fitting a bond discount curve. Also, it is now possible to fit a spread over an existing term structure (thanks to Andres Hernandez).
Inflation
- Added Kerkhof seasonality model (thanks to Bernd Lewerenz).
- Retrieve inflation fixings from the first day of the month (thanks to Gerardo Ballabio). This avoids the need to store them for each day of the corresponding month.
Volatility
- Improve consistency between caplet stripping and pricing (thanks to Michael von den Driesch)
Instruments
- Fixed usage of dividend yield in double-barrier formula (Thanks to Dean Raf for the heads-up).
- Fixed perturbation formula for barrier options.
Models
- Refine update behavior of GSR model. Depending on the market change, only the appropriate recalculations are performed (thanks to Peter Caspers).
- Improve calibration of Heston model (thanks to Peter Caspers).
Monte Carlo
- Added the possibility to return the estimated exercise probability from a Longstaff-Schwartz engine (thanks to Giorgio Pazmandi).
Settings
- Added the possibility to temporarily disable notifications to observers (thanks to Chris Higgs). When re-enabled, any pending notifications are sent.
Date/time
- Added Romanian and Israelian calendars (thanks to Riccardo Barone).
- Added ECB reserve maintenance periods for 2016 (thanks to Paolo Mazzocchi).
- Updated South Korean calendar until the end of 2032 (thanks to Paolo Mazzocchi and Faycal El Karaa).
- Added new Mountain Day holiday for Japan (thanks to Aaron Stephanic for the heads-up).
- Remove MLK day from list of US holidays before 1983 (thanks to John Orford for the heads-up).
- Added Christmas Eve to BOVESPA holidays (thanks to Daniel Beren for the heads-up).
Math
- Added polynomial and abcd functions.
- Added Pascal triangle coefficients.
- Replaced home-grown implementation of incremental statistics with Boost implementation (thanks to Peter Caspers).
- Added Goldstein line-search method (thanks to Cheng Li).
New opt-in features
These features are disabled by default and can be enabled by defining a macro or passing a flag to ./configure
. Feedback is appreciated.
- Added intraday component to dates (thanks to Klaus Spanderen). Date specifications now include hours, minutes, seconds, milliseconds and microseconds. Day counters are aware of the added data and include them in results. The feature can be enabled by uncommenting the
QL_HIGH_RESOLUTION_DATE
macro inql/userconfig.hpp
on Visual C++ or by passing the--enable-intraday
flag to./configure
on other systems. - Added thread-safe implementation of the Observer pattern (thanks to Klaus Spanderen). This can be used to avoid crashes when using QuantLib from languages (such as C# or Java) that run a garbage collector in a separate thread. The feature requires Boost 1.58 or later and can be enabled by uncommenting the
QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN
macro inql/userconfig.hpp
on Visual C++ or by passing the--enable-thread-safe-observer-pattern
to./configure
on other systems.
1.6.2
Changes for QuantLib 1.6.2:
QuantLib 1.6.2 is a compatibility release. It solves an ambiguous name resolution in the test-suite code when Visual Studio and the newly released Boost 1.59.0 are used together.
The library code did not change.
1.6.1
Changes for QuantLib 1.6.1
QuantLib 1.6.1 is a compatibility release. It adds out-of-the-box support for the newly released Visual Studio 2015, and avoids use of deprecated Boost macros that will be removed in the upcoming Boost 1.59.0 release.
It is otherwise the same as version 1.6.