public void YieldsGroupOfDataEachSecond() { for (int i = 0; i < DataPerTimeStep; i++) { Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current, $"Index {i} is null."); Assert.AreEqual(_referenceLocal, _enumerator.Current.EndTime); } Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); _timeProvider.AdvanceSeconds(1); for (int i = 0; i < DataPerTimeStep; i++) { Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal.AddSeconds(1), _enumerator.Current.EndTime); } Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); _dataSourceReader.Verify(dsr => dsr.Read(It.Is <SubscriptionDataSource>(sds => sds.Source == "rest.collection.source" && sds.TransportMedium == SubscriptionTransportMedium.Rest && sds.Format == FileFormat.Collection)) , Times.Once); }
public void YieldsDataEachSecondAsTimePasses() { Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal, _enumerator.Current.EndTime); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); _timeProvider.AdvanceSeconds(1); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal.AddSeconds(1), _enumerator.Current.EndTime); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); _dataSourceReader.Verify(dsr => dsr.Read(It.Is <SubscriptionDataSource>(sds => sds.Source == "rest.source" && sds.TransportMedium == SubscriptionTransportMedium.Rest && sds.Format == FileFormat.Csv)) , Times.Once); }
public void ConsumesMultipleMinutes() { var timeProvider = new ManualTimeProvider(new DateTime(2000, 01, 01)); var provider = new FakeIsolatorLimitResultProvider(); Action code = () => { // lets give the monitor time to register the initial time Thread.Sleep(50); for (int i = 0; i < 4; i++) { timeProvider.AdvanceSeconds(45); // give the monitoring task time to request more time Thread.Sleep(20); } }; provider.Consume(timeProvider, code, _timeMonitor); Assert.AreEqual(3, provider.Invocations.Count); Assert.IsTrue(provider.Invocations.TrueForAll(invoc => invoc == 1)); // give time to the monitor to register the time consumer ended Thread.Sleep(50); Assert.AreEqual(0, _timeMonitor.Count); }
public void YieldsDataEachSecondAsTimePasses() { // most recent 5 seconds of data for (int i = 5; i > 0; i--) { Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal.AddSeconds(-i), _enumerator.Current.EndTime); } // first data point Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal, _enumerator.Current.EndTime); _timeProvider.AdvanceSeconds(1); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal.AddSeconds(1), _enumerator.Current.EndTime); _dataSourceReader.Verify(dsr => dsr.Read(It.Is <SubscriptionDataSource>(sds => sds.Source == "remote.file.source" && sds.TransportMedium == SubscriptionTransportMedium.RemoteFile && sds.Format == FileFormat.Csv)) , Times.Once); }
public void YieldsGroupOfDataEachSecond() { for (int i = 0; i < DataPerTimeStep; i++) { Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current, $"Index {i} is null."); Assert.AreEqual(_referenceLocal, _enumerator.Current.EndTime); } Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); _timeProvider.AdvanceSeconds(1); for (int i = 0; i < DataPerTimeStep; i++) { Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal.AddSeconds(1), _enumerator.Current.EndTime); } Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); VerifyGetSourceInvocationCount(_dataSourceReader, 1, "rest.collection.source", SubscriptionTransportMedium.Rest, FileFormat.UnfoldingCollection); }
private void ConsumeBridge(IDataFeed feed, TimeSpan timeout, bool alwaysInvoke, Action <TimeSlice> handler, bool noOutput = true) { var endTime = DateTime.UtcNow.Add(timeout); bool startedReceivingata = false; foreach (var timeSlice in feed) { if (!noOutput) { ConsoleWriteLine("\r\n" + $"Now (EDT): {DateTime.UtcNow.ConvertFromUtc(TimeZones.NewYork):o}" + $". TimeSlice.Time (EDT): {timeSlice.Time.ConvertFromUtc(TimeZones.NewYork):o}"); } if (!startedReceivingata && timeSlice.Slice.Count != 0) { startedReceivingata = true; } if (startedReceivingata || alwaysInvoke) { handler(timeSlice); } _algorithm.OnEndOfTimeStep(); _manualTimeProvider.AdvanceSeconds(1); if (endTime <= DateTime.UtcNow) { feed.Exit(); return; } } }
public void YieldsFutureDataAtCorrectTime() { var currentTime = new DateTime(2015, 10, 13); var timeProvider = new ManualTimeProvider(currentTime); var underlying = new List <Tick> { new Tick { Time = currentTime.AddSeconds(10) } }; var offsetProvider = new TimeZoneOffsetProvider(DateTimeZone.Utc, new DateTime(2015, 1, 1), new DateTime(2016, 1, 1)); var frontierAware = new FrontierAwareEnumerator(underlying.GetEnumerator(), timeProvider, offsetProvider); for (int i = 0; i < 10; i++) { timeProvider.AdvanceSeconds(1); Assert.IsTrue(frontierAware.MoveNext()); if (i < 9) { Assert.IsNull(frontierAware.Current); } else { Assert.IsNotNull(frontierAware.Current); Assert.AreEqual(underlying[0], frontierAware.Current); } } }
public void RespectsCustomStepEvaluator() { var startTime = new DateTime(2018, 1, 1); var manualTimeProvider = new ManualTimeProvider(startTime); var stepTimeProvider = new PredicateTimeProvider(manualTimeProvider, // only step when minute is a pair number time => time.Minute % 2 == 0); Assert.AreEqual(manualTimeProvider.GetUtcNow(), stepTimeProvider.GetUtcNow()); manualTimeProvider.AdvanceSeconds(45 * 60); // advance 45 minutes, past the interval // still the same because 45 minutes isn't pair Assert.AreEqual(startTime, stepTimeProvider.GetUtcNow()); Assert.AreNotEqual(manualTimeProvider.GetUtcNow(), stepTimeProvider.GetUtcNow()); manualTimeProvider.AdvanceSeconds(60); Assert.AreEqual(manualTimeProvider.GetUtcNow(), stepTimeProvider.GetUtcNow()); }
public void YieldsDataWhenFrontierPasses() { var currentTime = new DateTime(2015, 10, 13); var timeProvider = new ManualTimeProvider(currentTime); var underlying = new List <Tick> { new Tick { Time = currentTime.AddSeconds(1) } }; var offsetProvider = new TimeZoneOffsetProvider(DateTimeZone.Utc, new DateTime(2015, 1, 1), new DateTime(2016, 1, 1)); var frontierAware = new FrontierAwareEnumerator(underlying.GetEnumerator(), timeProvider, offsetProvider); timeProvider.AdvanceSeconds(1); Assert.IsTrue(frontierAware.MoveNext()); Assert.IsNotNull(frontierAware.Current); Assert.AreEqual(underlying[0], frontierAware.Current); }
private void ConsumeBridge(IDataFeed feed, TimeSpan timeout, bool alwaysInvoke, Action <TimeSlice> handler, bool noOutput = true, bool sendUniverseData = false) { var endTime = DateTime.UtcNow.Add(timeout); bool startedReceivingata = false; var cancellationTokenSource = new CancellationTokenSource(); foreach (var timeSlice in _synchronizer.StreamData(cancellationTokenSource.Token)) { if (!noOutput) { ConsoleWriteLine("\r\n" + $"Now (EDT): {DateTime.UtcNow.ConvertFromUtc(TimeZones.NewYork):o}" + $". TimeSlice.Time (EDT): {timeSlice.Time.ConvertFromUtc(TimeZones.NewYork):o}"); } if (!startedReceivingata && (timeSlice.Slice.Count != 0 || sendUniverseData && timeSlice.UniverseData.Count > 0)) { startedReceivingata = true; } if (startedReceivingata || alwaysInvoke) { handler(timeSlice); } _algorithm.OnEndOfTimeStep(); _manualTimeProvider.AdvanceSeconds(1); Thread.Sleep(1); if (endTime <= DateTime.UtcNow) { feed.Exit(); cancellationTokenSource.Cancel(); return; } } }
public void LimitsBasedOnTimeBetweenCalls() { var currentTime = new DateTime(2015, 10, 10, 13, 6, 0); var timeProvider = new ManualTimeProvider(currentTime, TimeZones.Utc); var data = Enumerable.Range(0, 100).Select(x => new Tick { Symbol = x.ToString() }).GetEnumerator(); var rateLimit = new RateLimitEnumerator(data, timeProvider, Time.OneSecond); Assert.IsTrue(rateLimit.MoveNext()); while (rateLimit.MoveNext() && rateLimit.Current == null) { timeProvider.AdvanceSeconds(0.1); } var delta = (timeProvider.GetUtcNow() - currentTime).TotalSeconds; Assert.AreEqual(1, delta); Assert.AreEqual("1", data.Current.Symbol.ToString()); }
public void YieldsDataEachSecondAsTimePasses() { Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal, _enumerator.Current.EndTime); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); _timeProvider.AdvanceSeconds(1); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal.AddSeconds(1), _enumerator.Current.EndTime); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNull(_enumerator.Current); VerifyGetSourceInvocationCount(_dataSourceReader, 1, "rest.source", SubscriptionTransportMedium.Rest, FileFormat.Csv); }
public void YieldsDataEachSecondAsTimePasses() { // most recent 5 seconds of data for (int i = 5; i > 0; i--) { Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal.AddSeconds(-i), _enumerator.Current.EndTime); } // first data point Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal, _enumerator.Current.EndTime); _timeProvider.AdvanceSeconds(1); Assert.IsTrue(_enumerator.MoveNext()); Assert.IsNotNull(_enumerator.Current); Assert.AreEqual(_referenceLocal.AddSeconds(1), _enumerator.Current.EndTime); VerifyGetSourceInvocationCount(_dataSourceReader, 1, "remote.file.source", SubscriptionTransportMedium.RemoteFile, FileFormat.Csv); }
public void ForceScanQuoteBar() { var reference = new DateTime(2020, 2, 2, 1, 0, 0); var timeProvider = new ManualTimeProvider(reference); var dateTimeZone = DateTimeZone.ForOffset(Offset.FromHours(-5)); var enumerator = new ScannableEnumerator <Data.BaseData>( new TickQuoteBarConsolidator(TimeSpan.FromMinutes(1)), dateTimeZone, timeProvider, (s, e) => { } ); var tick1 = new Tick { Symbol = Symbols.SPY, Time = reference.ConvertFromUtc(dateTimeZone), BidPrice = 10, BidSize = 20, TickType = TickType.Quote }; enumerator.Update(tick1); var tick2 = new Tick { Symbol = Symbols.SPY, Time = reference.AddSeconds(1).ConvertFromUtc(dateTimeZone), AskPrice = 20, AskSize = 10, TickType = TickType.Quote }; enumerator.Update(tick2); Assert.IsTrue(enumerator.MoveNext()); Assert.IsNull(enumerator.Current); var tick3 = new Tick { Symbol = Symbols.SPY, Time = reference.AddSeconds(2).ConvertFromUtc(dateTimeZone), BidPrice = 12, BidSize = 50, TickType = TickType.Quote }; enumerator.Update(tick3); Assert.IsTrue(enumerator.MoveNext()); Assert.IsNull(enumerator.Current); var tick4 = new Tick { Symbol = Symbols.SPY, Time = reference.AddSeconds(3).ConvertFromUtc(dateTimeZone), AskPrice = 17, AskSize = 15, TickType = TickType.Quote }; enumerator.Update(tick4); Assert.IsTrue(enumerator.MoveNext()); Assert.IsNull(enumerator.Current); timeProvider.AdvanceSeconds(120); Assert.IsTrue(enumerator.MoveNext()); Assert.IsNotNull(enumerator.Current); QuoteBar quoteBar = enumerator.Current as QuoteBar; Assert.IsNotNull(quoteBar); Assert.AreEqual(Symbols.SPY, quoteBar.Symbol); Assert.AreEqual(tick1.Time, quoteBar.Time); Assert.AreNotEqual(tick4.EndTime, quoteBar.EndTime); Assert.AreEqual(tick1.BidPrice, quoteBar.Bid.Open); Assert.AreEqual(tick1.BidPrice, quoteBar.Bid.Low); Assert.AreEqual(tick3.BidPrice, quoteBar.Bid.High); Assert.AreEqual(tick3.BidPrice, quoteBar.Bid.Close); Assert.AreEqual(tick3.BidSize, quoteBar.LastBidSize); Assert.AreEqual(tick2.AskPrice, quoteBar.Ask.Open); Assert.AreEqual(tick4.AskPrice, quoteBar.Ask.Low); Assert.AreEqual(tick2.AskPrice, quoteBar.Ask.High); Assert.AreEqual(tick4.AskPrice, quoteBar.Ask.Close); Assert.AreEqual(tick4.AskSize, quoteBar.LastAskSize); }