Ejemplo n.º 1
0
 public OnRspErrorArgs(IntPtr pApi, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     this.pApi       = pApi;
     this.pRspInfo   = pRspInfo;
     this.nRequestID = nRequestID;
     this.bIsLast    = bIsLast;
 }
Ejemplo n.º 2
0
 private void OnRspError_callback(IntPtr pApi, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     if (null != OnRspError)
     {
         OnRspError(this, new OnRspErrorArgs(pApi, ref pRspInfo, nRequestID, bIsLast));
     }
 }
Ejemplo n.º 3
0
 private void OnDisconnect_callback(IntPtr pApi, ref CZQThostFtdcRspInfoField pRspInfo, ConnectionStatus step)
 {
     if (null != OnDisconnect)
     {
         OnDisconnect(this, new OnDisconnectArgs(pApi, ref pRspInfo, step));
     }
 }
Ejemplo n.º 4
0
 public OnRspQryDepthMarketDataArgs(IntPtr pTraderApi, ref CZQThostFtdcDepthMarketDataField pDepthMarketData, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     this.pTraderApi       = pTraderApi;
     this.pDepthMarketData = pDepthMarketData;
     this.pRspInfo         = pRspInfo;
     this.nRequestID       = nRequestID;
     this.bIsLast          = bIsLast;
 }
Ejemplo n.º 5
0
 public OnRspQryInstrumentMarginRateArgs(IntPtr pTraderApi, ref CZQThostFtdcInstrumentMarginRateField pInstrumentMarginRate, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     this.pTraderApi            = pTraderApi;
     this.pInstrumentMarginRate = pInstrumentMarginRate;
     this.pRspInfo   = pRspInfo;
     this.nRequestID = nRequestID;
     this.bIsLast    = bIsLast;
 }
Ejemplo n.º 6
0
 public OnRspQryInvestorPositionDetailArgs(IntPtr pTraderApi, ref CZQThostFtdcInvestorPositionDetailField pInvestorPositionDetail, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     this.pTraderApi = pTraderApi;
     this.pInvestorPositionDetail = pInvestorPositionDetail;
     this.pRspInfo   = pRspInfo;
     this.nRequestID = nRequestID;
     this.bIsLast    = bIsLast;
 }
Ejemplo n.º 7
0
 public OnRspQryOrderArgs(IntPtr pTraderApi, ref CZQThostFtdcOrderField pOrder, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     this.pTraderApi = pTraderApi;
     this.pOrder     = pOrder;
     this.pRspInfo   = pRspInfo;
     this.nRequestID = nRequestID;
     this.bIsLast    = bIsLast;
 }
Ejemplo n.º 8
0
 public OnRspQryTradingAccountArgs(IntPtr pTraderApi, ref CZQThostFtdcTradingAccountField pTradingAccount, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     this.pTraderApi      = pTraderApi;
     this.pTradingAccount = pTradingAccount;
     this.pRspInfo        = pRspInfo;
     this.nRequestID      = nRequestID;
     this.bIsLast         = bIsLast;
 }
Ejemplo n.º 9
0
 public OnRspOrderActionArgs(IntPtr pTraderApi, ref CZQThostFtdcInputOrderActionField pInputOrderAction, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     this.pTraderApi        = pTraderApi;
     this.pInputOrderAction = pInputOrderAction;
     this.pRspInfo          = pRspInfo;
     this.nRequestID        = nRequestID;
     this.bIsLast           = bIsLast;
 }
