From f5d37a5745077751c7b19a86f26519a06c7155a1 Mon Sep 17 00:00:00 2001 From: Maximilian Muecke Date: Thu, 23 Jul 2026 12:07:58 +0200 Subject: [PATCH 1/2] Add missing market calendars --- ChangeLog | 6 ++++++ R/calendars.R | 6 ++++++ src/calendars.cpp | 41 ++++++++++++++++++++++++++++++++--------- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 71c69f4..7dc51f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2026-07-23 Maximilian Muecke + + * R/calendars.R, src/calendars.cpp: Add missing market calendars for + Indonesia, Poland, Romania, and Russia + * src/calendars.cpp: Remove an unreachable duplicate Null calendar branch + 2026-07-22 Maximilian Muecke * R/implied.R (AmericanOptionImpliedVolatility.default): Assign the diff --git a/R/calendars.R b/R/calendars.R index cf151f4..22f075b 100644 --- a/R/calendars.R +++ b/R/calendars.R @@ -57,6 +57,8 @@ calendars <- c("TARGET", "Iceland", "India", "Indonesia", + "Indonesia/BEJ", + "Indonesia/JSX", "Israel", "Israel/TASE", "Israel/SHIR", @@ -73,8 +75,12 @@ calendars <- c("TARGET", "Norway", "Null", "Poland", + "Poland/WSE", "Romania", + "Romania/Public", + "Romania/BVB", "Russia", + "Russia/MOEX", "SaudiArabia", "Serbia", "Singapore", diff --git a/src/calendars.cpp b/src/calendars.cpp index c4ebef0..641cdb0 100644 --- a/src/calendars.cpp +++ b/src/calendars.cpp @@ -152,8 +152,16 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal } else if (calstr == "India") { pcal.reset(new QuantLib::India()); - } else if (calstr == "Indonesia") { - pcal.reset(new QuantLib::Indonesia()); + } else if (calstr == "Indonesia" || + calstr == "Indonesia/IDX" || + calstr == "Indonesia::IDX") { + pcal.reset(new QuantLib::Indonesia(QuantLib::Indonesia::IDX)); + } else if (calstr == "Indonesia/BEJ" || + calstr == "Indonesia::BEJ") { + pcal.reset(new QuantLib::Indonesia(QuantLib::Indonesia::BEJ)); + } else if (calstr == "Indonesia/JSX" || + calstr == "Indonesia::JSX") { + pcal.reset(new QuantLib::Indonesia(QuantLib::Indonesia::JSX)); #if QL_HEX_VERSION <= 0x014201f0 } else if (calstr == "Israel" || calstr == "Israel/Settlement") { @@ -217,16 +225,34 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal calstr == "NULL") { pcal.reset(new QuantLib::NullCalendar()); +#if QL_HEX_VERSION >= 0x013600f0 + } else if (calstr == "Poland" || + calstr == "Poland/Settlement" || + calstr == "Poland::Settlement") { + pcal.reset(new QuantLib::Poland(QuantLib::Poland::Settlement)); + } else if (calstr == "Poland/WSE" || + calstr == "Poland::WSE") { + pcal.reset(new QuantLib::Poland(QuantLib::Poland::WSE)); +#else } else if (calstr == "Poland") { pcal.reset(new QuantLib::Poland()); +#endif - } else if (calstr == "Romania" || calstr == "Romania/Public") { + } else if (calstr == "Romania" || + calstr == "Romania/Public" || + calstr == "Romania::Public") { pcal.reset(new QuantLib::Romania(QuantLib::Romania::Public)); - } else if (calstr == "Romania/BVB") { + } else if (calstr == "Romania/BVB" || + calstr == "Romania::BVB") { pcal.reset(new QuantLib::Romania(QuantLib::Romania::BVB)); - } else if (calstr == "Russia") { - pcal.reset(new QuantLib::Russia()); + } else if (calstr == "Russia" || + calstr == "Russia/Settlement" || + calstr == "Russia::Settlement") { + pcal.reset(new QuantLib::Russia(QuantLib::Russia::Settlement)); + } else if (calstr == "Russia/MOEX" || + calstr == "Russia::MOEX") { + pcal.reset(new QuantLib::Russia(QuantLib::Russia::MOEX)); } else if (calstr == "SaudiArabia") { pcal.reset(new QuantLib::SaudiArabia()); @@ -288,9 +314,6 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal } else if (calstr == "WeekendsOnly") { pcal.reset(new QuantLib::WeekendsOnly()); - } else if (calstr == "Null" || calstr == "null" || calstr == "NULL") { - pcal.reset(new QuantLib::NullCalendar()); - } else { throw std::invalid_argument("Calendar " + calstr + " not recognised "); } From 9d6df6d2551438acfdb37d6b3acca3fdef3da010 Mon Sep 17 00:00:00 2001 From: Maximilian Muecke Date: Thu, 23 Jul 2026 14:13:43 +0200 Subject: [PATCH 2/2] Accept :: alias spellings for remaining calendars --- ChangeLog | 2 ++ src/calendars.cpp | 44 +++++++++++++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7dc51f1..1f086f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,8 @@ * R/calendars.R, src/calendars.cpp: Add missing market calendars for Indonesia, Poland, Romania, and Russia * src/calendars.cpp: Remove an unreachable duplicate Null calendar branch + * src/calendars.cpp: Accept '::' alias spellings for Israel, Japan, + NewZealand, SouthKorea, and UnitedKingdom market calendars 2026-07-22 Maximilian Muecke diff --git a/src/calendars.cpp b/src/calendars.cpp index 641cdb0..1dd8381 100644 --- a/src/calendars.cpp +++ b/src/calendars.cpp @@ -164,16 +164,23 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal pcal.reset(new QuantLib::Indonesia(QuantLib::Indonesia::JSX)); #if QL_HEX_VERSION <= 0x014201f0 - } else if (calstr == "Israel" || calstr == "Israel/Settlement") { + } else if (calstr == "Israel" || + calstr == "Israel/Settlement" || + calstr == "Israel::Settlement") { pcal.reset(new QuantLib::Israel(QuantLib::Israel::Settlement)); - } else if (calstr == "Israel/TASE") { + } else if (calstr == "Israel/TASE" || + calstr == "Israel::TASE") { pcal.reset(new QuantLib::Israel(QuantLib::Israel::TASE)); #else - } else if (calstr == "Israel" || calstr == "Israel/TASE") { + } else if (calstr == "Israel" || + calstr == "Israel/TASE" || + calstr == "Israel::TASE") { pcal.reset(new QuantLib::Israel(QuantLib::Israel::TASE)); - } else if (calstr == "Israel/SHIR") { + } else if (calstr == "Israel/SHIR" || + calstr == "Israel::SHIR") { pcal.reset(new QuantLib::Israel(QuantLib::Israel::SHIR)); - } else if (calstr == "Israel/Telbor") { + } else if (calstr == "Israel/Telbor" || + calstr == "Israel::Telbor") { pcal.reset(new QuantLib::Israel(QuantLib::Israel::Telbor)); #endif @@ -185,7 +192,9 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal calstr == "Italy::Exchange") { pcal.reset(new QuantLib::Italy(QuantLib::Italy::Exchange)); - } else if (calstr == "Japan" || calstr == "Japan/Settlement") { + } else if (calstr == "Japan" || + calstr == "Japan/Settlement" || + calstr == "Japan::Settlement") { pcal.reset(new QuantLib::Japan()); #if QL_HEX_VERSION >= 0x014300f0 @@ -203,9 +212,11 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal #if QL_HEX_VERSION >= 0x013700f0 } else if (calstr == "NewZealand" || - calstr == "NewZealand/Wellington") { + calstr == "NewZealand/Wellington" || + calstr == "NewZealand::Wellington") { pcal.reset(new QuantLib::NewZealand(QuantLib::NewZealand::Wellington)); - } else if (calstr == "NewZealand/Auckland") { + } else if (calstr == "NewZealand/Auckland" || + calstr == "NewZealand::Auckland") { pcal.reset(new QuantLib::NewZealand(QuantLib::NewZealand::Auckland)); #else } else if (calstr == "NewZealand") { @@ -276,9 +287,12 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal } else if (calstr == "SouthAfrica") { pcal.reset(new QuantLib::SouthAfrica()); - } else if (calstr == "SouthKorea" || calstr == "SouthKorea/Settlement") { + } else if (calstr == "SouthKorea" || + calstr == "SouthKorea/Settlement" || + calstr == "SouthKorea::Settlement") { pcal.reset(new QuantLib::SouthKorea(QuantLib::SouthKorea::Settlement)); - } else if (calstr == "SouthKorea/KRX") { + } else if (calstr == "SouthKorea/KRX" || + calstr == "SouthKorea::KRX") { pcal.reset(new QuantLib::SouthKorea(QuantLib::SouthKorea::KRX)); } else if (calstr == "Sweden") { @@ -299,11 +313,15 @@ QuantLib::ext::shared_ptr getCalendar(const std::string &cal } else if (calstr == "Ukraine") { pcal.reset(new QuantLib::Ukraine()); - } else if (calstr == "UnitedKingdom" || calstr == "UnitedKingdom/Settlement") { + } else if (calstr == "UnitedKingdom" || + calstr == "UnitedKingdom/Settlement" || + calstr == "UnitedKingdom::Settlement") { pcal.reset(new QuantLib::UnitedKingdom(QuantLib::UnitedKingdom::Settlement)); - } else if (calstr == "UnitedKingdom/Exchange") { + } else if (calstr == "UnitedKingdom/Exchange" || + calstr == "UnitedKingdom::Exchange") { pcal.reset(new QuantLib::UnitedKingdom(QuantLib::UnitedKingdom::Exchange)); - } else if (calstr == "UnitedKingdom/Metals") { + } else if (calstr == "UnitedKingdom/Metals" || + calstr == "UnitedKingdom::Metals") { pcal.reset(new QuantLib::UnitedKingdom(QuantLib::UnitedKingdom::Metals)); #if QL_HEX_VERSION >= 0x014300f0