From bbf5cdb0b1dbd8627d05b4309c7e8d64bbd469f8 Mon Sep 17 00:00:00 2001 From: saubhik Date: Mon, 16 Mar 2020 19:37:18 +0900 Subject: [PATCH 1/2] fix XTKS 2020 holidays according to JPX calendar --- tests/resources/xtks.csv | 6 +- tests/test_xtks_calendar.py | 28 +++++++++ trading_calendars/exchange_calendar_xtks.py | 26 ++++++--- trading_calendars/xtks_holidays.py | 63 +++++++++++++++++++-- 4 files changed, 107 insertions(+), 16 deletions(-) diff --git a/tests/resources/xtks.csv b/tests/resources/xtks.csv index d03cb132..4fa97a40 100644 --- a/tests/resources/xtks.csv +++ b/tests/resources/xtks.csv @@ -5037,10 +5037,9 @@ 2020-07-15,2020-07-15 00:01:00,2020-07-15 06:00:00 2020-07-16,2020-07-16 00:01:00,2020-07-16 06:00:00 2020-07-17,2020-07-17 00:01:00,2020-07-17 06:00:00 +2020-07-20,2020-07-20 00:01:00,2020-07-20 06:00:00 2020-07-21,2020-07-21 00:01:00,2020-07-21 06:00:00 2020-07-22,2020-07-22 00:01:00,2020-07-22 06:00:00 -2020-07-23,2020-07-23 00:01:00,2020-07-23 06:00:00 -2020-07-24,2020-07-24 00:01:00,2020-07-24 06:00:00 2020-07-27,2020-07-27 00:01:00,2020-07-27 06:00:00 2020-07-28,2020-07-28 00:01:00,2020-07-28 06:00:00 2020-07-29,2020-07-29 00:01:00,2020-07-29 06:00:00 @@ -5051,7 +5050,7 @@ 2020-08-05,2020-08-05 00:01:00,2020-08-05 06:00:00 2020-08-06,2020-08-06 00:01:00,2020-08-06 06:00:00 2020-08-07,2020-08-07 00:01:00,2020-08-07 06:00:00 -2020-08-10,2020-08-10 00:01:00,2020-08-10 06:00:00 +2020-08-11,2020-08-11 00:01:00,2020-08-11 06:00:00 2020-08-12,2020-08-12 00:01:00,2020-08-12 06:00:00 2020-08-13,2020-08-13 00:01:00,2020-08-13 06:00:00 2020-08-14,2020-08-14 00:01:00,2020-08-14 06:00:00 @@ -5093,6 +5092,7 @@ 2020-10-07,2020-10-07 00:01:00,2020-10-07 06:00:00 2020-10-08,2020-10-08 00:01:00,2020-10-08 06:00:00 2020-10-09,2020-10-09 00:01:00,2020-10-09 06:00:00 +2020-10-12,2020-10-12 00:01:00,2020-10-12 06:00:00 2020-10-13,2020-10-13 00:01:00,2020-10-13 06:00:00 2020-10-14,2020-10-14 00:01:00,2020-10-14 06:00:00 2020-10-15,2020-10-15 00:01:00,2020-10-15 06:00:00 diff --git a/tests/test_xtks_calendar.py b/tests/test_xtks_calendar.py index 39edd8b6..310422d7 100644 --- a/tests/test_xtks_calendar.py +++ b/tests/test_xtks_calendar.py @@ -200,3 +200,31 @@ def test_2019_adhocs(self): for holiday_label in expected_holidays: self.assertNotIn(holiday_label, self.calendar.all_sessions) + + def test_2020(self): + expected_holidays_2020 = [ + pd.Timestamp("2020-01-01", tz=UTC), # New Year's holiday + pd.Timestamp("2020-01-02", tz=UTC), # New Year's holiday + pd.Timestamp("2020-01-03", tz=UTC), # New Year's holiday + pd.Timestamp("2020-01-13", tz=UTC), # Coming of Age Day + pd.Timestamp("2020-02-11", tz=UTC), # National Foundation Day + pd.Timestamp("2020-02-23", tz=UTC), # Emperor's Birthday + pd.Timestamp("2020-02-24", tz=UTC), # Emperor's Birthday observed + pd.Timestamp("2020-03-20", tz=UTC), # Vernal Equinox + pd.Timestamp("2020-04-29", tz=UTC), # Showa Day + pd.Timestamp("2020-05-03", tz=UTC), # Constitution Memorial Day + pd.Timestamp("2020-05-04", tz=UTC), # Greenery Day + pd.Timestamp("2020-05-05", tz=UTC), # Children's Day + pd.Timestamp("2020-05-06", tz=UTC), # Constitution Memorial Day observed + pd.Timestamp("2020-07-23", tz=UTC), # Marine Day + pd.Timestamp("2020-07-24", tz=UTC), # Sports Day + pd.Timestamp("2020-08-10", tz=UTC), # Mountain Day + pd.Timestamp("2020-09-21", tz=UTC), # Respect for the Aged Day + pd.Timestamp("2020-09-22", tz=UTC), # Autumnal Equinox + pd.Timestamp("2020-11-03", tz=UTC), # Culture Day + pd.Timestamp("2020-11-23", tz=UTC), # Labor Thanksgiving Day + pd.Timestamp("2020-12-31", tz=UTC), # New Year's holiday + ] + + for session_label in expected_holidays_2020: + self.assertNotIn(session_label, self.calendar.all_sessions) diff --git a/trading_calendars/exchange_calendar_xtks.py b/trading_calendars/exchange_calendar_xtks.py index 37818fcd..6cbe99d7 100644 --- a/trading_calendars/exchange_calendar_xtks.py +++ b/trading_calendars/exchange_calendar_xtks.py @@ -24,13 +24,19 @@ CitizensHolidayGoldenWeek, ChildrensDay, MarineDayThrough2002, - MarineDay2003Onwards, - MountainDay, + MarineDay2003OnwardsThrough2019, + MarineDay2020, + MarineDay2021Onwards, + MountainDayThrough2019, + MountainDay2020, + MountainDay2021Onwards, AutumnalEquinoxes, CitizensHolidaySilverWeek, RespectForTheAgedDayThrough2002, RespectForTheAgedDay2003Onwards, - HealthAndSportsDay, + HealthAndSportsDayThrough2019, + HealthAndSportsDay2020, + HealthAndSportsDay2021Onwards, CultureDay, LaborThanksgivingDay, EmperorAkihitoBirthday, @@ -53,7 +59,7 @@ class XTKSExchangeCalendar(TradingCalendar): NOTE: we are treating the two sessions per day as one session for now, because we will not be handling minutely data in the immediate future. - Regularly-Observed Holidays (see tse_holidays.py for more info): + Regularly-Observed Holidays (see xtks_holidays.py for more info): - New Year's Holidays (Dec. 31 - Jan. 3) - Coming of Age Day (second Monday of January) - National Foundation Day (Feb. 11) @@ -105,11 +111,17 @@ def regular_holidays(self): CitizensHolidayGoldenWeek, ChildrensDay, MarineDayThrough2002, - MarineDay2003Onwards, - MountainDay, + MarineDay2003OnwardsThrough2019, + MarineDay2020, + MarineDay2021Onwards, + MountainDayThrough2019, + MountainDay2020, + MountainDay2021Onwards, RespectForTheAgedDayThrough2002, RespectForTheAgedDay2003Onwards, - HealthAndSportsDay, + HealthAndSportsDayThrough2019, + HealthAndSportsDay2020, + HealthAndSportsDay2021Onwards, CultureDay, LaborThanksgivingDay, EmperorAkihitoBirthday, diff --git a/trading_calendars/xtks_holidays.py b/trading_calendars/xtks_holidays.py index 5aa96dc8..386a7250 100644 --- a/trading_calendars/xtks_holidays.py +++ b/trading_calendars/xtks_holidays.py @@ -176,19 +176,53 @@ def next_non_holiday_weekday(holidays, dt): observance=sunday_to_monday, ) -MarineDay2003Onwards = Holiday( - "Marine Day (2003 onwards)", +MarineDay2003OnwardsThrough2019 = Holiday( + "Marine Day (2003 - 2019)", month=7, day=1, offset=DateOffset(weekday=MO(3)), start_date='2003-01-01', + end_date='2020-01-01', ) -MountainDay = Holiday( - "Mountain Day", +# Changed due to Tokyo Olympics +MarineDay2020 = Holiday( + "Marine Day (2020)", + month=7, + day=23, + year=2020, +) + +MarineDay2021Onwards = Holiday( + "Marine Day (2021 onwards)", + month=7, + day=1, + offset=DateOffset(weekday=MO(3)), + start_date='2021-01-01', +) + +MountainDayThrough2019 = Holiday( + "Mountain Day (through 2019)", month=8, day=11, start_date='2016-01-01', + end_date='2020-01-01', + observance=sunday_to_monday, +) + +# Changed due to Tokyo Olympics +MountainDay2020 = Holiday( + "Mountain Day (2020)", + month=8, + day=10, + year=2020, +) + +MountainDay2021Onwards = Holiday( + "Mountain Day (2021 onwards)", + month=8, + day=11, + start_date="2021-01-01", observance=sunday_to_monday, ) @@ -242,11 +276,28 @@ def next_non_holiday_weekday(holidays, dt): start_date='2003-01-01', ) -HealthAndSportsDay = Holiday( - "Health and Sports Day", +HealthAndSportsDayThrough2019 = Holiday( + "Health and Sports Day (through 2019)", + month=10, + day=1, + offset=DateOffset(weekday=MO(2)), + end_date="2020-01-01", +) + +# Changed due to Tokyo Olympics +HealthAndSportsDay2020 = Holiday( + "Health and Sports Day (2020)", + month=7, + day=24, + year=2020, +) + +HealthAndSportsDay2021Onwards = Holiday( + "Health and Sports Day (2021 onwards)", month=10, day=1, offset=DateOffset(weekday=MO(2)), + start_date="2021-01-01", ) CultureDay = Holiday( From d54b42f31716413b573ce3d767787b5ccddf357e Mon Sep 17 00:00:00 2001 From: saubhik Date: Mon, 30 Mar 2020 11:30:09 +0900 Subject: [PATCH 2/2] flak8 linting --- tests/test_xtks_calendar.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_xtks_calendar.py b/tests/test_xtks_calendar.py index 310422d7..444c10d1 100644 --- a/tests/test_xtks_calendar.py +++ b/tests/test_xtks_calendar.py @@ -215,7 +215,8 @@ def test_2020(self): pd.Timestamp("2020-05-03", tz=UTC), # Constitution Memorial Day pd.Timestamp("2020-05-04", tz=UTC), # Greenery Day pd.Timestamp("2020-05-05", tz=UTC), # Children's Day - pd.Timestamp("2020-05-06", tz=UTC), # Constitution Memorial Day observed + pd.Timestamp("2020-05-06", tz=UTC), # Constitution Memorial Day + # observed pd.Timestamp("2020-07-23", tz=UTC), # Marine Day pd.Timestamp("2020-07-24", tz=UTC), # Sports Day pd.Timestamp("2020-08-10", tz=UTC), # Mountain Day