コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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;
            }
        }