/// <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); }