pandas-market-calendars 4.3.1__py3-none-any.whl → 4.3.3__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.
Files changed (49) hide show
  1. pandas_market_calendars/__init__.py +38 -37
  2. pandas_market_calendars/calendar_registry.py +53 -48
  3. pandas_market_calendars/calendar_utils.py +261 -225
  4. pandas_market_calendars/calendars/asx.py +66 -63
  5. pandas_market_calendars/calendars/bmf.py +206 -227
  6. pandas_market_calendars/calendars/bse.py +407 -409
  7. pandas_market_calendars/calendars/cboe.py +145 -115
  8. pandas_market_calendars/calendars/cme.py +402 -240
  9. pandas_market_calendars/calendars/cme_globex_agriculture.py +126 -103
  10. pandas_market_calendars/calendars/cme_globex_base.py +119 -103
  11. pandas_market_calendars/calendars/cme_globex_crypto.py +160 -147
  12. pandas_market_calendars/calendars/cme_globex_energy_and_metals.py +216 -138
  13. pandas_market_calendars/calendars/cme_globex_equities.py +123 -104
  14. pandas_market_calendars/calendars/cme_globex_fixed_income.py +136 -113
  15. pandas_market_calendars/calendars/cme_globex_fx.py +101 -78
  16. pandas_market_calendars/calendars/eurex.py +139 -119
  17. pandas_market_calendars/calendars/eurex_fixed_income.py +98 -0
  18. pandas_market_calendars/calendars/hkex.py +426 -408
  19. pandas_market_calendars/calendars/ice.py +81 -65
  20. pandas_market_calendars/calendars/iex.py +112 -98
  21. pandas_market_calendars/calendars/jpx.py +109 -103
  22. pandas_market_calendars/calendars/lse.py +114 -91
  23. pandas_market_calendars/calendars/mirror.py +130 -114
  24. pandas_market_calendars/calendars/nyse.py +1324 -1127
  25. pandas_market_calendars/calendars/ose.py +116 -150
  26. pandas_market_calendars/calendars/sifma.py +350 -297
  27. pandas_market_calendars/calendars/six.py +132 -114
  28. pandas_market_calendars/calendars/sse.py +311 -290
  29. pandas_market_calendars/calendars/tase.py +197 -195
  30. pandas_market_calendars/calendars/tsx.py +181 -159
  31. pandas_market_calendars/class_registry.py +22 -16
  32. pandas_market_calendars/holidays/cme.py +385 -340
  33. pandas_market_calendars/holidays/cme_globex.py +214 -198
  34. pandas_market_calendars/holidays/cn.py +1455 -1436
  35. pandas_market_calendars/holidays/jp.py +398 -396
  36. pandas_market_calendars/holidays/jpx_equinox.py +453 -95
  37. pandas_market_calendars/holidays/nyse.py +1531 -1472
  38. pandas_market_calendars/holidays/oz.py +63 -65
  39. pandas_market_calendars/holidays/sifma.py +338 -321
  40. pandas_market_calendars/holidays/uk.py +32 -26
  41. pandas_market_calendars/holidays/us.py +376 -360
  42. pandas_market_calendars/market_calendar.py +895 -789
  43. {pandas_market_calendars-4.3.1.dist-info → pandas_market_calendars-4.3.3.dist-info}/METADATA +7 -5
  44. pandas_market_calendars-4.3.3.dist-info/RECORD +50 -0
  45. {pandas_market_calendars-4.3.1.dist-info → pandas_market_calendars-4.3.3.dist-info}/WHEEL +1 -1
  46. pandas_market_calendars-4.3.1.dist-info/RECORD +0 -49
  47. {pandas_market_calendars-4.3.1.dist-info → pandas_market_calendars-4.3.3.dist-info}/LICENSE +0 -0
  48. {pandas_market_calendars-4.3.1.dist-info → pandas_market_calendars-4.3.3.dist-info}/NOTICE +0 -0
  49. {pandas_market_calendars-4.3.1.dist-info → pandas_market_calendars-4.3.3.dist-info}/top_level.txt +0 -0
