Skip to content

Releases: lballabio/QuantLib

1.36

14 Oct 07:14
v1.36
66a8487
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.36:

QuantLib 1.36 includes 34 pull requests from several contributors.

Some of 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/34?closed=1.

Portability

  • New minimum C++ standard: starting from this release, a compiler supporting C++17 is required. Passing --enable-std-classes to configure now causes std::any and std::optional to be used.
  • End of support: related to the above, and as announced since release 1.32, this release drops support Visual C++ 2015, g++ up to version 6.x, and clang up to version 4. Also, given the testing environments available on GitHub actions, clang 5 and 6 are no longer available to us for testing, and the same holds for g++ 7. Therefore, it is suggested to upgrade to a newer version if possible.
  • End of support: this release also removes the configure switch that allowed to use boost::tuple, boost::function and boost::bind instead of their std counterparts; the std classes were already the default since release 1.32. The corresponding classes in the ext namespace are now deprecated.
  • Future change of default: in a couple of releases, we're going to switch the default for ext::any and ext::optional from the Boost implementation to the standard one.

Dates and calendars

  • Added startOfMonth and isStartOfMonth methods to both Date and Calendar; thanks to Francois Botha (@igitur).
  • Added specialized Warsaw Stock Exchange (WSE) calendar to Poland; thanks to Marcin Bogusz (@marcinfair).
  • Added a new one-off holiday to South Korean calendar; thanks to Jongbong An (@jongbongan).

Cash flows

  • Made OvernightIndexedCouponPricer public and renamed to CompoundingOvernightIndexedCouponPricer, and moved ArithmeticAveragedOvernightIndexedCouponPricer from experimental to core library; thanks to Ralf Konrad Eckel (@ralfkonrad).

Indexes

  • Possibly breaking: inherited the Index class from Observer and added a virtual pastFixing method. If you inherited a class from both Index and Observer, change your code to avoid inheriting twice from Observer. Thanks to Ralf Konrad Eckel (@ralfkonrad).
  • Added currency information to EquityIndex; thanks to Ralf Konrad Eckel (@ralfkonrad).

Inflation

  • Inflation indexes are now better at deciding when to forecast (@lballabio); also added a needsForecast method that makes the information available.
  • Added CPI::laggedYoYRate; also, YoYInflationCoupon, yoyInflationLeg, CappedFlooredYoYInflationCoupon, YearOnYearInflationSwap, MakeYoYInflationCapFloor, YearOnYearInflationSwapHelper, YoYOptionletHelper and the experimental YoYCapFloorTermPriceSurface and InterpolatedYoYCapFloorTermPriceSurface can now take an explicit CPI::InterpolationType parameter instead of relying on the index being defined as interpolated or not (@lballabio). This is a first step in removing interpolation from YoYInflationIndex and moving it into the coupons where it belongs.
  • Added method to YoY inflation index returning the date of the last available fixing (@lballabio).

Term structures

  • Allow passing a pricer to the constructor of the OISRateHelper and DatedOISRateHelper classes (@lballabio); this makes it possible to use arithmetic averaging of overnight rates.
  • Allow custom constraint in non-linear fitting methods; thanks to Kai Lin (@klin333).
  • Allow creating a swap helper with frequency "Once" (@lballabio).
  • The GlobalBootstrap constructor can now take an optional optimizer and end criteria, allowing for better configuration; thanks to Eugene Toder (@eltoder).

Volatility

  • Added exact Bachelier implied-vol formula from Jäckel's paper; thanks to Peter Caspers (@pcaspers).

Deprecated features

  • Removed features deprecated in version 1.31:
    • the BlackVanillaOptionPricer typedef;
    • the constructors of CPICoupon taking a spread parameter, its spread method, and its protected spread_ data member;
    • the withSpreads method of CPILeg;
    • the protected adjustedFixing method and spread_ data member of CPICouponPricer;
    • the YYAUCPIr, YYEUHICPr, YYFRHICPr, YYUKRPIr, YYUSCPIr and YYZACPIr indexes and the experimental YYGenericCPIr class;
    • the constructor of YoYInflationIndex taking a ratio parameter;
    • a couple of constructors of ForwardRateAgreement;
    • the empty files ql/math/curve.hpp, ql/math/lexicographicalview.hpp, ql/termstructures/yield/drifttermstructure.hpp and ql/patterns/composite.hpp;
    • the const_iterator and const_value_iterator typedefs in the Garch11 class;
    • the const_time_iterator, const_value_iterator, const_reverse_time_iterator and const_reverse_value_iterator typedefs and the cbegin_values, cend_values, crbegin_values, crend_values, cbegin_time, cend_time, crbegin_time and crend_time methods of the TimeSeries class;
    • the base, increment, decrement, advance and distance_to method of the step_iterator class.
  • Deprecated ext::function, ext::bind, ext::ref, ext::cref, ext::placeholders, ext::tuple, ext::make_tuple, ext::get and ext::tie; use the corresponding std:: classes and functions instead.
  • Deprecated the ArithmeticAverageOIS, MakeArithmeticAverageOIS and ArithmeticOISRateHelper classes; use OvernightIndexedSwap, MakeOIS and OISRateHelper instead.
  • Deprecated the YoYInflationCoupon, yoyInflationLeg, CappedFlooredYoYInflationCoupon, YearOnYearInflationSwap, MakeYoYInflationCapFloor, YearOnYearInflationSwapHelper, YoYOptionletHelper, YoYCapFloorTermPriceSurface and InterpolatedYoYCapFloorTermPriceSurface constructors that don't take an explicit CPI interpolation type.
  • Deprecated the getInfo method of LevenbergMarquardt; inspect the result of minimize instead.
  • Deprecated the ql/experimental/averageois/averageoiscouponpricer.hpp file; include ql/cashflows/overnightindexedcouponpricer.hpp instead.
  • Deprecated the somewhat out-of-scope and experimental CreditRiskPlus, SensitivityAnalysis, aggregateNPV, parallelAnalysis and bucketAnalysis.

