Ejemplo n.º 1
0
        public HighMarketCapFilter(
            IUniverseEquityMarketCacheFactory factory,
            RuleRunMode ruleRunMode,
            DecimalRangeRuleFilter marketCap,
            IMarketTradingHoursService tradingHoursService,
            ISystemProcessOperationRunRuleContext operationRunRuleContext,
            IUniverseDataRequestsSubscriber universeDataRequestsSubscriber,
            ICurrencyConverterService currencyConverterService,
            string ruleName,
            ILogger <HighMarketCapFilter> logger
            )
        {
            _universeEquityInterdayCache =
                factory?.BuildInterday(ruleRunMode)
                ?? throw new ArgumentNullException(nameof(factory));

            _ruleRunMode     = ruleRunMode;
            _marketCapFilter = marketCap ?? DecimalRangeRuleFilter.None();

            _tradingHoursService            = tradingHoursService ?? throw new ArgumentNullException(nameof(tradingHoursService));
            _operationRunRuleContext        = operationRunRuleContext ?? throw new ArgumentNullException(nameof(operationRunRuleContext));
            _universeDataRequestsSubscriber = universeDataRequestsSubscriber;
            this.currencyConverterService   = currencyConverterService ?? throw new ArgumentNullException(nameof(currencyConverterService));
            _name   = ruleName;
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
        }
        public WashTradeRuleEquitiesParameters(
            string id,
            TimeSpan windowSize,
            bool performAveragePositionAnalysis,
            bool performClusteringPositionAnalysis,
            int?averagePositionMinimumNumberOfTrades,
            decimal?averagePositionMaximumPositionValueChange,
            decimal?averagePositionMaximumAbsoluteValueChangeAmount,
            string averagePositionMaximumAbsoluteValueChangeCurrency,
            int?clusteringPositionMinimumNumberOfTrades,
            decimal?clusteringPercentageValueDifferenceThreshold,
            DecimalRangeRuleFilter marketCapFilter,
            DecimalRangeRuleFilter venueVolumeFilter,
            RuleFilter accounts,
            RuleFilter traders,
            RuleFilter markets,
            RuleFilter funds,
            RuleFilter strategies,
            RuleFilter sectors,
            RuleFilter industries,
            RuleFilter regions,
            RuleFilter countries,
            IReadOnlyCollection <ClientOrganisationalFactors> factors,
            bool aggregateNonFactorableIntoOwnCategory,
            bool performTuning)
        {
            this.Id = id ?? string.Empty;

            this.Windows = new TimeWindows(id, windowSize);

            this.PerformAveragePositionAnalysis    = performAveragePositionAnalysis;
            this.PerformClusteringPositionAnalysis = performClusteringPositionAnalysis;

            this.AveragePositionMinimumNumberOfTrades              = averagePositionMinimumNumberOfTrades;
            this.AveragePositionMaximumPositionValueChange         = averagePositionMaximumPositionValueChange;
            this.AveragePositionMaximumAbsoluteValueChangeAmount   = averagePositionMaximumAbsoluteValueChangeAmount;
            this.AveragePositionMaximumAbsoluteValueChangeCurrency = averagePositionMaximumAbsoluteValueChangeCurrency;

            this.ClusteringPositionMinimumNumberOfTrades      = clusteringPositionMinimumNumberOfTrades;
            this.ClusteringPercentageValueDifferenceThreshold = clusteringPercentageValueDifferenceThreshold;

            this.MarketCapFilter   = marketCapFilter ?? DecimalRangeRuleFilter.None();
            this.VenueVolumeFilter = venueVolumeFilter ?? DecimalRangeRuleFilter.None();

            this.Accounts   = accounts ?? RuleFilter.None();
            this.Traders    = traders ?? RuleFilter.None();
            this.Markets    = markets ?? RuleFilter.None();
            this.Funds      = funds ?? RuleFilter.None();
            this.Strategies = strategies ?? RuleFilter.None();

            this.Sectors    = sectors ?? RuleFilter.None();
            this.Industries = industries ?? RuleFilter.None();
            this.Regions    = regions ?? RuleFilter.None();
            this.Countries  = countries ?? RuleFilter.None();

            this.Factors = factors ?? new ClientOrganisationalFactors[0];
            this.AggregateNonFactorableIntoOwnCategory = aggregateNonFactorableIntoOwnCategory;

            this.PerformTuning = performTuning;
        }
