public void Eschaton_UpdatesAlertCountAndEndsEvent_ForCtx() { var highVolumeRule = BuildRule(); highVolumeRule.OnNext(Eschaton()); A.CallTo(() => _ruleCtx.EndEvent()).MustHaveHappenedOnceExactly(); }
public void Setup() { _alertStream = A.Fake <IUniverseAlertStream>(); _equitiesParameters = A.Fake <IHighVolumeRuleEquitiesParameters>(); _ruleCtx = A.Fake <ISystemProcessOperationRunRuleContext>(); _opCtx = A.Fake <ISystemProcessOperationContext>(); _dataRequestRepository = A.Fake <IRuleRunDataRequestRepository>(); _stubDataRequestRepository = A.Fake <IStubRuleRunDataRequestRepository>(); _equityFactoryCache = A.Fake <ILogger <UniverseEquityMarketCacheFactory> >(); _equityFactory = new UniverseEquityMarketCacheFactory(_stubDataRequestRepository, _dataRequestRepository, _equityFactoryCache); _fixedIncomeFactoryCache = A.Fake <ILogger <UniverseFixedIncomeMarketCacheFactory> >(); _fixedIncomeFactory = new UniverseFixedIncomeMarketCacheFactory(_stubDataRequestRepository, _dataRequestRepository, _fixedIncomeFactoryCache); _tradingHoursService = A.Fake <IMarketTradingHoursService>(); _dataRequestSubscriber = A.Fake <IUniverseDataRequestsSubscriber>(); this.currencyConverterService = A.Fake <ICurrencyConverterService>(); _logger = A.Fake <ILogger <IHighVolumeRule> >(); _tradingLogger = A.Fake <ILogger <TradingHistoryStack> >(); _orderFilter = A.Fake <IUniverseOrderFilter>(); A.CallTo(() => _orderFilter.Filter(A <IUniverseEvent> .Ignored)).ReturnsLazily(i => (IUniverseEvent)i.Arguments[0]); A.CallTo(() => _ruleCtx.EndEvent()).Returns(_opCtx); }
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 Setup() { _logger = A.Fake <ILogger>(); _tradingLogger = A.Fake <ILogger <TradingHistoryStack> >(); _alertStream = A.Fake <IUniverseAlertStream>(); _ruleCtx = A.Fake <ISystemProcessOperationRunRuleContext>(); _operationCtx = A.Fake <ISystemProcessOperationContext>(); _equitiesParameters = new LayeringRuleEquitiesParameters("id", TimeSpan.FromMinutes(30), 0.2m, null, null, null, false, true); _orderFilter = A.Fake <IUniverseOrderFilter>(); A.CallTo(() => _orderFilter.Filter(A <IUniverseEvent> .Ignored)).ReturnsLazily(i => (IUniverseEvent)i.Arguments[0]); _ruleRunRepository = A.Fake <IRuleRunDataRequestRepository>(); _stubRuleRunRepository = A.Fake <IStubRuleRunDataRequestRepository>(); _equityFactoryLogger = A.Fake <ILogger <UniverseEquityMarketCacheFactory> >(); _equityFactory = new UniverseEquityMarketCacheFactory(_stubRuleRunRepository, _ruleRunRepository, _equityFactoryLogger); _fixedIncomeFactoryLogger = A.Fake <ILogger <UniverseFixedIncomeMarketCacheFactory> >(); _fixedIncomeFactory = new UniverseFixedIncomeMarketCacheFactory(_stubRuleRunRepository, _ruleRunRepository, _fixedIncomeFactoryLogger); _tradingHoursService = A.Fake <IMarketTradingHoursService>(); _tradingHoursRepository = A.Fake <IMarketOpenCloseApiCachingDecorator>(); A.CallTo(() => _tradingHoursRepository.GetAsync()) .Returns( new ExchangeDto[] { new ExchangeDto { Code = "XLON", MarketOpenTime = TimeSpan.FromHours(8), MarketCloseTime = TimeSpan.FromHours(16), IsOpenOnMonday = true, IsOpenOnTuesday = true, IsOpenOnWednesday = true, IsOpenOnThursday = true, IsOpenOnFriday = true, IsOpenOnSaturday = true, IsOpenOnSunday = true, } }); A.CallTo(() => _ruleCtx.EndEvent()).Returns(_operationCtx); }