pandas-market-calendars 4.3.3__py3-none-any.whl → 4.6.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/__init__.py +39 -38
  2. pandas_market_calendars/calendar_registry.py +57 -53
  3. pandas_market_calendars/calendar_utils.py +1200 -261
  4. pandas_market_calendars/calendars/asx.py +66 -66
  5. pandas_market_calendars/calendars/bmf.py +223 -206
  6. pandas_market_calendars/calendars/bse.py +421 -407
  7. pandas_market_calendars/calendars/cboe.py +145 -145
  8. pandas_market_calendars/calendars/cme.py +405 -402
  9. pandas_market_calendars/calendars/cme_globex_agriculture.py +172 -126
  10. pandas_market_calendars/calendars/cme_globex_base.py +119 -119
  11. pandas_market_calendars/calendars/cme_globex_crypto.py +160 -160
  12. pandas_market_calendars/calendars/cme_globex_energy_and_metals.py +216 -216
  13. pandas_market_calendars/calendars/cme_globex_equities.py +123 -123
  14. pandas_market_calendars/calendars/cme_globex_fixed_income.py +136 -136
  15. pandas_market_calendars/calendars/cme_globex_fx.py +101 -101
  16. pandas_market_calendars/calendars/eurex.py +131 -139
  17. pandas_market_calendars/calendars/eurex_fixed_income.py +98 -98
  18. pandas_market_calendars/calendars/hkex.py +429 -426
  19. pandas_market_calendars/calendars/ice.py +81 -81
  20. pandas_market_calendars/calendars/iex.py +151 -112
  21. pandas_market_calendars/calendars/jpx.py +113 -109
  22. pandas_market_calendars/calendars/lse.py +114 -114
  23. pandas_market_calendars/calendars/mirror.py +149 -130
  24. pandas_market_calendars/calendars/nyse.py +1466 -1324
  25. pandas_market_calendars/calendars/ose.py +116 -116
  26. pandas_market_calendars/calendars/sifma.py +354 -350
  27. pandas_market_calendars/calendars/six.py +132 -132
  28. pandas_market_calendars/calendars/sse.py +311 -311
  29. pandas_market_calendars/calendars/tase.py +220 -197
  30. pandas_market_calendars/calendars/tsx.py +181 -181
  31. pandas_market_calendars/holidays/cme.py +385 -385
  32. pandas_market_calendars/holidays/cme_globex.py +214 -214
  33. pandas_market_calendars/holidays/cn.py +1476 -1455
  34. pandas_market_calendars/holidays/jp.py +401 -398
  35. pandas_market_calendars/holidays/jpx_equinox.py +1 -0
  36. pandas_market_calendars/holidays/nyse.py +1536 -1531
  37. pandas_market_calendars/holidays/oz.py +63 -63
  38. pandas_market_calendars/holidays/sifma.py +350 -338
  39. pandas_market_calendars/holidays/us.py +376 -376
  40. pandas_market_calendars/market_calendar.py +1057 -895
  41. {pandas_market_calendars-4.3.3.dist-info → pandas_market_calendars-4.6.0.dist-info}/METADATA +13 -9
  42. pandas_market_calendars-4.6.0.dist-info/RECORD +50 -0
  43. {pandas_market_calendars-4.3.3.dist-info → pandas_market_calendars-4.6.0.dist-info}/WHEEL +1 -1
  44. pandas_market_calendars-4.3.3.dist-info/RECORD +0 -50
  45. {pandas_market_calendars-4.3.3.dist-info → pandas_market_calendars-4.6.0.dist-info}/LICENSE +0 -0
  46. {pandas_market_calendars-4.3.3.dist-info → pandas_market_calendars-4.6.0.dist-info}/NOTICE +0 -0
  47. {pandas_market_calendars-4.3.3.dist-info → pandas_market_calendars-4.6.0.dist-info}/top_level.txt +0 -0
