Пример #1
0
        /// <summary>
        /// Adds a new subscription for universe selection
        /// </summary>
        /// <param name="request">The subscription request</param>
        private Subscription CreateUniverseSubscription(SubscriptionRequest request)
        {
            ISubscriptionEnumeratorFactory factory = _subscriptionFactory;

            if (request.Universe is ITimeTriggeredUniverse)
            {
                factory = new TimeTriggeredUniverseSubscriptionEnumeratorFactory(request.Universe as ITimeTriggeredUniverse,
                                                                                 MarketHoursDatabase.FromDataFolder(),
                                                                                 _timeProvider);

                if (request.Universe is UserDefinedUniverse)
                {
                    // for user defined universe we do not use a worker task, since calls to AddData can happen in any moment
                    // and we have to be able to inject selection data points into the enumerator
                    return(SubscriptionUtils.Create(request, factory.CreateEnumerator(request, _dataProvider)));
                }
            }
            if (request.Configuration.Type == typeof(CoarseFundamental))
            {
                factory = new BaseDataCollectionSubscriptionEnumeratorFactory();
            }
            if (request.Universe is OptionChainUniverse)
            {
                factory = new OptionChainUniverseSubscriptionEnumeratorFactory((req) =>
                {
                    if (!req.Configuration.SecurityType.IsOption())
                    {
                        var enumerator = _subscriptionFactory.CreateEnumerator(req, _dataProvider);
                        enumerator     = new FilterEnumerator <BaseData>(enumerator, data => data.DataType != MarketDataType.Auxiliary);
                        return(ConfigureEnumerator(req, true, enumerator));
                    }
                    var underlyingFactory = new BaseDataSubscriptionEnumeratorFactory(false, _mapFileProvider, _cacheProvider);
                    return(ConfigureEnumerator(req, true, underlyingFactory.CreateEnumerator(req, _dataProvider)));
                });
            }
            if (request.Universe is FuturesChainUniverse)
            {
                factory = new FuturesChainUniverseSubscriptionEnumeratorFactory((req, e) => ConfigureEnumerator(req, true, e), _cacheProvider);
            }

            // define our data enumerator
            var enumerator = factory.CreateEnumerator(request, _dataProvider);

            return(SubscriptionUtils.CreateAndScheduleWorker(request, enumerator, _factorFileProvider, true));
        }
Пример #2
0
        protected IEnumerator <BaseData> CreateUniverseEnumerator(SubscriptionRequest request, Func <SubscriptionRequest, IEnumerator <BaseData> > createUnderlyingEnumerator)
        {
            ISubscriptionEnumeratorFactory factory = _subscriptionFactory;

            if (request.Universe is ITimeTriggeredUniverse)
            {
                factory = new TimeTriggeredUniverseSubscriptionEnumeratorFactory(request.Universe as ITimeTriggeredUniverse,
                                                                                 MarketHoursDatabase.FromDataFolder(),
                                                                                 _timeProvider);

                if (request.Universe is UserDefinedUniverse)
                {
                    return(factory.CreateEnumerator(request, _dataProvider));
                }
            }
            else if (request.Configuration.Type == typeof(CoarseFundamental))
            {
                factory = new BaseDataCollectionSubscriptionEnumeratorFactory();
            }
            else if (request.Configuration.Type == typeof(ZipEntryName))
            {
                // TODO: subscription should already come in correctly built
                var resolution = request.Configuration.Resolution == Resolution.Tick ? Resolution.Second : request.Configuration.Resolution;

                // TODO: subscription should already come in as fill forward true
                request = new SubscriptionRequest(request, configuration: new SubscriptionDataConfig(request.Configuration, fillForward: true, resolution: resolution));

                var result = new BaseDataSubscriptionEnumeratorFactory(_algorithm.OptionChainProvider, _algorithm.FutureChainProvider)
                             .CreateEnumerator(request, _dataProvider);
                result = ConfigureEnumerator(request, true, result);
                return(TryAppendUnderlyingEnumerator(request, result, createUnderlyingEnumerator));
            }

            // define our data enumerator
            var enumerator = factory.CreateEnumerator(request, _dataProvider);

            return(enumerator);
        }
Пример #3
0
        /// <summary>
        /// Adds a new subscription for universe selection
        /// </summary>
        /// <param name="request">The subscription request</param>
        private Subscription CreateUniverseSubscription(SubscriptionRequest request)
        {
            ISubscriptionEnumeratorFactory factory = _subscriptionFactory;

            if (request.Universe is ITimeTriggeredUniverse)
            {
                factory = new TimeTriggeredUniverseSubscriptionEnumeratorFactory(request.Universe as ITimeTriggeredUniverse,
                                                                                 MarketHoursDatabase.FromDataFolder(),
                                                                                 _timeProvider);

                if (request.Universe is UserDefinedUniverse)
                {
                    // for user defined universe we do not use a worker task, since calls to AddData can happen in any moment
                    // and we have to be able to inject selection data points into the enumerator
                    return(SubscriptionUtils.Create(request, factory.CreateEnumerator(request, _dataProvider)));
                }
            }
            if (request.Configuration.Type == typeof(CoarseFundamental))
            {
                factory = new BaseDataCollectionSubscriptionEnumeratorFactory();
            }
            if (request.Universe is OptionChainUniverse)
            {
                factory = new OptionChainUniverseSubscriptionEnumeratorFactory((req, e) => ConfigureEnumerator(req, true, e),
                                                                               _mapFileProvider.Get(request.Security.Symbol.ID.Market), _factorFileProvider);
            }
            if (request.Universe is FuturesChainUniverse)
            {
                factory = new FuturesChainUniverseSubscriptionEnumeratorFactory((req, e) => ConfigureEnumerator(req, true, e));
            }

            // define our data enumerator
            var enumerator = factory.CreateEnumerator(request, _dataProvider);

            return(SubscriptionUtils.CreateAndScheduleWorker(request, enumerator));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="PostCreateConfigureSubscriptionEnumeratorFactory"/> class
 /// </summary>
 /// <param name="factory">The factory being wrapped</param>
 /// <param name="configurator">The configuration to be applied</param>
 public PostCreateConfigureSubscriptionEnumeratorFactory(ISubscriptionEnumeratorFactory factory, Func<IEnumerator<BaseData>, IEnumerator<BaseData>> configurator)
 {
     _factory = factory;
     _configurator = configurator;
 }
Пример #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PostCreateConfigureSubscriptionEnumeratorFactory"/> class
 /// </summary>
 /// <param name="factory">The factory being wrapped</param>
 /// <param name="configurator">The configuration to be applied</param>
 public PostCreateConfigureSubscriptionEnumeratorFactory(ISubscriptionEnumeratorFactory factory, Func <IEnumerator <BaseData>, IEnumerator <BaseData> > configurator)
 {
     _factory      = factory;
     _configurator = configurator;
 }