/// <summary> /// Creates a new universe and adds it to the algorithm. This is for coarse and fine fundamental US Equity data and /// will be executed on day changes in the NewYork time zone (<see cref="TimeZones.NewYork"/> /// </summary> /// <param name="coarseSelector">Defines an initial coarse selection</param> /// <param name="fineSelector">Defines a more detailed selection with access to more data</param> public void AddUniverse(Func <IEnumerable <CoarseFundamental>, IEnumerable <Symbol> > coarseSelector, Func <IEnumerable <FineFundamental>, IEnumerable <Symbol> > fineSelector) { // create a new universe for coarse fundamental data var coarse = new CoarseFundamentalUniverse(UniverseSettings, SecurityInitializer, coarseSelector); // create a new universe for fine fundamental data var fine = new FineFundamentalUniverse(UniverseSettings, SecurityInitializer, fineSelector); // wire them up such that the results from coarse will be piped into fine var chained = coarse.ChainedTo(fine, configurationPerSymbol: true); // finally add the chained universe AddUniverse(chained); }
public void ReturnsExpectedTimestamps() { var symbol = CoarseFundamental.CreateUniverseSymbol(Market.USA); var config = new SubscriptionDataConfig(typeof(CoarseFundamental), symbol, Resolution.Daily, TimeZones.NewYork, TimeZones.NewYork, false, false, false, false, TickType.Trade, false); var security = new Security( SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), config, new Cash(Currencies.USD, 0, 1), SymbolProperties.GetDefault(Currencies.USD), ErrorCurrencyConverter.Instance, RegisteredSecurityDataTypesProvider.Null, new SecurityCache() ); var universeSettings = new UniverseSettings(Resolution.Daily, 2m, true, false, TimeSpan.FromDays(1)); var securityInitializer = new BrokerageModelSecurityInitializer(new DefaultBrokerageModel(), SecuritySeeder.Null); var universe = new CoarseFundamentalUniverse(universeSettings, securityInitializer, x => new List <Symbol> { Symbols.AAPL }); var fileProvider = new DefaultDataProvider(); var factory = new BaseDataCollectionSubscriptionEnumeratorFactory(); var dateStart = new DateTime(2014, 3, 26); var dateEnd = new DateTime(2014, 3, 27); var days = (dateEnd - dateStart).Days + 1; var request = new SubscriptionRequest(true, universe, security, config, dateStart, dateEnd); using (var enumerator = factory.CreateEnumerator(request, fileProvider)) { dateStart = dateStart.AddDays(-1); for (var i = 0; i <= days; i++) { Assert.IsTrue(enumerator.MoveNext()); var current = enumerator.Current as BaseDataCollection; Assert.IsNotNull(current); Assert.AreEqual(dateStart.AddDays(i), current.Time); Assert.AreEqual(dateStart.AddDays(i), current.EndTime); Assert.AreEqual(dateStart.AddDays(i - 1), current.Data[0].Time); Assert.AreEqual(dateStart.AddDays(i), current.Data[0].EndTime); } Assert.IsFalse(enumerator.MoveNext()); Assert.IsNotNull(enumerator.Current); } }
public void DoesNotLeakMemory() { var symbol = CoarseFundamental.CreateUniverseSymbol(Market.USA); var config = new SubscriptionDataConfig(typeof(CoarseFundamental), symbol, Resolution.Daily, TimeZones.NewYork, TimeZones.NewYork, false, false, false, false, TickType.Trade, false); var security = new Security( SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), config, new Cash(Currencies.USD, 0, 1), SymbolProperties.GetDefault(Currencies.USD), ErrorCurrencyConverter.Instance, RegisteredSecurityDataTypesProvider.Null, new SecurityCache() ); var universeSettings = new UniverseSettings(Resolution.Daily, 2m, true, false, TimeSpan.FromDays(1)); var securityInitializer = new BrokerageModelSecurityInitializer(new DefaultBrokerageModel(), SecuritySeeder.Null); var universe = new CoarseFundamentalUniverse(universeSettings, securityInitializer, x => new List <Symbol> { Symbols.AAPL }); var fileProvider = new DefaultDataProvider(); var factory = new BaseDataCollectionSubscriptionEnumeratorFactory(); GC.Collect(); var ramUsageBeforeLoop = OS.TotalPhysicalMemoryUsed; var date = new DateTime(2014, 3, 25); const int iterations = 1000; for (var i = 0; i < iterations; i++) { var request = new SubscriptionRequest(true, universe, security, config, date, date); using (var enumerator = factory.CreateEnumerator(request, fileProvider)) { enumerator.MoveNext(); } } GC.Collect(); var ramUsageAfterLoop = OS.TotalPhysicalMemoryUsed; Log.Trace($"RAM usage - before: {ramUsageBeforeLoop} MB, after: {ramUsageAfterLoop} MB"); Assert.IsTrue(ramUsageAfterLoop - ramUsageBeforeLoop < 10); }
public Universe AddUniverse(Func <IEnumerable <CoarseFundamental>, IEnumerable <Symbol> > coarseSelector, Func <IEnumerable <FineFundamental>, IEnumerable <Symbol> > fineSelector) { var coarse = new CoarseFundamentalUniverse(UniverseSettings, coarseSelector); return(AddUniverse(new FineFundamentalFilteredUniverse(coarse, fineSelector))); }
/// <summary> /// Creates a new universe and adds it to the algorithm. This is for coarse and fine fundamental US Equity data and /// will be executed on day changes in the NewYork time zone (<see cref="TimeZones.NewYork"/> /// </summary> /// <param name="coarseSelector">Defines an initial coarse selection</param> /// <param name="fineSelector">Defines a more detailed selection with access to more data</param> public void AddUniverse(Func <IEnumerable <CoarseFundamental>, IEnumerable <Symbol> > coarseSelector, Func <IEnumerable <FineFundamental>, IEnumerable <Symbol> > fineSelector) { var coarse = new CoarseFundamentalUniverse(UniverseSettings, SecurityInitializer, coarseSelector); AddUniverse(new FineFundamentalFilteredUniverse(coarse, fineSelector)); }