protected override void OnRtnOrder(CLRDFITCOrderRtnField RtnOrderData) { if (ProgramTradeEvents.RspEventHandler.ContainsKey(RspSpiModules.RtnOrder) && null != ProgramTradeEvents.RspEventHandler[RspSpiModules.RtnOrder]) { TypedRspEventArgs <CLRDFITCOrderRtnField, object> evt = new TypedRspEventArgs <CLRDFITCOrderRtnField, object> { RequestID = -1, ErrorID = 0, Message = RtnOrderData.statusMsg, Data = RtnOrderData, Error = null, IsLast = true }; Parallel.ForEach(ProgramTradeEvents.RspEventHandler[RspSpiModules.RtnOrder].GetInvocationList(), handler => { (handler as EventHandler <RspEventArgs>).BeginInvoke(this, evt, null, null); }); } }
public static OrderDetail CreateDetail(CLRDFITCOrderRtnField order) { OrderDetail result = new OrderDetail(); result.OrderSysID = order.spdOrderID; switch (order.exchangeID) { case "DCE": result.ExchangeID = ExchangeID.DCE; break; case "CZCE": result.ExchangeID = ExchangeID.CZCE; break; case "CFFEX": result.ExchangeID = ExchangeID.CFFEX; break; case "SHFE": result.ExchangeID = ExchangeID.SHFE; break; } result.InstrumentID = order.instrumentID; switch (order.openCloseType) { case (int)CLRDFITCOpenCloseType.SPD_OPEN: result.Operation = Operation.Open; break; case (int)CLRDFITCOpenCloseType.SPD_CLOSE: result.Operation = Operation.Close; break; } switch (order.buySellType) { case (short)CLRDFITCBuySellType.SPD_BUY: result.Direction = Direction.Buy; break; case (short)CLRDFITCBuySellType.SPD_SELL: result.Direction = Direction.Sell; break; } result.LimitPrice = order.insertPrice; result.Volume = order.orderAmount; switch (order.orderStatus) { case (short)CLRDFITCOrderAnswerStatusType.SPD_CANCELED: result.OrderStatus = OrderState.AllCanceled; break; case (short)CLRDFITCOrderAnswerStatusType.SPD_FILLED: result.OrderStatus = OrderState.AllDealed; break; case (short)CLRDFITCOrderAnswerStatusType.SPD_IN_QUEUE: result.OrderStatus = OrderState.Queuening; break; case (short)CLRDFITCOrderAnswerStatusType.SPD_PARTIAL: result.OrderStatus = OrderState.PartialDealed; break; case (short)CLRDFITCOrderAnswerStatusType.SPD_PARTIAL_CANCELED: result.OrderStatus = OrderState.PartialCaneled; break; case (short)CLRDFITCOrderAnswerStatusType.SPD_IN_CANCELING: result.OrderStatus = OrderState.Canceling; break; case (short)CLRDFITCOrderAnswerStatusType.SPD_ERROR: result.OrderStatus = OrderState.Error; break; case (short)CLRDFITCOrderAnswerStatusType.SPD_PLACED: result.OrderStatus = OrderState.Placed; break; case (short)CLRDFITCOrderAnswerStatusType.SPD_TRIGGERED: result.OrderStatus = OrderState.Triggered; break; } return(result); }