/// <summary> /// 把 count 个 Bar 合并成一个新的 Bar /// </summary> /// <param name="series"></param> /// <param name="inst"></param> /// <param name="count"></param> /// <returns></returns> public static BarSeries MergeCompress(this BarSeries series, Instrument inst, long count) { if (series.Count == 0 || count < 2) { return(new BarSeries()); } var selector = new TimeRangeSelector(inst); bool emitOnClose = !(series[0].Size >= QuantBoxConst.DayBarSize); var bars = new BarSeries(); Bar last = null; var index = 0; foreach (var bar in series) { var range = selector.Get(bar.DateTime.Date); if (index == 0) { last = bar; last.Size *= count; } else { QBHelper.MergeBar(last, bar); } ++index; if (index == count || (emitOnClose && bar.CloseDateTime.TimeOfDay == range.CloseTime)) { bars.Add(last); last = null; index = 0; } } return(bars); }
/// <summary> /// 把 count 个 Bar 合并成一个新的 Bar /// </summary> /// <param name="series"></param> /// <param name="inst"></param> /// <param name="count"></param> /// <returns></returns> public static BarSeries MergeCompress(this BarSeries series, Instrument inst, long count) { if (series.Count == 0 || count < 2) { return(new BarSeries()); } var selector = new TimeRangeSelector(inst); var emitOnClose = true; var bar = series[0]; if (bar.Size >= QuantBoxConst.DayBarSize) { emitOnClose = false; } var bars = new BarSeries(); Bar last = null; var index = 0; for (int i = 0; i < series.Count; i++) { var range = selector.Get(series[i].DateTime.Date); if (index == 0) { last = series[i]; last.Size *= count; } else { QBHelper.MergeBar(last, series[i]); } ++index; if (index == count || (emitOnClose && series[i].CloseDateTime.TimeOfDay == range.CloseTime)) { bars.Add(last); last = null; index = 0; continue; } } return(bars); }