/* * 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). /// /// model class for passing in parameters for historical data /// Enumerable of base data for this symbol public IEnumerable Get(DataDownloaderGetParameters dataDownloaderGetParameters) { var symbol = dataDownloaderGetParameters.Symbol; var resolution = dataDownloaderGetParameters.Resolution; var startUtc = dataDownloaderGetParameters.StartUtc; var endUtc = dataDownloaderGetParameters.EndUtc; var tickType = dataDownloaderGetParameters.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(); } } }