pandas-market-calendars 4.1.4__py3-none-any.whl → 4.2.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.
Files changed (47) hide show
  1. {pandas_market_calendars-4.1.4.dist-info → pandas_market_calendars-4.2.0.dist-info}/METADATA +200 -187
  2. pandas_market_calendars-4.2.0.dist-info/NOTICE +206 -0
  3. pandas_market_calendars-4.2.0.dist-info/RECORD +6 -0
  4. {pandas_market_calendars-4.1.4.dist-info → pandas_market_calendars-4.2.0.dist-info}/WHEEL +1 -1
  5. pandas_market_calendars/__init__.py +0 -37
  6. pandas_market_calendars/calendar_registry.py +0 -47
  7. pandas_market_calendars/calendar_utils.py +0 -225
  8. pandas_market_calendars/class_registry.py +0 -111
  9. pandas_market_calendars/exchange_calendar_asx.py +0 -63
  10. pandas_market_calendars/exchange_calendar_bmf.py +0 -227
  11. pandas_market_calendars/exchange_calendar_bse.py +0 -409
  12. pandas_market_calendars/exchange_calendar_cboe.py +0 -115
  13. pandas_market_calendars/exchange_calendar_cme.py +0 -240
  14. pandas_market_calendars/exchange_calendar_cme_globex_agriculture.py +0 -109
  15. pandas_market_calendars/exchange_calendar_cme_globex_base.py +0 -106
  16. pandas_market_calendars/exchange_calendar_cme_globex_energy_and_metals.py +0 -146
  17. pandas_market_calendars/exchange_calendar_cme_globex_equities.py +0 -104
  18. pandas_market_calendars/exchange_calendar_cme_globex_fixed_income.py +0 -114
  19. pandas_market_calendars/exchange_calendar_cme_globex_fx.py +0 -78
  20. pandas_market_calendars/exchange_calendar_eurex.py +0 -119
  21. pandas_market_calendars/exchange_calendar_hkex.py +0 -408
  22. pandas_market_calendars/exchange_calendar_ice.py +0 -65
  23. pandas_market_calendars/exchange_calendar_iex.py +0 -98
  24. pandas_market_calendars/exchange_calendar_jpx.py +0 -98
  25. pandas_market_calendars/exchange_calendar_lse.py +0 -91
  26. pandas_market_calendars/exchange_calendar_nyse.py +0 -1127
  27. pandas_market_calendars/exchange_calendar_ose.py +0 -150
  28. pandas_market_calendars/exchange_calendar_sifma.py +0 -300
  29. pandas_market_calendars/exchange_calendar_six.py +0 -114
  30. pandas_market_calendars/exchange_calendar_sse.py +0 -290
  31. pandas_market_calendars/exchange_calendar_tase.py +0 -195
  32. pandas_market_calendars/exchange_calendar_tsx.py +0 -159
  33. pandas_market_calendars/exchange_calendars_mirror.py +0 -114
  34. pandas_market_calendars/holidays_cme.py +0 -341
  35. pandas_market_calendars/holidays_cme_globex.py +0 -169
  36. pandas_market_calendars/holidays_cn.py +0 -1436
  37. pandas_market_calendars/holidays_jp.py +0 -362
  38. pandas_market_calendars/holidays_nyse.py +0 -1474
  39. pandas_market_calendars/holidays_oz.py +0 -65
  40. pandas_market_calendars/holidays_sifma.py +0 -321
  41. pandas_market_calendars/holidays_uk.py +0 -177
  42. pandas_market_calendars/holidays_us.py +0 -364
  43. pandas_market_calendars/jpx_equinox.py +0 -147
  44. pandas_market_calendars/market_calendar.py +0 -770
  45. pandas_market_calendars-4.1.4.dist-info/RECORD +0 -45
  46. {pandas_market_calendars-4.1.4.dist-info → pandas_market_calendars-4.2.0.dist-info}/LICENSE +0 -0
  47. {pandas_market_calendars-4.1.4.dist-info → pandas_market_calendars-4.2.0.dist-info}/top_level.txt +0 -0
