Пример #1
0
            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);
            }
Пример #2
0
            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);
            }
Пример #3
0
        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);
        }
Пример #4
0
            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);
            }
Пример #5
0
            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);
            }
Пример #6
0
        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;
                }
            }
        }
Пример #7
0
        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);
                }
            }
        }
Пример #8
0
        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());
        }
Пример #9
0
        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);
        }
Пример #10
0
        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;
                }
            }
        }
Пример #11
0
        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());
        }
Пример #12
0
            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);
            }
Пример #13
0
            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);
            }
Пример #14
0
        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);
        }