public string RefundTrade(String orderRef) { if (orderRef == null || orderRef == string.Empty) { return("非法委托编号!"); } int reference = int.Parse(orderRef.Trim()); ERecord srecord = EntrustRecord.GetEntrustRecord(reference); if (srecord != null) { //找到股票委托交易信息 RefundStruct refund = new RefundStruct() { Direction = srecord.Direction.Trim(), ExchangeId = srecord.ExchangeId.Trim(), OffSetFlag = "0", SecurityCode = srecord.Code, SecurityType = "S", OrderRef = srecord.OrderRef.ToString(), OrderSysId = srecord.SysOrderRef }; queue_refund_thread.GetQueue().Enqueue(refund); return("success"); } RecordItem frecord = TradeRecord.GetInstance().getOrderInfo(reference); if (frecord != null) { //找到期货委托交易信息 RefundStruct refund = new RefundStruct() { Direction = frecord.Orientation, ExchangeId = String.Empty, OffSetFlag = frecord.CombOffsetFlag.ToString(), SecurityCode = frecord.Code, SecurityType = "F", OrderRef = frecord.OrderRef.ToString(), OrderSysId = frecord.OrderSysID }; queue_refund_thread.GetQueue().Enqueue(refund); return("success"); } return("未找到委托对应交易!"); }
/// <summary> /// 期货总控线程函数 /// </summary> private static void FutureThreadProc() { log.LogEvent("期货退货线程启动!"); string ErrorMsg = string.Empty; DateTime lastmessage = DateTime.Now; CTP_CLI.CCTPClient _client = new CTP_CLI.CCTPClient(CommConfig.INVESTOR, CommConfig.PASSWORD, CommConfig.BROKER, CommConfig.ADDRESS); _client.FrontConnected += _client_FrontConnected; _client.FrontDisconnected += _client_FrontDisconnected; _client.RspUserLogin += _client_RspUserLogin; //报单变化回调函数 _client.RtnOrder += FutureTrade._client_RtnOrder; //成交变化回调函数 _client.RtnTrade += FutureTrade._client_RtnTrade; //报单修改操作回调函数(暂时不用) _client.RspOrderAction += FutureTrade._client_RspOrderAction; //报单失败回调函数 _client.RspOrderInsert += FutureTrade._client_RspOrderInsert; //报单问题回调函数 _client.ErrRtnOrderInsert += FutureTrade._client_ErrRtnOrderInsert; _client.Connect(); //状态 DISCONNECTED -> CONNECTED while (status != FutureTradeThreadStatus.CONNECTED) { Thread.Sleep(10); } _client.ReqUserLogin(); //状态 CONNECTED -> LOGIN while (status != FutureTradeThreadStatus.LOGIN) { Thread.Sleep(10); } while (true) { if ((DateTime.Now - GlobalHeartBeat.GetGlobalTime()).TotalMinutes > 10) { log.LogEvent("期货退货线程心跳停止 , 最后心跳 : " + GlobalHeartBeat.GetGlobalTime().ToString()); KeyValuePair <string, object> message1 = new KeyValuePair <string, object>("THREAD_Future_Refund_Control_MONITOR", (object)false); queue_system_status.GetQueue().Enqueue((object)message1); break; } if (lastmessage.Second != DateTime.Now.Second) { KeyValuePair <string, object> message1 = new KeyValuePair <string, object>("THREAD_Future_Refund_Control_MONITOR", (object)true); queue_system_status.GetQueue().Enqueue((object)message1); lastmessage = DateTime.Now; } Thread.Sleep(10); if (queue_future_refund_thread.GetQueueNumber() > 0) { RefundStruct refundItem = (RefundStruct)queue_future_refund_thread.GetQueue().Dequeue(); RecordItem record = TradeRecord.GetInstance().getOrderInfo(Convert.ToInt32(refundItem.OrderRef)); refundItem.ExchangeId = record.ExchangeID; CTP_CLI.CThostFtdcInputOrderActionField_M item = new CTP_CLI.CThostFtdcInputOrderActionField_M() { BrokerID = CommConfig.BROKER, ExchangeID = refundItem.ExchangeId, OrderSysID = refundItem.OrderSysId.PadLeft(12), InvestorID = CommConfig.INVESTOR, ActionFlag = Convert.ToByte('0'), //删除标志 THOST_FTDC_AF_Delete InstrumentID = record.Code }; _client.ReqOrderAction(item); } } }