public static DateTime Offset(MongoDataReader w, BaseDataItemClass SecItem, DateTime dt, int N, Cycle cyc) { DateTime begt = SecItem.Ipo_date; if (SecItem.SecType == SecType.Index) { //指数不停牌,自然日按交易日*7/5,放大到10/2=2倍指定开始日 switch (cyc) { case Cycle.Day: { begt = dt.AddDays(-2 * N); break; } case Cycle.Week: { begt = dt.AddDays(-7 * N); break; } case Cycle.Month: { begt = dt.AddMonths(N); break; } case Cycle.Year: { begt = dt.AddYears(N); break; } } } if (begt.CompareTo(SecItem.Ipo_date) < 0)//任何情况(index的ipo日期为1899-12-31)如果开始日期小于ipo日期,开始日期设置为Ipo日期。 { begt = SecItem.Ipo_date; } BaseDataTable tb = CommMGToolClass.GetBaseSerialData( w, SecItem.WindCode, begt, dt, Cycle.Day, PriceAdj.UnDo, BaseDataPoint.trade_status, BaseDataPoint.sec_type); BaseDataTable ttb = tb.AvaliableData; if (ttb.Count == 0) { return(dt); //如果数据为空,返回回览日 } if (ttb.Count > N) { return(((BaseDataItemClass)ttb[ttb.Count - N]).DateTime); } return(((BaseDataItemClass)ttb[0]).DateTime); }
public static DateTime LastTradeDay(MongoDataReader w, string SecCode, DateTime dt) { BaseDataTable tb = CommMGToolClass.GetBaseSerialData(w, SecCode, dt.AddDays(-1000), dt, Cycle.Day, PriceAdj.UnDo, BaseDataPoint.trade_status, BaseDataPoint.sec_type, BaseDataPoint.close); BaseDataTable ttb = tb.AvaliableData; if (ttb.Count == 0) { return(DateTime.MinValue); } return(((BaseDataItemClass)ttb[ttb.Count - 1]).DateTime); }