public IKLineData GetKLineData(string code, int startDate, int endDate, KLinePeriod period) { ITradingDayReader openDateReader = dataReaderFactory.OpenDateReader; IList <int> openDates = openDateReader.GetOpenDates(startDate, endDate); int prevOpenDate = openDateReader.GetPrevOpenDate(startDate); IKLineData lastKLineData = dataReaderFactory.KLineDataReader.GetData(code, prevOpenDate, prevOpenDate, period); List <IKLineData> klineDataList = new List <IKLineData>(); for (int i = 0; i < openDates.Count; i++) { int openDate = openDates[i]; TickData tickdata = dataReaderFactory.TickDataReader.GetTickData(code, openDate); if (tickdata != null) { List <double[]> openTimes = dataProvider.GetOpenTime(code, openDate); OpenTimeUtilsArgs args = new OpenTimeUtilsArgs(openDate, openDateReader, openTimes, period); KLineData klineData = DataTransfer_Tick2KLine2.Transfer(tickdata, lastKLineData, args); klineDataList.Add(klineData); } } if (klineDataList.Count == 0) { return(null); } return(KLineData.Merge(klineDataList)); }
private IKLineData UpdateByTick(string code, DataReaderFactory dataReaderFactory, KLinePeriod period) { String path = utils.GetKLineDataPath(code, period); KLineDataStore store = new KLineDataStore(path); int lastDate = (int)store.GetLastTime(); List <int> openDates = dataProvider.GetOpenDates(); int lastIndex; if (lastDate < 0) { lastIndex = -1; } else { lastIndex = openDates.IndexOf(lastDate); } float lastPrice = -1; List <IKLineData> klineDataList = new List <IKLineData>(); for (int i = lastIndex + 1; i < openDates.Count; i++) { int openDate = openDates[i]; TickData tickdata = dataReaderFactory.TickDataReader.GetTickData(code, openDate); if (tickdata != null) { List <double[]> openTimes = dataProvider.GetOpenTime(code, openDate); KLineData klineData = DataTransfer_Tick2KLine.Transfer(tickdata, period, openTimes, lastPrice); klineDataList.Add(klineData); lastPrice = klineData.arr_end[klineData.Length - 1]; } } if (klineDataList.Count == 0) { return(null); } IKLineData data = KLineData.Merge(klineDataList); store.Append(data); return(data); }