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