Fix backtest consistency

This commit is contained in:
2025-11-11 12:15:12 +07:00
parent 2a0fbf9bc0
commit 1792cd2371
10 changed files with 248 additions and 34978 deletions

View File

@@ -74,14 +74,11 @@ public static class TradingBox
Dictionary<string, LightSignal> previousSignal, IndicatorComboConfig config, int? loopbackPeriod,
Dictionary<IndicatorType, IndicatorsResultBase> preCalculatedIndicatorValues)
{
// Pre-allocate with estimated capacity to reduce reallocations
var signalOnCandles = new List<LightSignal>(Math.Min(newCandles.Count, 100));
// Optimize candle ordering - reuse existing sorted data when possible
var orderedCandles = newCandles.OrderBy(c => c.Date).ToList();
var limitedCandles = orderedCandles.Count <= 600
? orderedCandles
: orderedCandles.GetRange(orderedCandles.Count - 600, 600);
var signalOnCandles = new List<LightSignal>();
// Optimize list creation - avoid redundant allocations
var limitedCandles = newCandles.Count <= 600
? newCandles.OrderBy(c => c.Date).ToList()
: newCandles.OrderBy(c => c.Date).TakeLast(600).ToList();
foreach (var indicator in lightScenario.Indicators)
{
@@ -115,9 +112,10 @@ public static class TradingBox
continue;
}
// Ensure limitedCandles is ordered chronologically (already ordered from previous step)
// Ensure limitedCandles is ordered chronologically
var orderedCandles = limitedCandles.OrderBy(c => c.Date).ToList();
var loopback = loopbackPeriod.HasValue && loopbackPeriod > 1 ? loopbackPeriod.Value : 1;
var candleLoopback = limitedCandles.TakeLast(loopback).ToList();
var candleLoopback = orderedCandles.TakeLast(loopback).ToList();
if (!candleLoopback.Any())
{