Thanks go also to Jonathan Sweemer (@sweemer), Eugene Toder (@eltoder), Ralf Konrad Eckel (@ralfkonrad), Tony Wang (@twan3617) and the XAD team (@auto-differentiation-dev) for miscellaneous smaller fixes, improvements or reports.

New Contributors

Full Changelog: v1.35...v1.36

1.35

23 Jul 07:00
v1.35
8e1f4ac
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.35:

QuantLib 1.35 includes 32 pull requests from several contributors.

Some of 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/33?closed=1.

Portability

  • Future end of support: as announced since release 1.32, this release is the last to support Visual C++ 2015, g++ up to version 6.x, and clang up to version 4; support for those compilers will be dropped in next release, 1.36, about three months from now. From that point onwards, this will allows us to enable the use of C++17 in the code base. Also, given the testing environments available on GitHub actions, clang 5 and 6 are no longer available to us for testing, and the same holds for g++ 7. Therefore, it is suggested to upgrade to a newer version if possible.
  • Future end of support: at the same time as the above, we'll also remove the configure switch that allows to use boost::tuple, boost::function and boost::bind instead of their std counterparts; the std classes are already the default since release 1.32.
  • The config.hpp generated by cmake now behaves like the one generated by autotools and provides values for the defines so that they can be used in static_assert (@lballabio). Thanks to Tom Anderson (@tomwhoiscontrary) for the heads-up.

Calendars

  • Some fixes for the Chilean calendar; thanks to Eugene Toder (@eltoder).
  • Better NFP/SIFMA rule for Good Friday in U.S. government bond calendar; thanks to Eugene Toder (@eltoder).
  • Updated Indian NSE holidays for 2024; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Some fixes for the Mexican calendar; thanks to Lucas Dias (@lukedays).

Cash flows

  • Added lookback days, lockout days and observation shift to overnight-indexed coupons; thanks to Marcin Rybacki (@marcin-rybacki). The same parameters were propagated to overnight-indexed swaps and to the corresponding helpers.
  • Added the hasFixed method to IBOR coupons that detects whether they have fixed or still need to be forecast; thanks to Tom Anderson (@tomwhoiscontrary).

Instruments

  • Overnight index futures didn't manage a start date falling on a holiday; this is now fixed (@lballabio). Thanks to GitHub user @JustCallMeDavid for the heads-up.
  • Callable bonds didn't account for nominal when calculating OAS; this is now fixed. Thanks to Hristo Raykov (@HristoRaykov).
  • For European swaption, sometimes the price is quoted as a forward price to be paid at exercise time. Such a quoted price can now be used for implied-volatility calculation. The forward price is also returned by the Black and Bachelier swaption engines as an additional result (@lballabio).

Random numbers

  • Added the fast ZigguratGaussianRng generator; thanks to Ralf Konrad Eckel (@ralfkonrad).

Term structures

  • Fix treatment of custom end date in FuturesRateHelper (@lballabio).
  • Add possibility to reset guess in fitted bond curves (@lballabio). Thanks to GitHub user @klin333 for the suggestion.

Utilities

  • Overloaded Handle and RelinkableHandle constructors on lvalue and rvalue references for performance; thanks to Jonathan Sweemer (@sweemer).

Tools

  • Better benchmark utility; thanks to Jacques du Toit (@amd-jadutoit).

Examples

Deprecated features

  • Removed features deprecated in version 1.30:
    • the DividendVanillaOption and DividendBarrierOption classes;
    • the constructor of AnalyticDividendEuropeanEngine taking only a process and no dividends;
    • the SwaptionVolCube1, SwaptionVolCube1a, SwaptionVolCube1x and SwaptionVolCube2 typedefs and the empty headers ql/experimental/volatility/swaptionvolcube1.hpp, ql/experimental/volatility/swaptionvolcube1a.hpp and ql/experimental/volatility/swaptionvolcube2.hpp;
    • the setCommon method of CappedFlooredYoYInflationCoupon.
  • Deprecated the constructor of DatedOISRateHelper taking a forward start; use the other overload instead.
  • Deprecated the specialized Bibor9M, Euribor2W, Euribor3W, Euribor2M, Euribor4M, Euribor5M, Euribor7M, Euribor8M, Euribor9M, Euribor10M, Euribor11M, Euribor365_SW, Euribor365_2W, Euribor365_3W, Euribor365_1M, Euribor365_2M, Euribor365_3M, Euribor365_4M, Euribor365_5M, Euribor365_6M, Euribor365_7M, Euribor365_8M, Euribor365_9M, Euribor365_10M, Euribor365_11M, Euribor365_1Y, EURLiborSW, EURLibor2W, EURLibor2M, EURLibor4M, EURLibor5M, EURLibor7M, EURLibor8M, EURLibor9M, EURLibor10M, EURLibor11M; if needed, use the corresponding generic class and pass the tenor (for instance, Euribor(4 * Months)).
  • Renamed EuriborSW to Euribor1W and deprecated the old name.
  • Deprecated the constructor of RelinkableHandle taking a raw pointer.

Thanks go also to Dmitri Goloubentsev (@DmitriGoloubentsev), Eleanor Green (@eleanorTurintech), Tom Anderson (@tomwhoiscontrary), Peter Caspers (@pcaspers), Jonghee Lee (@nistick21), Ralf Konrad Eckel (@ralfkonrad) and the XAD team (@auto-differentiation-dev) for miscellaneous fixes, improvements or reports.

New Contributors

Full Changelog: v1.34...v1.35

1.34

24 Apr 08:07
v1.34
35fba52
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.34:

QuantLib 1.34 includes 35 pull requests from several contributors.

Some of 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/32?closed=1.

Portability

  • Future end of support: as announced in release 1.32, we're targeting next release (1.35) as the last to support Visual C++ 2015, g++ up to version 6.x, and clang up to version 4; support for those compilers will be dropped in release 1.36, about six months from now. From that point onwards, this will allows us to enable the use of C++17 in the code base. Also, given the testing environments available on GitHub actions, clang 5 is already no longer available to us for testing, and in a while the same will hold for clang 6 and g++ 7. Therefore, it is suggested to upgrade to a newer version if possible.
  • Future end of support: at the same time as the above, we'll also remove the configure switch that allows to use boost::tuple, boost::function and boost::bind instead of their std counterparts; the std classes are already the default since release 1.32.
  • Generate and install pkg-config files in CMake builds; thanks to GitHub user @jez6.