Ejemplo n.º 3
0
        public void GivenIHaveTheFixedIncomeHighVolumeIssuanceRuleParameterValues(Table ruleParameters)
        {
            if (ruleParameters.RowCount != 1)
            {
                this.scenarioContext.Pending();
                return;
            }

            var highVolumeParameters = ruleParameters.CreateInstance <FixedIncomeHighVolumeApiParameters>();

            this.parameters = new HighVolumeIssuanceRuleFixedIncomeParameters(
                "0",
                TimeSpan.FromHours(highVolumeParameters.WindowHours),
                highVolumeParameters.FixedIncomeHighVolumePercentageDaily,
                highVolumeParameters.FixedIncomeHighVolumePercentageWindow,
                DecimalRangeRuleFilter.None(),
                DecimalRangeRuleFilter.None(),
                RuleFilter.None(),
                RuleFilter.None(),
                RuleFilter.None(),
                RuleFilter.None(),
                RuleFilter.None(),
                RuleFilter.None(),
                RuleFilter.None(),
                RuleFilter.None(),
                RuleFilter.None(),
                new[] { ClientOrganisationalFactors.None },
                true,
                true);
        }
        public PlacingOrderWithNoIntentToExecuteRuleEquitiesParameters(
            string id,
            decimal sigma,
            TimeSpan windowSize,
            IReadOnlyCollection <ClientOrganisationalFactors> factors,
            bool aggregateNonFactorableIntoOwnCategory,
            bool performTuning)
        {
            this.Id = id ?? string.Empty;

            this.Sigma   = sigma;
            this.Windows = new TimeWindows(id, windowSize);
            this.Factors = factors ?? new ClientOrganisationalFactors[0];
            this.AggregateNonFactorableIntoOwnCategory = aggregateNonFactorableIntoOwnCategory;

            this.MarketCapFilter   = DecimalRangeRuleFilter.None();
            this.VenueVolumeFilter = DecimalRangeRuleFilter.None();

            this.Accounts   = RuleFilter.None();
            this.Traders    = RuleFilter.None();
            this.Markets    = RuleFilter.None();
            this.Funds      = RuleFilter.None();
            this.Strategies = RuleFilter.None();

            this.PerformTuning = performTuning;
            this.Sectors       = RuleFilter.None();
            this.Industries    = RuleFilter.None();
            this.Regions       = RuleFilter.None();
            this.Countries     = RuleFilter.None();
        }
Ejemplo n.º 5
0
        public void Filter_WhenUniverseEventExcludeMarketCapFilter_MustNotBeFiltered()
        {
            var marketCapRangeRuleFilter = new DecimalRangeRuleFilter
            {
                Type = RuleFilterType.Exclude
            };

            var highMarketCapFilter = new HighMarketCapFilter(
                _universeMarketCacheFactory,
                Engine.Rules.Rules.RuleRunMode.ValidationRun,
                marketCapRangeRuleFilter,
                _tradingHoursService,
                _operationRunRuleContext,
                _universeDataRequestsSubscriber,
                this.currencyConverterService,
                "test",
                _logger);


            var eventOne = new UniverseEvent(UniverseStateEvent.Order, DateTime.UtcNow, new { });

            var result = highMarketCapFilter.Filter(eventOne);

            Assert.IsFalse(result);
        }
