Exemplo n.º 1
0
        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("未找到委托对应交易!");
        }
Exemplo n.º 2
0
        /// <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);
                }
            }
        }