Esempio n. 1
0
        /// <summary>
        /// The build subscriptions.
        /// </summary>
        /// <param name="execution">
        /// The execution.
        /// </param>
        /// <param name="player">
        /// The player.
        /// </param>
        /// <param name="alertStream">
        /// The alert stream.
        /// </param>
        /// <param name="dataRequestSubscriber">
        /// The data request subscriber.
        /// </param>
        /// <param name="judgementService">
        /// The judgement service.
        /// </param>
        /// <param name="operationContext">
        /// The operation context.
        /// </param>
        /// <param name="ruleParameters">
        /// The rule parameters.
        /// </param>
        /// <param name="args">
        /// The args.
        /// </param>
        /// <returns>
        /// The <see cref="IUniverseRule"/>.
        /// </returns>
        private IReadOnlyCollection <IUniverseRule> BuildSubscriptions(
            ScheduledExecution execution,
            IUniversePlayer player,
            IUniverseAlertStream alertStream,
            IUniverseDataRequestsSubscriber dataRequestSubscriber,
            IJudgementService judgementService,
            ISystemProcessOperationContext operationContext,
            RuleParameterDto ruleParameters,
            params Func <ScheduledExecution,
                         RuleParameterDto,
                         ISystemProcessOperationContext,
                         IUniverseDataRequestsSubscriber,
                         IJudgementService,
                         IUniverseAlertStream,
                         IReadOnlyCollection <IUniverseRule> >[] args)
        {
            var universeRules = new List <IUniverseRule>();

            foreach (var func in args)
            {
                var result = func.Invoke(
                    execution,
                    ruleParameters,
                    operationContext,
                    dataRequestSubscriber,
                    judgementService,
                    alertStream);

                universeRules.AddRange(result);
            }

            return(universeRules);
        }
Esempio n. 2
0
        /// <summary>
        /// The subscribe rules.
        /// </summary>
        /// <param name="execution">
        /// The execution.
        /// </param>
        /// <param name="player">
        /// The player.
        /// </param>
        /// <param name="alertStream">
        /// The alert stream.
        /// </param>
        /// <param name="dataRequestSubscriber">
        /// The data request subscriber.
        /// </param>
        /// <param name="judgementService">
        /// The judgement service.
        /// </param>
        /// <param name="operationContext">
        /// The operation context.
        /// </param>
        /// <param name="ruleParameters">
        /// The rule parameters.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        public async Task <IUniverseRuleSubscriptionSummary> SubscribeRules(
            ScheduledExecution execution,
            IUniversePlayer player,
            IUniverseAlertStream alertStream,
            IUniverseDataRequestsSubscriber dataRequestSubscriber,
            IJudgementService judgementService,
            ISystemProcessOperationContext operationContext,
            RuleParameterDto ruleParameters)
        {
            if (execution == null || player == null)
            {
                this.logger.LogInformation("received null execution or player. Returning");

                return(new UniverseRuleSubscriptionSummary(null, null));
            }

            var subscriptions = this.BuildSubscriptions(
                execution,
                player,
                alertStream,
                dataRequestSubscriber,
                judgementService,
                operationContext,
                ruleParameters,
                this.highVolumeEquitySubscriber.CollateSubscriptions,
                this.washTradeEquitySubscriber.CollateSubscriptions,
                this.highProfitEquitySubscriber.CollateSubscriptions,
                this.cancelledOrderEquitySubscriber.CollateSubscriptions,
                this.markingTheCloseEquitySubscriber.CollateSubscriptions,
                this.spoofingEquitySubscriber.CollateSubscriptions,
                this.rampingEquitySubscriber.CollateSubscriptions,
                this.placingOrdersEquitySubscriber.CollateSubscriptions,
                this.washTradeFixedIncomeSubscriber.CollateSubscriptions,
                this.highVolumeFixedIncomeSubscriber.CollateSubscriptions,
                this.highProfitFixedIncomeSubscriber.CollateSubscriptions);

            foreach (var subscription in subscriptions)
            {
                if (subscription == null)
                {
                    continue;
                }

                this.logger.LogInformation($"Subscribe Rules subscribing a {subscription.Rule.GetDescription()}");
                player.Subscribe(subscription);
            }

            var ids = this.idExtractor.ExtractIds(ruleParameters);

            if (ids == null || !ids.Any())
            {
                this.logger.LogError("did not have any ids successfully extracted from the rule parameters");

                return(new UniverseRuleSubscriptionSummary(null, null));
            }

            var jointIds = ids.Aggregate((a, b) => $"{a} {b}");

            this.logger.LogInformation($"subscriber processed for the following ids {jointIds}");

            return(await Task.FromResult(new UniverseRuleSubscriptionSummary(ids, subscriptions)));
        }