Ejemplo n.º 6
0
        public void Filter_WhenUniverseEventAndTradingHoursIsNotValid_MustBeFiltered()
        {
            var fundOne  = ((Order)null).Random();
            var eventOne = new UniverseEvent(UniverseStateEvent.Order, DateTime.UtcNow, fundOne);

            A.CallTo(() => _tradingHoursService.GetTradingHoursForMic(fundOne.Market.MarketIdentifierCode))
            .Returns(new TradingHours()
            {
                IsValid = false
            });

            var marketCapRangeRuleFilter = new DecimalRangeRuleFilter
            {
                Type = RuleFilterType.Include
            };

            var highMarketCapFilter = new HighMarketCapFilter(
                _universeMarketCacheFactory,
                Engine.Rules.Rules.RuleRunMode.ValidationRun,
                marketCapRangeRuleFilter,
                _tradingHoursService,
                _operationRunRuleContext,
                _universeDataRequestsSubscriber,
                this.currencyConverterService,
                "test",
                _logger);

            var result = highMarketCapFilter.Filter(eventOne);

            Assert.IsTrue(result);
        }
        public IHighVolumeVenueDecoratorFilter Build(
            TimeWindows timeWindows,
            IUniverseFilterService baseService,
            DecimalRangeRuleFilter venueVolumeFilterSetting,
            ISystemProcessOperationRunRuleContext ruleRunContext,
            IUniverseDataRequestsSubscriber dataRequestSubscriber,
            DataSource dataSource,
            RuleRunMode ruleRunMode)
        {
            var filterRule = new HighVolumeVenueFilter(
                timeWindows,
                venueVolumeFilterSetting,
                this._equityOrderFilterService,
                ruleRunContext,
                this._equityMarketCacheFactory,
                this._fixedIncomeMarketCacheFactory,
                ruleRunMode,
                this._marketTradingHoursService,
                dataRequestSubscriber,
                dataSource,
                this._tradingHistoryLogger,
                this._venueLogger);

            var filter = new HighVolumeVenueDecoratorFilter(timeWindows, baseService, filterRule);

            return(filter);
        }
        public SpoofingRuleEquitiesParameters(
            string id,
            TimeSpan windowSize,
            decimal cancellationThreshold,
            decimal relativeSizeMultipleForSpoofingExceedingReal,
            IReadOnlyCollection <ClientOrganisationalFactors> factors,
            bool aggregateNonFactorableIntoOwnCategory,
            bool performTuning)
        {
            this.Id = id ?? string.Empty;

            this.Windows = new TimeWindows(id, windowSize);
            this.CancellationThreshold = cancellationThreshold;
            this.RelativeSizeMultipleForSpoofExceedingReal = relativeSizeMultipleForSpoofingExceedingReal;

            this.MarketCapFilter   = DecimalRangeRuleFilter.None();
            this.VenueVolumeFilter = DecimalRangeRuleFilter.None();

            this.Accounts   = RuleFilter.None();
            this.Traders    = RuleFilter.None();
            this.Markets    = RuleFilter.None();
            this.Funds      = RuleFilter.None();
            this.Strategies = RuleFilter.None();

            this.Sectors    = RuleFilter.None();
            this.Industries = RuleFilter.None();
            this.Regions    = RuleFilter.None();
            this.Countries  = RuleFilter.None();

            this.Factors = factors ?? new ClientOrganisationalFactors[0];
            this.AggregateNonFactorableIntoOwnCategory = aggregateNonFactorableIntoOwnCategory;

            this.PerformTuning = performTuning;
        }
        public void NoneReturnsNewRangeFilterWithNoneFilterType()
        {
            var result = DecimalRangeRuleFilter.None();

            Assert.AreEqual(RuleFilterType.None, result.Type);
            Assert.AreEqual(null, result.Max);
            Assert.AreEqual(null, result.Min);
        }
Ejemplo n.º 10
0
        public void Filter_WhenUniverseEventAndMarketCapFilter_MustFilterCorrectly(
            decimal?marketCap,
            decimal?min,
            decimal?max,
            bool mustBeFiltered)
        {
            A.CallTo(
                () => this.currencyConverterService.Convert(
                    A <IReadOnlyCollection <Money> > .Ignored,
                    A <Currency> .Ignored,
                    A <DateTime> .Ignored,
                    A <ISystemProcessOperationRunRuleContext> .Ignored)).Returns(new Money(marketCap.Value, "GBP"));

            var fundOne  = ((Order)null).Random();
            var eventOne = new UniverseEvent(UniverseStateEvent.Order, DateTime.UtcNow, fundOne);

            A.CallTo(() => _tradingHoursService.GetTradingHoursForMic(fundOne.Market.MarketIdentifierCode))
            .Returns(new TradingHours()
            {
                IsValid = true
            });

            //decimal? marketCap = 150;
            var marketDataResponse = new MarketDataResponse <EquityInstrumentInterDayTimeBar>(
                new EquityInstrumentInterDayTimeBar(null, new DailySummaryTimeBar(marketCap, "GBP", null, null, new Volume(), DateTime.UtcNow), DateTime.UtcNow, null), false, false);

            A.CallTo(() => _universeEquityInterDayCache.Get(
                         A <MarketDataRequest> .That.Matches(
                             m => m.MarketIdentifierCode == fundOne.Market.MarketIdentifierCode &&
                             m.Cfi == fundOne.Instrument.Cfi
                             )))
            .Returns(marketDataResponse);

            var marketCapRangeRuleFilter = new DecimalRangeRuleFilter
            {
                Type = RuleFilterType.Include,
                Min  = min,
                Max  = max
            };

            var highMarketCapFilter = new HighMarketCapFilter(
                _universeMarketCacheFactory,
                Engine.Rules.Rules.RuleRunMode.ValidationRun,
                marketCapRangeRuleFilter,
                _tradingHoursService,
                _operationRunRuleContext,
                _universeDataRequestsSubscriber,
                this.currencyConverterService,
                "test",
                _logger);

            var result = highMarketCapFilter.Filter(eventOne);

            Assert.AreEqual(result, mustBeFiltered);
        }
