/// <summary> /// Get historical data enumerable for a single symbol, type and resolution given this start and end time (in UTC). /// </summary> /// <param name="symbol">Symbol for the data we're looking for.</param> /// <param name="resolution">Resolution of the data request</param> /// <param name="startUtc">Start time of the data in UTC</param> /// <param name="endUtc">End time of the data in UTC</param> /// <returns>Enumerable of base data for this symbol</returns> public IEnumerable <BaseData> Get(Symbol symbol, Resolution resolution, DateTime startUtc, DateTime endUtc) { if (resolution == Resolution.Tick) { throw new NotSupportedException("Resolution not available: " + resolution); } if (endUtc < startUtc) { throw new ArgumentException("The end date must be greater or equal than the start date."); } var historyRequest = new HistoryRequest( startUtc, endUtc, typeof(QuoteBar), symbol, resolution, SecurityExchangeHours.AlwaysOpen(TimeZones.EasternStandard), DateTimeZone.Utc, resolution, false, false, DataNormalizationMode.Adjusted, TickType.Quote); var data = _brokerage.GetHistory(historyRequest); return(data); }
/// <summary> /// Get historical data enumerable for a single symbol, type and resolution given this start and end time (in UTC). /// </summary> /// <param name="dataDownloaderGetParameters">model class for passing in parameters for historical data</param> /// <returns>Enumerable of base data for this symbol</returns> public IEnumerable <BaseData> Get(DataDownloaderGetParameters dataDownloaderGetParameters) { var symbol = dataDownloaderGetParameters.Symbol; var resolution = dataDownloaderGetParameters.Resolution; var startUtc = dataDownloaderGetParameters.StartUtc; var endUtc = dataDownloaderGetParameters.EndUtc; var tickType = dataDownloaderGetParameters.TickType; if (tickType != TickType.Quote) { yield break; } if (resolution == Resolution.Tick) { throw new NotSupportedException("Resolution not available: " + resolution); } if (endUtc < startUtc) { throw new ArgumentException("The end date must be greater or equal than the start date."); } var symbols = new List <Symbol> { symbol }; if (symbol.IsCanonical()) { symbols = GetChainSymbols(symbol, true).ToList(); } var exchangeHours = MarketHoursDatabase.FromDataFolder().GetExchangeHours(symbol.ID.Market, symbol, symbol.SecurityType); var dataTimeZone = MarketHoursDatabase.FromDataFolder().GetDataTimeZone(symbol.ID.Market, symbol, symbol.SecurityType); foreach (var targetSymbol in symbols) { var historyRequest = new HistoryRequest(startUtc, endUtc, typeof(QuoteBar), targetSymbol, resolution, exchangeHours: exchangeHours, dataTimeZone: dataTimeZone, resolution, includeExtendedMarketHours: true, false, DataNormalizationMode.Adjusted, TickType.Quote); foreach (var baseData in _brokerage.GetHistory(historyRequest)) { yield return(baseData); } } }