pandas-market-calendars 4.4.2__py3-none-any.whl → 4.5.0__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.
- pandas_market_calendars/__init__.py +38 -38
- pandas_market_calendars/calendar_registry.py +57 -57
- pandas_market_calendars/calendar_utils.py +262 -262
- pandas_market_calendars/calendars/asx.py +66 -66
- pandas_market_calendars/calendars/bmf.py +223 -223
- pandas_market_calendars/calendars/bse.py +421 -421
- pandas_market_calendars/calendars/cboe.py +145 -145
- pandas_market_calendars/calendars/cme.py +405 -405
- pandas_market_calendars/calendars/cme_globex_agriculture.py +172 -172
- pandas_market_calendars/calendars/cme_globex_base.py +119 -119
- pandas_market_calendars/calendars/cme_globex_crypto.py +160 -160
- pandas_market_calendars/calendars/cme_globex_energy_and_metals.py +216 -216
- pandas_market_calendars/calendars/cme_globex_equities.py +123 -123
- pandas_market_calendars/calendars/cme_globex_fixed_income.py +136 -136
- pandas_market_calendars/calendars/cme_globex_fx.py +101 -101
- pandas_market_calendars/calendars/eurex.py +131 -131
- pandas_market_calendars/calendars/eurex_fixed_income.py +98 -98
- pandas_market_calendars/calendars/hkex.py +429 -429
- pandas_market_calendars/calendars/ice.py +81 -81
- pandas_market_calendars/calendars/iex.py +112 -112
- pandas_market_calendars/calendars/jpx.py +113 -113
- pandas_market_calendars/calendars/lse.py +114 -114
- pandas_market_calendars/calendars/mirror.py +149 -149
- pandas_market_calendars/calendars/nyse.py +1327 -1324
- pandas_market_calendars/calendars/ose.py +116 -116
- pandas_market_calendars/calendars/sifma.py +354 -354
- pandas_market_calendars/calendars/six.py +132 -132
- pandas_market_calendars/calendars/sse.py +311 -311
- pandas_market_calendars/calendars/tase.py +197 -197
- pandas_market_calendars/calendars/tsx.py +181 -181
- pandas_market_calendars/holidays/cme.py +385 -385
- pandas_market_calendars/holidays/cme_globex.py +214 -214
- pandas_market_calendars/holidays/cn.py +1456 -1456
- pandas_market_calendars/holidays/jp.py +401 -401
- pandas_market_calendars/holidays/jpx_equinox.py +506 -506
- pandas_market_calendars/holidays/nyse.py +1536 -1531
- pandas_market_calendars/holidays/oz.py +63 -63
- pandas_market_calendars/holidays/sifma.py +350 -350
- pandas_market_calendars/holidays/us.py +376 -376
- pandas_market_calendars/market_calendar.py +941 -922
- {pandas_market_calendars-4.4.2.dist-info → pandas_market_calendars-4.5.0.dist-info}/METADATA +1 -1
- pandas_market_calendars-4.5.0.dist-info/RECORD +50 -0
- {pandas_market_calendars-4.4.2.dist-info → pandas_market_calendars-4.5.0.dist-info}/WHEEL +1 -1
- pandas_market_calendars-4.4.2.dist-info/RECORD +0 -50
- {pandas_market_calendars-4.4.2.dist-info → pandas_market_calendars-4.5.0.dist-info}/LICENSE +0 -0
- {pandas_market_calendars-4.4.2.dist-info → pandas_market_calendars-4.5.0.dist-info}/NOTICE +0 -0
- {pandas_market_calendars-4.4.2.dist-info → pandas_market_calendars-4.5.0.dist-info}/top_level.txt +0 -0
@@ -1,81 +1,81 @@
|
|
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
|
+
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,112 +1,112 @@
|
|
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
|
+
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,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
|
+
)
|