Dates and calendars

  • Prevent Calendar::advance from returning the business end of month (instead of the calendar end) when endOfMonth is true and convention is Unadjusted; thanks to GitHub user @DeimosXing.
  • Add good Friday holiday for SOFR fixing; thanks to GitHub user @PaulXiCao.
  • Properly restrict São Paulo city holiday to years before 2022; thanks to Marco Bruno Ferreira Vasconcellos (@marcobfv).
  • Update holidays for 2023 and 2024 in calendars for India, Thailand, Singapore and South Africa; thanks to Fredrik Gerdin Börjesson (@gbfredrik).

Cash flows

  • Fixed a couple of cases in which notifications were not forwarded properly; thanks to GitHub user @djkrystul for the heads-up.
  • Fixed past payment dates and added support for OIS in LinearTsrPricer; thanks to Peter Caspers (@pcaspers).

Instruments

  • Swaptions can now take an OIS as underlying; thanks to Guillaume Horel (@thrasibule) and Peter Caspers (@pcaspers). So far, only BlackSwaptionEngine manages OIS explicitly; other engines might work and return approximated values.
  • More methods in MakeOIS and MakeVanillaSwap; thanks to Eugene Toder (@eltoder).
  • More methods in the BondFunctions class now support either clean or dirty prices; thanks to Francois Botha (@igitur).
  • The basisPointValue and yieldValueBasisPoint methods in BondFunctions didn't always manage the settlement date correctly; this is now fixed (thanks to GitHub user @jez6).
  • Add Custom to Futures::Type enumeration to allow passing custom dates to futures; thanks to Eugene Toder (@eltoder).

Term structures

  • Inflation curves can now be built passing an explicit base date (corresponding to the last published fixing) instead of an observation lag (@lballabio).
  • Fixed calculation of year fraction under Actual/365 Canadian convention in FuturesRateHelper; thanks to GitHub user @PaulXiCao.
  • Fixed settlement date calculation in cross-currency basis-swap rate helpers in some cases; thanks to Marcin Rybacki (@marcin-rybacki) for the fix and to Aleksis Ali Raza for the heads-up.

Math

  • Handle non-equidistant grids and arbitrary dimensions in Laplace interpolation; thanks to Peter Caspers (@pcaspers).

Deprecated features

  • Removed features deprecated in version 1.29:
    • The argument_type, first_argument_type, second_argument_type and result_type typedefs in several classes;
    • The overloads of zero-rate inflation index constructors taking an interpolated argument;
    • The interpolated method and the protected interpolated_ data member in InflationIndex;
    • The overload of CashFlows::npvbps taking the result by reference;
    • The protected rateCurve_ method in InflationCouponPricer;
    • The ThreadKey typedef;
    • The empty header ql/experimental/credit/riskybond.hpp.
  • Deprecated the constructors of InflationTermStructure, ZeroInflationTermStructure, YoYInflationTermStructure, InterpolatedZeroInflationCurve, InterpolatedYoYInflationCurve, PiecewiseZeroInflationCurve and PiecewiseYoYInflationCurve taking an observation lag; use the overloads taking an explicit base date instead.
  • Deprecated the Bond::yield, BondFunctions::atmRate, BondFunctions::yield and BondFunctions::zSpread overloads taking a clean price as a number; use the overloads taking a Bond::Price instead.
  • Deprecated the InflationTermStructure::setSeasonality overload taking no arguments; use the overload taking a pointer and pass an empty one to remove seasonality.
  • Deprecated the InflationTermStructure::setBaseRate method; set baseRate_ directly if needed.
  • Deprecated the Swaption::underlyingSwap and SwaptionHelper::underlyingSwap methods; use underlying instead.
  • Deprecated the broken FixedRateBondHelper::fixedRateBond and CPIBondHelper::cpiBond methods and the corresponding fixedRateBond_ and cpiBond_ data members.

Thanks go also to Isuru Fernando (@isuruf), Viktor Zhou (@yyuuhhjjnnmm), Stephen Dacek (@sdacek), Yi Jiang (@yjian012), Jonathan Sweemer (@sweemer), Eugene Toder (@eltoder), the XAD team (@auto-differentiation-dev) and GitHub user @PaulXiCao and @klin333 for miscellaneous fixes, improvements or reports.

New Contributors

Full Changelog: v1.33...v1.34

1.33

22 Jan 08:43
v1.33
9b052b1
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.33:

QuantLib 1.33 includes 43 pull requests from several contributors.

Some of 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/31?closed=1.

Portability

  • Future end of support: as announced in release 1.32, we're targeting the future release 1.35 as the last to support Visual C++ 2015, g++ up to version 6.x, and clang up to version 4; support for those compilers will be dropped in release 1.36, about nine months from now. From that point onwards, this will allows us to enable the use of C++17 in the code base.
  • Future end of support: at the same time as the above, we'll also remove the configure switch that allows to use boost::tuple, boost::function and boost::bind instead of their std counterparts; the std classes are already the default since release 1.32.
  • Added CMake presets for Apple; thanks to Christian Köhnenkamp (@kohnech).

Dates and calendars

  • Added New Year's Eve as a holiday to the Chilean calendar; thanks to GitHub user @MoixaStrikes.
  • Added Black Awareness Day as a holiday to the Brazilian calendar starting from 2024; thanks to GitHub user @PaulXiCao.
  • Added Inauguration Day as a holiday to the Mexican calendar starting from 2024; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Added Chinese holidays for 2024; thanks to Cheng Li (@wegamekinglc).
  • Updated list of known ECB dates; thanks to GitHub user @PaulXiCao.
  • Added Thailandese and Taiwanese holidays up to 2024; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Added a one-time holiday to the South African calendar; thanks to Francois Botha (@igitur).

Models

  • Added support for angled contour shift integrals to Heston model; thanks to Klaus Spanderen (@klausspanderen).

