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