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();
            }
        }
예제 #2
0
        /// <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);
        }