Instruments

  • Allow different calendars and frequencies for different legs in MakeOIS and OISRateHelper; thanks to Eugene Toder (@eltoder).
  • Enabled negative payment lag in swap legs; thanks to GitHub user @Stoozy.

Random numbers

  • Added Burley 2020 scrambled Sobol sequence generator; thanks to Peter Caspers (@pcaspers).

Tests

  • Use automated registration of unit tests; thanks to Siddharth Mehrotra (@Sidsky).
  • Added a few fuzzing tests; thanks to Nathaniel Brough (@silvergasp).
  • Improved test coverage for a few classes; thanks to GitHub user @PaulXiCao.

Deprecated features

  • Removed features deprecated in version 1.28:
    • The overload of CallableBond::impliedVolatility taking an NPV as target.
    • The constructor of AmortizingFixedRateBond taking a sinking frequency.
    • The constructor of AmortizingFixedRateBond taking a vector of InterestRate instances.
    • The constructor of FixedRateBond taking start date, maturity date etc. instead of a schedule.
    • The constructor of FixedRateBond taking a vector of InterestRate instances.
    • The constructor of FloatingRateBond taking start date, maturity date etc. instead of a schedule.
    • The constructor of CPICapFloor taking a handle to an interest-rate index.
    • The CPICapFloor::inflationIndex method.
    • The infIndex data member of the CPICapFloor::arguments class.
    • A redundant constructor of SabrSmileSection.
    • The empty headers ql/experimental/amortizingbonds/amortizingcmsratebond.hpp, ql/experimental/amortizingbonds/amortizingfixedratebond.hpp and ql/experimental/amortizingbonds/amortizingfloatingratebond.hpp.
  • Deprecated the constructor of Currency and Currency::Data taking a format string, and the Currency::format method.

Thanks go also to Yi Jiang (@yjian012), Hoang Giap Vu (@hgv79116), Jonathan Sweemer (@sweemer) and the XAD team (@auto-differentiation-dev) for smaller fixes and improvements.

New Contributors

Full Changelog: v1.32...v1.33

1.32

20 Oct 07:33
v1.32
3f9a4f2
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.32:

QuantLib 1.32 includes 34 pull requests from several contributors.

Some of 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/29?closed=1.

Portability

  • Possibly breaking change: the protected evaluationDate_ data member of the SwaptionVolatilityDiscrete class was renamed to cachedReferenceDate_.
  • Future end of support: we're targeting the future release 1.35 as the last to support Visual C++ 2015, g++ up to version 6.x, and clang up to version 4; support for those compilers will be dropped in release 1.36, about one year from now. From that point onwards, this will allows us to enable the use of C++17 in the code base.
  • Future end of support: at the same time as the above, we'll also remove the configure switch that allows to use boost::tuple, boost::function and boost::bind instead of their std counterparts; starting from this release, the std classes are already the default.
  • Reorganized the CMake presets; thanks to the XAD team (@auto-differentiation-dev).

Cash flows

  • All cash flows are now lazy; thanks to Peter Caspers (@pcaspers).

Instruments

  • Overnight-indexed swaps can now have different schedules and nominals on the two legs; thanks to Tom Anderson (@tomwhoiscontrary).
  • Margrabe options, compound options and chooser options were moved from experimental to core (@lballabio).
  • Introduced common base class FixedVsFloatingSwap for vanilla swap and overnight-indexed swaps; this will be used in the future to help a few existing swap engines support OIS (@lballabio).
  • Added optional redemptions argument to amortizing bond constructors. This allows them to be used for pools of loans where a certain proportion of the underlying loans are subject to defaults and losses. Thanks to Gyan Sinha (@gyansinha).
  • It is now possible to manually prune the notification tree for swaps and bonds if one knows that the cashflows won't change pricer; thanks to Peter Caspers (@pcaspers).

Models

  • Fixed the algorithm to add instruments to the calibration set of the Markov model; thanks to Peter Caspers (@pcaspers) for the fix and Giuseppe Trapani (@lePidduN7) for the heads-up.

Term structures

  • Time-to-date conversion in some swaption volatility classes could return the wrong date before the first exercise date; this is now fixed, thanks to Peter Caspers (@pcaspers).
  • It's now possible to specify the maximum number of iteration for the solver inside a bootstrapped term structure; thanks to Jonathan Sweemer (@sweemer) for the change and Daniel Ángeles Ortiz (@Danie8) for the heads-up.
  • Reduced the number of notifications for bootstrap helpers; thanks to Peter Caspers (@pcaspers).

Random numbers

  • Added the xoshiro265** random-number generator; thanks to Ralf Konrad (@ralfkonrad). It is faster than the Mersenne Twister and might be used as default in the future.

Examples

  • The code of the examples has been modernized a bit; thanks to Jonathan Sweemer (@sweemer).

Patterns

  • Avoided a possible crash when using observables in a multi-threaded setting; thanks to Peter Caspers (@pcaspers).

