/// <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 <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)); }
public void IsSetToNullIfNoDataAlwaysReturnsTrue() { var eventProvider = new TestableEventProvider(); var enumerator = new AuxiliaryDataEnumerator( _config, null, null, new ITradableDateEventProvider[] { eventProvider }, _tradableDayNotifier, true ); eventProvider.Data.Enqueue(_delistingEvent); _tradableDayNotifier.TriggerEvent(); Assert.Null(enumerator.Current); Assert.IsTrue(enumerator.MoveNext()); Assert.NotNull(enumerator.Current); Assert.AreEqual(_delistingEvent, enumerator.Current); Assert.IsTrue(enumerator.MoveNext()); Assert.Null(enumerator.Current); Assert.IsTrue(enumerator.MoveNext()); Assert.Null(enumerator.Current); }
/// <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)); }