/// <summary> /// Creates a new <see cref="AuxiliaryDataEnumerator"/> that will hold the /// corporate event providers /// </summary> /// <param name="config">The <see cref="SubscriptionDataConfig"/></param> /// <param name="factorFileProvider">Used for getting factor files</param> /// <param name="tradableDayNotifier">Tradable dates provider</param> /// <param name="mapFileResolver">Used for resolving the correct map files</param> /// <param name="includeAuxiliaryData">True to emit auxiliary data</param> /// <returns>The new auxiliary data enumerator</returns> public static IEnumerator <BaseData> CreateEnumerators( SubscriptionDataConfig config, IFactorFileProvider factorFileProvider, ITradableDatesNotifier tradableDayNotifier, MapFileResolver mapFileResolver, bool includeAuxiliaryData) { var mapFileToUse = GetMapFileToUse(config, mapFileResolver); var factorFile = GetFactorFileToUse(config, factorFileProvider); var enumerator = new AuxiliaryDataEnumerator( config, factorFile, mapFileToUse, new ITradableDateEventProvider[] { new MappingEventProvider(), new SplitEventProvider(), new DividendEventProvider(), new DelistingEventProvider() }, tradableDayNotifier, includeAuxiliaryData); return(enumerator); }
/// <summary> /// Creates a new instance /// </summary> /// <param name="config">The <see cref="SubscriptionDataConfig"/></param> /// <param name="factorFile">The factor file to use</param> /// <param name="mapFile">The <see cref="MapFile"/> to use</param> /// <param name="tradableDateEventProviders">The tradable dates event providers</param> /// <param name="tradableDayNotifier">Tradable dates provider</param> /// <param name="includeAuxiliaryData">True to emit auxiliary data</param> /// <param name="startTime">Start date for the data request</param> public AuxiliaryDataEnumerator( SubscriptionDataConfig config, Lazy <FactorFile> factorFile, Lazy <MapFile> mapFile, ITradableDateEventProvider [] tradableDateEventProviders, ITradableDatesNotifier tradableDayNotifier, bool includeAuxiliaryData, DateTime startTime) { _auxiliaryData = new Queue <BaseData>(); tradableDayNotifier.NewTradableDate += (sender, eventArgs) => { if (!_initialized) { Initialize(config, factorFile, mapFile, tradableDateEventProviders, startTime); } foreach (var tradableDateEventProvider in tradableDateEventProviders) { // Call implementation // and materialize list since we need symbol changes applied to the config // regardless of the includeAuxiliaryData argument var newEvents = tradableDateEventProvider.GetEvents(eventArgs).ToList(); if (includeAuxiliaryData) { foreach (var newEvent in newEvents) { _auxiliaryData.Enqueue(newEvent); } } } }; }
/// <summary> /// Creates a new <see cref="AuxiliaryDataEnumerator"/> that will hold the /// corporate event providers /// </summary> /// <param name="rawDataEnumerator">The underlying raw data enumerator</param> /// <param name="config">The <see cref="SubscriptionDataConfig"/></param> /// <param name="factorFileProvider">Used for getting factor files</param> /// <param name="tradableDayNotifier">Tradable dates provider</param> /// <param name="mapFileResolver">Used for resolving the correct map files</param> /// <param name="includeAuxiliaryData">True to emit auxiliary data</param> /// <param name="startTime">Start date for the data request</param> /// <returns>The new auxiliary data enumerator</returns> public static IEnumerator <BaseData> CreateEnumerators( IEnumerator <BaseData> rawDataEnumerator, SubscriptionDataConfig config, IFactorFileProvider factorFileProvider, ITradableDatesNotifier tradableDayNotifier, MapFileResolver mapFileResolver, bool includeAuxiliaryData, DateTime startTime) { var lazyFactorFile = new Lazy <FactorFile>(() => GetFactorFileToUse(config, factorFileProvider)); var enumerator = new AuxiliaryDataEnumerator( config, lazyFactorFile, new Lazy <MapFile>(() => GetMapFileToUse(config, mapFileResolver)), new ITradableDateEventProvider[] { new MappingEventProvider(), new SplitEventProvider(), new DividendEventProvider(), new DelistingEventProvider() }, tradableDayNotifier, includeAuxiliaryData, startTime); var priceScaleFactorEnumerator = new PriceScaleFactorEnumerator( rawDataEnumerator, config, lazyFactorFile); return(new SynchronizingEnumerator(priceScaleFactorEnumerator, enumerator)); }
/// <summary> /// Creates a new instance /// </summary> /// <param name="config">The <see cref="SubscriptionDataConfig"/></param> /// <param name="factorFile">The factor file to use</param> /// <param name="mapFile">The <see cref="MapFile"/> to use</param> /// <param name="tradableDateEventProviders">The tradable dates event providers</param> /// <param name="tradableDayNotifier">Tradable dates provider</param> /// <param name="startTime">Start date for the data request</param> public AuxiliaryDataEnumerator( SubscriptionDataConfig config, Lazy <FactorFile> factorFile, Lazy <MapFile> mapFile, ITradableDateEventProvider [] tradableDateEventProviders, ITradableDatesNotifier tradableDayNotifier, DateTime startTime) { _auxiliaryData = new Queue <BaseData>(); tradableDayNotifier.NewTradableDate += (sender, eventArgs) => { if (!_initialized) { Initialize(config, factorFile, mapFile, tradableDateEventProviders, startTime); } foreach (var tradableDateEventProvider in tradableDateEventProviders) { var newEvents = tradableDateEventProvider.GetEvents(eventArgs).ToList(); foreach (var newEvent in newEvents) { _auxiliaryData.Enqueue(newEvent); } } }; }
/// <summary> /// Creates a new instance /// </summary> /// <param name="config">The <see cref="SubscriptionDataConfig"/></param> /// <param name="factorFile">The factor file to use</param> /// <param name="mapFile">The <see cref="MapFile"/> to use</param> /// <param name="tradableDateEventProviders">The tradable dates event providers</param> /// <param name="tradableDayNotifier">Tradable dates provider</param> /// <param name="includeAuxiliaryData">True to emit auxiliary data</param> public AuxiliaryDataEnumerator( SubscriptionDataConfig config, FactorFile factorFile, MapFile mapFile, ITradableDateEventProvider [] tradableDateEventProviders, ITradableDatesNotifier tradableDayNotifier, bool includeAuxiliaryData) { _auxiliaryData = new Queue <BaseData>(); foreach (var tradableDateEventProvider in tradableDateEventProviders) { tradableDateEventProvider.Initialize( config, factorFile, mapFile); } tradableDayNotifier.NewTradableDate += (sender, eventArgs) => { foreach (var tradableDateEventProvider in tradableDateEventProviders) { // Call implementation var newEvents = tradableDateEventProvider.GetEvents(eventArgs); if (includeAuxiliaryData) { foreach (var newEvent in newEvents) { _auxiliaryData.Enqueue(newEvent); } } } }; }
/// <summary> /// Creates a new <see cref="AuxiliaryDataEnumerator"/> that will hold the /// corporate event providers /// </summary> /// <param name="rawDataEnumerator">The underlying raw data enumerator</param> /// <param name="config">The <see cref="SubscriptionDataConfig"/></param> /// <param name="factorFileProvider">Used for getting factor files</param> /// <param name="tradableDayNotifier">Tradable dates provider</param> /// <param name="mapFileResolver">Used for resolving the correct map files</param> /// <param name="includeAuxiliaryData">True to emit auxiliary data</param> /// <param name="startTime">Start date for the data request</param> /// <param name="enablePriceScaling">Applies price factor</param> /// <returns>The new auxiliary data enumerator</returns> public static IEnumerator <BaseData> CreateEnumerators( IEnumerator <BaseData> rawDataEnumerator, SubscriptionDataConfig config, IFactorFileProvider factorFileProvider, ITradableDatesNotifier tradableDayNotifier, MapFileResolver mapFileResolver, bool includeAuxiliaryData, DateTime startTime, bool enablePriceScaling = true) { var lazyFactorFile = new Lazy <FactorFile>(() => SubscriptionUtils.GetFactorFileToUse(config, factorFileProvider)); var tradableEventProviders = new List <ITradableDateEventProvider>(); if (config.Symbol.SecurityType == SecurityType.Equity) { tradableEventProviders.Add(new SplitEventProvider()); tradableEventProviders.Add(new DividendEventProvider()); } if (config.Symbol.SecurityType == SecurityType.Equity || config.Symbol.SecurityType == SecurityType.Base || config.Symbol.SecurityType == SecurityType.Option) { tradableEventProviders.Add(new MappingEventProvider()); } tradableEventProviders.Add(new DelistingEventProvider()); var enumerator = new AuxiliaryDataEnumerator( config, lazyFactorFile, new Lazy <MapFile>(() => GetMapFileToUse(config, mapFileResolver)), tradableEventProviders.ToArray(), tradableDayNotifier, includeAuxiliaryData, startTime); // avoid price scaling for backtesting; calculate it directly in worker // and allow subscription to extract the the data depending on config data mode var dataEnumerator = rawDataEnumerator; if (enablePriceScaling) { dataEnumerator = new PriceScaleFactorEnumerator( rawDataEnumerator, config, lazyFactorFile); } return(new SynchronizingEnumerator(dataEnumerator, enumerator)); }
/// <summary> /// Creates a new <see cref="AuxiliaryDataEnumerator"/> that will hold the /// corporate event providers /// </summary> /// <param name="rawDataEnumerator">The underlying raw data enumerator</param> /// <param name="config">The <see cref="SubscriptionDataConfig"/></param> /// <param name="factorFileProvider">Used for getting factor files</param> /// <param name="tradableDayNotifier">Tradable dates provider</param> /// <param name="mapFileProvider">The <see cref="MapFile"/> provider to use</param> /// <param name="startTime">Start date for the data request</param> /// <param name="enablePriceScaling">Applies price factor</param> /// <returns>The new auxiliary data enumerator</returns> public static IEnumerator <BaseData> CreateEnumerators( IEnumerator <BaseData> rawDataEnumerator, SubscriptionDataConfig config, IFactorFileProvider factorFileProvider, ITradableDatesNotifier tradableDayNotifier, IMapFileProvider mapFileProvider, DateTime startTime, bool enablePriceScaling = true) { var tradableEventProviders = new List <ITradableDateEventProvider>(); if (config.EmitSplitsAndDividends()) { tradableEventProviders.Add(new SplitEventProvider()); tradableEventProviders.Add(new DividendEventProvider()); } if (config.TickerShouldBeMapped()) { tradableEventProviders.Add(new MappingEventProvider()); } tradableEventProviders.Add(new DelistingEventProvider()); var enumerator = new AuxiliaryDataEnumerator( config, factorFileProvider, mapFileProvider, tradableEventProviders.ToArray(), tradableDayNotifier, startTime); // avoid price scaling for backtesting; calculate it directly in worker // and allow subscription to extract the the data depending on config data mode var dataEnumerator = rawDataEnumerator; if (enablePriceScaling && config.PricesShouldBeScaled()) { dataEnumerator = new PriceScaleFactorEnumerator( rawDataEnumerator, config, factorFileProvider); } return(new SynchronizingBaseDataEnumerator(dataEnumerator, enumerator)); }
/// <summary> /// Creates a new instance /// </summary> /// <param name="config">The <see cref="SubscriptionDataConfig"/></param> /// <param name="factorFileProvider">The factor file provider to use</param> /// <param name="mapFileProvider">The <see cref="MapFile"/> provider to use</param> /// <param name="tradableDateEventProviders">The tradable dates event providers</param> /// <param name="tradableDayNotifier">Tradable dates provider</param> /// <param name="startTime">Start date for the data request</param> public AuxiliaryDataEnumerator( SubscriptionDataConfig config, IFactorFileProvider factorFileProvider, IMapFileProvider mapFileProvider, ITradableDateEventProvider [] tradableDateEventProviders, ITradableDatesNotifier tradableDayNotifier, DateTime startTime) { Config = config; _startTime = startTime; _mapFileProvider = mapFileProvider; _auxiliaryData = new Queue <BaseData>(); _factorFileProvider = factorFileProvider; _tradableDateEventProviders = tradableDateEventProviders; if (tradableDayNotifier != null) { tradableDayNotifier.NewTradableDate += NewTradableDate; } }