Ejemplo n.º 11
0
        public void Setup()
        {
            this._equityMarketCacheFactory      = A.Fake <IUniverseEquityMarketCacheFactory>();
            this._fixedIncomeMarketCacheFactory = A.Fake <IUniverseFixedIncomeMarketCacheFactory>();
            this._ruleRunContext            = A.Fake <ISystemProcessOperationRunRuleContext>();
            this._ruleRunMode               = RuleRunMode.ValidationRun;
            this._universeOrderFilter       = A.Fake <IUniverseOrderFilter>();
            this._timeWindows               = new TimeWindows("id-1", TimeSpan.FromDays(1));
            this._decimalRangeRuleFilter    = new DecimalRangeRuleFilter();
            this._marketTradingHoursService = A.Fake <IMarketTradingHoursService>();
            this._dataRequestSubscriber     = A.Fake <IUniverseDataRequestsSubscriber>();
            this._baseLogger    = A.Fake <ILogger>();
            this._tradingLogger = A.Fake <ILogger <TradingHistoryStack> >();
            this._logger        = A.Fake <ILogger <HighVolumeVenueFilter> >();

            A.CallTo(() => this._universeOrderFilter.Filter(A <IUniverseEvent> .Ignored))
            .ReturnsLazily(_ => _.Arguments.First() as IUniverseEvent);

            var repository = A.Fake <IMarketOpenCloseApiCachingDecorator>();

            A.CallTo(() => repository.GetAsync()).Returns(
                new[]
            {
                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
                },
                new ExchangeDto
                {
                    Code              = "NASDAQ",
                    MarketOpenTime    = TimeSpan.FromHours(15),
                    MarketCloseTime   = TimeSpan.FromHours(23),
                    IsOpenOnMonday    = true,
                    IsOpenOnTuesday   = true,
                    IsOpenOnWednesday = true,
                    IsOpenOnThursday  = true,
                    IsOpenOnFriday    = true,
                    IsOpenOnSaturday  = true,
                    IsOpenOnSunday    = true
                }
            });

            this._tradingHoursService = new MarketTradingHoursService(
                repository,
                new NullLogger <MarketTradingHoursService>());
        }
        public HighProfitsRuleEquitiesParameters(
            string id,
            TimeSpan backWindowSize,
            TimeSpan forwardWindowSize,
            bool performHighProfitWindowAnalysis,
            bool performHighProfitDailyAnalysis,
            decimal?highProfitPercentageThreshold,
            decimal?highProfitAbsoluteThreshold,
            bool useCurrencyConversions,
            string highProfitCurrencyConversionTargetCurrency,
            DecimalRangeRuleFilter marketCapFilter,
            DecimalRangeRuleFilter highVolumeFilter,
            RuleFilter accounts,
            RuleFilter traders,
            RuleFilter markets,
            RuleFilter funds,
            RuleFilter strategies,
            RuleFilter sectors,
            RuleFilter industries,
            RuleFilter regions,
            RuleFilter countries,
            IReadOnlyCollection <ClientOrganisationalFactors> factors,
            bool aggregateNonFactorableIntoOwnCategory,
            bool performTuning)
        {
            this.Id      = id ?? string.Empty;
            this.Windows = new TimeWindows(id, backWindowSize, forwardWindowSize);
            this.HighProfitPercentageThreshold = highProfitPercentageThreshold;
            this.HighProfitAbsoluteThreshold   = highProfitAbsoluteThreshold;
            this.UseCurrencyConversions        = useCurrencyConversions;
            this.HighProfitCurrencyConversionTargetCurrency =
                highProfitCurrencyConversionTargetCurrency ?? string.Empty;
            this.PerformHighProfitWindowAnalysis = performHighProfitWindowAnalysis;
            this.PerformHighProfitDailyAnalysis  = performHighProfitDailyAnalysis;

            this.MarketCapFilter   = marketCapFilter ?? DecimalRangeRuleFilter.None();
            this.VenueVolumeFilter = highVolumeFilter ?? DecimalRangeRuleFilter.None();

            this.Accounts   = accounts ?? RuleFilter.None();
            this.Traders    = traders ?? RuleFilter.None();
            this.Markets    = markets ?? RuleFilter.None();
            this.Funds      = funds ?? RuleFilter.None();
            this.Strategies = strategies ?? RuleFilter.None();

            this.Sectors    = sectors ?? RuleFilter.None();
            this.Industries = industries ?? RuleFilter.None();
            this.Regions    = regions ?? RuleFilter.None();
            this.Countries  = countries ?? RuleFilter.None();

            this.Factors = factors ?? new ClientOrganisationalFactors[0];
            this.AggregateNonFactorableIntoOwnCategory = aggregateNonFactorableIntoOwnCategory;

            this.PerformTuning = performTuning;
        }
