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.";
+ }
}
///