diff --git a/Common/Algorithm/Framework/Portfolio/SignalExports/SignalExportManager.cs b/Common/Algorithm/Framework/Portfolio/SignalExports/SignalExportManager.cs index b1b076f71e7d..017d6f097977 100644 --- a/Common/Algorithm/Framework/Portfolio/SignalExports/SignalExportManager.cs +++ b/Common/Algorithm/Framework/Portfolio/SignalExports/SignalExportManager.cs @@ -171,6 +171,11 @@ public bool SetTargetPortfolio(params PortfolioTarget[] portfolioTargets) return true; } + if (_signalExports.IsNullOrEmpty()) + { + return false; + } + if (portfolioTargets == null || portfolioTargets.Length == 0) { _algorithm.Debug("No portfolio target given"); @@ -245,7 +250,7 @@ public void OnOrderEvent(OrderEvent orderEvent) public void Flush(DateTime currentTimeUtc) { var initialOrderEventTimeUtc = _initialOrderEventTimeUtc.Value; - if (initialOrderEventTimeUtc == Time.EndOfTime || !AutomaticExportTimeSpan.HasValue) + if (_signalExports.IsNullOrEmpty() || initialOrderEventTimeUtc == Time.EndOfTime || !AutomaticExportTimeSpan.HasValue) { return; } diff --git a/Tests/Algorithm/Framework/Portfolio/SignalExportTargetTests.cs b/Tests/Algorithm/Framework/Portfolio/SignalExportTargetTests.cs index c0dc8226a732..d59e1a594e02 100644 --- a/Tests/Algorithm/Framework/Portfolio/SignalExportTargetTests.cs +++ b/Tests/Algorithm/Framework/Portfolio/SignalExportTargetTests.cs @@ -20,6 +20,7 @@ using QuantConnect.Data; using QuantConnect.Data.Market; using QuantConnect.Interfaces; +using QuantConnect.Orders; using QuantConnect.Tests.Engine.DataFeeds; using System; using System.Collections.Generic; @@ -432,6 +433,27 @@ public void SignalExportManagerReturnsFalseWhenNegativeTotalPortfolioValue() Assert.IsFalse(signalExportManagerHandler.GetPortfolioTargets(out _)); } + [Test] + public void EmptySignalExportList() + { + var algorithm = new AlgorithmStub(true); + algorithm.SetLiveMode(true); + algorithm.SetFinishedWarmingUp(); + + algorithm.SetCash(100000); + + var security = algorithm.AddSecurity(Symbols.SPY); + security.SetMarketPrice(new Tick(new DateTime(2022, 01, 04), security.Symbol, 144.80m, 144.82m)); + security.Holdings.SetHoldings(144.81m, 100); + + var utcTime = DateTime.UtcNow; + var signalExportManagerHandler = new SignalExportManagerHandler(algorithm); + signalExportManagerHandler.OnOrderEvent(new OrderEvent(0, security.Symbol, utcTime.AddMinutes(-1), OrderStatus.Filled, OrderDirection.Buy, 100, 100, new Orders.Fees.OrderFee(new Securities.CashAmount(1, "USD")))); + + Assert.DoesNotThrow(() => signalExportManagerHandler.SetTargetPortfolioFromPortfolio()); + Assert.DoesNotThrow(() => signalExportManagerHandler.Flush(utcTime)); + } + private static object[] SendsTargetsToCollective2AppropiatelyTestCases = { new object[] { "USD", Symbols.SPY, 0.2m, @"{""StrategyId"":0,""Positions"":[{""exchangeSymbol"":{""symbol"":""SPY"",""currency"":""USD"",""securityExchange"":""DEFAULT"",""securityType"":""CS"",""maturityMonthYear"":null,""putOrCall"":null,""strikePrice"":null,""priceMultiplier"":1.0},""quantity"":99.0}]}" },