Ejemplo n.º 10
0
        /*
         * /// <summary>
         * /// 初始化接受数据类型
         * /// </summary>
         * protected override void InitResponseDataTypeMapping()
         * {
         * ///客户端认证响应
         * responseDataTypeMapping.Add(CTPStockResponseType.AuthenticateResponse, typeof(CZQThostFtdcRspAuthenticateField));
         * ///登录请求响应
         * responseDataTypeMapping.Add(CTPStockResponseType.UserLoginResponse, typeof(CZQThostFtdcRspUserLoginField));
         * ///登出请求响应
         * responseDataTypeMapping.Add(CTPStockResponseType.UserLogoutResponse, typeof(CZQThostFtdcUserLogoutField));
         * ///用户口令更新请求响应
         * responseDataTypeMapping.Add(CTPStockResponseType.UserPasswordUpdateResponse, typeof(CZQThostFtdcUserPasswordUpdateField));
         * ///报单录入请求响应
         * responseDataTypeMapping.Add(CTPStockResponseType.OrderInsertResponse, typeof(CZQThostFtdcInputOrderField));
         * ///报单操作请求响应
         * responseDataTypeMapping.Add(CTPStockResponseType.OrderActionResponse, typeof(CZQThostFtdcInputOrderActionField));
         * ///查询最大报单数量响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryMaxOrderVolumeResponse, typeof(CZQThostFtdcQueryMaxOrderVolumeField));
         * ///请求查询报单响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryOrderResponse, typeof(CZQThostFtdcOrderField));
         * ///请求查询成交响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryTradeResponse, typeof(CZQThostFtdcTradeField));
         * ///请求查询资金账户响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryTradingAccountResponse, typeof(CZQThostFtdcTradingAccountField));
         * ///请求查询投资者响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryInvestorResponse, typeof(CZQThostFtdcInvestorField));
         * ///请求查询交易编码响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryTradingCodeResponse, typeof(CZQThostFtdcTradingCodeField));
         * ///请求查询合约手续费率响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryInstrumentCommissionRateResponse, typeof(CZQThostFtdcInstrumentCommissionRateField));
         * ///请求查询交易所响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryExchangeResponse, typeof(CZQThostFtdcExchangeField));
         * ///请求查询合约响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryInstrumentResponse, typeof(CZQThostFtdcInstrumentField));
         * ///请求查询行情响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryDepthMarketDataResponse, typeof(CZQThostFtdcDepthMarketDataField));
         * ///请求查询投资者持仓明细响应
         * responseDataTypeMapping.Add(CTPStockResponseType.QueryInvestorPositionDetailResponse, typeof(CZQThostFtdcInvestorPositionDetailField));
         * ///错误应答
         * responseDataTypeMapping.Add(CTPStockResponseType.ErrorResponse, typeof(CZQThostFtdcRspInfoField));
         * ///报单通知
         * responseDataTypeMapping.Add(CTPStockResponseType.ReturnOrderResponse, typeof(CZQThostFtdcOrderField));
         * ///成交通知
         * responseDataTypeMapping.Add(CTPStockResponseType.ReturnTradeResponse, typeof(CZQThostFtdcTradeField));
         * ///报单录入错误回报
         * responseDataTypeMapping.Add(CTPStockResponseType.ErrorReturnOrderInsertResponse, typeof(CZQThostFtdcInputOrderField));
         * ///报单操作错误回报
         * responseDataTypeMapping.Add(CTPStockResponseType.ErrorReturnOrderActionResponse, typeof(CZQThostFtdcOrderActionField));
         * ///合约交易状态通知
         * responseDataTypeMapping.Add(CTPStockResponseType.ReturnInstrumentStatusResponse, typeof(CZQThostFtdcInstrumentStatusField));
         *
         * }
         */

        #region CTP API Invoke

        protected override CTPResponseInfo GetResponseInfo(IntPtr pRspInfo)
        {
            CTPResponseInfo rsp = new CTPResponseInfo();

            CZQThostFtdcRspInfoField rspInfo = PInvokeUtility.GetObjectFromIntPtr <CZQThostFtdcRspInfoField>(pRspInfo);

            rsp.ErrorID = rspInfo.ErrorID;
            //rsp.Message = PInvokeUtility.GetUnicodeString(rspInfo.ErrorMsg);
            rsp.Message = rspInfo.ErrorMsg;

            return(rsp);
        }
