//get order status static void ClientOrderStatus(object sender, OrderStatusEventArgs e) { // Loop through the order list and find the order to change the stuts for by looking at the order id foreach (OrderInfo order in orders) if (order.OrderId == e.OrderId) { order.Status = e.Status; Logger.WriteToLog(DateTime.Now, string.Format("ClientManager.ClientOrderStatus : Client order status for market {0}: order: {1,-4}, status:{2,-4}, ", Mode, order.Symbol, order.Status), " OrderStatus"); } }
static void client_OrderStatus(object sender, OrderStatusEventArgs e) { Console.WriteLine("Order Placed."); }
void client_OrderStatus(object sender, OrderStatusEventArgs e) { lock (_lockObject) { string msg = "IB order status: " + e.OrderId + " " + e.Status; //Console.WriteLine(msg); Trace.WriteLine(msg); if (openOrders.ContainsKey(e.OrderId.ToString())) { RightEdge.Common.BrokerOrder openOrder = openOrders[e.OrderId.ToString()]; bool orderProcessed = false; Fill fill = null; string information = ""; switch (e.Status) { case OrderStatus.Filled: // Handle fills with ExecDetails event // fill = new Fill(); // fill.FillDateTime = GetAccountTime("fill"); // fill.Price = new Price(e.LastFillPrice, e.LastFillPrice); // int alreadyFilled = 0; // foreach (Fill existingFill in openOrder.Fills) // { // alreadyFilled += fill.Quantity; // } // // Don't know whether e.filled is cumulative or not // if (e.Filled + e.Remaining == (int)openOrder.Shares) // { // fill.Quantity = e.Filled - alreadyFilled; // } // else // { // fill.Quantity = e.Filled; // } // // Apparently IB doesn't send commissions // fill.Commission = 0; // openOrder.Fills.Add(fill); // if (e.Remaining == 0) // { // openOrder.OrderState = BrokerOrderState.Filled; // } // else // { // openOrder.OrderState = BrokerOrderState.PartiallyFilled; // information = "Partial fill"; // } // orderProcessed = true; break; // Apparently, stop orders don't get "Submitted", they get "presubmitted" instead case OrderStatus.Submitted: case OrderStatus.PreSubmitted: case OrderStatus.ApiPending: if (e.Status == OrderStatus.ApiPending) { // Not sure what the ApiPending status is used for int b = 0; } Trace.WriteLine("IB " + e.Status.ToString() + ": " + openOrder.ToString()); if (_gettingReconnectData) { if (_potentiallyCancelledOrders.ContainsKey(openOrder.OrderId)) { _potentiallyCancelledOrders.Remove(openOrder.OrderId); } } else { openOrder.OrderState = BrokerOrderState.Submitted; orderProcessed = true; } if (unSubmittedOrders.ContainsKey(openOrder.OrderId)) { unSubmittedOrders.Remove(openOrder.OrderId); } break; case OrderStatus.Canceled: openOrder.OrderState = BrokerOrderState.Cancelled; information = "Cancelled"; orderProcessed = true; break; } if (orderProcessed) { OrderUpdatedDelegate tmp = OrderUpdated; if (tmp != null) { tmp(openOrder, fill, information); } if (openOrder.OrderState == BrokerOrderState.Filled) { // TODO: AddShares //AddShares(openOrder); } } if (openOrder.OrderState == BrokerOrderState.Filled || openOrder.OrderState == BrokerOrderState.Rejected || openOrder.OrderState == BrokerOrderState.Cancelled) { openOrders.Remove(openOrder.OrderId); } } } }