From 64cad92942985cb5a42a21a10b8b5dfe61c1143a Mon Sep 17 00:00:00 2001 From: stoicAI1776 Date: Mon, 27 Apr 2026 06:01:11 +0530 Subject: [PATCH] Fix manual session warm-up with daily bars --- Common/Data/Market/Session.cs | 12 ++++++++++++ Tests/Indicators/SessionTests.cs | 33 +++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Common/Data/Market/Session.cs b/Common/Data/Market/Session.cs index 35938bcf5aed..5198b2c37fa7 100644 --- a/Common/Data/Market/Session.cs +++ b/Common/Data/Market/Session.cs @@ -106,6 +106,18 @@ public Session(TickType tickType, SecurityExchangeHours exchangeHours, Symbol sy /// The new data to update the session with public void Update(BaseData data) { + if (data is IBaseDataBar && data.EndTime - data.Time >= Time.OneDay) + { + var sessionBar = new SessionBar(_tickType) + { + Time = data.Time.Date, + Symbol = _symbol + }; + sessionBar.Update(data, null); + Add(sessionBar); + return; + } + _consolidator?.Update(data); } diff --git a/Tests/Indicators/SessionTests.cs b/Tests/Indicators/SessionTests.cs index 3a12e3674286..c42b3f4e7141 100644 --- a/Tests/Indicators/SessionTests.cs +++ b/Tests/Indicators/SessionTests.cs @@ -137,6 +137,33 @@ public void ConsolidatesDaily(DateTime baseDate, Resolution resolution) } } + [Test] + public void DailyQuoteBarsPopulateSessionDirectly() + { + var symbol = Symbols.EURUSD; + var session = GetSession(symbol, TickType.Quote, 10); + var start = new DateTime(2024, 9, 16); + + for (var i = 0; i < 5; i++) + { + var time = start.AddDays(i); + session.Update(new QuoteBar( + time, + symbol, + new Bar(1.10m + i, 1.11m + i, 1.09m + i, 1.105m + i), + 0, + new Bar(1.12m + i, 1.13m + i, 1.11m + i, 1.125m + i), + 0, + Time.OneDay)); + } + + Assert.AreEqual(6, session.Samples); + Assert.AreEqual(start.AddDays(4), session[0].Time); + Assert.AreEqual(start.AddDays(5), session[0].EndTime); + Assert.AreEqual(5.11m, session[0].Open); + Assert.AreEqual(5.115m, session[0].Close); + } + [TestCaseSource(nameof(NextSessionTradingDayCases))] public void CreatesNewSessionBarWithCorrectNextTradingDay(DateTime startDate, DateTime expectedDate) { @@ -173,7 +200,11 @@ private static IEnumerable NextSessionTradingDayCases() private static Session GetSession(TickType tickType, int initialSize) { - var symbol = Symbols.SPY; + return GetSession(Symbols.SPY, tickType, initialSize); + } + + private static Session GetSession(Symbol symbol, TickType tickType, int initialSize) + { var marketHoursDatabase = MarketHoursDatabase.FromDataFolder(); var exchangeHours = marketHoursDatabase.GetExchangeHours(symbol.ID.Market, symbol, symbol.SecurityType); return new Session(tickType, exchangeHours, symbol, initialSize);