diff --git a/Common/Brokerages/DefaultBrokerageMessageHandler.cs b/Common/Brokerages/DefaultBrokerageMessageHandler.cs index 4a61d4ff5159..c7996bad3c59 100644 --- a/Common/Brokerages/DefaultBrokerageMessageHandler.cs +++ b/Common/Brokerages/DefaultBrokerageMessageHandler.cs @@ -43,6 +43,7 @@ public class DefaultBrokerageMessageHandler : IBrokerageMessageHandler private readonly TimeSpan _openThreshold; private readonly TimeSpan _initialDelay; private CancellationTokenSource _cancellationTokenSource; + private bool _outsideLeanOrderWarningEmitted; /// /// Initializes a new instance of the class @@ -176,8 +177,13 @@ where exchange.IsOpenDuringBar( /// /// The new order event /// Whether the order should be added to the transaction handler - public bool HandleOrder(NewBrokerageOrderNotificationEventArgs eventArgs) + public virtual bool HandleOrder(NewBrokerageOrderNotificationEventArgs eventArgs) { + if (!_outsideLeanOrderWarningEmitted) + { + _outsideLeanOrderWarningEmitted = true; + _algorithm.Error(Messages.DefaultBrokerageMessageHandler.IgnoreUnrecognizedOrder(eventArgs.Order.BrokerId.FirstOrDefault())); + } return false; } diff --git a/Common/Messages/Messages.Brokerages.cs b/Common/Messages/Messages.Brokerages.cs index 7812544327d1..9fbd075f2959 100644 --- a/Common/Messages/Messages.Brokerages.cs +++ b/Common/Messages/Messages.Brokerages.cs @@ -347,6 +347,17 @@ public static string TimeUntilNextMarketOpen(TimeSpan timeUntilNextMarketOpen) { return Invariant($"DefaultBrokerageMessageHandler.Handle(): TimeUntilNextMarketOpen: {timeUntilNextMarketOpen}"); } + + /// + /// Returns a string message notify about unrecognized orders that are not being observed by Lean + /// + /// The brokerage order id. + /// The string represent unrecognized message + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static string IgnoreUnrecognizedOrder(string brokerageOrderId) + { + return $"Ignoring unrecognized order (BrokerId: {brokerageOrderId}). Please use 'SetBrokerageMessageHandler(...)' to set a custom brokerage message handler to optionally accept unknown orders."; + } } ///