Skip to content

1.4

Compare
Choose a tag to compare
@lballabio lballabio released this 01 Mar 10:19
· 7685 commits to master since this release

Notable changes for QuantLib 1.4

Portability

  • Boost 1.39 or later is now required. We felt this could be enforced without causing grief to virtually anyone, given that 1.39 was released back in May 2009. We don't expect many people being stuck with an earlier version. This allows one to use make_shared to create shared_ptr instances, which has a number of advantages. Unfortunately, the C++03 implementation (which is still used by a number of older compiler that we're supporting) only allows a maximum of 9 constructor arguments, so we won't be able to use it everywhere.
  • Support for Visual C++ 2003 (VC++7) was dropped. The compiler is now more than 10 years old and no longer supported by Microsoft. Keeping the support is not worth the time and effort required. Anybody who is still stuck with this compiler and needs the support can fork the repository and maintain the changes.
  • Specific support for Visual C++ 2013 (VC++12) is not yet available; however, version checks in the code were relaxed so that one can import and convert the VC++11 solution without causing errors when auto-linking the generated libraries.
  • Fixed Clang warnings.
  • Use deprecated attribute of supported compilers. This replaces the QL_DISABLE_DEPRECATED mechanism that conditionally removes the features and causes the compiler itself to emit warnings if the features are used. The user can enable or disable the warnings by the means provided by the compiler.
  • Allow singletons to work under Visual C++ when CLR is enabled (thanks to Simon Shakeshaft).
  • Fixed compilation errors when using STLport (thanks to Marcello Pietrobon for the heads-up).

Configuration

  • Added switch to enable OpenMP-based parallelism (thanks to Joseph Wang). Currently, this is only used in a few loops in the finite-differences and tree frameworks.

Date/time

  • Added Diamond Jubilee bank holiday to UK calendar.
  • Added Royal Wedding bank holiday to UK calendar (thanks to Whit Armstrong for the heads-up).
  • Added utilities to parse and format a date with the extended format implemented in Boost.Date (thanks to Michael von den Driesch). The previous parsing utility was deprecated.
  • Added Actual/365 (No Leap) day counter (thanks to Nick Glass).
  • Updated most moving holidays for 2014.
  • Fixed a Schedule bug where a combination of backwards generation and end-of-month convention would result in missing or duplicated dates (thanks to Nicholas Manganaro for the heads-up).

Instruments

  • Fixed Delta and Gamma calculation in Ju quadratic engine (thanks to Fabien Le Floc'h).
  • Improved calculation in finite-differences Asian options when the running average is much greater than the forward value (thanks to Klaus Spanderen).
  • Fixed Theta issue for some American FDM engines (thanks to Klaus Spanderen).
  • Fix annuity computation for CMS coupons (thanks to Peter Caspers).
  • Enabled case r=0 in Barone-Adesi/Whaley approximation engine (thanks to Klaus Spanderen).
  • When building a swaption with MakeSwaption, use the fixed tenor of the underlying swap index if none is given explicitly.

Models

  • Allow for calibration of just a subset of a model's parameters. Pre-built constraint are provided for calibration of an Hull-White model while fixing the mean reversion, and for calibration of a Markov functional model while fixing the first component of the piecewise volatility. (Thanks to Peter Caspers.)
  • Allow recalculation of exercise and end dates in swaption and cap helpers when the evaluation date changes (thanks to Peter Caspers).
  • Allowed negative strikes in BlackFormula, as long as the strike plus the displacement is still positive (thanks to Peter Caspers).
  • Added calculation of implied volatility from Bachelier price in BlackFormula (thanks to Gary Kennedy).
  • Added Broadie-Kaya exact simulation schema to Heston model (thanks to Klaus Spanderen).
  • Fixed upper/lower bound calculation for internal constraint in calibrated model (thanks to Peter Caspers).

Cash flows

  • Added support for ex-coupon dates to cashflow calculations (thanks to Nick Glass). Currently, ex-coupons dates can be specified for fixed rate bonds.
  • Fixed calculation of duration and convexity when using Act/Act(ISMA) (thanks to Nick Glass).

Indexes

  • Fixed IborCoupon construction with null fixing days. The coupon was used the passed fixing days instead of the ones previously processed by the base class constructor (thanks to Lisa Ann and Gerardo Ballabio for the heads-up).
  • Add a clone() method to SwapIndex which allows to change the tenor (thanks to Peter Caspers).
  • Ignore inflation-index fixings stored at dates later than the evaluation date.
  • Added utility class for creating custom Region instances to be passed to inflation indexes.

Term structures

  • Prevent some errors when linking a null term structure to a Handle. When settings a null term structure to a Handle used as an underlying for another curve (say, a zero-spreaded curve), the latter tries to reset the jumps in the base class and fails. This error is now trapped. (Thanks to Christoph Breig for the heads-up.)
  • Fix interpolation of option dates in SwaptionVolatilityDiscrete and derived classes when evaluation date changes (thanks to Shen Hui).
  • Piecewise-spreaded curve can now choose interpolation (thanks to Mario Aleppo).

Math

  • Extended Sobol direction numbers up to 21200 dimensions with Joe Kuo 6 searching rule (thanks to Cheng Li).
  • Added class for two-dimensional integration (thanks to Klaus Spanderen).
  • Added Maddock inverse-cumulative normal distribution from Boost (thanks to Klaus Spanderen).
  • Added modified Bessel functions (thanks to Klaus Spanderen).

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:

  • Deprecated features were removed from experimental code.
  • Added initial implementation of catastrophe bond (thanks to Grzegorz Andruszkiewicz).
  • Added Vanna/Volga pricing engine for FX barrier options. Engines were provided for both single- and double-barrier FX options. An analytic engine was also provided for double-barrier equity options (thanks to Yue Tian).
  • Added Hagan pricing engine for irregular swaptions (thanks to Andre Miemiec).
  • Added simulated-annealing optimizer (thanks to Peter Caspers).
  • Added rebated exercise class (thanks to Peter Caspers).
  • Added pricing engine for arbitrary European payoffs under the Heston model (thanks to Klaus Spanderen).
  • Added linear terminal swap rate model pricer for CMS coupons (thanks to Peter Caspers).
  • Reorganized functional Markov model. Added one-factor GSR model, and float/float swap and swaption with a number of corresponding engines. (Thanks to Peter Caspers.)
  • The Levy engine for continuous-averaging Asian option now checks that the averaging period doesn't start in the future. Also, it allows the b=0 case that would raise an exception until now. (Thanks to Klaus Spanderen.)
  • Convertible bond now updates correctly when any of its observables changes.
  • Extended generalized Hull-White model (thanks to Cavit Hafizoglu). The model now allows to choose the mapping function between short rate and state variable, and includes the case of constant parameters.