diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 9cdf3bdf59e3..7be0dd9d0f84 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -104054,35 +104054,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -104096,35 +104096,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -104138,35 +104138,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -104264,35 +104264,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -104348,35 +104348,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -104390,35 +104390,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -104432,35 +104432,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -104474,35 +104474,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -104516,35 +104516,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -104558,35 +104558,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -106446,35 +106446,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -106950,35 +106950,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -106992,35 +106992,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -107076,35 +107076,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -107118,35 +107118,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -107286,35 +107286,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -107328,35 +107328,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -107370,35 +107370,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -107412,35 +107412,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -107454,35 +107454,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], @@ -107580,35 +107580,35 @@ "monday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "tuesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "wednesday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "thursday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], "friday": [ { "start": "08:30:00", - "end": "15:00:00", + "end": "15:15:00", "state": "market" } ], diff --git a/Tests/Common/Securities/MarketHoursDatabaseTests.cs b/Tests/Common/Securities/MarketHoursDatabaseTests.cs index 3aa927ad9843..e878408163e1 100644 --- a/Tests/Common/Securities/MarketHoursDatabaseTests.cs +++ b/Tests/Common/Securities/MarketHoursDatabaseTests.cs @@ -538,6 +538,38 @@ public void CustomEntriesAreNotLostWhenReset(string ticker, SecurityType securit Assert.AreEqual(returnedEntry, entry); } + [TestCase("VIX9D")] + [TestCase("VIX6M")] + [TestCase("VIX1D")] + [TestCase("VIX1Y")] + [TestCase("VVIX")] + [TestCase("RVX")] + [TestCase("VXN")] + [TestCase("VXD")] + [TestCase("VWA")] + [TestCase("VWB")] + [TestCase("VXTH")] + [TestCase("COR1M")] + [TestCase("COR3M")] + [TestCase("COR6M")] + [TestCase("COR9M")] + [TestCase("COR1Y")] + [TestCase("COR30D")] + [TestCase("BXD")] + [TestCase("BXM")] + [TestCase("BXN")] + [TestCase("CLL")] + public void CorrectlyReadsCboeIndexMarketClose(string ticker) + { + var db = MarketHoursDatabase.FromDataFolder(); + var exchangeHours = db.GetExchangeHours(Market.USA, Symbol.Create(ticker, SecurityType.Index, Market.USA), SecurityType.Index); + + // Cboe's regular session for these indices ends at 16:15 ET, like VIX and SPX + var date = new DateTime(2026, 9, 17); + Assert.AreEqual(date.AddHours(8.5), exchangeHours.GetNextMarketOpen(date, false)); + Assert.AreEqual(date.Add(new TimeSpan(15, 15, 0)), exchangeHours.GetNextMarketClose(date, false)); + } + [TestCase("VIX3M")] [TestCase("VVIX")] [TestCase("TESTIDX")]