Add precalculated signals list + multi scenario test

This commit is contained in:
2025-11-11 14:05:09 +07:00
parent e810ab60ce
commit 903413692c
7 changed files with 359 additions and 17 deletions

View File

@@ -259,6 +259,11 @@ public class TradingBotBase : ITradingBot
}
public async Task UpdateSignals(HashSet<Candle> candles = null)
{
await UpdateSignals(candles, null);
}
public async Task UpdateSignals(HashSet<Candle> candles, Dictionary<DateTime, LightSignal> preCalculatedSignals = null)
{
// Skip indicator checking if flipping is disabled and there's an open position
// This prevents unnecessary indicator calculations when we can't act on signals anyway
@@ -276,13 +281,29 @@ public class TradingBotBase : ITradingBot
return;
}
if (Config.IsForBacktest && candles != null)
if (Config.IsForBacktest)
{
var backtestSignal =
TradingBox.GetSignal(candles, Config.Scenario, Signals, Config.Scenario.LoopbackPeriod,
LightSignal backtestSignal;
if (preCalculatedSignals != null && LastCandle != null && preCalculatedSignals.TryGetValue(LastCandle.Date, out backtestSignal))
{
// Use pre-calculated signal - fast path
if (backtestSignal == null) return;
await AddSignal(backtestSignal);
}
else if (candles != null)
{
// Fallback to original calculation if no pre-calculated signals available
backtestSignal = TradingBox.GetSignal(candles, Config.Scenario, Signals, Config.Scenario.LoopbackPeriod,
PreCalculatedIndicatorValues);
if (backtestSignal == null) return;
await AddSignal(backtestSignal);
if (backtestSignal == null) return;
await AddSignal(backtestSignal);
}
else
{
// No candles provided - skip signal update
return;
}
}
else
{
@@ -375,7 +396,7 @@ public class TradingBotBase : ITradingBot
}
}
}
if (!hasOpenPositions && !hasWaitingSignals)
return;