Skip to content

Commit

Permalink
Fix: Get GroupOrders ByBrokerageId (#8310)
Browse files Browse the repository at this point in the history
* fix: Get GroupOrders ByBrokerageId

* test:feat: return all combo orders with the same brokerageId
  • Loading branch information
Romazes committed Sep 10, 2024
1 parent 49bf436 commit bef045a
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
4 changes: 3 additions & 1 deletion Engine/TransactionHandlers/BrokerageTransactionHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -559,7 +559,9 @@ public List<Order> GetOrdersByBrokerageId(string brokerageId)
{
var openOrders = GetOrdersByBrokerageId(brokerageId, _openOrders);

if (openOrders.Count > 0)
if (openOrders.Count > 0
// if it's part of a group, some leg could be filled already, not part of open orders
&& (openOrders[0].GroupOrderManager == null || openOrders[0].GroupOrderManager.Count == openOrders.Count))
{
return openOrders;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,39 @@ private static SubmitOrderRequest MakeOrderRequest(Security security, OrderType
};
}

[TestCase("1", 3)]
public void RetrieveComboOrdersWithTheSameBrokerageIdEvenIfOneOfThemIsFilled(string brokerageOrderId, int expectedComboOrdersCount)
{
var symbol = Symbols.AAPL;
_algorithm.AddSecurity(symbol);
_algorithm.Securities[symbol].SetMarketPrice(new Tick(DateTime.UtcNow.AddDays(-1), symbol, 220m, 220m, 220m));

var brokerageTransactionHandler = new BrokerageTransactionHandler();

var groupOrderManager = new GroupOrderManager(1, 3, 10);

var comboOrders = new List<ComboMarketOrder>
{
new ComboMarketOrder(symbol, 10m, DateTime.UtcNow, groupOrderManager) { Status = OrderStatus.Submitted },
new ComboMarketOrder(symbol, -10m, DateTime.UtcNow, groupOrderManager) { Status = OrderStatus.PartiallyFilled },
new ComboMarketOrder(symbol, 10m, DateTime.UtcNow, groupOrderManager) { Status = OrderStatus.Filled }
};

foreach (var comboOrder in comboOrders)
{
comboOrder.BrokerId.Add(brokerageOrderId);
brokerageTransactionHandler.AddOpenOrder(comboOrder, _algorithm);
}

var openOrders = brokerageTransactionHandler.GetOrdersByBrokerageId(brokerageOrderId);

Assert.IsNotEmpty(openOrders);
Assert.That(openOrders.Count, Is.EqualTo(expectedComboOrdersCount));
Assert.True(openOrders.Any(o => o.Status == OrderStatus.Submitted));
Assert.True(openOrders.Any(o => o.Status == OrderStatus.PartiallyFilled));
Assert.True(openOrders.Any(o => o.Status == OrderStatus.Filled));
}

[Test]
public void OrderTagIsSetToTheDefaultOne([Values] OrderType orderType)
{
Expand Down

0 comments on commit bef045a

Please sign in to comment.