/// <summary> /// The time bar add. /// </summary> /// <param name="filteredOrders"> /// The filtered orders. /// </param> /// <param name="subConstraint"> /// The sub constraint. /// </param> /// <param name="func"> /// The function. /// </param> /// <typeparam name="T"> /// Query type /// </typeparam> /// <returns> /// The <see cref="T"/>. /// </returns> private IList <T> TimeBarAdd <T>( IList <Order> filteredOrders, IRuleDataSubConstraint subConstraint, Func <DateTime, DateTime, InstrumentIdentifiers, T> func) { var timeBars = new List <T>(); if (filteredOrders == null || !filteredOrders.Any()) { return(timeBars); } foreach (var order in filteredOrders) { if (order?.PlacedDate == null) { continue; } var query = func( order.PlacedDate.Value - subConstraint.BackwardOffset, order.MostRecentDateEvent() + subConstraint.ForwardOffset, order.Instrument.Identifiers); timeBars.Add(query); } return(timeBars); }
/// <summary> /// The map sub constraint to query. /// </summary> /// <param name="sub"> /// The sub. /// </param> /// <param name="orders"> /// The orders. /// </param> /// <param name="bmllTimeBar"> /// The time bar. /// </param> /// <param name="factsetTimeBar"> /// The fact set time bar. /// </param> /// <param name="refinitivIntraDayTimeBar"> /// The refinitiv intra day set time bar. /// </param> /// <param name="refinitivInterDayTimeBar"> /// The refinitiv inter day set time bar. /// </param> private void MapSubConstraintToQuery( IRuleDataSubConstraint sub, IReadOnlyCollection <Order> orders, List <BmllTimeBarQuery> bmllTimeBar, List <FactSetTimeBarQuery> factsetTimeBar, List <RefinitivIntraDayTimeBarQuery> refinitivIntraDayTimeBar, List <RefinitivInterDayTimeBarQuery> refinitivInterDayTimeBar) { var filteredOrders = orders.Where(sub.Predicate).ToList(); switch (sub.Source) { case DataSource.Any: this.logger.LogError("Any data source called in data manifest builder by an engine component - currently unsupported"); break; case DataSource.AnyInterday: var interdayQueries = this.TimeBarAdd( filteredOrders, sub, (a, b, c) => new FactSetTimeBarQuery(a, b, c)); factsetTimeBar.AddRange(interdayQueries); break; case DataSource.AnyIntraday: var intradayQueries = this.TimeBarAdd( filteredOrders, sub, (a, b, c) => new BmllTimeBarQuery(a, b, c)); bmllTimeBar.AddRange(intradayQueries); break; case DataSource.Bmll: var bmllTimeBarQueries = this.TimeBarAdd( filteredOrders, sub, (a, b, c) => new BmllTimeBarQuery(a, b, c)); bmllTimeBar.AddRange(bmllTimeBarQueries); break; case DataSource.Factset: var factSetTimeBarQueries = this.TimeBarAdd( filteredOrders, sub, (a, b, c) => new FactSetTimeBarQuery(a, b, c)); factsetTimeBar.AddRange(factSetTimeBarQueries); break; case DataSource.Markit: this.logger.LogError("Markit data requests are being issued without support in the data manifest builder"); break; case DataSource.None: break; case DataSource.RefinitivIntraday: var refinitivIntraDayTimeBarQueries = this.TimeBarAdd( filteredOrders, sub, (a, b, c) => new RefinitivIntraDayTimeBarQuery(a, b, c)); refinitivIntraDayTimeBar.AddRange(refinitivIntraDayTimeBarQueries); break; case DataSource.RefinitivInterday: var refinitivInterDayTimeBarQueries = this.TimeBarAdd( filteredOrders, sub, (a, b, c) => new RefinitivInterDayTimeBarQuery(a, b, c)); refinitivInterDayTimeBar.AddRange(refinitivInterDayTimeBarQueries); break; case DataSource.NoPrices: break; default: this.logger.LogError($"Argument out of range for data source {sub.Source}"); break; } }