Exemplo n.º 1
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 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 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;
        }
Exemplo n.º 4
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 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();
        }
        public void NoneReturnsNewRangeFilterWithNoneFilterType()
        {
            var result = DecimalRangeRuleFilter.None();

            Assert.AreEqual(RuleFilterType.None, result.Type);
            Assert.AreEqual(null, result.Max);
            Assert.AreEqual(null, result.Min);
        }
        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;
        }
Exemplo n.º 8
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;
        }
Exemplo n.º 10
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;
        }
Exemplo n.º 11
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;
        }
Exemplo n.º 12
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);
        }
Exemplo n.º 13
0
        public void Filter_WhenUniverseEventUnderlyingEventIsNotOrder_MustNotBeFiltered()
        {
            var marketCapRangeRuleFilter = DecimalRangeRuleFilter.None();

            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);
        }
 /// <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;
        }