Ejemplo n.º 13
0
        public CancelledOrderRuleEquitiesParameters(
            string id,
            TimeSpan windowSize,
            decimal?cancelledOrderPositionPercentageThreshold,
            decimal?cancelledOrderCountPercentageThreshold,
            int minimumNumberOfTradesToApplyRuleTo,
            int?maximumNumberOfTradesToApplyRuleTo,
            DecimalRangeRuleFilter marketCapFilter,
            DecimalRangeRuleFilter venueVolumeFilter,
            RuleFilter accounts,
            RuleFilter traders,
            RuleFilter markets,
            RuleFilter funds,
            RuleFilter strategy,
            RuleFilter sectors,
            RuleFilter industries,
            RuleFilter regions,
            RuleFilter countries,
            IReadOnlyCollection <ClientOrganisationalFactors> factors,
            bool aggregateNonFactorableIntoOwnCategory,
            bool performTuning)
        {
            this.Id = id ?? string.Empty;

            this.Windows = new TimeWindows(id, windowSize);
            this.CancelledOrderPercentagePositionThreshold = cancelledOrderPositionPercentageThreshold;
            this.CancelledOrderCountPercentageThreshold    = cancelledOrderCountPercentageThreshold;
            this.MinimumNumberOfTradesToApplyRuleTo        = minimumNumberOfTradesToApplyRuleTo;
            this.MaximumNumberOfTradesToApplyRuleTo        = maximumNumberOfTradesToApplyRuleTo;

            this.MarketCapFilter   = marketCapFilter ?? DecimalRangeRuleFilter.None();
            this.VenueVolumeFilter = venueVolumeFilter ?? DecimalRangeRuleFilter.None();

            this.Accounts   = accounts ?? RuleFilter.None();
            this.Traders    = traders ?? RuleFilter.None();
            this.Markets    = markets ?? RuleFilter.None();
            this.Funds      = funds ?? RuleFilter.None();
            this.Strategies = strategy ?? RuleFilter.None();

            this.Sectors    = sectors ?? RuleFilter.None();
            this.Industries = industries ?? RuleFilter.None();
            this.Regions    = regions ?? RuleFilter.None();
            this.Countries  = countries ?? RuleFilter.None();

            this.Factors = factors ?? new ClientOrganisationalFactors[0];
            this.AggregateNonFactorableIntoOwnCategory = aggregateNonFactorableIntoOwnCategory;

            this.PerformTuning = performTuning;
        }
        public LayeringRuleEquitiesParameters(
            string id,
            TimeSpan windowSize,
            decimal?percentageOfMarketDailyVolume,
            decimal?percentOfMarketWindowVolume,
            bool?checkForCorrespondingPriceMovement,
            DecimalRangeRuleFilter marketCapFilter,
            DecimalRangeRuleFilter venueVolumeFilter,
            RuleFilter accounts,
            RuleFilter traders,
            RuleFilter markets,
            RuleFilter funds,
            RuleFilter strategies,
            RuleFilter sectors,
            RuleFilter industries,
            RuleFilter regions,
            RuleFilter countries,
            IReadOnlyCollection <ClientOrganisationalFactors> factors,
            bool aggregateNonFactorableIntoOwnCategory,
            bool performTuning)
        {
            this.Id = id ?? string.Empty;

            this.Windows = new TimeWindows(id, windowSize);
            this.PercentageOfMarketDailyVolume      = percentageOfMarketDailyVolume;
            this.PercentageOfMarketWindowVolume     = percentOfMarketWindowVolume;
            this.CheckForCorrespondingPriceMovement = checkForCorrespondingPriceMovement;

            this.MarketCapFilter   = marketCapFilter ?? DecimalRangeRuleFilter.None();
            this.VenueVolumeFilter = venueVolumeFilter ?? DecimalRangeRuleFilter.None();

            this.Accounts   = accounts ?? RuleFilter.None();
            this.Traders    = traders ?? RuleFilter.None();
            this.Markets    = markets ?? RuleFilter.None();
            this.Funds      = funds ?? RuleFilter.None();
            this.Strategies = strategies ?? RuleFilter.None();

            this.Sectors    = sectors ?? RuleFilter.None();
            this.Industries = industries ?? RuleFilter.None();
            this.Regions    = regions ?? RuleFilter.None();
            this.Countries  = countries ?? RuleFilter.None();

            this.Factors = factors ?? new ClientOrganisationalFactors[0];
            this.AggregateNonFactorableIntoOwnCategory = aggregateNonFactorableIntoOwnCategory;

            this.PerformTuning = performTuning;
        }
