示例#1
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;
                }
            }
        }