@@ -1,65 +1,81 @@
1
- from datetime import time
2
- from itertools import chain
3
-
4
- from pandas import Timestamp
5
- from pandas.tseries.holiday import AbstractHolidayCalendar, GoodFriday, USLaborDay, USPresidentsDay, USThanksgivingDay
6
- from pytz import timezone
7
-
8
- from pandas_market_calendars.holidays.us import (Christmas, USIndependenceDay, USMartinLutherKingJrAfter1998, USMemorialDay,
9
- USNationalDaysofMourning, USNewYearsDay)
10
- from pandas_market_calendars.market_calendar import MarketCalendar
11
-
12
-
13
- class ICEExchangeCalendar(MarketCalendar):
14
- """
15
- Exchange calendar for ICE US.
16
-
17
- Open Time: 8pm, US/Eastern
18
- Close Time: 6pm, US/Eastern
19
-
20
- https://www.theice.com/publicdocs/futures_us/ICE_Futures_US_Regular_Trading_Hours.pdf # noqa
21
- """
22
- aliases = ['ICE', 'ICEUS', 'NYFE']
23
- regular_market_times = {
24
- "market_open": ((None, time(20, 1), -1),), # offset by -1 day
25
- "market_close": ((None, time(18)),)
26
- }
27
-
28
- @property
29
- def name(self):
30
- return "ICE"
31
-
32
- @property
33
- def tz(self):
34
- return timezone("US/Eastern")
35
-
36
- @property
37
- def special_closes(self):
38
- return [
39
- (time(13), AbstractHolidayCalendar(rules=[
40
- USMartinLutherKingJrAfter1998,
41
- USPresidentsDay,
42
- USMemorialDay,
43
- USIndependenceDay,
44
- USLaborDay,
45
- USThanksgivingDay
46
- ]))
47
- ]
48
-
49
- @property
50
- def adhoc_holidays(self):
51
- return list(chain(
52
- USNationalDaysofMourning,
53
- # ICE was only closed on the first day of the Hurricane Sandy
54
- # closings (was not closed on 2012-10-30)
55
- [Timestamp('2012-10-29', tz='UTC')]
56
- ))
57
-
58
- @property
59
- def regular_holidays(self):
60
- # https://www.theice.com/publicdocs/futures_us/exchange_notices/NewExNot2016Holidays.pdf # noqa
61
- return AbstractHolidayCalendar(rules=[
62
- USNewYearsDay,
63
- GoodFriday,
64
- Christmas
65
- ])
1
+ from datetime import time
2
+ from itertools import chain
3
+
4
+ from pandas import Timestamp
5
+ from pandas.tseries.holiday import (
6
+ AbstractHolidayCalendar,
7
+ GoodFriday,
8
+ USLaborDay,
9
+ USPresidentsDay,
10
+ USThanksgivingDay,
11
+ )
12
+ from pytz import timezone
13
+
14
+ from pandas_market_calendars.holidays.us import (
15
+ Christmas,
16
+ USIndependenceDay,
17
+ USMartinLutherKingJrAfter1998,
18
+ USMemorialDay,
19
+ USNationalDaysofMourning,
20
+ USNewYearsDay,
21
+ )
22
+ from pandas_market_calendars.market_calendar import MarketCalendar
23
+
24
+
25
+ class ICEExchangeCalendar(MarketCalendar):
26
+ """
27
+ Exchange calendar for ICE US.
28
+
29
+ Open Time: 8pm, US/Eastern
30
+ Close Time: 6pm, US/Eastern
31
+
32
+ https://www.theice.com/publicdocs/futures_us/ICE_Futures_US_Regular_Trading_Hours.pdf # noqa
33
+ """
34
+
35
+ aliases = ["ICE", "ICEUS", "NYFE"]
36
+ regular_market_times = {
37
+ "market_open": ((None, time(20, 1), -1),), # offset by -1 day
38
+ "market_close": ((None, time(18)),),
39
+ }
40
+
41
+ @property
42
+ def name(self):
43
+ return "ICE"
44
+
45
+ @property
46
+ def tz(self):
47
+ return timezone("US/Eastern")
48
+
49
+ @property
50
+ def special_closes(self):
51
+ return [
52
+ (
53
+ time(13),
54
+ AbstractHolidayCalendar(
55
+ rules=[
56
+ USMartinLutherKingJrAfter1998,
57
+ USPresidentsDay,
58
+ USMemorialDay,
59
+ USIndependenceDay,
60
+ USLaborDay,
61
+ USThanksgivingDay,
62
+ ]
63
+ ),
64
+ )
65
+ ]
66
+
67
+ @property
68
+ def adhoc_holidays(self):
69
+ return list(
70
+ chain(
71
+ USNationalDaysofMourning,
72
+ # ICE was only closed on the first day of the Hurricane Sandy
73
+ # closings (was not closed on 2012-10-30)
74
+ [Timestamp("2012-10-29", tz="UTC")],
75
+ )
76
+ )
77
+
78
+ @property
79
+ def regular_holidays(self):
80
+ # https://www.theice.com/publicdocs/futures_us/exchange_notices/NewExNot2016Holidays.pdf # noqa
81
+ return AbstractHolidayCalendar(rules=[USNewYearsDay, GoodFriday, Christmas])
@@ -1,98 +1,112 @@
1
- from datetime import time
2
- from itertools import chain
3
- from .nyse import NYSEExchangeCalendar
4
- from pandas.tseries.holiday import AbstractHolidayCalendar
5
- from pytz import timezone
6
-
7
- from pandas_market_calendars.holidays.nyse import (
8
- USPresidentsDay,
9
- GoodFriday,
10
- USMemorialDay,
11
- USJuneteenthAfter2022,
12
- USIndependenceDay,
13
- USThanksgivingDay,
14
- ChristmasNYSE,
15
- USMartinLutherKingJrAfter1998,
16
-
17
- #Ad-Hoc
18
- DayAfterThanksgiving1pmEarlyCloseInOrAfter1993,
19
- DaysBeforeIndependenceDay1pmEarlyCloseAdhoc,
20
- ChristmasEvesAdhoc,
21
- )
22
-
23
- class IEXExchangeCalendar(NYSEExchangeCalendar):
24
- """
25
- Exchange calendar for the Investor's Exchange (IEX).
26
-
27
- IEX Exchange is a U.S. stock exchange focused on driving performance
28
- for broker-dealers and investors through innovative design and technology.
29
-
30
- Most of this class inherits from NYSEExchangeCalendar since
31
- the holidays are the same. The only variation is (1) IEX began
32
- operation in 2013, and (2) IEX has different hours of operation
33
-
34
- References:
35
- - https://exchange.iex.io/
36
- - https://iexexchange.io/resources/trading/trading-hours-holidays/index.html
37
- """
38
-
39
- regular_market_times = {
40
- "pre": (('2013-03-25', time(8)),),
41
- "market_open": ((None, time(9, 30)),),
42
- "market_close":((None, time(16)),),
43
- "post": ((None, time(17)),)
44
- }
45
-
46
- aliases = ['IEX', 'Investors_Exchange']
47
-
48
- @property
49
- def name(self):
50
- return "IEX"
51
-
52
- @property
53
- def weekmask(self):
54
- return "Mon Tue Wed Thu Fri"
55
-
56
- @property
57
- def regular_holidays(self):
58
- return AbstractHolidayCalendar(rules=[
59
- USPresidentsDay,
60
- GoodFriday,
61
- USMemorialDay,
62
- USJuneteenthAfter2022,
63
- USIndependenceDay,
64
- USThanksgivingDay,
65
- ChristmasNYSE,
66
- USMartinLutherKingJrAfter1998
67
- ])
68
-
69
- @property
70
- def adhoc_holidays(self):
71
- return list(chain(
72
- ChristmasEvesAdhoc,
73
- ))
74
-
75
- @property
76
- def special_closes(self):
77
- return [
78
- (time(hour=13, tzinfo=timezone('America/New_York')), AbstractHolidayCalendar(rules=[
79
- DayAfterThanksgiving1pmEarlyCloseInOrAfter1993,
80
- ]))
81
- ]
82
-
83
- """Override NYSE calendar special cases"""
84
-
85
- @property
86
- def special_closes_adhoc(self):
87
- return [
88
- (time(13, tzinfo=timezone('America/New_York')),
89
- DaysBeforeIndependenceDay1pmEarlyCloseAdhoc)
90
- ]
91
-
92
- @property
93
- def special_opens(self):
94
- return []
95
-
96
- def valid_days(self, start_date, end_date, tz='UTC'):
97
- trading_days = super().valid_days(start_date, end_date, tz=tz) #all NYSE valid days
98
- return trading_days[~(trading_days <= '2013-08-25')]
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.nyse import (
8
+ USPresidentsDay,
9
+ GoodFriday,
10
+ USMemorialDay,
11
+ USJuneteenthAfter2022,
12
+ USIndependenceDay,
13
+ USThanksgivingDay,
14
+ ChristmasNYSE,
15
+ USMartinLutherKingJrAfter1998,
16
+ # Ad-Hoc
17
+ DayAfterThanksgiving1pmEarlyCloseInOrAfter1993,
18
+ DaysBeforeIndependenceDay1pmEarlyCloseAdhoc,
19
+ ChristmasEvesAdhoc,
20
+ )
21
+ from .nyse import NYSEExchangeCalendar
22
+
23
+
24
+ class IEXExchangeCalendar(NYSEExchangeCalendar):
25
+ """
26
+ Exchange calendar for the Investor's Exchange (IEX).
27
+
28
+ IEX Exchange is a U.S. stock exchange focused on driving performance
29
+ for broker-dealers and investors through innovative design and technology.
30
+
31
+ Most of this class inherits from NYSEExchangeCalendar since
32
+ the holidays are the same. The only variation is (1) IEX began
33
+ operation in 2013, and (2) IEX has different hours of operation
34
+
35
+ References:
36
+ - https://exchange.iex.io/
37
+ - https://iexexchange.io/resources/trading/trading-hours-holidays/index.html
38
+ """
39
+
40
+ regular_market_times = {
41
+ "pre": (("2013-03-25", time(8)),),
42
+ "market_open": ((None, time(9, 30)),),
43
+ "market_close": ((None, time(16)),),
44
+ "post": ((None, time(17)),),
45
+ }
46
+
47
+ aliases = ["IEX", "Investors_Exchange"]
48
+
49
+ @property
50
+ def name(self):
51
+ return "IEX"
52
+
53
+ @property
54
+ def weekmask(self):
55
+ return "Mon Tue Wed Thu Fri"
56
+
57
+ @property
58
+ def regular_holidays(self):
59
+ return AbstractHolidayCalendar(
60
+ rules=[
61
+ USPresidentsDay,
62
+ GoodFriday,
63
+ USMemorialDay,
64
+ USJuneteenthAfter2022,
65
+ USIndependenceDay,
66
+ USThanksgivingDay,
67
+ ChristmasNYSE,
68
+ USMartinLutherKingJrAfter1998,
69
+ ]
70
+ )
71
+
72
+ @property
73
+ def adhoc_holidays(self):
74
+ return list(
75
+ chain(
76
+ ChristmasEvesAdhoc,
77
+ )
78
+ )
79
+
80
+ @property
81
+ def special_closes(self):
82
+ return [
83
+ (
84
+ time(hour=13, tzinfo=timezone("America/New_York")),
85
+ AbstractHolidayCalendar(
86
+ rules=[
87
+ DayAfterThanksgiving1pmEarlyCloseInOrAfter1993,
88
+ ]
89
+ ),
90
+ )
91
+ ]
92
+
93
+ """Override NYSE calendar special cases"""
94
+
95
+ @property
96
+ def special_closes_adhoc(self):
97
+ return [
98
+ (
99
+ time(13, tzinfo=timezone("America/New_York")),
100
+ DaysBeforeIndependenceDay1pmEarlyCloseAdhoc,
101
+ )
102
+ ]
103
+
104
+ @property
105
+ def special_opens(self):
106
+ return []
107
+
108
+ 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")]
@@ -1,103 +1,109 @@
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
- class JPXExchangeCalendar(MarketCalendar):
18
- """
19
- Exchange calendar for JPX
20
-
21
- Open Time: 9:31 AM, Asia/Tokyo
22
- LUNCH BREAK :facepalm: : 11:30 AM - 12:30 PM Asia/Tokyo
23
- Close Time: 4:00 PM, Asia/Tokyo
24
- """
25
- aliases = ['JPX']
26
- regular_market_times = {
27
- "market_open": ((None, time(9)),),
28
- "market_close": ((None, time(15)),),
29
- "break_start": ((None, time(11, 30)),),
30
- "break_end": ((None, time(12,30)),)
31
- }
32
- regular_early_close = time(13)
33
-
34
- @property
35
- def name(self):
36
- return "JPX"
37
-
38
- @property
39
- def tz(self):
40
- return timezone('Asia/Tokyo')
41
-
42
- @property
43
- def adhoc_holidays(self):
44
- return list(chain(
45
- AscensionDays,
46
- MarriageDays,
47
- FuneralShowa,
48
- EnthronementDays,
49
- AutumnalCitizenDates,
50
- NoN225IndexPrices,
51
- EquityTradingSystemFailure
52
- ))
53
-
54
- @property
55
- def regular_holidays(self):
56
- return AbstractHolidayCalendar(rules=[
57
- USNewYearsDay,
58
- JapanNewYearsDay2,
59
- JapanNewYearsDay3,
60
- JapanComingOfAgeDay1951To1973,
61
- JapanComingOfAgeDay1974To1999,
62
- JapanComingOfAgeDay,
63
- JapanNationalFoundationDay1969To1973,
64
- JapanNationalFoundationDay,
65
- JapanEmperorsBirthday,
66
- JapanVernalEquinox,
67
- JapanShowaDayUntil1972,
68
- JapanShowaDay,
69
- JapanConstitutionMemorialDayUntil1972,
70
- JapanConstitutionMemorialDay,
71
- JapanGreeneryDay,
72
- JapanChildrensDayUntil1972,
73
- JapanChildrensDay,
74
- JapanGoldenWeekBonusDay,
75
- JapanMarineDay1996To2002,
76
- JapanMarineDay2003To2019,
77
- JapanMarineDay2020,
78
- JapanMarineDay2021,
79
- JapanMarineDay,
80
- JapanMountainDay2016to2019,
81
- JapanMountainDay2020,
82
- JapanMountainDay2021,
83
- JapanMountainDay2021NextDay,
84
- JapanMountainDay,
85
- JapanRespectForTheAgedDay1966To1972,
86
- JapanRespectForTheAgedDay1973To2002,
87
- JapanRespectForTheAgedDay,
88
- JapanAutumnalEquinox,
89
- JapanHealthAndSportsDay1966To1972,
90
- JapanHealthAndSportsDay1973To1999,
91
- JapanHealthAndSportsDay2000To2019,
92
- JapanSportsDay2020,
93
- JapanSportsDay2021,
94
- JapanSportsDay,
95
- JapanCultureDayUntil1972,
96
- JapanCultureDay,
97
- JapanLaborThanksgivingDayUntil1972,
98
- JapanLaborThanksgivingDay,
99
- JapanEmperorAkahitosBirthday,
100
- JapanDecember29Until1988,
101
- JapanDecember30Until1988,
102
- JapanBeforeNewYearsDay,
103
- ])
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: 4:00 PM, Asia/Tokyo
25
+ """
26
+
27
+ aliases = ["JPX", "XJPX"]
28
+ regular_market_times = {
29
+ "market_open": ((None, time(9)),),
30
+ "market_close": ((None, time(15)),),
31
+ "break_start": ((None, time(11, 30)),),
32
+ "break_end": ((None, time(12, 30)),),
33
+ }
34
+ regular_early_close = time(13)
35
+
36
+ @property
37
+ def name(self):
38
+ return "JPX"
39
+
40
+ @property
41
+ def tz(self):
42
+ return timezone("Asia/Tokyo")
43
+
44
+ @property
45
+ def adhoc_holidays(self):
46
+ return list(
47
+ chain(
48
+ AscensionDays,
49
+ MarriageDays,
50
+ FuneralShowa,
51
+ EnthronementDays,
52
+ AutumnalCitizenDates,
53
+ NoN225IndexPrices,
54
+ EquityTradingSystemFailure,
55
+ )
56
+ )
57
+
58
+ @property
59
+ def regular_holidays(self):
60
+ return AbstractHolidayCalendar(
61
+ rules=[
62
+ USNewYearsDay,
63
+ JapanNewYearsDay2,
64
+ JapanNewYearsDay3,
65
+ JapanComingOfAgeDay1951To1973,
66
+ JapanComingOfAgeDay1974To1999,
67
+ JapanComingOfAgeDay,
68
+ JapanNationalFoundationDay1969To1973,
69
+ JapanNationalFoundationDay,
70
+ JapanEmperorsBirthday,
71
+ JapanVernalEquinox,
72
+ JapanShowaDayUntil1972,
73
+ JapanShowaDay,
74
+ JapanConstitutionMemorialDayUntil1972,
75
+ JapanConstitutionMemorialDay,
76
+ JapanGreeneryDay,
77
+ JapanChildrensDayUntil1972,
78
+ JapanChildrensDay,
79
+ JapanGoldenWeekBonusDay,
80
+ JapanMarineDay1996To2002,
81
+ JapanMarineDay2003To2019,
82
+ JapanMarineDay2020,
83
+ JapanMarineDay2021,
84
+ JapanMarineDay,
85
+ JapanMountainDay2016to2019,
86
+ JapanMountainDay2020,
87
+ JapanMountainDay2021,
88
+ JapanMountainDay2021NextDay,
89
+ JapanMountainDay,
90
+ JapanRespectForTheAgedDay1966To1972,
91
+ JapanRespectForTheAgedDay1973To2002,
92
+ JapanRespectForTheAgedDay,
93
+ JapanAutumnalEquinox,
94
+ JapanHealthAndSportsDay1966To1972,
95
+ JapanHealthAndSportsDay1973To1999,
96
+ JapanHealthAndSportsDay2000To2019,
97
+ JapanSportsDay2020,
98
+ JapanSportsDay2021,
99
+ JapanSportsDay,
100
+ JapanCultureDayUntil1972,
101
+ JapanCultureDay,
102
+ JapanLaborThanksgivingDayUntil1972,
103
+ JapanLaborThanksgivingDay,
104
+ JapanEmperorAkahitosBirthday,
105
+ JapanDecember29Until1988,
106
+ JapanDecember30Until1988,
107
+ JapanBeforeNewYearsDay,
108
+ ]
109
+ )