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

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