private static List <double> GetTodayTimePeriods(TickData data, List <double[]> openTime, KLinePeriod targetPeriod) { List <double> timePeriods = TimeUtils.GetKLineTimes(openTime, targetPeriod); int startDate = GetDate(data, 0); int endDate = GetDate(data, data.Length - 1); List <double> periods = new List <double>(timePeriods.Count); if (startDate == endDate) { for (int i = 0; i < timePeriods.Count; i++) { periods.Add(Math.Round(startDate + timePeriods[i], 6)); } } else { /* * 四种情况: * 1.无夜盘,直接生成即可:如20100105090000、... * 2.有夜盘,但夜盘不过夜:如20160329210000、...、20160329233000、...、20160330090000 * 3.有夜盘,要过夜,不是周末:如20150324210000、...、20150325023000、...、20150325090000 * 4.有夜盘,要过夜,而且是周末:如20141226210000、...、20141227023000、...、20141229090000 */ int date = startDate; bool dayChanged = false; for (int i = 0; i < timePeriods.Count; i++) { if (i != 0 && date != endDate) { double currentTime = timePeriods[i]; if (isDayChange(timePeriods[i - 1], currentTime)) { if (dayChanged || currentTime > 0.06) { date = endDate; } else { date = (int)TimeUtils.AddDays(startDate, 1); if (date == endDate) { date = endDate; } } dayChanged = true; } } periods.Add(Math.Round(date + timePeriods[i], 6)); } } return(periods); }
private double[] GetFullTradingTime(double[] tradingTime, int lastTradingDay, int tradingDay) { double startTime = tradingTime[0]; double endTime = tradingTime[1]; int startDay = startTime > 0.18 ? lastTradingDay : tradingDay; if (endTime < startTime) { int secondDay = (int)Math.Round(TimeUtils.AddDays(startDay, 1)); return(new double[] { startDay + tradingTime[0], secondDay + tradingTime[1] }); } else { return new double[] { startDay + tradingTime[0], startDay + tradingTime[1] } }; }
public void Change(string code, double time, KLinePeriod period) { if (this.code == code && this.period.Equals(period) && IsInCurrentKLineData(time)) { ChangeTime(time); return; } dataCache_Code = dataCacheFac.CreateCache_Code(code); int extendBefore = 30; int extendAfter = 30; if (period.PeriodType == KLineTimeType.MINUTE) { extendBefore = 30; extendAfter = 30; } else if (period.PeriodType == KLineTimeType.HOUR) { extendBefore = 100; extendAfter = 100; } else if (period.PeriodType == KLineTimeType.DAY) { extendBefore = 2000; extendAfter = 2000; } int date = (int)time; int start = (int)TimeUtils.AddDays(date, -extendBefore); int end = (int)TimeUtils.AddDays(date, extendAfter); KLineData data = (KLineData)dataReaderFac.KLineDataReader.GetData(code, start, end, period); this.klineData = new KLineData_RealTime(data); this.code = code; this.period = period; ChangeTime(time); }