public void ClientCancelsLimitOrder() { OrderStatus status = OrderStatus.New; var manualResetEvent = new ManualResetEvent(false); var ib = new InteractiveBrokersBrokerage(); ib.Connect(); ib.OrderEvent += (sender, args) => { status = args.Status; manualResetEvent.Set(); }; // try to sell a single share at a ridiculous price, we'll cancel this later var order = new Order("AAPL", SecurityType.Equity, -1, OrderType.Limit, DateTime.UtcNow, 100000); ib.PlaceOrder(order); manualResetEvent.WaitOne(2500); ib.CancelOrder(order); manualResetEvent.Reset(); manualResetEvent.WaitOne(2500); Assert.AreEqual(OrderStatus.Canceled, status); }
public void Teardown() { try { // give the tear down a header so we can easily find it in the logs Log.Trace("-----"); Log.Trace("InteractiveBrokersBrokerageTests.Teardown(): Starting teardown..."); Log.Trace("-----"); var canceledResetEvent = new ManualResetEvent(false); var filledResetEvent = new ManualResetEvent(false); _interactiveBrokersBrokerage.OrderStatusChanged += (sender, orderEvent) => { if (orderEvent.Status == OrderStatus.Filled) { filledResetEvent.Set(); } if (orderEvent.Status == OrderStatus.Canceled) { canceledResetEvent.Set(); } }; // cancel all open orders Log.Trace("InteractiveBrokersBrokerageTests.Teardown(): Canceling open orders..."); var orders = _interactiveBrokersBrokerage.GetOpenOrders(); foreach (var order in orders) { _interactiveBrokersBrokerage.CancelOrder(order); canceledResetEvent.WaitOne(3000); canceledResetEvent.Reset(); } Log.Trace("InteractiveBrokersBrokerageTests.Teardown(): Liquidating open positions..."); // liquidate all positions var holdings = _interactiveBrokersBrokerage.GetAccountHoldings(); foreach (var holding in holdings.Where(x => x.Quantity != 0)) { //var liquidate = new MarketOrder(holding.Symbol, (int) -holding.Quantity, DateTime.UtcNow, type: holding.Type); //_interactiveBrokersBrokerage.PlaceOrder(liquidate); //filledResetEvent.WaitOne(3000); //filledResetEvent.Reset(); } var openOrdersText = _interactiveBrokersBrokerage.GetOpenOrders().Select(x => x.Symbol.ToString() + " " + x.Quantity); Log.Trace("InteractiveBrokersBrokerageTests.Teardown(): Open orders: " + string.Join(", ", openOrdersText)); //Assert.AreEqual(0, actualOpenOrderCount, "Failed to verify that there are zero open orders."); var holdingsText = _interactiveBrokersBrokerage.GetAccountHoldings().Where(x => x.Quantity != 0).Select(x => x.Symbol.ToString() + " " + x.Quantity); Log.Trace("InteractiveBrokersBrokerageTests.Teardown(): Account holdings: " + string.Join(", ", holdingsText)); //Assert.AreEqual(0, holdingsCount, "Failed to verify that there are zero account holdings."); _interactiveBrokersBrokerage.Dispose(); _interactiveBrokersBrokerage = null; _orders.Clear(); } finally { InteractiveBrokersGatewayRunner.Stop(); } }