QuantConnect.Lean 量化策略框架 改api 不能多次调用Engine.Run
请教下,那位使用过此框架的,改api 多次调用Engine.Run 运行回测策略,只能第一次输出结果,第二次会出现异常
20250328 02:23:57.716 ERROR:: Engine.Run(): System.InvalidOperationException: The collection has been marked as complete with regards to additions.
// 动态配置BacktestNodePacket
var backtest = new BacktestNodePacket
{
BacktestId = Guid.NewGuid().ToString(),
Language = Language.CSharp,
ProjectId = 1,
SessionId = "1",
Type = PacketType.AlgorithmNode,
ProjectName = "AccordVectorMachinesAlgorithm",
HostName = "localhost",
CashAmount = new CashAmount(100000, Currencies.USD),
ServerType = QuantConnect.ServerType.Server2048,
CompileId = Guid.NewGuid().ToString(),
Algorithm =System.IO.File.ReadAllBytes("F:\\code\\Lean-master(new)\\Lean-master\\Chinahoo.BasicTemplateFrameworkAlgorithm\\bin\\Debug\\net9.0\\Chinahoo.BasicTemplateFrameworkAlgorithm.dll")
};
// 初始化系统和算法处理程序
var leanEngineSystemHandlers = LeanEngineSystemHandlers.FromConfiguration(Composer.Instance);
var leanEngineAlgorithmHandlers = LeanEngineAlgorithmHandlers.FromConfiguration(Composer.Instance, false);
try
{
// 创建AlgorithmManager
var algorithmManager = new AlgorithmManager(QuantConnect.Globals.LiveMode, backtest);
// 初始化LeanManager
leanEngineSystemHandlers.LeanManager.Initialize(leanEngineSystemHandlers, leanEngineAlgorithmHandlers, backtest, algorithmManager);
// 创建并运行引擎
var engine = new Engine(leanEngineSystemHandlers, leanEngineAlgorithmHandlers, QuantConnect.Globals.LiveMode);
engine.Run(backtest, algorithmManager, "F:\\code\\Lean-master(new)\\Lean-master\\Chinahoo.BasicTemplateFrameworkAlgorithm\\bin\\Debug\\net9.0\\Chinahoo.BasicTemplateFrameworkAlgorithm.dll", WorkerThread.Instance);
// 获取统计结果
var statisticsResults = leanEngineAlgorithmHandlers.Results.StatisticsResults;
var statistics = statisticsResults.Target;
// 获取回测图表
var charts = leanEngineAlgorithmHandlers.Results;
var chartImage = "";// GenerateChartImage(charts);
// 返回测试数据和测试图片
return Json(new { Statistics = statistics, ChartImage = chartImage });
}
finally
{
// 清理资源
leanEngineSystemHandlers.Dispose();
leanEngineAlgorithmHandlers.Dispose();
}