/// <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); }
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; } } }
/// <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); }