Deprecated features

  • Removed features deprecated in version 1.27:
    • The QL_NULL_INTEGER, QL_NULL_REAL, QL_NOEXCEPT, QL_CONSTEXPR and QL_USE_STD_UNIQUE_PTR macros.
    • The MultiCurveSensitivities class.
    • The constant, identity, square, cube, fourth_power, add, subtract, subtract_from, multiply_by, divide, divide_by, less_than, greater_than, greater_or_equal_to, not_zero, not_null, everywhere, nowhere, equal_within, clipped_function, clip, composed_function, compose, binary_compose3_function and compose3 functors.
    • The PdeShortRate, ShoutCondition, FDShoutCondition, FDStepConditionEngine and FDEngineAdapter classes from the old finite-differences framework.
    • The dsd::inner_product function.
    • The FDDividendEngineBase, FDDividendEngineMerton73, FDDividendEngineShiftScale and FDDividendEngine pricing engines.
    • The empty headers ql/auto_ptr.hpp, ql/math/initializers.hpp, ql/methods/finitedifferences/americancondition.hpp, ql/methods/finitedifferences/onefactoroperator.hpp, ql/pricingengines/vanilla/fddividendshoutengine.hpp, ql/pricingengines/vanilla/fdshoutengine.hpp and ql/utilities/disposable.hpp.
  • Deprecated the overload of the withReplication method in the DigitalIborLeg, DigitalCmsLeg and DigitalCmsSpreadLeg classes that takes no arguments; use the other overload instead.
  • Deprecated the StandardFiniteDifferenceModel, StandardSystemFiniteDifferenceModel and StandardStepCondition typedefs; define your own typedefs if needed.
  • Deprecated the FDVanillaEngine, FDMultiPeriodEngine, StepConditionSet, ParallelEvolverTraits, ParallelEvolver and SampledCurveclasses and the BSMTermOperator and SampledCurveSet typedefs; use the new finite-differences framework instead.
  • Deprecated the QL_NULL_FUNCTION macro; to check if a function is empty, use it in a bool context instead.
  • Deprecated the now empty headers ql/experimental/exoticoptions/margrabeoption.hpp, ql/experimental/exoticoptions/analyticcomplexchooserengine.hpp, ql/experimental/exoticoptions/analyticeuropeanmargrabeengine.hpp, ql/experimental/exoticoptions/analyticcompoundoptionengine.hpp, ql/experimental/exoticoptions/simplechooseroption.hpp, ql/experimental/exoticoptions/compoundoption.hpp, ql/experimental/exoticoptions/analyticamericanmargrabeengine.hpp, ql/experimental/exoticoptions/analyticsimplechooserengine.hpp, ql/experimental/exoticoptions/complexchooseroption.hpp, ql/experimental/termstructures/multicurvesensitivities.hpp, ql/methods/finitedifferences/shoutcondition.hpp, ql/methods/finitedifferences/pdeshortrate.hpp, ql/pricingengines/vanilla/fddividendengine.hpp, ql/pricingengines/vanilla/fdstepconditionengine.hpp, ql/pricingengines/vanilla/fdconditions.hpp and ql/models/marketmodels/duffsdeviceinnerproduct.hpp.

Thanks go also to Jonathan Sweemer (@sweemer), Ralf Konrad (@ralfkonrad), Klaus Spanderen (@klausspanderen), Peter Caspers (@pcaspers), Tom Anderson (@tomwhoiscontrary), Fredrik Gerdin Börjesson (@gbfredrik), Guillaume Horel (@thrasibule) and the XAD team (@auto-differentiation-dev) for a number of smaller fixes and improvements.

New Contributors

Full Changelog: v1.31.1...v1.32

1.31.1

24 Jul 08:23
v1.31.1
c5e65ea
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.31.1:

QuantLib 1.31.1 is a bug-fix release for QuantLib 1.31.

It fixes a regression that could cause a segmentation fault when bootstrapping an interest-rate curve using OIS rates.

Details are available at https://github.com/lballabio/QuantLib/milestone/30?closed=1.

Full Changelog: v1.31...v1.31.1

1.31

18 Jul 12:39
v1.31
3855164
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.31:

QuantLib 1.31 includes a record 68 pull requests from several contributors.

Some of 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/28?closed=1.

