/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Generic; using QuantConnect.Data; using QuantConnect.Securities; using QuantConnect.Util; namespace QuantConnect.ToolBox.Polygon { /// /// Data downloader class for pulling data from Polygon.io /// public class PolygonDataDownloader : IDataDownloader, IDisposable { private readonly PolygonDataQueueHandler _historyProvider = new PolygonDataQueueHandler(false); /// /// Get historical data enumerable for a single symbol, type and resolution given this start and end time (in UTC). /// /// Symbol for the data we're looking for. /// Resolution of the data request /// Start time of the data in UTC /// End time of the data in UTC /// Enumerable of base data for this symbol public IEnumerable Get(Symbol symbol, Resolution resolution, DateTime startUtc, DateTime endUtc) { return Get(symbol, resolution, startUtc, endUtc, TickType.Trade); } /// /// Get historical data enumerable for a single symbol, type and resolution given this start and end time (in UTC). /// /// Symbol for the data we're looking for. /// Resolution of the data request /// Start time of the data in UTC /// End time of the data in UTC /// The tick type (Trade or Quote) /// Enumerable of base data for this symbol public IEnumerable Get(Symbol symbol, Resolution resolution, DateTime startUtc, DateTime endUtc, TickType tickType) { if (symbol.SecurityType != SecurityType.Equity && symbol.SecurityType != SecurityType.Forex && symbol.SecurityType != SecurityType.Crypto) { throw new NotSupportedException($"Security type not supported: {symbol.SecurityType}"); } if (endUtc < startUtc) { throw new ArgumentException("The end date must be greater or equal than the start date."); } var dataType = LeanData.GetDataType(resolution, tickType); var historyRequest = new HistoryRequest(startUtc, endUtc, dataType, symbol, resolution, SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), TimeZones.NewYork, resolution, true, false, DataNormalizationMode.Adjusted, tickType); foreach (var baseData in _historyProvider.GetHistory(historyRequest)) { yield return baseData; } } /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// public void Dispose() { _historyProvider.DisposeSafely(); } } }