/// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> public void Dispose() { if (_brokerage != null) { _brokerage.Disconnect(); _brokerage.Dispose(); } }
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(); } }