diff --git a/Common/SeriesSampler.cs b/Common/SeriesSampler.cs index ecd4e1243477..eee2c59e628e 100644 --- a/Common/SeriesSampler.cs +++ b/Common/SeriesSampler.cs @@ -55,6 +55,16 @@ public SeriesSampler(TimeSpan resolution) /// The sampled series public virtual BaseSeries Sample(BaseSeries series, DateTime start, DateTime stop, bool truncateValues = false) { + if (!SubSample && series.Values.Count > 1) + { + var dataDiff = series.Values[1].Time - series.Values[0].Time; + if (dataDiff >= Step) + { + // we don't want to subsample this case, directly return what we are given as long as is within the range + return GetIdentitySeries(series.Clone(empty: true), series, start, stop, truncateValues: false); + } + } + if (series is Series seriesToSample) { return SampleSeries(seriesToSample, start, stop, truncateValues); diff --git a/Tests/Common/SeriesSamplerTests.cs b/Tests/Common/SeriesSamplerTests.cs index c9989d2ca127..3577cf3e85c4 100644 --- a/Tests/Common/SeriesSamplerTests.cs +++ b/Tests/Common/SeriesSamplerTests.cs @@ -253,7 +253,8 @@ public void SubSamplesDisabled() series.AddPoint(_reference, 1m); series.AddPoint(_reference.AddDays(1), 2m); series.AddPoint(new ChartPoint(_reference.AddDays(2), null)); - series.AddPoint(_reference.AddDays(3), 4m); + // even if the data doesn't fit exactly the expected bar span we expect it to pass through + series.AddPoint(_reference.AddDays(2.8), 4m); series.AddPoint(_reference.AddDays(4), 5m); series.AddPoint(_reference.AddDays(5), 6m); @@ -791,7 +792,8 @@ public void SamplesCandlestickSeriesWithHigherSamplingResolutionDisabled() var series = new CandlestickSeries { Name = "name" }; series.AddPoint(_reference, 1m, 2m, 1m, 2m); series.AddPoint(_reference.AddDays(1), 2m, 3m, 2m, 3m); - series.AddPoint(_reference.AddDays(2), 4m, 4m, 3m, 3m); + // even if the data doesn't fit exactly the expected bar span we expect it to pass through + series.AddPoint(_reference.AddDays(1.6), 4m, 4m, 3m, 3m); var sampler = new SeriesSampler(TimeSpan.FromDays(0.25)) { SubSample = false };