Fix positions for backtests
This commit is contained in:
@@ -61,7 +61,8 @@ public static class TradingBox
|
||||
Dictionary<string, LightSignal> previousSignal, int? loopbackPeriod,
|
||||
Dictionary<IndicatorType, IndicatorsResultBase> preCalculatedIndicatorValues)
|
||||
{
|
||||
return GetSignal(newCandles, scenario, previousSignal, _defaultConfig, loopbackPeriod, preCalculatedIndicatorValues);
|
||||
return GetSignal(newCandles, scenario, previousSignal, _defaultConfig, loopbackPeriod,
|
||||
preCalculatedIndicatorValues);
|
||||
}
|
||||
|
||||
public static LightSignal GetSignal(HashSet<Candle> newCandles, LightScenario lightScenario,
|
||||
@@ -75,24 +76,11 @@ public static class TradingBox
|
||||
Dictionary<IndicatorType, IndicatorsResultBase> preCalculatedIndicatorValues)
|
||||
{
|
||||
var signalOnCandles = new List<LightSignal>();
|
||||
// Optimize list creation - avoid redundant allocations and multiple ordering
|
||||
List<Candle> limitedCandles;
|
||||
if (newCandles.Count <= 600)
|
||||
{
|
||||
// For small sets, just order once
|
||||
limitedCandles = newCandles.OrderBy(c => c.Date).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
// For large sets, use more efficient approach: sort then take last
|
||||
var sorted = newCandles.OrderBy(c => c.Date).ToList();
|
||||
limitedCandles = sorted.Skip(sorted.Count - 600).ToList();
|
||||
}
|
||||
|
||||
foreach (var indicator in lightScenario.Indicators)
|
||||
{
|
||||
IIndicator indicatorInstance = indicator.ToInterface();
|
||||
|
||||
|
||||
// Use pre-calculated indicator values if available (for backtest optimization)
|
||||
List<LightSignal> signals;
|
||||
if (preCalculatedIndicatorValues != null && preCalculatedIndicatorValues.ContainsKey(indicator.Type))
|
||||
@@ -122,10 +110,11 @@ public static class TradingBox
|
||||
continue;
|
||||
}
|
||||
|
||||
var limitedCandles = newCandles.ToList();
|
||||
// Optimized: limitedCandles is already ordered, no need to re-order
|
||||
var loopback = loopbackPeriod.HasValue && loopbackPeriod > 1 ? loopbackPeriod.Value : 1;
|
||||
var candleLoopback = limitedCandles.Count > loopback
|
||||
? limitedCandles.Skip(limitedCandles.Count - loopback).ToList()
|
||||
var candleLoopback = limitedCandles.Count > loopback
|
||||
? limitedCandles.Skip(limitedCandles.Count - loopback).ToList()
|
||||
: limitedCandles;
|
||||
|
||||
if (!candleLoopback.Any())
|
||||
|
||||
Reference in New Issue
Block a user