public void execDetails(int reqId, Contract contract, Execution execution) { IBOrderStatusWrapper data; if (OrderStatusDic.TryGetValue(execution.OrderId, out data)) { data.ExecId = execution.ExecId; } }
public void commissionReport(CommissionReport commissionReport) { //find order by execId var orderStatus = OrderStatusDic.FirstOrDefault(o => o.Value.ExecId == commissionReport.ExecId); if (orderStatus.Equals(new KeyValuePair <int, IBOrderStatusWrapper>())) { Logger.Error("Received commission report with execId not found " + $"in orders list, execId is {commissionReport.ExecId}"); return; } orderStatus.Value.Data.Commission = commissionReport.Commission; Consumer.Enqueue(orderStatus.Value.Data); }
public void orderStatus(int orderId, string status, int filled, int remaining, double avgFillPrice, int permId, int parentId, double lastFillPrice, int clientId, string whyHeld) { if (OrderStatusDic.ContainsKey(orderId)) { OrderStatusData orderStatus = OrderStatusDic[orderId].Data; orderStatus.OrderStatus = (OrderStatus)Enum.Parse(typeof(OrderStatus), status); orderStatus.LastUpdateTime = DateTime.Now; orderStatus.LastFillPrice = lastFillPrice; Consumer.Enqueue(orderStatus); } else { Logger.Error($"Received order status on request not in OrderStatusDic, orderId is {orderId}"); } }
public void openOrder(int orderId, Contract contract, Order order, OrderState orderState) { CloseIrrelevantOrders(); IBOrderStatusWrapper status; if (!OrderStatusDic.TryGetValue(orderId, out status)) { var orderData = order.ToOrderData(); orderData.Contract = contract.ToContract(); status = new IBOrderStatusWrapper(new OrderStatusData(orderId.ToString(), orderData) { Id = Guid.NewGuid() }); OrderStatusDic[orderId] = status; } status.Data.LastUpdateTime = DateTime.Now; double maintMargin = Convert.ToDouble(orderState.MaintMargin); if (maintMargin < LARGE_NUBMER) { status.Data.MaintMargin = maintMargin; } Consumer.Enqueue(OrderStatusDic[orderId].Data); }
private void CloseIrrelevantOrders() { OrderStatusDic.RemoveAll(item => DateTime.Now - item.Data.LastUpdateTime > ORDER_MAX_TIME_SPAN && item.Data.OrderStatus.In(OrderStatus.Cancelled, OrderStatus.Filled)); }