Ejemplo n.º 15
0
        public HighVolumeRuleEquitiesParameters(
            string id,
            TimeSpan windowSize,
            decimal?highVolumePercentageDaily,
            decimal?highVolumePercentageWindow,
            decimal?highVolumePercentageMarketCap,
            DecimalRangeRuleFilter marketCapFilter,
            DecimalRangeRuleFilter venueVolumeFilter,
            RuleFilter accounts,
            RuleFilter traders,
            RuleFilter markets,
            RuleFilter funds,
            RuleFilter strategies,
            RuleFilter sectors,
            RuleFilter industries,
            RuleFilter regions,
            RuleFilter countries,
            IReadOnlyCollection <ClientOrganisationalFactors> factors,
            bool aggregateNonFactorableIntoOwnCategory,
            bool performTuning)
        {
            this.Id = id ?? string.Empty;

            this.Windows = new TimeWindows(id, windowSize);
            this.HighVolumePercentageDaily     = highVolumePercentageDaily;
            this.HighVolumePercentageWindow    = highVolumePercentageWindow;
            this.HighVolumePercentageMarketCap = highVolumePercentageMarketCap;

            this.MarketCapFilter   = marketCapFilter ?? DecimalRangeRuleFilter.None();
            this.VenueVolumeFilter = venueVolumeFilter ?? DecimalRangeRuleFilter.None();

            this.Accounts   = accounts ?? RuleFilter.None();
            this.Traders    = traders ?? RuleFilter.None();
            this.Markets    = markets ?? RuleFilter.None();
            this.Funds      = funds ?? RuleFilter.None();
            this.Strategies = strategies ?? RuleFilter.None();

            this.Sectors    = sectors ?? RuleFilter.None();
            this.Industries = industries ?? RuleFilter.None();
            this.Regions    = regions ?? RuleFilter.None();
            this.Countries  = countries ?? RuleFilter.None();

            this.Factors = factors ?? new ClientOrganisationalFactors[0];
            this.AggregateNonFactorableIntoOwnCategory = aggregateNonFactorableIntoOwnCategory;

            this.PerformTuning = performTuning;
        }
Ejemplo n.º 16
0
        public RampingRuleEquitiesParameters(
            string id,
            TimeSpan windowSize,
            decimal autoCorrelationCoefficient,
            int?thresholdOrdersExecutedInWindow,
            decimal?thresholdVolumePercentageWindow,
            DecimalRangeRuleFilter marketCapFilter,
            DecimalRangeRuleFilter venueVolumeFilter,
            RuleFilter accounts,
            RuleFilter traders,
            RuleFilter markets,
            RuleFilter funds,
            RuleFilter strategy,
            RuleFilter sectors,
            RuleFilter industries,
            RuleFilter regions,
            RuleFilter countries,
            IReadOnlyCollection <ClientOrganisationalFactors> factors,
            bool aggregateNonFactorableIntoOwnCategory,
            bool performTuning)
        {
            this.Id      = id;
            this.Windows = new TimeWindows(id, windowSize);

            this.AutoCorrelationCoefficient      = autoCorrelationCoefficient;
            this.ThresholdOrdersExecutedInWindow = thresholdOrdersExecutedInWindow;
            this.ThresholdVolumePercentageWindow = thresholdVolumePercentageWindow;

            this.MarketCapFilter   = marketCapFilter ?? DecimalRangeRuleFilter.None();
            this.VenueVolumeFilter = venueVolumeFilter ?? DecimalRangeRuleFilter.None();

            this.Accounts   = accounts ?? RuleFilter.None();
            this.Traders    = traders ?? RuleFilter.None();
            this.Markets    = markets ?? RuleFilter.None();
            this.Funds      = funds ?? RuleFilter.None();
            this.Strategies = strategy ?? RuleFilter.None();

            this.Sectors    = sectors ?? RuleFilter.None();
            this.Industries = industries ?? RuleFilter.None();
            this.Regions    = regions ?? RuleFilter.None();
            this.Countries  = countries ?? RuleFilter.None();

            this.Factors = factors;
            this.AggregateNonFactorableIntoOwnCategory = aggregateNonFactorableIntoOwnCategory;

            this.PerformTuning = performTuning;
        }