Ejemplo n.º 11
0
        private void OnDisconnect_callback(IntPtr pApi, ref CZQThostFtdcRspInfoField pRspInfo, ConnectionStatus step)
        {
            if (isConnected)
            {
                if (7 == pRspInfo.ErrorID ||//综合交易平台:还没有初始化
                    8 == pRspInfo.ErrorID)   //综合交易平台:前置不活跃
                {
                    Disconnect_TD();
                    Connect_TD();
                }
            }

            if (null != OnDisconnect)
            {
                OnDisconnect(this, new OnDisconnectArgs(pApi, ref pRspInfo, step));
            }
        }
        private void OnDisconnect(IntPtr pApi, ref CZQThostFtdcRspInfoField pRspInfo, ConnectionStatus step)
        {
            if (m_pMdApi == pApi)//行情
            {
                _bMdConnected = false;
                if (isConnected)
                {
                    mdlog.Error("Step:{0},ErrorID:{1},ErrorMsg:{2},等待定时重试连接", step, pRspInfo.ErrorID, pRspInfo.ErrorMsg);
                }
                else
                {
                    mdlog.Info("Step:{0},ErrorID:{1},ErrorMsg:{2}", step, pRspInfo.ErrorID, pRspInfo.ErrorMsg);
                }
            }
            else if (m_pTdApi == pApi)//交易
            {
                _bTdConnected = false;
                if (isConnected)//如果以前连成功,表示密码没有错,只是初始化失败,可以重试
                {
                    tdlog.Error("Step:{0},ErrorID:{1},ErrorMsg:{2},等待定时重试连接", step, pRspInfo.ErrorID, pRspInfo.ErrorMsg);

                    if (7 == pRspInfo.ErrorID ||//综合交易平台:还没有初始化
                        8 == pRspInfo.ErrorID)   //综合交易平台:前置不活跃
                    {
                        //Disconnect_TD();
                        //Connect_TD();
                    }
                }
                else
                {
                    tdlog.Info("Step:{0},ErrorID:{1},ErrorMsg:{2}", step, pRspInfo.ErrorID, pRspInfo.ErrorMsg);
                }
            }
            if (!isConnected)//从来没有连接成功过,可能是密码错误,直接退出
            {
                //不能在线程中停止线程,这样会导致软件关闭进程不退出
                //_Disconnect();
            }
            else
            {
                //以前连接过,现在断了次线,要等重连
                ChangeStatus(ProviderStatus.Connecting);
                EmitDisconnectedEvent();
            }
        }
Ejemplo n.º 13
0
 private void OnErrRtnOrderAction_callback(IntPtr pTraderApi, ref CZQThostFtdcOrderActionField pOrderAction, ref CZQThostFtdcRspInfoField pRspInfo)
 {
     if (null != OnErrRtnOrderAction)
     {
         OnErrRtnOrderAction(this, new OnErrRtnOrderActionArgs(pTraderApi, ref pOrderAction, ref pRspInfo));
     }
 }
Ejemplo n.º 14
0
 public OnErrRtnOrderInsertArgs(IntPtr pTraderApi, ref CZQThostFtdcInputOrderField pInputOrder, ref CZQThostFtdcRspInfoField pRspInfo)
 {
     this.pTraderApi  = pTraderApi;
     this.pInputOrder = pInputOrder;
     this.pRspInfo    = pRspInfo;
 }
Ejemplo n.º 15
0
 private void OnErrRtnOrderInsert_callback(IntPtr pTraderApi, ref CZQThostFtdcInputOrderField pInputOrder, ref CZQThostFtdcRspInfoField pRspInfo)
 {
     if (null != OnErrRtnOrderInsert)
     {
         OnErrRtnOrderInsert(this, new OnErrRtnOrderInsertArgs(pTraderApi, ref pInputOrder, ref pRspInfo));
     }
 }
Ejemplo n.º 16
0
 private void OnRspOrderInsert_callback(IntPtr pTraderApi, ref CZQThostFtdcInputOrderField pInputOrder, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     if (null != OnRspOrderInsert)
     {
         OnRspOrderInsert(this, new OnRspOrderInsertArgs(pTraderApi, ref pInputOrder, ref pRspInfo, nRequestID, bIsLast));
     }
 }
