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)); }
/// <summary> /// 构建函数 /// </summary> /// <param name="date">指定要transfer的日期</param> /// <param name="data">要转换的tick数据</param> /// <param name="openDateReader">开盘日读取器,传入该接口是为了得到</param> /// <param name="opentime"></param> /// <param name="targetPeriod"></param> /// <param name="lastKLineData"></param> public DataTransfer_Tick2KLine2(TickData data, IKLineData lastKLineData, OpenTimeUtilsArgs openTimeUtilsArgs) { this.tickData = data; this.lastKLineData = lastKLineData; this.klineTimes = OpenTimeUtils.GetKLineTimeList(openTimeUtilsArgs); }
public static KLineData Transfer(TickData data, IKLineData lastKLineData, OpenTimeUtilsArgs args) { DataTransfer_Tick2KLine2 transfer = new DataTransfer_Tick2KLine2(data, lastKLineData, args); return(transfer.CalcKLineData()); }