/// <summary>
        /// CTP InvestorPositionField To USePositionDetail,
        /// (注 :此方法只是针对有昨日持仓的持仓信息来构造USePositionDetail。
        /// </summary>
        /// <param name="field"></param>
        /// <returns></returns>
        private USePositionDetail CtpInvestorPositonFieldToUSePositionDetail(InvestorPositionField field)
        {
            if (field.YdPosition <= 0)
            {
                return(null);                       // 只能生成历史持仓
            }
            USePositionDetail positionDetail = new USePositionDetail();

            positionDetail.Instrument = m_dataBuffer.GetInstrumnetByCode(field.InstrumentID.Trim());
            switch (field.PosiDirection)
            {
            case PosiDirectionType.Long: positionDetail.Direction = USeDirection.Long; break;

            case PosiDirectionType.Short: positionDetail.Direction = USeDirection.Short; break;

            default:
                Debug.Assert(false, "Invalid PosiDirection");
                break;
            }
            positionDetail.PositionType = USePositionType.Yestorday;
            positionDetail.OpenQty      = field.YdPosition;
            positionDetail.OpenPrice    = Convert.ToDecimal(field.PreSettlementPrice); // 昨仓取昨日结算价为建仓价
            positionDetail.OpenTime     = DateTime.Today.AddDays(-1);                  // 建仓时间设为昨日日期
            positionDetail.CloseQty     = 0;
            positionDetail.ClosePrice   = 0m;
            positionDetail.CloseAmount  = 0m;
            return(positionDetail);
        }
        /// <summary>
        /// CTP InvestorPositionField To USePosition。
        /// </summary>
        /// <param name="field"></param>
        /// <returns></returns>
        private USePosition CtpInvestorPositonFieldToUSePosition(InvestorPositionField field)
        {
            USePosition position = new USePosition();

            position.Instrument = m_dataBuffer.GetInstrumnetByCode(field.InstrumentID.Trim());
            Debug.Assert(position.Instrument != null && position.InstrumentCode == field.InstrumentID.Trim(), "position.Instrument is null");

            int volumeMultiple = m_dataBuffer.GetVolumeMultiple(position.Instrument);

            switch (field.PosiDirection)
            {
            case PosiDirectionType.Long: position.Direction = USeDirection.Long; break;

            case PosiDirectionType.Short: position.Direction = USeDirection.Short; break;

            default:
                Debug.Assert(false, "Invalid PosiDirection");
                break;
            }
            position.NewPosition       = field.TodayPosition;
            position.YesterdayPosition = field.YdPosition;
            position.OldPosition       = field.Position - field.TodayPosition;
            position.AvgPirce          = 0m;
            position.Amount            = 0m;
            position.OpenQty           = field.OpenVolume;
            position.CloseQty          = field.CloseVolume;

            return(position);
        }