@@ -1,1324 +1,1466 @@
1
- #
2
- # Copyright 2016 Quantopian, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- from datetime import time
17
- from itertools import chain
18
-
19
- import pandas as pd
20
- from pandas.tseries.holiday import AbstractHolidayCalendar
21
- from pytz import timezone
22
-
23
- from pandas_market_calendars.holidays.nyse import (
24
- # Always Celebrated Holidays
25
- USNewYearsDayNYSEpost1952,
26
- USNewYearsDayNYSEpre1952,
27
- SatBeforeNewYearsAdhoc,
28
- USPresidentsDay,
29
- USWashingtonsBirthDay1964to1970,
30
- USWashingtonsBirthDayBefore1952,
31
- USWashingtonsBirthDay1952to1963,
32
- USLincolnsBirthDayBefore1954,
33
- LincolnsBirthDayAdhoc,
34
- SatBeforeWashingtonsBirthdayAdhoc,
35
- SatAfterWashingtonsBirthdayAdhoc,
36
- SatBeforeAfterLincolnsBirthdayAdhoc,
37
- GrantsBirthDayAdhoc,
38
- USMartinLutherKingJrAfter1998,
39
- GoodFriday,
40
- GoodFridayPre1898,
41
- GoodFriday1899to1905,
42
- SatAfterGoodFridayAdhoc,
43
- USMemorialDay,
44
- USMemorialDayBefore1952,
45
- USMemorialDay1952to1964,
46
- USMemorialDay1964to1969,
47
- SatBeforeDecorationAdhoc,
48
- SatAfterDecorationAdhoc,
49
- DayBeforeDecorationAdhoc,
50
- USJuneteenthAfter2022,
51
- USIndependenceDay,
52
- USIndependenceDayPre1952,
53
- USIndependenceDay1952to1954,
54
- SatBeforeIndependenceDayAdhoc,
55
- SatAfterIndependenceDayAdhoc,
56
- MonTuesThursBeforeIndependenceDay,
57
- FridayAfterIndependenceDayNYSEpre2013,
58
- WednesdayBeforeIndependenceDayPost2013,
59
- MonBeforeIndependenceDayAdhoc,
60
- DaysAfterIndependenceDayAdhoc,
61
- # DaysBeforeIndependenceDay1pmEarlyCloseAdhoc,
62
- USColumbusDayBefore1954,
63
- USElectionDay1848to1967,
64
- USLaborDayStarting1887,
65
- SatBeforeLaborDayAdhoc,
66
- USThanksgivingDay,
67
- USThanksgivingDay1939to1941,
68
- USThanksgivingDayBefore1939,
69
- DayAfterThanksgiving2pmEarlyCloseBefore1993,
70
- DayAfterThanksgiving1pmEarlyCloseInOrAfter1993,
71
- FridayAfterThanksgivingAdHoc,
72
- USElectionDay1968to1980Adhoc,
73
- ChristmasNYSE,
74
- Christmas54to98NYSE,
75
- ChristmasBefore1954,
76
- ChristmasEvesAdhoc,
77
- DayAfterChristmasAdhoc,
78
- DayAfterChristmas1pmEarlyCloseAdhoc,
79
- ChristmasEvePost1999Early1pmClose,
80
- ChristmasEve1pmEarlyCloseAdhoc,
81
- ChristmasEve2pmEarlyCloseAdhoc,
82
- SatBeforeChristmasAdhoc,
83
- SatAfterChristmasAdhoc,
84
- # Retired Holidays
85
- USVetransDayAdHoc,
86
- SatAfterColumbusDayAdHoc,
87
- USVeteransDay1934to1953,
88
- # Adhoc Holidays
89
- # 1885
90
- UlyssesGrantFuneral1885,
91
- # 1892
92
- ColumbianCelebration1892,
93
- # 1888
94
- GreatBlizzardOf1888,
95
- # 1889
96
- WashingtonInaugurationCentennialCelebration1889,
97
- # 1898
98
- CharterDay1898,
99
- WelcomeNavalCommander1898,
100
- # 1899
101
- AdmiralDeweyCelebration1899,
102
- GarretHobartFuneral1899,
103
- # 1901
104
- McKinleyDeathAndFuneral1901,
105
- QueenVictoriaFuneral1901,
106
- MovedToProduceExchange1901,
107
- EnlargedProduceExchange1901,
108
- # 1902
109
- KingEdwardVIIcoronation1902,
110
- # 1903
111
- NYSEnewBuildingOpen1903,
112
- # 1908
113
- GroverClevelandFuneral1pmClose1908,
114
- # 1909
115
- HudsonFultonCelebration1909,
116
- # 1910
117
- KingEdwardDeath11amyClose1910,
118
- KingEdwardFuneral12pmOpen1910,
119
- # 1912
120
- JamesShermanFuneral1912,
121
- # 1913
122
- JPMorganFuneral12pmOpen1913,
123
- WilliamGaynorFuneral12pmOpen1913,
124
- # 1914
125
- OnsetOfWWI1914,
126
- # 1917
127
- WeatherHeatClosing1917,
128
- ParadeOfNationalGuardEarlyClose1917,
129
- LibertyDay12pmEarlyClose1917,
130
- DraftRegistrationDay1917,
131
- # 1918
132
- WeatherNoHeatClosing1918,
133
- DraftRegistrationDay1918,
134
- LibertyDay12pmEarlyClose1918,
135
- FalseArmisticeReport1430EarlyClose1918,
136
- ArmisticeSigned1918,
137
- # 1919
138
- RooseveltFuneral1230EarlyClose1919,
139
- Homecoming27Division1919,
140
- ParadeOf77thDivision1919,
141
- BacklogRelief1919,
142
- GeneralPershingReturn1919,
143
- TrafficBlockLateOpen1919,
144
- # 1920
145
- TrafficBlockLateOpen1920,
146
- OfficeLocationChange1920,
147
- WallStreetExplosionEarlyClose1920,
148
- # 1921
149
- AnnunciatorBoardFire1pmLateOpen1921,
150
- # 1923
151
- HardingDeath1923,
152
- HardingFuneral1923,
153
- # 1924
154
- WoodrowWilsonFuneral1230EarlyClose1924,
155
- # 1925
156
- EclipseOfSunLateOpen1925,
157
- CromwellFuneral1430EarlyClose1925,
158
- # 1927
159
- LindberghParade1927,
160
- # 1928
161
- BacklogRelief1928,
162
- BacklogRelief2pmEarlyClose1928,
163
- # 1929
164
- BacklogRelief1929,
165
- BacklogRelief1pmEarlyClose1929,
166
- BacklogRelief12pmLateOpen1929,
167
- # 1930
168
- TaftFuneral1230EarlyClose1930,
169
- # 1933
170
- CoolidgeFuneral1933,
171
- BankHolidays1933,
172
- GasFumesOnTradingFloor1230EarlyClose1933,
173
- HeavyVolume1933,
174
- HeavyVolume12pmLateOpen1933,
175
- HeavyVolume11amLateOpen1933,
176
- HeavyVolume2pmEarlyClose1933,
177
- NRAdemonstration12pmEarlyClose1933,
178
- # 1924
179
- Snow11amLateOpen1934,
180
- # 1936
181
- KingGeorgeVFuneral11amLateOpen1936,
182
- # 1944
183
- SatClosings1944,
184
- # 1945
185
- RooseveltDayOfMourning1945,
186
- SatClosings1945,
187
- VJday1945,
188
- NavyDay1945,
189
- # 1946
190
- RailroadStrike1946,
191
- SatClosings1946,
192
- # 1947
193
- SatClosings1947,
194
- # 1948
195
- SatClosings1948,
196
- SevereWeather1948,
197
- # 1949
198
- SatClosings1949,
199
- # 1950
200
- SatClosings1950,
201
- # 1951
202
- SatClosings1951,
203
- # 1952
204
- SatClosings1952,
205
- # 1960
206
- Snow11amLateOpening1960,
207
- # 1963
208
- KennedyAssassination1407EarlyClose,
209
- KennedyFuneral1963,
210
- # 1964
211
- HooverFuneral1400EarlyClose1964,
212
- # 1965
213
- PowerFail1105LateOpen,
214
- # 1966
215
- TransitStrike2pmEarlyClose1966,
216
- # 1967
217
- Snow1015LateOpen1967,
218
- Snow2pmEarlyClose1967,
219
- Backlog2pmEarlyCloses1967,
220
- # 1968
221
- Backlog2pmEarlyCloses1968,
222
- MLKdayOfMourning1968,
223
- PaperworkCrisis1968,
224
- # 1969 - 1970
225
- PaperworkCrisis2pmEarlyCloses1969,
226
- SnowClosing1969,
227
- Snow11amLateOpen1969,
228
- EisenhowerFuneral1969,
229
- Storm1045LateOpen1969,
230
- PaperworkCrisis230pmEarlyCloses1969,
231
- FirstLunarLandingClosing1969,
232
- PaperworkCrisis3pmEarlyCloses1969to1970,
233
- # 1972
234
- TrumanFuneral1972,
235
- # 1973
236
- JohnsonFuneral1973,
237
- Ice11amLateOpen1973,
238
- # 1974
239
- MerrillLynchComputer1015LateOpen1974,
240
- FireDrill1015LateOpen1974,
241
- # 1975
242
- Snow230EarlyClose1975,
243
- # 1976
244
- Storm1115LateOpen1976,
245
- FireDrill1015LateOpen1976,
246
- HurricaneWatch3pmEarlyClose1976,
247
- # 1977
248
- NewYorkCityBlackout77,
249
- # 1978
250
- Snow12pmLateOpen1978,
251
- Snow2pmEarlyClose1978,
252
- Snow11amLateOpen1978,
253
- # 1981
254
- ReaganAssassAttempt317pmEarlyClose1981,
255
- ConEdPowerFail328pmEarlyClose1981,
256
- # 1985
257
- HurricaneGloriaClosings1985,
258
- # 1987
259
- Backlog2pmEarlyCloses1987,
260
- Backlog230pmEarlyCloses1987,
261
- Backlog3pmEarlyCloses1987,
262
- Backlog330pmEarlyCloses1987,
263
- # 1989
264
- Fire11amLateOpen1989,
265
- # 1990
266
- ConEdXformer931amLateOpen1990,
267
- # 1991
268
- TroopsInGulf931LateOpens1991,
269
- # 1994
270
- Snow230pmEarlyClose1994,
271
- NixonFuneral1994,
272
- # 1995
273
- Computer1030LateOpen1995,
274
- # 1996
275
- Snow11amLateOpen1996,
276
- Snow2pmEarlyClose1996,
277
- # 1997
278
- CircuitBreakerTriggered330pmEarlyClose1997,
279
- # 2001
280
- September11Closings2001,
281
- Sept11MomentSilence933amLateOpen2001,
282
- EnduringFreedomMomentSilence931amLateOpen2001,
283
- # 2002
284
- Sept11Anniversary12pmLateOpen2002,
285
- # 2003
286
- IraqiFreedom932amLateOpen2003,
287
- # 2004
288
- ReaganMomentSilence932amLateOpen2004,
289
- ReaganMourning2004,
290
- # 2005
291
- SystemProb356pmEarlyClose2005,
292
- # 2006
293
- FordMomentSilence932amLateOpen2006,
294
- # 2007
295
- FordMourning2007,
296
- # 2012
297
- HurricaneSandyClosings2012,
298
- # 2018
299
- GeorgeHWBushDeath2018,
300
- )
301
- from pandas_market_calendars.market_calendar import MarketCalendar
302
-
303
- # Useful resources for making changes to this file:
304
- # http://www.nyse.com/pdfs/closings.pdf
305
- # http://www.stevemorse.org/jcal/whendid.html
306
-
307
- # Overwrite the default holiday calendar start_date of 1/1/70
308
- AbstractHolidayCalendar.start_date = "1885-01-01"
309
-
310
-
311
- class NYSEExchangeCalendar(MarketCalendar):
312
- """
313
- Exchange calendar for NYSE from 1885-01-01
314
- - Note: DJIA was first recorded 1885-02-16
315
-
316
- REFERENCES:
317
- - https://web.archive.org/web/20141224054812/http://www.nyse.com/about/history/timeline_trading.html
318
- - https://www.marketwatch.com/story/a-brief-history-of-trading-hours-on-wall-street-2015-05-29
319
- - http://www.ltadvisors.net/Info/research/closings.pdf
320
- - https://github.com/rsheftel/pandas_market_calendars/files/6827110/Stocks.NYSE-Closings.pdf
321
-
322
- NYSE OVERVIEW:
323
- - 1792: 5 securities traded
324
- - 1871: Continuous trading begins
325
- - 1885 to 1887: trading hours Mon-Sat 10am to variable 2pm thru 4pm (coded as 3pm)
326
- - 1887: trading hours Mon-Fri 10am-3pm Sat 10am-noon
327
- - 1952-09-29: trading hours Mon-Fri 10am-3:30pm,
328
- - Sat trading removed after Sept 27
329
- - Last effective Saturday traded was May 24, 1952
330
- - 1974: trading hours Mon-Fri 10am-4pm
331
- - 1985: trading hours Mon-Fri 9:30am-4pm
332
-
333
- #######################################
334
- Regularly-Observed Holidays as of 2021:
335
- #######################################
336
- - New Years Day (observed on monday when Jan 1 is a Sunday)
337
- - Martin Luther King Jr. Day (3rd Monday in January, only after 1998)
338
- - Lincoln's Birthday (February 12th, only before 1954 starting in 1896)
339
- - Washington's Birthday (February 22nd, before 1971 with rule change in 1964)
340
- - Washington's Birthday (aka President's Day, 3rd Monday in February, after 1970)
341
- - Good Friday (two days before Easter Sunday)
342
- - Memorial Day (May 30th, before 1970, with rule change in 1964)
343
- - Memorial Day (last Monday in May, after 1970)
344
- - Independence Day (July 4th Sunday to Monday, before 1954)
345
- - Independence Day (observed on the nearest weekday to July 4th, after 1953)
346
- - Election Day (First Tuesday starting on November 2nd, between 1848 and 1967)
347
- - Election Day (Every four years, first Tuesday starting on November 2nd, between 1968 and 1980)
348
- - Veterans Day (November 11th, between 1934 and 1953)
349
- - Columbus Day (October 12th, before 1954)
350
- - Labor Day (first Monday in September)
351
- - Thanksgiving (last Thursday in November, before 1939)
352
- - Thanksgiving (second to last Thursday in November, between 1939 and 1941)
353
- - Thanksgiving (fourth Thursday in November, after 1941)
354
- - Christmas (December 25th, Sunday to Monday, before 1954)
355
- - Christmas (observed on nearest weekday to December 25, after 1953)
356
-
357
- ################################
358
- Regularly-Observed Early Closes:
359
- ################################
360
- - July 3rd (Mondays, Tuesdays, and Thursdays, 1995 onward)
361
- - July 5th (Fridays, 1995 onward, except 2013)
362
- - Christmas Eve (except on Fridays, when the exchange is closed entirely)
363
- - Day After Thanksgiving (aka Black Friday, observed from 1992 onward)
364
-
365
- NOTE: Until 1993, the standard early close time for the NYSE was 2:00 PM.
366
- From 1993 onward, it has been 1:00 PM.
367
-
368
- ####################################
369
- Retired Regularly-Observed Holidays:
370
- ####################################
371
- - Columbus Day (after 1953)
372
- - Armistice/Veterans Day (after 1953)
373
-
374
- #################################
375
- Irregularities Openings/Closings:
376
- #################################
377
- begin reference: https://github.com/rsheftel/pandas_market_calendars/files/6827110/Stocks.NYSE-Closings.pdf
378
- - Closed on Aug 8, 1885 (Sat): President Ulysses S. Grant funeral
379
- - Closed on Jul 2, 1887 (Sat): Saturday before Independence Day
380
- - Closed on Dec 24, 1887 (Sat): Christmas Eve
381
- - Closed on Mar 12-13, 1888 (Mon-Tue): Blizzard of 1888
382
- - Closed on Sep 1, 1888 (Sat): Saturday before Labor Day
383
- - Closed on Nov 30, 1888 (Fri): Friday after Thanksgiving
384
- - Closed on Apr 29 - May 1, 1889 (Mon-Wed): Centennial celbration of Washington's inauguration
385
- - Closed on Jul 5, 1890 (Sat): Saturday after Independence Day
386
- - Closed on Dec 26, 1891 (Sat): Saturday after Christmas
387
- - Closed on Jul 2, 1892 (Sat): Saturday before Independence Day
388
- - Closed on Oct 12, 1892 (Wed) Columbian Celebration (Columbus discovery of America)
389
- - Closed on Oct 21-22, 1892 (Fri-Sat): Columbian Celebration
390
- - Closed on Apr 27, 1893 (Thu): Columbian Celebration
391
- - Closed on Dec 26, 1896 (Sat): Saturday after Christmas
392
- - Closed on Apr 27, 1897 (Tue): Grant's birthday
393
- - Closed on May 4, 1898 (Wed): NYC Charter Day
394
- - Closed on Jul 2, 1898 (Sat): Saturday before Independence Day
395
- - Closed on Aug 20, 1898 (Sat): Welcome of naval commanders
396
- - Closed on Sep 3, 1898 (Sat): Saturday before Labor Day
397
- - Closed on Dec 24, 1898 (Sat): Saturday before Christmas
398
- - Closed on Feb 11, 1899 (Sat): Saturday before Lincoln's birthday
399
- - Closed on May 29, 1899 (Mon): Monday before Decoration Day
400
- - Closed on Jul 3, 1899 (Mon): Monday before Independence Day
401
- - Closed on Sep 29-30, 1899 (Fri-Sat): Admiral Dewey Celebration
402
- - Closed on Nov 25, 1899 (Sat): Funeral of Vice-President Garret A. Hobart
403
- - Closed on Apr 14, 1900 (Sat): Saturday after Good Friday
404
- - Closed on Sep 1, 1900 (Sat): Saturday before Labor Day
405
- - Closed on Dec 24, 1900 (Mon): Christmas Eve
406
- - Closed on Feb 2, 1901 (Sat): Funderal of Queen Victoria of England
407
- - Closed on Feb 23, 1901 (Sat): Saturday after Washington's birthday
408
- - Closed on Apr 6, 1901 (Sat): Saturday after Good Friday
409
- - Closed on Apr 27, 1901 (Sat): Moved to temporary quarters in Produce Exchange
410
- - Closed on May 11, 1901 (Sat): Enlarged temporary quarters in Produce Exchange
411
- - Closed on Jul 5-6, 1901 (Fri-Sat): Days after Independence Day
412
- - Closed on Aug 31, 1901 (Sat): Saturday before Labor Day
413
- - Closed on Sep 14, 1901 (Sat): Death of President William McKinley
414
- - Closed on Sep 19, 1901 (Thu): Funeral of President William McKinley
415
- - Closed on Mar 29, 1902 (Sat): Saturday after Good Friday
416
- - Closed on May 31, 1902 (Sat): Saturday after Decoration Day
417
- - Closed on Jul 5, 1902 (Sat): Saturday after Independence Day
418
- - Closed on Aug 9, 1902 (Sat): Coronation of King Edward VII of England
419
- - Closed on Aug 30, 1902 (Sat): Saturday before Labor Day
420
- - Closed on Feb 21, 1903 (Sat): Saturday before Washington's birthday
421
- - Closed on Apr 11, 1903 (Sat): Saturday after Good Friday
422
- - Closed on Apr 22, 1903 (Wed): Opening of the new NYSE building
423
- - Closed on Sep 5, 1903 (Sat): Saturday before Labor Day
424
- - Closed on Dec 26, 1903 (Sat): Saturday after Christmas
425
- - Closed on May 28, 1904 (Sat): Saturday before Decoration Day
426
- - Closed on Jul 2, 1904 (Sat): Saturday before Independence Day
427
- - Closed on Sep 3, 1904 (Sat): Saturday before Labor Day
428
- - Closed on Dec 24, 1904 (Sat): Saturday before Christmas
429
- - Closed on Apr 22, 1905 (Sat): Saturday after Good Friday
430
- - Closed on Feb 23, 1907 (Sat): Saturday after Washington's birthday
431
- - Closed on Mar 30, 1907 (Sat): Saturday after Good Friday
432
- - Closed on Aug 31, 1907 (Sat): Saturday before Labor Day
433
- - Closed on Apr 18, 1908 (Sat): Saturday after Good Friday
434
- - Early Close 1pm on Jun 25, 1908 (Fri): Former President Grover Cleveland funeral
435
- - Closed on Sep 5, 1908 (Sat): Saturday before Labor Day
436
- - Closed on Dec 26, 1908 (Sat): Saturday after Christmas
437
- - Closed on Feb 13, 1909 (Sat): Saturday after Lincoln's birthday
438
- - Closed on Apr 10, 1909 (Sat): Saturday after Good Friday
439
- - Closed on May 29, 1909 (Sat): Saturday before Decoration Day
440
- - Closed on Jul 3, 1909 (Sat): Saturday before Independence Day
441
- - Closed on Sep 4, 1909 (Sat) Saturday before Labor Day
442
- - Closed on Sep 25, 1909 (Sat): Reception Day of the Hudson-Fulton Celebration
443
- - Closed on Mar 26, 1910 (Sat): Saturday after Good Friday
444
- - Early Close 11am on May 7, 1910 (Sat): King Edward VII of England Death
445
- - Late Open 12pm on May 20, 1910 (Fri): King Edward VII of England Funeral
446
- - Closed on May 28, 1910 (Sat): Saturday before Decoration Day
447
- - Closed on Jul 2, 1910 (Sat): Saturday before Independence Day
448
- - Closed on Sep 3, 1910 (Sat): Saturday before Labor Day
449
- - Closed on Dec 24, 1910 (Sat): Saturday before Christmas
450
- - Closed on Apr 15, 1911 (Sat): Saturday after Good Friday
451
- - Closed on Sep 2, 1911 (Sat): Saturday before Labor Day
452
- - Closed on Dec 23, 1911 (Sat): Saturday before Christmas
453
- - Closed on Aug 31, 1912 (Sat): Saturday before Labor Day
454
- - Closed on Nov 2, 1912 (Sat): Vice-President James S. Sherman funeral
455
- - Closed on Mar 22, 1913 (Sat): Saturday after Good Friday
456
- - Late Open 12pm on Apr 14, 1913 (Mon): JP Morgan funeral
457
- - Closed on May 31, 1913 (Sat): Saturday after Decoration Day
458
- - Closed on Jul 5, 1913 (Sat): Saturday after Independence Day
459
- - Closed on Aug 30, 1913 (Sat): Saturday before Labor Day
460
- - Late Open 12pm on Sep 22, 1913 (Mon): Mayor William J. Gaynor funeral
461
- - Closed on Jul 31-Dec 11, 1914: Pending outbreak of World War I.
462
- - Bonds reopn Nov 28, 1914 for limited trading with restrictions
463
- - Stocks (limited in number) reopen Dec 12, 1914 with restrictions
464
- - Stocks (all stocks) reopen Dec 14, 1914 with restrictions
465
- - Restrictions removed on Apr 1, 1915
466
- - Closed on Dec 30, 1916 (Sat): Saturday before New Year's Day
467
- - Closed on Jun 5, 1917 (Tue): Draft Registraion Day
468
- - Closed on Aug 4, 1917 (Sat): Heat
469
- - Early Close 12pm on Aug 29, 1917 (Wed): Parade of National Guard
470
- - Closed on Sep 1, 1917 (Sat): Saturday before Labor Day
471
- - Closed on Oct 13, 1917 (Sat): Saturday after Columbus Day
472
- - Early Close 12pm on Oct 24, 1917 (Wed): Liberty Day
473
- - Closed on Jan 28, 1918 (Mon): Heatless day
474
- - Closed on Feb 4, 1918 (Mon): Heatless day
475
- - Closed on Feb 11, 1918 (Mon): Heatless day
476
- - Early Close 12pm on Apr 26, 1918 (Fri): Liberty Day
477
- - NOT IMPLEMENTED: Break from 11am to 12pm on Jul 11, 1918 (Thu): Former Mayor John Purroy Mitchell funeral
478
- - Closed on Sep 12, 1918 (Thu): Draft registration day
479
- - Early Close 2:30pm on Nov 7, 1918 (Thu): False armistice report
480
- - Closed on Nov 11, 1918 (Mon): Armistice signed
481
- - Early Close 12:30pm on Jan 7, 1919 (Tue): Former President Theodore Roosevelt funeral
482
- - Closed on Mar 25, 1919 (Tue): Homecoming of 27th Division
483
- - Closed on May 6, 1919 (Tue): Parade of 77th Division
484
- - Closed on May 31, 1919 (Sat): Saturday after Decoratin Day
485
- - Closed on Jul 5, 1919 (Sat): Saturday after Independence Day
486
- - Closed on Jul 19, 1919 (Sat): Heat and backlog catch up
487
- - Closed on Aug 2, 1919 (Sat): Backlog catch up
488
- - Closed on Aug 16, 1919 (Sat): Backlog catch up
489
- - Closed on Aug 30, 1919 (Sat): Saturday before Labor Day
490
- - Closed on Sep 10, 1919 (Wed): Return of General John J. Pershing
491
- - Late Open 10:30am on Dec 30, 1919 (Tue): Traffic block
492
- - Late Open 10:30am on Feb 6, 1920 (Fri): Traffic block
493
- - Closed on Apr 3, 1920 (Sat): Saturday after Good Friday
494
- - Closed on May 1, 1920 (Sat): Many firms changed office locations
495
- - Closed on Jul 3, 1920 (Sat): Saturday before Independence Day
496
- - Closed on Sep 4, 1920 (Sat): Saturday before Labor Day
497
- - Early Close 12pm on Sep 16, 1920 (Thu): Wall Street explosion
498
- - Closed on May 28, 1921 (Sat): Saturday before Decoration Day
499
- - Closed on Jul 2, 1921 (Sat): Saturday before Independence Day
500
- - Late Open 1pm on Aug 2, 1921 (Tue): Fire in annunciator board
501
- - Closed on Sep 3, 1921 (Sat): Saturday before Labor Day
502
- - Closed on Dec 23, 1922 (Sat): Saturday before Christmas
503
- - Closed on Aug 3, 1923 (Fri): President Warren G. Harding death
504
- - NOT IMPLEMENTED: Break 11am to 12:30pm on Aug 8, 1923 (Wed): President Warren G. Harding funeral
505
- - Closed on Aug 10, 1923 (Fri): President Warren G. Harding funeral
506
- - Early Close 12:30pm on Feb 6, 1924 (Wed): Former President Woodrow Wilson funderal
507
- - Closed on May 31, 1924 (Sat): Saturday after Decoration Day
508
- - Late Open 10:45am on Jan 24, 1925 (Sat): Eclipse of sun
509
- - Early Close 2:30pm on Sep 18, 1925 (Fri): Seymour L. Cromwell funeral (former NYSE president)
510
- - Closed on Dec 26, 1925 (Sat): Saturday after Christmas
511
- - Closed on May 29, 1926 (Sat): Saturday before Decoration Day
512
- - Closed on Jul 3, 1926 (Sat): Saturday before Independence Day
513
- - Closed on Sep 4, 1926 (Sat): Saturday before Labor Day
514
- - Closed on Jun 13, 1927 (Mon): Colonel Charles A. Lindberg parade
515
- - Closed on Apr 7, 1928 (Sat): Backlog catch up
516
- - Closed on Apr 21, 1928 (Sat): Backlog catch up
517
- - Closed on May 5, 1928 (Sat): Backlog catch up
518
- - Closed on May 12, 1928 (Sat): Backlog catch up
519
- - Closed on May 19, 1928 (Sat): Backlog catch up
520
- - Early Closes May 21-25, 1928 (Mon-Fri): Backlog catch up
521
- - Closed on May 26, 1928 (Sat): Backlog catch up
522
- - Closed on Nov 24, 1928 (Sat): Backlog catch up
523
- - Closed on Feb 9, 1929 (Sat): Backlog catch up
524
- - Closed on Feb 23, 1929 (Sat): Saturday after Washington's birthday
525
- - Closed on Mar 30, 1929 (Sat): Saturday after Good Friday
526
- - Closed on Aug 31, 1929 (Sat): Saturday before Labor Day
527
- - Late Open 12pm on Oct 31, 1929 (Thu): Backlog catch up and relieve personnel
528
- - Closed on Nov 1-2, 1929 (Fri-Sat): Backlog catch up and relieve personnel
529
- - Early Closes 1pm on Nov 6-8, 1929 (Wed-Fri): Backlog catch up and relieve personnel
530
- - Closed on Nov 9, 1929 (Sat): Backlog catch up and relieve personnel
531
- - Early Closes 1pm on Nov 11-15, 1929 (Mon-Fri): Backlog catch up and relieve personnel
532
- - Closed on Nov 16, 1929 (Sat): Backlog catch up and relieve personnel
533
- - Closed on Nov 18-22, 1929 (Mon-Fri): Backlog catch up and relieve personnel
534
- - Closed on Nov 23, 1929 (Sat): Backlog catch up and relieve personnel
535
- - Closed on Nov 29-30, 1929 (Fri-Sat): Backlog catch up and relieve personnel
536
- - Early Close 12:30pm on Mar 11, 1930 (Tue): Former President William Howard Taft funeral
537
- - Closed on Apr 19, 1930 (Sat): Saturday after Good Friday
538
- - Closed on May 31, 1930 (Sat): Saturday after Decoration Dday
539
- - Closed on Jul 5, 1930 (Sat): Saturday after Independence Day
540
- - Closed on Aug 30, 1930 (Sat): Saturday before Labor Day
541
- - Closed on Sep 5, 1931 (Sat): Saturday before Labor Day
542
- - Closed on Dec 26, 1931 (Sat): Saturday after Christmas
543
- - Closed on Jul 2, 1932 (Sat): Saturday before Independence Day
544
- - Closed on Jan 7, 1933 (Sat): Former President Calvin Coolidge funeral
545
- - Closed on Mar 4, 1933 (Sat): State banking holiday
546
- - Closed on Mar 6-14, 1933 (Mon-Tue): National banking holiday
547
- - Late Open 12pm on Jul 24-25, 1933 (Mon-Tue): Volume activity
548
- - Late Opens AND Early Closes on Jul 26-28, 1933 (Wed-Fri): Volume activity
549
- - Closed on July 29, 1933 (Sat): Volume activity
550
- - Early Close 12:30pm on Aug 4, 1933 (Fri): Gas fumes on trading floor
551
- - Closed on Aug 5, 1933 (Sat): Volume activity
552
- - Closed on Aug 12, 1933 (Sat): Volume activity
553
- - Closed on Aug 19, 1933 (Sat): Volume activity
554
- - Closed on Aug 26, 1933 (Sat): Volume activity
555
- - Closed on Sep 2, 1933 (Sat): Volume activity
556
- - Early Close 12pm on Sep 13, 1933 (Wed): NRA demonstration
557
- - Late Open 11am on Feb 20, 1934 (Tue): severe snowstorm
558
- - Late Open 11am on Jan 28, 1936 (Tue): King George V of England funeral
559
- - Closed on Dec 26, 1936 (Sat): Saturday after Christmas
560
- - Closed on May 29, 1937 (Sat): Saturday before Decoration Day
561
- - Closed on Jul 3, 1937 (Sat): Saturday before Independence Day
562
- - NOT IMPLEMENTED Break from 12-13:00 on May 18, 1942 (Mon): NYSE 150th anniversary
563
- - NOT IMPLEMENTED Break from 14:32-14:58 on Oct 22, 1942 (Thu): Civil Defense drill
564
- - NOT IMPLEMENTED Break from 14:38-14:59 on Oct 26, 1943 (Tue): Civil Defense drill
565
- - Reopened from 15:20-15:40 under special rule of the Board
566
- - Closed on Aug 19, 1944 (Sat)
567
- - Closed on Aug 26, 1944 (Sat)
568
- - Closed on Sep 2, 1944 (Sat)
569
- - Closed on Apr 14, 1945 (Sat): President Franklin D. Roosevelt National Day of mourning
570
- - NOT IMPLEMENTED Break 11:00-13:00 on Jun 19, 1945 (Tue): Parade for General Eisenhower
571
- - Closed on Saturdays Jul 7-Sep 1, 1945
572
- - Closed on Aug 15-16, 1945 (Wed-Thu): VJ Day. End of World War II
573
- - Closed on Oct 13, 1945 (Sat): Saturday after Columbus Day
574
- - Closed on Oct 27, 1945 (Sat): Navy Day
575
- - Closed on Dec 24, 1945 (Mon): Christmas Eve
576
- - Closed on Feb 23, 1946 (Sat): Saturday after Washington's birthday
577
- - Closed on May 25, 1946 (Sat): Railroad strike
578
- - Closed on Saturdays Jun 1-Sep 28, 1946 (Sat-Sat)
579
- - Closed on Saturdays May 31-Sep 27, 1947 (Sat-Sat)
580
- - Closed on Jan 3, 1948 (Sat): severe weather
581
- - Closed on Saturdays May 29-Sep 25, 1948 (Sat-Sat)
582
- - Closed on Saturdays May 28-Sep 4, 1948 (Sat-Sat)
583
- - Cosed on Dec 24, 1949 (Sat): Christmas Eve
584
- - Closed on Saturdays Jun 3-Sep 30, 1950 (Sat-Sat)
585
- - Closed on Dec 12, 1950 (Sat): Saturday before Christmas Eve
586
- - NOT IMPLEMENTED Break from 11:00-13:00 on Apr 20, 1951 (Fri): Parade for General MacArthur
587
- - Closed on Saturdays Jun 2-Sep 29, 1951 (Sat-Sat)
588
- - NOT IMPLEMENTED Break from 10:33-11:05 (Wed): Civil Defense Drill
589
- - Early Close 1pm on Dec 24, 1951 (Mon): Christmas Eve
590
- - Closed on Saturdays May 31-Sep 27, 1952 (Sat-Sat)
591
- - As of Sep 29, 1952 Saturdays were retired as trading days
592
- - As of Sep 29, 1952, M-F trading closes at 3:30pm (30 minutes longer)
593
- - NOT IMPLEMENTED Break 10:02-10:32 on Jun 14, 1954 (Mon): Civil Defense drill
594
- - Closed on Dec 24, 1954 (Fri): Christmas Eve
595
- - NOT IMPLEMENTED Break 14:05-14:35 on Jun 15, 1955 (Wed): Civil Defense drill
596
- - Closed on Dec 24, 1956 (Mon): Christmas Eve
597
- - NOT IMPLEMENTED Break 13:45-14:15 on Jul 12, 1957 (Fri): Civil Defense drill
598
- - NOT IMPLEMENTED Break 10:30-10:50 on May 6, 1958 (Tue): Civil Defense drill
599
- - Closed on Dec 26, 1958 (Fri): Day after Christmas
600
- - NOT IMPLEMENTED Break 13:30-13:50 on Apr 17, 1959 (Fri): Civil Defense drill
601
- - NOT IMPLEMENTED Break 14:16-14:40 on May 3, 1960 (Tue): Civil Defense drill
602
- - Late Open 11:00 on Dec 12, 1960 (Mon): severe snowstorm
603
- - Closed on May 29, 1961 (Mon): Day before Decoration Day
604
- - Early Close 14:07 on Nov 22, 1963 (Fri): President John F. Kennedy assassintion
605
- - Closed on Nov 25, 1963 (Mon): President John F. Kennedy funeral
606
- - Early Close 14:00 on Oct 23, 1964 (Fri): Former President Herbert C. Hoover funeral
607
- - NOT IMPLEMENTED Break 11:00-11:02 on Jan 25, 1965 (Mon): Sir Winston Churchill 2 minutes of silence
608
- - Late Open 11:05 on Nov 10, 1965 (Wed): Power failure in NY grid supply
609
- - Closed on Dec 24, 1965 (Fri): Christmas Eve
610
- - Early Closes 14:00 on Jan 6-14, 1966 (Thu-Fri): Transit strike
611
- - NOT IMPLEMENTED Break 13:00-13:01 on Feb 3, 1967 (Fri): Apollo I disaster moment of silence
612
- - Late Open 10:15 AND Early Close 14:00 on Feb 7, 1967 (Tue): snowstorm
613
- - NOT IMPLEMENTED Break 12:58-13:13 on May 17, 1967 (Wed): Vice President Humphrey spoke in honor of NYSE's 175th anniversary
614
- - Early Closes 14:00 on Aug 8-18, 1967 (Tue-Fri): Backlog catch up
615
- - Early Closes 14:00 on Jan 22-Mar 1, 1968 (Mon-Fri): Backlog catch up
616
- - Closed on Feb 12, 1968 (Mon): Lincoln's birthday (offices open, trading closed)
617
- - NOT IMPLEMENTED Break 11:00-11:01 on Apr 5, 1968 (Fri): Dr. Martin Luther King, Jr. moment of silence
618
- - Closed on Apr 9, 1968 (Tue): Martin Luther King, Jr. day or mourning
619
- - NOT IMPLEMENTED Break 11:00-11:02 on Jun 6, 1968 (Fri): Senator Robert F. Kennedy moment of silence
620
- - 4 day workweek Closed on a Wednesday OR Holiday from Jun 12-Dec 31, 1968: Paperwork crisis
621
- - Closed on July 5, 1968 (Fri): Day after Independence Day
622
- - Early Closes 14:00 on Jan 2-Jul 3, 1969: Paperwork Crisis
623
- - Closed on Feb 10, 1969 (Mon): heavy snow
624
- - Late open 11am on Feb 11, 1969 (Tue): heavy snow
625
- - NOT IMPLEMENTED Break 13:30-13:32 on Mar 28, 1969 (Fri): Former President Dwight D. Eisenhower moment of silence
626
- - Closed on Mar 31, 1969 (Mon): Former President Dwight D. Eisenhower funeral
627
- - Late Open 10:45 on Jun 2, 1969 (Mon): storm
628
- - Early Closes 14:30 on Jul 7-Sep 26,1969 (Mon-Fri): Paperwork Crisis
629
- - Closed on Jul 21, 1969 (Mon): National Day of Participation for lunar exploration
630
- - NOT IMPLEMENTED Break 12:35-13:05 on Sep 3, 1969 (Wed): power failure
631
- - Early Closes 15:00 on Sep 29, 1969 to May 1, 1970: Paperwork Crisis
632
- - Closed on Dec 28, 1972 (Thu): Former President Harry S. Truman funeral
633
- - Closed on Jan 25, 1973 (Thu): Former President Lyndon B. Johnson funeral
634
- - Late Open 11am on Dec 17, 1973 (Mon): ice storm
635
- - Late Open 10:15 on Jan 16, 1974 (Wed): Merrill Lynch computer trouble
636
- - NOT IMPLEMENTED Break 11:09-11:35 on Apr 10, 1974 (Wed): computer malfunction
637
- - NOT IMPLEMENTED Break 11:46-12:22 on Oct 15, 1974 (Wed): Ticker down at 11:37 to 12:22
638
- - Late Open 10:15 on Nov 22, 1974 (Fri): Fire drill
639
- - Early Close 14:00 on Dec 24, 1974 (Tue): Christmas Eve
640
- - NOT IMPLEMENTED Break 10:07-10:50 on Jan 7, 1975 (Tue): Computer stopped
641
- - NOT IMPLEMENTED Break 13:24-13:45 on Jan 15, 1975 (Wed): Computer stopped
642
- - NOT IMPLEMENTED Break 10:24-11:00 on Feb 7, 1975 (Fri): Computer failure
643
- - Early Close 14:30 on Feb 12, 1975 (Wed): snowstorm
644
- - NOT IMPLEMENTED Break 10:09-10:35 on Apr 9, 1975 (Wed): Computer stopped
645
- - Early Close 14:00 on Dec 24, 1975 (Wed): Christmas Eve
646
- - Late Open 11:15 on Feb 2, 1976 (Mon): storm
647
- - Late Open UNKNOWN (coded as 10:15) on Jun 8, 1976 (Tue): fire drill
648
- - Early Close 15:00 on Aug 9, 1976 (Mon): hurricane watch
649
- - NOT IMPLEMENTED Break 1 minute time UNKNOWN on Nov 4, 1976 (Thu): Former NYSE Chair Gustave L. Levy moment of silence
650
- - NOT IMPLEMENTED Break 11:00-11:01 on Feb 24, 1977 (Thu): Former NYSE Chair John A. Coleman moment of silence
651
- - NOT IMPLEMENTED Break 10:24-11:45 on Mar 1, 1977 (Tue): Fire on moving ramp between trading floor and Blue Room
652
- - Closed on July 14, 1977 (Thu): Power failure in NYC
653
- - Late Open 12pm on Jan 20, 1978 (Fri): snowstorm
654
- - Early Close 2pm on Feb 6, 1978 (Mon): snowstorm
655
- - Late Open 11am on Feb 7, 1978 (Tue): snowstorm
656
- - NOT IMPLEMENTED Break 1 minute time UNKNOWN on Dec 13, 1979 (Thu): Former NYSE Chair Robert L. Stott minute of silence
657
- - NOT IMPLEMENTED Break 11:11-12:04 on Oct 13, 1980 (Mon): Computer malfunction
658
- - NOT IMPLEMENTED Break 1 minute time UNKNOWN on Dec 30, 1980 (Tue): Former NYSE Chair James Crane Kellogg III moment of silence
659
- - Early Close 3:17pm on Mar 30, 1981 (Mon): President Reagan assassination attempt
660
- - Early Close 3:28pm on Sep 9, 1981 (Wed): Con Edison power failure
661
- - NOT IMPLEMENTED Break 12:26-12:45pm on Sep 16, 1981 (Wed): Fire alarm malfunction
662
- - NOT IMPLEMENTED Break 10:25-11:00am on Dec 28, 1982 (Tue): small fire
663
- - NOT IMPLEMENTED Break 13:51-15:30 on Oct 13, 1983 (Thu): low speed ticker malfunction
664
- - Closed on Sep 27, 1985 (Fri): Hurricane Gloria
665
- - NOT IMPLEMENTED Break 11:00-11:01 on Jan 29, 1986 (Wed): Challenger space crew moment of silence
666
- - Early Closes 2pm on Oct 23-30, 1987 (Fri-Fri): October 19th break volume
667
- - Early Closes 2:30pm on Nov 2-4, 1987 (Mon-Wed): reason not given volume assumed
668
- - Early Closes 3pm on Nov 5-6, 1987 (Thu-Fri): reason not given volume assumed
669
- - Early Closes 3:30pm on Nov 9-11, 1987 (Mon-Wed): Trading floor and clerical staff strike
670
- - Late Open 11am on Nov 10, 1989 (Fri): Electrical fire
671
- - NOT IMPLEMENTED Break 9:41-11:15 on Nov 23, 1990 (Fri): Internal power failure
672
- - Early Close 2pm on Dec 24, 1990 (Mon): Christmas Eve
673
- - Late Open 11am on Dec 27, 1990 (Thu): explosion of Con Edison transformer
674
- - Late Open 9:31am on Jan 17, 1991 (Thu): American troops in Persian Gulf moment of silence
675
- - Late Open 9:31am on Feb 25, 1991 (Thu): American troops in Persian Gulf moment of silence
676
- - NOT IMPLEMENTED Break 10:21-10:45am on Oct 22, 1991 (Tue): power dip
677
- - Early Close 2pm on Dec 24, 1991 (Tue): Christmas Eve
678
- - NOT IMPLEMENTED Break 1 minute time UNKNOWN on Mar 19, 1992 (Thu): Former NYSE Chair Bernard J. Lasker moment of silence
679
- - NOT IMPLEMENTED Break 1 minute time UNKNOWN on May 15, 1992 (Fri): Former NYSE President G. Keith Funston moment of silence
680
- - NOT IMPELMENTED Break 1 minute time UNKNOWN on Jun 15, 1992 (Mon): Former NYSE President Robert W. Haack moment of silence
681
- - Early Close 2pm on Nov 27, 1992 (Fri): Day after Thanksgiving
682
- - Early Close 2pm on Dec 24, 1992 (Thu): Christmas Eve
683
- - Early Close 1pm on Nov 26, 1993 (Fri): Day after Thanksgiving
684
- - Early Close 14:30 on Feb 11, 1994 (Fri): snowstorm
685
- - NOT IMPLEMENTED Break 12:00-12:02 on Apr 25, 1994 (Mon): Former President Richard M. Nixon moment of silence
686
- - Closed on Apr 27, 1994 (Wed): Former President Richard M. Nixon funderal
687
- - Early Close 1pm on Nov 25, 1994 (Fri): Day after Thanksgiving
688
- - NOT IMPLEMENTED Break 10:02-10:03 on Apr 26, 1995 (Wed): Oklahoma City bombing victims moment of silence
689
- - Early Close 1pm on Jul 3, 1995 (Mon): Day before Independence Day
690
- - Early Close 1pm on Nov 24, 1995 (Fri): Day after Thanksgiving
691
- - Late Open 10:30am on Dec 18, 1995 (Mon): Computer system troubles
692
- - Late Open 11am AND Early Close 2pm on Jan 8, 1996 (Mon): snowstorm
693
- - NOT IMPLEMENTED Break time UNKNOWN on Apr 4, 1996 (Thu): Commerce Secretary Ron Brown and others killed in Balkans plane crash
694
- - Early Close 1pm on July 5, 1996 (Fri): Day after Independence Day
695
- - Early Close 1pm on Nov 29, 1996 (Fri): Day after Thanksgiving
696
- - Early Close 1pm on Dec 24, 1996 (Tue): Christmas Eve
697
- - Early Close 1pm on Jul 3, 1997 (Thu): Day before Independence Day
698
- - NOT IMPLEMENTED Break 14:35-15:05 on Oct 27, 1997 (Mon): Circuit breaker triggered
699
- - Early Close 3:30pm on Oct 27, 1997 (Mon): Circuit breaker triggered
700
- - Early Close 1pm on Nov 28, 1997 (Fri): Day after Thanksgiving
701
- - Early Close 1pm on Dec 24, 1997 (Wed): Christmas Eve
702
- - Early Close 1pm on Dec 26, 1997 (Fri): Friday after Christmas
703
- - NOT IMPLEMENTED Break time UNKNOWN on Jul 29, 1998 (Wed): Former NYSE President William McChesney Marting, Jr. moment of silence
704
- - NOT IMPLEMENTED Break 13:16-14:15 on Oct 26, 1998 (Mon): Computer switch malfunction
705
- - Early Close 1pm on Nov 27, 1998 (Fri): Day after Thanksgiving
706
- - Early Close 1pm on Dec 24, 1998 (Thu): Christmas Eve
707
- - NOT IMPLEMENTED Break 10:00-10:02 on Mar 25, 1999 (Thu): NATO troops in Kosovo minute of silence
708
- - NOT IMPLEMENTED Break 12:00-12:02 on Apr 26, 1999 (Mon): Columbine High School killings moment of silence
709
- - Early Close 1pm on Nov 26, 1999 (Fri): Day after Thanksgiving
710
- - Early Close 1pm on Dec 24, 1999 (Fri): Christmas Eve
711
- - NOT IMPLEMENTED Break 12:00-12:01 on Feb 16, 2000 (Wed): Former NYSE Chair Walter N. Frank moment of silence
712
- - NOT IMPLEMENTED Break 12:00-12:01 on May 4, 2000 (Thu): Archbishop of NY Cardinal John O'Connor moment of silence
713
- - Early Close 1pm on Jul 3, 2000 (Mon): Day before Independence Day
714
- - Early Close 1pm on Nov 24, 2000 (Fri): Day after Thanksgiving
715
- - NOT IMPLEMENTED Break 10:10-11:35 on Jun 8, 2001 (Fri): computer systems connectivity problem
716
- - Early Close 1pm on Jul 3, 2001 (Tue): Day before Independence Day
717
- - Closed on Sep 11-14, 2001 (Tue-Fri): Terrorist attack on World Trade Center
718
- - Late Open 9:33am on Sep 17, 2001 (Mon): 2 minutes silence in honor of lives lost on 9/11
719
- - Late Open 9:31am on Oct 8, 2001 (Mon): 1 minute silence for troops engaged in Operation Enduring Freedom
720
- - Early Close 1pm on Nov 23, 2001 (Fri): Day after Thanksgiving
721
- - Early Close 1pm on Dec 24, 2001 (Mon): Christmas Eve
722
- - NOT IMPLEMENTED Break 10:29-10:31 on May 30, 2002 (Thu): Commemorate end of recovery work at Ground Zero
723
- - Early Close 1pm on Jul 5, 2002 (Fri): Day after Independence Day
724
- - Late Opening 12:00pm on Sep 11, 2002 (Wed): 1 year anniversary of 9/11 attack
725
- - Early Close 1pm on Nov 29, 2002 (Fri): Day after Thanksgiving
726
- - Early Close 1pm on Dec 24, 2002 (Tue): Christmas Eve
727
- - NOT IMPLEMENTED Break 11:00-11:02 on Feb 3, 2002 (Mon): Columbia Space Shuttle lives lost moment of silence
728
- - Late Opening 9:32am on Mar 20, 2003 (Thu): Operation Iraqi Freedom Troops moment of silence
729
- - Early Close 1pm on Jul 3, 2003 (Thu): Day before Independence Day
730
- - NOT IMPLEMENTED multiple 1-minute Breaks 9:59 and 10:29 on Sep 11, 2003 (Thu): 9/11 Commemoration
731
- - Early Close 1pm on Nov 28, 2003 (Fri): Day after Thanksgiving
732
- - Early Close 1pm on Dec 24, 2003 (Wed): Christmas Eve
733
- - Early Close 1pm on Dec 26, 2003 (Fri): Friday after Christmas
734
- - Late Open 9:32am on Jun 7, 2004 (Mon): Former President Ronald Reagan death moment of silence
735
- - Closed on Jun 11, 2004 (Fri): Former President Ronald Reagan National Day of Mourning
736
- - Early Close 1pm on Nov 26, 2004 (Fri): Day after Thanksgiving
737
- - Early Close 3:56pm on Jun 1, 2005 (Wed): Systems communication problem
738
- - Early Close 1pm on Nov 25, 2005 (Fri): Day after Thanksgiving
739
- - Early Close 1pm on Jul 3, 2006 (Mon): Day before Independence Day
740
- - Early Close 1pm on Nov 24, 2006 (Fri): Day after Thanksgiving
741
- - Late Open 9:32am on Dec 27, 2006 (Wed): Former President Gerald Ford moment of silence
742
- - Closed on Jan 2, 2007 (Tue): Former President Gerald Ford National Day of Mourning
743
- - Early Close 1pm on Jul 3, 2007 (Tue): Day before Independence Day
744
- - Early Close 1pm on Nov 23, 2007 (Fri): Day after Thanksgiving
745
- - Early Close 1pm on Dec 24, 2007 (Mon): Christmas Eve
746
- - Early Close 1pm on Jul 4, 2008 (Thu): Day before Independence Day
747
- - Early Close 1pm on Nov 28, 2008 (Fri): Day after Thanksgiving
748
- - Early Close 1pm on Dec 24, 2008 (Wed): Christmas Eve
749
- - NOT IMPLEMENTED Extended Close 4:15pm on Jul 2, 2009 (Thu): Execute customer orders impacted by system irregularities
750
- - Early Close 1pm on Nov 27, 2009 (Fri): Day after Thanksgiving
751
- - Early Close 1pm on Dec 24, 2009 (Thu): Christmas Eve
752
- - Early Close 1pm on Nov 26, 2010 (Fri): Day after Thanksgiving
753
- - NOT IMPLEMENTED Break 11:00-11:01 on Jan 10, 2011 (Mon): Arizona shooting victims moment of silence
754
-
755
- end of reference: https://github.com/rsheftel/pandas_market_calendars/files/6827110/Stocks.NYSE-Closings.pdf
756
- *******************************************************************
757
-
758
- https://www.streetinsider.com/Insiders+Blog/NYSE+Releases+2010+and+2011+Holiday+Calendar/4915576.html
759
- - Early Close 1pm on Nov 25, 2011 (Fri): Day after Thanksgiving
760
-
761
- https://holidaystracker.com/stock-market/new-york-stock-exchange-holidays-2012/
762
- - Early Close 1pm on Jul 4, 2012 (Tue): Day before Independence Day
763
- - Closed on 10/29/2012 and 10/30/2012 due to Hurricane Sandy.
764
- - Early Close 1pm on Nov 23, 2012 (Fri): Day after Thanksgiving
765
- - Early Close 1pm on Dec 24, 2012 (Mon): Christmas Eve
766
-
767
- https://holidaystracker.com/stock-market/new-york-stock-exchange-nyse-holidays-2013/
768
- - Early Close 1pm on Jul 3, 2013 (Wed): Day before Independence Day
769
- - Early Close 1pm on Nov 29, 2013 (Fri): Day after Thanksgiving
770
- - Early Close 1pm on Dec 24, 2013 (Tue): Christmas Eve
771
-
772
- https://www.streetinsider.com/Insiders+Blog/NYSE+2014+and+2015+Holiday+Hours/8999575.html - Early Close 1pm on Jul 3, 2014 (Thu): Day before Independence Day
773
- - Early Close 1pm on Jul 3, 2014 (Thu): Day before Independence Day
774
- - Early Close 1pm on Nov 28, 2014 (Fri): Day after Thanksgiving
775
- - Early Close 1pm on Dec 24, 2014 (Wed): Christmas Eve
776
-
777
- https://www.businesswire.com/news/home/20141208006349/en/NYSE-Group-2016-Holiday-Calendar-and-Early-Closings
778
- - Early Close 1pm on Nov 27, 2015 (Fri): Day after Thanksgiving
779
- - Early Close 1pm on Dec 24, 2015 (Thu): Christmas Eve
780
- - Early Close 1pm on Nov 25, 2016 (Fri): Day after Thanksgiving
781
-
782
- https://www.stockinvestor.com/30380/stock-market-holidays-2017/
783
- - Early Close 1pm on Jul 3, 2017 (Mon): Day before Independence Day
784
- - Early Close 1pm on Nov 24, 2017 (Fri): Day after Thanksgiving
785
- - Early Close 1pm on Jul 3, 2018 (Tue): Day before Independence Day
786
- - Early Close 1pm on Nov 23, 2018 (Fri): Day after Thanksgiving
787
- - Closed on 12/5/2018 due to George H.W. Bush's death.
788
- - Early Close 1pm on Dec 24, 2018 (Tue): Christmas Eve
789
- - Early Close 1pm on Jul 3, 2019 (Wed): Day before Independence Day
790
- - Early Close 1pm on Nov 29, 2019 (Fri): Day after Thanksgiving
791
- - Early Close 1pm on Dec 24, 2019 (Wed): Christmas Eve
792
-
793
- https://holidaystracker.com/stock-market/new-york-stock-exchange-nyse-holidays-2020/
794
- - Early Close 1pm on Nov 27, 2020 (Fri): Day after Thanksgiving
795
- - Early Close 1pm on Dec 24, 2020 (Thu): Christmas Eve
796
-
797
-
798
- NOTE: The exchange was **not** closed early on Friday December 26, 2008,
799
- nor was it closed on Friday December 26, 2014. The next Thursday Christmas
800
- will be in 2025. If someone is still maintaining this code in 2025, then
801
- we've done alright...and we should check if it's a half day.
802
-
803
- """
804
-
805
- aliases = ["NYSE", "stock", "NASDAQ", "BATS", "DJIA", "DOW"]
806
-
807
- regular_market_times = {
808
- "pre": ((None, time(4)),),
809
- "market_open": ((None, time(10)), ("1985-01-01", time(9, 30))),
810
- "market_close": (
811
- (None, time(15)),
812
- ("1952-09-29", time(15, 30)),
813
- ("1974-01-01", time(16)),
814
- ),
815
- "post": ((None, time(20)),),
816
- }
817
-
818
- _saturday_close = time(12)
819
- _saturday_end = pd.Timestamp("1952-09-29", tz="UTC")
820
-
821
- @property
822
- def name(self):
823
- return "NYSE"
824
-
825
- @property
826
- def tz(self):
827
- return timezone("America/New_York")
828
-
829
- @property
830
- def weekmask(self):
831
- return "Mon Tue Wed Thu Fri Sat" # Market open on Saturdays thru 5/24/1952
832
-
833
- @property
834
- def regular_holidays(self):
835
- return AbstractHolidayCalendar(
836
- rules=[
837
- USNewYearsDayNYSEpost1952,
838
- USNewYearsDayNYSEpre1952,
839
- USMartinLutherKingJrAfter1998,
840
- USPresidentsDay,
841
- USWashingtonsBirthDayBefore1952,
842
- USWashingtonsBirthDay1952to1963,
843
- USWashingtonsBirthDay1964to1970,
844
- USLincolnsBirthDayBefore1954,
845
- GoodFriday,
846
- GoodFridayPre1898,
847
- GoodFriday1899to1905,
848
- USMemorialDay,
849
- USMemorialDayBefore1952,
850
- USMemorialDay1952to1964,
851
- USMemorialDay1964to1969,
852
- USIndependenceDay,
853
- USIndependenceDayPre1952,
854
- USIndependenceDay1952to1954,
855
- USLaborDayStarting1887,
856
- USColumbusDayBefore1954,
857
- USElectionDay1848to1967,
858
- USVeteransDay1934to1953,
859
- USThanksgivingDay,
860
- USThanksgivingDayBefore1939,
861
- USThanksgivingDay1939to1941,
862
- ChristmasNYSE,
863
- Christmas54to98NYSE,
864
- ChristmasBefore1954,
865
- USJuneteenthAfter2022,
866
- ]
867
- )
868
-
869
- @property
870
- def adhoc_holidays(self):
871
- return list(
872
- chain(
873
- # Recurring Holidays
874
- SatAfterGoodFridayAdhoc,
875
- MonBeforeIndependenceDayAdhoc,
876
- SatBeforeIndependenceDayAdhoc,
877
- SatAfterIndependenceDayAdhoc,
878
- DaysAfterIndependenceDayAdhoc,
879
- SatBeforeLaborDayAdhoc,
880
- USElectionDay1968to1980Adhoc,
881
- FridayAfterThanksgivingAdHoc,
882
- SatBeforeChristmasAdhoc,
883
- SatAfterChristmasAdhoc,
884
- ChristmasEvesAdhoc,
885
- DayAfterChristmasAdhoc,
886
- # Retired
887
- USVetransDayAdHoc,
888
- SatAfterColumbusDayAdHoc,
889
- LincolnsBirthDayAdhoc,
890
- GrantsBirthDayAdhoc,
891
- SatBeforeNewYearsAdhoc,
892
- SatBeforeWashingtonsBirthdayAdhoc,
893
- SatAfterWashingtonsBirthdayAdhoc,
894
- SatBeforeAfterLincolnsBirthdayAdhoc,
895
- SatBeforeDecorationAdhoc,
896
- SatAfterDecorationAdhoc,
897
- DayBeforeDecorationAdhoc,
898
- # Irregularities
899
- UlyssesGrantFuneral1885,
900
- ColumbianCelebration1892,
901
- GreatBlizzardOf1888,
902
- WashingtonInaugurationCentennialCelebration1889,
903
- CharterDay1898,
904
- WelcomeNavalCommander1898,
905
- AdmiralDeweyCelebration1899,
906
- GarretHobartFuneral1899,
907
- QueenVictoriaFuneral1901,
908
- MovedToProduceExchange1901,
909
- EnlargedProduceExchange1901,
910
- McKinleyDeathAndFuneral1901,
911
- KingEdwardVIIcoronation1902,
912
- NYSEnewBuildingOpen1903,
913
- HudsonFultonCelebration1909,
914
- JamesShermanFuneral1912,
915
- OnsetOfWWI1914,
916
- WeatherHeatClosing1917,
917
- DraftRegistrationDay1917,
918
- WeatherNoHeatClosing1918,
919
- DraftRegistrationDay1918,
920
- ArmisticeSigned1918,
921
- Homecoming27Division1919,
922
- ParadeOf77thDivision1919,
923
- BacklogRelief1919,
924
- GeneralPershingReturn1919,
925
- OfficeLocationChange1920,
926
- HardingDeath1923,
927
- HardingFuneral1923,
928
- LindberghParade1927,
929
- BacklogRelief1928,
930
- BacklogRelief1929,
931
- CoolidgeFuneral1933,
932
- BankHolidays1933,
933
- HeavyVolume1933,
934
- SatClosings1944,
935
- RooseveltDayOfMourning1945,
936
- SatClosings1945,
937
- VJday1945,
938
- NavyDay1945,
939
- RailroadStrike1946,
940
- SatClosings1946,
941
- SatClosings1947,
942
- SatClosings1948,
943
- SevereWeather1948,
944
- SatClosings1949,
945
- SatClosings1950,
946
- SatClosings1951,
947
- SatClosings1952,
948
- KennedyFuneral1963,
949
- MLKdayOfMourning1968,
950
- PaperworkCrisis1968,
951
- SnowClosing1969,
952
- EisenhowerFuneral1969,
953
- FirstLunarLandingClosing1969,
954
- TrumanFuneral1972,
955
- JohnsonFuneral1973,
956
- NewYorkCityBlackout77,
957
- HurricaneGloriaClosings1985,
958
- NixonFuneral1994,
959
- ReaganMourning2004,
960
- FordMourning2007,
961
- September11Closings2001,
962
- HurricaneSandyClosings2012,
963
- GeorgeHWBushDeath2018,
964
- )
965
- )
966
-
967
- #
968
- @property
969
- def special_closes(self):
970
- return [
971
- (
972
- time(11, tzinfo=timezone("America/New_York")),
973
- AbstractHolidayCalendar(
974
- rules=[
975
- KingEdwardDeath11amyClose1910,
976
- ]
977
- ),
978
- ),
979
- (
980
- time(12, tzinfo=timezone("America/New_York")),
981
- AbstractHolidayCalendar(
982
- rules=[
983
- ParadeOfNationalGuardEarlyClose1917,
984
- LibertyDay12pmEarlyClose1917,
985
- LibertyDay12pmEarlyClose1918,
986
- WallStreetExplosionEarlyClose1920,
987
- NRAdemonstration12pmEarlyClose1933,
988
- ]
989
- ),
990
- ),
991
- (
992
- time(hour=12, minute=30, tzinfo=timezone("America/New_York")),
993
- AbstractHolidayCalendar(
994
- rules=[
995
- RooseveltFuneral1230EarlyClose1919,
996
- WoodrowWilsonFuneral1230EarlyClose1924,
997
- TaftFuneral1230EarlyClose1930,
998
- GasFumesOnTradingFloor1230EarlyClose1933,
999
- ]
1000
- ),
1001
- ),
1002
- (
1003
- time(13, tzinfo=timezone("America/New_York")),
1004
- AbstractHolidayCalendar(
1005
- rules=[
1006
- FridayAfterIndependenceDayNYSEpre2013,
1007
- MonTuesThursBeforeIndependenceDay,
1008
- WednesdayBeforeIndependenceDayPost2013,
1009
- DayAfterThanksgiving1pmEarlyCloseInOrAfter1993,
1010
- ChristmasEvePost1999Early1pmClose,
1011
- GroverClevelandFuneral1pmClose1908,
1012
- ]
1013
- ),
1014
- ),
1015
- (
1016
- time(14, tzinfo=timezone("America/New_York")),
1017
- AbstractHolidayCalendar(
1018
- rules=[
1019
- DayAfterThanksgiving2pmEarlyCloseBefore1993,
1020
- HooverFuneral1400EarlyClose1964,
1021
- Snow2pmEarlyClose1967,
1022
- Snow2pmEarlyClose1978,
1023
- Snow2pmEarlyClose1996,
1024
- ]
1025
- ),
1026
- ),
1027
- (
1028
- time(14, 7, tzinfo=timezone("America/New_York")),
1029
- AbstractHolidayCalendar(
1030
- rules=[
1031
- KennedyAssassination1407EarlyClose,
1032
- ]
1033
- ),
1034
- ),
1035
- (
1036
- time(hour=14, minute=30, tzinfo=timezone("America/New_York")),
1037
- AbstractHolidayCalendar(
1038
- rules=[
1039
- FalseArmisticeReport1430EarlyClose1918,
1040
- CromwellFuneral1430EarlyClose1925,
1041
- Snow230EarlyClose1975,
1042
- Snow230pmEarlyClose1994,
1043
- ]
1044
- ),
1045
- ),
1046
- (
1047
- time(15, tzinfo=timezone("America/New_York")),
1048
- AbstractHolidayCalendar(
1049
- rules=[
1050
- HurricaneWatch3pmEarlyClose1976,
1051
- ]
1052
- ),
1053
- ),
1054
- (
1055
- time(15, 17, tzinfo=timezone("America/New_York")),
1056
- AbstractHolidayCalendar(
1057
- rules=[
1058
- ReaganAssassAttempt317pmEarlyClose1981,
1059
- ]
1060
- ),
1061
- ),
1062
- (
1063
- time(15, 28, tzinfo=timezone("America/New_York")),
1064
- AbstractHolidayCalendar(
1065
- rules=[
1066
- ConEdPowerFail328pmEarlyClose1981,
1067
- ]
1068
- ),
1069
- ),
1070
- (
1071
- time(15, 30, tzinfo=timezone("America/New_York")),
1072
- AbstractHolidayCalendar(
1073
- rules=[
1074
- CircuitBreakerTriggered330pmEarlyClose1997,
1075
- ]
1076
- ),
1077
- ),
1078
- (
1079
- time(15, 56, tzinfo=timezone("America/New_York")),
1080
- AbstractHolidayCalendar(
1081
- rules=[
1082
- SystemProb356pmEarlyClose2005,
1083
- ]
1084
- ),
1085
- ),
1086
- ]
1087
-
1088
- #
1089
- @property
1090
- def special_closes_adhoc(self):
1091
- def _union_many(indexes):
1092
- # Merges a list of pd.DatetimeIndex objects, returns merged DatetimeIndex
1093
- union_index = pd.DatetimeIndex([], tz="UTC")
1094
- for index in indexes:
1095
- union_index = union_index.union(index)
1096
- return union_index
1097
-
1098
- return [
1099
- (
1100
- time(13, tzinfo=timezone("America/New_York")),
1101
- # DaysBeforeIndependenceDay1pmEarlyCloseAdhoc # list
1102
- ChristmasEve1pmEarlyCloseAdhoc
1103
- + DayAfterChristmas1pmEarlyCloseAdhoc
1104
- + BacklogRelief1pmEarlyClose1929,
1105
- ),
1106
- (
1107
- time(14, tzinfo=timezone("America/New_York")),
1108
- _union_many(
1109
- [
1110
- pd.DatetimeIndex(
1111
- ChristmasEve2pmEarlyCloseAdhoc
1112
- + HeavyVolume2pmEarlyClose1933
1113
- )
1114
- ]
1115
- + [
1116
- BacklogRelief2pmEarlyClose1928,
1117
- TransitStrike2pmEarlyClose1966, # index
1118
- Backlog2pmEarlyCloses1967, # index
1119
- Backlog2pmEarlyCloses1968, # index
1120
- PaperworkCrisis2pmEarlyCloses1969, # index
1121
- Backlog2pmEarlyCloses1987,
1122
- ]
1123
- ), # index
1124
- ),
1125
- (
1126
- time(14, 30, tzinfo=timezone("America/New_York")),
1127
- _union_many(
1128
- [PaperworkCrisis230pmEarlyCloses1969, Backlog230pmEarlyCloses1987]
1129
- ), # index
1130
- ),
1131
- (
1132
- time(15, tzinfo=timezone("America/New_York")),
1133
- _union_many(
1134
- [PaperworkCrisis3pmEarlyCloses1969to1970, Backlog3pmEarlyCloses1987]
1135
- ), # index
1136
- ),
1137
- (
1138
- time(15, 30, tzinfo=timezone("America/New_York")),
1139
- Backlog330pmEarlyCloses1987, # index
1140
- ),
1141
- ]
1142
-
1143
- #
1144
- @property
1145
- def special_opens(self):
1146
- return [
1147
- (
1148
- time(hour=9, minute=31, tzinfo=timezone("America/New_York")),
1149
- AbstractHolidayCalendar(
1150
- rules=[
1151
- ConEdXformer931amLateOpen1990,
1152
- EnduringFreedomMomentSilence931amLateOpen2001,
1153
- ]
1154
- ),
1155
- ),
1156
- (
1157
- time(hour=9, minute=32, tzinfo=timezone("America/New_York")),
1158
- AbstractHolidayCalendar(
1159
- rules=[
1160
- IraqiFreedom932amLateOpen2003,
1161
- ReaganMomentSilence932amLateOpen2004,
1162
- FordMomentSilence932amLateOpen2006,
1163
- ]
1164
- ),
1165
- ),
1166
- (
1167
- time(hour=9, minute=33, tzinfo=timezone("America/New_York")),
1168
- AbstractHolidayCalendar(
1169
- rules=[
1170
- Sept11MomentSilence933amLateOpen2001,
1171
- ]
1172
- ),
1173
- ),
1174
- (
1175
- time(hour=10, minute=15, tzinfo=timezone("America/New_York")),
1176
- AbstractHolidayCalendar(
1177
- rules=[
1178
- Snow1015LateOpen1967,
1179
- MerrillLynchComputer1015LateOpen1974,
1180
- FireDrill1015LateOpen1974,
1181
- FireDrill1015LateOpen1976,
1182
- ]
1183
- ),
1184
- ),
1185
- (
1186
- time(hour=10, minute=30, tzinfo=timezone("America/New_York")),
1187
- AbstractHolidayCalendar(
1188
- rules=[
1189
- TrafficBlockLateOpen1919,
1190
- TrafficBlockLateOpen1920,
1191
- Computer1030LateOpen1995,
1192
- ]
1193
- ),
1194
- ),
1195
- (
1196
- time(hour=10, minute=45, tzinfo=timezone("America/New_York")),
1197
- AbstractHolidayCalendar(
1198
- rules=[
1199
- EclipseOfSunLateOpen1925,
1200
- Storm1045LateOpen1969,
1201
- ]
1202
- ),
1203
- ),
1204
- (
1205
- time(11, tzinfo=timezone("America/New_York")),
1206
- AbstractHolidayCalendar(
1207
- rules=[
1208
- Snow11amLateOpen1934,
1209
- KingGeorgeVFuneral11amLateOpen1936,
1210
- Snow11amLateOpening1960,
1211
- Snow11amLateOpen1969,
1212
- Ice11amLateOpen1973,
1213
- Snow11amLateOpen1978,
1214
- Fire11amLateOpen1989,
1215
- Snow11amLateOpen1996,
1216
- ]
1217
- ),
1218
- ),
1219
- (
1220
- time(11, 5, tzinfo=timezone("America/New_York")),
1221
- AbstractHolidayCalendar(
1222
- rules=[
1223
- PowerFail1105LateOpen,
1224
- ]
1225
- ),
1226
- ),
1227
- (
1228
- time(11, 15, tzinfo=timezone("America/New_York")),
1229
- AbstractHolidayCalendar(
1230
- rules=[
1231
- Storm1115LateOpen1976,
1232
- ]
1233
- ),
1234
- ),
1235
- (
1236
- time(12, tzinfo=timezone("America/New_York")),
1237
- AbstractHolidayCalendar(
1238
- rules=[
1239
- KingEdwardFuneral12pmOpen1910,
1240
- JPMorganFuneral12pmOpen1913,
1241
- WilliamGaynorFuneral12pmOpen1913,
1242
- Snow12pmLateOpen1978,
1243
- Sept11Anniversary12pmLateOpen2002,
1244
- ]
1245
- ),
1246
- ),
1247
- (
1248
- time(13, tzinfo=timezone("America/New_York")),
1249
- AbstractHolidayCalendar(
1250
- rules=[
1251
- AnnunciatorBoardFire1pmLateOpen1921,
1252
- ]
1253
- ),
1254
- ),
1255
- ]
1256
-
1257
- #
1258
- @property
1259
- def special_opens_adhoc(self):
1260
- return [
1261
- (
1262
- time(9, 31, tzinfo=timezone("America/New_York")),
1263
- TroopsInGulf931LateOpens1991,
1264
- ),
1265
- (
1266
- time(11, tzinfo=timezone("America/New_York")),
1267
- HeavyVolume11amLateOpen1933,
1268
- ),
1269
- (
1270
- time(12, tzinfo=timezone("America/New_York")),
1271
- BacklogRelief12pmLateOpen1929 + HeavyVolume12pmLateOpen1933,
1272
- ),
1273
- ]
1274
-
1275
- # Override market_calendar.py
1276
- def valid_days(self, start_date, end_date, tz="UTC"):
1277
- """
1278
- Get a DatetimeIndex of valid open business days.
1279
-
1280
- :param start_date: start date
1281
- :param end_date: end date
1282
- :param tz: time zone in either string or pytz.timezone
1283
- :return: DatetimeIndex of valid business days
1284
- """
1285
- trading_days = super().valid_days(start_date, end_date, tz=tz)
1286
-
1287
- # Starting Monday Sept. 29, 1952, no more saturday trading days
1288
- if tz is None:
1289
- saturday_end = self._saturday_end.tz_localize(None)
1290
- else:
1291
- saturday_end = self._saturday_end
1292
-
1293
- above_cut_off = trading_days >= saturday_end
1294
- if above_cut_off.any():
1295
- above_and_saturday = (trading_days.weekday == 5) & above_cut_off
1296
- trading_days = trading_days[~above_and_saturday]
1297
-
1298
- return trading_days
1299
-
1300
- def days_at_time(self, days, market_time, day_offset=0):
1301
- days = super().days_at_time(days, market_time, day_offset=day_offset)
1302
-
1303
- if market_time == "market_close" and not self.is_custom(market_time):
1304
- days = days.dt.tz_convert(self.tz)
1305
- days = days.where(
1306
- days.dt.weekday != 5,
1307
- days.dt.normalize() + self._tdelta(self._saturday_close),
1308
- )
1309
- days = days.dt.tz_convert("UTC")
1310
- return days
1311
-
1312
- def early_closes(self, schedule):
1313
- """
1314
- Get a DataFrame of the dates that are an early close.
1315
-
1316
- :param schedule: schedule DataFrame
1317
- :return: schedule DataFrame with rows that are early closes
1318
- """
1319
- early = super().early_closes(schedule)
1320
-
1321
- # make sure saturdays are not considered early closes if they are >= 12pm
1322
- mc = early.market_close.dt.tz_convert(self.tz)
1323
- after_noon = (mc - mc.dt.normalize()).ge(self._tdelta(self._saturday_close))
1324
- return early[~(mc.dt.weekday.eq(5) & after_noon)]
1
+ #
2
+ # Copyright 2016 Quantopian, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ from datetime import time
17
+ from itertools import chain
18
+
19
+ import pandas as pd
20
+ from pandas.tseries.holiday import AbstractHolidayCalendar
21
+ from pandas.tseries.offsets import CustomBusinessDay
22
+ from pytz import timezone
23
+
24
+ from typing import Literal, Union
25
+ from pandas_market_calendars import calendar_utils as u
26
+
27
+ from pandas_market_calendars.holidays.nyse import (
28
+ # Always Celebrated Holidays
29
+ USNewYearsDayNYSEpost1952,
30
+ USNewYearsDayNYSEpre1952,
31
+ SatBeforeNewYearsAdhoc,
32
+ USPresidentsDay,
33
+ USWashingtonsBirthDay1964to1970,
34
+ USWashingtonsBirthDayBefore1952,
35
+ USWashingtonsBirthDay1952to1963,
36
+ USLincolnsBirthDayBefore1954,
37
+ LincolnsBirthDayAdhoc,
38
+ SatBeforeWashingtonsBirthdayAdhoc,
39
+ SatAfterWashingtonsBirthdayAdhoc,
40
+ SatBeforeAfterLincolnsBirthdayAdhoc,
41
+ GrantsBirthDayAdhoc,
42
+ USMartinLutherKingJrAfter1998,
43
+ GoodFriday,
44
+ GoodFridayPre1898,
45
+ GoodFriday1899to1905,
46
+ SatAfterGoodFridayAdhoc,
47
+ USMemorialDay,
48
+ USMemorialDayBefore1952,
49
+ USMemorialDay1952to1964,
50
+ USMemorialDay1964to1969,
51
+ SatBeforeDecorationAdhoc,
52
+ SatAfterDecorationAdhoc,
53
+ DayBeforeDecorationAdhoc,
54
+ USJuneteenthAfter2022,
55
+ USIndependenceDay,
56
+ USIndependenceDayPre1952,
57
+ USIndependenceDay1952to1954,
58
+ SatBeforeIndependenceDayAdhoc,
59
+ SatAfterIndependenceDayAdhoc,
60
+ MonTuesThursBeforeIndependenceDay,
61
+ FridayAfterIndependenceDayNYSEpre2013,
62
+ WednesdayBeforeIndependenceDayPost2013,
63
+ MonBeforeIndependenceDayAdhoc,
64
+ DaysAfterIndependenceDayAdhoc,
65
+ # DaysBeforeIndependenceDay1pmEarlyCloseAdhoc,
66
+ USColumbusDayBefore1954,
67
+ USElectionDay1848to1967,
68
+ USLaborDayStarting1887,
69
+ SatBeforeLaborDayAdhoc,
70
+ USThanksgivingDay,
71
+ USThanksgivingDay1939to1941,
72
+ USThanksgivingDayBefore1939,
73
+ DayAfterThanksgiving2pmEarlyCloseBefore1993,
74
+ DayAfterThanksgiving1pmEarlyCloseInOrAfter1993,
75
+ FridayAfterThanksgivingAdHoc,
76
+ USElectionDay1968to1980Adhoc,
77
+ ChristmasNYSE,
78
+ Christmas54to98NYSE,
79
+ ChristmasBefore1954,
80
+ ChristmasEvesAdhoc,
81
+ DayAfterChristmasAdhoc,
82
+ DayAfterChristmas1pmEarlyCloseAdhoc,
83
+ ChristmasEvePost1999Early1pmClose,
84
+ ChristmasEve1pmEarlyCloseAdhoc,
85
+ ChristmasEve2pmEarlyCloseAdhoc,
86
+ SatBeforeChristmasAdhoc,
87
+ SatAfterChristmasAdhoc,
88
+ # Retired Holidays
89
+ USVetransDayAdHoc,
90
+ SatAfterColumbusDayAdHoc,
91
+ USVeteransDay1934to1953,
92
+ # Adhoc Holidays
93
+ # 1885
94
+ UlyssesGrantFuneral1885,
95
+ # 1892
96
+ ColumbianCelebration1892,
97
+ # 1888
98
+ GreatBlizzardOf1888,
99
+ # 1889
100
+ WashingtonInaugurationCentennialCelebration1889,
101
+ # 1898
102
+ CharterDay1898,
103
+ WelcomeNavalCommander1898,
104
+ # 1899
105
+ AdmiralDeweyCelebration1899,
106
+ GarretHobartFuneral1899,
107
+ # 1901
108
+ McKinleyDeathAndFuneral1901,
109
+ QueenVictoriaFuneral1901,
110
+ MovedToProduceExchange1901,
111
+ EnlargedProduceExchange1901,
112
+ # 1902
113
+ KingEdwardVIIcoronation1902,
114
+ # 1903
115
+ NYSEnewBuildingOpen1903,
116
+ # 1908
117
+ GroverClevelandFuneral1pmClose1908,
118
+ # 1909
119
+ HudsonFultonCelebration1909,
120
+ # 1910
121
+ KingEdwardDeath11amyClose1910,
122
+ KingEdwardFuneral12pmOpen1910,
123
+ # 1912
124
+ JamesShermanFuneral1912,
125
+ # 1913
126
+ JPMorganFuneral12pmOpen1913,
127
+ WilliamGaynorFuneral12pmOpen1913,
128
+ # 1914
129
+ OnsetOfWWI1914,
130
+ # 1917
131
+ WeatherHeatClosing1917,
132
+ ParadeOfNationalGuardEarlyClose1917,
133
+ LibertyDay12pmEarlyClose1917,
134
+ DraftRegistrationDay1917,
135
+ # 1918
136
+ WeatherNoHeatClosing1918,
137
+ DraftRegistrationDay1918,
138
+ LibertyDay12pmEarlyClose1918,
139
+ FalseArmisticeReport1430EarlyClose1918,
140
+ ArmisticeSigned1918,
141
+ # 1919
142
+ RooseveltFuneral1230EarlyClose1919,
143
+ Homecoming27Division1919,
144
+ ParadeOf77thDivision1919,
145
+ BacklogRelief1919,
146
+ GeneralPershingReturn1919,
147
+ TrafficBlockLateOpen1919,
148
+ # 1920
149
+ TrafficBlockLateOpen1920,
150
+ OfficeLocationChange1920,
151
+ WallStreetExplosionEarlyClose1920,
152
+ # 1921
153
+ AnnunciatorBoardFire1pmLateOpen1921,
154
+ # 1923
155
+ HardingDeath1923,
156
+ HardingFuneral1923,
157
+ # 1924
158
+ WoodrowWilsonFuneral1230EarlyClose1924,
159
+ # 1925
160
+ EclipseOfSunLateOpen1925,
161
+ CromwellFuneral1430EarlyClose1925,
162
+ # 1927
163
+ LindberghParade1927,
164
+ # 1928
165
+ BacklogRelief1928,
166
+ BacklogRelief2pmEarlyClose1928,
167
+ # 1929
168
+ BacklogRelief1929,
169
+ BacklogRelief1pmEarlyClose1929,
170
+ BacklogRelief12pmLateOpen1929,
171
+ # 1930
172
+ TaftFuneral1230EarlyClose1930,
173
+ # 1933
174
+ CoolidgeFuneral1933,
175
+ BankHolidays1933,
176
+ GasFumesOnTradingFloor1230EarlyClose1933,
177
+ HeavyVolume1933,
178
+ HeavyVolume12pmLateOpen1933,
179
+ HeavyVolume11amLateOpen1933,
180
+ HeavyVolume2pmEarlyClose1933,
181
+ NRAdemonstration12pmEarlyClose1933,
182
+ # 1924
183
+ Snow11amLateOpen1934,
184
+ # 1936
185
+ KingGeorgeVFuneral11amLateOpen1936,
186
+ # 1944
187
+ SatClosings1944,
188
+ # 1945
189
+ RooseveltDayOfMourning1945,
190
+ SatClosings1945,
191
+ VJday1945,
192
+ NavyDay1945,
193
+ # 1946
194
+ RailroadStrike1946,
195
+ SatClosings1946,
196
+ # 1947
197
+ SatClosings1947,
198
+ # 1948
199
+ SatClosings1948,
200
+ SevereWeather1948,
201
+ # 1949
202
+ SatClosings1949,
203
+ # 1950
204
+ SatClosings1950,
205
+ # 1951
206
+ SatClosings1951,
207
+ # 1952
208
+ SatClosings1952,
209
+ # 1960
210
+ Snow11amLateOpening1960,
211
+ # 1963
212
+ KennedyAssassination1407EarlyClose,
213
+ KennedyFuneral1963,
214
+ # 1964
215
+ HooverFuneral1400EarlyClose1964,
216
+ # 1965
217
+ PowerFail1105LateOpen,
218
+ # 1966
219
+ TransitStrike2pmEarlyClose1966,
220
+ # 1967
221
+ Snow1015LateOpen1967,
222
+ Snow2pmEarlyClose1967,
223
+ Backlog2pmEarlyCloses1967,
224
+ # 1968
225
+ Backlog2pmEarlyCloses1968,
226
+ MLKdayOfMourning1968,
227
+ PaperworkCrisis1968,
228
+ # 1969 - 1970
229
+ PaperworkCrisis2pmEarlyCloses1969,
230
+ SnowClosing1969,
231
+ Snow11amLateOpen1969,
232
+ EisenhowerFuneral1969,
233
+ Storm1045LateOpen1969,
234
+ PaperworkCrisis230pmEarlyCloses1969,
235
+ FirstLunarLandingClosing1969,
236
+ PaperworkCrisis3pmEarlyCloses1969to1970,
237
+ # 1972
238
+ TrumanFuneral1972,
239
+ # 1973
240
+ JohnsonFuneral1973,
241
+ Ice11amLateOpen1973,
242
+ # 1974
243
+ MerrillLynchComputer1015LateOpen1974,
244
+ FireDrill1015LateOpen1974,
245
+ # 1975
246
+ Snow230EarlyClose1975,
247
+ # 1976
248
+ Storm1115LateOpen1976,
249
+ FireDrill1015LateOpen1976,
250
+ HurricaneWatch3pmEarlyClose1976,
251
+ # 1977
252
+ NewYorkCityBlackout77,
253
+ # 1978
254
+ Snow12pmLateOpen1978,
255
+ Snow2pmEarlyClose1978,
256
+ Snow11amLateOpen1978,
257
+ # 1981
258
+ ReaganAssassAttempt317pmEarlyClose1981,
259
+ ConEdPowerFail328pmEarlyClose1981,
260
+ # 1985
261
+ HurricaneGloriaClosings1985,
262
+ # 1987
263
+ Backlog2pmEarlyCloses1987,
264
+ Backlog230pmEarlyCloses1987,
265
+ Backlog3pmEarlyCloses1987,
266
+ Backlog330pmEarlyCloses1987,
267
+ # 1989
268
+ Fire11amLateOpen1989,
269
+ # 1990
270
+ ConEdXformer931amLateOpen1990,
271
+ # 1991
272
+ TroopsInGulf931LateOpens1991,
273
+ # 1994
274
+ Snow230pmEarlyClose1994,
275
+ NixonFuneral1994,
276
+ # 1995
277
+ Computer1030LateOpen1995,
278
+ # 1996
279
+ Snow11amLateOpen1996,
280
+ Snow2pmEarlyClose1996,
281
+ # 1997
282
+ CircuitBreakerTriggered330pmEarlyClose1997,
283
+ # 2001
284
+ September11Closings2001,
285
+ Sept11MomentSilence933amLateOpen2001,
286
+ EnduringFreedomMomentSilence931amLateOpen2001,
287
+ # 2002
288
+ Sept11Anniversary12pmLateOpen2002,
289
+ # 2003
290
+ IraqiFreedom932amLateOpen2003,
291
+ # 2004
292
+ ReaganMomentSilence932amLateOpen2004,
293
+ ReaganMourning2004,
294
+ # 2005
295
+ SystemProb356pmEarlyClose2005,
296
+ # 2006
297
+ FordMomentSilence932amLateOpen2006,
298
+ # 2007
299
+ FordMourning2007,
300
+ # 2012
301
+ HurricaneSandyClosings2012,
302
+ # 2018
303
+ GeorgeHWBushDeath2018,
304
+ # 2025
305
+ JimmyCarterDeath2025,
306
+ )
307
+ from pandas_market_calendars.market_calendar import MarketCalendar
308
+
309
+ # Useful resources for making changes to this file:
310
+ # http://www.nyse.com/pdfs/closings.pdf
311
+ # http://www.stevemorse.org/jcal/whendid.html
312
+
313
+ # Overwrite the default holiday calendar start_date of 1/1/70
314
+ AbstractHolidayCalendar.start_date = "1885-01-01"
315
+
316
+
317
+ class NYSEExchangeCalendar(MarketCalendar):
318
+ """
319
+ Exchange calendar for NYSE from 1885-01-01
320
+ - Note: DJIA was first recorded 1885-02-16
321
+
322
+ REFERENCES:
323
+ - https://web.archive.org/web/20141224054812/http://www.nyse.com/about/history/timeline_trading.html
324
+ - https://www.marketwatch.com/story/a-brief-history-of-trading-hours-on-wall-street-2015-05-29
325
+ - http://www.ltadvisors.net/Info/research/closings.pdf
326
+ - https://github.com/rsheftel/pandas_market_calendars/files/6827110/Stocks.NYSE-Closings.pdf
327
+
328
+ NYSE OVERVIEW:
329
+ - 1792: 5 securities traded
330
+ - 1871: Continuous trading begins
331
+ - 1885 to 1887: trading hours Mon-Sat 10am to variable 2pm thru 4pm (coded as 3pm)
332
+ - 1887: trading hours Mon-Fri 10am-3pm Sat 10am-noon
333
+ - 1952-09-29: trading hours Mon-Fri 10am-3:30pm,
334
+ - Sat trading removed after Sept 27
335
+ - Last effective Saturday traded was May 24, 1952
336
+ - 1974: trading hours Mon-Fri 10am-4pm
337
+ - 1985: trading hours Mon-Fri 9:30am-4pm
338
+
339
+ #######################################
340
+ Regularly-Observed Holidays as of 2021:
341
+ #######################################
342
+ - New Years Day (observed on monday when Jan 1 is a Sunday)
343
+ - Martin Luther King Jr. Day (3rd Monday in January, only after 1998)
344
+ - Lincoln's Birthday (February 12th, only before 1954 starting in 1896)
345
+ - Washington's Birthday (February 22nd, before 1971 with rule change in 1964)
346
+ - Washington's Birthday (aka President's Day, 3rd Monday in February, after 1970)
347
+ - Good Friday (two days before Easter Sunday)
348
+ - Memorial Day (May 30th, before 1970, with rule change in 1964)
349
+ - Memorial Day (last Monday in May, after 1970)
350
+ - Independence Day (July 4th Sunday to Monday, before 1954)
351
+ - Independence Day (observed on the nearest weekday to July 4th, after 1953)
352
+ - Election Day (First Tuesday starting on November 2nd, between 1848 and 1967)
353
+ - Election Day (Every four years, first Tuesday starting on November 2nd, between 1968 and 1980)
354
+ - Veterans Day (November 11th, between 1934 and 1953)
355
+ - Columbus Day (October 12th, before 1954)
356
+ - Labor Day (first Monday in September)
357
+ - Thanksgiving (last Thursday in November, before 1939)
358
+ - Thanksgiving (second to last Thursday in November, between 1939 and 1941)
359
+ - Thanksgiving (fourth Thursday in November, after 1941)
360
+ - Christmas (December 25th, Sunday to Monday, before 1954)
361
+ - Christmas (observed on nearest weekday to December 25, after 1953)
362
+
363
+ ################################
364
+ Regularly-Observed Early Closes:
365
+ ################################
366
+ - July 3rd (Mondays, Tuesdays, and Thursdays, 1995 onward)
367
+ - July 5th (Fridays, 1995 onward, except 2013)
368
+ - Christmas Eve (except on Fridays, when the exchange is closed entirely)
369
+ - Day After Thanksgiving (aka Black Friday, observed from 1992 onward)
370
+
371
+ NOTE: Until 1993, the standard early close time for the NYSE was 2:00 PM.
372
+ From 1993 onward, it has been 1:00 PM.
373
+
374
+ ####################################
375
+ Retired Regularly-Observed Holidays:
376
+ ####################################
377
+ - Columbus Day (after 1953)
378
+ - Armistice/Veterans Day (after 1953)
379
+
380
+ #################################
381
+ Irregularities Openings/Closings:
382
+ #################################
383
+ begin reference: https://github.com/rsheftel/pandas_market_calendars/files/6827110/Stocks.NYSE-Closings.pdf
384
+ - Closed on Aug 8, 1885 (Sat): President Ulysses S. Grant funeral
385
+ - Closed on Jul 2, 1887 (Sat): Saturday before Independence Day
386
+ - Closed on Dec 24, 1887 (Sat): Christmas Eve
387
+ - Closed on Mar 12-13, 1888 (Mon-Tue): Blizzard of 1888
388
+ - Closed on Sep 1, 1888 (Sat): Saturday before Labor Day
389
+ - Closed on Nov 30, 1888 (Fri): Friday after Thanksgiving
390
+ - Closed on Apr 29 - May 1, 1889 (Mon-Wed): Centennial celbration of Washington's inauguration
391
+ - Closed on Jul 5, 1890 (Sat): Saturday after Independence Day
392
+ - Closed on Dec 26, 1891 (Sat): Saturday after Christmas
393
+ - Closed on Jul 2, 1892 (Sat): Saturday before Independence Day
394
+ - Closed on Oct 12, 1892 (Wed) Columbian Celebration (Columbus discovery of America)
395
+ - Closed on Oct 21-22, 1892 (Fri-Sat): Columbian Celebration
396
+ - Closed on Apr 27, 1893 (Thu): Columbian Celebration
397
+ - Closed on Dec 26, 1896 (Sat): Saturday after Christmas
398
+ - Closed on Apr 27, 1897 (Tue): Grant's birthday
399
+ - Closed on May 4, 1898 (Wed): NYC Charter Day
400
+ - Closed on Jul 2, 1898 (Sat): Saturday before Independence Day
401
+ - Closed on Aug 20, 1898 (Sat): Welcome of naval commanders
402
+ - Closed on Sep 3, 1898 (Sat): Saturday before Labor Day
403
+ - Closed on Dec 24, 1898 (Sat): Saturday before Christmas
404
+ - Closed on Feb 11, 1899 (Sat): Saturday before Lincoln's birthday
405
+ - Closed on May 29, 1899 (Mon): Monday before Decoration Day
406
+ - Closed on Jul 3, 1899 (Mon): Monday before Independence Day
407
+ - Closed on Sep 29-30, 1899 (Fri-Sat): Admiral Dewey Celebration
408
+ - Closed on Nov 25, 1899 (Sat): Funeral of Vice-President Garret A. Hobart
409
+ - Closed on Apr 14, 1900 (Sat): Saturday after Good Friday
410
+ - Closed on Sep 1, 1900 (Sat): Saturday before Labor Day
411
+ - Closed on Dec 24, 1900 (Mon): Christmas Eve
412
+ - Closed on Feb 2, 1901 (Sat): Funderal of Queen Victoria of England
413
+ - Closed on Feb 23, 1901 (Sat): Saturday after Washington's birthday
414
+ - Closed on Apr 6, 1901 (Sat): Saturday after Good Friday
415
+ - Closed on Apr 27, 1901 (Sat): Moved to temporary quarters in Produce Exchange
416
+ - Closed on May 11, 1901 (Sat): Enlarged temporary quarters in Produce Exchange
417
+ - Closed on Jul 5-6, 1901 (Fri-Sat): Days after Independence Day
418
+ - Closed on Aug 31, 1901 (Sat): Saturday before Labor Day
419
+ - Closed on Sep 14, 1901 (Sat): Death of President William McKinley
420
+ - Closed on Sep 19, 1901 (Thu): Funeral of President William McKinley
421
+ - Closed on Mar 29, 1902 (Sat): Saturday after Good Friday
422
+ - Closed on May 31, 1902 (Sat): Saturday after Decoration Day
423
+ - Closed on Jul 5, 1902 (Sat): Saturday after Independence Day
424
+ - Closed on Aug 9, 1902 (Sat): Coronation of King Edward VII of England
425
+ - Closed on Aug 30, 1902 (Sat): Saturday before Labor Day
426
+ - Closed on Feb 21, 1903 (Sat): Saturday before Washington's birthday
427
+ - Closed on Apr 11, 1903 (Sat): Saturday after Good Friday
428
+ - Closed on Apr 22, 1903 (Wed): Opening of the new NYSE building
429
+ - Closed on Sep 5, 1903 (Sat): Saturday before Labor Day
430
+ - Closed on Dec 26, 1903 (Sat): Saturday after Christmas
431
+ - Closed on May 28, 1904 (Sat): Saturday before Decoration Day
432
+ - Closed on Jul 2, 1904 (Sat): Saturday before Independence Day
433
+ - Closed on Sep 3, 1904 (Sat): Saturday before Labor Day
434
+ - Closed on Dec 24, 1904 (Sat): Saturday before Christmas
435
+ - Closed on Apr 22, 1905 (Sat): Saturday after Good Friday
436
+ - Closed on Feb 23, 1907 (Sat): Saturday after Washington's birthday
437
+ - Closed on Mar 30, 1907 (Sat): Saturday after Good Friday
438
+ - Closed on Aug 31, 1907 (Sat): Saturday before Labor Day
439
+ - Closed on Apr 18, 1908 (Sat): Saturday after Good Friday
440
+ - Early Close 1pm on Jun 25, 1908 (Fri): Former President Grover Cleveland funeral
441
+ - Closed on Sep 5, 1908 (Sat): Saturday before Labor Day
442
+ - Closed on Dec 26, 1908 (Sat): Saturday after Christmas
443
+ - Closed on Feb 13, 1909 (Sat): Saturday after Lincoln's birthday
444
+ - Closed on Apr 10, 1909 (Sat): Saturday after Good Friday
445
+ - Closed on May 29, 1909 (Sat): Saturday before Decoration Day
446
+ - Closed on Jul 3, 1909 (Sat): Saturday before Independence Day
447
+ - Closed on Sep 4, 1909 (Sat) Saturday before Labor Day
448
+ - Closed on Sep 25, 1909 (Sat): Reception Day of the Hudson-Fulton Celebration
449
+ - Closed on Mar 26, 1910 (Sat): Saturday after Good Friday
450
+ - Early Close 11am on May 7, 1910 (Sat): King Edward VII of England Death
451
+ - Late Open 12pm on May 20, 1910 (Fri): King Edward VII of England Funeral
452
+ - Closed on May 28, 1910 (Sat): Saturday before Decoration Day
453
+ - Closed on Jul 2, 1910 (Sat): Saturday before Independence Day
454
+ - Closed on Sep 3, 1910 (Sat): Saturday before Labor Day
455
+ - Closed on Dec 24, 1910 (Sat): Saturday before Christmas
456
+ - Closed on Apr 15, 1911 (Sat): Saturday after Good Friday
457
+ - Closed on Sep 2, 1911 (Sat): Saturday before Labor Day
458
+ - Closed on Dec 23, 1911 (Sat): Saturday before Christmas
459
+ - Closed on Aug 31, 1912 (Sat): Saturday before Labor Day
460
+ - Closed on Nov 2, 1912 (Sat): Vice-President James S. Sherman funeral
461
+ - Closed on Mar 22, 1913 (Sat): Saturday after Good Friday
462
+ - Late Open 12pm on Apr 14, 1913 (Mon): JP Morgan funeral
463
+ - Closed on May 31, 1913 (Sat): Saturday after Decoration Day
464
+ - Closed on Jul 5, 1913 (Sat): Saturday after Independence Day
465
+ - Closed on Aug 30, 1913 (Sat): Saturday before Labor Day
466
+ - Late Open 12pm on Sep 22, 1913 (Mon): Mayor William J. Gaynor funeral
467
+ - Closed on Jul 31-Dec 11, 1914: Pending outbreak of World War I.
468
+ - Bonds reopn Nov 28, 1914 for limited trading with restrictions
469
+ - Stocks (limited in number) reopen Dec 12, 1914 with restrictions
470
+ - Stocks (all stocks) reopen Dec 14, 1914 with restrictions
471
+ - Restrictions removed on Apr 1, 1915
472
+ - Closed on Dec 30, 1916 (Sat): Saturday before New Year's Day
473
+ - Closed on Jun 5, 1917 (Tue): Draft Registraion Day
474
+ - Closed on Aug 4, 1917 (Sat): Heat
475
+ - Early Close 12pm on Aug 29, 1917 (Wed): Parade of National Guard
476
+ - Closed on Sep 1, 1917 (Sat): Saturday before Labor Day
477
+ - Closed on Oct 13, 1917 (Sat): Saturday after Columbus Day
478
+ - Early Close 12pm on Oct 24, 1917 (Wed): Liberty Day
479
+ - Closed on Jan 28, 1918 (Mon): Heatless day
480
+ - Closed on Feb 4, 1918 (Mon): Heatless day
481
+ - Closed on Feb 11, 1918 (Mon): Heatless day
482
+ - Early Close 12pm on Apr 26, 1918 (Fri): Liberty Day
483
+ - NOT IMPLEMENTED: Break from 11am to 12pm on Jul 11, 1918 (Thu): Former Mayor John Purroy Mitchell funeral
484
+ - Closed on Sep 12, 1918 (Thu): Draft registration day
485
+ - Early Close 2:30pm on Nov 7, 1918 (Thu): False armistice report
486
+ - Closed on Nov 11, 1918 (Mon): Armistice signed
487
+ - Early Close 12:30pm on Jan 7, 1919 (Tue): Former President Theodore Roosevelt funeral
488
+ - Closed on Mar 25, 1919 (Tue): Homecoming of 27th Division
489
+ - Closed on May 6, 1919 (Tue): Parade of 77th Division
490
+ - Closed on May 31, 1919 (Sat): Saturday after Decoratin Day
491
+ - Closed on Jul 5, 1919 (Sat): Saturday after Independence Day
492
+ - Closed on Jul 19, 1919 (Sat): Heat and backlog catch up
493
+ - Closed on Aug 2, 1919 (Sat): Backlog catch up
494
+ - Closed on Aug 16, 1919 (Sat): Backlog catch up
495
+ - Closed on Aug 30, 1919 (Sat): Saturday before Labor Day
496
+ - Closed on Sep 10, 1919 (Wed): Return of General John J. Pershing
497
+ - Late Open 10:30am on Dec 30, 1919 (Tue): Traffic block
498
+ - Late Open 10:30am on Feb 6, 1920 (Fri): Traffic block
499
+ - Closed on Apr 3, 1920 (Sat): Saturday after Good Friday
500
+ - Closed on May 1, 1920 (Sat): Many firms changed office locations
501
+ - Closed on Jul 3, 1920 (Sat): Saturday before Independence Day
502
+ - Closed on Sep 4, 1920 (Sat): Saturday before Labor Day
503
+ - Early Close 12pm on Sep 16, 1920 (Thu): Wall Street explosion
504
+ - Closed on May 28, 1921 (Sat): Saturday before Decoration Day
505
+ - Closed on Jul 2, 1921 (Sat): Saturday before Independence Day
506
+ - Late Open 1pm on Aug 2, 1921 (Tue): Fire in annunciator board
507
+ - Closed on Sep 3, 1921 (Sat): Saturday before Labor Day
508
+ - Closed on Dec 23, 1922 (Sat): Saturday before Christmas
509
+ - Closed on Aug 3, 1923 (Fri): President Warren G. Harding death
510
+ - NOT IMPLEMENTED: Break 11am to 12:30pm on Aug 8, 1923 (Wed): President Warren G. Harding funeral
511
+ - Closed on Aug 10, 1923 (Fri): President Warren G. Harding funeral
512
+ - Early Close 12:30pm on Feb 6, 1924 (Wed): Former President Woodrow Wilson funderal
513
+ - Closed on May 31, 1924 (Sat): Saturday after Decoration Day
514
+ - Late Open 10:45am on Jan 24, 1925 (Sat): Eclipse of sun
515
+ - Early Close 2:30pm on Sep 18, 1925 (Fri): Seymour L. Cromwell funeral (former NYSE president)
516
+ - Closed on Dec 26, 1925 (Sat): Saturday after Christmas
517
+ - Closed on May 29, 1926 (Sat): Saturday before Decoration Day
518
+ - Closed on Jul 3, 1926 (Sat): Saturday before Independence Day
519
+ - Closed on Sep 4, 1926 (Sat): Saturday before Labor Day
520
+ - Closed on Jun 13, 1927 (Mon): Colonel Charles A. Lindberg parade
521
+ - Closed on Apr 7, 1928 (Sat): Backlog catch up
522
+ - Closed on Apr 21, 1928 (Sat): Backlog catch up
523
+ - Closed on May 5, 1928 (Sat): Backlog catch up
524
+ - Closed on May 12, 1928 (Sat): Backlog catch up
525
+ - Closed on May 19, 1928 (Sat): Backlog catch up
526
+ - Early Closes May 21-25, 1928 (Mon-Fri): Backlog catch up
527
+ - Closed on May 26, 1928 (Sat): Backlog catch up
528
+ - Closed on Nov 24, 1928 (Sat): Backlog catch up
529
+ - Closed on Feb 9, 1929 (Sat): Backlog catch up
530
+ - Closed on Feb 23, 1929 (Sat): Saturday after Washington's birthday
531
+ - Closed on Mar 30, 1929 (Sat): Saturday after Good Friday
532
+ - Closed on Aug 31, 1929 (Sat): Saturday before Labor Day
533
+ - Late Open 12pm on Oct 31, 1929 (Thu): Backlog catch up and relieve personnel
534
+ - Closed on Nov 1-2, 1929 (Fri-Sat): Backlog catch up and relieve personnel
535
+ - Early Closes 1pm on Nov 6-8, 1929 (Wed-Fri): Backlog catch up and relieve personnel
536
+ - Closed on Nov 9, 1929 (Sat): Backlog catch up and relieve personnel
537
+ - Early Closes 1pm on Nov 11-15, 1929 (Mon-Fri): Backlog catch up and relieve personnel
538
+ - Closed on Nov 16, 1929 (Sat): Backlog catch up and relieve personnel
539
+ - Closed on Nov 18-22, 1929 (Mon-Fri): Backlog catch up and relieve personnel
540
+ - Closed on Nov 23, 1929 (Sat): Backlog catch up and relieve personnel
541
+ - Closed on Nov 29-30, 1929 (Fri-Sat): Backlog catch up and relieve personnel
542
+ - Early Close 12:30pm on Mar 11, 1930 (Tue): Former President William Howard Taft funeral
543
+ - Closed on Apr 19, 1930 (Sat): Saturday after Good Friday
544
+ - Closed on May 31, 1930 (Sat): Saturday after Decoration Dday
545
+ - Closed on Jul 5, 1930 (Sat): Saturday after Independence Day
546
+ - Closed on Aug 30, 1930 (Sat): Saturday before Labor Day
547
+ - Closed on Sep 5, 1931 (Sat): Saturday before Labor Day
548
+ - Closed on Dec 26, 1931 (Sat): Saturday after Christmas
549
+ - Closed on Jul 2, 1932 (Sat): Saturday before Independence Day
550
+ - Closed on Jan 7, 1933 (Sat): Former President Calvin Coolidge funeral
551
+ - Closed on Mar 4, 1933 (Sat): State banking holiday
552
+ - Closed on Mar 6-14, 1933 (Mon-Tue): National banking holiday
553
+ - Late Open 12pm on Jul 24-25, 1933 (Mon-Tue): Volume activity
554
+ - Late Opens AND Early Closes on Jul 26-28, 1933 (Wed-Fri): Volume activity
555
+ - Closed on July 29, 1933 (Sat): Volume activity
556
+ - Early Close 12:30pm on Aug 4, 1933 (Fri): Gas fumes on trading floor
557
+ - Closed on Aug 5, 1933 (Sat): Volume activity
558
+ - Closed on Aug 12, 1933 (Sat): Volume activity
559
+ - Closed on Aug 19, 1933 (Sat): Volume activity
560
+ - Closed on Aug 26, 1933 (Sat): Volume activity
561
+ - Closed on Sep 2, 1933 (Sat): Volume activity
562
+ - Early Close 12pm on Sep 13, 1933 (Wed): NRA demonstration
563
+ - Late Open 11am on Feb 20, 1934 (Tue): severe snowstorm
564
+ - Late Open 11am on Jan 28, 1936 (Tue): King George V of England funeral
565
+ - Closed on Dec 26, 1936 (Sat): Saturday after Christmas
566
+ - Closed on May 29, 1937 (Sat): Saturday before Decoration Day
567
+ - Closed on Jul 3, 1937 (Sat): Saturday before Independence Day
568
+ - NOT IMPLEMENTED Break from 12-13:00 on May 18, 1942 (Mon): NYSE 150th anniversary
569
+ - NOT IMPLEMENTED Break from 14:32-14:58 on Oct 22, 1942 (Thu): Civil Defense drill
570
+ - NOT IMPLEMENTED Break from 14:38-14:59 on Oct 26, 1943 (Tue): Civil Defense drill
571
+ - Reopened from 15:20-15:40 under special rule of the Board
572
+ - Closed on Aug 19, 1944 (Sat)
573
+ - Closed on Aug 26, 1944 (Sat)
574
+ - Closed on Sep 2, 1944 (Sat)
575
+ - Closed on Apr 14, 1945 (Sat): President Franklin D. Roosevelt National Day of mourning
576
+ - NOT IMPLEMENTED Break 11:00-13:00 on Jun 19, 1945 (Tue): Parade for General Eisenhower
577
+ - Closed on Saturdays Jul 7-Sep 1, 1945
578
+ - Closed on Aug 15-16, 1945 (Wed-Thu): VJ Day. End of World War II
579
+ - Closed on Oct 13, 1945 (Sat): Saturday after Columbus Day
580
+ - Closed on Oct 27, 1945 (Sat): Navy Day
581
+ - Closed on Dec 24, 1945 (Mon): Christmas Eve
582
+ - Closed on Feb 23, 1946 (Sat): Saturday after Washington's birthday
583
+ - Closed on May 25, 1946 (Sat): Railroad strike
584
+ - Closed on Saturdays Jun 1-Sep 28, 1946 (Sat-Sat)
585
+ - Closed on Saturdays May 31-Sep 27, 1947 (Sat-Sat)
586
+ - Closed on Jan 3, 1948 (Sat): severe weather
587
+ - Closed on Saturdays May 29-Sep 25, 1948 (Sat-Sat)
588
+ - Closed on Saturdays May 28-Sep 4, 1948 (Sat-Sat)
589
+ - Cosed on Dec 24, 1949 (Sat): Christmas Eve
590
+ - Closed on Saturdays Jun 3-Sep 30, 1950 (Sat-Sat)
591
+ - Closed on Dec 12, 1950 (Sat): Saturday before Christmas Eve
592
+ - NOT IMPLEMENTED Break from 11:00-13:00 on Apr 20, 1951 (Fri): Parade for General MacArthur
593
+ - Closed on Saturdays Jun 2-Sep 29, 1951 (Sat-Sat)
594
+ - NOT IMPLEMENTED Break from 10:33-11:05 (Wed): Civil Defense Drill
595
+ - Early Close 1pm on Dec 24, 1951 (Mon): Christmas Eve
596
+ - Closed on Saturdays May 31-Sep 27, 1952 (Sat-Sat)
597
+ - As of Sep 29, 1952 Saturdays were retired as trading days
598
+ - As of Sep 29, 1952, M-F trading closes at 3:30pm (30 minutes longer)
599
+ - NOT IMPLEMENTED Break 10:02-10:32 on Jun 14, 1954 (Mon): Civil Defense drill
600
+ - Closed on Dec 24, 1954 (Fri): Christmas Eve
601
+ - NOT IMPLEMENTED Break 14:05-14:35 on Jun 15, 1955 (Wed): Civil Defense drill
602
+ - Closed on Dec 24, 1956 (Mon): Christmas Eve
603
+ - NOT IMPLEMENTED Break 13:45-14:15 on Jul 12, 1957 (Fri): Civil Defense drill
604
+ - NOT IMPLEMENTED Break 10:30-10:50 on May 6, 1958 (Tue): Civil Defense drill
605
+ - Closed on Dec 26, 1958 (Fri): Day after Christmas
606
+ - NOT IMPLEMENTED Break 13:30-13:50 on Apr 17, 1959 (Fri): Civil Defense drill
607
+ - NOT IMPLEMENTED Break 14:16-14:40 on May 3, 1960 (Tue): Civil Defense drill
608
+ - Late Open 11:00 on Dec 12, 1960 (Mon): severe snowstorm
609
+ - Closed on May 29, 1961 (Mon): Day before Decoration Day
610
+ - Early Close 14:07 on Nov 22, 1963 (Fri): President John F. Kennedy assassintion
611
+ - Closed on Nov 25, 1963 (Mon): President John F. Kennedy funeral
612
+ - Early Close 14:00 on Oct 23, 1964 (Fri): Former President Herbert C. Hoover funeral
613
+ - NOT IMPLEMENTED Break 11:00-11:02 on Jan 25, 1965 (Mon): Sir Winston Churchill 2 minutes of silence
614
+ - Late Open 11:05 on Nov 10, 1965 (Wed): Power failure in NY grid supply
615
+ - Closed on Dec 24, 1965 (Fri): Christmas Eve
616
+ - Early Closes 14:00 on Jan 6-14, 1966 (Thu-Fri): Transit strike
617
+ - NOT IMPLEMENTED Break 13:00-13:01 on Feb 3, 1967 (Fri): Apollo I disaster moment of silence
618
+ - Late Open 10:15 AND Early Close 14:00 on Feb 7, 1967 (Tue): snowstorm
619
+ - NOT IMPLEMENTED Break 12:58-13:13 on May 17, 1967 (Wed): Vice President Humphrey spoke in honor of NYSE's 175th anniversary
620
+ - Early Closes 14:00 on Aug 8-18, 1967 (Tue-Fri): Backlog catch up
621
+ - Early Closes 14:00 on Jan 22-Mar 1, 1968 (Mon-Fri): Backlog catch up
622
+ - Closed on Feb 12, 1968 (Mon): Lincoln's birthday (offices open, trading closed)
623
+ - NOT IMPLEMENTED Break 11:00-11:01 on Apr 5, 1968 (Fri): Dr. Martin Luther King, Jr. moment of silence
624
+ - Closed on Apr 9, 1968 (Tue): Martin Luther King, Jr. day or mourning
625
+ - NOT IMPLEMENTED Break 11:00-11:02 on Jun 6, 1968 (Fri): Senator Robert F. Kennedy moment of silence
626
+ - 4 day workweek Closed on a Wednesday OR Holiday from Jun 12-Dec 31, 1968: Paperwork crisis
627
+ - Closed on July 5, 1968 (Fri): Day after Independence Day
628
+ - Early Closes 14:00 on Jan 2-Jul 3, 1969: Paperwork Crisis
629
+ - Closed on Feb 10, 1969 (Mon): heavy snow
630
+ - Late open 11am on Feb 11, 1969 (Tue): heavy snow
631
+ - NOT IMPLEMENTED Break 13:30-13:32 on Mar 28, 1969 (Fri): Former President Dwight D. Eisenhower moment of silence
632
+ - Closed on Mar 31, 1969 (Mon): Former President Dwight D. Eisenhower funeral
633
+ - Late Open 10:45 on Jun 2, 1969 (Mon): storm
634
+ - Early Closes 14:30 on Jul 7-Sep 26,1969 (Mon-Fri): Paperwork Crisis
635
+ - Closed on Jul 21, 1969 (Mon): National Day of Participation for lunar exploration
636
+ - NOT IMPLEMENTED Break 12:35-13:05 on Sep 3, 1969 (Wed): power failure
637
+ - Early Closes 15:00 on Sep 29, 1969 to May 1, 1970: Paperwork Crisis
638
+ - Closed on Dec 28, 1972 (Thu): Former President Harry S. Truman funeral
639
+ - Closed on Jan 25, 1973 (Thu): Former President Lyndon B. Johnson funeral
640
+ - Late Open 11am on Dec 17, 1973 (Mon): ice storm
641
+ - Late Open 10:15 on Jan 16, 1974 (Wed): Merrill Lynch computer trouble
642
+ - NOT IMPLEMENTED Break 11:09-11:35 on Apr 10, 1974 (Wed): computer malfunction
643
+ - NOT IMPLEMENTED Break 11:46-12:22 on Oct 15, 1974 (Wed): Ticker down at 11:37 to 12:22
644
+ - Late Open 10:15 on Nov 22, 1974 (Fri): Fire drill
645
+ - Early Close 14:00 on Dec 24, 1974 (Tue): Christmas Eve
646
+ - NOT IMPLEMENTED Break 10:07-10:50 on Jan 7, 1975 (Tue): Computer stopped
647
+ - NOT IMPLEMENTED Break 13:24-13:45 on Jan 15, 1975 (Wed): Computer stopped
648
+ - NOT IMPLEMENTED Break 10:24-11:00 on Feb 7, 1975 (Fri): Computer failure
649
+ - Early Close 14:30 on Feb 12, 1975 (Wed): snowstorm
650
+ - NOT IMPLEMENTED Break 10:09-10:35 on Apr 9, 1975 (Wed): Computer stopped
651
+ - Early Close 14:00 on Dec 24, 1975 (Wed): Christmas Eve
652
+ - Late Open 11:15 on Feb 2, 1976 (Mon): storm
653
+ - Late Open UNKNOWN (coded as 10:15) on Jun 8, 1976 (Tue): fire drill
654
+ - Early Close 15:00 on Aug 9, 1976 (Mon): hurricane watch
655
+ - NOT IMPLEMENTED Break 1 minute time UNKNOWN on Nov 4, 1976 (Thu): Former NYSE Chair Gustave L. Levy moment of silence
656
+ - NOT IMPLEMENTED Break 11:00-11:01 on Feb 24, 1977 (Thu): Former NYSE Chair John A. Coleman moment of silence
657
+ - NOT IMPLEMENTED Break 10:24-11:45 on Mar 1, 1977 (Tue): Fire on moving ramp between trading floor and Blue Room
658
+ - Closed on July 14, 1977 (Thu): Power failure in NYC
659
+ - Late Open 12pm on Jan 20, 1978 (Fri): snowstorm
660
+ - Early Close 2pm on Feb 6, 1978 (Mon): snowstorm
661
+ - Late Open 11am on Feb 7, 1978 (Tue): snowstorm
662
+ - NOT IMPLEMENTED Break 1 minute time UNKNOWN on Dec 13, 1979 (Thu): Former NYSE Chair Robert L. Stott minute of silence
663
+ - NOT IMPLEMENTED Break 11:11-12:04 on Oct 13, 1980 (Mon): Computer malfunction
664
+ - NOT IMPLEMENTED Break 1 minute time UNKNOWN on Dec 30, 1980 (Tue): Former NYSE Chair James Crane Kellogg III moment of silence
665
+ - Early Close 3:17pm on Mar 30, 1981 (Mon): President Reagan assassination attempt
666
+ - Early Close 3:28pm on Sep 9, 1981 (Wed): Con Edison power failure
667
+ - NOT IMPLEMENTED Break 12:26-12:45pm on Sep 16, 1981 (Wed): Fire alarm malfunction
668
+ - NOT IMPLEMENTED Break 10:25-11:00am on Dec 28, 1982 (Tue): small fire
669
+ - NOT IMPLEMENTED Break 13:51-15:30 on Oct 13, 1983 (Thu): low speed ticker malfunction
670
+ - Closed on Sep 27, 1985 (Fri): Hurricane Gloria
671
+ - NOT IMPLEMENTED Break 11:00-11:01 on Jan 29, 1986 (Wed): Challenger space crew moment of silence
672
+ - Early Closes 2pm on Oct 23-30, 1987 (Fri-Fri): October 19th break volume
673
+ - Early Closes 2:30pm on Nov 2-4, 1987 (Mon-Wed): reason not given volume assumed
674
+ - Early Closes 3pm on Nov 5-6, 1987 (Thu-Fri): reason not given volume assumed
675
+ - Early Closes 3:30pm on Nov 9-11, 1987 (Mon-Wed): Trading floor and clerical staff strike
676
+ - Late Open 11am on Nov 10, 1989 (Fri): Electrical fire
677
+ - NOT IMPLEMENTED Break 9:41-11:15 on Nov 23, 1990 (Fri): Internal power failure
678
+ - Early Close 2pm on Dec 24, 1990 (Mon): Christmas Eve
679
+ - Late Open 11am on Dec 27, 1990 (Thu): explosion of Con Edison transformer
680
+ - Late Open 9:31am on Jan 17, 1991 (Thu): American troops in Persian Gulf moment of silence
681
+ - Late Open 9:31am on Feb 25, 1991 (Thu): American troops in Persian Gulf moment of silence
682
+ - NOT IMPLEMENTED Break 10:21-10:45am on Oct 22, 1991 (Tue): power dip
683
+ - Early Close 2pm on Dec 24, 1991 (Tue): Christmas Eve
684
+ - NOT IMPLEMENTED Break 1 minute time UNKNOWN on Mar 19, 1992 (Thu): Former NYSE Chair Bernard J. Lasker moment of silence
685
+ - NOT IMPLEMENTED Break 1 minute time UNKNOWN on May 15, 1992 (Fri): Former NYSE President G. Keith Funston moment of silence
686
+ - NOT IMPELMENTED Break 1 minute time UNKNOWN on Jun 15, 1992 (Mon): Former NYSE President Robert W. Haack moment of silence
687
+ - Early Close 2pm on Nov 27, 1992 (Fri): Day after Thanksgiving
688
+ - Early Close 2pm on Dec 24, 1992 (Thu): Christmas Eve
689
+ - Early Close 1pm on Nov 26, 1993 (Fri): Day after Thanksgiving
690
+ - Early Close 14:30 on Feb 11, 1994 (Fri): snowstorm
691
+ - NOT IMPLEMENTED Break 12:00-12:02 on Apr 25, 1994 (Mon): Former President Richard M. Nixon moment of silence
692
+ - Closed on Apr 27, 1994 (Wed): Former President Richard M. Nixon funderal
693
+ - Early Close 1pm on Nov 25, 1994 (Fri): Day after Thanksgiving
694
+ - NOT IMPLEMENTED Break 10:02-10:03 on Apr 26, 1995 (Wed): Oklahoma City bombing victims moment of silence
695
+ - Early Close 1pm on Jul 3, 1995 (Mon): Day before Independence Day
696
+ - Early Close 1pm on Nov 24, 1995 (Fri): Day after Thanksgiving
697
+ - Late Open 10:30am on Dec 18, 1995 (Mon): Computer system troubles
698
+ - Late Open 11am AND Early Close 2pm on Jan 8, 1996 (Mon): snowstorm
699
+ - NOT IMPLEMENTED Break time UNKNOWN on Apr 4, 1996 (Thu): Commerce Secretary Ron Brown and others killed in Balkans plane crash
700
+ - Early Close 1pm on July 5, 1996 (Fri): Day after Independence Day
701
+ - Early Close 1pm on Nov 29, 1996 (Fri): Day after Thanksgiving
702
+ - Early Close 1pm on Dec 24, 1996 (Tue): Christmas Eve
703
+ - Early Close 1pm on Jul 3, 1997 (Thu): Day before Independence Day
704
+ - NOT IMPLEMENTED Break 14:35-15:05 on Oct 27, 1997 (Mon): Circuit breaker triggered
705
+ - Early Close 3:30pm on Oct 27, 1997 (Mon): Circuit breaker triggered
706
+ - Early Close 1pm on Nov 28, 1997 (Fri): Day after Thanksgiving
707
+ - Early Close 1pm on Dec 24, 1997 (Wed): Christmas Eve
708
+ - Early Close 1pm on Dec 26, 1997 (Fri): Friday after Christmas
709
+ - NOT IMPLEMENTED Break time UNKNOWN on Jul 29, 1998 (Wed): Former NYSE President William McChesney Marting, Jr. moment of silence
710
+ - NOT IMPLEMENTED Break 13:16-14:15 on Oct 26, 1998 (Mon): Computer switch malfunction
711
+ - Early Close 1pm on Nov 27, 1998 (Fri): Day after Thanksgiving
712
+ - Early Close 1pm on Dec 24, 1998 (Thu): Christmas Eve
713
+ - NOT IMPLEMENTED Break 10:00-10:02 on Mar 25, 1999 (Thu): NATO troops in Kosovo minute of silence
714
+ - NOT IMPLEMENTED Break 12:00-12:02 on Apr 26, 1999 (Mon): Columbine High School killings moment of silence
715
+ - Early Close 1pm on Nov 26, 1999 (Fri): Day after Thanksgiving
716
+ - Early Close 1pm on Dec 24, 1999 (Fri): Christmas Eve
717
+ - NOT IMPLEMENTED Break 12:00-12:01 on Feb 16, 2000 (Wed): Former NYSE Chair Walter N. Frank moment of silence
718
+ - NOT IMPLEMENTED Break 12:00-12:01 on May 4, 2000 (Thu): Archbishop of NY Cardinal John O'Connor moment of silence
719
+ - Early Close 1pm on Jul 3, 2000 (Mon): Day before Independence Day
720
+ - Early Close 1pm on Nov 24, 2000 (Fri): Day after Thanksgiving
721
+ - NOT IMPLEMENTED Break 10:10-11:35 on Jun 8, 2001 (Fri): computer systems connectivity problem
722
+ - Early Close 1pm on Jul 3, 2001 (Tue): Day before Independence Day
723
+ - Closed on Sep 11-14, 2001 (Tue-Fri): Terrorist attack on World Trade Center
724
+ - Late Open 9:33am on Sep 17, 2001 (Mon): 2 minutes silence in honor of lives lost on 9/11
725
+ - Late Open 9:31am on Oct 8, 2001 (Mon): 1 minute silence for troops engaged in Operation Enduring Freedom
726
+ - Early Close 1pm on Nov 23, 2001 (Fri): Day after Thanksgiving
727
+ - Early Close 1pm on Dec 24, 2001 (Mon): Christmas Eve
728
+ - NOT IMPLEMENTED Break 10:29-10:31 on May 30, 2002 (Thu): Commemorate end of recovery work at Ground Zero
729
+ - Early Close 1pm on Jul 5, 2002 (Fri): Day after Independence Day
730
+ - Late Opening 12:00pm on Sep 11, 2002 (Wed): 1 year anniversary of 9/11 attack
731
+ - Early Close 1pm on Nov 29, 2002 (Fri): Day after Thanksgiving
732
+ - Early Close 1pm on Dec 24, 2002 (Tue): Christmas Eve
733
+ - NOT IMPLEMENTED Break 11:00-11:02 on Feb 3, 2002 (Mon): Columbia Space Shuttle lives lost moment of silence
734
+ - Late Opening 9:32am on Mar 20, 2003 (Thu): Operation Iraqi Freedom Troops moment of silence
735
+ - Early Close 1pm on Jul 3, 2003 (Thu): Day before Independence Day
736
+ - NOT IMPLEMENTED multiple 1-minute Breaks 9:59 and 10:29 on Sep 11, 2003 (Thu): 9/11 Commemoration
737
+ - Early Close 1pm on Nov 28, 2003 (Fri): Day after Thanksgiving
738
+ - Early Close 1pm on Dec 24, 2003 (Wed): Christmas Eve
739
+ - Early Close 1pm on Dec 26, 2003 (Fri): Friday after Christmas
740
+ - Late Open 9:32am on Jun 7, 2004 (Mon): Former President Ronald Reagan death moment of silence
741
+ - Closed on Jun 11, 2004 (Fri): Former President Ronald Reagan National Day of Mourning
742
+ - Early Close 1pm on Nov 26, 2004 (Fri): Day after Thanksgiving
743
+ - Early Close 3:56pm on Jun 1, 2005 (Wed): Systems communication problem
744
+ - Early Close 1pm on Nov 25, 2005 (Fri): Day after Thanksgiving
745
+ - Early Close 1pm on Jul 3, 2006 (Mon): Day before Independence Day
746
+ - Early Close 1pm on Nov 24, 2006 (Fri): Day after Thanksgiving
747
+ - Late Open 9:32am on Dec 27, 2006 (Wed): Former President Gerald Ford moment of silence
748
+ - Closed on Jan 2, 2007 (Tue): Former President Gerald Ford National Day of Mourning
749
+ - Early Close 1pm on Jul 3, 2007 (Tue): Day before Independence Day
750
+ - Early Close 1pm on Nov 23, 2007 (Fri): Day after Thanksgiving
751
+ - Early Close 1pm on Dec 24, 2007 (Mon): Christmas Eve
752
+ - Early Close 1pm on Jul 4, 2008 (Thu): Day before Independence Day
753
+ - Early Close 1pm on Nov 28, 2008 (Fri): Day after Thanksgiving
754
+ - Early Close 1pm on Dec 24, 2008 (Wed): Christmas Eve
755
+ - NOT IMPLEMENTED Extended Close 4:15pm on Jul 2, 2009 (Thu): Execute customer orders impacted by system irregularities
756
+ - Early Close 1pm on Nov 27, 2009 (Fri): Day after Thanksgiving
757
+ - Early Close 1pm on Dec 24, 2009 (Thu): Christmas Eve
758
+ - Early Close 1pm on Nov 26, 2010 (Fri): Day after Thanksgiving
759
+ - NOT IMPLEMENTED Break 11:00-11:01 on Jan 10, 2011 (Mon): Arizona shooting victims moment of silence
760
+
761
+ end of reference: https://github.com/rsheftel/pandas_market_calendars/files/6827110/Stocks.NYSE-Closings.pdf
762
+ *******************************************************************
763
+
764
+ https://www.streetinsider.com/Insiders+Blog/NYSE+Releases+2010+and+2011+Holiday+Calendar/4915576.html
765
+ - Early Close 1pm on Nov 25, 2011 (Fri): Day after Thanksgiving
766
+
767
+ https://holidaystracker.com/stock-market/new-york-stock-exchange-holidays-2012/
768
+ - Early Close 1pm on Jul 4, 2012 (Tue): Day before Independence Day
769
+ - Closed on 10/29/2012 and 10/30/2012 due to Hurricane Sandy.
770
+ - Early Close 1pm on Nov 23, 2012 (Fri): Day after Thanksgiving
771
+ - Early Close 1pm on Dec 24, 2012 (Mon): Christmas Eve
772
+
773
+ https://holidaystracker.com/stock-market/new-york-stock-exchange-nyse-holidays-2013/
774
+ - Early Close 1pm on Jul 3, 2013 (Wed): Day before Independence Day
775
+ - Early Close 1pm on Nov 29, 2013 (Fri): Day after Thanksgiving
776
+ - Early Close 1pm on Dec 24, 2013 (Tue): Christmas Eve
777
+
778
+ https://www.streetinsider.com/Insiders+Blog/NYSE+2014+and+2015+Holiday+Hours/8999575.html - Early Close 1pm on Jul 3, 2014 (Thu): Day before Independence Day
779
+ - Early Close 1pm on Jul 3, 2014 (Thu): Day before Independence Day
780
+ - Early Close 1pm on Nov 28, 2014 (Fri): Day after Thanksgiving
781
+ - Early Close 1pm on Dec 24, 2014 (Wed): Christmas Eve
782
+
783
+ https://www.businesswire.com/news/home/20141208006349/en/NYSE-Group-2016-Holiday-Calendar-and-Early-Closings
784
+ - Early Close 1pm on Nov 27, 2015 (Fri): Day after Thanksgiving
785
+ - Early Close 1pm on Dec 24, 2015 (Thu): Christmas Eve
786
+ - Early Close 1pm on Nov 25, 2016 (Fri): Day after Thanksgiving
787
+
788
+ https://www.stockinvestor.com/30380/stock-market-holidays-2017/
789
+ - Early Close 1pm on Jul 3, 2017 (Mon): Day before Independence Day
790
+ - Early Close 1pm on Nov 24, 2017 (Fri): Day after Thanksgiving
791
+ - Early Close 1pm on Jul 3, 2018 (Tue): Day before Independence Day
792
+ - Early Close 1pm on Nov 23, 2018 (Fri): Day after Thanksgiving
793
+ - Closed on 12/5/2018 due to George H.W. Bush's death.
794
+ - Early Close 1pm on Dec 24, 2018 (Tue): Christmas Eve
795
+ - Early Close 1pm on Jul 3, 2019 (Wed): Day before Independence Day
796
+ - Early Close 1pm on Nov 29, 2019 (Fri): Day after Thanksgiving
797
+ - Early Close 1pm on Dec 24, 2019 (Wed): Christmas Eve
798
+
799
+ https://holidaystracker.com/stock-market/new-york-stock-exchange-nyse-holidays-2020/
800
+ - Early Close 1pm on Nov 27, 2020 (Fri): Day after Thanksgiving
801
+ - Early Close 1pm on Dec 24, 2020 (Thu): Christmas Eve
802
+
803
+
804
+ NOTE: The exchange was **not** closed early on Friday December 26, 2008,
805
+ nor was it closed on Friday December 26, 2014. The next Thursday Christmas
806
+ will be in 2025. If someone is still maintaining this code in 2025, then
807
+ we've done alright...and we should check if it's a half day.
808
+
809
+ """
810
+
811
+ aliases = ["NYSE", "stock", "NASDAQ", "BATS", "DJIA", "DOW"]
812
+
813
+ regular_market_times = {
814
+ "pre": ((None, time(4)),),
815
+ "market_open": ((None, time(10)), ("1985-01-01", time(9, 30))),
816
+ "market_close": (
817
+ (None, time(15)),
818
+ ("1952-09-29", time(15, 30)),
819
+ ("1974-01-01", time(16)),
820
+ ),
821
+ "post": ((None, time(20)),),
822
+ }
823
+
824
+ _saturday_close = time(12)
825
+ _saturday_end = pd.Timestamp("1952-09-29", tz="UTC")
826
+
827
+ @property
828
+ def name(self):
829
+ return "NYSE"
830
+
831
+ @property
832
+ def tz(self):
833
+ return timezone("America/New_York")
834
+
835
+ @property
836
+ def weekmask(self):
837
+ return "Mon Tue Wed Thu Fri"
838
+
839
+ @property
840
+ def weekmask_pre_1952(self):
841
+ return "Mon Tue Wed Thu Fri Sat"
842
+
843
+ def holidays_pre_1952(self):
844
+ """
845
+ NYSE Market open on Saturdays pre 5/24/1952.
846
+ CustomBusinessDay object that can be used inplace of holidays() for dates prior to crossover
847
+
848
+ :return: CustomBusinessDay object of holidays
849
+ """
850
+ if hasattr(self, "_holidays_hist"):
851
+ return self._holidays_hist
852
+
853
+ self._holidays_hist = CustomBusinessDay(
854
+ holidays=self.adhoc_holidays,
855
+ calendar=self.regular_holidays,
856
+ weekmask=self.weekmask_pre_1952,
857
+ )
858
+ return self._holidays_hist
859
+
860
+ @property
861
+ def regular_holidays(self):
862
+ return AbstractHolidayCalendar(
863
+ rules=[
864
+ USNewYearsDayNYSEpost1952,
865
+ USNewYearsDayNYSEpre1952,
866
+ USMartinLutherKingJrAfter1998,
867
+ USPresidentsDay,
868
+ USWashingtonsBirthDayBefore1952,
869
+ USWashingtonsBirthDay1952to1963,
870
+ USWashingtonsBirthDay1964to1970,
871
+ USLincolnsBirthDayBefore1954,
872
+ GoodFriday,
873
+ GoodFridayPre1898,
874
+ GoodFriday1899to1905,
875
+ USMemorialDay,
876
+ USMemorialDayBefore1952,
877
+ USMemorialDay1952to1964,
878
+ USMemorialDay1964to1969,
879
+ USIndependenceDay,
880
+ USIndependenceDayPre1952,
881
+ USIndependenceDay1952to1954,
882
+ USLaborDayStarting1887,
883
+ USColumbusDayBefore1954,
884
+ USElectionDay1848to1967,
885
+ USVeteransDay1934to1953,
886
+ USThanksgivingDay,
887
+ USThanksgivingDayBefore1939,
888
+ USThanksgivingDay1939to1941,
889
+ ChristmasNYSE,
890
+ Christmas54to98NYSE,
891
+ ChristmasBefore1954,
892
+ USJuneteenthAfter2022,
893
+ ]
894
+ )
895
+
896
+ @property
897
+ def adhoc_holidays(self):
898
+ return list(
899
+ chain(
900
+ # Recurring Holidays
901
+ SatAfterGoodFridayAdhoc,
902
+ MonBeforeIndependenceDayAdhoc,
903
+ SatBeforeIndependenceDayAdhoc,
904
+ SatAfterIndependenceDayAdhoc,
905
+ DaysAfterIndependenceDayAdhoc,
906
+ SatBeforeLaborDayAdhoc,
907
+ USElectionDay1968to1980Adhoc,
908
+ FridayAfterThanksgivingAdHoc,
909
+ SatBeforeChristmasAdhoc,
910
+ SatAfterChristmasAdhoc,
911
+ ChristmasEvesAdhoc,
912
+ DayAfterChristmasAdhoc,
913
+ # Retired
914
+ USVetransDayAdHoc,
915
+ SatAfterColumbusDayAdHoc,
916
+ LincolnsBirthDayAdhoc,
917
+ GrantsBirthDayAdhoc,
918
+ SatBeforeNewYearsAdhoc,
919
+ SatBeforeWashingtonsBirthdayAdhoc,
920
+ SatAfterWashingtonsBirthdayAdhoc,
921
+ SatBeforeAfterLincolnsBirthdayAdhoc,
922
+ SatBeforeDecorationAdhoc,
923
+ SatAfterDecorationAdhoc,
924
+ DayBeforeDecorationAdhoc,
925
+ # Irregularities
926
+ UlyssesGrantFuneral1885,
927
+ ColumbianCelebration1892,
928
+ GreatBlizzardOf1888,
929
+ WashingtonInaugurationCentennialCelebration1889,
930
+ CharterDay1898,
931
+ WelcomeNavalCommander1898,
932
+ AdmiralDeweyCelebration1899,
933
+ GarretHobartFuneral1899,
934
+ QueenVictoriaFuneral1901,
935
+ MovedToProduceExchange1901,
936
+ EnlargedProduceExchange1901,
937
+ McKinleyDeathAndFuneral1901,
938
+ KingEdwardVIIcoronation1902,
939
+ NYSEnewBuildingOpen1903,
940
+ HudsonFultonCelebration1909,
941
+ JamesShermanFuneral1912,
942
+ OnsetOfWWI1914,
943
+ WeatherHeatClosing1917,
944
+ DraftRegistrationDay1917,
945
+ WeatherNoHeatClosing1918,
946
+ DraftRegistrationDay1918,
947
+ ArmisticeSigned1918,
948
+ Homecoming27Division1919,
949
+ ParadeOf77thDivision1919,
950
+ BacklogRelief1919,
951
+ GeneralPershingReturn1919,
952
+ OfficeLocationChange1920,
953
+ HardingDeath1923,
954
+ HardingFuneral1923,
955
+ LindberghParade1927,
956
+ BacklogRelief1928,
957
+ BacklogRelief1929,
958
+ CoolidgeFuneral1933,
959
+ BankHolidays1933,
960
+ HeavyVolume1933,
961
+ SatClosings1944,
962
+ RooseveltDayOfMourning1945,
963
+ SatClosings1945,
964
+ VJday1945,
965
+ NavyDay1945,
966
+ RailroadStrike1946,
967
+ SatClosings1946,
968
+ SatClosings1947,
969
+ SatClosings1948,
970
+ SevereWeather1948,
971
+ SatClosings1949,
972
+ SatClosings1950,
973
+ SatClosings1951,
974
+ SatClosings1952,
975
+ KennedyFuneral1963,
976
+ MLKdayOfMourning1968,
977
+ PaperworkCrisis1968,
978
+ SnowClosing1969,
979
+ EisenhowerFuneral1969,
980
+ FirstLunarLandingClosing1969,
981
+ TrumanFuneral1972,
982
+ JohnsonFuneral1973,
983
+ NewYorkCityBlackout77,
984
+ HurricaneGloriaClosings1985,
985
+ NixonFuneral1994,
986
+ ReaganMourning2004,
987
+ FordMourning2007,
988
+ September11Closings2001,
989
+ HurricaneSandyClosings2012,
990
+ GeorgeHWBushDeath2018,
991
+ JimmyCarterDeath2025,
992
+ )
993
+ )
994
+
995
+ @property
996
+ def special_closes(self):
997
+ return [
998
+ (
999
+ time(11, tzinfo=timezone("America/New_York")),
1000
+ AbstractHolidayCalendar(
1001
+ rules=[
1002
+ KingEdwardDeath11amyClose1910,
1003
+ ]
1004
+ ),
1005
+ ),
1006
+ (
1007
+ time(12, tzinfo=timezone("America/New_York")),
1008
+ AbstractHolidayCalendar(
1009
+ rules=[
1010
+ ParadeOfNationalGuardEarlyClose1917,
1011
+ LibertyDay12pmEarlyClose1917,
1012
+ LibertyDay12pmEarlyClose1918,
1013
+ WallStreetExplosionEarlyClose1920,
1014
+ NRAdemonstration12pmEarlyClose1933,
1015
+ ]
1016
+ ),
1017
+ ),
1018
+ (
1019
+ time(hour=12, minute=30, tzinfo=timezone("America/New_York")),
1020
+ AbstractHolidayCalendar(
1021
+ rules=[
1022
+ RooseveltFuneral1230EarlyClose1919,
1023
+ WoodrowWilsonFuneral1230EarlyClose1924,
1024
+ TaftFuneral1230EarlyClose1930,
1025
+ GasFumesOnTradingFloor1230EarlyClose1933,
1026
+ ]
1027
+ ),
1028
+ ),
1029
+ (
1030
+ time(13, tzinfo=timezone("America/New_York")),
1031
+ AbstractHolidayCalendar(
1032
+ rules=[
1033
+ FridayAfterIndependenceDayNYSEpre2013,
1034
+ MonTuesThursBeforeIndependenceDay,
1035
+ WednesdayBeforeIndependenceDayPost2013,
1036
+ DayAfterThanksgiving1pmEarlyCloseInOrAfter1993,
1037
+ ChristmasEvePost1999Early1pmClose,
1038
+ GroverClevelandFuneral1pmClose1908,
1039
+ ]
1040
+ ),
1041
+ ),
1042
+ (
1043
+ time(14, tzinfo=timezone("America/New_York")),
1044
+ AbstractHolidayCalendar(
1045
+ rules=[
1046
+ DayAfterThanksgiving2pmEarlyCloseBefore1993,
1047
+ HooverFuneral1400EarlyClose1964,
1048
+ Snow2pmEarlyClose1967,
1049
+ Snow2pmEarlyClose1978,
1050
+ Snow2pmEarlyClose1996,
1051
+ ]
1052
+ ),
1053
+ ),
1054
+ (
1055
+ time(14, 7, tzinfo=timezone("America/New_York")),
1056
+ AbstractHolidayCalendar(
1057
+ rules=[
1058
+ KennedyAssassination1407EarlyClose,
1059
+ ]
1060
+ ),
1061
+ ),
1062
+ (
1063
+ time(hour=14, minute=30, tzinfo=timezone("America/New_York")),
1064
+ AbstractHolidayCalendar(
1065
+ rules=[
1066
+ FalseArmisticeReport1430EarlyClose1918,
1067
+ CromwellFuneral1430EarlyClose1925,
1068
+ Snow230EarlyClose1975,
1069
+ Snow230pmEarlyClose1994,
1070
+ ]
1071
+ ),
1072
+ ),
1073
+ (
1074
+ time(15, tzinfo=timezone("America/New_York")),
1075
+ AbstractHolidayCalendar(
1076
+ rules=[
1077
+ HurricaneWatch3pmEarlyClose1976,
1078
+ ]
1079
+ ),
1080
+ ),
1081
+ (
1082
+ time(15, 17, tzinfo=timezone("America/New_York")),
1083
+ AbstractHolidayCalendar(
1084
+ rules=[
1085
+ ReaganAssassAttempt317pmEarlyClose1981,
1086
+ ]
1087
+ ),
1088
+ ),
1089
+ (
1090
+ time(15, 28, tzinfo=timezone("America/New_York")),
1091
+ AbstractHolidayCalendar(
1092
+ rules=[
1093
+ ConEdPowerFail328pmEarlyClose1981,
1094
+ ]
1095
+ ),
1096
+ ),
1097
+ (
1098
+ time(15, 30, tzinfo=timezone("America/New_York")),
1099
+ AbstractHolidayCalendar(
1100
+ rules=[
1101
+ CircuitBreakerTriggered330pmEarlyClose1997,
1102
+ ]
1103
+ ),
1104
+ ),
1105
+ (
1106
+ time(15, 56, tzinfo=timezone("America/New_York")),
1107
+ AbstractHolidayCalendar(
1108
+ rules=[
1109
+ SystemProb356pmEarlyClose2005,
1110
+ ]
1111
+ ),
1112
+ ),
1113
+ ]
1114
+
1115
+ @property
1116
+ def special_closes_adhoc(self):
1117
+ def _union_many(indexes):
1118
+ # Merges a list of pd.DatetimeIndex objects, returns merged DatetimeIndex
1119
+ union_index = pd.DatetimeIndex([], tz="UTC")
1120
+ for index in indexes:
1121
+ union_index = union_index.union(index)
1122
+ return union_index
1123
+
1124
+ return [
1125
+ (
1126
+ time(13, tzinfo=timezone("America/New_York")),
1127
+ # DaysBeforeIndependenceDay1pmEarlyCloseAdhoc # list
1128
+ ChristmasEve1pmEarlyCloseAdhoc
1129
+ + DayAfterChristmas1pmEarlyCloseAdhoc
1130
+ + BacklogRelief1pmEarlyClose1929,
1131
+ ),
1132
+ (
1133
+ time(14, tzinfo=timezone("America/New_York")),
1134
+ _union_many(
1135
+ [
1136
+ pd.DatetimeIndex(
1137
+ ChristmasEve2pmEarlyCloseAdhoc
1138
+ + HeavyVolume2pmEarlyClose1933
1139
+ )
1140
+ ]
1141
+ + [
1142
+ BacklogRelief2pmEarlyClose1928,
1143
+ TransitStrike2pmEarlyClose1966, # index
1144
+ Backlog2pmEarlyCloses1967, # index
1145
+ Backlog2pmEarlyCloses1968, # index
1146
+ PaperworkCrisis2pmEarlyCloses1969, # index
1147
+ Backlog2pmEarlyCloses1987,
1148
+ ]
1149
+ ), # index
1150
+ ),
1151
+ (
1152
+ time(14, 30, tzinfo=timezone("America/New_York")),
1153
+ _union_many(
1154
+ [PaperworkCrisis230pmEarlyCloses1969, Backlog230pmEarlyCloses1987]
1155
+ ), # index
1156
+ ),
1157
+ (
1158
+ time(15, tzinfo=timezone("America/New_York")),
1159
+ _union_many(
1160
+ [PaperworkCrisis3pmEarlyCloses1969to1970, Backlog3pmEarlyCloses1987]
1161
+ ), # index
1162
+ ),
1163
+ (
1164
+ time(15, 30, tzinfo=timezone("America/New_York")),
1165
+ Backlog330pmEarlyCloses1987, # index
1166
+ ),
1167
+ ]
1168
+
1169
+ @property
1170
+ def special_opens(self):
1171
+ return [
1172
+ (
1173
+ time(hour=9, minute=31, tzinfo=timezone("America/New_York")),
1174
+ AbstractHolidayCalendar(
1175
+ rules=[
1176
+ ConEdXformer931amLateOpen1990,
1177
+ EnduringFreedomMomentSilence931amLateOpen2001,
1178
+ ]
1179
+ ),
1180
+ ),
1181
+ (
1182
+ time(hour=9, minute=32, tzinfo=timezone("America/New_York")),
1183
+ AbstractHolidayCalendar(
1184
+ rules=[
1185
+ IraqiFreedom932amLateOpen2003,
1186
+ ReaganMomentSilence932amLateOpen2004,
1187
+ FordMomentSilence932amLateOpen2006,
1188
+ ]
1189
+ ),
1190
+ ),
1191
+ (
1192
+ time(hour=9, minute=33, tzinfo=timezone("America/New_York")),
1193
+ AbstractHolidayCalendar(
1194
+ rules=[
1195
+ Sept11MomentSilence933amLateOpen2001,
1196
+ ]
1197
+ ),
1198
+ ),
1199
+ (
1200
+ time(hour=10, minute=15, tzinfo=timezone("America/New_York")),
1201
+ AbstractHolidayCalendar(
1202
+ rules=[
1203
+ Snow1015LateOpen1967,
1204
+ MerrillLynchComputer1015LateOpen1974,
1205
+ FireDrill1015LateOpen1974,
1206
+ FireDrill1015LateOpen1976,
1207
+ ]
1208
+ ),
1209
+ ),
1210
+ (
1211
+ time(hour=10, minute=30, tzinfo=timezone("America/New_York")),
1212
+ AbstractHolidayCalendar(
1213
+ rules=[
1214
+ TrafficBlockLateOpen1919,
1215
+ TrafficBlockLateOpen1920,
1216
+ Computer1030LateOpen1995,
1217
+ ]
1218
+ ),
1219
+ ),
1220
+ (
1221
+ time(hour=10, minute=45, tzinfo=timezone("America/New_York")),
1222
+ AbstractHolidayCalendar(
1223
+ rules=[
1224
+ EclipseOfSunLateOpen1925,
1225
+ Storm1045LateOpen1969,
1226
+ ]
1227
+ ),
1228
+ ),
1229
+ (
1230
+ time(11, tzinfo=timezone("America/New_York")),
1231
+ AbstractHolidayCalendar(
1232
+ rules=[
1233
+ Snow11amLateOpen1934,
1234
+ KingGeorgeVFuneral11amLateOpen1936,
1235
+ Snow11amLateOpening1960,
1236
+ Snow11amLateOpen1969,
1237
+ Ice11amLateOpen1973,
1238
+ Snow11amLateOpen1978,
1239
+ Fire11amLateOpen1989,
1240
+ Snow11amLateOpen1996,
1241
+ ]
1242
+ ),
1243
+ ),
1244
+ (
1245
+ time(11, 5, tzinfo=timezone("America/New_York")),
1246
+ AbstractHolidayCalendar(
1247
+ rules=[
1248
+ PowerFail1105LateOpen,
1249
+ ]
1250
+ ),
1251
+ ),
1252
+ (
1253
+ time(11, 15, tzinfo=timezone("America/New_York")),
1254
+ AbstractHolidayCalendar(
1255
+ rules=[
1256
+ Storm1115LateOpen1976,
1257
+ ]
1258
+ ),
1259
+ ),
1260
+ (
1261
+ time(12, tzinfo=timezone("America/New_York")),
1262
+ AbstractHolidayCalendar(
1263
+ rules=[
1264
+ KingEdwardFuneral12pmOpen1910,
1265
+ JPMorganFuneral12pmOpen1913,
1266
+ WilliamGaynorFuneral12pmOpen1913,
1267
+ Snow12pmLateOpen1978,
1268
+ Sept11Anniversary12pmLateOpen2002,
1269
+ ]
1270
+ ),
1271
+ ),
1272
+ (
1273
+ time(13, tzinfo=timezone("America/New_York")),
1274
+ AbstractHolidayCalendar(
1275
+ rules=[
1276
+ AnnunciatorBoardFire1pmLateOpen1921,
1277
+ ]
1278
+ ),
1279
+ ),
1280
+ ]
1281
+
1282
+ @property
1283
+ def special_opens_adhoc(self):
1284
+ return [
1285
+ (
1286
+ time(9, 31, tzinfo=timezone("America/New_York")),
1287
+ TroopsInGulf931LateOpens1991,
1288
+ ),
1289
+ (
1290
+ time(11, tzinfo=timezone("America/New_York")),
1291
+ HeavyVolume11amLateOpen1933,
1292
+ ),
1293
+ (
1294
+ time(12, tzinfo=timezone("America/New_York")),
1295
+ BacklogRelief12pmLateOpen1929 + HeavyVolume12pmLateOpen1933,
1296
+ ),
1297
+ ]
1298
+
1299
+ # Override market_calendar.py to split calc between pre & post 1952 Saturday Close
1300
+ def valid_days(self, start_date, end_date, tz="UTC"):
1301
+ """
1302
+ Get a DatetimeIndex of valid open business days.
1303
+
1304
+ :param start_date: start date
1305
+ :param end_date: end date
1306
+ :param tz: time zone in either string or pytz.timezone
1307
+ :return: DatetimeIndex of valid business days
1308
+ """
1309
+ start_date = pd.Timestamp(start_date, tz=tz)
1310
+ end_date = pd.Timestamp(end_date, tz=tz)
1311
+
1312
+ # Starting Monday Sept. 29, 1952, no more saturday trading days
1313
+ if tz is None:
1314
+ saturday_end = self._saturday_end.tz_localize(None)
1315
+ else:
1316
+ saturday_end = self._saturday_end
1317
+
1318
+ # Don't care about Saturdays. Call super.
1319
+ if start_date > saturday_end:
1320
+ return super().valid_days(start_date, end_date, tz=tz)
1321
+
1322
+ # Full Date Range is pre 1952. Augment the Super call
1323
+ if end_date <= saturday_end:
1324
+ return pd.date_range(
1325
+ start_date,
1326
+ end_date,
1327
+ freq=self.holidays_pre_1952(),
1328
+ normalize=True,
1329
+ tz=tz,
1330
+ )
1331
+
1332
+ # Range is split across 1952. Concatenate Two different Date_Range calls
1333
+ days_pre = pd.date_range(
1334
+ start_date,
1335
+ saturday_end,
1336
+ freq=self.holidays_pre_1952(),
1337
+ normalize=True,
1338
+ tz=tz,
1339
+ )
1340
+ days_post = pd.date_range(
1341
+ saturday_end, end_date, freq=self.holidays(), normalize=True, tz=tz
1342
+ )
1343
+ return days_pre.union(days_post)
1344
+
1345
+ def days_at_time(self, days, market_time, day_offset=0):
1346
+ days = super().days_at_time(days, market_time, day_offset=day_offset)
1347
+
1348
+ if market_time == "market_close" and not self.is_custom(market_time):
1349
+ days = days.dt.tz_convert(self.tz)
1350
+ days = days.where(
1351
+ days.dt.weekday != 5,
1352
+ days.dt.normalize() + self._tdelta(self._saturday_close),
1353
+ )
1354
+ days = days.dt.tz_convert("UTC")
1355
+ return days
1356
+
1357
+ def date_range_htf(
1358
+ self,
1359
+ frequency: Union[str, pd.Timedelta, int, float],
1360
+ start: Union[str, pd.Timestamp, int, float, None] = None,
1361
+ end: Union[str, pd.Timestamp, int, float, None] = None,
1362
+ periods: Union[int, None] = None,
1363
+ closed: Union[Literal["left", "right"], None] = "right",
1364
+ *,
1365
+ day_anchor: u.Day_Anchor = "SUN",
1366
+ month_anchor: u.Month_Anchor = "JAN",
1367
+ ) -> pd.DatetimeIndex:
1368
+ # __doc__ = MarketCalendar.date_range_htf.__doc__
1369
+
1370
+ start, end, periods = u._error_check_htf_range(start, end, periods)
1371
+
1372
+ args = {
1373
+ "frequency": frequency,
1374
+ "start": start,
1375
+ "end": end,
1376
+ "periods": periods,
1377
+ "closed": closed,
1378
+ "day_anchor": day_anchor,
1379
+ "month_anchor": month_anchor,
1380
+ }
1381
+
1382
+ saturday_end = self._saturday_end.tz_localize(None)
1383
+
1384
+ # All Dates post 1952 This is the most common use case so return it first
1385
+ if start is not None and start > saturday_end:
1386
+ return u.date_range_htf(self.holidays(), **args)
1387
+
1388
+ # ---- Start-Date to End-Date w/ pre-1952 ----
1389
+ if start is not None and end is not None:
1390
+ if end <= saturday_end:
1391
+ # All pre 1952 Dates
1392
+ return u.date_range_htf(self.holidays_pre_1952(), **args)
1393
+ else:
1394
+ # Split Range Across 1952
1395
+ pre = u.date_range_htf( # Only Generate to the last saturday
1396
+ self.holidays_pre_1952(), **(args | {"end": saturday_end})
1397
+ )
1398
+ post = u.date_range_htf( # start generating from the last date of 'pre'
1399
+ self.holidays(), **(args | {"start": pre[-1]})
1400
+ )
1401
+ return pd.DatetimeIndex(pre.union(post), dtype="datetime64[ns]")
1402
+
1403
+ # ---- Periods from Start-Date w/ pre-1952 ----
1404
+ elif start is not None and periods is not None:
1405
+ # Start prior to 1952 & Number of periods given
1406
+ rtn_dt = u.date_range_htf(self.holidays_pre_1952(), **args)
1407
+ if rtn_dt[-1] <= saturday_end:
1408
+ return rtn_dt # never passed 1952, good to return
1409
+
1410
+ # Date Range Split.
1411
+ pre = rtn_dt[rtn_dt <= saturday_end]
1412
+ post = u.date_range_htf(
1413
+ self.holidays(),
1414
+ **(args | {"start": pre[-1], "periods": periods - len(pre) + 1}),
1415
+ )
1416
+ return pd.DatetimeIndex(pre.union(post)[:periods], dtype="datetime64[ns]")
1417
+
1418
+ # ---- Periods from End-Date ----
1419
+ elif end is not None and periods is not None:
1420
+ if end <= saturday_end:
1421
+ # All Dates pre-1952, Good to return the normal call
1422
+ return u.date_range_htf(self.holidays_pre_1952(), **args)
1423
+ else:
1424
+ rtn_dt = u.date_range_htf(self.holidays(), **args)
1425
+
1426
+ if rtn_dt[0] > saturday_end:
1427
+ return rtn_dt # never passed 1952, good to return
1428
+
1429
+ # Date Range Split
1430
+ post = rtn_dt[rtn_dt > saturday_end]
1431
+ _, period_code = u._standardize_htf_freq(frequency)
1432
+ altered_args = {
1433
+ # This nonsense is to realign the schedules as best as possible. This
1434
+ # essentially creates the 'pre-1952' equivalent date to the last generated 'post-1952'
1435
+ # date. Start the Range from there, then pre[0:-1] trims off that extra date where we
1436
+ # started from
1437
+ "end": post[0].to_period(period_code).end_time.normalize(),
1438
+ "periods": periods - len(post) + 2,
1439
+ }
1440
+ pre = u.date_range_htf(
1441
+ self.holidays_pre_1952(),
1442
+ **(args | altered_args),
1443
+ )
1444
+
1445
+ return pd.DatetimeIndex(
1446
+ pre[:-1].union(post)[-periods:], dtype="datetime64[ns]"
1447
+ )
1448
+ else:
1449
+ _, _ = u._standardize_htf_freq(frequency)
1450
+ raise ValueError(
1451
+ "This should never be raised, the above call should error first"
1452
+ )
1453
+
1454
+ def early_closes(self, schedule):
1455
+ """
1456
+ Get a DataFrame of the dates that are an early close.
1457
+
1458
+ :param schedule: schedule DataFrame
1459
+ :return: schedule DataFrame with rows that are early closes
1460
+ """
1461
+ early = super().early_closes(schedule)
1462
+
1463
+ # make sure saturdays are not considered early closes if they are >= 12pm
1464
+ mc = early.market_close.dt.tz_convert(self.tz)
1465
+ after_noon = (mc - mc.dt.normalize()).ge(self._tdelta(self._saturday_close))
1466
+ return early[~(mc.dt.weekday.eq(5) & after_noon)]