示例#1
0
        public void Add(EquityIntraDayTimeBarCollection value)
        {
            if (value == null)
            {
                this._logger.LogInformation("UniverseMarketCache was asked to add null. returning");
                return;
            }

            this._logger.LogInformation(
                $"UniverseMarketCache adding {value.Epoch} - {value.Exchange?.MarketIdentifierCode}");

            if (this._latestExchangeFrameBook.ContainsKey(value.Exchange.MarketIdentifierCode))
            {
                this._latestExchangeFrameBook.Remove(value.Exchange.MarketIdentifierCode);
                this._latestExchangeFrameBook.Add(value.Exchange.MarketIdentifierCode, value);
            }
            else
            {
                this._latestExchangeFrameBook.Add(value.Exchange.MarketIdentifierCode, value);
            }

            if (!this._marketHistory.ContainsKey(value.Exchange.MarketIdentifierCode))
            {
                var history = new EquityIntraDayHistoryStack(this._windowSize);
                history.Add(value, value.Epoch);
                this._marketHistory.TryAdd(value.Exchange.MarketIdentifierCode, history);
            }
            else
            {
                this._marketHistory.TryGetValue(value.Exchange.MarketIdentifierCode, out var history);

                history?.Add(value, value.Epoch);
                history?.ArchiveExpiredActiveItems(value.Epoch);
            }
        }
        public void ArchiveEmptyCollection_OneItemToArchive_OneToKeep_ReturnsOne()
        {
            var stack             = new EquityIntraDayHistoryStack(TimeSpan.Zero);
            var date              = DateTime.UtcNow;
            var firstBar          = date - TimeSpan.FromDays(2);
            var tb                = this.GetTimeBar();
            var tb2               = this.GetTimeBar();
            var timeBarCollection = new EquityIntraDayTimeBarCollection(
                new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE),
                firstBar,
                new[] { tb, tb2 });

            var timeBarCollection2 = new EquityIntraDayTimeBarCollection(
                new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE),
                DateTime.UtcNow,
                new[] { tb, tb2 });

            stack.Add(timeBarCollection, firstBar);
            stack.Add(timeBarCollection2, date);

            var stackContents = stack.ActiveMarketHistory();

            Assert.AreEqual(2, stackContents.Count);

            stack.ArchiveExpiredActiveItems(date);
            var stackContentsAfterExpire = stack.ActiveMarketHistory();

            Assert.AreEqual(1, stackContentsAfterExpire.Count);
            Assert.AreEqual(timeBarCollection2, stackContentsAfterExpire.Pop());
        }
        public void DoesPush_IfDateDoesMatch_MultipleTimeBars()
        {
            var stack             = new EquityIntraDayHistoryStack(TimeSpan.Zero);
            var date              = DateTime.UtcNow;
            var tb                = this.GetTimeBar();
            var tb2               = this.GetTimeBar();
            var timeBarCollection = new EquityIntraDayTimeBarCollection(
                new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE),
                date,
                new[] { tb, tb2 });

            var timeBarCollection2 = new EquityIntraDayTimeBarCollection(
                new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE),
                date,
                new[] { tb, tb2 });

            stack.Add(timeBarCollection, date);
            stack.Add(timeBarCollection2, date);

            var stackContents = stack.ActiveMarketHistory();

            Assert.AreEqual(2, stackContents.Count);
            Assert.AreEqual(timeBarCollection2, stackContents.Pop());
            Assert.AreEqual(timeBarCollection, stackContents.Pop());
        }
        public void DoesExchange_ReturnNullWhen_NoPush()
        {
            var stack = new EquityIntraDayHistoryStack(TimeSpan.Zero);

            var exch = stack.Exchange();

            Assert.IsNull(exch);
        }
        public void DoesPush_SetAMarket_OnExchangeCall()
        {
            var stack = new EquityIntraDayHistoryStack(TimeSpan.Zero);
            var date  = DateTime.UtcNow;
            var tb    = this.GetTimeBar();
            var venue = new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE);

            var timeBarCollection = new EquityIntraDayTimeBarCollection(venue, DateTime.UtcNow, new[] { tb });

            stack.Add(timeBarCollection, date);

            var exch = stack.Exchange();

            Assert.AreEqual(exch, venue);
        }
        public void DoesNotPush_IfDateDoesNotMatch()
        {
            var stack             = new EquityIntraDayHistoryStack(TimeSpan.Zero);
            var date              = DateTime.UtcNow;
            var tb                = this.GetTimeBar();
            var timeBarCollection = new EquityIntraDayTimeBarCollection(
                new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE),
                date,
                new[] { tb });

            stack.Add(timeBarCollection, date + TimeSpan.FromDays(1));

            var stackContents = stack.ActiveMarketHistory();

            Assert.IsEmpty(stackContents);
        }
        public void ArchiveEmptyCollection_DoesNotThrow()
        {
            var stack = new EquityIntraDayHistoryStack(TimeSpan.Zero);

            Assert.DoesNotThrow(() => stack.ActiveMarketHistory());
        }
        public void Add_DoesNotThrow_ForNull()
        {
            var stack = new EquityIntraDayHistoryStack(TimeSpan.Zero);

            Assert.DoesNotThrow(() => stack.Add(null, DateTime.UtcNow));
        }