Example #1
0
        /// <summary>
        /// 报单回报(私有回报)
        /// 此函数通知报单的变化
        /// </summary>
        /// <param name="pOrder"></param>
        public static void _client_RtnOrder(CTP_CLI.CThostFtdcOrderField_M pOrder)
        {
            CTP_CLI.CThostFtdcOrderField_M order = new CThostFtdcOrderField_M()
            {
                ActiveTime          = pOrder.ActiveTime,
                ExchangeID          = pOrder.ExchangeID,
                ExchangeInstID      = pOrder.ExchangeInstID,
                ForceCloseReason    = pOrder.ForceCloseReason,
                Direction           = pOrder.Direction,
                CombHedgeFlag_0     = pOrder.CombHedgeFlag_0,
                VolumeTotal         = pOrder.VolumeTotal,
                VolumeTotalOriginal = pOrder.VolumeTotalOriginal,
                VolumeTraded        = pOrder.VolumeTraded,
                StatusMsg           = pOrder.StatusMsg,
                CombOffsetFlag_0    = pOrder.CombOffsetFlag_0,
                OrderSysID          = pOrder.OrderSysID,
                OrderLocalID        = pOrder.OrderLocalID,
                OrderStatus         = pOrder.OrderStatus,
                OrderRef            = pOrder.OrderRef,
                ActiveTraderID      = pOrder.ActiveTraderID,
                ActiveUserID        = pOrder.ActiveUserID,
                BrokerID            = pOrder.BrokerID,
                BrokerOrderSeq      = pOrder.BrokerOrderSeq,
                BusinessUnit        = pOrder.BusinessUnit,
                CancelTime          = pOrder.CancelTime,
                ClearingPartID      = pOrder.ClearingPartID,
                ClientID            = pOrder.ClientID,
                CombHedgeFlag_1     = pOrder.CombHedgeFlag_1,
                CombHedgeFlag_2     = pOrder.CombHedgeFlag_2,
                CombHedgeFlag_3     = pOrder.CombHedgeFlag_3,
                CombHedgeFlag_4     = pOrder.CombHedgeFlag_4,
                CombOffsetFlag_1    = pOrder.CombOffsetFlag_1,
                CombOffsetFlag_2    = pOrder.CombOffsetFlag_2,
                CombOffsetFlag_3    = pOrder.CombOffsetFlag_3,
                CombOffsetFlag_4    = pOrder.CombOffsetFlag_4,
                FrontID             = pOrder.FrontID,
                InstrumentID        = pOrder.InstrumentID,
                InsertTime          = pOrder.InsertTime,
                InsertDate          = pOrder.InsertDate,
                LimitPrice          = pOrder.LimitPrice,
                OrderType           = pOrder.OrderType,
                SessionID           = pOrder.SessionID,
                UserID   = pOrder.UserID,
                TraderID = pOrder.TraderID
            };

            ThreadPool.QueueUserWorkItem(new WaitCallback(FutureTrade.RtnOrderProc), (object)order);
        }
Example #2
0
        public static void RtnOrderProc(object order)
        {
            CThostFtdcOrderField_M pOrder = (CThostFtdcOrderField_M)order;

            lock (syncRtnOrderObject)
            {
                switch (pOrder.OrderStatus)
                {
                case 48:
                {
                    //全部成交
                    TradeRecord.GetInstance().UpdateOrder(pOrder.VolumeTraded, Convert.ToInt16(pOrder.OrderRef), pOrder.OrderSysID, pOrder.StatusMsg, pOrder.OrderStatus, pOrder.VolumeTotal, pOrder.ExchangeID);

                    if (pOrder.CombOffsetFlag_0 == (byte)(FutureTradeOffSet.Open))
                    {
                        //只有开仓涉及冻结资金
                        //交易失败,需要释放冻结掉的期货交易资金
                        accountMonitor.UpdateRiskFrozonAccount(pOrder.UserID, pOrder.InstrumentID, pOrder.VolumeTotalOriginal * (-1), pOrder.VolumeTotalOriginal * pOrder.LimitPrice * (-1), "F", pOrder.Direction.ToString());
                    }
                }
                break;

                case 49:
                {
                    //部分成交
                    TradeRecord.GetInstance().UpdateOrder(pOrder.VolumeTraded, Convert.ToInt16(pOrder.OrderRef), pOrder.OrderSysID, pOrder.StatusMsg, pOrder.OrderStatus, pOrder.VolumeTotal, pOrder.ExchangeID);
                }
                break;

                case 51:
                {
                    //未成交状态
                    TradeRecord.GetInstance().UpdateOrder(pOrder.VolumeTraded, Convert.ToInt16(pOrder.OrderRef), pOrder.OrderSysID, pOrder.StatusMsg, pOrder.OrderStatus, pOrder.VolumeTotal, pOrder.ExchangeID);
                }
                break;

                case 53:
                {
                    //已撤单状态
                    TradeRecord.GetInstance().UpdateOrder(pOrder.VolumeTraded, Convert.ToInt16(pOrder.OrderRef), pOrder.OrderSysID, pOrder.StatusMsg, pOrder.OrderStatus, pOrder.VolumeTotal, pOrder.ExchangeID);
                }
                break;

                case 97:
                {
                    //报单已经提交,创建委托记录
                    if (CONFIG.CheckOrderRefAvailiable(Convert.ToInt16(pOrder.OrderRef)))
                    {
                        // 重复返回不需要记库
                        TradeRecord.GetInstance().SubscribeOrder("1", pOrder.InstrumentID, Convert.ToChar(pOrder.Direction).ToString(), pOrder.VolumeTotalOriginal, Convert.ToDecimal(pOrder.LimitPrice), Convert.ToInt16(pOrder.OrderRef), pOrder.OrderStatus, pOrder.CombOffsetFlag_0);
                    }
                }
                break;

                default:
                {
                    //如果是没有见过的状态,则默认更新委托信息
                    TradeRecord.GetInstance().UpdateOrder(pOrder.VolumeTraded, Convert.ToInt16(pOrder.OrderRef), pOrder.OrderSysID, pOrder.StatusMsg, pOrder.OrderStatus, pOrder.VolumeTotal, pOrder.ExchangeID);
                }
                break;
                }
            }
        }
Example #3
0
 /// <summary>
 /// 报单查询回报(私有回报)
 /// 此函数通知报单的变化
 /// </summary>
 /// <param name="pOrder"></param>
 public static void _client_RspQryOrder(CThostFtdcOrderField_M pOrder, CThostFtdcRspInfoField_M pRspInfo, int nRequestID, bool bIsLast)
 {
     ThreadPool.QueueUserWorkItem(new WaitCallback(FutureTrade.RtnOrderProc), (object)pOrder);
 }