public static OrderField GetOrder(CtpOrder data) { if (data == null) { return(null); } var order = new OrderField(); order.ID = data.OrderRef; order.LocalID = data.OrderRef; order.OrderID = data.OrderSysID; order.InstrumentID = data.InstrumentID; order.Qty = data.VolumeTotal; order.Side = GetOrderSide(data.Direction); order.OpenClose = GetOpenClose((byte)data.CombOffsetFlag[0]); order.HedgeFlag = GetHedgeFlag((byte)data.CombHedgeFlag[0]); order.Price = data.LimitPrice; order.StopPx = data.StopPrice; order.TimeInForce = TimeInForce.IOC; order.Type = order.Price > 0 ? OrderType.Limit : OrderType.Market; order.Status = GetOrderStatus(data); order.ExecType = GetExecType(data); order.SetText(data.StatusMsg); order.Date = GetDate(data.InsertDate); order.Time = GetTime(data.InsertTime); order.ReserveChar64 = CtpClientId; return(order); }
public static ExecType GetExecType(CtpOrder data) { switch (data.OrderStatus) { case CtpOrderStatusType.Canceled: if (data.OrderSubmitStatus == CtpOrderSubmitStatusType.InsertRejected) { return(ExecType.Rejected); } return(ExecType.Cancelled); case CtpOrderStatusType.Unknown: // 如果是撤单,也有可能出现这一条,如何过滤? if (data.OrderSubmitStatus == CtpOrderSubmitStatusType.InsertSubmitted) { return(ExecType.New); } return(ExecType.Trade); case CtpOrderStatusType.AllTraded: case CtpOrderStatusType.PartTradedQueueing: return(ExecType.Trade); default: return(ExecType.New); } }
internal static OrderStatus GetOrderStatus(CtpOrder data) { switch (data.OrderStatus) { case CtpOrderStatusType.Canceled: { if (data.OrderSubmitStatus == CtpOrderSubmitStatusType.InsertRejected) { return(OrderStatus.Rejected); } return(OrderStatus.Cancelled); } case CtpOrderStatusType.Unknown: // 如果是撤单,也有可能出现这一条,如何过滤? if (data.OrderSubmitStatus == CtpOrderSubmitStatusType.InsertSubmitted) { return(OrderStatus.New); } goto default; default: if (data.VolumeTotal == 0) { return(OrderStatus.Filled); } else if (data.VolumeTotal == data.VolumeTotalOriginal) { return(OrderStatus.New); } else { return(OrderStatus.PartiallyFilled); } } }
private void ProcessRtnOrder(CtpOrder data) { var localId = $"{data.FrontID}:{data.SessionID}:{data.OrderRef}"; if (!_orders.TryGetByLocalId(localId, out var order)) { return; } if (!string.IsNullOrEmpty(data.OrderSysID) && string.IsNullOrEmpty(order.OrderID)) { order.OrderID = $"{data.ExchangeID}:{data.InstrumentID}:{data.OrderSysID}"; _orders.SetOrderSysId(order.OrderID, localId); } ReportOrder(order, CtpConvert.GetExecType(data), CtpConvert.GetOrderStatus(data), 0, 0, data.StatusMsg); if (_cancelPendings.Contains(localId)) { _cancelPendings.Remove(localId); ProcessCancelOrder(localId); } }
private void ProcessRtnOrder(CtpOrder data) { var id = CtpConvert.GetId(data); if (!_orders.TryGetById(id, out var order)) { return; } if (!string.IsNullOrEmpty(data.OrderSysID) && string.IsNullOrEmpty(order.OrderID)) { order.OrderID = data.OrderSysID; order.ExchangeID = data.ExchangeID; _orders.SetMap(order); ProcessTradePending(); } ReportOrder(order, CtpConvert.GetExecType(data), CtpConvert.GetOrderStatus(data), 0, 0, data.StatusMsg); if (_cancelPendings.Contains(id)) { _cancelPendings.Remove(id); ProcessCancelOrder(id); } }
public static string GetId(CtpOrder data) { return($"{data.FrontID}:{data.SessionID}:{data.OrderRef}"); }