From 87c635dda543dc8b990e6c9e233272cb8fe25301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Thu, 25 Jan 2024 14:23:01 -0500 Subject: [PATCH] Improve implementation --- .../InteractiveBrokersBrokerageModel.cs | 2 +- .../InteractiveBrokersBrokerageModelTests.cs | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) 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() {