public Bars ToLargerScaleInterval(BarScaleInterval scaleIntervalTo) { if (this.ScaleInterval == scaleIntervalTo) { return(this); } this.checkThrowCanConvert(scaleIntervalTo); Bars barsConverted = this.CloneNoBars(this.ReasonToExist + "=>[" + scaleIntervalTo + "]", scaleIntervalTo); if (this.Count == 0) { return(barsConverted); } Bar barFromFirst = this[0]; Bar barCompressing = new Bar(this.Symbol, scaleIntervalTo, barFromFirst.DateTimeOpen); // I'm happy with RoundDateDownInitTwoAuxDates() barCompressing.AbsorbOHLCVfrom(barFromFirst); for (int i = 1; i < this.Count; i++) { Bar barEach = this[i]; if (barEach.DateTimeOpen >= barCompressing.DateTimeNextBarOpenUnconditional) { barsConverted.BarAppendBindStatic(barCompressing); barCompressing = new Bar(this.Symbol, scaleIntervalTo, barEach.DateTimeOpen); barCompressing.AbsorbOHLCVfrom(barEach); } else { barCompressing.MergeExpandHLCVwhileCompressingManyBarsToOne(barEach); } } return(barsConverted); }
public Bars ToLargerScaleInterval(BarScaleInterval scaleIntervalTo) { if (this.ScaleInterval == scaleIntervalTo) return this; this.checkThrowCanConvert(scaleIntervalTo); Bars barsConverted = this.CloneNoBars(this.ReasonToExist + "=>[" + scaleIntervalTo + "]", scaleIntervalTo); if (this.Count == 0) return barsConverted; Bar barFromFirst = this[0]; Bar barCompressing = new Bar(this.Symbol, scaleIntervalTo, barFromFirst.DateTimeOpen); // I'm happy with RoundDateDownInitTwoAuxDates() barCompressing.AbsorbOHLCVfrom(barFromFirst); for (int i = 1; i < this.Count; i++) { Bar barEach = this[i]; if (barEach.DateTimeOpen >= barCompressing.DateTimeNextBarOpenUnconditional) { barsConverted.BarAppendBindStatic(barCompressing); barCompressing = new Bar(this.Symbol, scaleIntervalTo, barEach.DateTimeOpen); barCompressing.AbsorbOHLCVfrom(barEach); } else { barCompressing.MergeExpandHLCVwhileCompressingManyBarsToOne(barEach); } } return barsConverted; }