private void CurrentDirtyOrders(List <Order> dirtyOrders) { foreach (var dirtyOrder in dirtyOrders) { var order = robotTrade.GetOrders(Symbol, dirtyOrder.order_id); if (order.result && order.orders.Count != 0) { Order o = order.orders.FirstOrDefault(); if (o.status == "filled") { robotSession.RemoveSessionOrder(dirtyOrder); Log4NetUtility.Debug($"CurrentEvent,Remove dirtyOrders {dirtyOrder.type} Price:{dirtyOrder.price.ToString("#0.00")} Id:{Utils.ShortID(dirtyOrder.order_id)} status:{o.status}"); } } } }
public void FilledSessionOrders(List <Order> filledSessionOrders, List <Order> currentOrder) { var sessionOrders = new List <Order>(SessionOrders); Parallel.ForEach(sessionOrders, (sessionOrder, loop) => { try { #region 缓存订单在成交订单中 var filledOrder = filledSessionOrders.FirstOrDefault(a => a != null && a.order_id == sessionOrder.order_id); if (filledOrder != null) { string type = filledOrder.type == "buy" ? "+B" : "-S"; Log4NetUtility.Debug($"OrderFilled {type} [{filledOrder.price.ToString("#0.00")}] ID: {Utils.ShortID(filledOrder.order_id)} "); decimal new_price = 0; //补单Price string new_type = filledOrder.type == "buy" ? "sell" : "buy"; if (filledOrder.type == "sell") //卖单成交 { //补单价格为成交价的少一单位价格 new_price = filledOrder.price - info.SpanPrice; } else { //补单价格为成交价的多一单位价格 new_price = filledOrder.price + info.SpanPrice; } Order new_order = new Order() { price = new_price, amount = info.TradeQty, type = new_type, create_date = Utils.GetUtcTimeDec() }; CurrentOrderFilled(filledOrder, new_order); //list.Add(new_order); } #endregion #region 缓存订单不在成交\当前订单中 else//缓存订单不在成交订单中 { //缓存订单也不在当前订单中 if (!currentOrder.Exists(a => a.order_id == sessionOrder.order_id)) { decimal time = Utils.GetUtcTimeDec(-60); //若订单时间较短可能平台延迟,忽略。否则缓存脏数据 if (sessionOrder.create_date < time) { var order = robotTrade.GetOrders(symbol, sessionOrder.order_id); if (order.result && order.orders.Count != 0) { Order o = order.orders.FirstOrDefault(); if (o.status == "filled") { if (sessionOrder.flag == "dirty") { RemoveSessionOrder(sessionOrder); Log4NetUtility.Debug($"Remove dirtyOrders {sessionOrder.type} Price:{sessionOrder.price.ToString("#0.00")} Id:{Utils.ShortID(sessionOrder.order_id)} status:{o.status}"); } else { sessionOrder.flag = "dirty"; } } } } } } #endregion } catch (Exception e) { throw (e); } }); }