Ejemplo n.º 17
0
 public OnErrRtnOrderActionArgs(IntPtr pTraderApi, ref CZQThostFtdcOrderActionField pOrderAction, ref CZQThostFtdcRspInfoField pRspInfo)
 {
     this.pTraderApi   = pTraderApi;
     this.pOrderAction = pOrderAction;
     this.pRspInfo     = pRspInfo;
 }
Ejemplo n.º 18
0
 private void OnRspQryTradingAccount(IntPtr pTraderApi, ref CZQThostFtdcTradingAccountField pTradingAccount, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLastt)
 {
     if (0 == pRspInfo.ErrorID)
     {
         m_TradingAccount = pTradingAccount;
         //有资金信息过来了,重新计时
         timerAccount.Enabled = false;
         timerAccount.Enabled = true;
     }
     else
     {
         tdlog.Error("nRequestID:{0},ErrorID:{1},OnRspQryTradingAccount:{2}", nRequestID, pRspInfo.ErrorID, pRspInfo.ErrorMsg);
         EmitError(nRequestID, pRspInfo.ErrorID, "OnRspQryTradingAccount:" + pRspInfo.ErrorMsg);
     }
 }
Ejemplo n.º 19
0
 private void OnRspQryDepthMarketData_callback(IntPtr pTraderApi, ref CZQThostFtdcDepthMarketDataField pDepthMarketData, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     if (null != OnRspQryDepthMarketData)
     {
         OnRspQryDepthMarketData(this, new OnRspQryDepthMarketDataArgs(pTraderApi, ref pDepthMarketData, ref pRspInfo, nRequestID, bIsLast));
     }
 }
Ejemplo n.º 20
0
 private void OnRspQryInvestorPositionDetail_callback(IntPtr pTraderApi, ref CZQThostFtdcInvestorPositionDetailField pInvestorPositionDetail, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     if (null != OnRspQryInvestorPositionDetail)
     {
         OnRspQryInvestorPositionDetail(this, new OnRspQryInvestorPositionDetailArgs(pTraderApi, ref pInvestorPositionDetail, ref pRspInfo, nRequestID, bIsLast));
     }
 }
Ejemplo n.º 21
0
 private void OnRspQryInstrumentCommissionRate_callback(IntPtr pTraderApi, ref CZQThostFtdcInstrumentCommissionRateField pInstrumentCommissionRate, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     if (null != OnRspQryInstrumentCommissionRate)
     {
         OnRspQryInstrumentCommissionRate(this, new OnRspQryInstrumentCommissionRateArgs(pTraderApi, ref pInstrumentCommissionRate, ref pRspInfo, nRequestID, bIsLast));
     }
 }
Ejemplo n.º 22
0
 private void OnRspQryTradingAccount_callback(IntPtr pTraderApi, ref CZQThostFtdcTradingAccountField pTradingAccount, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     if (null != OnRspQryTradingAccount)
     {
         OnRspQryTradingAccount(this, new OnRspQryTradingAccountArgs(pTraderApi, ref pTradingAccount, ref pRspInfo, nRequestID, bIsLast));
     }
 }
Ejemplo n.º 23
0
 private void OnRspQryOrder_callback(IntPtr pTraderApi, ref CZQThostFtdcOrderField pOrder, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     if (null != OnRspQryOrder)
     {
         OnRspQryOrder(this, new OnRspQryOrderArgs(pTraderApi, ref pOrder, ref pRspInfo, nRequestID, bIsLast));
     }
 }
