public void ArchiveEmptyCollection_OneItemToArchive_OneToKeep_ReturnsOne() { var stack = new EquityInterDayHistoryStack(); var date = DateTime.UtcNow; var firstBar = date - TimeSpan.FromDays(2); var tb = this.GetTimeBar(); var tb2 = this.GetTimeBar(); var timeBarCollection = new EquityInterDayTimeBarCollection( new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE), firstBar, new[] { tb, tb2 }); var timeBarCollection2 = new EquityInterDayTimeBarCollection( 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 EquityInterDayHistoryStack(); var date = DateTime.UtcNow; var tb = this.GetTimeBar(); var tb2 = this.GetTimeBar(); var timeBarCollection = new EquityInterDayTimeBarCollection( new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE), DateTime.UtcNow - TimeSpan.FromMinutes(1), new[] { tb, tb2 }); var timeBarCollection2 = new EquityInterDayTimeBarCollection( new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE), DateTime.UtcNow, 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 Add(EquityInterDayTimeBarCollection value) { if (value == null) { this._logger.LogInformation("UniverseEquityInterDayCache was asked to add null. returning"); return; } this._logger.LogInformation( $"UniverseEquityInterDayCache 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 EquityInterDayHistoryStack(); 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 ToString_PrintsOutExpected_ExchangeAndSecurities() { var market = new Market("1", "xlon", "london stock exchange", MarketTypes.DarkPool); var date = DateTime.UtcNow; var timeBars = new EquityInstrumentInterDayTimeBar[0]; var coll = new EquityInterDayTimeBarCollection(market, date, timeBars); var result = coll.ToString(); Assert.AreEqual("Exchange (xlon.london stock exchange) Securities(0)", result); }
public void Ctor_AssignsVariables_Correctly() { var market = new Market("1", "xlon", "london stock exchange", MarketTypes.DarkPool); var date = DateTime.UtcNow; var timeBars = new EquityInstrumentInterDayTimeBar[0]; var coll = new EquityInterDayTimeBarCollection(market, date, timeBars); Assert.AreEqual(market, coll.Exchange); Assert.AreEqual(date, coll.Epoch); Assert.AreEqual(timeBars, coll.Securities); }
public void RunRule_DoesRaiseAlertInEschaton_WhenBidirectionalTradeAndDoesExceedsDailyThreshold_AndHasMarketData() { _tradingHoursService = new MarketTradingHoursService(_tradingHoursRepository, new NullLogger <MarketTradingHoursService>()); var rule = new LayeringRule(_equitiesParameters, _alertStream, _orderFilter, _logger, _equityFactory, _fixedIncomeFactory, _tradingHoursService, _ruleCtx, RuleRunMode.ValidationRun, _tradingLogger); var tradeBuy = ((Order)null).Random(); var tradeSell = ((Order)null).Random(); tradeBuy.PlacedDate = new DateTime(2018, 01, 01, 12, 0, 0); tradeBuy.OrderDirection = OrderDirections.BUY; tradeBuy.FilledDate = tradeBuy.PlacedDate.Value.AddMinutes(1); tradeSell.PlacedDate = new DateTime(2018, 01, 01, 12, 0, 0); tradeSell.OrderDirection = OrderDirections.SELL; tradeSell.FilledDate = tradeSell.PlacedDate.Value.AddMinutes(1); tradeBuy.OrderFilledVolume = 987; tradeSell.OrderFilledVolume = 1019; var market = new Market("1", "XLON", "London Stock Exchange", MarketTypes.STOCKEXCHANGE); var marketData = new EquityInterDayTimeBarCollection(market, tradeBuy.PlacedDate.Value.AddSeconds(-55), new List <EquityInstrumentInterDayTimeBar> { new EquityInstrumentInterDayTimeBar( tradeBuy.Instrument, new DailySummaryTimeBar( 1000, "USD", new IntradayPrices(tradeBuy.OrderAverageFillPrice.Value, tradeBuy.OrderAverageFillPrice.Value, tradeBuy.OrderAverageFillPrice.Value, tradeBuy.OrderAverageFillPrice.Value), 1000, new Volume(2000), tradeBuy.PlacedDate.Value.AddSeconds(-55) ), tradeBuy.PlacedDate.Value.AddSeconds(-55), market) }); var genesis = new UniverseEvent(UniverseStateEvent.Genesis, tradeBuy.PlacedDate.Value.AddMinutes(-1), new object()); var marketDataEvent = new UniverseEvent(UniverseStateEvent.EquityInterDayTick, tradeBuy.PlacedDate.Value.AddSeconds(-55), marketData); var buyEvent = new UniverseEvent(UniverseStateEvent.OrderPlaced, tradeBuy.PlacedDate.Value, tradeBuy); var sellEvent = new UniverseEvent(UniverseStateEvent.OrderPlaced, tradeSell.PlacedDate.Value, tradeSell); var eschaton = new UniverseEvent(UniverseStateEvent.Eschaton, tradeSell.PlacedDate.Value.AddMinutes(1), new object()); rule.OnNext(genesis); rule.OnNext(marketDataEvent); rule.OnNext(buyEvent); rule.OnNext(sellEvent); rule.OnNext(eschaton); A.CallTo(() => _alertStream.Add(A <IUniverseAlertEvent> .Ignored)).MustHaveHappened(); A.CallTo(() => _ruleCtx.EndEvent()).MustHaveHappenedOnceExactly(); A.CallTo(() => _operationCtx.EndEventWithMissingDataError()).MustNotHaveHappened(); }
public void DoesPush_SetAMarket_OnExchangeCall() { var stack = new EquityInterDayHistoryStack(); var date = DateTime.UtcNow; var tb = this.GetTimeBar(); var venue = new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE); var timeBarCollection = new EquityInterDayTimeBarCollection(venue, DateTime.UtcNow, new[] { tb }); stack.Add(timeBarCollection, date); var exch = stack.Exchange(); Assert.AreEqual(exch, venue); }
public void DoesNotPush_IfDateDoesNotMatch() { var stack = new EquityInterDayHistoryStack(); var date = DateTime.UtcNow - TimeSpan.FromDays(3); var tb = this.GetTimeBar(); var timeBarCollection = new EquityInterDayTimeBarCollection( new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE), DateTime.UtcNow, new[] { tb }); stack.Add(timeBarCollection, date); var stackContents = stack.ActiveMarketHistory(); Assert.IsEmpty(stackContents); }
public void Add(EquityInterDayTimeBarCollection frame, DateTime currentTime) { if (frame == null) { return; } lock (this._lock) { // Ensure all contents have the same date (may not work well in pacific zone with the international date line ++ trading hours - should be OK for Japan/Tokyo and USA/SanFran) - RT if (currentTime.Date == frame.Epoch.Date) { this._activeStack.Push(frame); } } }
public void DoesPush_IfDateDoesMatch() { var stack = new EquityInterDayHistoryStack(); var date = DateTime.UtcNow; var tb = this.GetTimeBar(); var timeBarCollection = new EquityInterDayTimeBarCollection( new Market("1", "xlon", "London Stock Exchange", MarketTypes.STOCKEXCHANGE), DateTime.UtcNow, new[] { tb }); stack.Add(timeBarCollection, date); var stackContents = stack.ActiveMarketHistory(); Assert.AreEqual(1, stackContents.Count); Assert.AreEqual(timeBarCollection, stackContents.Peek()); }
private IUniverseEvent MapRowToInterdayMarketDataEvent(InterdayMarketDataParameters marketDataParam) { if (marketDataParam == null) { return(null); } if (string.IsNullOrWhiteSpace(marketDataParam.SecurityName) || !this._securitySelection.Securities.ContainsKey(marketDataParam.SecurityName)) { this._scenarioContext.Pending(); return(null); } var security = this._securitySelection.Securities[marketDataParam.SecurityName]; var open = this.MapToMoney(marketDataParam.Open, marketDataParam.Currency); var close = this.MapToMoney(marketDataParam.Close, marketDataParam.Currency); var high = this.MapToMoney(marketDataParam.High, marketDataParam.Currency); var low = this.MapToMoney(marketDataParam.Low, marketDataParam.Currency); var intradayPrices = new IntradayPrices(open, close, high, low); var dailySummary = new DailySummaryTimeBar( marketDataParam.MarketCap, marketDataParam.Currency, intradayPrices, marketDataParam.ListedSecurities, new Volume(marketDataParam.DailyVolume.GetValueOrDefault(0)), marketDataParam.Epoch); var marketData = new EquityInstrumentInterDayTimeBar( security.Instrument, dailySummary, marketDataParam.Epoch, security.Market); var timeBarCollection = new EquityInterDayTimeBarCollection( security.Market, marketDataParam.Epoch, new[] { marketData }); var universeEvent = new UniverseEvent( UniverseStateEvent.EquityInterDayTick, marketDataParam.Epoch, timeBarCollection); return(universeEvent); }
public void Setup() { this._dataRequestRepository = A.Fake <IRuleRunDataRequestRepository>(); this._logger = A.Fake <ILogger>(); var xlon = new Market("1", "XLON", "XLON", MarketTypes.STOCKEXCHANGE); this._instrument1 = new InstrumentIdentifiers( "1", "1", "1", "client-id-1", "abcd123", "abcd12345678", "abcd12345678", "abc123", "TEST", "TEST INC", "TSTY", "testRic"); this._instrument2 = new InstrumentIdentifiers( "2", "2", "2", "client-id-2", "abcd122", "abcd12345672", "abcd12345672", "abc122", "TES2", "TEST2 INC", "TST2Y", "test2Ric"); this._mdr1 = new MarketDataRequest( "1", "XLON", "entspb", this._instrument1, DateTime.UtcNow, DateTime.UtcNow.AddDays(1), "1", false, DataSource.AnyInterday); this._mdr2 = new MarketDataRequest( "2", "XLON", "entspb", this._instrument1, DateTime.UtcNow.AddDays(-5), DateTime.UtcNow.AddDays(-4), "1", false, DataSource.AnyInterday); this._interdayTimeBarCollectionNasdaq = new EquityInterDayTimeBarCollection( new Market("1", "NASDAQ", "NASDAQ", MarketTypes.STOCKEXCHANGE), DateTime.UtcNow, new EquityInstrumentInterDayTimeBar[0]); this._interdayTimeBarCollectionXlon = new EquityInterDayTimeBarCollection( xlon, DateTime.UtcNow, new[] { new EquityInstrumentInterDayTimeBar( new FinancialInstrument( InstrumentTypes.Equity, this._instrument1, "test", "entspb", "GBX", "TEST"), new DailySummaryTimeBar(null, null, null, null, new Volume(1), DateTime.Now), DateTime.UtcNow, xlon) }); this._interdayTimeBarCollectionXlon2 = new EquityInterDayTimeBarCollection( xlon, DateTime.UtcNow, new[] { new EquityInstrumentInterDayTimeBar( new FinancialInstrument( InstrumentTypes.Equity, this._instrument2, "test", "entspb", "GBX", "TEST"), new DailySummaryTimeBar(null, null, null, null, new Volume(1), DateTime.Now), DateTime.UtcNow, xlon) }); }