public void Should_Resample_Bars_From_Ticks() { // Arrange var ticks = TickMessage.ParseFromFile(TestData.TestData.GetFileName(TestDataType.Ticks, DataDirection.Oldest)).ToList(); var intervals = IntervalMessage.ParseFromFile(TestData.TestData.GetFileName(TestDataType.Intervals_1s, DataDirection.Oldest)).ToList(); // Act var bars = ticks.ToHistoricalBars(TimeSpan.FromSeconds(1), DataDirection.Oldest).ToList().ToList(); // Assert Assert.IsNotEmpty(intervals); Assert.AreEqual(intervals.Count, bars.Count); for (var i = 0; i < intervals.Count; i++) { var interval = intervals[i]; var bar = bars[i]; // TODO: create comparable if (interval.Timestamp == bar.Timestamp && interval.Open == bar.Open && interval.High == bar.High && interval.Low == bar.Low && interval.Close == bar.Close && interval.PeriodVolume == bar.PeriodVolume && interval.TotalVolume == bar.TotalVolume) { continue; } throw new Exception(); } }
/// <summary> /// Stream IQFeed IntervalMessage from disk to Lean TradeBar /// </summary> /// <param name="filename"></param> /// <param name="request"></param> /// <returns>Converted TradeBar</returns> private IEnumerable <BaseData> GetDataFromIntervalMessages(string filename, HistoryRequest request) { var dataTimeZone = _marketHoursDatabase.GetDataTimeZone(request.Symbol.ID.Market, request.Symbol, request.Symbol.SecurityType); foreach (var interval in IntervalMessage.ParseFromFile(filename)) { var iStartTime = interval.Timestamp; iStartTime = iStartTime.ConvertTo(TimeZones.NewYork, dataTimeZone); yield return(new TradeBar( iStartTime, request.Symbol, (decimal)interval.Open, (decimal)interval.High, (decimal)interval.Low, (decimal)interval.Close, interval.PeriodVolume )); } File.Delete(filename); }