Ejemplo n.º 24
0
        private void OnRspQryInstrument(IntPtr pTraderApi, ref CZQThostFtdcInstrumentField pInstrument, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
        {
            if (0 == pRspInfo.ErrorID)
            {
                //比较无语,测试平台上会显示很多无效数据,有关期货的还会把正确的数据给覆盖,所以临时这样处理
                if (pInstrument.ProductClass != TZQThostFtdcProductClassType.Futures)
                {
                    string symbol = GetYahooSymbol(pInstrument.InstrumentID, pInstrument.ExchangeID);
                    _dictInstruments[symbol] = pInstrument;

                    // 行情中可能没有交易所信息,这个容器用于容错处理
                    _dictInstruments2[pInstrument.InstrumentID] = symbol;
                }

                if (bIsLast)
                {
                    tdlog.Info("合约列表已经接收完成,共{0}条", _dictInstruments.Count);
                }
            }
            else
            {
                tdlog.Error("nRequestID:{0},ErrorID:{1},OnRspQryInstrument:{2}", nRequestID, pRspInfo.ErrorID, pRspInfo.ErrorMsg);
                EmitError(nRequestID, pRspInfo.ErrorID, "OnRspQryInstrument:" + pRspInfo.ErrorMsg);
            }
        }
Ejemplo n.º 25
0
        private void OnRspQryInstrumentCommissionRate(IntPtr pTraderApi, ref CZQThostFtdcInstrumentCommissionRateField pInstrumentCommissionRate, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
        {
            if (0 == pRspInfo.ErrorID)
            {
                _dictCommissionRate[pInstrumentCommissionRate.InstrumentID] = pInstrumentCommissionRate;
                tdlog.Info("已经接收手续费率 {0}", pInstrumentCommissionRate.InstrumentID);

                //通知单例
                CTPZQAPI.GetInstance().FireOnRspQryInstrumentCommissionRate(pInstrumentCommissionRate);
            }
            else
            {
                tdlog.Error("nRequestID:{0},ErrorID:{1},OnRspQryInstrumentCommissionRate:{2}", nRequestID, pRspInfo.ErrorID, pRspInfo.ErrorMsg);
                EmitError(nRequestID, pRspInfo.ErrorID, "OnRspQryInstrumentCommissionRate:" + pRspInfo.ErrorMsg);
            }
        }
Ejemplo n.º 26
0
 private void OnRspError(IntPtr pApi, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     tdlog.Error("nRequestID:{0},ErrorID:{1},OnRspError:{2}", nRequestID, pRspInfo.ErrorID, pRspInfo.ErrorMsg);
     EmitError(nRequestID, pRspInfo.ErrorID, pRspInfo.ErrorMsg);
 }
        private void OnErrRtnOrderAction(IntPtr pTraderApi, ref CZQThostFtdcOrderActionField pOrderAction, ref CZQThostFtdcRspInfoField pRspInfo)
        {
            SingleOrder order;
            string      strKey = string.Format("{0}:{1}:{2}", pOrderAction.FrontID, pOrderAction.SessionID, pOrderAction.OrderRef);

            if (_OrderRef2Order.TryGetValue(strKey, out order))
            {
                OrdStatus status;
                if (_PendingCancelFlags.TryGetValue(order, out status))
                {
                    _PendingCancelFlags.Remove(order);
                    EmitExecutionReport(order, status);
                }

                tdlog.Error("交易所回应:{0},价{1},变化量{2},前置{3},会话{4},引用{5},{6}#{7}",
                            pOrderAction.InstrumentID, pOrderAction.LimitPrice,
                            pOrderAction.VolumeChange,
                            pOrderAction.FrontID, pOrderAction.SessionID, pOrderAction.OrderRef,
                            pRspInfo.ErrorID, pRspInfo.ErrorMsg);

                order.Text = string.Format("{0}|{1}#{2}", order.Text.Substring(0, Math.Min(order.Text.Length, 64)), pRspInfo.ErrorID, pRspInfo.ErrorMsg);
                EmitCancelReject(order, order.OrdStatus, order.Text);
            }
        }
Ejemplo n.º 28
0
 public OnDisconnectArgs(IntPtr pApi, ref CZQThostFtdcRspInfoField pRspInfo, ConnectionStatus step)
 {
     this.pApi     = pApi;
     this.pRspInfo = pRspInfo;
     this.step     = step;
 }
        private void OnErrRtnOrderInsert(IntPtr pTraderApi, ref CZQThostFtdcInputOrderField pInputOrder, ref CZQThostFtdcRspInfoField pRspInfo)
        {
            SingleOrder order;
            string      strKey = string.Format("{0}:{1}:{2}", _RspUserLogin.FrontID, _RspUserLogin.SessionID, pInputOrder.OrderRef);

            if (_OrderRef2Order.TryGetValue(strKey, out order))
            {
                tdlog.Error("交易所回应:{0},{1},开平{2},价{3},原量{4},引用{5},{6}#{7}",
                            pInputOrder.InstrumentID, pInputOrder.Direction, pInputOrder.CombOffsetFlag, pInputOrder.LimitPrice,
                            pInputOrder.VolumeTotalOriginal,
                            pInputOrder.OrderRef, pRspInfo.ErrorID, pRspInfo.ErrorMsg);

                order.Text = string.Format("{0}|{1}#{2}", order.Text.Substring(0, Math.Min(order.Text.Length, 64)), pRspInfo.ErrorID, pRspInfo.ErrorMsg);
                EmitRejected(order, order.Text);
                //没得办法,这样全撤了状态就唯一了
                Dictionary <string, CZQThostFtdcOrderField> _Ref2Action;
                if (_Orders4Cancel.TryGetValue(order, out _Ref2Action))
                {
                    lock (_Ref2Action)
                    {
                        _Ref2Action.Remove(strKey);
                        if (0 == _Ref2Action.Count())
                        {
                            _Orders4Cancel.Remove(order);
                            return;
                        }
                        Cancel(order);
                    }
                }
            }
        }
Ejemplo n.º 30
0
        //#region 保证金率列表
        //private void OnRspQryInstrumentMarginRate(IntPtr pTraderApi, ref CZQThostFtdcInstrumentMarginRateField pInstrumentMarginRate, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
        //{
        //    if (0 == pRspInfo.ErrorID)
        //    {
        //        _dictMarginRate[pInstrumentMarginRate.InstrumentID] = pInstrumentMarginRate;
        //        Console.WriteLine("TdApi:{0},已经接收保证金率 {1}",
        //                Clock.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"),
        //                pInstrumentMarginRate.InstrumentID);

        //        Console.WriteLine("{0},{1},{2},{3}", pInstrumentMarginRate.LongMarginRatioByMoney, pInstrumentMarginRate.LongMarginRatioByVolume,
        //            pInstrumentMarginRate.ShortMarginRatioByMoney, pInstrumentMarginRate.ShortMarginRatioByVolume);

        //        //通知单例
        //        CTPZQAPI.GetInstance().FireOnRspQryInstrumentMarginRate(pInstrumentMarginRate);
        //    }
        //    else
        //        EmitError(nRequestID, pRspInfo.ErrorID, "OnRspQryInstrumentMarginRate:" + pRspInfo.ErrorMsg);
        //}
        //#endregion

        #region 持仓回报
        private void OnRspQryInvestorPosition(IntPtr pTraderApi, ref CZQThostFtdcInvestorPositionField pInvestorPosition, ref CZQThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
        {
            if (0 == pRspInfo.ErrorID)
            {
                _dbInMemInvestorPosition.InsertOrReplace(
                    pInvestorPosition.InstrumentID,
                    pInvestorPosition.PosiDirection,
                    pInvestorPosition.HedgeFlag,
                    pInvestorPosition.PositionDate,
                    pInvestorPosition.Position,
                    pInvestorPosition.LongFrozen,
                    pInvestorPosition.ShortFrozen);
                timerPonstion.Enabled = false;
                timerPonstion.Enabled = true;
            }
            else
            {
                tdlog.Error("nRequestID:{0},ErrorID:{1},OnRspQryInvestorPosition:{2}", nRequestID, pRspInfo.ErrorID, pRspInfo.ErrorMsg);
                EmitError(nRequestID, pRspInfo.ErrorID, "OnRspQryInvestorPosition:" + pRspInfo.ErrorMsg);
            }
        }