Add support for backtesting trading types in LiveTradingBotGrain and TradingBox

- Introduced handling for TradingType.BacktestFutures and TradingType.BacktestSpot in LiveTradingBotGrain.
- Updated TradingBox to map backtest trading types to their respective futures and spot types.
This commit is contained in:
2025-12-11 23:41:53 +07:00
parent a254db6d24
commit 5328d760dd
3 changed files with 6 additions and 4 deletions

View File

@@ -549,6 +549,8 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable
{ {
TradingType.Futures => new FuturesBot(logger, _scopeFactory, config, streamProvider), TradingType.Futures => new FuturesBot(logger, _scopeFactory, config, streamProvider),
TradingType.Spot => new SpotBot(logger, _scopeFactory, config, streamProvider), TradingType.Spot => new SpotBot(logger, _scopeFactory, config, streamProvider),
TradingType.BacktestFutures => new FuturesBot(logger, _scopeFactory, config, streamProvider),
TradingType.BacktestSpot => new SpotBot(logger, _scopeFactory, config, streamProvider),
_ => throw new InvalidOperationException($"Unsupported TradingType for live trading: {config.TradingType}") _ => throw new InvalidOperationException($"Unsupported TradingType for live trading: {config.TradingType}")
}; };

View File

@@ -448,7 +448,7 @@ public class BundleBacktestHealthCheckWorker : BackgroundService
bundle.Status = failedJobs == 0 bundle.Status = failedJobs == 0
? BundleBacktestRequestStatus.Completed ? BundleBacktestRequestStatus.Completed
: BundleBacktestRequestStatus.Completed; : BundleBacktestRequestStatus.Failed;
bundle.CompletedBacktests = completedJobs; bundle.CompletedBacktests = completedJobs;
bundle.FailedBacktests = failedJobs; bundle.FailedBacktests = failedJobs;
bundle.CompletedAt = DateTime.UtcNow; bundle.CompletedAt = DateTime.UtcNow;
@@ -464,7 +464,6 @@ public class BundleBacktestHealthCheckWorker : BackgroundService
// Some jobs are still pending or running - bundle is genuinely stuck // Some jobs are still pending or running - bundle is genuinely stuck
// Reset any stale running jobs back to pending // Reset any stale running jobs back to pending
var runningJobs = jobs.Where(j => j.Status == JobStatus.Running).ToList(); var runningJobs = jobs.Where(j => j.Status == JobStatus.Running).ToList();
var resetJobCount = 0;
foreach (var job in runningJobs) foreach (var job in runningJobs)
{ {
@@ -482,14 +481,13 @@ public class BundleBacktestHealthCheckWorker : BackgroundService
job.AssignedWorkerId = null; job.AssignedWorkerId = null;
job.LastHeartbeat = null; job.LastHeartbeat = null;
await jobRepository.UpdateAsync(job); await jobRepository.UpdateAsync(job);
resetJobCount++;
} }
} }
// Update bundle timestamp to give it another chance // Update bundle timestamp to give it another chance
bundle.UpdatedAt = DateTime.UtcNow; bundle.UpdatedAt = DateTime.UtcNow;
bundle.ErrorMessage = bundle.ErrorMessage =
$"Bundle was stuck. Reset {resetJobCount} stale jobs to pending."; $"Bundle was stuck. Reset {runningJobs.Count(j => j.Status == JobStatus.Pending)} stale jobs to pending.";
} }
await backtestRepository.UpdateBundleBacktestRequestAsync(bundle); await backtestRepository.UpdateBundleBacktestRequestAsync(bundle);

View File

@@ -1359,6 +1359,8 @@ public static class TradingBox
{ {
TradingType.BacktestFutures => TradingType.Futures, TradingType.BacktestFutures => TradingType.Futures,
TradingType.BacktestSpot => TradingType.Spot, TradingType.BacktestSpot => TradingType.Spot,
TradingType.Futures => TradingType.Futures,
TradingType.Spot => TradingType.Spot,
_ => throw new InvalidOperationException($"Unsupported TradingType for live trading: {tradingType}") _ => throw new InvalidOperationException($"Unsupported TradingType for live trading: {tradingType}")
}; };
} }