diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 9cdf3bdf59e3..67d0de1080de 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -1137,7 +1137,6 @@ "1/1/2024", "1/2/2023", "1/2/2007", - "1/9/2025", "1/20/2025", "1/19/1998", "1/18/1999", @@ -1851,7 +1850,6 @@ "1/1/2021", "1/1/2022", "1/1/2024", - "1/9/2025", "1/20/2025", "1/2/2023", "1/2/2007", @@ -2697,8 +2695,10 @@ "11/22/2023": "16:00:00", "11/24/2023": "12:05:00", "3/28/2024": "16:00:00", + "11/29/2024": "12:05:00", "12/24/2024": "12:05:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/19/2025": "16:00:00", "2/16/2025": "16:00:00", "4/17/2025": "16:00:00", @@ -2804,6 +2804,7 @@ "5/27/2024": "19:00:00", "6/19/2024": "19:00:00", "9/2/2024": "19:00:00", + "1/9/2025": "19:00:00", "1/20/2025": "19:00:00", "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", @@ -3207,8 +3208,10 @@ "11/22/2023": "16:00:00", "11/24/2023": "12:05:00", "3/28/2024": "16:00:00", + "11/29/2024": "12:05:00", "12/24/2024": "12:05:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/19/2025": "16:00:00", "2/16/2025": "16:00:00", "4/17/2025": "16:00:00", @@ -3314,6 +3317,7 @@ "5/27/2024": "19:00:00", "6/19/2024": "19:00:00", "9/2/2024": "19:00:00", + "1/9/2025": "19:00:00", "1/20/2025": "19:00:00", "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", @@ -3858,8 +3862,10 @@ "11/22/2023": "16:00:00", "11/24/2023": "12:05:00", "3/28/2024": "16:00:00", + "11/29/2024": "12:05:00", "12/24/2024": "12:05:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/19/2025": "16:00:00", "2/16/2025": "16:00:00", "4/17/2025": "16:00:00", @@ -3965,6 +3971,7 @@ "5/27/2024": "19:00:00", "6/19/2024": "19:00:00", "9/2/2024": "19:00:00", + "1/9/2025": "19:00:00", "1/20/2025": "19:00:00", "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", @@ -4214,6 +4221,8 @@ "12/24/2027" ], "earlyCloses": { + "11/29/2024": "12:05:00", + "1/9/2025": "12:15:00", "12/31/2025": "16:00:00", "1/18/2026": "16:00:00", "2/15/2026": "16:00:00", @@ -4239,6 +4248,7 @@ "12/31/2027": "16:00:00" }, "lateOpens": { + "1/9/2025": "19:00:00", "1/2/2026": "08:30:00", "1/19/2026": "19:00:00", "2/16/2026": "19:00:00", @@ -4368,6 +4378,8 @@ "12/24/2027" ], "earlyCloses": { + "11/29/2024": "12:05:00", + "1/9/2025": "12:15:00", "12/31/2025": "16:00:00", "1/18/2026": "16:00:00", "2/15/2026": "16:00:00", @@ -4393,6 +4405,7 @@ "12/31/2027": "16:00:00" }, "lateOpens": { + "1/9/2025": "19:00:00", "1/2/2026": "08:30:00", "1/19/2026": "19:00:00", "2/16/2026": "19:00:00", @@ -4522,6 +4535,8 @@ "12/24/2027" ], "earlyCloses": { + "11/29/2024": "12:05:00", + "1/9/2025": "12:15:00", "12/31/2025": "16:00:00", "1/18/2026": "16:00:00", "2/15/2026": "16:00:00", @@ -4547,6 +4562,7 @@ "12/31/2027": "16:00:00" }, "lateOpens": { + "1/9/2025": "19:00:00", "1/2/2026": "08:30:00", "1/19/2026": "19:00:00", "2/16/2026": "19:00:00", @@ -4770,8 +4786,10 @@ "11/22/2023": "16:00:00", "11/24/2023": "12:05:00", "3/28/2024": "16:00:00", + "11/29/2024": "12:05:00", "12/24/2024": "12:05:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/19/2025": "16:00:00", "2/16/2025": "16:00:00", "4/17/2025": "16:00:00", @@ -4877,6 +4895,7 @@ "5/27/2024": "19:00:00", "6/19/2024": "19:00:00", "9/2/2024": "19:00:00", + "1/9/2025": "19:00:00", "1/20/2025": "19:00:00", "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", @@ -5494,6 +5513,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -6088,6 +6108,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -6682,6 +6703,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -7276,6 +7298,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -7870,6 +7893,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -8464,6 +8488,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -9058,6 +9083,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -9635,7 +9661,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -10209,7 +10234,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -11394,6 +11418,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -13159,7 +13184,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -13733,7 +13757,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -14307,7 +14330,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -14881,7 +14903,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -15455,7 +15476,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -16029,7 +16049,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -16603,7 +16622,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -17177,7 +17195,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -17751,7 +17768,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -18325,7 +18341,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -18899,7 +18914,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -19473,7 +19487,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -20047,7 +20060,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -20621,7 +20633,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -21195,7 +21206,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -21769,7 +21779,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -22343,7 +22352,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -22917,7 +22925,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -23491,7 +23498,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -24065,7 +24071,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -25233,7 +25238,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -25807,7 +25811,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -26381,7 +26384,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -26955,7 +26957,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -27529,7 +27530,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -28103,7 +28103,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -29271,7 +29270,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -29845,7 +29843,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -31013,7 +31010,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -31587,7 +31583,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -32161,7 +32156,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -33306,7 +33300,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -33678,6 +33671,7 @@ "saturday": [], "holidays": [ "4/7/2023", + "1/9/2025", "1/1/2026", "1/19/2026", "2/16/2026", @@ -33972,7 +33966,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -34546,7 +34539,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -35120,7 +35112,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -35694,7 +35685,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -36268,7 +36258,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -36800,6 +36789,7 @@ "3/28/2024": "16:00:00", "12/24/2024": "12:05:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/19/2025": "16:00:00", "2/16/2025": "16:00:00", "4/17/2025": "16:00:00", @@ -36905,6 +36895,7 @@ "5/27/2024": "19:00:00", "6/19/2024": "19:00:00", "9/2/2024": "19:00:00", + "1/9/2025": "19:00:00", "1/20/2025": "19:00:00", "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", @@ -37291,7 +37282,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -37858,7 +37848,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -38432,7 +38421,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -39006,7 +38994,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -39491,6 +39478,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:45:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -39896,6 +39884,7 @@ "3/28/2024": "16:00:00", "12/24/2024": "12:05:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/19/2025": "16:00:00", "2/16/2025": "16:00:00", "4/17/2025": "16:00:00", @@ -40001,6 +39990,7 @@ "5/27/2024": "19:00:00", "6/19/2024": "19:00:00", "9/2/2024": "19:00:00", + "1/9/2025": "19:00:00", "1/20/2025": "19:00:00", "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", @@ -40376,6 +40366,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -40388,7 +40379,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -42032,6 +42022,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -42044,7 +42035,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -43036,7 +43026,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -44290,7 +44279,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -44864,7 +44852,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -45438,7 +45425,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -46500,7 +46486,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -47562,7 +47547,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -50476,6 +50460,7 @@ "11/28/2024": "13:30:00", "12/24/2024": "12:45:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "13:30:00", "2/17/2025": "13:30:00", "4/17/2025": "16:00:00", @@ -50485,8 +50470,7 @@ "9/1/2025": "13:30:00", "11/27/2025": "13:30:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:45:00", - "12/25/2025": "16:00:00" + "12/24/2025": "12:45:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -50589,6 +50573,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -51003,7 +50988,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -51545,6 +51529,7 @@ "4/7/2023": "08:15:00", "5/29/2023": "12:00:00", "6/19/2023": "12:00:00", + "7/3/2023": "12:15:00", "7/4/2023": "12:00:00", "9/4/2023": "12:00:00", "11/23/2023": "12:00:00", @@ -51553,11 +51538,14 @@ "2/19/2024": "12:00:00", "5/27/2024": "12:00:00", "6/19/2024": "12:00:00", + "7/3/2024": "12:15:00", "7/4/2024": "12:00:00", "9/2/2024": "12:00:00", "11/28/2024": "12:00:00", + "11/29/2024": "12:15:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "08:30:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -51569,7 +51557,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -51679,6 +51666,7 @@ "2/20/2023": "17:00:00", "5/29/2023": "17:00:00", "6/19/2023": "17:00:00", + "7/3/2023": "17:00:00", "7/4/2023": "17:00:00", "9/4/2023": "17:00:00", "11/23/2023": "17:00:00", @@ -51688,11 +51676,13 @@ "2/19/2024": "17:00:00", "5/27/2024": "17:00:00", "6/19/2024": "17:00:00", + "7/3/2024": "17:00:00", "7/4/2024": "17:00:00", "9/2/2024": "17:00:00", "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -52136,7 +52126,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -52710,7 +52699,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -53763,6 +53751,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:45:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -54211,7 +54200,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -54785,7 +54773,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -55359,7 +55346,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -55933,7 +55919,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -56355,7 +56340,12 @@ ], "saturday": [], "holidays": [], - "earlyCloses": {} + "earlyCloses": { + "1/9/2025": "12:15:00" + }, + "lateOpens": { + "1/9/2025": "17:00:00" + } }, "Future-cbot-UB": { "dataTimeZone": "UTC", @@ -56554,6 +56544,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -56738,8 +56729,10 @@ "7/4/2024": "12:00:00", "9/2/2024": "12:00:00", "11/28/2024": "12:00:00", + "11/29/2024": "12:15:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -56750,7 +56743,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -57149,6 +57141,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -57333,8 +57326,10 @@ "7/4/2024": "12:00:00", "9/2/2024": "12:00:00", "11/28/2024": "12:00:00", + "11/29/2024": "12:15:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -57345,7 +57340,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -57744,6 +57738,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -57930,6 +57925,7 @@ "11/28/2024": "12:00:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -57940,7 +57936,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -58339,6 +58334,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -58525,6 +58521,7 @@ "11/28/2024": "12:00:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -58535,7 +58532,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -58981,7 +58977,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -59555,7 +59550,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -60129,7 +60123,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -60703,7 +60696,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -62652,6 +62644,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -63145,7 +63138,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -63707,6 +63699,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -63719,7 +63712,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -64293,7 +64285,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -65101,7 +65092,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -65674,7 +65664,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -66240,7 +66229,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -66806,7 +66794,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -67372,7 +67359,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -68521,6 +68507,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -68533,7 +68520,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -69095,6 +69081,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -69107,7 +69094,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -69697,8 +69683,10 @@ "7/4/2024": "12:00:00", "9/2/2024": "12:00:00", "11/28/2024": "12:00:00", + "11/29/2024": "12:15:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -69709,7 +69697,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -69834,6 +69821,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -70292,8 +70280,10 @@ "7/4/2024": "12:00:00", "9/2/2024": "12:00:00", "11/28/2024": "12:00:00", + "11/29/2024": "12:15:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -70304,7 +70294,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -70429,6 +70418,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -70887,8 +70877,10 @@ "7/4/2024": "12:00:00", "9/2/2024": "12:00:00", "11/28/2024": "12:00:00", + "11/29/2024": "12:15:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -70899,7 +70891,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -71024,6 +71015,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -71482,8 +71474,10 @@ "7/4/2024": "12:00:00", "9/2/2024": "12:00:00", "11/28/2024": "12:00:00", + "11/29/2024": "12:15:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -71494,7 +71488,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -71619,6 +71612,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -72287,6 +72281,7 @@ "4/7/2023": "09:15:00", "5/29/2023": "13:00:00", "6/19/2023": "13:00:00", + "7/3/2023": "13:15:00", "7/4/2023": "13:00:00", "9/4/2023": "13:00:00", "11/23/2023": "13:00:00", @@ -72295,11 +72290,14 @@ "2/19/2024": "13:00:00", "5/27/2024": "13:00:00", "6/19/2024": "13:00:00", + "7/3/2024": "13:15:00", "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", + "1/9/2025": "09:30:00", "1/20/2025": "13:00:00", "2/17/2025": "13:00:00", "4/17/2025": "17:00:00", @@ -72311,7 +72309,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -72421,6 +72418,7 @@ "2/20/2023": "18:00:00", "5/29/2023": "18:00:00", "6/19/2023": "18:00:00", + "7/3/2023": "18:00:00", "7/4/2023": "18:00:00", "9/4/2023": "18:00:00", "11/23/2023": "18:00:00", @@ -72430,11 +72428,13 @@ "2/19/2024": "18:00:00", "5/27/2024": "18:00:00", "6/19/2024": "18:00:00", + "7/3/2024": "18:00:00", "7/4/2024": "18:00:00", "9/2/2024": "18:00:00", "11/28/2024": "18:00:00", "12/25/2024": "18:00:00", "1/1/2025": "18:00:00", + "1/9/2025": "18:00:00", "1/20/2025": "18:00:00", "2/17/2025": "18:00:00", "5/26/2025": "18:00:00", @@ -72877,7 +72877,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -73443,7 +73442,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -74009,7 +74007,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -74551,6 +74548,7 @@ "4/7/2023": "09:15:00", "5/29/2023": "13:00:00", "6/19/2023": "13:00:00", + "7/3/2023": "13:15:00", "7/4/2023": "13:00:00", "9/4/2023": "13:00:00", "11/23/2023": "13:00:00", @@ -74559,11 +74557,14 @@ "2/19/2024": "13:00:00", "5/27/2024": "13:00:00", "6/19/2024": "13:00:00", + "7/3/2024": "13:15:00", "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", + "1/9/2025": "09:30:00", "1/20/2025": "13:00:00", "2/17/2025": "13:00:00", "4/17/2025": "17:00:00", @@ -74575,7 +74576,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -74685,6 +74685,7 @@ "2/20/2023": "18:00:00", "5/29/2023": "18:00:00", "6/19/2023": "18:00:00", + "7/3/2023": "18:00:00", "7/4/2023": "18:00:00", "9/4/2023": "18:00:00", "11/23/2023": "18:00:00", @@ -74694,11 +74695,13 @@ "2/19/2024": "18:00:00", "5/27/2024": "18:00:00", "6/19/2024": "18:00:00", + "7/3/2024": "18:00:00", "7/4/2024": "18:00:00", "9/2/2024": "18:00:00", "11/28/2024": "18:00:00", "12/25/2024": "18:00:00", "1/1/2025": "18:00:00", + "1/9/2025": "18:00:00", "1/20/2025": "18:00:00", "2/17/2025": "18:00:00", "5/26/2025": "18:00:00", @@ -75117,6 +75120,7 @@ "4/7/2023": "09:15:00", "5/29/2023": "13:00:00", "6/19/2023": "13:00:00", + "7/3/2023": "13:15:00", "7/4/2023": "13:00:00", "9/4/2023": "13:00:00", "11/23/2023": "13:00:00", @@ -75125,11 +75129,14 @@ "2/19/2024": "13:00:00", "5/27/2024": "13:00:00", "6/19/2024": "13:00:00", + "7/3/2024": "13:15:00", "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", + "1/9/2025": "09:30:00", "1/20/2025": "13:00:00", "2/17/2025": "13:00:00", "4/17/2025": "17:00:00", @@ -75141,7 +75148,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -75251,6 +75257,7 @@ "2/20/2023": "18:00:00", "5/29/2023": "18:00:00", "6/19/2023": "18:00:00", + "7/3/2023": "18:00:00", "7/4/2023": "18:00:00", "9/4/2023": "18:00:00", "11/23/2023": "18:00:00", @@ -75260,11 +75267,13 @@ "2/19/2024": "18:00:00", "5/27/2024": "18:00:00", "6/19/2024": "18:00:00", + "7/3/2024": "18:00:00", "7/4/2024": "18:00:00", "9/2/2024": "18:00:00", "11/28/2024": "18:00:00", "12/25/2024": "18:00:00", "1/1/2025": "18:00:00", + "1/9/2025": "18:00:00", "1/20/2025": "18:00:00", "2/17/2025": "18:00:00", "5/26/2025": "18:00:00", @@ -75683,6 +75692,7 @@ "4/7/2023": "09:15:00", "5/29/2023": "13:00:00", "6/19/2023": "13:00:00", + "7/3/2023": "13:15:00", "7/4/2023": "13:00:00", "9/4/2023": "13:00:00", "11/23/2023": "13:00:00", @@ -75691,11 +75701,14 @@ "2/19/2024": "13:00:00", "5/27/2024": "13:00:00", "6/19/2024": "13:00:00", + "7/3/2024": "13:15:00", "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", + "1/9/2025": "09:30:00", "1/20/2025": "13:00:00", "2/17/2025": "13:00:00", "4/17/2025": "17:00:00", @@ -75707,7 +75720,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -75818,6 +75830,7 @@ "2/20/2023": "18:00:00", "5/29/2023": "18:00:00", "6/19/2023": "18:00:00", + "7/3/2023": "18:00:00", "7/4/2023": "18:00:00", "9/4/2023": "18:00:00", "11/23/2023": "18:00:00", @@ -75827,11 +75840,13 @@ "2/19/2024": "18:00:00", "5/27/2024": "18:00:00", "6/19/2024": "18:00:00", + "7/3/2024": "18:00:00", "7/4/2024": "18:00:00", "9/2/2024": "18:00:00", "11/28/2024": "18:00:00", "12/25/2024": "18:00:00", "1/1/2025": "18:00:00", + "1/9/2025": "18:00:00", "1/20/2025": "18:00:00", "2/17/2025": "18:00:00", "5/26/2025": "18:00:00", @@ -76510,7 +76525,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -77076,7 +77090,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -77629,6 +77642,7 @@ "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", "1/20/2025": "13:00:00", @@ -77642,7 +77656,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -78195,6 +78208,7 @@ "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", "1/20/2025": "13:00:00", @@ -78208,7 +78222,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -78771,6 +78784,8 @@ "11/24/2023": "12:05:00", "3/28/2024": "16:00:00", "11/27/2024": "16:00:00", + "11/29/2024": "12:05:00", + "1/9/2025": "12:15:00", "11/28/2025": "12:05:00", "12/24/2025": "12:15:00", "11/27/2026": "12:05:00", @@ -79070,6 +79085,8 @@ "11/24/2023": "12:05:00", "3/28/2024": "16:00:00", "11/27/2024": "16:00:00", + "11/29/2024": "12:05:00", + "1/9/2025": "12:15:00", "11/28/2025": "12:05:00", "12/24/2025": "12:15:00", "11/27/2026": "12:05:00", @@ -79369,6 +79386,8 @@ "11/24/2023": "12:05:00", "3/28/2024": "16:00:00", "11/27/2024": "16:00:00", + "11/29/2024": "12:05:00", + "1/9/2025": "12:15:00", "11/28/2025": "12:05:00", "12/24/2025": "12:15:00", "11/27/2026": "12:05:00", @@ -79532,6 +79551,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -79887,6 +79907,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -80379,7 +80400,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -80945,7 +80965,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -81725,6 +81744,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -82080,6 +82100,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -109457,6 +109478,7 @@ "4/7/2023": "09:15:00", "5/29/2023": "13:00:00", "6/19/2023": "13:00:00", + "7/3/2023": "13:15:00", "7/4/2023": "13:00:00", "9/4/2023": "13:00:00", "11/23/2023": "13:00:00", @@ -109465,11 +109487,14 @@ "2/19/2024": "13:00:00", "5/27/2024": "13:00:00", "6/19/2024": "13:00:00", + "7/3/2024": "13:15:00", "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", + "1/9/2025": "09:30:00", "1/20/2025": "13:00:00", "2/17/2025": "13:00:00", "4/17/2025": "17:00:00", @@ -109481,7 +109506,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -109591,6 +109615,7 @@ "2/20/2023": "18:00:00", "5/29/2023": "18:00:00", "6/19/2023": "18:00:00", + "7/3/2023": "18:00:00", "7/4/2023": "18:00:00", "9/4/2023": "18:00:00", "11/23/2023": "18:00:00", @@ -109600,11 +109625,13 @@ "2/19/2024": "18:00:00", "5/27/2024": "18:00:00", "6/19/2024": "18:00:00", + "7/3/2024": "18:00:00", "7/4/2024": "18:00:00", "9/2/2024": "18:00:00", "11/28/2024": "18:00:00", "12/25/2024": "18:00:00", "1/1/2025": "18:00:00", + "1/9/2025": "18:00:00", "1/20/2025": "18:00:00", "2/17/2025": "18:00:00", "5/26/2025": "18:00:00", @@ -110023,6 +110050,7 @@ "4/7/2023": "09:15:00", "5/29/2023": "13:00:00", "6/19/2023": "13:00:00", + "7/3/2023": "13:15:00", "7/4/2023": "13:00:00", "9/4/2023": "13:00:00", "11/23/2023": "13:00:00", @@ -110031,11 +110059,14 @@ "2/19/2024": "13:00:00", "5/27/2024": "13:00:00", "6/19/2024": "13:00:00", + "7/3/2024": "13:15:00", "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", + "1/9/2025": "09:30:00", "1/20/2025": "13:00:00", "2/17/2025": "13:00:00", "4/17/2025": "17:00:00", @@ -110047,7 +110078,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -110157,6 +110187,7 @@ "2/20/2023": "18:00:00", "5/29/2023": "18:00:00", "6/19/2023": "18:00:00", + "7/3/2023": "18:00:00", "7/4/2023": "18:00:00", "9/4/2023": "18:00:00", "11/23/2023": "18:00:00", @@ -110166,11 +110197,13 @@ "2/19/2024": "18:00:00", "5/27/2024": "18:00:00", "6/19/2024": "18:00:00", + "7/3/2024": "18:00:00", "7/4/2024": "18:00:00", "9/2/2024": "18:00:00", "11/28/2024": "18:00:00", "12/25/2024": "18:00:00", "1/1/2025": "18:00:00", + "1/9/2025": "18:00:00", "1/20/2025": "18:00:00", "2/17/2025": "18:00:00", "5/26/2025": "18:00:00", @@ -111183,6 +111216,7 @@ "4/7/2023": "09:15:00", "5/29/2023": "13:00:00", "6/19/2023": "13:00:00", + "7/3/2023": "13:15:00", "7/4/2023": "13:00:00", "9/4/2023": "13:00:00", "11/23/2023": "13:00:00", @@ -111191,11 +111225,14 @@ "2/19/2024": "13:00:00", "5/27/2024": "13:00:00", "6/19/2024": "13:00:00", + "7/3/2024": "13:15:00", "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", + "1/9/2025": "09:30:00", "1/20/2025": "13:00:00", "2/17/2025": "13:00:00", "4/17/2025": "17:00:00", @@ -111207,7 +111244,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -111317,6 +111353,7 @@ "2/20/2023": "18:00:00", "5/29/2023": "18:00:00", "6/19/2023": "18:00:00", + "7/3/2023": "18:00:00", "7/4/2023": "18:00:00", "9/4/2023": "18:00:00", "11/23/2023": "18:00:00", @@ -111326,11 +111363,13 @@ "2/19/2024": "18:00:00", "5/27/2024": "18:00:00", "6/19/2024": "18:00:00", + "7/3/2024": "18:00:00", "7/4/2024": "18:00:00", "9/2/2024": "18:00:00", "11/28/2024": "18:00:00", "12/25/2024": "18:00:00", "1/1/2025": "18:00:00", + "1/9/2025": "18:00:00", "1/20/2025": "18:00:00", "2/17/2025": "18:00:00", "5/26/2025": "18:00:00", @@ -111749,6 +111788,7 @@ "4/7/2023": "09:15:00", "5/29/2023": "13:00:00", "6/19/2023": "13:00:00", + "7/3/2023": "13:15:00", "7/4/2023": "13:00:00", "9/4/2023": "13:00:00", "11/23/2023": "13:00:00", @@ -111757,11 +111797,14 @@ "2/19/2024": "13:00:00", "5/27/2024": "13:00:00", "6/19/2024": "13:00:00", + "7/3/2024": "13:15:00", "7/4/2024": "13:00:00", "9/2/2024": "13:00:00", "11/28/2024": "13:00:00", + "11/29/2024": "13:15:00", "12/24/2024": "13:15:00", "12/31/2024": "17:00:00", + "1/9/2025": "09:30:00", "1/20/2025": "13:00:00", "2/17/2025": "13:00:00", "4/17/2025": "17:00:00", @@ -111773,7 +111816,6 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "13:00:00", "2/16/2026": "13:00:00", @@ -111884,6 +111926,7 @@ "2/20/2023": "18:00:00", "5/29/2023": "18:00:00", "6/19/2023": "18:00:00", + "7/3/2023": "18:00:00", "7/4/2023": "18:00:00", "9/4/2023": "18:00:00", "11/23/2023": "18:00:00", @@ -111893,11 +111936,13 @@ "2/19/2024": "18:00:00", "5/27/2024": "18:00:00", "6/19/2024": "18:00:00", + "7/3/2024": "18:00:00", "7/4/2024": "18:00:00", "9/2/2024": "18:00:00", "11/28/2024": "18:00:00", "12/25/2024": "18:00:00", "1/1/2025": "18:00:00", + "1/9/2025": "18:00:00", "1/20/2025": "18:00:00", "2/17/2025": "18:00:00", "5/26/2025": "18:00:00", @@ -112329,6 +112374,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -113361,6 +113407,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:45:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -113692,6 +113739,7 @@ "7/4/2024": "16:00:00", "9/2/2024": "16:00:00", "11/28/2024": "16:00:00", + "11/29/2024": "13:45:00", "12/24/2024": "12:45:00", "12/31/2024": "16:00:00", "1/20/2025": "16:00:00", @@ -114128,6 +114176,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -114140,7 +114189,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -115296,6 +115344,7 @@ "7/4/2024": "14:30:00", "9/2/2024": "14:30:00", "11/28/2024": "14:30:00", + "11/29/2024": "14:45:00", "12/24/2024": "13:45:00", "12/31/2024": "17:00:00", "1/20/2025": "14:30:00", @@ -115879,7 +115928,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -117641,7 +117689,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -118215,7 +118262,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -118742,6 +118788,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -118928,6 +118975,7 @@ "11/28/2024": "12:00:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -118938,7 +118986,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -120434,6 +120481,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -120620,6 +120668,7 @@ "11/28/2024": "12:00:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -120630,7 +120679,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -121076,7 +121124,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -121650,7 +121697,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", @@ -122177,6 +122223,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -122363,6 +122410,7 @@ "11/28/2024": "12:00:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -122373,7 +122421,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -124273,6 +124320,7 @@ "11/28/2024": "17:00:00", "12/25/2024": "17:00:00", "1/1/2025": "17:00:00", + "1/9/2025": "17:00:00", "1/20/2025": "17:00:00", "2/17/2025": "17:00:00", "5/26/2025": "17:00:00", @@ -124459,6 +124507,7 @@ "11/28/2024": "12:00:00", "12/24/2024": "12:15:00", "12/31/2024": "16:00:00", + "1/9/2025": "12:15:00", "1/20/2025": "12:00:00", "2/17/2025": "12:00:00", "4/17/2025": "16:00:00", @@ -124469,7 +124518,6 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00", "12/31/2025": "16:00:00", "1/19/2026": "12:00:00", "2/16/2026": "12:00:00", @@ -125548,7 +125596,6 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00", "12/31/2025": "17:00:00", "1/19/2026": "14:30:00", "2/16/2026": "14:30:00", diff --git a/Tests/Common/Securities/MarketHoursDatabaseTests.cs b/Tests/Common/Securities/MarketHoursDatabaseTests.cs index 3aa927ad9843..3472415cf116 100644 --- a/Tests/Common/Securities/MarketHoursDatabaseTests.cs +++ b/Tests/Common/Securities/MarketHoursDatabaseTests.cs @@ -224,6 +224,73 @@ public void CorrectlyReadsCMEGroupFutureEarlyCloses(string futureTicker, string } } + [TestCase("ES", Market.CME, "7/3/2023", "13:15:00", "18:00:00")] + [TestCase("MNQ", Market.CME, "7/3/2024", "13:15:00", "18:00:00")] + [TestCase("YM", Market.CBOT, "7/3/2024", "13:15:00", "18:00:00")] + [TestCase("EMD", Market.CME, "7/3/2024", "12:15:00", "17:00:00")] + [TestCase("ES", Market.CME, "1/9/2025", "09:30:00", "18:00:00")] + [TestCase("LE", Market.CME, "1/9/2025", "12:15:00", null)] + [TestCase("ES", Market.CME, "11/29/2024", "13:15:00", null)] + [TestCase("ZN", Market.CBOT, "11/29/2024", "12:15:00", null)] + [TestCase("ZC", Market.CBOT, "11/29/2024", "12:05:00", null)] + [TestCase("6E", Market.CME, "11/29/2024", "13:45:00", null)] + [TestCase("BTC", Market.CME, "11/29/2024", "13:45:00", null)] + [TestCase("CL", Market.NYMEX, "11/29/2024", "14:45:00", null)] + [TestCase("GC", Market.COMEX, "11/29/2024", "14:45:00", null)] + [TestCase("ZN", Market.CBOT, "1/9/2025", "12:15:00", "17:00:00")] + [TestCase("ZC", Market.CBOT, "1/9/2025", "12:15:00", "19:00:00")] + [TestCase("YM", Market.CBOT, "1/9/2025", "09:30:00", "18:00:00")] + public void CorrectlyReadsCMEGroupFutureShortenedSessions(string futureTicker, string market, string date, string earlyClose, string lateOpen) + { + var provider = MarketHoursDatabase.FromDataFolder(); + var ticker = OptionSymbol.MapToUnderlying(futureTicker, SecurityType.Future); + var future = Symbol.Create(ticker, SecurityType.Future, market); + + var exchangeHours = provider.GetEntry(market, ticker, future.SecurityType).ExchangeHours; + var day = DateTime.Parse(date, CultureInfo.InvariantCulture); + var earlyCloseTime = TimeSpan.Parse(earlyClose, CultureInfo.InvariantCulture); + + Assert.IsFalse(exchangeHours.Holidays.Contains(day)); + Assert.AreEqual(earlyCloseTime, exchangeHours.EarlyCloses[day]); + + // A halt at the regular open leaves no regular session, so the close anchor only exists on days that keep one + if (exchangeHours.IsDateOpen(day)) + { + Assert.AreEqual(day + earlyCloseTime, exchangeHours.GetLastDailyMarketClose(day, false)); + } + + var segments = exchangeHours.GetMarketHours(day).Segments; + if (lateOpen == null) + { + Assert.IsFalse(exchangeHours.LateOpens.ContainsKey(day)); + Assert.AreEqual(earlyCloseTime, segments.Last().End); + return; + } + + var lateOpenTime = TimeSpan.Parse(lateOpen, CultureInfo.InvariantCulture); + Assert.AreEqual(earlyCloseTime, segments.Last(segment => segment.Start < lateOpenTime).End); + Assert.AreEqual(lateOpenTime, exchangeHours.LateOpens[day]); + Assert.AreEqual(lateOpenTime, exchangeHours.GetMarketHours(day).GetMarketOpen(earlyCloseTime, true)); + } + + [TestCase("ES", Market.CME, "12/25/2025", false, true)] + [TestCase("CL", Market.NYMEX, "12/25/2025", false, true)] + [TestCase("ZN", Market.CBOT, "12/25/2025", false, true)] + [TestCase("GC", Market.COMEX, "1/9/2025", true, true)] + [TestCase("AW", Market.CBOT, "1/9/2025", false, false)] + public void CorrectlyReadsCMEGroupFutureSessionAvailability(string futureTicker, string market, string date, bool hasRegularSession, bool hasExtendedSession) + { + var provider = MarketHoursDatabase.FromDataFolder(); + var ticker = OptionSymbol.MapToUnderlying(futureTicker, SecurityType.Future); + var future = Symbol.Create(ticker, SecurityType.Future, market); + + var exchangeHours = provider.GetEntry(market, ticker, future.SecurityType).ExchangeHours; + var day = DateTime.Parse(date, CultureInfo.InvariantCulture); + + Assert.AreEqual(hasRegularSession, exchangeHours.IsDateOpen(day)); + Assert.AreEqual(hasExtendedSession, exchangeHours.IsDateOpen(day, true)); + } + /// /// An early close or a late open only says something about a day the exchange trades. Both get /// carried from one year to the next, and carrying them by calendar date rather than by trading