Portability

  • Future end of support: as announced in the notes for the previous release, after this release using std::tuple, std::function and std::bind (instead of their boost counterparts) will become the default. If you're using ext::tuple etc. in your code (which is suggested), this should be a transparent change. If not, you'll still be able to choose the boost versions via a configure switch for a while; but we do suggest you start using ext::tuple etc. in the meantime.
  • The cmake build now creates (but doesn't install) a quantlib-config script that can be used to retrieve flags for compiling QuantLib-dependent projects; thanks to Christian Köhnenkamp (@kohnech).
  • A number of Boost classes and functions only used internally were replaced by their standard-library equivalent; thanks to Jonathan Sweemer (@sweemer).

Patterns

  • Optional change of behavior: by default, the LazyObject class forwards only one notification after recalculating and silently ignores the others. In some edge cases, this could lead to objects not being updated. It's now possible to enable a different behavior where all notifications are forwarded; the new behavior can be chosen at compile time via the configure option --disable-faster-lazy-objects (or disabling QL_FASTER_LAZY_OBJECTS in cmake or userconfig.hpp) or at run time by calling LazyObject::Defaults::instance().alwaysForwardNotifications(). This might cause a slow down, so you're invited to try it out and report on the mailing list. If there are no problems, the new behavior might become the default in future releases. Also, a new configure option --enable-throwing-in-cycles (QL_THROW_IN_CYCLES in cmake or userconfig.hpp) is optionally available; when both this option and the new behavior are enabled, notifications cycles involving a lazy object will throw an exception. It is suggested to try enabling the option and removing such loops, if any. Thanks to Peter Caspers (@pcaspers) for the change and to Ralf Konrad (@ralfkonrad), Jonathan Sweemer (@sweemer) and GitHub user @djkrystul for feedback.

Date/time

  • Change of behavior: when the end-of-month option is true, the constructor of a schedule no longer adjust to the end of their month the effective date and the termination date if they were passed explicitly. Thanks to Hristo Raykov (@HristoRaykov).
  • Added separate US SOFR calendar to manage days that are business days for the US government bond market but in which SOFR doesn't fix; for instance, Good Friday 2023 (@lballabio). Thanks to Tom Anderson (@tomwhoiscontrary) for reporting the issue.
  • Fixed some rolling rules for South Korean calendar; thanks to Jonghee Lee (@nistick21).
  • Fixed incorrect 2023 holidays for Hong Kong calendar; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Added Hong Kong holidays for 2021-2024; thanks to Rémy Frèrebeau (@rfrerebe-stx) and Binrui Dong (@BrettDong).
  • Added Singapore holidays for 2019-2023; thanks to Rémy Frèrebeau (@rfrerebe-stx).
  • Added Indian holidays for 2021-2025; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Added Taiwanese holidays for 2020-2023; thanks to @jsmx.
  • Added a few election days for South African and South Korean calendar; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Updated Danish calendar; starting in 2024, General Prayer Day will no longer be a holiday. Thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Fixed a few holidays in Finland and Singapore calendars; Thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • More day counters (Act/364, Act/365.25, Act/366) now take into account intraday resolution when enabled; thanks to Klaus Spanderen (@klausspanderen).

Cash flows

  • The accrued amount for CPI coupons is now correctly based on the index ratio at settlement date. An inspector for retrieving the index ratio at a given date was also added (@lballabio).
  • Enabled the use of normal volatilities in Hagan pricer for CMS coupons; thanks to Andre Miemiec (@amiemiec).
  • Floating-rate coupons are now lazy; thanks to Peter Caspers (@pcaspers).

Indexes

  • When passed a tenor of 7 or 14 business days, interest-rate indexes would wrongly convert it to 1 or 2 weeks. This is now fixed (@lballabio). Thanks to Eugene Toder (@eltoder) for reporting the issue.
  • Added DESTR and SWESTR indexes; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Added CORRA index; thanks to @AND2797.
  • When an YoY inflation index is calculated as a ratio, the underlying inflation index is available through an inspector and its fixings are used to calculate the fixing of the YoY index (@lballabio).

Instruments

  • Instruments now register automatically with the global evaluation date and are notified when it changes. This makes sense in general (if the evaluation date changes, you probably want to recalculate) and can also help avoid some edge cases when lazy objects only forward their first notification (@lballabio).
  • Allowed passing a schedule without a regular tenor to callable fixed-rate bonds; thanks to Hristo Raykov (@HristoRaykov) for the fix and to @OleBueker for reporting the issue.
  • Reorganized the constructors of FRA instruments; thanks to Jake Heke (@jakeheke75).

Term structures

  • Ensures that upfront CDS helpers update correctly when the global evaluation date changes; thanks to Andrea Pellegatta (@andrea85p) for the fix and to @bkhoor for reporting the issue.
  • Allow more maturities for SOFR quarterly contract in SOFR futures rate helper; thanks to Jake Heke (@jakeheke75).
  • Added constructor for date-dependent strikes to StrippedOptionlet; thanks to Peter Caspers (@pcaspers).

Test suite

  • Global settings (such as the evaluation date) are now restored and index fixings are now cleaned automatically at the end of each test case, making it unnecessary to clean them up manually. Thanks to Eugene Toder (@eltoder).
  • The parallel unit-test runner now passes the --run_test=<filter> option down to the underlying Boost.Test implementation. Thanks to Eugene Toder (@eltoder).

Deprecated features

  • Removed features deprecated in version 1.26:

    • The CPICoupon constructor taking a number of fixing days and its indexObservation, adjustedFixing and indexFixing(date) methods.
    • The CPICashFlow constructor taking a fixing date.
    • The withFixingDays methods of CPILeg.
    • The ZeroInflationCashFlow constructor taking a calendar and business-day convention.
    • The LsmBasisSystem::PolynomType typedef and the MakeMCAmericanEngine::withPolynomOrder method.
    • The Observer::set_type and Observable::set_type typedefs.
    • The Curve class.
    • The LexicographicalView class.
    • The Composite class.
    • The DriftTermStructure class.
  • Deprecated the various time_iterator and value_iterator types in TimeSeries, as well as methods returning them. The more general const_iterator and const_reverse_iterator types can be used instead.

  • Deprecated the constructors of CPICoupon taking a spread, as well as its spread method, its protected spread_ data member, and the withSpreads methods of CPILeg.

  • Deprecated the adjustedFixing method and the protected spread_ data member of CPICouponPricer.

  • Renamed BlackVanillaOptionPricer to MarketQuotedOptionPricer and deprecated the old name.

  • Deprecated a couple of constructors of ForwardRateAgreement.

  • Deprecated the constructor of YoYInflationIndex taking a ratio. Also, deprecated explicit classes for YoY ratio indexes YYGenericCPIr, YYAUCPIr, YYEUHICPr, YYFRHICPr, YYUKRPIr, YYUSCPIr and YYZACPIr.

  • Deprecated the base, increment, decrement, advance and distance_to methods of the step_iterator class.

Thanks go also to Jonathan Sweemer (@sweemer), Jose Garcia (@j053g), Jake Heke (@jakeheke75), Eugene Toder (@eltoder), Binrui Dong (@BrettDong), the Xcelerit Dev Team (@xcelerit-dev), Ralf Konrad (@ralfkonrad), Fredrik Gerdin Börjesson (@gbfredrik) and Tom Anderson (@tomwhoiscontrary) for a number of smaller fixes and improvements.

New Contributors

Full Changelog: QuantLib-v1.30...v1.31

1.30

19 Apr 07:15
QuantLib-v1.30
83e5854
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.30:

QuantLib 1.30 includes 34 pull requests from several contributors.

Some of 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/27?closed=1.

Portability

  • Future end of support: as announced in the notes for the previous release, after this release and the next, using std::tuple, std::function and std::bind (instead of their boost counterparts) will become the default. If you're using ext::tuple etc. in your code (which is suggested), this should be a transparent change. If not, you'll still be able to choose the boost versions via a configure switch for a while; but we do suggest you start using ext::tuple etc. in the meantime.
  • CMake builds now use a stricter warning level by default; thanks to Ralf Konrad (@ralfkonrad).
  • Is it now possible to use std::any and std::optional (and the related std::any_cast and std::nullopt) instead of their boost counterparts by setting new compilation switches; thanks to Jonathan Sweemer (@sweemer). Using the std classes requires C++17. We expect the boost classes to remain the default for a while, but in the meantime we encourage to start using ext::any and ext::optional in preparation for a new default.

Date/time

  • Good Friday 2023 is now a business day for the US government bond calendar; thanks to Anastasiia Shumyk (@ashumyk).
  • Added specialized Australian calendar for ASX; thanks to Trent Maetzold (@trentmaetzold).
  • Fixed Turkish holidays between 2019 and 2023; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Added a few missing holidays to Danish calendar; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Added the Matariki holiday to the New Zealand calendar; thanks to Jake Heke (@jakeheke75).

Cashflows

  • Added a new equity cash flow class to model equity legs in total return swaps; thanks to Marcin Rybacki (@marcin-rybacki). Quanto pricing is also supported.
  • Added an overloaded constructor for CPI coupons that allows to specify a base date instead of a base CPI value; thanks to Matthias Groncki (@mgroncki).

Instruments

  • Added a new total-return swap; thanks to Marcin Rybacki (@marcin-rybacki). An equity-index class was also added to support this instrument.
  • The analytic engine for barrier options would return NaN for low values of volatility; this is now fixed (@lballabio).
  • The VanillaOption and BarrierOption classes can now be used to model vanilla and barrier options with discrete dividends; the future dividends (not being part of the terms and conditions of the contract) should be passed to the pricing engine instead (@lballabio).
  • Added analytical Greeks to Bjerksund-Stensland engine; thanks to Klaus Spanderen (@klausspanderen).

Indexes

  • Added UKHICP inflation index; thanks to Fredrik Gerdin Börjesson (@gbfredrik).

Term structures

  • Renamed SwaptionVolCube1, SwaptionVolCube1x, SwaptionVolCube1a and SwaptionVolCube2 to SabrSwaptionVolatilityCube, XabrSwaptionVolatilityCube, NoArbSabrSwaptionVolatilityCube and InterpolatedSwaptionVolatilityCube, respectively; thanks to Ignacio Anguita (@IgnacioAnguita). The old names are deprecated but still available for a few releases.
  • Ensure that inflation curves are re-bootstrapped correctly when seasonality is added (@lballabio).

Models

  • Moved the Heston SLV model from experimental to main; thanks to Klaus Spanderen (@klausspanderen).

Math

  • Added a few overloads to Array and Matrix operators taking rvalue references for increased speed; thanks to Jonathan Sweemer (@sweemer).

Deprecated features

  • Removed features deprecated in version 1.25:
    • the protected spreadLegValue_ data member of BlackIborCouponPricer;
    • the WulinYongDoubleBarrierEngine alias for SuoWangDoubleBarrierEngine;
    • the settlementDate, incomeDiscountCurve, spotIncome, spotValue, impliedYield and forwardValue methods of ForwardRateAgreement, as well as its protected underlyingIncome_, underlyingSpotValue_, settlementDays_, payoff_ and incomeDiscountCurve_ data members;
    • constructors for InflationTermStructure, ZeroInflationTermStructure, InterpolatedZeroInflationCurve, PiecewiseZeroInflationCurve taking an indexIsInterpolated parameter;
    • the indexIsInterpolated method of InflationTermStructure and its protected indexIsInterpolated_ data member;
    • some overloaded constructors of SofrFutureRateHelper.
  • Deprecated the DividendVanillaOption and DividendBarrierOption classes; use VanillaOption and BarrierOption instead (see above).
  • Deprecated the constructor of AnalyticDividendEuropeanEngine that takes no dividend information; use the other overload instead.
  • Deprecated the names SwaptionVolCube1, SwaptionVolCube1x, SwaptionVolCube1a and SwaptionVolCube2 (see above).
  • Deprecated the protected setCommon method of CappedFlooredYoYInflationCoupon.

Thanks go also to Jonathan Sweemer (@sweemer), the Xcelerit Dev Team (@xcelerit-dev), Fredrik Gerdin Börjesson (@gbfredrik), Klaus Spanderen (@klausspanderen) and Peter Caspers (@pcaspers) for a number of smaller fixes and improvements, and to Matthias Groncki (@mgroncki) and @lukey8767 for raising issues.

New Contributors

Full Changelog: QuantLib-v1.29...QuantLib-v1.30

1.29

17 Jan 09:32
QuantLib-v1.29
3857747
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.29:

QuantLib 1.29 includes 42 pull requests from several contributors.

Some of 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/26?closed=1.

Portability

  • End of support: as announced in the notes for the previous release, this release no longer manages thread-local singletons via a user-provided sessionId function, and therefore the latter is no longer needed. Instead, the code now uses the built-in language support for thread-local variables. Thanks go to Peter Caspers (@pcaspers).
  • Future end of support: as announced in the notes for the previous release, after the next couple of releases, using std::tuple, std::function and std::bind (instead of their boost counterparts) will become the default. If you're using ext::tuple etc. in your code (which is suggested), this should be a transparent change. If not, you'll still be able to choose the boost versions via a configure switch for a while; but we do suggest you start using ext::tuple etc. in the meantime.
  • Replaced internal usage of boost::thread with std::thread; thanks to Jonathan Sweemer (@sweemer). This removed our last dependency on Boost binaries and makes it possible to compile QuantLib using a header-only Boost installation.
  • On Windows, it is now possible to use the MSVC dynamic runtime when using cmake by passing -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL on the command line; thanks to Jonathan Sweemer (@sweemer). The static runtime remains the default.
  • It is now possible to build QuantLib with Intel's icpx compiler using cmake; thanks to Jonathan Sweemer (@sweemer). Note that in order to get all the unit tests passing, -fp-model=precise must be added to CMAKE_CXX_FLAGS.

Date/time

  • Updated Chinese holidays for 2023; thanks to Cheng Li (@wegamekinglc).
  • Added in-lieu holiday for Christmas 2022 to South-African calendar; thanks to Joshua Hayes (@JoshHayes).
  • Added King Charles III coronation holiday to UK calendar; thanks to Fredrik Gerdin Börjesson (@gbfredrik).
  • Added holiday for National Day of Mourning to Australian calendar; thanks to Fredrik Gerdin Börjesson (@gbfredrik).

Instruments

  • Added high performance/precision American engine based on fixed-point iteration for the exercise boundary; thanks to Klaus Spanderen (@klausspanderen).
  • Bonds with draw-down (i.e., increasing notionals) are now allowed; thanks to Oleg Kulkov (@Borgomi42 ).
  • Added withIndexedCoupons and withAtParCoupons methods to MakeSwaption for easier initialization; thanks to Ralf Konrad (@ralfkonrad).
  • It is now possible to use the same pricing engine for vanilla and dividend vanilla options, or for barrier and dividend barrier options (@lballabio).

Indexes

  • Creating a zero inflation index as "interpolated" is now deprecated; thanks to Ralf Konrad (@ralfkonrad). The index should only return monthly fixings. Interpolation is now the responsibility of inflation-based coupons.

Term structures

  • The ConstantCPIVolatility constructor can now take a handle to a volatility quote, instead of just an immutable number (@lballabio).

Deprecated features

  • Removed features deprecated in version 1.24:
    • the createAtParCoupons, createIndexedCoupons and usingAtParCoupons methods of IborCoupon;
    • the RiskyBond class and its subclasses RiskyFixedBond and RiskyFloatingBond;
    • the CrossCurrencyBasisSwapRateHelper typedef;
    • the termStructure_ data member of BlackCalibrationHelper;
    • the static baseCurrency and conversionType data members of Money;
    • the nominalTermStructure method and the nominalTermStructure_ data member of InflationTermStructure;
    • the constructor of the UnitedStates calendar not taking an explicit market.
  • Deprecated the argument_type, first_argument_type, second_argument_type and result_type typedefs in a number of classes; use auto or decltype instead.
  • Deprecated the constructors of InflationIndex, ZeroInflationIndex, FRHICP, ZACPI, UKRPI, EUHICP, EUHICPXT, USCPI, AUCPI and GenericCPI taking an interpolated parameter; use another constructor.
  • Deprecated the interpolated method and the interpolated_ data member of InflationIndex.
  • Deprecated the ThreadKey typedef. It was used in the signature of sessionId, which is no longer needed after the changes in the Singleton implementation.
  • Deprecated the rateCurve_ data member of the InflationCouponPricer base class. If you need it, provide it in your derived class.
  • Deprecated the npvbps function taking NPV and BPS as references. Use the overload returning a pair of Reals.

Thanks go also to Matthias Groncki (@mgroncki), Jonathan Sweemer (@sweemer) and Nijaz Kovacevic (@NijazK) for a number of smaller fixes and improvements, to the Xcelerit Dev Team (@xcelerit-dev) for improvements to the automated CI builds, and to Vincenzo Ferrazzanno (@vincferr), @alienbrett, @xuruilong100 and @philippb90 for raising issues.

New Contributors

Full Changelog: QuantLib-v1.28...QuantLib-v1.29

1.28

25 Oct 07:23
QuantLib-v1.28
7bfe85c
Compare
Choose a tag to compare

Downloads:

Changes for QuantLib 1.28:

QuantLib 1.28 includes 33 pull requests from several contributors.

Some of 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/24?closed=1.

Portability

  • New language standard: as announced in the notes for the previous release, this release started using some C++14 syntax. This should be supported by most compilers released in the past several years.
  • End of support: as announced in the notes for the previous release, this release is the last to manage thread-local singletons via a user-provided sessionId function. Future releases will use the built-in language support for thread-local variables.
  • Future end of support: after the next two or three releases, using std::tuple, std::function and std::bind (instead of their boost counterparts) will become the default. If you're using ext::tuple etc. in your code (which is suggested), this should be a transparent change. If not, you'll still be able to choose the boost versions via a configure switch for a while.

Date/time

  • Added Act/366 and Act/365.25 day counters; thanks to Ignacio Anguita (@IgnacioAnguita).
  • Added H.M. the Queen's funeral to the UK calendars; thanks to Tomass Wilson (@Wilsontomass).

Instruments

  • Amortizing bonds were moved out of the experimental folder. Also, a couple of utility functions were provided to calculate amortization schedules and notionals.

Pricing engines

  • Fixed results from COSHestonEngine in the case of an option with short time to expiration and deep ITM or deep OTM strike prices; thanks to Ignacio Anguita (@IgnacioAnguita).
  • The ISDA engine for CDS could calculate the fair upfront with the wrong sign; this is now fixed, thanks to Gualtiero Chiaia (@gchiaia).

Term structures

  • The constructor for OISRateHelper now allows to specify the endOfMonth parameter; thanks to Guillaume Horel (@thrasibule).

Finite differences

  • Fixed computation of cds boundaries in LocalVolRNDCalculator; thanks to @mdotlic.

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.

  • Breaking change: the constructor of the CPICapFloorTermPriceSurface class now also takes an explicit interpolation type.
  • Possibly breaking: the protected constructor for CallableBond changes its arguments. If you inherited from this class, you'll need to update your code. If you're using the existing derived bond classes, the change will be transparent.
  • Pricing engines for callable bonds worked incorrectly when the face amount was not 100. This is now fixed.
  • The impliedVolatility method for callable bonds was taking a target NPV, not a price. This implementation is now deprecated, and a new overload was added taking a price in base 100.

Deprecated features

  • Removed features deprecated in version 1.23:
    • the constructors of ZeroCouponInflationSwap and ZeroCouponInflationSwapHelper missing an explicit CPI interpolation type;
    • the constructors of ActualActual and Thirty360 missing an explicit choice of convention, and the constructor of Thirty360 passing an isLastPeriod boolean flag.
  • Deprecated the constructors of FixedRateBond taking an InterestRate instance or not taking a Schedule instance.
  • Deprecated the constructor of FloatingRateBond not taking a Schedule instance.
  • Deprecated the constructors of AmortizingFixedRateBond taking a sinking frequency or a vector of InterestRate instances.
  • Deprecated the constructor of CPICapFloor taking a Handle to an inflation index, and its inflationIndex method returning a Handle. New versions of both were added using shared_ptr instead.
  • Deprecated one of the constructors of SabrSmileSection; a new version was added also taking an optional reference date.
  • Deprecated the old impliedVolatility method for callable bonds; see above.

Thanks go also to Konstantin Novitsky (@novitk), Peter Caspers (@pcaspers), Klaus Spanderen (@klausspanderen), Fredrik Gerdin Börjesson (@gbfredrik) and Dirk Eddelbuettel (@eddelbuettel) for a number of smaller fixes, and to Jonathan Sweemer (@sweemer) for various improvements to the automated CI builds.

New Contributors

Full Changelog: QuantLib-v1.27.1...QuantLib-v1.28