/// <summary> /// Gets <see cref="FutureHistory"/> object for a given symbol, date and resolution /// </summary> /// <param name="symbol">The symbol to retrieve historical future data for</param> /// <param name="date">Date of the data</param> /// <param name="resolution">The resolution to request</param> /// <returns>A <see cref="FutureHistory"/> object that contains historical future data.</returns> public FutureHistory GetFutureHistory(Symbol symbol, DateTime date, Resolution? resolution = null) { SetStartDate(date.AddDays(1)); var future = Securities[symbol] as Future; var provider = new BacktestingFutureChainProvider(); var allSymbols = provider.GetFutureContractList(future.Symbol, date); var requests = future.ContractFilter.Filter(new FutureFilterUniverse(allSymbols, new Tick { Time = date })) .Select(x => new HistoryRequest(date.AddDays(-1), date, typeof(QuoteBar), x, resolution ?? future.Resolution, future.Exchange.Hours, MarketHoursDatabase.FromDataFolder().GetDataTimeZone(future.Symbol.ID.Market, future.Symbol, future.Type), Resolution.Minute, future.IsExtendedMarketHours, future.IsCustomData(), DataNormalizationMode.Raw, LeanData.GetCommonTickTypeForCommonDataTypes(typeof(QuoteBar), future.Type)) ); return new FutureHistory(HistoryProvider.GetHistory(requests, TimeZone).Memoize()); }
/// <summary> /// Gets <see cref="OptionHistory"/> object for a given symbol, date and resolution /// </summary> /// <param name="symbol">The symbol to retrieve historical option data for</param> /// <param name="date">Date of the data</param> /// <param name="resolution">The resolution to request</param> /// <returns>A <see cref="OptionHistory"/> object that contains historical option data.</returns> public OptionHistory GetOptionHistory(Symbol symbol, DateTime date, Resolution? resolution = null) { SetStartDate(date.AddDays(1)); var option = Securities[symbol] as Option; var underlying = AddEquity(symbol.Underlying.Value, option.Resolution); var provider = new BacktestingOptionChainProvider(); var allSymbols = provider.GetOptionContractList(symbol.Underlying, date); var requests = History(symbol.Underlying, TimeSpan.FromDays(1), resolution) .SelectMany(x => option.ContractFilter.Filter(new OptionFilterUniverse(allSymbols, x))) .Distinct() .Select(x => new HistoryRequest(date.AddDays(-1), date, typeof(QuoteBar), x, resolution ?? option.Resolution, underlying.Exchange.Hours, MarketHoursDatabase.FromDataFolder().GetDataTimeZone(underlying.Symbol.ID.Market, underlying.Symbol, underlying.Type), Resolution.Minute, underlying.IsExtendedMarketHours, underlying.IsCustomData(), DataNormalizationMode.Raw, LeanData.GetCommonTickTypeForCommonDataTypes(typeof(QuoteBar), underlying.Type)) ); requests = requests.Union(new[] { new HistoryRequest(underlying.Subscriptions.FirstOrDefault(), underlying.Exchange.Hours, date.AddDays(-1), date) }); return new OptionHistory(HistoryProvider.GetHistory(requests.OrderByDescending(x => x.Symbol.SecurityType), TimeZone).Memoize()); }