Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
 public static string GetId(CtpOrder data)
 {
     return($"{data.FrontID}:{data.SessionID}:{data.OrderRef}");
 }