pandas-market-calendars 4.5.1__py3-none-any.whl → 4.6.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,13 @@
1
1
  from datetime import time
2
2
  from itertools import chain
3
3
 
4
+ from pandas import Timestamp, DatetimeIndex, Timedelta
4
5
  from pandas.tseries.holiday import AbstractHolidayCalendar
5
6
  from pytz import timezone
6
7
 
8
+ from typing import Literal, Union
9
+ from pandas_market_calendars import calendar_utils as u
10
+
7
11
  from pandas_market_calendars.holidays.nyse import (
8
12
  USPresidentsDay,
9
13
  GoodFriday,
@@ -106,7 +110,42 @@ class IEXExchangeCalendar(NYSEExchangeCalendar):
106
110
  return []
107
111
 
108
112
  def valid_days(self, start_date, end_date, tz="UTC"):
109
- trading_days = super().valid_days(
110
- start_date, end_date, tz=tz
111
- ) # all NYSE valid days
112
- return trading_days[~(trading_days <= "2013-08-25")]
113
+ start_date = Timestamp(start_date)
114
+ if start_date.tz is not None:
115
+ # Ensure valid Comparison to "2013-08-25" is possible
116
+ start_date.tz_convert(self.tz).tz_localize(None)
117
+
118
+ # Limit Start_date to the Exchange's Open
119
+ start_date = max(start_date, Timestamp("2013-08-25"))
120
+ return super().valid_days(start_date, end_date, tz=tz)
121
+
122
+ def date_range_htf(
123
+ self,
124
+ frequency: Union[str, Timedelta, int, float],
125
+ start: Union[str, Timestamp, int, float, None] = None,
126
+ end: Union[str, Timestamp, int, float, None] = None,
127
+ periods: Union[int, None] = None,
128
+ closed: Union[Literal["left", "right"], None] = "right",
129
+ *,
130
+ day_anchor: u.Day_Anchor = "SUN",
131
+ month_anchor: u.Month_Anchor = "JAN",
132
+ ) -> DatetimeIndex:
133
+
134
+ start, end, periods = u._error_check_htf_range(start, end, periods)
135
+
136
+ # Cap Beginning and end dates to the opening date of IEX
137
+ if start is not None:
138
+ start = max(start, Timestamp("2013-08-25"))
139
+ if end is not None:
140
+ end = max(end, Timestamp("2013-08-25"))
141
+
142
+ return u.date_range_htf(
143
+ self.holidays(),
144
+ frequency,
145
+ start,
146
+ end,
147
+ periods,
148
+ closed,
149
+ day_anchor=day_anchor,
150
+ month_anchor=month_anchor,
151
+ )
@@ -1,113 +1,113 @@
1
- from datetime import time
2
- from itertools import chain
3
-
4
- from pandas.tseries.holiday import AbstractHolidayCalendar
5
- from pytz import timezone
6
-
7
- from pandas_market_calendars.holidays.jp import *
8
- from pandas_market_calendars.holidays.us import USNewYearsDay
9
- from pandas_market_calendars.market_calendar import MarketCalendar
10
-
11
-
12
- # TODO:
13
- # From 1949 to 1972 the TSE was open on all non-holiday Saturdays for a half day
14
- # From 1973 to 1984 the TSE was open on all non-holiday Saturdays except the third Saturday of the month
15
- # need to add support for weekmask to make this work properly
16
-
17
-
18
- class JPXExchangeCalendar(MarketCalendar):
19
- """
20
- Exchange calendar for JPX
21
-
22
- Open Time: 9:31 AM, Asia/Tokyo
23
- LUNCH BREAK :facepalm: : 11:30 AM - 12:30 PM Asia/Tokyo
24
- Close Time: 3:30 PM, Asia/Tokyo
25
-
26
- Market close of Japan changed from 3:00 PM to 3:30 PM on November 5, 2024
27
- Reference:
28
- https://www.jpx.co.jp/english/equities/trading/domestic/tvdivq0000006blj-att/tradinghours_eg.pdf
29
- """
30
-
31
- aliases = ["JPX", "XJPX"]
32
- regular_market_times = {
33
- "market_open": ((None, time(9)),),
34
- "market_close": ((None, time(15)), ("2024-11-05", time(15, 30))),
35
- "break_start": ((None, time(11, 30)),),
36
- "break_end": ((None, time(12, 30)),),
37
- }
38
- regular_early_close = time(13)
39
-
40
- @property
41
- def name(self):
42
- return "JPX"
43
-
44
- @property
45
- def tz(self):
46
- return timezone("Asia/Tokyo")
47
-
48
- @property
49
- def adhoc_holidays(self):
50
- return list(
51
- chain(
52
- AscensionDays,
53
- MarriageDays,
54
- FuneralShowa,
55
- EnthronementDays,
56
- AutumnalCitizenDates,
57
- NoN225IndexPrices,
58
- EquityTradingSystemFailure,
59
- )
60
- )
61
-
62
- @property
63
- def regular_holidays(self):
64
- return AbstractHolidayCalendar(
65
- rules=[
66
- USNewYearsDay,
67
- JapanNewYearsDay2,
68
- JapanNewYearsDay3,
69
- JapanComingOfAgeDay1951To1973,
70
- JapanComingOfAgeDay1974To1999,
71
- JapanComingOfAgeDay,
72
- JapanNationalFoundationDay1969To1973,
73
- JapanNationalFoundationDay,
74
- JapanEmperorsBirthday,
75
- JapanVernalEquinox,
76
- JapanShowaDayUntil1972,
77
- JapanShowaDay,
78
- JapanConstitutionMemorialDayUntil1972,
79
- JapanConstitutionMemorialDay,
80
- JapanGreeneryDay,
81
- JapanChildrensDayUntil1972,
82
- JapanChildrensDay,
83
- JapanGoldenWeekBonusDay,
84
- JapanMarineDay1996To2002,
85
- JapanMarineDay2003To2019,
86
- JapanMarineDay2020,
87
- JapanMarineDay2021,
88
- JapanMarineDay,
89
- JapanMountainDay2016to2019,
90
- JapanMountainDay2020,
91
- JapanMountainDay2021,
92
- JapanMountainDay2021NextDay,
93
- JapanMountainDay,
94
- JapanRespectForTheAgedDay1966To1972,
95
- JapanRespectForTheAgedDay1973To2002,
96
- JapanRespectForTheAgedDay,
97
- JapanAutumnalEquinox,
98
- JapanHealthAndSportsDay1966To1972,
99
- JapanHealthAndSportsDay1973To1999,
100
- JapanHealthAndSportsDay2000To2019,
101
- JapanSportsDay2020,
102
- JapanSportsDay2021,
103
- JapanSportsDay,
104
- JapanCultureDayUntil1972,
105
- JapanCultureDay,
106
- JapanLaborThanksgivingDayUntil1972,
107
- JapanLaborThanksgivingDay,
108
- JapanEmperorAkahitosBirthday,
109
- JapanDecember29Until1988,
110
- JapanDecember30Until1988,
111
- JapanBeforeNewYearsDay,
112
- ]
113
- )
1
+ from datetime import time
2
+ from itertools import chain
3
+
4
+ from pandas.tseries.holiday import AbstractHolidayCalendar
5
+ from pytz import timezone
6
+
7
+ from pandas_market_calendars.holidays.jp import *
8
+ from pandas_market_calendars.holidays.us import USNewYearsDay
9
+ from pandas_market_calendars.market_calendar import MarketCalendar
10
+
11
+
12
+ # TODO:
13
+ # From 1949 to 1972 the TSE was open on all non-holiday Saturdays for a half day
14
+ # From 1973 to 1984 the TSE was open on all non-holiday Saturdays except the third Saturday of the month
15
+ # need to add support for weekmask to make this work properly
16
+
17
+
18
+ class JPXExchangeCalendar(MarketCalendar):
19
+ """
20
+ Exchange calendar for JPX
21
+
22
+ Open Time: 9:31 AM, Asia/Tokyo
23
+ LUNCH BREAK :facepalm: : 11:30 AM - 12:30 PM Asia/Tokyo
24
+ Close Time: 3:30 PM, Asia/Tokyo
25
+
26
+ Market close of Japan changed from 3:00 PM to 3:30 PM on November 5, 2024
27
+ Reference:
28
+ https://www.jpx.co.jp/english/equities/trading/domestic/tvdivq0000006blj-att/tradinghours_eg.pdf
29
+ """
30
+
31
+ aliases = ["JPX", "XJPX"]
32
+ regular_market_times = {
33
+ "market_open": ((None, time(9)),),
34
+ "market_close": ((None, time(15)), ("2024-11-05", time(15, 30))),
35
+ "break_start": ((None, time(11, 30)),),
36
+ "break_end": ((None, time(12, 30)),),
37
+ }
38
+ regular_early_close = time(13)
39
+
40
+ @property
41
+ def name(self):
42
+ return "JPX"
43
+
44
+ @property
45
+ def tz(self):
46
+ return timezone("Asia/Tokyo")
47
+
48
+ @property
49
+ def adhoc_holidays(self):
50
+ return list(
51
+ chain(
52
+ AscensionDays,
53
+ MarriageDays,
54
+ FuneralShowa,
55
+ EnthronementDays,
56
+ AutumnalCitizenDates,
57
+ NoN225IndexPrices,
58
+ EquityTradingSystemFailure,
59
+ )
60
+ )
61
+
62
+ @property
63
+ def regular_holidays(self):
64
+ return AbstractHolidayCalendar(
65
+ rules=[
66
+ USNewYearsDay,
67
+ JapanNewYearsDay2,
68
+ JapanNewYearsDay3,
69
+ JapanComingOfAgeDay1951To1973,
70
+ JapanComingOfAgeDay1974To1999,
71
+ JapanComingOfAgeDay,
72
+ JapanNationalFoundationDay1969To1973,
73
+ JapanNationalFoundationDay,
74
+ JapanEmperorsBirthday,
75
+ JapanVernalEquinox,
76
+ JapanShowaDayUntil1972,
77
+ JapanShowaDay,
78
+ JapanConstitutionMemorialDayUntil1972,
79
+ JapanConstitutionMemorialDay,
80
+ JapanGreeneryDay,
81
+ JapanChildrensDayUntil1972,
82
+ JapanChildrensDay,
83
+ JapanGoldenWeekBonusDay,
84
+ JapanMarineDay1996To2002,
85
+ JapanMarineDay2003To2019,
86
+ JapanMarineDay2020,
87
+ JapanMarineDay2021,
88
+ JapanMarineDay,
89
+ JapanMountainDay2016to2019,
90
+ JapanMountainDay2020,
91
+ JapanMountainDay2021,
92
+ JapanMountainDay2021NextDay,
93
+ JapanMountainDay,
94
+ JapanRespectForTheAgedDay1966To1972,
95
+ JapanRespectForTheAgedDay1973To2002,
96
+ JapanRespectForTheAgedDay,
97
+ JapanAutumnalEquinox,
98
+ JapanHealthAndSportsDay1966To1972,
99
+ JapanHealthAndSportsDay1973To1999,
100
+ JapanHealthAndSportsDay2000To2019,
101
+ JapanSportsDay2020,
102
+ JapanSportsDay2021,
103
+ JapanSportsDay,
104
+ JapanCultureDayUntil1972,
105
+ JapanCultureDay,
106
+ JapanLaborThanksgivingDayUntil1972,
107
+ JapanLaborThanksgivingDay,
108
+ JapanEmperorAkahitosBirthday,
109
+ JapanDecember29Until1988,
110
+ JapanDecember30Until1988,
111
+ JapanBeforeNewYearsDay,
112
+ ]
113
+ )