private IKLineData GetKLineData(string code, KLinePeriod klinePeriod, IList <int> openDates, float lastEndPrice, int lastEndHold) { List <IKLineData> klineDataList = new List <IKLineData>(); for (int i = 0; i < openDates.Count; i++) { int openDate = openDates[i]; IKLineData klineData = GetKLineData(code, openDate, klinePeriod); if (klineData != null) { klineDataList.Add(klineData); lastEndPrice = klineData.Arr_End[klineData.Length - 1]; lastEndHold = klineData.Arr_Hold[klineData.Length - 1]; } else { IList <double[]> tradingTime = GetTradingTime(code, openDate); IList <double[]> klineTimes = TradingTimeUtils.GetKLineTimeList(tradingTime, klinePeriod); klineData = DataTransfer_Tick2KLine.GetEmptyKLineData(klineTimes, lastEndPrice, lastEndHold); klineDataList.Add(klineData); } } return(KLineData.Merge(klineDataList)); }
/// <summary> /// 将一天的tick数据转换为K线 /// </summary> /// <param name="tickData"></param> /// <param name="tradingPeriod"></param> /// <param name="klinePeriod"></param> /// <returns></returns> public static IKLineData Transfer(ITickData tickData, IList <double[]> tradingPeriod, KLinePeriod klinePeriod, float yesterdayEndPrice, int yesterdayEndHold) { if (tickData == null) { return(null); } List <double[]> klineTimeList = TradingTimeUtils.GetKLineTimeList(tradingPeriod, klinePeriod); DataTransfer_Tick2KLine transfer = new DataTransfer_Tick2KLine(tickData, klineTimeList, yesterdayEndPrice, yesterdayEndHold); return(transfer.CalcKLineData()); }
private List <double[]> GetTimeArr(string code, List <ITickData> tickData, List <double[]> openTime) { ITickData mainTick = GetMainTickData(tickData); int tradingDay = mainTick.TradingDay; IList <double[]> tradingTime = dataUpdateHelper.GetTradingTime(code, tradingDay).TradingPeriods;//GetTradingSessionDetailReader().GetTradingTime(code, tradingDay); return(TradingTimeUtils.GetKLineTimeList(tradingTime, new KLinePeriod(KLineTimeType.SECOND, 1))); //int prevTradingDay = dataUpdateHelper.GetUpdatedTradingDayReader().GetPrevTradingDay(tradingDay); //List<double[]> tradingTime = dataUpdateHelper.GetTradingSessionDetailReader().GetTradingTime(mainTick.Code, tradingDay); //List<double[]> times =TradingTimeUtils.GetKLineTimeList_Full(tradingTime, new KLinePeriod(KLineTimeType.SECOND, 1)); //List<double> timeArr = new List<double>(times.Count); //int dateStart = (int)mainTick.Arr_Time[0]; //int dateEnd = (int)mainTick.Arr_Time[mainTick.Length - 1]; //if (dateStart == dateEnd) //{ // for (int i = 0; i < times.Count; i++) // { // //times[i] = dateStart + times[i]; // timeArr.Add(times[i][0]); // } //} //else //{ // bool isNextDay = false; // int between = dateEnd - dateStart; // for (int i = 0; i < times.Count; i++) // { // if (i != 0 && !isNextDay) // isNextDay = times[i - 1] > times[i]; // int dateAdd = isNextDay ? between : 0; // //times[i] = date + times[i]; // timeArr.Add(dateAdd + times[i]); // } //} //return timeArr; }