/// <summary> /// 得到股票或期货的K线数据 /// </summary> /// <param name="code"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="klinePeriod"></param> /// <returns></returns> public virtual IKLineData GetKLineData(String code, int startDate, int endDate, KLinePeriod klinePeriod) { IList <int> tradingDays = GetTickDataDays(code);// GetTradingDays(); if (tradingDays == null) { return(null); } CacheUtils_TradingDay cache = new CacheUtils_TradingDay(tradingDays); IList <int> openDates = cache.GetTradingDays(startDate, endDate); if (openDates == null || openDates.Count == 0) { return(null); } float lastEndPrice = -1; int lastEndHold = -1; int prevTradingDay = cache.GetPrevTradingDay(openDates[0]); //找到之前交易日的收盘价和收盘持仓 if (prevTradingDay > 0) { ITickData tickData = GetTickData(code, prevTradingDay); lastEndPrice = tickData.Arr_Price[tickData.Length - 1]; lastEndHold = tickData.Arr_Hold[tickData.Length - 1]; } //如果存在该周期的源数据直接生成,否则用1分钟K线生成 if (Exist(code, openDates[0], klinePeriod)) { return(GetKLineData(code, klinePeriod, openDates, lastEndPrice, lastEndHold)); } IKLineData oneMinuteKLine = GetKLineData(code, KLinePeriod.KLinePeriod_1Minute, openDates, lastEndPrice, lastEndHold); if (oneMinuteKLine.Length == 0) { return(null); } IList <ITradingTime> sessions = GetTradingTime(code); if (sessions == null) { return(null); } return(DataTransfer_KLine2KLine.Transfer(oneMinuteKLine, klinePeriod, new CacheUtils_TradingTime(code, GetTradingTime(code)))); }
public IKLineData GetData(String code, int startDate, int endDate, KLinePeriod period) { if (period.PeriodType == KLineTimeType.MINUTE) { if (period.Period == 1 || period.Period == 15) { return(LoadKLineData(code, startDate, endDate, period)); } IKLineData data = LoadKLineData(code, startDate, endDate, new KLinePeriod(KLineTimeType.MINUTE, 1)); return(DataTransfer_KLine2KLine.Transfer(data, period, null)); } if (period.PeriodType == KLineTimeType.HOUR) { if (period.Period == 1) { return(LoadKLineData(code, startDate, endDate, period)); } IKLineData data = LoadKLineData(code, startDate, endDate, new KLinePeriod(KLineTimeType.HOUR, 1)); return(DataTransfer_KLine2KLine.Transfer(data, period, null)); } if (period.PeriodType == KLineTimeType.DAY) { if (period.Period == 1) { return(LoadKLineData(code, startDate, endDate, period)); } IKLineData data = LoadKLineData(code, startDate, endDate, new KLinePeriod(KLineTimeType.DAY, 1)); return(DataTransfer_KLine2KLine.Transfer(data, period, null)); } if (period.PeriodType == KLineTimeType.SECOND) { //return LoadKLineData_Second(code, startDate, endDate, period); return(dataReaderExtend.GetKLineData_Second(code, startDate, endDate, period)); } //return LoadKLineData(code, startDate, endDate, period); throw new ArgumentException("暂未实现"); }