Ejemplo n.º 17
0
 public IHighMarketCapFilter Build(RuleRunMode ruleRunMode,
                                   DecimalRangeRuleFilter marketCap,
                                   string ruleName,
                                   IUniverseDataRequestsSubscriber universeDataRequestsSubscriber,
                                   ISystemProcessOperationRunRuleContext operationRunRuleContext)
 {
     return(new HighMarketCapFilter(
                _universeMarketCacheFactory,
                ruleRunMode,
                marketCap,
                _tradingHoursService,
                operationRunRuleContext,
                universeDataRequestsSubscriber,
                this.currencyConverterService,
                ruleName,
                _loggerFactory.CreateLogger <HighMarketCapFilter>()));
 }
Ejemplo n.º 18
0
        public void Filter_WhenUniverseEventNull_MustNotBeFiltered()
        {
            var marketCapRangeRuleFilter = DecimalRangeRuleFilter.None();

            var highMarketCapFilter = new HighMarketCapFilter(
                _universeMarketCacheFactory,
                Engine.Rules.Rules.RuleRunMode.ValidationRun,
                marketCapRangeRuleFilter,
                _tradingHoursService,
                _operationRunRuleContext,
                _universeDataRequestsSubscriber,
                this.currencyConverterService,
                "test",
                _logger);

            var result = highMarketCapFilter.Filter(null);

            Assert.IsFalse(result);
        }
Ejemplo n.º 19
0
        public IUniverseFilterService Build(
            IUniverseRule filteredRule,
            RuleFilter accounts,
            RuleFilter traders,
            RuleFilter markets,
            RuleFilter funds,
            RuleFilter strategies,
            RuleFilter sectors,
            RuleFilter industries,
            RuleFilter regions,
            RuleFilter countries,
            DecimalRangeRuleFilter marketCap,
            RuleRunMode ruleRunMode,
            string ruleName,
            IUniverseDataRequestsSubscriber universeDataRequestsSubscriber,
            ISystemProcessOperationRunRuleContext operationRunRuleContext)
        {
            var highMarketCapFilter = this._highMarketCapFilterFactory.Build(
                ruleRunMode,
                marketCap,
                ruleName,
                universeDataRequestsSubscriber,
                operationRunRuleContext);

            return(new UniverseFilterService(
                       this._unsubscriberFactory,
                       highMarketCapFilter,
                       filteredRule,
                       accounts,
                       traders,
                       markets,
                       funds,
                       strategies,
                       sectors,
                       industries,
                       regions,
                       countries,
                       this._loggerFactory.CreateLogger <UniverseFilterService>()));
        }