@@ -1,290 +0,0 @@
1
- from datetime import time, timedelta
2
- from functools import partial
3
-
4
- from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday, next_monday
5
- from pytz import timezone
6
-
7
- from .holidays_cn import *
8
- from .market_calendar import MarketCalendar
9
-
10
-
11
- class SSEExchangeCalendar(MarketCalendar):
12
- """
13
- Exchange calendar for Shanghai Stock Exchange
14
-
15
- Open Time: 9:30 AM, Asia/Shanghai
16
- LUNCH BREAK :facepalm: : 11:30 AM - 1:00 PM Asia/Shanghai
17
- Close Time: 3:00 PM, Asia/Shanghai
18
- """
19
- aliases = ['SSE']
20
- regular_market_times = {
21
- "market_open": ((None, time(9, 30)),),
22
- "market_close": ((None, time(15)),),
23
- "break_start": ((None, time(11,30)),),
24
- "break_end": ((None, time(13)),)
25
- }
26
-
27
- @property
28
- def name(self):
29
- return "SSE"
30
-
31
- @property
32
- def tz(self):
33
- return timezone('Asia/Shanghai')
34
-
35
- @property
36
- def regular_holidays(self):
37
- """
38
- Rules are guesses based on observations of recent year.
39
- Rectify accordingly once the next year's holidays arrangement is published by the government.
40
- """
41
- # Since all past holidays are adhoc, start_year should always be a year in the future.
42
- # For example: Holiday arrangements for 2022 are now included,
43
- # then our guesswork starts from the next year so start_year = 2023
44
- start_year = 2024
45
-
46
- return AbstractHolidayCalendar(rules=[
47
- Holiday(
48
- name="New Year's Day",
49
- month=1,
50
- day=1,
51
- observance=next_monday,
52
- start_date=Timestamp(start_year, 1, 1),
53
- ),
54
- Holiday(
55
- name="New Year's Day",
56
- month=1,
57
- day=2,
58
- observance=partial(second_day_in_lieu),
59
- start_date=Timestamp(start_year, 1, 2),
60
- ),
61
- Holiday(
62
- name="New Year's Day",
63
- month=1,
64
- day=3,
65
- observance=partial(third_day_in_lieu),
66
- start_date=Timestamp(start_year, 1, 3),
67
- ),
68
- Holiday(
69
- name="Spring Festival",
70
- month=1,
71
- day=20,
72
- observance=partial(lunisolar, mapping=sf_mapping, delta=-1),
73
- start_date=Timestamp(start_year, 1, 20),
74
- ),
75
- Holiday(
76
- name="Spring Festival",
77
- month=1,
78
- day=21,
79
- observance=partial(lunisolar, mapping=sf_mapping, delta=0),
80
- start_date=Timestamp(start_year, 1, 21),
81
- ),
82
- Holiday(
83
- name="Spring Festival",
84
- month=1,
85
- day=21,
86
- observance=partial(lunisolar, mapping=sf_mapping, delta=1),
87
- start_date=Timestamp(start_year, 1, 22),
88
- ),
89
- Holiday(
90
- name="Spring Festival",
91
- month=1,
92
- day=21,
93
- observance=partial(lunisolar, mapping=sf_mapping, delta=2),
94
- start_date=Timestamp(start_year, 1, 23),
95
- ),
96
- Holiday(
97
- name="Spring Festival",
98
- month=1,
99
- day=21,
100
- observance=partial(lunisolar, mapping=sf_mapping, delta=3),
101
- start_date=Timestamp(start_year, 1, 24),
102
- ),
103
- Holiday(
104
- name="Spring Festival",
105
- month=1,
106
- day=21,
107
- observance=partial(lunisolar, mapping=sf_mapping, delta=4),
108
- start_date=Timestamp(start_year, 1, 25),
109
- ),
110
- Holiday(
111
- name="Spring Festival",
112
- month=1,
113
- day=21,
114
- observance=partial(lunisolar, mapping=sf_mapping, delta=5),
115
- start_date=Timestamp(start_year, 1, 26),
116
- ),
117
- Holiday(
118
- name="Labour Day",
119
- month=5,
120
- day=1,
121
- observance=next_monday,
122
- start_date=Timestamp(start_year, 5, 1),
123
- ),
124
- Holiday(
125
- name="Labour Day",
126
- month=5,
127
- day=2,
128
- observance=second_day_in_lieu,
129
- start_date=Timestamp(start_year, 5, 2),
130
- ),
131
- Holiday(
132
- name="Labour Day",
133
- month=5,
134
- day=3,
135
- observance=third_day_in_lieu,
136
- start_date=Timestamp(start_year, 5, 3),
137
- ),
138
- Holiday(
139
- name="Tomb-sweeping Day",
140
- month=4,
141
- day=4,
142
- observance=partial(lunisolar, mapping=tsd_mapping, func=next_monday),
143
- start_date=Timestamp(start_year, 4, 4),
144
- ),
145
- Holiday(
146
- name="Tomb-sweeping Day",
147
- month=4,
148
- day=5,
149
- observance=partial(lunisolar, mapping=tsd_mapping, func=second_day_in_lieu, delta=1),
150
- start_date=Timestamp(start_year, 4, 4),
151
- ),
152
- Holiday(
153
- name="Tomb-sweeping Day",
154
- month=4,
155
- day=6,
156
- observance=partial(lunisolar, mapping=tsd_mapping, func=third_day_in_lieu, delta=2),
157
- start_date=Timestamp(start_year, 4, 4),
158
- ),
159
- Holiday(
160
- name="Dragon Boat Festival",
161
- month=5,
162
- day=27,
163
- observance=partial(lunisolar, mapping=dbf_mapping, func=next_monday),
164
- start_date=Timestamp(start_year, 5, 27),
165
- ),
166
- Holiday(
167
- name="Dragon Boat Festival",
168
- month=5,
169
- day=28,
170
- observance=partial(lunisolar, mapping=dbf_mapping, func=second_day_in_lieu, delta=1),
171
- start_date=Timestamp(start_year, 5, 27),
172
- ),
173
- Holiday(
174
- name="Dragon Boat Festival",
175
- month=5,
176
- day=29,
177
- observance=partial(lunisolar, mapping=dbf_mapping, func=third_day_in_lieu, delta=2),
178
- start_date=Timestamp(start_year, 5, 27),
179
- ),
180
- Holiday(
181
- name="Mid-autumn Festival",
182
- month=9,
183
- day=7,
184
- observance=partial(lunisolar, mapping=maf_mapping, func=next_monday),
185
- start_date=Timestamp(start_year, 9, 7),
186
- ),
187
- Holiday(
188
- name="Mid-autumn Festival",
189
- month=9,
190
- day=8,
191
- observance=partial(lunisolar, mapping=maf_mapping, func=second_day_in_lieu, delta=1),
192
- start_date=Timestamp(start_year, 9, 7),
193
- ),
194
- Holiday(
195
- name="Mid-autumn Festival",
196
- month=9,
197
- day=9,
198
- observance=partial(lunisolar, mapping=maf_mapping, func=third_day_in_lieu, delta=2),
199
- start_date=Timestamp(start_year, 9, 7),
200
- ),
201
- Holiday(
202
- name="National Day",
203
- month=10,
204
- day=1,
205
- start_date=Timestamp(start_year, 10, 1),
206
- ),
207
- Holiday(
208
- name="National Day",
209
- month=10,
210
- day=2,
211
- start_date=Timestamp(start_year, 10, 2),
212
- ),
213
- Holiday(
214
- name="National Day",
215
- month=10,
216
- day=3,
217
- start_date=Timestamp(start_year, 10, 3),
218
- ),
219
- Holiday(
220
- name="National Day",
221
- month=10,
222
- day=4,
223
- start_date=Timestamp(start_year, 10, 4),
224
- ),
225
- Holiday(
226
- name="National Day",
227
- month=10,
228
- day=5,
229
- start_date=Timestamp(start_year, 10, 5),
230
- ),
231
- Holiday(
232
- name="National Day",
233
- month=10,
234
- day=6,
235
- start_date=Timestamp(start_year, 10, 6),
236
- ),
237
- Holiday(
238
- name="National Day",
239
- month=10,
240
- day=7,
241
- start_date=Timestamp(start_year, 10, 7),
242
- ),
243
- ])
244
-
245
- @property
246
- def adhoc_holidays(self):
247
- return all_holidays
248
-
249
-
250
- def second_day_in_lieu(dt):
251
- dow = dt.weekday()
252
- if dow == 0: # Holiday is Sunday, use Saturday
253
- return dt - timedelta(2)
254
- elif dow == 1: # Holiday is Monday, use Saturday
255
- return dt - timedelta(3)
256
- elif dow == 2: # Holiday is Tuesday, use Sunday
257
- return dt - timedelta(3)
258
- elif dow == 3: # Holiday is Wednesday, use Saturday
259
- return dt - timedelta(5)
260
-
261
- return dt
262
-
263
-
264
- def third_day_in_lieu(dt):
265
- dow = dt.weekday()
266
- if dow == 0: # Holiday is Saturday, use Sunday
267
- return dt - timedelta(1)
268
- elif dow == 1: # Holiday is Sunday, use Sunday
269
- return dt - timedelta(2)
270
- elif dow == 2: # Holiday is Monday, use Sunday
271
- return dt - timedelta(3)
272
- elif dow == 3: # Holiday is Tuesday, use Monday
273
- return dt - timedelta(3)
274
- elif dow == 4: # Holiday is Wednesday, use Sunday
275
- return dt - timedelta(5)
276
-
277
- return dt
278
-
279
-
280
- def lunisolar(dt, mapping, func=None, delta=None):
281
- if mapping and (dt.year in mapping):
282
- new_dt = mapping[dt.year]
283
- else:
284
- new_dt = dt
285
- if delta:
286
- new_dt = new_dt + timedelta(delta)
287
- if func:
288
- return func(new_dt)
289
- else:
290
- return new_dt
@@ -1,195 +0,0 @@
1
- from datetime import time
2
- from pandas import Timestamp
3
- from pytz import timezone
4
- from .market_calendar import MarketCalendar
5
-
6
- TASEClosedDay = [
7
- # 2019
8
- Timestamp('2019-03-21', tz='Asia/Jerusalem'),
9
- Timestamp('2019-04-09', tz='Asia/Jerusalem'),
10
- Timestamp('2019-04-25', tz='Asia/Jerusalem'),
11
- Timestamp('2019-04-26', tz='Asia/Jerusalem'),
12
- Timestamp('2019-05-08', tz='Asia/Jerusalem'),
13
- Timestamp('2019-05-09', tz='Asia/Jerusalem'),
14
- Timestamp('2019-06-09', tz='Asia/Jerusalem'),
15
- Timestamp('2019-08-11', tz='Asia/Jerusalem'),
16
- Timestamp('2019-09-17', tz='Asia/Jerusalem'),
17
- Timestamp('2019-09-29', tz='Asia/Jerusalem'),
18
- Timestamp('2019-09-30', tz='Asia/Jerusalem'),
19
- Timestamp('2019-10-01', tz='Asia/Jerusalem'),
20
- Timestamp('2019-10-08', tz='Asia/Jerusalem'),
21
- Timestamp('2019-10-09', tz='Asia/Jerusalem'),
22
- Timestamp('2019-10-13', tz='Asia/Jerusalem'),
23
- Timestamp('2019-10-14', tz='Asia/Jerusalem'),
24
- Timestamp('2019-10-20', tz='Asia/Jerusalem'),
25
- Timestamp('2019-10-21', tz='Asia/Jerusalem'),
26
- # 2020
27
- Timestamp('2020-03-02', tz='Asia/Jerusalem'),
28
- Timestamp('2020-03-10', tz='Asia/Jerusalem'),
29
- Timestamp('2020-04-08', tz='Asia/Jerusalem'),
30
- Timestamp('2020-04-09', tz='Asia/Jerusalem'),
31
- Timestamp('2020-04-14', tz='Asia/Jerusalem'),
32
- Timestamp('2020-04-15', tz='Asia/Jerusalem'),
33
- Timestamp('2020-04-28', tz='Asia/Jerusalem'),
34
- Timestamp('2020-04-29', tz='Asia/Jerusalem'),
35
- Timestamp('2020-05-28', tz='Asia/Jerusalem'),
36
- Timestamp('2020-05-29', tz='Asia/Jerusalem'),
37
- Timestamp('2020-07-30', tz='Asia/Jerusalem'),
38
- Timestamp('2020-09-20', tz='Asia/Jerusalem'),
39
- Timestamp('2020-09-27', tz='Asia/Jerusalem'),
40
- Timestamp('2020-09-28', tz='Asia/Jerusalem'),
41
- # 2021
42
- Timestamp('2021-02-26', tz='Asia/Jerusalem'),
43
- Timestamp('2021-03-28', tz='Asia/Jerusalem'),
44
- Timestamp('2021-04-02', tz='Asia/Jerusalem'),
45
- Timestamp('2021-04-14', tz='Asia/Jerusalem'),
46
- Timestamp('2021-04-15', tz='Asia/Jerusalem'),
47
- Timestamp('2021-05-16', tz='Asia/Jerusalem'),
48
- Timestamp('2021-05-17', tz='Asia/Jerusalem'),
49
- Timestamp('2021-07-18', tz='Asia/Jerusalem'),
50
- Timestamp('2021-09-06', tz='Asia/Jerusalem'),
51
- Timestamp('2021-09-07', tz='Asia/Jerusalem'),
52
- Timestamp('2021-09-08', tz='Asia/Jerusalem'),
53
- Timestamp('2021-09-15', tz='Asia/Jerusalem'),
54
- Timestamp('2021-09-16', tz='Asia/Jerusalem'),
55
- Timestamp('2021-09-20', tz='Asia/Jerusalem'),
56
- Timestamp('2021-09-21', tz='Asia/Jerusalem'),
57
- Timestamp('2021-09-27', tz='Asia/Jerusalem'),
58
- Timestamp('2021-09-28', tz='Asia/Jerusalem'),
59
- #2022
60
- Timestamp('2022-03-17', tz='Asia/Jerusalem'),
61
- Timestamp('2022-03-18', tz='Asia/Jerusalem'),
62
- Timestamp('2022-04-15', tz='Asia/Jerusalem'),
63
- Timestamp('2022-04-21', tz='Asia/Jerusalem'),
64
- Timestamp('2022-04-22', tz='Asia/Jerusalem'),
65
- Timestamp('2022-05-05', tz='Asia/Jerusalem'),
66
- Timestamp('2022-06-05', tz='Asia/Jerusalem'),
67
- Timestamp('2022-08-07', tz='Asia/Jerusalem'),
68
- Timestamp('2022-09-25', tz='Asia/Jerusalem'),
69
- Timestamp('2022-09-26', tz='Asia/Jerusalem'),
70
- Timestamp('2022-09-27', tz='Asia/Jerusalem'),
71
- Timestamp('2022-10-04', tz='Asia/Jerusalem'),
72
- Timestamp('2022-10-05', tz='Asia/Jerusalem'),
73
- Timestamp('2022-10-09', tz='Asia/Jerusalem'),
74
- Timestamp('2022-10-10', tz='Asia/Jerusalem'),
75
- Timestamp('2022-10-16', tz='Asia/Jerusalem'),
76
- Timestamp('2022-10-17', tz='Asia/Jerusalem'),
77
- Timestamp('2022-11-01', tz='Asia/Jerusalem'),
78
- #2023
79
- Timestamp('2023-03-07', tz='Asia/Jerusalem'),
80
- Timestamp('2023-03-08', tz='Asia/Jerusalem'),
81
- Timestamp('2023-04-05', tz='Asia/Jerusalem'),
82
- Timestamp('2023-04-06', tz='Asia/Jerusalem'),
83
- Timestamp('2023-04-11', tz='Asia/Jerusalem'),
84
- Timestamp('2023-04-12', tz='Asia/Jerusalem'),
85
- Timestamp('2023-04-25', tz='Asia/Jerusalem'),
86
- Timestamp('2023-04-26', tz='Asia/Jerusalem'),
87
- Timestamp('2023-05-25', tz='Asia/Jerusalem'),
88
- Timestamp('2023-05-26', tz='Asia/Jerusalem'),
89
- Timestamp('2023-07-27', tz='Asia/Jerusalem'),
90
- Timestamp('2023-09-15', tz='Asia/Jerusalem'),
91
- Timestamp('2023-09-17', tz='Asia/Jerusalem'),
92
- Timestamp('2023-09-24', tz='Asia/Jerusalem'),
93
- Timestamp('2023-09-25', tz='Asia/Jerusalem'),
94
- Timestamp('2023-09-29', tz='Asia/Jerusalem'),
95
- Timestamp('2023-10-06', tz='Asia/Jerusalem'),
96
- Timestamp('2023-10-31', tz='Asia/Jerusalem'),
97
- #2024
98
- Timestamp('2024-03-24', tz='Asia/Jerusalem'),
99
- Timestamp('2024-03-25', tz='Asia/Jerusalem'),
100
- Timestamp('2024-04-22', tz='Asia/Jerusalem'),
101
- Timestamp('2024-04-23', tz='Asia/Jerusalem'),
102
- Timestamp('2024-04-28', tz='Asia/Jerusalem'),
103
- Timestamp('2024-04-29', tz='Asia/Jerusalem'),
104
- Timestamp('2024-05-13', tz='Asia/Jerusalem'),
105
- Timestamp('2024-05-14', tz='Asia/Jerusalem'),
106
- Timestamp('2024-06-11', tz='Asia/Jerusalem'),
107
- Timestamp('2024-06-12', tz='Asia/Jerusalem'),
108
- Timestamp('2024-08-13', tz='Asia/Jerusalem'),
109
- Timestamp('2024-10-02', tz='Asia/Jerusalem'),
110
- Timestamp('2024-10-03', tz='Asia/Jerusalem'),
111
- Timestamp('2024-10-04', tz='Asia/Jerusalem'),
112
- Timestamp('2024-10-11', tz='Asia/Jerusalem'),
113
- Timestamp('2024-10-16', tz='Asia/Jerusalem'),
114
- Timestamp('2024-10-17', tz='Asia/Jerusalem'),
115
- Timestamp('2024-10-23', tz='Asia/Jerusalem'),
116
- Timestamp('2024-10-24', tz='Asia/Jerusalem'),
117
- #2025
118
- Timestamp('2025-03-14', tz='Asia/Jerusalem'),
119
- Timestamp('2025-04-13', tz='Asia/Jerusalem'),
120
- Timestamp('2025-04-18', tz='Asia/Jerusalem'),
121
- Timestamp('2025-04-30', tz='Asia/Jerusalem'),
122
- Timestamp('2025-05-01', tz='Asia/Jerusalem'),
123
- Timestamp('2025-06-01', tz='Asia/Jerusalem'),
124
- Timestamp('2025-06-02', tz='Asia/Jerusalem'),
125
- Timestamp('2025-08-03', tz='Asia/Jerusalem'),
126
- Timestamp('2025-09-22', tz='Asia/Jerusalem'),
127
- Timestamp('2025-09-23', tz='Asia/Jerusalem'),
128
- Timestamp('2025-09-24', tz='Asia/Jerusalem'),
129
- Timestamp('2025-10-01', tz='Asia/Jerusalem'),
130
- Timestamp('2025-10-02', tz='Asia/Jerusalem'),
131
- Timestamp('2025-10-06', tz='Asia/Jerusalem'),
132
- Timestamp('2025-10-07', tz='Asia/Jerusalem'),
133
- Timestamp('2025-10-13', tz='Asia/Jerusalem'),
134
- Timestamp('2025-10-14', tz='Asia/Jerusalem')
135
- ]
136
-
137
-
138
- class TASEExchangeCalendar(MarketCalendar):
139
- """
140
- Exchange calendar for TASE Stock Exchange
141
-
142
- Note these dates are only checked against 2020 and 2021
143
- https://info.tase.co.il/Eng/about_tase/corporate/Pages/vacation_schedule.aspx
144
-
145
- Opening times for the regular trading of equities (not including closing auction call)
146
- Open Time: 10:00 AM Asia/Jerusalem
147
- Close Time: 3:59 PM Asia/Jerusalem
148
-
149
- Daylight Saving Time in Israel comes into effect on the Friday before the last Sunday in March, and lasts until the
150
- last Sunday in October.
151
- During the Daylight Saving time period the clock will be UTC+3, and for the rest of the year UTC+2.
152
-
153
- Regularly-Observed Holidays (not necessarily in order):
154
- - Purim
155
- - Passover_I_Eve
156
- - Passover_I
157
- - Passover_II_Eve
158
- - Passover_II
159
- - Independence_Day
160
- - Yom_HaZikaron
161
- - Shavuot_Eve
162
- - Shavuot
163
- - Tisha_beAv
164
- - Jewish_New_Year_Eve
165
- - Jewish_New_Year_I
166
- - Jewish_New_Year_II
167
- - Yom_Kippur_Eve
168
- - Yom_Kippur
169
- - Sukkoth_Eve
170
- - Sukkoth
171
- - Simchat_Tora_Eve
172
- - Simchat_Tora
173
- """
174
-
175
- aliases = ['TASE']
176
- regular_market_times = {
177
- "market_open": ((None, time(10)),),
178
- "market_close": ((None, time(15,59)),)
179
- }
180
-
181
- @property
182
- def name(self):
183
- return "TASE"
184
-
185
- @property
186
- def tz(self):
187
- return timezone("Asia/Jerusalem")
188
-
189
- @property
190
- def adhoc_holidays(self):
191
- return TASEClosedDay
192
-
193
- @property
194
- def weekmask(self):
195
- return "Sun Mon Tue Wed Thu"
@@ -1,159 +0,0 @@
1
- from datetime import time
2
-
3
- import pandas as pd
4
- from pandas.tseries.holiday import AbstractHolidayCalendar, DateOffset, GoodFriday, Holiday, MO, weekend_to_monday
5
- from pytz import timezone
6
- from itertools import chain
7
-
8
- from .holidays_uk import BoxingDay, WeekendBoxingDay, WeekendChristmas
9
- from .market_calendar import MarketCalendar, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY
10
-
11
- # New Year's Day
12
- TSXNewYearsDay = Holiday(
13
- "New Year's Day",
14
- month=1,
15
- day=1,
16
- observance=weekend_to_monday,
17
- )
18
- # Ontario Family Day
19
- FamilyDay = Holiday(
20
- "Family Day",
21
- month=2,
22
- day=1,
23
- offset=DateOffset(weekday=MO(3)),
24
- start_date='2008-01-01',
25
- )
26
- # Victoria Day
27
- # https://www.timeanddate.com/holidays/canada/victoria-day
28
- VictoriaDay = Holiday(
29
- 'Victoria Day',
30
- month=5,
31
- day=24,
32
- offset=DateOffset(weekday=MO(-1)),
33
- )
34
- # Canada Day
35
- CanadaDay = Holiday(
36
- 'Canada Day',
37
- month=7,
38
- day=1,
39
- observance=weekend_to_monday,
40
- )
41
- # Civic Holiday
42
- CivicHoliday = Holiday(
43
- 'Civic Holiday',
44
- month=8,
45
- day=1,
46
- offset=DateOffset(weekday=MO(1)),
47
- )
48
- # Labor Day
49
- LaborDay = Holiday(
50
- 'Labor Day',
51
- month=9,
52
- day=1,
53
- offset=DateOffset(weekday=MO(1)),
54
- )
55
- # Thanksgiving
56
- Thanksgiving = Holiday(
57
- 'Thanksgiving',
58
- month=10,
59
- day=1,
60
- offset=DateOffset(weekday=MO(2)),
61
- )
62
-
63
- Christmas = Holiday(
64
- 'Christmas',
65
- month=12,
66
- day=25,
67
- )
68
-
69
- ChristmasEveEarlyClose2010Onwards = Holiday(
70
- "Christmas Eve Early Close",
71
- month=12,
72
- day=24,
73
- days_of_week=(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY),
74
- start_date=pd.Timestamp("2010-01-01"),
75
- )
76
-
77
- September11Closings2001 = [
78
- pd.Timestamp("2001-09-11", tz='UTC'),
79
- pd.Timestamp("2001-09-12", tz='UTC'),
80
- ]
81
-
82
-
83
- class TSXExchangeCalendar(MarketCalendar):
84
- """
85
- Exchange calendar for the Toronto Stock Exchange
86
-
87
- Open Time: 9:30 AM, EST
88
- Close Time: 4:00 PM, EST
89
-
90
- Regularly-Observed Holidays:
91
- - New Years Day (observed on first business day on/after)
92
- - Family Day (Third Monday in February, starting in 2008)
93
- - Good Friday
94
- - Victoria Day (Monday before May 25th)
95
- - Canada Day (July 1st, observed first business day after)
96
- - Civic Holiday (First Monday in August)
97
- - Labor Day (First Monday in September)
98
- - Thanksgiving (Second Monday in October)
99
- - Christmas Day
100
- - Dec. 26th if Christmas is on a Sunday
101
- - Dec. 27th if Christmas is on a weekend
102
- - Boxing Day
103
- - Dec. 27th if Christmas is on a Sunday
104
- - Dec. 28th if Boxing Day is on a weekend
105
-
106
- Early closes:
107
- - Starting in 2010, if Christmas Eve falls on a weekday, the market
108
- closes at 1:00 pm that day. If it falls on a weekend, there is no
109
- early close.
110
- """
111
- aliases = ['TSX', 'TSXV']
112
-
113
- regular_market_times = {
114
- "market_open": ((None, time(9, 30)),),
115
- "market_close": ((None, time(16)),)
116
- }
117
-
118
-
119
- @property
120
- def name(self):
121
- return "TSX"
122
-
123
- @property
124
- def tz(self):
125
- return timezone('Canada/Eastern')
126
-
127
- regular_early_close = time(13)
128
-
129
- @property
130
- def regular_holidays(self):
131
- return AbstractHolidayCalendar(rules=[
132
- TSXNewYearsDay,
133
- FamilyDay,
134
- GoodFriday,
135
- VictoriaDay,
136
- CanadaDay,
137
- CivicHoliday,
138
- LaborDay,
139
- Thanksgiving,
140
- Christmas,
141
- WeekendChristmas,
142
- BoxingDay,
143
- WeekendBoxingDay
144
- ])
145
-
146
- @property
147
- def adhoc_holidays(self):
148
- return list(chain(
149
- September11Closings2001,
150
- ))
151
-
152
- @property
153
- def special_closes(self):
154
- return [
155
- (
156
- self.regular_early_close,
157
- AbstractHolidayCalendar([ChristmasEveEarlyClose2010Onwards]),
158
- )
159
- ]