Improve perf for backtests
This commit is contained in:
@@ -3,6 +3,7 @@ using Managing.Domain.Indicators;
|
||||
using Managing.Domain.MoneyManagements;
|
||||
using Managing.Domain.Scenarios;
|
||||
using Managing.Domain.Strategies;
|
||||
using Managing.Domain.Strategies.Base;
|
||||
using Managing.Domain.Trades;
|
||||
using static Managing.Common.Enums;
|
||||
|
||||
@@ -53,11 +54,25 @@ public static class TradingBox
|
||||
public static LightSignal GetSignal(HashSet<Candle> newCandles, LightScenario scenario,
|
||||
Dictionary<string, LightSignal> previousSignal, int? loopbackPeriod = 1)
|
||||
{
|
||||
return GetSignal(newCandles, scenario, previousSignal, _defaultConfig, loopbackPeriod);
|
||||
return GetSignal(newCandles, scenario, previousSignal, _defaultConfig, loopbackPeriod, null);
|
||||
}
|
||||
|
||||
public static LightSignal GetSignal(HashSet<Candle> newCandles, LightScenario scenario,
|
||||
Dictionary<string, LightSignal> previousSignal, int? loopbackPeriod,
|
||||
Dictionary<IndicatorType, IndicatorsResultBase> preCalculatedIndicatorValues)
|
||||
{
|
||||
return GetSignal(newCandles, scenario, previousSignal, _defaultConfig, loopbackPeriod, preCalculatedIndicatorValues);
|
||||
}
|
||||
|
||||
public static LightSignal GetSignal(HashSet<Candle> newCandles, LightScenario lightScenario,
|
||||
Dictionary<string, LightSignal> previousSignal, IndicatorComboConfig config, int? loopbackPeriod = 1)
|
||||
{
|
||||
return GetSignal(newCandles, lightScenario, previousSignal, config, loopbackPeriod, null);
|
||||
}
|
||||
|
||||
public static LightSignal GetSignal(HashSet<Candle> newCandles, LightScenario lightScenario,
|
||||
Dictionary<string, LightSignal> previousSignal, IndicatorComboConfig config, int? loopbackPeriod,
|
||||
Dictionary<IndicatorType, IndicatorsResultBase> preCalculatedIndicatorValues)
|
||||
{
|
||||
var signalOnCandles = new List<LightSignal>();
|
||||
var limitedCandles = newCandles.ToList().TakeLast(600).ToList();
|
||||
@@ -65,7 +80,19 @@ public static class TradingBox
|
||||
foreach (var indicator in lightScenario.Indicators)
|
||||
{
|
||||
IIndicator indicatorInstance = indicator.ToInterface();
|
||||
var signals = indicatorInstance.Run(newCandles);
|
||||
|
||||
// Use pre-calculated indicator values if available (for backtest optimization)
|
||||
List<LightSignal> signals;
|
||||
if (preCalculatedIndicatorValues != null && preCalculatedIndicatorValues.ContainsKey(indicator.Type))
|
||||
{
|
||||
// Use pre-calculated values to avoid recalculating indicators
|
||||
signals = indicatorInstance.Run(newCandles, preCalculatedIndicatorValues[indicator.Type]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Normal path: calculate indicators on the fly
|
||||
signals = indicatorInstance.Run(newCandles);
|
||||
}
|
||||
|
||||
if (signals == null || signals.Count() == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user