Ejemplo n.º 20
0
        public void Filter_WhenUniverseEventAndHadMissingDataInUniverseEquityInterdayCache_MustBeFiltered()
        {
            var fundOne  = ((Order)null).Random();
            var eventOne = new UniverseEvent(UniverseStateEvent.Order, DateTime.UtcNow, fundOne);

            A.CallTo(() => _tradingHoursService.GetTradingHoursForMic(fundOne.Market.MarketIdentifierCode))
            .Returns(new TradingHours()
            {
                IsValid = true
            });

            A.CallTo(() => _universeEquityInterDayCache.Get(
                         A <MarketDataRequest> .That.Matches(
                             m => m.MarketIdentifierCode == fundOne.Market.MarketIdentifierCode &&
                             m.Cfi == fundOne.Instrument.Cfi
                             )))
            .Returns(MarketDataResponse <EquityInstrumentInterDayTimeBar> .MissingData());

            var marketCapRangeRuleFilter = new DecimalRangeRuleFilter
            {
                Type = RuleFilterType.Include
            };

            var highMarketCapFilter = new HighMarketCapFilter(
                _universeMarketCacheFactory,
                Engine.Rules.Rules.RuleRunMode.ValidationRun,
                marketCapRangeRuleFilter,
                _tradingHoursService,
                _operationRunRuleContext,
                _universeDataRequestsSubscriber,
                this.currencyConverterService,
                "test",
                _logger);

            var result = highMarketCapFilter.Filter(eventOne);

            Assert.IsTrue(result);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="HighVolumeVenueFilter"/> class.
 /// </summary>
 /// <param name="timeWindows">
 /// The time windows.
 /// </param>
 /// <param name="decimalRangeRuleFilter">
 /// The decimal range rule filter.
 /// </param>
 /// <param name="universeOrderFilter">
 /// The universe order filter.
 /// </param>
 /// <param name="runRuleContext">
 /// The run rule context.
 /// </param>
 /// <param name="equityMarketCacheFactory">
 /// The universe market cache factory.
 /// </param>
 /// <param name="fixedIncomeMarketCacheFactory">
 /// The universe market cache factory.
 /// </param>
 /// <param name="ruleRunMode">
 /// The rule run mode.
 /// </param>
 /// <param name="marketTradingHoursService">
 /// The market trading hours service.
 /// </param>
 /// <param name="dataRequestsSubscriber">
 /// The data requests subscriber.
 /// </param>
 /// <param name="source">
 /// The source.
 /// </param>
 /// <param name="stackLogger">
 /// The stack logger.
 /// </param>
 /// <param name="logger">
 /// The logger.
 /// </param>
 public HighVolumeVenueFilter(
     TimeWindows timeWindows,
     DecimalRangeRuleFilter decimalRangeRuleFilter,
     IUniverseOrderFilter universeOrderFilter,
     ISystemProcessOperationRunRuleContext runRuleContext,
     IUniverseEquityMarketCacheFactory equityMarketCacheFactory,
     IUniverseFixedIncomeMarketCacheFactory fixedIncomeMarketCacheFactory,
     RuleRunMode ruleRunMode,
     IMarketTradingHoursService marketTradingHoursService,
     IUniverseDataRequestsSubscriber dataRequestsSubscriber,
     DataSource source,
     ILogger <TradingHistoryStack> stackLogger,
     ILogger <HighVolumeVenueFilter> logger)
     : base(
         timeWindows.BackwardWindowSize,
         timeWindows.BackwardWindowSize,
         timeWindows.FutureWindowSize,
         Domain.Surveillance.Scheduling.Rules.UniverseFilter,
         Versioner.Version(1, 0),
         nameof(HighVolumeVenueFilter),
         runRuleContext,
         equityMarketCacheFactory,
         fixedIncomeMarketCacheFactory,
         ruleRunMode,
         logger,
         stackLogger)
 {
     this.eventExpiration        = this.TradeBackwardWindowSize + this.TradeBackwardWindowSize + TimeSpan.FromDays(3);
     this.tradingHoursService    = marketTradingHoursService ?? throw new ArgumentNullException(nameof(marketTradingHoursService));
     this.decimalRangeRuleFilter = decimalRangeRuleFilter ?? DecimalRangeRuleFilter.None();
     this.orderFilter            = universeOrderFilter ?? throw new ArgumentNullException(nameof(universeOrderFilter));
     this.dataRequestSubscriber  = dataRequestsSubscriber ?? throw new ArgumentNullException(nameof(dataRequestsSubscriber));
     this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
     this.UniverseEventsPassedFilter = new HashSet <Order>();
     this.source = source;
 }
        public MarkingTheCloseEquitiesParameters(
            string id,
            TimeSpan windowSize,
            decimal?percentageThresholdDailyVolume,
            decimal?percentageThresholdWindowVolume,
            decimal?percentThresholdOffTouch,
            IReadOnlyCollection <ClientOrganisationalFactors> factors,
            bool aggregateNonFactorableIntoOwnCategory,
            bool performTuning)
        {
            this.Id = id ?? string.Empty;

            this.Windows = new TimeWindows(id, windowSize);
            this.PercentageThresholdDailyVolume  = percentageThresholdDailyVolume;
            this.PercentageThresholdWindowVolume = percentageThresholdWindowVolume;
            this.PercentThresholdOffTouch        = percentThresholdOffTouch;

            this.MarketCapFilter   = DecimalRangeRuleFilter.None();
            this.VenueVolumeFilter = DecimalRangeRuleFilter.None();

            this.Accounts   = RuleFilter.None();
            this.Traders    = RuleFilter.None();
            this.Markets    = RuleFilter.None();
            this.Funds      = RuleFilter.None();
            this.Strategies = RuleFilter.None();

            this.Sectors    = RuleFilter.None();
            this.Industries = RuleFilter.None();
            this.Regions    = RuleFilter.None();
            this.Countries  = RuleFilter.None();

            this.Factors = factors ?? new ClientOrganisationalFactors[0];
            this.AggregateNonFactorableIntoOwnCategory = aggregateNonFactorableIntoOwnCategory;

            this.PerformTuning = performTuning;
        }