/// <summary> /// Creates a <see cref="SubscriptionDataReader"/> to read the specified request /// </summary> /// <param name="request">The subscription request to be read</param> /// <param name="dataProvider">Provider used to get data when it is not present on disk</param> /// <returns>An enumerator reading the subscription request</returns> public IEnumerator <BaseData> CreateEnumerator(SubscriptionRequest request, IDataProvider dataProvider) { var mapFileResolver = request.Configuration.SecurityType == SecurityType.Equity || request.Configuration.SecurityType == SecurityType.Option ? _mapFileProvider.Get(request.Security.Symbol.ID.Market) : MapFileResolver.Empty; var dataReader = new SubscriptionDataReader(request.Configuration, request.StartTimeLocal, request.EndTimeLocal, mapFileResolver, _factorFileProvider, _tradableDaysProvider(request), _isLiveMode, _zipDataCacheProvider ); dataReader.InvalidConfigurationDetected += (sender, args) => { _resultHandler.ErrorMessage(args.Message); }; dataReader.NumericalPrecisionLimited += (sender, args) => { _resultHandler.DebugMessage(args.Message); }; dataReader.DownloadFailed += (sender, args) => { _resultHandler.ErrorMessage(args.Message, args.StackTrace); }; dataReader.ReaderErrorDetected += (sender, args) => { _resultHandler.RuntimeError(args.Message, args.StackTrace); }; var enumerator = CorporateEventEnumeratorFactory.CreateEnumerators( request.Configuration, _factorFileProvider, dataReader, mapFileResolver, _includeAuxiliaryData); // has to be initialized after adding all the enumerators since it will execute a MoveNext dataReader.Initialize(); return(new SynchronizingEnumerator(dataReader, enumerator)); }
/// <summary> /// Creates a <see cref="SubscriptionDataReader"/> to read the specified request /// </summary> /// <param name="request">The subscription request to be read</param> /// <param name="dataProvider">Provider used to get data when it is not present on disk</param> /// <returns>An enumerator reading the subscription request</returns> public IEnumerator <BaseData> CreateEnumerator(SubscriptionRequest request, IDataProvider dataProvider) { var mapFileResolver = request.Configuration.TickerShouldBeMapped() ? _mapFileProvider.Get(request.Security.Symbol.ID.Market) : MapFileResolver.Empty; var dataReader = new SubscriptionDataReader(request.Configuration, request.StartTimeLocal, request.EndTimeLocal, mapFileResolver, _factorFileProvider, _tradableDaysProvider(request), _isLiveMode, _zipDataCacheProvider ); dataReader.InvalidConfigurationDetected += (sender, args) => { _resultHandler.ErrorMessage(args.Message); }; dataReader.NumericalPrecisionLimited += (sender, args) => { _resultHandler.DebugMessage(args.Message); }; dataReader.DownloadFailed += (sender, args) => { _resultHandler.ErrorMessage(args.Message, args.StackTrace); }; dataReader.ReaderErrorDetected += (sender, args) => { _resultHandler.RuntimeError(args.Message, args.StackTrace); }; var result = CorporateEventEnumeratorFactory.CreateEnumerators( dataReader, request.Configuration, _factorFileProvider, dataReader, mapFileResolver, _includeAuxiliaryData); return(result); }
/// <summary> /// Creates a <see cref="SubscriptionDataReader"/> to read the specified request /// </summary> /// <param name="request">The subscription request to be read</param> /// <param name="dataProvider">Provider used to get data when it is not present on disk</param> /// <returns>An enumerator reading the subscription request</returns> public IEnumerator <BaseData> CreateEnumerator(SubscriptionRequest request, IDataProvider dataProvider) { var mapFileResolver = request.Configuration.TickerShouldBeMapped() ? _mapFileProvider.Get(request.Security.Symbol.ID.Market) : MapFileResolver.Empty; var dataReader = new SubscriptionDataReader(request.Configuration, request.StartTimeLocal, request.EndTimeLocal, mapFileResolver, _factorFileProvider, _tradableDaysProvider(request), _isLiveMode, _zipDataCacheProvider, dataProvider ); dataReader.InvalidConfigurationDetected += (sender, args) => { _resultHandler.ErrorMessage(args.Message); }; dataReader.StartDateLimited += (sender, args) => { // Queue this warning into our dictionary to report on dispose if (_startDateLimitedWarnings.Count <= _startDateLimitedWarningsMaxCount) { _startDateLimitedWarnings.TryAdd(args.Symbol, args.Message); } }; dataReader.DownloadFailed += (sender, args) => { _resultHandler.ErrorMessage(args.Message, args.StackTrace); }; dataReader.ReaderErrorDetected += (sender, args) => { _resultHandler.RuntimeError(args.Message, args.StackTrace); }; dataReader.NumericalPrecisionLimited += (sender, args) => { // Set a hard limit to keep this warning list from getting unnecessarily large if (_numericalPrecisionLimitedWarnings.Count <= _numericalPrecisionLimitedWarningsMaxCount) { _numericalPrecisionLimitedWarnings.TryAdd(args.Symbol, args.Message); } }; var result = CorporateEventEnumeratorFactory.CreateEnumerators( dataReader, request.Configuration, _factorFileProvider, dataReader, mapFileResolver, request.StartTimeLocal, _enablePriceScaling); return(result); }