I think there is a mistake in your implementation of the holidays of the Japanese calendar. It seems to produce a different answer as to the "golden week" which is a series of holidays in the beginning of May in Japan. The results are inconsistent with other calculators such as Bloomberg. I also compared your code with legal Japanese websites and I believe there is a misunderstanding in your code as to what happens when one or more of the holidays fall in a week-end.
Best Regards,
Sebastien
May you provide some examples of correct data?
On this link we can see that 07/05/2013 is a business day in Japan
http://portalseven.com/calendar/Holidays_Japan.jsp?year=2013
and this is consistent with what I see in Bloomberg. As you can see at the bottom of this page, the “Greenery day”, on the 4th, falls on a Saturday while the Children’s Day falls on the Sunday 5th. I checked the QuantLib code, and it seems to consider that any day in the 3rd, 4th, and 5th, that falls on a week-end will be compensated by a holiday on the week after that, and for example, when the 4th is a Saturday and the 5th is a Sunday, 2 days will be compensated in QuantLib, yielding a holiday on the 7th. The QuantLib addin accordingly answers that the 7th is a holiday, which does not seem to be in line with Japanese rules. Indeed, the rule is that only when such a day falls on a Sunday will it be compensated for.
See the reference
http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
Sorry for the Japanese, but here is the sentence saying it in the link above
また、「国民の祝日」が日曜日に当たるときは、その日後においてその日に最も近い「国民の祝日」でない日を休日とすることになりました。
I’m not a Japanese native so I checked by asking around me to Japanese people, and they confirmed the Sunday-only rule (I work in a Japanese bank).
This rule is indeed consistent with what is observed in the first link for 2013. Currently the code is (I’m still on the 1.2.0)
|| (d == 3 && m == May)
// Holiday for a Nation
|| (d == 4 && m == May)
// Children's Day
|| (d == 5 && m == May)
// any of the three above observed later if on Saturday or Sunday
|| ((d == 6 || d == 7) && m == May
&& (w == Monday || w == Tuesday || w == Wednesday))
but I’m thinking that
|| (d == 3 && m == May)
// Holiday for a Nation
|| (d == 4 && m == May)
// Children's Day
|| (d == 5 && m == May)
// any of the three above observed later if on Saturday or Sunday
|| (d == 6 && m == May
&& (w == Monday || w == Tuesday || w == Wednesday))
would probably be more in line with what the official rule seems to be.
Best regards,
Sebastien
The patch was applied to the Subversion repository.
Thank you for the report and the fix.