From fbf02771056b834f2a4668ce9e22e1ce31a22106 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Thu, 13 Feb 2025 10:04:42 -0400 Subject: [PATCH] Add initialize method to chain providers classes --- DownloaderDataProvider/Program.cs | 4 +- Engine/DataFeeds/BacktestingChainProvider.cs | 29 +++++++--- ...estingChainProviderInitializeParameters.cs | 26 +++++++++ .../BacktestingFutureChainProvider.cs | 9 ---- .../BacktestingOptionChainProvider.cs | 17 +----- Engine/DataFeeds/LiveFutureChainProvider.cs | 9 ---- Engine/DataFeeds/LiveOptionChainProvider.cs | 10 ---- Engine/DataFeeds/Queues/FakeDataQueue.cs | 4 +- Engine/Setup/BacktestingSetupHandler.cs | 9 +++- Engine/Setup/BrokerageSetupHandler.cs | 9 ++-- Research/QuantBook.cs | 9 +++- Tests/Algorithm/AlgorithmChainsTests.cs | 7 ++- Tests/Algorithm/AlgorithmHistoryTests.cs | 4 +- .../Options/OptionChainProviderTests.cs | 53 +++++++++---------- .../Securities/SecurityIdentifierTests.cs | 3 +- .../BacktestingFutureChainProviderTests.cs | 3 +- .../DataFeeds/FileSystemDataFeedTests.cs | 10 +++- .../DataFeeds/LiveTradingDataFeedTests.cs | 4 +- 18 files changed, 125 insertions(+), 94 deletions(-) create mode 100644 Engine/DataFeeds/BacktestingChainProviderInitializeParameters.cs diff --git a/DownloaderDataProvider/Program.cs b/DownloaderDataProvider/Program.cs index 0d174fbc45ea..4437948fd5c7 100644 --- a/DownloaderDataProvider/Program.cs +++ b/DownloaderDataProvider/Program.cs @@ -188,7 +188,9 @@ public static void InitializeConfigurations() var historyManager = Composer.Instance.GetExportedValueByTypeName(nameof(HistoryProviderManager)); historyManager.Initialize(new HistoryProviderInitializeParameters(null, null, dataProvider, _dataCacheProvider, mapFileProvider, factorFileProvider, _ => { }, false, new DataPermissionManager(), null, new AlgorithmSettings())); - optionChainProvider = new CachingOptionChainProvider(new LiveOptionChainProvider(mapFileProvider, historyManager)); + var baseOptionChainProvider = new LiveOptionChainProvider(); + baseOptionChainProvider.Initialize(new(mapFileProvider, historyManager)); + optionChainProvider = new CachingOptionChainProvider(baseOptionChainProvider); Composer.Instance.AddPart(optionChainProvider); } diff --git a/Engine/DataFeeds/BacktestingChainProvider.cs b/Engine/DataFeeds/BacktestingChainProvider.cs index ced7dc5e7ac4..ee24eb45acde 100644 --- a/Engine/DataFeeds/BacktestingChainProvider.cs +++ b/Engine/DataFeeds/BacktestingChainProvider.cs @@ -15,7 +15,6 @@ using System; using QuantConnect.Util; -using QuantConnect.Logging; using QuantConnect.Interfaces; using QuantConnect.Securities; using System.Collections.Generic; @@ -30,15 +29,33 @@ namespace QuantConnect.Lean.Engine.DataFeeds /// public abstract class BacktestingChainProvider { - private readonly IHistoryProvider _historyProvider; + /// + /// The map file provider instance to use + /// + protected IMapFileProvider MapFileProvider { get; private set; } + + /// + /// The history provider instance to use + /// + protected IHistoryProvider HistoryProvider { get; private set; } + + /// + /// Initializes a new instance of the class + /// + protected BacktestingChainProvider() + { + } /// /// Initializes a new instance of the class /// - /// The history provider to use - protected BacktestingChainProvider(IHistoryProvider historyProvider) + /// The initialization parameters + // TODO: This should be in the chain provider interfaces. + // They might be even be unified in a single interface (futures and options chains providers) + public void Initialize(ChainProviderInitializeParameters parameters) { - _historyProvider = historyProvider; + HistoryProvider = parameters.HistoryProvider; + MapFileProvider = parameters.MapFileProvider; } /// @@ -68,7 +85,7 @@ protected IEnumerable GetSymbols(Symbol canonicalSymbol, DateTime date) false, DataNormalizationMode.Raw, TickType.Quote); - var history = _historyProvider.GetHistory(new[] { request }, marketHoursEntry.DataTimeZone)?.ToList(); + var history = HistoryProvider.GetHistory(new[] { request }, marketHoursEntry.DataTimeZone)?.ToList(); var symbols = history == null || history.Count == 0 ? Enumerable.Empty() diff --git a/Engine/DataFeeds/BacktestingChainProviderInitializeParameters.cs b/Engine/DataFeeds/BacktestingChainProviderInitializeParameters.cs new file mode 100644 index 000000000000..cb0e019aec79 --- /dev/null +++ b/Engine/DataFeeds/BacktestingChainProviderInitializeParameters.cs @@ -0,0 +1,26 @@ +/* + * 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 QuantConnect.Interfaces; + +namespace QuantConnect.Lean.Engine.DataFeeds +{ + /// + /// DTO for initializing the + /// + /// The map file provider instance to use + /// The history provider to use + public record ChainProviderInitializeParameters(IMapFileProvider MapFileProvider, IHistoryProvider HistoryProvider); +} diff --git a/Engine/DataFeeds/BacktestingFutureChainProvider.cs b/Engine/DataFeeds/BacktestingFutureChainProvider.cs index 7be6cb0ac90c..82a12521b596 100644 --- a/Engine/DataFeeds/BacktestingFutureChainProvider.cs +++ b/Engine/DataFeeds/BacktestingFutureChainProvider.cs @@ -24,15 +24,6 @@ namespace QuantConnect.Lean.Engine.DataFeeds /// public class BacktestingFutureChainProvider : BacktestingChainProvider, IFutureChainProvider { - /// - /// Initializes a new instance of the class - /// - /// The history provider to use - public BacktestingFutureChainProvider(IHistoryProvider historyProvider) - : base(historyProvider) - { - } - /// /// Gets the list of future contracts for a given underlying symbol /// diff --git a/Engine/DataFeeds/BacktestingOptionChainProvider.cs b/Engine/DataFeeds/BacktestingOptionChainProvider.cs index 8090e7587103..8cdc59491655 100644 --- a/Engine/DataFeeds/BacktestingOptionChainProvider.cs +++ b/Engine/DataFeeds/BacktestingOptionChainProvider.cs @@ -25,24 +25,11 @@ namespace QuantConnect.Lean.Engine.DataFeeds /// public class BacktestingOptionChainProvider : BacktestingChainProvider, IOptionChainProvider { - private IMapFileProvider _mapFileProvider; - - /// - /// Creates a new instance - /// - /// The map file provider instance to use - /// The history provider to use - public BacktestingOptionChainProvider(IMapFileProvider mapFileProvider, IHistoryProvider historyProvider) - : base(historyProvider) - { - _mapFileProvider = mapFileProvider; - } - /// /// Gets the list of option contracts for a given underlying symbol /// /// The option or the underlying symbol to get the option chain for. - /// Providing the option allows targetting an option ticker different than the default e.g. SPXW + /// Providing the option allows targeting an option ticker different than the default e.g. SPXW /// The date for which to request the option chain (only used in backtesting) /// The list of option contracts public virtual IEnumerable GetOptionContractList(Symbol symbol, DateTime date) @@ -91,7 +78,7 @@ private Symbol MapUnderlyingSymbol(Symbol underlying, DateTime date) { if (underlying.RequiresMapping()) { - var mapFileResolver = _mapFileProvider.Get(AuxiliaryDataKey.Create(underlying)); + var mapFileResolver = MapFileProvider.Get(AuxiliaryDataKey.Create(underlying)); var mapFile = mapFileResolver.ResolveMapFile(underlying); var ticker = mapFile.GetMappedSymbol(date, underlying.Value); return underlying.UpdateMappedSymbol(ticker); diff --git a/Engine/DataFeeds/LiveFutureChainProvider.cs b/Engine/DataFeeds/LiveFutureChainProvider.cs index a6dff21c4c8f..340a4e620580 100644 --- a/Engine/DataFeeds/LiveFutureChainProvider.cs +++ b/Engine/DataFeeds/LiveFutureChainProvider.cs @@ -27,15 +27,6 @@ namespace QuantConnect.Lean.Engine.DataFeeds /// public class LiveFutureChainProvider : BacktestingFutureChainProvider { - /// - /// Initializes a new instance of the class - /// - /// The history provider to use - public LiveFutureChainProvider(IHistoryProvider historyProvider) - : base(historyProvider) - { - } - /// /// Gets the list of future contracts for a given underlying symbol /// diff --git a/Engine/DataFeeds/LiveOptionChainProvider.cs b/Engine/DataFeeds/LiveOptionChainProvider.cs index 1df5fdf5dfaa..848d3bb7e2b7 100644 --- a/Engine/DataFeeds/LiveOptionChainProvider.cs +++ b/Engine/DataFeeds/LiveOptionChainProvider.cs @@ -68,16 +68,6 @@ static LiveOptionChainProvider() _client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-US", 0.5)); } - /// - /// Creates a new instance - /// - /// The map file provider instance to use - /// The history provider to use - public LiveOptionChainProvider(IMapFileProvider mapFileProvider, IHistoryProvider historyProvider) - : base(mapFileProvider, historyProvider) - { - } - /// /// Gets the option chain associated with the underlying Symbol /// diff --git a/Engine/DataFeeds/Queues/FakeDataQueue.cs b/Engine/DataFeeds/Queues/FakeDataQueue.cs index 2e96190024e5..88c5ba1a569c 100644 --- a/Engine/DataFeeds/Queues/FakeDataQueue.cs +++ b/Engine/DataFeeds/Queues/FakeDataQueue.cs @@ -73,7 +73,9 @@ public FakeDataQueue(IDataAggregator dataAggregator, int dataPointsPerSecondPerS { historyManager = Composer.Instance.GetPart(); } - _optionChainProvider = new LiveOptionChainProvider(mapFileProvider, historyManager); + var optionChainProvider = new LiveOptionChainProvider(); + optionChainProvider.Initialize(new(mapFileProvider, historyManager)); + _optionChainProvider = optionChainProvider; _marketHoursDatabase = MarketHoursDatabase.FromDataFolder(); _symbolExchangeTimeZones = new Dictionary(); diff --git a/Engine/Setup/BacktestingSetupHandler.cs b/Engine/Setup/BacktestingSetupHandler.cs index 2fae413be97e..67a4bbe6a6d5 100644 --- a/Engine/Setup/BacktestingSetupHandler.cs +++ b/Engine/Setup/BacktestingSetupHandler.cs @@ -167,10 +167,15 @@ public bool Setup(SetupHandlerParameters parameters) algorithm.Schedule.SetEventSchedule(parameters.RealTimeHandler); // set the option chain provider - algorithm.SetOptionChainProvider(new CachingOptionChainProvider(new BacktestingOptionChainProvider(parameters.MapFileProvider, algorithm.HistoryProvider))); + var optionChainProvider = new BacktestingOptionChainProvider(); + var initParameters = new ChainProviderInitializeParameters(parameters.MapFileProvider, algorithm.HistoryProvider); + optionChainProvider.Initialize(initParameters); + algorithm.SetOptionChainProvider(new CachingOptionChainProvider(optionChainProvider)); // set the future chain provider - algorithm.SetFutureChainProvider(new CachingFutureChainProvider(new BacktestingFutureChainProvider(algorithm.HistoryProvider))); + var futureChainProvider = new BacktestingFutureChainProvider(); + futureChainProvider.Initialize(initParameters); + algorithm.SetFutureChainProvider(new CachingFutureChainProvider(futureChainProvider)); // before we call initialize BaseSetupHandler.LoadBacktestJobAccountCurrency(algorithm, job); diff --git a/Engine/Setup/BrokerageSetupHandler.cs b/Engine/Setup/BrokerageSetupHandler.cs index f0af54ce9edb..4cfefd875356 100644 --- a/Engine/Setup/BrokerageSetupHandler.cs +++ b/Engine/Setup/BrokerageSetupHandler.cs @@ -254,8 +254,9 @@ public bool Setup(SetupHandlerParameters parameters) var optionChainProvider = Composer.Instance.GetPart(); if (optionChainProvider == null) { - optionChainProvider = new CachingOptionChainProvider( - new LiveOptionChainProvider(parameters.MapFileProvider, algorithm.HistoryProvider)); + var baseOptionChainProvider = new LiveOptionChainProvider(); + baseOptionChainProvider.Initialize(new(parameters.MapFileProvider, algorithm.HistoryProvider)); + optionChainProvider = new CachingOptionChainProvider(baseOptionChainProvider); Composer.Instance.AddPart(optionChainProvider); } // set the option chain provider @@ -264,7 +265,9 @@ public bool Setup(SetupHandlerParameters parameters) var futureChainProvider = Composer.Instance.GetPart(); if (futureChainProvider == null) { - futureChainProvider = new CachingFutureChainProvider(new LiveFutureChainProvider(algorithm.HistoryProvider)); + var baseFutureChainProvider = new LiveFutureChainProvider(); + baseFutureChainProvider.Initialize(new(parameters.MapFileProvider, algorithm.HistoryProvider)); + futureChainProvider = new CachingFutureChainProvider(baseFutureChainProvider); Composer.Instance.AddPart(futureChainProvider); } // set the future chain provider diff --git a/Research/QuantBook.cs b/Research/QuantBook.cs index 1c3ee71f71f9..c64ca5bbfbe6 100644 --- a/Research/QuantBook.cs +++ b/Research/QuantBook.cs @@ -199,8 +199,13 @@ public QuantBook() : base() ) ); - SetOptionChainProvider(new CachingOptionChainProvider(new BacktestingOptionChainProvider(mapFileProvider, HistoryProvider))); - SetFutureChainProvider(new CachingFutureChainProvider(new BacktestingFutureChainProvider(HistoryProvider))); + var initParameters = new ChainProviderInitializeParameters(mapFileProvider, HistoryProvider); + var optionChainProvider = new BacktestingOptionChainProvider(); + optionChainProvider.Initialize(initParameters); + var futureChainProvider = new BacktestingFutureChainProvider(); + futureChainProvider.Initialize(initParameters); + SetOptionChainProvider(new CachingOptionChainProvider(optionChainProvider)); + SetFutureChainProvider(new CachingFutureChainProvider(futureChainProvider)); SetAlgorithmMode(AlgorithmMode.Research); SetDeploymentTarget(Config.GetValue("deployment-target", DeploymentTarget.LocalPlatform)); diff --git a/Tests/Algorithm/AlgorithmChainsTests.cs b/Tests/Algorithm/AlgorithmChainsTests.cs index 18a9724eb972..6d2cf04af0b3 100644 --- a/Tests/Algorithm/AlgorithmChainsTests.cs +++ b/Tests/Algorithm/AlgorithmChainsTests.cs @@ -43,10 +43,13 @@ public void SetUp() _algorithm.SetHistoryProvider(TestGlobals.HistoryProvider); _algorithm.SubscriptionManager.SetDataManager(new DataManagerStub(_algorithm)); - _optionChainProvider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); + var initParameters = new ChainProviderInitializeParameters(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); + _optionChainProvider = new BacktestingOptionChainProvider(); + _optionChainProvider.Initialize(initParameters); _algorithm.SetOptionChainProvider(_optionChainProvider); - _futureChainProvider = new BacktestingFutureChainProvider(TestGlobals.HistoryProvider); + _futureChainProvider = new BacktestingFutureChainProvider(); + _futureChainProvider.Initialize(initParameters); _algorithm.SetFutureChainProvider(_futureChainProvider); } diff --git a/Tests/Algorithm/AlgorithmHistoryTests.cs b/Tests/Algorithm/AlgorithmHistoryTests.cs index 101c7cf99181..fc872668efcf 100644 --- a/Tests/Algorithm/AlgorithmHistoryTests.cs +++ b/Tests/Algorithm/AlgorithmHistoryTests.cs @@ -4334,7 +4334,9 @@ private static void AssertFuturesHistoryWithDifferentContractDepthOffsetsResults { CheckThatHistoryResultsHaveEqualBarCount(historyResults, expectedHistoryCount); - var futureChainProvider = new BacktestingFutureChainProvider(TestGlobals.HistoryProvider); + var futureChainProvider = new BacktestingFutureChainProvider(); + futureChainProvider.Initialize(new(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider)); + var firstDateTime = historyResults[0][0].EndTime; var futureChain = futureChainProvider.GetFutureContractList(expectedSymbol, firstDateTime).ToList(); diff --git a/Tests/Common/Securities/Options/OptionChainProviderTests.cs b/Tests/Common/Securities/Options/OptionChainProviderTests.cs index e5a892aaed48..57a0a8e7dea8 100644 --- a/Tests/Common/Securities/Options/OptionChainProviderTests.cs +++ b/Tests/Common/Securities/Options/OptionChainProviderTests.cs @@ -30,14 +30,26 @@ namespace QuantConnect.Tests.Common.Securities.Options [TestFixture, Parallelizable(ParallelScope.Fixtures)] public class OptionChainProviderTests { + private BacktestingOptionChainProvider _backtestingOptionChainProvider; + private LiveOptionChainProvider _liveOptionChainProvider; + + [OneTimeSetUp] + public void OneTimeSetUp() + { + _backtestingOptionChainProvider = new BacktestingOptionChainProvider(); + _backtestingOptionChainProvider.Initialize(new(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider)); + + _liveOptionChainProvider = new LiveOptionChainProvider(); + _liveOptionChainProvider.Initialize(new(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider)); + } + [Test] public void UsesMultipleResolutionsFutureOption() { // we don't have minute data for this date var date = new DateTime(2020, 01, 7); var future = Symbol.CreateFuture(QuantConnect.Securities.Futures.Indices.SP500EMini, Market.CME, new DateTime(2020, 6, 19)); - var provider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var optionChain = provider.GetOptionContractList(future, date).OrderBy(s => s.ID.StrikePrice).ToList(); + var optionChain = _backtestingOptionChainProvider.GetOptionContractList(future, date).OrderBy(s => s.ID.StrikePrice).ToList(); Assert.IsTrue(optionChain.All(x => x.SecurityType == SecurityType.FutureOption)); Assert.IsTrue(optionChain.All(x => x.ID.Symbol == "ES")); @@ -55,8 +67,7 @@ public void BacktestingOptionChainProviderUsesPreviousTradableDateChain() var date = new DateTime(2014, 6, 7); Assert.AreEqual(DayOfWeek.Saturday, date.DayOfWeek); - var provider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var twxOptionChain = provider.GetOptionContractList(Symbol.Create("TWX", SecurityType.Equity, Market.USA), date) + var twxOptionChain = _backtestingOptionChainProvider.GetOptionContractList(Symbol.Create("TWX", SecurityType.Equity, Market.USA), date) .ToList(); Assert.AreEqual(184, twxOptionChain.Count); @@ -67,8 +78,7 @@ public void BacktestingOptionChainProviderUsesPreviousTradableDateChain() [Test] public void BacktestingOptionChainProviderLoadsEquityOptionChain() { - var provider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var twxOptionChain = provider.GetOptionContractList(Symbol.Create("TWX", SecurityType.Equity, Market.USA), new DateTime(2014, 6, 5)) + var twxOptionChain = _backtestingOptionChainProvider.GetOptionContractList(Symbol.Create("TWX", SecurityType.Equity, Market.USA), new DateTime(2014, 6, 5)) .ToList(); Assert.AreEqual(184, twxOptionChain.Count); @@ -79,8 +89,7 @@ public void BacktestingOptionChainProviderLoadsEquityOptionChain() [Test] public void BacktestingOptionChainProviderLoadsFutureOptionChain() { - var provider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var esOptionChain = provider.GetOptionContractList( + var esOptionChain = _backtestingOptionChainProvider.GetOptionContractList( Symbol.CreateFuture( QuantConnect.Securities.Futures.Indices.SP500EMini, Market.CME, @@ -99,9 +108,7 @@ public void BacktestingOptionChainProviderIndexOption() var spxOption = Symbol.CreateCanonicalOption(Symbols.SPX); foreach (var option in new [] { Symbols.SPX, spxOption }) { - var provider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - - var optionChain = provider.GetOptionContractList(option, new DateTime(2021, 01, 04)).ToList(); + var optionChain = _backtestingOptionChainProvider.GetOptionContractList(option, new DateTime(2021, 01, 04)).ToList(); Assert.AreEqual(6, optionChain.Count); Assert.AreEqual(3200, optionChain.OrderBy(s => s.ID.StrikePrice).First().ID.StrikePrice); @@ -121,9 +128,7 @@ public void BacktestingOptionChainProviderWeeklyIndexOption() var spxWeeklyOption = Symbol.CreateCanonicalOption(Symbols.SPX, "SPXW", null, null); foreach (var option in new[] { spxWeeklyOption }) { - var provider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - - var optionChain = provider.GetOptionContractList(option, new DateTime(2021, 01, 04)).ToList(); + var optionChain = _backtestingOptionChainProvider.GetOptionContractList(option, new DateTime(2021, 01, 04)).ToList(); Assert.AreEqual(12, optionChain.Count); Assert.AreEqual(3700, optionChain.OrderBy(s => s.ID.StrikePrice).First().ID.StrikePrice); @@ -141,8 +146,6 @@ public void BacktestingOptionChainProviderWeeklyIndexOption() public void BacktestingOptionChainProviderResolvesSymbolMapping() { var ticker = "GOOCV"; // Old ticker, should resolve and fetch GOOG - var provider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var underlyingSymbol = QuantConnect.Symbol.Create(ticker, SecurityType.Equity, Market.USA); var alias = "?" + underlyingSymbol.Value; var optionSymbol = Symbol.CreateOption( @@ -154,7 +157,7 @@ public void BacktestingOptionChainProviderResolvesSymbolMapping() SecurityIdentifier.DefaultDate, alias); - var googOptionChain = provider.GetOptionContractList(optionSymbol.Underlying, new DateTime(2015, 12, 23)) + var googOptionChain = _backtestingOptionChainProvider.GetOptionContractList(optionSymbol.Underlying, new DateTime(2015, 12, 23)) .ToList(); Assert.AreEqual(118, googOptionChain.Count); @@ -192,14 +195,12 @@ public void CachingProviderCachesSymbolsByDate() [Test] public void LiveOptionChainProviderReturnsData() { - var provider = new LiveOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var spxOption = Symbol.CreateCanonicalOption(Symbols.SPX); var spxwOption = Symbol.CreateCanonicalOption(Symbols.SPX, "SPXW", null, null); foreach (var symbol in new[] { Symbols.SPY, Symbols.AAPL, Symbols.MSFT, Symbols.SPX, spxOption, spxwOption }) { - var result = provider.GetOptionContractList(symbol, DateTime.Today).ToList(); + var result = _liveOptionChainProvider.GetOptionContractList(symbol, DateTime.Today).ToList(); var countCall = result.Count(x => x.ID.OptionRight == OptionRight.Call); var countPut = result.Count(x => x.ID.OptionRight == OptionRight.Put); @@ -225,8 +226,7 @@ public void LiveOptionChainProviderReturnsNoDataForInvalidSymbol() { var symbol = Symbol.Create("ABCDEF123", SecurityType.Equity, Market.USA); - var provider = new LiveOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var result = provider.GetOptionContractList(symbol, DateTime.Today); + var result = _liveOptionChainProvider.GetOptionContractList(symbol, DateTime.Today); Assert.IsFalse(result.Any()); } @@ -250,8 +250,7 @@ public void LiveOptionChainProviderReturnsFutureOptionData() } var underlyingFuture = Symbol.CreateFuture("ES", Market.CME, expiry); - var provider = new LiveOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var result = provider.GetOptionContractList(underlyingFuture, now).ToList(); + var result = _liveOptionChainProvider.GetOptionContractList(underlyingFuture, now).ToList(); Assert.AreNotEqual(0, result.Count); @@ -272,8 +271,7 @@ public void LiveOptionChainProviderReturnsNoDataForOldFuture() var december = now.AddMonths(-now.Month).AddYears(-1); var underlyingFuture = Symbol.CreateFuture("ES", Market.CME, december); - var provider = new LiveOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var result = provider.GetOptionContractList(underlyingFuture, december); + var result = _liveOptionChainProvider.GetOptionContractList(underlyingFuture, december); Assert.AreEqual(0, result.Count()); } @@ -299,8 +297,7 @@ public void BacktestingOptionChainProviderReturnsMultipleContractsForZipFileCont strike, expiry); - var provider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); - var contracts = provider.GetOptionContractList(underlying, new DateTime(2020, 1, 5)) + var contracts = _backtestingOptionChainProvider.GetOptionContractList(underlying, new DateTime(2020, 1, 5)) .ToHashSet(); Assert.IsTrue( diff --git a/Tests/Common/Securities/SecurityIdentifierTests.cs b/Tests/Common/Securities/SecurityIdentifierTests.cs index 584c32558935..e894f3684d70 100644 --- a/Tests/Common/Securities/SecurityIdentifierTests.cs +++ b/Tests/Common/Securities/SecurityIdentifierTests.cs @@ -559,7 +559,8 @@ public void HighPrecisionNumberThrows(double strike) [Test, Ignore("Requires complete option data to validate chain")] public void ValidateAAPLOptionChainSecurityIdentifiers() { - var chainProvider = new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider); + var chainProvider = new BacktestingOptionChainProvider(); + chainProvider.Initialize(new(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider)); var aapl = Symbol.Create("AAPL", SecurityType.Equity, Market.USA); var chains = new HashSet(); var expectedChains = File.ReadAllLines("TestData/aapl_chain.csv") diff --git a/Tests/Engine/DataFeeds/BacktestingFutureChainProviderTests.cs b/Tests/Engine/DataFeeds/BacktestingFutureChainProviderTests.cs index 328d739c51e8..3c8b876b6850 100644 --- a/Tests/Engine/DataFeeds/BacktestingFutureChainProviderTests.cs +++ b/Tests/Engine/DataFeeds/BacktestingFutureChainProviderTests.cs @@ -33,7 +33,8 @@ public void SetUp() { // Store initial Log Handler _logHandler = Log.LogHandler; - _provider = new BacktestingFutureChainProvider(TestGlobals.HistoryProvider); + _provider = new BacktestingFutureChainProvider(); + _provider.Initialize(new(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider)); } [OneTimeTearDown] diff --git a/Tests/Engine/DataFeeds/FileSystemDataFeedTests.cs b/Tests/Engine/DataFeeds/FileSystemDataFeedTests.cs index fcc921ca82dd..7a878d3eebf2 100644 --- a/Tests/Engine/DataFeeds/FileSystemDataFeedTests.cs +++ b/Tests/Engine/DataFeeds/FileSystemDataFeedTests.cs @@ -175,7 +175,10 @@ public void OptionChainEnumerator(bool fillForward) algorithm.Transactions.SetOrderProcessor(new FakeOrderProcessor()); algorithm.SetStartDate(new DateTime(2014, 06, 06)); algorithm.SetEndDate(new DateTime(2014, 06, 09)); - algorithm.SetOptionChainProvider(new BacktestingOptionChainProvider(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider)); + + var optionChainProvider = new BacktestingOptionChainProvider(); + optionChainProvider.Initialize(new(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider)); + algorithm.SetOptionChainProvider(optionChainProvider); var dataPermissionManager = new DataPermissionManager(); using var synchronizer = new Synchronizer(); @@ -224,7 +227,10 @@ public void FutureChainEnumerator(bool fillForward) algorithm.Transactions.SetOrderProcessor(new FakeOrderProcessor()); algorithm.SetStartDate(new DateTime(2013, 10, 07)); algorithm.SetEndDate(new DateTime(2013, 10, 08)); - algorithm.SetFutureChainProvider(new BacktestingFutureChainProvider(TestGlobals.HistoryProvider)); + + var optionChainProvider = new BacktestingOptionChainProvider(); + optionChainProvider.Initialize(new(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider)); + algorithm.SetOptionChainProvider(optionChainProvider); var dataPermissionManager = new DataPermissionManager(); using var synchronizer = new Synchronizer(); diff --git a/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs b/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs index e1fe83c17718..12156533aaef 100644 --- a/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs +++ b/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs @@ -1029,7 +1029,9 @@ public void WarmupExpiredContinuousFuture(bool useWarmupResolution) _manualTimeProvider.SetCurrentTimeUtc(_startDate); var endDate = _startDate.AddDays(30); - _algorithm.SetFutureChainProvider(new BacktestingFutureChainProvider(TestGlobals.HistoryProvider)); + var futureChainProvider = new BacktestingFutureChainProvider(); + futureChainProvider.Initialize(new(TestGlobals.MapFileProvider, TestGlobals.HistoryProvider)); + _algorithm.SetFutureChainProvider(futureChainProvider); _algorithm.UniverseSettings.Resolution = Resolution.Daily; if (useWarmupResolution) {