From 90daf697fa4c77ed270a9f9778010bd10ccdbbc7 Mon Sep 17 00:00:00 2001 From: mkzung <103102868+mkzung@users.noreply.github.com> Date: Fri, 14 Aug 2026 23:03:27 +0500 Subject: [PATCH] Report NewHighsNewLows as not ready while no asset is tracked --- Indicators/NewHighsNewLows.cs | 9 ++++++--- Tests/Indicators/NewHighsNewLowsTestsBase.cs | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Indicators/NewHighsNewLows.cs b/Indicators/NewHighsNewLows.cs index 5c69fc4e182c..d7230f24ea91 100644 --- a/Indicators/NewHighsNewLows.cs +++ b/Indicators/NewHighsNewLows.cs @@ -233,9 +233,12 @@ private bool HasMissingCurrentPeriodValue() private bool HasSufficientPreviousDataForComputation() { - return _trackedAssets.All(asset => - asset.RollingPreviousHigh.IsReady - && asset.RollingPreviousLow.IsReady); + // All() holds over an empty set, so without this the indicator reports itself + // ready before any asset is tracked + return _trackedAssets.Any() + && _trackedAssets.All(asset => + asset.RollingPreviousHigh.IsReady + && asset.RollingPreviousLow.IsReady); } private void UpdatePreviousValues(TrackedAsset asset, IBaseDataBar bar) diff --git a/Tests/Indicators/NewHighsNewLowsTestsBase.cs b/Tests/Indicators/NewHighsNewLowsTestsBase.cs index b6a85a05f636..a845bdf560f8 100644 --- a/Tests/Indicators/NewHighsNewLowsTestsBase.cs +++ b/Tests/Indicators/NewHighsNewLowsTestsBase.cs @@ -162,5 +162,24 @@ public override void AcceptsVolumeRenkoBarsAsInput() ibmRenkoConsolidator.Dispose(); } } + + [Test] + public void IsNotReadyWithoutTrackedAssets() + { + var indicator = CreateNewHighsNewLowsIndicator(); + + Assert.IsFalse(indicator.IsReady); + } + + [Test] + public void IsNotReadyOnceTheLastTrackedAssetIsRemoved() + { + var indicator = CreateNewHighsNewLowsIndicator(); + indicator.Add(Symbols.AAPL); + indicator.Remove(Symbols.AAPL); + + Assert.IsFalse(indicator.IsReady); + } + } }