diff --git a/Common/Brokerages/InteractiveBrokersBrokerageModel.cs b/Common/Brokerages/InteractiveBrokersBrokerageModel.cs index a538ccd7e2a6..b93d1f3bd2cd 100644 --- a/Common/Brokerages/InteractiveBrokersBrokerageModel.cs +++ b/Common/Brokerages/InteractiveBrokersBrokerageModel.cs @@ -132,7 +132,7 @@ public override bool CanSubmitOrder(Security security, Order order, out Brokerag return false; } - else if (order.Type == OrderType.MarketOnClose && (security.Type == SecurityType.Option || security.Type == SecurityType.IndexOption)) + else if (order.Type == OrderType.MarketOnClose && security.Type.IsOption()) { message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "InteractiveBrokers does not support Market-on-Close orders for Options", diff --git a/Tests/Common/Brokerages/InteractiveBrokersBrokerageModelTests.cs b/Tests/Common/Brokerages/InteractiveBrokersBrokerageModelTests.cs index f806d817e763..02c64d4517e2 100644 --- a/Tests/Common/Brokerages/InteractiveBrokersBrokerageModelTests.cs +++ b/Tests/Common/Brokerages/InteractiveBrokersBrokerageModelTests.cs @@ -117,6 +117,37 @@ public void CannotSubmitMOCOrdersForIndexOptions() Assert.AreEqual(expectedMessage, message.Message); } + [Test] + public void CannotSubmitMOCOrdersForFutureOptions() + { + var underlyingFuture = Symbol.CreateFuture( + QuantConnect.Securities.Futures.Indices.SP500EMini, + Market.CME, + new DateTime(2021, 3, 19)); + + var futureOption = Symbol.CreateOption(underlyingFuture, + Market.CME, + OptionStyle.American, + OptionRight.Call, + 2550m, + new DateTime(2021, 3, 19)); + + var futureOptionSecurity = new QuantConnect.Securities.FutureOption.FutureOption( + futureOption, + MarketHoursDatabase.FromDataFolder().GetExchangeHours(Market.CME, futureOption, futureOption.SecurityType), + new Cash("USD", 100000m, 1m), + new OptionSymbolProperties(string.Empty, "USD", 1m, 0.01m, 1m), + new CashBook(), + new RegisteredSecurityDataTypesProvider(), + new SecurityCache(), + null); + + var futureOptionOrder = new MarketOnCloseOrder(futureOption, 1, DateTime.UtcNow); + var result = _interactiveBrokersBrokerageModel.CanSubmitOrder(futureOptionSecurity, futureOptionOrder, out var message); + Assert.IsFalse(result); + var expectedMessage = "The InteractiveBrokersBrokerageModel does not support MarketOnClose order type. Only supports [Market,MarketOnOpen,Limit,StopMarket,StopLimit,TrailingStop,LimitIfTouched,ComboMarket,ComboLimit,ComboLegLimit,OptionExercise]"; + Assert.AreEqual(expectedMessage, message.Message); + } private static List GetUnsupportedOptions() {