From 89f3968eefd3a5c5e4ea016660329561a3b9e8c7 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Mon, 27 Oct 2025 18:17:53 -0300 Subject: [PATCH 001/103] Fix performance degradation on expirying assets (#9065) * Fix performance degradation on expirying assets - Options would expire and get removed, when the universe removed the security it would never be reseted on universe selection, causing leaks - Minor improvement for composer assembly loading - Minor improvement for loading exception interepreters, so it uses composer * Minor regression test fix * Add new benchmark algorithm --- .../EmptySPXOptionChainBenchmark.cs | 34 +++++++++++++++++++ ...AssignmentStatisticsRegressionAlgorithm.cs | 5 --- .../EmptySPXOptionChainBenchmark.py | 23 +++++++++++++ .../Python/Wrappers/AlgorithmPythonWrapper.cs | 2 +- .../Exceptions/StackExceptionInterpreter.cs | 19 ++++------- Common/Util/Composer.cs | 18 ++++++---- Engine/DataFeeds/DataManager.cs | 2 +- .../ClrBubbledExceptionInterpreterTests.cs | 2 +- ...lidTokenPythonExceptionInterpreterTests.cs | 2 +- ...KeyErrorPythonExceptionInterpreterTests.cs | 6 ++-- ...hodMatchPythonExceptionInterpreterTests.cs | 2 +- .../PythonExceptionInterpreterTests.cs | 6 ++-- .../StackExceptionInterpreterTests.cs | 2 +- ...dOperandPythonExceptionInterpreterTests.cs | 6 ++-- 14 files changed, 89 insertions(+), 40 deletions(-) create mode 100644 Algorithm.CSharp/Benchmarks/EmptySPXOptionChainBenchmark.cs create mode 100644 Algorithm.Python/Benchmarks/EmptySPXOptionChainBenchmark.py diff --git a/Algorithm.CSharp/Benchmarks/EmptySPXOptionChainBenchmark.cs b/Algorithm.CSharp/Benchmarks/EmptySPXOptionChainBenchmark.cs new file mode 100644 index 000000000000..60c93ed7e409 --- /dev/null +++ b/Algorithm.CSharp/Benchmarks/EmptySPXOptionChainBenchmark.cs @@ -0,0 +1,34 @@ +/* + * 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. +*/ + +namespace QuantConnect.Algorithm.CSharp.Benchmarks +{ + /// + /// Benchmark Algorithm that adds SPX option chain but does not trade it. + /// This is an interesting benchmark because SPX option chains are large + /// + public class EmptySPXOptionChainBenchmark : QCAlgorithm + { + public override void Initialize() + { + SetStartDate(2018, 1, 1); + SetEndDate(2020, 1, 1); + + var index = AddIndex("SPX"); + var option = AddOption(index); + option.SetFilter(-10, +10, 0, 30); + } + } +} diff --git a/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs b/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs index c5c7268adec0..b333bbcbee57 100644 --- a/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs @@ -68,11 +68,6 @@ public override void Initialize() public override void OnData(Slice slice) { - if (_goog.Price == 0 || _googCall600.Price == 0 || _googCall650.Price == 0) - { - return; - } - if (!Portfolio.Invested) { if (Time < _googCall600Symbol.ID.Date) diff --git a/Algorithm.Python/Benchmarks/EmptySPXOptionChainBenchmark.py b/Algorithm.Python/Benchmarks/EmptySPXOptionChainBenchmark.py new file mode 100644 index 000000000000..0744d3e53946 --- /dev/null +++ b/Algorithm.Python/Benchmarks/EmptySPXOptionChainBenchmark.py @@ -0,0 +1,23 @@ +# 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. + +from AlgorithmImports import * + +class EmptySPXOptionChainBenchmark(QCAlgorithm): + + def initialize(self): + self.set_start_date(2018, 1, 1) + self.set_end_date(2020, 1, 1) + self._index = self.add_index("SPX") + option = self.add_option(self._index) + option.set_filter(-10, +10, timedelta(0), timedelta(30)) diff --git a/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs b/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs index 4f9eb40171b0..5b11d40c5959 100644 --- a/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs +++ b/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs @@ -181,7 +181,7 @@ public AlgorithmPythonWrapper(string moduleName) catch (Exception e) { // perform exception interpretation for error in module import - var interpreter = StackExceptionInterpreter.CreateFromAssemblies(AppDomain.CurrentDomain.GetAssemblies()); + var interpreter = StackExceptionInterpreter.CreateFromAssemblies(); e = interpreter.Interpret(e, interpreter); throw new Exception($"AlgorithmPythonWrapper(): {interpreter.GetExceptionMessageHeader(e)}"); diff --git a/Common/Exceptions/StackExceptionInterpreter.cs b/Common/Exceptions/StackExceptionInterpreter.cs index 04892d06f365..315a2d612db4 100644 --- a/Common/Exceptions/StackExceptionInterpreter.cs +++ b/Common/Exceptions/StackExceptionInterpreter.cs @@ -15,6 +15,7 @@ using System; using System.Linq; +using QuantConnect.Util; using System.Reflection; using QuantConnect.Logging; using System.Collections.Generic; @@ -32,7 +33,7 @@ public class StackExceptionInterpreter : IExceptionInterpreter /// Stack interpreter instance /// public static readonly Lazy Instance = new Lazy( - () => StackExceptionInterpreter.CreateFromAssemblies(AppDomain.CurrentDomain.GetAssemblies())); + () => StackExceptionInterpreter.CreateFromAssemblies()); /// /// Determines the order that an instance of this class should be called @@ -111,23 +112,15 @@ public string GetExceptionMessageHeader(Exception exception) /// /// Creates a new by loading implementations with default constructors from the specified assemblies /// - /// The assemblies to scan /// A new containing interpreters from the specified assemblies - public static StackExceptionInterpreter CreateFromAssemblies(IEnumerable assemblies) + public static StackExceptionInterpreter CreateFromAssemblies() { var interpreters = - from assembly in assemblies.Where(x => - (!x.FullName?.StartsWith("System.", StringComparison.InvariantCultureIgnoreCase) ?? false) - && (!x.FullName?.StartsWith("Microsoft.", StringComparison.InvariantCultureIgnoreCase) ?? false)) - from type in assembly.GetTypes() - // ignore non-public and non-instantiable abstract types - where type.IsPublic && !type.IsAbstract // type implements IExceptionInterpreter - where typeof(IExceptionInterpreter).IsAssignableFrom(type) - // type is not mocked with MOQ library - where type.FullName != null && !type.FullName.StartsWith("Castle.Proxies.ObjectProxy", StringComparison.InvariantCultureIgnoreCase) + from type in Composer.Instance.GetExportedTypes() + // ignore non-public and non-instantiable abstract types // type has default parameterless ctor - where type.GetConstructor(new Type[0]) != null + where type.IsPublic && !type.IsAbstract && type.GetConstructor([]) != null // provide guarantee of deterministic ordering orderby type.FullName select (IExceptionInterpreter) Activator.CreateInstance(type); diff --git a/Common/Util/Composer.cs b/Common/Util/Composer.cs index a72d6c912953..9289ed5c24fb 100644 --- a/Common/Util/Composer.cs +++ b/Common/Util/Composer.cs @@ -393,16 +393,20 @@ private List LoadPartsSafely(string primaryDllLookupDi dllFiles = dllFiles.Concat(Directory.EnumerateFiles(pluginDirectory, "*.dll")); } - foreach (var file in dllFiles.DistinctBy(Path.GetFileName).Where(x => - !x.Contains("protobuf", StringComparison.InvariantCultureIgnoreCase) - && !x.Contains("Microsoft.", StringComparison.InvariantCultureIgnoreCase) - && !x.Contains("System.", StringComparison.InvariantCultureIgnoreCase) - && !x.Contains("Python.Runtime", StringComparison.InvariantCultureIgnoreCase) - && !x.Contains("Accord.", StringComparison.InvariantCultureIgnoreCase))) + foreach (var file in dllFiles.DistinctBy(Path.GetFileName)) { try { - var assembly = Assembly.LoadFrom(file); + Assembly assembly; + try + { + var asmName = AssemblyName.GetAssemblyName(file); + assembly = Assembly.Load(asmName); + } + catch (FileLoadException) + { + assembly = Assembly.LoadFrom(file); + } var asmCatalog = new AssemblyCatalog(assembly); var parts = asmCatalog.Parts.ToList(); lock (catalogs) diff --git a/Engine/DataFeeds/DataManager.cs b/Engine/DataFeeds/DataManager.cs index e39483f53af9..a1c1e5ca033e 100644 --- a/Engine/DataFeeds/DataManager.cs +++ b/Engine/DataFeeds/DataManager.cs @@ -19,7 +19,6 @@ using System.Collections.Specialized; using System.Linq; using QuantConnect.Data; -using QuantConnect.Data.Auxiliary; using QuantConnect.Data.Market; using QuantConnect.Data.UniverseSelection; using QuantConnect.Interfaces; @@ -402,6 +401,7 @@ private bool RemoveSubscriptionInternal(SubscriptionDataConfig configuration, Un _subscriptionDataConfigsEnumerator = null; } } + return true; } return false; } diff --git a/Tests/Common/Exceptions/ClrBubbledExceptionInterpreterTests.cs b/Tests/Common/Exceptions/ClrBubbledExceptionInterpreterTests.cs index 86bc105b757b..3a4c860f924c 100644 --- a/Tests/Common/Exceptions/ClrBubbledExceptionInterpreterTests.cs +++ b/Tests/Common/Exceptions/ClrBubbledExceptionInterpreterTests.cs @@ -95,7 +95,7 @@ public void VerifyMessageContainsStackTraceInformation() { var exception = CreateExceptionFromType(typeof(ClrBubbledException)); var assembly = typeof(ClrBubbledExceptionInterpreter).Assembly; - var interpreter = StackExceptionInterpreter.CreateFromAssemblies(new[] { assembly }); + var interpreter = StackExceptionInterpreter.CreateFromAssemblies(); exception = interpreter.Interpret(exception, NullExceptionInterpreter.Instance); Assert.True(exception.Message.Contains("Value cannot be null. (Parameter 'key')", StringComparison.InvariantCulture)); diff --git a/Tests/Common/Exceptions/InvalidTokenPythonExceptionInterpreterTests.cs b/Tests/Common/Exceptions/InvalidTokenPythonExceptionInterpreterTests.cs index 1f5087f2bd32..f63795c5af8a 100644 --- a/Tests/Common/Exceptions/InvalidTokenPythonExceptionInterpreterTests.cs +++ b/Tests/Common/Exceptions/InvalidTokenPythonExceptionInterpreterTests.cs @@ -73,7 +73,7 @@ public void VerifyMessageContainsStackTraceInformation() { var exception = CreateExceptionFromType(typeof(PythonException)); var assembly = typeof(PythonExceptionInterpreter).Assembly; - var interpreter = StackExceptionInterpreter.CreateFromAssemblies(new[] { assembly }); + var interpreter = StackExceptionInterpreter.CreateFromAssemblies(); exception = interpreter.Interpret(exception, NullExceptionInterpreter.Instance); Assert.True(exception.Message.Contains("x = 01")); } diff --git a/Tests/Common/Exceptions/KeyErrorPythonExceptionInterpreterTests.cs b/Tests/Common/Exceptions/KeyErrorPythonExceptionInterpreterTests.cs index a08da22cd8af..b86259999832 100644 --- a/Tests/Common/Exceptions/KeyErrorPythonExceptionInterpreterTests.cs +++ b/Tests/Common/Exceptions/KeyErrorPythonExceptionInterpreterTests.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -78,11 +78,11 @@ public void VerifyMessageContainsStackTraceInformation() { var exception = CreateExceptionFromType(typeof(PythonException)); var assembly = typeof(PythonExceptionInterpreter).Assembly; - var interpreter = StackExceptionInterpreter.CreateFromAssemblies(new[] { assembly }); + var interpreter = StackExceptionInterpreter.CreateFromAssemblies(); exception = interpreter.Interpret(exception, NullExceptionInterpreter.Instance); Assert.True(exception.Message.Contains("dict()['SPY']")); } private Exception CreateExceptionFromType(Type type) => type == typeof(PythonException) ? _pythonException : (Exception)Activator.CreateInstance(type); } -} \ No newline at end of file +} diff --git a/Tests/Common/Exceptions/NoMethodMatchPythonExceptionInterpreterTests.cs b/Tests/Common/Exceptions/NoMethodMatchPythonExceptionInterpreterTests.cs index bda9c80763e1..f97272859192 100644 --- a/Tests/Common/Exceptions/NoMethodMatchPythonExceptionInterpreterTests.cs +++ b/Tests/Common/Exceptions/NoMethodMatchPythonExceptionInterpreterTests.cs @@ -78,7 +78,7 @@ public void VerifyMessageContainsStackTraceInformation() { var exception = CreateExceptionFromType(typeof(PythonException)); var assembly = typeof(PythonExceptionInterpreter).Assembly; - var interpreter = StackExceptionInterpreter.CreateFromAssemblies(new[] { assembly }); + var interpreter = StackExceptionInterpreter.CreateFromAssemblies(); exception = interpreter.Interpret(exception, NullExceptionInterpreter.Instance); Assert.True(exception.Message.Contains("self.set_cash('SPY')")); } diff --git a/Tests/Common/Exceptions/PythonExceptionInterpreterTests.cs b/Tests/Common/Exceptions/PythonExceptionInterpreterTests.cs index d9285ae549d0..13b6f232b36c 100644 --- a/Tests/Common/Exceptions/PythonExceptionInterpreterTests.cs +++ b/Tests/Common/Exceptions/PythonExceptionInterpreterTests.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -78,11 +78,11 @@ public void VerifyMessageContainsStackTraceInformation() { var exception = CreateExceptionFromType(typeof(PythonException)); var assembly = typeof(PythonExceptionInterpreter).Assembly; - var interpreter = StackExceptionInterpreter.CreateFromAssemblies(new[] { assembly }); + var interpreter = StackExceptionInterpreter.CreateFromAssemblies(); exception = interpreter.Interpret(exception, NullExceptionInterpreter.Instance); Assert.True(exception.Message.Contains("x = 1 / 0")); } private Exception CreateExceptionFromType(Type type) => type == typeof(PythonException) ? _pythonException : (Exception)Activator.CreateInstance(type); } -} \ No newline at end of file +} diff --git a/Tests/Common/Exceptions/StackExceptionInterpreterTests.cs b/Tests/Common/Exceptions/StackExceptionInterpreterTests.cs index 08513e7b501a..9a5f4ef17660 100644 --- a/Tests/Common/Exceptions/StackExceptionInterpreterTests.cs +++ b/Tests/Common/Exceptions/StackExceptionInterpreterTests.cs @@ -28,7 +28,7 @@ public class StackExceptionInterpretersTests public void CreatesFromAssemblies() { var assembly = typeof(ClrBubbledExceptionInterpreter).Assembly; - var interpreter = StackExceptionInterpreter.CreateFromAssemblies(new[] {assembly}); + var interpreter = StackExceptionInterpreter.CreateFromAssemblies(); Assert.AreEqual(1, interpreter.Interpreters.Count(p => p.GetType() == typeof(ClrBubbledExceptionInterpreter))); } diff --git a/Tests/Common/Exceptions/UnsupportedOperandPythonExceptionInterpreterTests.cs b/Tests/Common/Exceptions/UnsupportedOperandPythonExceptionInterpreterTests.cs index 66f875984e97..94211cfd8396 100644 --- a/Tests/Common/Exceptions/UnsupportedOperandPythonExceptionInterpreterTests.cs +++ b/Tests/Common/Exceptions/UnsupportedOperandPythonExceptionInterpreterTests.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -78,11 +78,11 @@ public void VerifyMessageContainsStackTraceInformation() { var exception = CreateExceptionFromType(typeof(PythonException)); var assembly = typeof(PythonExceptionInterpreter).Assembly; - var interpreter = StackExceptionInterpreter.CreateFromAssemblies(new[] { assembly }); + var interpreter = StackExceptionInterpreter.CreateFromAssemblies(); exception = interpreter.Interpret(exception, NullExceptionInterpreter.Instance); Assert.True(exception.Message.Contains("x = None + \"Pepe Grillo\"")); } private Exception CreateExceptionFromType(Type type) => type == typeof(PythonException) ? _pythonException : (Exception)Activator.CreateInstance(type); } -} \ No newline at end of file +} From 2faf9217310c8cce3d2e80a12e788c2e082bd13e Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Tue, 28 Oct 2025 09:26:12 -0300 Subject: [PATCH 002/103] FixComposer Assembly Resolution (#9066) --- .../EmptySPXOptionChainBenchmark.cs | 4 +- .../EmptySPXOptionChainBenchmark.py | 4 +- Common/Util/Composer.cs | 95 +++++++------------ 3 files changed, 37 insertions(+), 66 deletions(-) diff --git a/Algorithm.CSharp/Benchmarks/EmptySPXOptionChainBenchmark.cs b/Algorithm.CSharp/Benchmarks/EmptySPXOptionChainBenchmark.cs index 60c93ed7e409..74a2f08881f3 100644 --- a/Algorithm.CSharp/Benchmarks/EmptySPXOptionChainBenchmark.cs +++ b/Algorithm.CSharp/Benchmarks/EmptySPXOptionChainBenchmark.cs @@ -24,11 +24,11 @@ public class EmptySPXOptionChainBenchmark : QCAlgorithm public override void Initialize() { SetStartDate(2018, 1, 1); - SetEndDate(2020, 1, 1); + SetEndDate(2020, 6, 1); var index = AddIndex("SPX"); var option = AddOption(index); - option.SetFilter(-10, +10, 0, 30); + option.SetFilter(x => x.IncludeWeeklys().Strikes(-30, 30).Expiration(0, 7)); } } } diff --git a/Algorithm.Python/Benchmarks/EmptySPXOptionChainBenchmark.py b/Algorithm.Python/Benchmarks/EmptySPXOptionChainBenchmark.py index 0744d3e53946..526c28ab24ae 100644 --- a/Algorithm.Python/Benchmarks/EmptySPXOptionChainBenchmark.py +++ b/Algorithm.Python/Benchmarks/EmptySPXOptionChainBenchmark.py @@ -17,7 +17,7 @@ class EmptySPXOptionChainBenchmark(QCAlgorithm): def initialize(self): self.set_start_date(2018, 1, 1) - self.set_end_date(2020, 1, 1) + self.set_end_date(2020, 6, 1) self._index = self.add_index("SPX") option = self.add_option(self._index) - option.set_filter(-10, +10, timedelta(0), timedelta(30)) + option.set_filter(lambda u: u.include_weeklys().strikes(-30, 30).expiration(0, 7)) diff --git a/Common/Util/Composer.cs b/Common/Util/Composer.cs index 9289ed5c24fb..c8a8597937d9 100644 --- a/Common/Util/Composer.cs +++ b/Common/Util/Composer.cs @@ -88,40 +88,17 @@ public Composer() var loadFromPluginDir = !string.IsNullOrWhiteSpace(PluginDirectory) && Directory.Exists(PluginDirectory) && new DirectoryInfo(PluginDirectory).FullName != primaryDllLookupDirectory; - _composableParts = Task.Run(() => LoadPartsSafely(primaryDllLookupDirectory, PluginDirectory, loadFromPluginDir)); - - // for performance we will load our assemblies and keep their exported types - // which is much faster that using CompositionContainer which uses reflexion - var exportedTypes = new ConcurrentBag(); - var fileNames = Directory.EnumerateFiles(primaryDllLookupDirectory, $"{nameof(QuantConnect)}.*.dll"); + var fileNames = Directory.EnumerateFiles(primaryDllLookupDirectory, "*.dll"); if (loadFromPluginDir) { - fileNames = fileNames.Concat(Directory.EnumerateFiles(PluginDirectory, $"{nameof(QuantConnect)}.*.dll")); + fileNames = fileNames.Concat(Directory.EnumerateFiles(PluginDirectory, "*.dll")); } - - Parallel.ForEach(fileNames.DistinctBy(Path.GetFileName), - file => - { - try - { - foreach (var type in - Assembly.LoadFrom(file).ExportedTypes.Where(type => !type.IsAbstract && !type.IsInterface && !type.IsEnum)) - { - exportedTypes.Add(type); - } - } - catch (Exception) - { - // ignored, just in case - } - } - ); - _exportedTypes = new List(exportedTypes); + LoadPartsSafely(fileNames.DistinctBy(Path.GetFileName)); } private CompositionContainer _compositionContainer; - private readonly IReadOnlyList _exportedTypes; - private readonly Task> _composableParts; + private IReadOnlyList _exportedTypes; + private List _composableParts; private readonly object _exportedValuesLockObject = new object(); private readonly Dictionary _exportedValues = new Dictionary(); @@ -232,22 +209,14 @@ public T GetExportedValueByTypeName(string typeName, bool forceTypeNameOnExis { try { - T instance = null; - IEnumerable values; - var type = typeof(T); - lock (_exportedValuesLockObject) + // if we've already loaded this part, then just return the same one + var instance = GetParts().FirstOrDefault(x => !forceTypeNameOnExisting || x.GetType().MatchesTypeName(typeName)); + if (instance != null) { - if (_exportedValues.TryGetValue(type, out values)) - { - // if we've already loaded this part, then just return the same one - instance = values.OfType().FirstOrDefault(x => !forceTypeNameOnExisting || x.GetType().MatchesTypeName(typeName)); - if (instance != null) - { - return instance; - } - } + return instance; } + var type = typeof(T); var typeT = _exportedTypes.Where(type1 => { try @@ -269,7 +238,7 @@ public T GetExportedValueByTypeName(string typeName, bool forceTypeNameOnExis if (instance == null) { // we want to get the requested part without instantiating each one of that type - var selectedPart = _composableParts.Result + var selectedPart = _composableParts .Where(x => { try @@ -350,10 +319,6 @@ public IEnumerable GetExportedValues() return values.OfType(); } - if (!_composableParts.IsCompleted) - { - _composableParts.Wait(); - } values = _compositionContainer.GetExportedValues().ToList(); _exportedValues[typeof(T)] = values; return values.OfType(); @@ -381,35 +346,40 @@ public void Reset() } } - private List LoadPartsSafely(string primaryDllLookupDirectory, string pluginDirectory, bool loadFromPluginDir) + private void LoadPartsSafely(IEnumerable files) { try { - var catalogs = new List(); - - IEnumerable dllFiles = Directory.EnumerateFiles(primaryDllLookupDirectory, "*.dll"); - if (loadFromPluginDir && Directory.Exists(pluginDirectory)) - { - dllFiles = dllFiles.Concat(Directory.EnumerateFiles(pluginDirectory, "*.dll")); - } - - foreach (var file in dllFiles.DistinctBy(Path.GetFileName)) + var exportedTypes = new ConcurrentBag(); + var catalogs = new ConcurrentBag(); + Parallel.ForEach(files, file => { try { + // we need to load assemblies so that C# algorithm dependencies are resolved correctly + // at the same time we need to load all QC dependencies to find all exports Assembly assembly; try { var asmName = AssemblyName.GetAssemblyName(file); assembly = Assembly.Load(asmName); } - catch (FileLoadException) + catch { + // handles dependencies that are not in the probing path but might duplicate loading an already loaded assembly assembly = Assembly.LoadFrom(file); } + + if (Path.GetFileName(file).StartsWith($"{nameof(QuantConnect)}.", StringComparison.InvariantCulture)) + { + foreach (var type in assembly.ExportedTypes.Where(type => !type.IsAbstract && !type.IsInterface && !type.IsEnum)) + { + exportedTypes.Add(type); + } + } var asmCatalog = new AssemblyCatalog(assembly); - var parts = asmCatalog.Parts.ToList(); - lock (catalogs) + var parts = asmCatalog.Parts.ToArray(); + if (parts.Length > 0) { catalogs.Add(asmCatalog); } @@ -418,10 +388,12 @@ private List LoadPartsSafely(string primaryDllLookupDi { Log.Trace($"Composer.LoadPartsSafely({file}): Skipping {ex.GetType().Name}: {ex.Message}"); } - }; + }); + + _exportedTypes = new List(exportedTypes); var aggregate = new AggregateCatalog(catalogs); _compositionContainer = new CompositionContainer(aggregate); - return _compositionContainer.Catalog.Parts.ToList(); + _composableParts = _compositionContainer.Catalog.Parts.ToList(); } catch (Exception exception) { @@ -431,7 +403,6 @@ private List LoadPartsSafely(string primaryDllLookupDi Log.Error(exception); } } - return new List(); } } } From 2c26e9fc26ca339b521bdc6480c3f72f4dfe4174 Mon Sep 17 00:00:00 2001 From: Alexandre Catarino Date: Thu, 30 Oct 2025 21:08:34 +0000 Subject: [PATCH 003/103] Adds Missing Indicator Constructor Overloads Without name Parameter (#9062) * Adds Missing Indicator Constructor Overloads with name Parameter * Fix Typoes --- Algorithm/QCAlgorithm.Indicators.cs | 4 ++-- Indicators/AccelerationBands.cs | 10 ++++++---- Indicators/AdvanceDeclineDifference.cs | 2 +- Indicators/AdvanceDeclineRatio.cs | 2 +- Indicators/AdvanceDeclineVolumeRatio.cs | 2 +- Indicators/ArmsIndex.cs | 2 +- Indicators/ChaikinMoneyFlow.cs | 13 +++++++++++-- Indicators/DerivativeOscillator.cs | 12 ++++++++++++ Indicators/FilteredIdentity.cs | 16 ++++++++++++++++ Indicators/Identity.cs | 2 +- Indicators/IntradayVwap.cs | 6 +++--- Indicators/SqueezeMomentum.cs | 12 ++++++++++++ Indicators/TimeProfile.cs | 8 +++++--- Indicators/VolumeProfile.cs | 8 +++++--- 14 files changed, 77 insertions(+), 22 deletions(-) diff --git a/Algorithm/QCAlgorithm.Indicators.cs b/Algorithm/QCAlgorithm.Indicators.cs index adae8e3107f9..cb822fede225 100644 --- a/Algorithm/QCAlgorithm.Indicators.cs +++ b/Algorithm/QCAlgorithm.Indicators.cs @@ -1435,7 +1435,7 @@ public MesaAdaptiveMovingAverage MAMA(Symbol symbol, decimal fastLimit = 0.5m, d [DocumentationAttribute(Indicators)] public VolumeProfile VP(Symbol symbol, int period = 2, decimal valueAreaVolumePercentage = 0.70m, decimal priceRangeRoundOff = 0.05m, Resolution resolution = Resolution.Daily, Func selector = null) { - var name = CreateIndicatorName(symbol, $"VP({period})", resolution); + var name = CreateIndicatorName(symbol, $"VP({period},{valueAreaVolumePercentage},{priceRangeRoundOff})", resolution); var marketProfile = new VolumeProfile(name, period, valueAreaVolumePercentage, priceRangeRoundOff); InitializeIndicator(marketProfile, resolution, selector, symbol); @@ -1456,7 +1456,7 @@ public VolumeProfile VP(Symbol symbol, int period = 2, decimal valueAreaVolumePe [DocumentationAttribute(Indicators)] public TimeProfile TP(Symbol symbol, int period = 2, decimal valueAreaVolumePercentage = 0.70m, decimal priceRangeRoundOff = 0.05m, Resolution resolution = Resolution.Daily, Func selector = null) { - var name = CreateIndicatorName(symbol, $"TP({period})", resolution); + var name = CreateIndicatorName(symbol, $"TP({period},{valueAreaVolumePercentage},{priceRangeRoundOff})", resolution); var marketProfile = new TimeProfile(name, period, valueAreaVolumePercentage, priceRangeRoundOff); InitializeIndicator(marketProfile, resolution, selector, symbol); diff --git a/Indicators/AccelerationBands.cs b/Indicators/AccelerationBands.cs index f57125b522b6..3dc3e9799de2 100644 --- a/Indicators/AccelerationBands.cs +++ b/Indicators/AccelerationBands.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -69,8 +69,10 @@ public AccelerationBands(string name, int period, decimal width, /// /// The period of the three moving average (middle, upper and lower band). /// A coefficient specifying the distance between the middle band and upper or lower bands. - public AccelerationBands(int period, decimal width) - : this($"ABANDS({period},{width})", period, width) + /// Type of the moving average. + public AccelerationBands(int period, decimal width, + MovingAverageType movingAverageType = MovingAverageType.Simple) + : this($"ABANDS({period},{width},{movingAverageType})", period, width, movingAverageType) { } @@ -122,4 +124,4 @@ protected override decimal ComputeNextValue(IBaseDataBar input) return MiddleBand.Current.Value; } } -} \ No newline at end of file +} diff --git a/Indicators/AdvanceDeclineDifference.cs b/Indicators/AdvanceDeclineDifference.cs index ef53cef51c76..88424a847739 100644 --- a/Indicators/AdvanceDeclineDifference.cs +++ b/Indicators/AdvanceDeclineDifference.cs @@ -26,7 +26,7 @@ public class AdvanceDeclineDifference : AdvanceDeclineIndicator /// /// Initializes a new instance of the class /// - public AdvanceDeclineDifference(string name) + public AdvanceDeclineDifference(string name = "A/D Difference") : base(name, (entries) => entries.Count(), (advance, decline) => advance - decline) { } } } diff --git a/Indicators/AdvanceDeclineRatio.cs b/Indicators/AdvanceDeclineRatio.cs index 3e06f0149ee1..47d7f6dd3c73 100644 --- a/Indicators/AdvanceDeclineRatio.cs +++ b/Indicators/AdvanceDeclineRatio.cs @@ -27,7 +27,7 @@ public class AdvanceDeclineRatio : AdvanceDeclineIndicator /// /// Initializes a new instance of the class /// - public AdvanceDeclineRatio(string name) + public AdvanceDeclineRatio(string name = "A/D Ratio") : base(name, (entries) => entries.Count(), (advance, decline) => decline == 0m ? advance : advance / decline) { } } } diff --git a/Indicators/AdvanceDeclineVolumeRatio.cs b/Indicators/AdvanceDeclineVolumeRatio.cs index 6b4fa3861b3b..82c6f42f374e 100644 --- a/Indicators/AdvanceDeclineVolumeRatio.cs +++ b/Indicators/AdvanceDeclineVolumeRatio.cs @@ -27,7 +27,7 @@ public class AdvanceDeclineVolumeRatio : AdvanceDeclineIndicator /// /// Initializes a new instance of the class /// - public AdvanceDeclineVolumeRatio(string name) + public AdvanceDeclineVolumeRatio(string name = "A/D Volume Rate") : base(name, (entries) => entries.Sum(x => x.Volume), (advance, decline) => decline == 0m ? advance : advance / decline) { } } } diff --git a/Indicators/ArmsIndex.cs b/Indicators/ArmsIndex.cs index 9defc00fc332..e197b140e9fa 100644 --- a/Indicators/ArmsIndex.cs +++ b/Indicators/ArmsIndex.cs @@ -40,7 +40,7 @@ public class ArmsIndex : TradeBarIndicator, IIndicatorWarmUpPeriodProvider /// /// Initializes a new instance of the class /// - public ArmsIndex(string name) : base(name) + public ArmsIndex(string name = "TRIN") : base(name) { ADRatio = new AdvanceDeclineRatio(name + "_A/D Ratio"); ADVRatio = new AdvanceDeclineVolumeRatio(name + "_A/D Volume Ratio"); diff --git a/Indicators/ChaikinMoneyFlow.cs b/Indicators/ChaikinMoneyFlow.cs index a85800df4de1..74f2295a9ea0 100644 --- a/Indicators/ChaikinMoneyFlow.cs +++ b/Indicators/ChaikinMoneyFlow.cs @@ -67,13 +67,22 @@ public override void Reset() /// A name for the indicator /// The period over which to perform computation public ChaikinMoneyFlow(string name, int period) - : base($"CMF({name})") + : base(name) { WarmUpPeriod = period; _flowRatioSum = new Sum(period); _volumeSum = new Sum(period); } + /// + /// Initializes a new instance of the ChaikinMoneyFlow class + /// + /// The period over which to perform computation + public ChaikinMoneyFlow(int period) + : this($"CMF({period})", period) + { + } + /// /// Computes the next value for this indicator from the given state. /// @@ -92,4 +101,4 @@ protected override decimal ComputeNextValue(TradeBar input) return !IsReady || _volumeSum == 0m ? 0m : _flowRatioSum / _volumeSum; } } -} \ No newline at end of file +} diff --git a/Indicators/DerivativeOscillator.cs b/Indicators/DerivativeOscillator.cs index 7ef7db1aa9d9..d6539b4cd1b0 100644 --- a/Indicators/DerivativeOscillator.cs +++ b/Indicators/DerivativeOscillator.cs @@ -53,6 +53,18 @@ public DerivativeOscillator(string name, int rsiPeriod, int smoothingRsiPeriod, WarmUpPeriod = (rsiPeriod + smoothingRsiPeriod + doubleSmoothingRsiPeriod + signalLinePeriod - 3) + 1; } + /// + /// Initializes a new instance of the IndicatorDerivativeOscillator class with the specified name and periods. + /// + /// The period for the RSI calculation + /// The period for the smoothing RSI + /// The period for the double smoothing RSI + /// The period for the signal line + public DerivativeOscillator(int rsiPeriod, int smoothingRsiPeriod, int doubleSmoothingRsiPeriod, int signalLinePeriod) + : this($"DO({rsiPeriod},{smoothingRsiPeriod},{doubleSmoothingRsiPeriod},{signalLinePeriod})", rsiPeriod, smoothingRsiPeriod, doubleSmoothingRsiPeriod, signalLinePeriod) + { + } + /// /// Computes the next value for the derivative oscillator indicator from the given state /// diff --git a/Indicators/FilteredIdentity.cs b/Indicators/FilteredIdentity.cs index 195a0227361c..e183cd131531 100644 --- a/Indicators/FilteredIdentity.cs +++ b/Indicators/FilteredIdentity.cs @@ -41,11 +41,27 @@ public FilteredIdentity(string name, Func filter) _filter = filter ?? (x => true); } + /// + /// Initializes a new instance of the FilteredIdentity indicator with the specified name + /// + /// Filters the IBaseData send into the indicator, if null defaults to true (x => true) which means no filter + public FilteredIdentity(Func filter) : this("", filter) { } + + /// + /// Initializes a new instance of the FilteredIdentity indicator with the specified name + /// + /// The name of the indicator + /// Filters the IBaseData send into the indicator, if null defaults to true (x => true) which means no filter public FilteredIdentity(string name, PyObject filter) : this(name, filter.SafeAs>()) { } + /// + /// Initializes a new instance of the FilteredIdentity indicator with the specified name + /// + /// Filters the IBaseData send into the indicator, if null defaults to true (x => true) which means no filter + public FilteredIdentity(PyObject filter) : this("", filter) { } /// /// Gets a flag indicating when this indicator is ready and fully initialized diff --git a/Indicators/Identity.cs b/Indicators/Identity.cs index ec9dd383ea07..9a0498577cf7 100644 --- a/Indicators/Identity.cs +++ b/Indicators/Identity.cs @@ -25,7 +25,7 @@ public class Identity : Indicator, IIndicatorWarmUpPeriodProvider /// Initializes a new instance of the Identity indicator with the specified name /// /// The name of the indicator - public Identity(string name) + public Identity(string name = "") : base(name) { } diff --git a/Indicators/IntradayVwap.cs b/Indicators/IntradayVwap.cs index b1058802ab4c..58011e261724 100644 --- a/Indicators/IntradayVwap.cs +++ b/Indicators/IntradayVwap.cs @@ -1,4 +1,4 @@ -using System; +using System; using QuantConnect.Data; using QuantConnect.Data.Market; @@ -22,7 +22,7 @@ public class IntradayVwap : IndicatorBase /// Initializes a new instance of the class /// /// The name of the indicator - public IntradayVwap(string name) + public IntradayVwap(string name = "VWAP") : base(name) { } @@ -98,4 +98,4 @@ protected bool TryGetVolumeAndAveragePrice(BaseData input, out decimal volume, o return false; } } -} \ No newline at end of file +} diff --git a/Indicators/SqueezeMomentum.cs b/Indicators/SqueezeMomentum.cs index fd844863c38f..a2030e530868 100644 --- a/Indicators/SqueezeMomentum.cs +++ b/Indicators/SqueezeMomentum.cs @@ -50,6 +50,18 @@ public SqueezeMomentum(string name, int bollingerPeriod, decimal bollingerMultip WarmUpPeriod = Math.Max(bollingerPeriod, keltnerPeriod); } + /// + /// Initializes a new instance of the class. + /// + /// The period used for the Bollinger Bands calculation. + /// The multiplier for the Bollinger Bands width. + /// The period used for the Average True Range (ATR) calculation in Keltner Channels. + /// The multiplier applied to the ATR for calculating Keltner Channels. + public SqueezeMomentum(int bollingerPeriod, decimal bollingerMultiplier, int keltnerPeriod, decimal keltnerMultiplier) + : this($"SM({bollingerPeriod},{bollingerMultiplier},{keltnerPeriod},{keltnerMultiplier})", bollingerPeriod, bollingerMultiplier, keltnerPeriod, keltnerMultiplier) + { + } + /// /// Gets the warm-up period required for the indicator to be ready. /// This is determined by the warm-up period of the Bollinger Bands indicator. diff --git a/Indicators/TimeProfile.cs b/Indicators/TimeProfile.cs index 58a4f6bd5ae1..f40f64137eae 100644 --- a/Indicators/TimeProfile.cs +++ b/Indicators/TimeProfile.cs @@ -26,8 +26,10 @@ public class TimeProfile: MarketProfile /// Creates a new TimeProfile indicator with the specified period /// /// The period of this indicator - public TimeProfile(int period = 2) - : this($"TP({period})", period) + /// The percentage of volume contained in the value area + /// How many digits you want to round and the precision. + public TimeProfile(int period = 2, decimal valueAreaVolumePercentage = 0.70m, decimal priceRangeRoundOff = 0.05m) + : this($"TP({period},{valueAreaVolumePercentage},{priceRangeRoundOff})", period, valueAreaVolumePercentage, priceRangeRoundOff) { } @@ -39,7 +41,7 @@ public TimeProfile(int period = 2) /// The percentage of volume contained in the value area /// How many digits you want to round and the precision. /// i.e 0.01 round to two digits exactly. - public TimeProfile(string name, int period, decimal valueAreaVolumePercentage = 0.70m, decimal priceRangeRoundOff = 0.05m) + public TimeProfile(string name, int period = 2, decimal valueAreaVolumePercentage = 0.70m, decimal priceRangeRoundOff = 0.05m) : base(name, period, valueAreaVolumePercentage, priceRangeRoundOff) { } diff --git a/Indicators/VolumeProfile.cs b/Indicators/VolumeProfile.cs index 151fd7b367e6..d7cb77ce2b4f 100644 --- a/Indicators/VolumeProfile.cs +++ b/Indicators/VolumeProfile.cs @@ -26,8 +26,10 @@ public class VolumeProfile: MarketProfile /// Creates a new VolumeProfile indicator with the specified period /// /// The period of the indicator - public VolumeProfile(int period = 2) - : this($"VP({period})", period) + /// The percentage of volume contained in the value area + /// How many digits you want to round and the precision. + public VolumeProfile(int period = 2, decimal valueAreaVolumePercentage = 0.70m, decimal priceRangeRoundOff = 0.05m) + : this($"VP({period},{valueAreaVolumePercentage},{priceRangeRoundOff})", period, valueAreaVolumePercentage, priceRangeRoundOff) { } @@ -39,7 +41,7 @@ public VolumeProfile(int period = 2) /// The percentage of volume contained in the value area /// How many digits you want to round and the precision. /// i.e 0.01 round to two digits exactly. - public VolumeProfile(string name, int period, decimal valueAreaVolumePercentage = 0.70m, decimal priceRangeRoundOff = 0.05m) + public VolumeProfile(string name, int period = 2, decimal valueAreaVolumePercentage = 0.70m, decimal priceRangeRoundOff = 0.05m) : base(name, period, valueAreaVolumePercentage, priceRangeRoundOff) { } From 733be65148cab669b77e19e1ee9b98a23f49d1a1 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Thu, 30 Oct 2025 18:29:41 -0300 Subject: [PATCH 004/103] Simplify history request handling for equities (#9068) - For equity history requests, we will only ask the first provider which returns a valid reply, improvements thought for live trading QC+IB --- .../HistoricalData/HistoryProviderManager.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Engine/HistoricalData/HistoryProviderManager.cs b/Engine/HistoricalData/HistoryProviderManager.cs index 116ee3b6201f..316a9904f363 100644 --- a/Engine/HistoricalData/HistoryProviderManager.cs +++ b/Engine/HistoricalData/HistoryProviderManager.cs @@ -17,7 +17,6 @@ using QuantConnect.Configuration; using QuantConnect.Data; using QuantConnect.Interfaces; -using QuantConnect.Lean.Engine.DataFeeds; using QuantConnect.Lean.Engine.DataFeeds.Enumerators; using QuantConnect.Logging; using QuantConnect.Util; @@ -37,6 +36,7 @@ public class HistoryProviderManager : HistoryProviderBase private IDataPermissionManager _dataPermissionManager; private IBrokerage _brokerage; private bool _initialized; + private bool _loggedEquityShortcutWarning; /// /// Collection of history providers being used @@ -133,25 +133,36 @@ public override IEnumerable GetHistory(IEnumerable reques { List> historyEnumerators = new(_historyProviders.Count); - var historyRequets = new List(); + var historyRequests = new List(); foreach (var request in requests) { var config = request.ToSubscriptionDataConfig(); _dataPermissionManager?.AssertConfiguration(config, request.StartTimeLocal, request.EndTimeLocal); - historyRequets.Add(request); + historyRequests.Add(request); } foreach (var historyProvider in _historyProviders) { try { - var history = historyProvider.GetHistory(historyRequets, sliceTimeZone); + var history = historyProvider.GetHistory(historyRequests, sliceTimeZone); if (history == null) { // doesn't support this history request, that's okay continue; } historyEnumerators.Add(history.GetEnumerator()); + + if (_historyProviders.Count > 1 && historyRequests.All(x => x.Symbol.SecurityType == SecurityType.Equity)) + { + if (!_loggedEquityShortcutWarning) + { + _loggedEquityShortcutWarning = true; + Log.Trace($"HistoryProviderManager.GetHistory(): using {_historyProviders[0].GetType().Name} provider for equity," + + $" skipping: [{string.Join(",", _historyProviders.Skip(1).Select(x => x.GetType().Name))}]"); + } + break; + } } catch (Exception e) { From f4bab98b000b855a5416da4f89db77db6b83a48c Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Fri, 31 Oct 2025 16:38:26 -0400 Subject: [PATCH 005/103] Update Pythonnet version to 2.0.50 (#9070) --- Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj | 2 +- Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj | 2 +- Algorithm.Python/QuantConnect.Algorithm.Python.csproj | 2 +- Algorithm/QuantConnect.Algorithm.csproj | 2 +- AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj | 2 +- Common/QuantConnect.csproj | 2 +- Engine/QuantConnect.Lean.Engine.csproj | 2 +- Indicators/QuantConnect.Indicators.csproj | 2 +- Report/QuantConnect.Report.csproj | 2 +- Research/QuantConnect.Research.csproj | 2 +- Tests/QuantConnect.Tests.csproj | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj index 358d8f7d7de5..688414008d10 100644 --- a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj +++ b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj @@ -32,7 +32,7 @@ portable - + diff --git a/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj b/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj index 46d7734a7ba2..81697dda1300 100644 --- a/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj +++ b/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj @@ -29,7 +29,7 @@ LICENSE - + diff --git a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj index 27d959076f69..246af65ed265 100644 --- a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj +++ b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj @@ -37,7 +37,7 @@ - + diff --git a/Algorithm/QuantConnect.Algorithm.csproj b/Algorithm/QuantConnect.Algorithm.csproj index 030e18be98c2..24ece5b173b6 100644 --- a/Algorithm/QuantConnect.Algorithm.csproj +++ b/Algorithm/QuantConnect.Algorithm.csproj @@ -29,7 +29,7 @@ LICENSE - + diff --git a/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj b/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj index c0d552c13880..f67eb2becc41 100644 --- a/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj +++ b/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj @@ -28,7 +28,7 @@ LICENSE - + diff --git a/Common/QuantConnect.csproj b/Common/QuantConnect.csproj index 9fa973efd104..4bdfd41aa6ce 100644 --- a/Common/QuantConnect.csproj +++ b/Common/QuantConnect.csproj @@ -35,7 +35,7 @@ - + diff --git a/Engine/QuantConnect.Lean.Engine.csproj b/Engine/QuantConnect.Lean.Engine.csproj index 6ff44486c48d..9501da0dab81 100644 --- a/Engine/QuantConnect.Lean.Engine.csproj +++ b/Engine/QuantConnect.Lean.Engine.csproj @@ -41,7 +41,7 @@ - + diff --git a/Indicators/QuantConnect.Indicators.csproj b/Indicators/QuantConnect.Indicators.csproj index 62ffe9192c61..92e3c6ee59f9 100644 --- a/Indicators/QuantConnect.Indicators.csproj +++ b/Indicators/QuantConnect.Indicators.csproj @@ -31,7 +31,7 @@ - + diff --git a/Report/QuantConnect.Report.csproj b/Report/QuantConnect.Report.csproj index c81fc164aa18..0edb390d8356 100644 --- a/Report/QuantConnect.Report.csproj +++ b/Report/QuantConnect.Report.csproj @@ -39,7 +39,7 @@ LICENSE - + diff --git a/Research/QuantConnect.Research.csproj b/Research/QuantConnect.Research.csproj index 728c5f33ec22..381c3ef07a4b 100644 --- a/Research/QuantConnect.Research.csproj +++ b/Research/QuantConnect.Research.csproj @@ -34,7 +34,7 @@ - + diff --git a/Tests/QuantConnect.Tests.csproj b/Tests/QuantConnect.Tests.csproj index 87810318cc75..e2cc8706ea9d 100644 --- a/Tests/QuantConnect.Tests.csproj +++ b/Tests/QuantConnect.Tests.csproj @@ -31,7 +31,7 @@ - + From 6c5b577b46d1f2736deeb4af26354dd32e0686e6 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Mon, 3 Nov 2025 09:36:59 -0300 Subject: [PATCH 006/103] Update HistoryProviderManagerTests.cs Remove no longer valid unit test --- .../HistoryProviderManagerTests.cs | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/Tests/Engine/HistoricalData/HistoryProviderManagerTests.cs b/Tests/Engine/HistoricalData/HistoryProviderManagerTests.cs index ef36020e8d0a..5130048b76e5 100644 --- a/Tests/Engine/HistoricalData/HistoryProviderManagerTests.cs +++ b/Tests/Engine/HistoricalData/HistoryProviderManagerTests.cs @@ -132,22 +132,6 @@ public void OptionsAreMappedCorrectly() Assert.AreEqual(426, _historyProviderWrapper.DataPointCount); } - [Test] - public void EquitiesMergedCorrectly() - { - var symbol = Symbol.Create("WM", SecurityType.Equity, Market.USA); - - var request = TestsHelpers.GetHistoryRequest(symbol, new DateTime(2008, 01, 01), new DateTime(2008, 01, 05), Resolution.Daily, TickType.Trade); - - var result = _historyProviderWrapper.GetHistory(new[] { request }, TimeZones.NewYork).ToList(); - - Assert.IsNotEmpty(result); - var firstBar = result.First().Values.Single(); - Assert.AreEqual("WMI", firstBar.Symbol.Value); - Assert.AreEqual(4, result.Count); - Assert.AreEqual(5, _historyProviderWrapper.DataPointCount); - } - [Test] public void DataIncreasesInTime() { From a3d6e2474110d6d1a6967400690e80495210ff7f Mon Sep 17 00:00:00 2001 From: Roman Yavnikov <45608740+Romazes@users.noreply.github.com> Date: Tue, 4 Nov 2025 18:25:08 +0200 Subject: [PATCH 007/103] Test:Feat: Updating process in TrailingStopOrderTestParameters (#9072) * feat: implement ModifyOrderToFill in TrailingStopOrderTestParameters * feat: prevent update TrailingOrder not equal SecurityType.Equity * Revert "feat: prevent update TrailingOrder not equal SecurityType.Equity" This reverts commit 35548dcfb794ad33e07e3ed948daae34ef9913ef. * rename: variable in TrailingStopOrderTestParameters --- .../TrailingStopOrderTestParameters.cs | 69 ++++++++++++++++++- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/Tests/Brokerages/TrailingStopOrderTestParameters.cs b/Tests/Brokerages/TrailingStopOrderTestParameters.cs index eecded16b30b..898492d0c39b 100644 --- a/Tests/Brokerages/TrailingStopOrderTestParameters.cs +++ b/Tests/Brokerages/TrailingStopOrderTestParameters.cs @@ -15,25 +15,60 @@ using System; using QuantConnect.Interfaces; +using QuantConnect.Logging; using QuantConnect.Orders; namespace QuantConnect.Tests.Brokerages { + /// + /// Provides configuration parameters used to test behavior, + /// including price bounds, trailing values, and modification thresholds. + /// public class TrailingStopOrderTestParameters : OrderTestParameters { private readonly decimal _highLimit; private readonly decimal _lowLimit; + + /// + /// Whether is a percentage (true) or absolute value (false). + /// private readonly decimal _trailingAmount; + + /// + /// Factor used to adjust the trailing stop during fill simulations (e.g., 0.001 = 0.1%, 1 = $1). + /// private readonly bool _trailingAsPercentage; + /// + /// The offset amount used when adjusting the trailing stop order during fill simulations. + /// Typically a small value such as 0.001m (for 0.1%) or 1m (for $1). + /// + private readonly decimal _trailingOffsetAmount; + + /// + /// Initializes a new instance of the class. + /// + /// The symbol associated with the order under test. + /// The upper price boundary for the simulated test environment. + /// The lower price boundary for the simulated test environment. + /// The trailing stop amount, expressed as either a fixed offset or percentage. + /// If true, the is a percentage; otherwise, it’s an absolute price offset. + /// Optional order properties used to customize the test order (such as time in force or brokerage-specific parameters). + /// Optional submission data containing fill and price context at order creation time. + /// + /// Optional offset amount applied when simulating trailing stop order modifications during tests. + /// Defaults to a typical small value such as 0.001m (0.1%) or 1m ($1), depending on . + /// public TrailingStopOrderTestParameters(Symbol symbol, decimal highLimit, decimal lowLimit, decimal trailingAmount, bool trailingAsPercentage, - IOrderProperties properties = null, OrderSubmissionData orderSubmissionData = null) + IOrderProperties properties = null, OrderSubmissionData orderSubmissionData = null, decimal? trailingOffsetAmount = null) : base(symbol, properties, orderSubmissionData) { _highLimit = highLimit; _lowLimit = lowLimit; _trailingAmount = trailingAmount; _trailingAsPercentage = trailingAsPercentage; + // trailingAsPercentage ? 0.001m (0.1%) or 1$ + _trailingOffsetAmount = trailingOffsetAmount ?? (trailingAsPercentage ? 0.001m : 0.5m); } public override Order CreateShortOrder(decimal quantity) @@ -56,11 +91,39 @@ public override Order CreateLongOrder(decimal quantity) }; } - public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decimal lastMarketPrice) => false; + public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decimal lastMarketPrice) + { + var trailingStopOrder = order as TrailingStopOrder; + + if (trailingStopOrder.TrailingAmount == _trailingOffsetAmount) + { + Log.Trace($"{nameof(TrailingStopOrderTestParameters)}.{nameof(ModifyOrderToFill)}: Trailing amount already equals modification factor for order {trailingStopOrder.Id}."); + return false; + } + + if (!TrailingStopOrder.TryUpdateStopPrice(lastMarketPrice, + trailingStopOrder.StopPrice, + _trailingOffsetAmount, + trailingStopOrder.TrailingAsPercentage, + trailingStopOrder.Direction, + out var updatedStopPrice)) + { + Log.Error($"Failed to compute updated stop price for order {trailingStopOrder.Id}. " + + $"Inputs: LastMarketPrice={lastMarketPrice}, CurrentStopPrice={trailingStopOrder.StopPrice}, " + + $"TrailingModificationFactor={_trailingOffsetAmount}, IsPercentage={trailingStopOrder.TrailingAsPercentage}, Direction={trailingStopOrder.Direction}."); + return false; + } + + var updateFields = new UpdateOrderFields() { StopPrice = updatedStopPrice, TrailingAmount = _trailingOffsetAmount }; + + ApplyUpdateOrderRequest(order, updateFields); + + return true; + } public override OrderStatus ExpectedStatus => OrderStatus.Submitted; - public override bool ExpectedCancellationResult => false; + public override bool ExpectedCancellationResult => true; public override string ToString() { From 7a5ff8054b878a6cda5dadbbf30016460a3bce9c Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Mon, 10 Nov 2025 07:33:38 -0500 Subject: [PATCH 008/103] Prevent adding zero quantity currencies to CashBook (#9076) * Prevent adding zero quantity currencies to CashBook * Solve review comments * Solve new review comments * Add unit test --- Brokerages/Brokerage.cs | 10 +++- Common/Util/CashAmountUtil.cs | 37 ++++++++++++++ Engine/Setup/BrokerageSetupHandler.cs | 7 ++- Tests/Brokerages/Paper/PaperBrokerageTests.cs | 20 +++++++- .../Setup/BrokerageSetupHandlerTests.cs | 51 +++++++++++++++++-- 5 files changed, 118 insertions(+), 7 deletions(-) create mode 100644 Common/Util/CashAmountUtil.cs diff --git a/Brokerages/Brokerage.cs b/Brokerages/Brokerage.cs index 418e10fe74c5..6af0b2dc6e2a 100644 --- a/Brokerages/Brokerage.cs +++ b/Brokerages/Brokerage.cs @@ -27,6 +27,7 @@ using System.Collections.Generic; using System.Collections.Concurrent; using QuantConnect.Brokerages.CrossZero; +using QuantConnect.Util; namespace QuantConnect.Brokerages { @@ -509,6 +510,11 @@ public virtual bool PerformCashSync(IAlgorithm algorithm, DateTime currentTimeUt { if (!algorithm.Portfolio.CashBook.ContainsKey(balance.Currency)) { + if (!CashAmountUtil.ShouldAddCashBalance(balance, algorithm.AccountCurrency)) + { + Log.Trace($"Brokerage.PerformCashSync(): Skipping {balance.Currency} cash because quantity is zero"); + continue; + } Log.Trace($"Brokerage.PerformCashSync(): Unexpected cash found {balance.Currency} {balance.Amount}", true); algorithm.Portfolio.SetCash(balance.Currency, balance.Amount, 0); } @@ -756,7 +762,7 @@ protected bool TryGetOrRemoveCrossZeroOrder(string brokerageOrderId, OrderStatus case OrderStatus.Invalid: LeanOrderByZeroCrossBrokerageOrderId.TryRemove(brokerageOrderId, out var _); break; - }; + } return true; } // Return false if the brokerage order ID does not correspond to a cross-zero order @@ -787,7 +793,7 @@ protected bool TryHandleRemainingCrossZeroOrder(Order leanOrder, OrderEvent orde return false; default: return false; - }; + } OnOrderEvent(orderEvent); diff --git a/Common/Util/CashAmountUtil.cs b/Common/Util/CashAmountUtil.cs new file mode 100644 index 000000000000..289532a99e1a --- /dev/null +++ b/Common/Util/CashAmountUtil.cs @@ -0,0 +1,37 @@ +/* + * 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.Securities; + +namespace QuantConnect.Util +{ + /// + /// Provides utility methods for working with instances + /// + public static class CashAmountUtil + { + /// + /// Determines if a cash balance should be added to the cash book + /// + /// The cash balance to check + /// The algorithm's account currency + /// True if the balance should be added, false otherwise + public static bool ShouldAddCashBalance(CashAmount balance, string accountCurrency) + { + // Don't add zero quantity currencies except the account currency + return balance.Amount != 0 || balance.Currency == accountCurrency; + } + } +} \ No newline at end of file diff --git a/Engine/Setup/BrokerageSetupHandler.cs b/Engine/Setup/BrokerageSetupHandler.cs index e79a8fa46c10..7f3db9b91f93 100644 --- a/Engine/Setup/BrokerageSetupHandler.cs +++ b/Engine/Setup/BrokerageSetupHandler.cs @@ -375,8 +375,13 @@ private bool LoadCashBalance(IBrokerage brokerage, IAlgorithm algorithm) var cashBalance = brokerage.GetCashBalance(); foreach (var cash in cashBalance) { - Log.Trace($"BrokerageSetupHandler.Setup(): Setting {cash.Currency} cash to {cash.Amount}"); + if (!CashAmountUtil.ShouldAddCashBalance(cash, algorithm.AccountCurrency)) + { + Log.Trace($"BrokerageSetupHandler.Setup(): Skipping {cash.Currency} cash because quantity is zero"); + continue; + } + Log.Trace($"BrokerageSetupHandler.Setup(): Setting {cash.Currency} cash to {cash.Amount}"); algorithm.Portfolio.SetCash(cash.Currency, cash.Amount, 0); } } diff --git a/Tests/Brokerages/Paper/PaperBrokerageTests.cs b/Tests/Brokerages/Paper/PaperBrokerageTests.cs index 4c4c26b93744..b28653035738 100644 --- a/Tests/Brokerages/Paper/PaperBrokerageTests.cs +++ b/Tests/Brokerages/Paper/PaperBrokerageTests.cs @@ -278,6 +278,24 @@ public void PerformCashSyncDoesNotThrowWithKnownOrUnknownCurrencies() Assert.DoesNotThrow(() => brokerage.PerformCashSync(algorithm, algorithm.Time, () => TimeSpan.Zero)); } + [Test] + public void PerformCashSyncDoesNotAddZeroQuantityCurrenciesExceptAccountCurrency() + { + var algorithm = new AlgorithmStub(new MockDataFeed()); + algorithm.SetAccountCurrency("USD"); + algorithm.SetCash(10000); + + using var brokerage = new TestBrokerage(algorithm); + var currentTime = new DateTime(2024, 1, 1, 12, 0, 0, DateTimeKind.Utc); + var syncPerformed = brokerage.PerformCashSync(algorithm, currentTime, () => TimeSpan.FromMinutes(5)); + + Assert.IsTrue(syncPerformed); + Assert.IsTrue(algorithm.Portfolio.CashBook.ContainsKey("USD")); + Assert.IsTrue(algorithm.Portfolio.CashBook.ContainsKey("BNFCR")); + Assert.IsTrue(algorithm.Portfolio.CashBook.ContainsKey("TEST")); + Assert.IsFalse(algorithm.Portfolio.CashBook.ContainsKey("EUR")); + } + internal class TestBrokerage : BacktestingBrokerage { public TestBrokerage(IAlgorithm algorithm) : base(algorithm, "Test") @@ -286,7 +304,7 @@ public TestBrokerage(IAlgorithm algorithm) : base(algorithm, "Test") public override List GetCashBalance() { - return new List { new CashAmount(100, Currencies.USD), new CashAmount(200, "BNFCR"), new CashAmount(300, "TEST") }; + return new List { new CashAmount(0, Currencies.USD), new CashAmount(200, "BNFCR"), new CashAmount(300, "TEST"), new CashAmount(0, "EUR") }; } } diff --git a/Tests/Engine/Setup/BrokerageSetupHandlerTests.cs b/Tests/Engine/Setup/BrokerageSetupHandlerTests.cs index c62dbc440c4a..2e9dbffabf8f 100644 --- a/Tests/Engine/Setup/BrokerageSetupHandlerTests.cs +++ b/Tests/Engine/Setup/BrokerageSetupHandlerTests.cs @@ -183,7 +183,7 @@ public void ExistingHoldingsAndOrdersUniverseSettings(Func> getHol catch { } - var algorithm = new TestAlgorithm { UniverseSettings = { Resolution = Resolution.Daily, Leverage = (hasCrypto ? 1 : 20), FillForward = false, ExtendedMarketHours = true} }; + var algorithm = new TestAlgorithm { UniverseSettings = { Resolution = Resolution.Daily, Leverage = (hasCrypto ? 1 : 20), FillForward = false, ExtendedMarketHours = true } }; algorithm.SetHistoryProvider(new BrokerageTransactionHandlerTests.BrokerageTransactionHandlerTests.EmptyHistoryProvider()); var job = GetJob(); var resultHandler = new Mock(); @@ -235,7 +235,7 @@ public void ExistingHoldingsAndOrdersUniverseSettings(Func> getHol } } - [TestCaseSource(typeof(ExistingHoldingAndOrdersDataClass),nameof(ExistingHoldingAndOrdersDataClass.GetExistingHoldingsAndOrdersTestCaseData))] + [TestCaseSource(typeof(ExistingHoldingAndOrdersDataClass), nameof(ExistingHoldingAndOrdersDataClass.GetExistingHoldingsAndOrdersTestCaseData))] public void LoadsExistingHoldingsAndOrders(Func> getHoldings, Func> getOrders, bool expected) { var algorithm = new TestAlgorithm(); @@ -282,7 +282,7 @@ public void EnforcesTotalPortfolioValue(bool fails) brokerage.Setup(x => x.IsConnected).Returns(true); brokerage.Setup(x => x.AccountBaseCurrency).Returns(Currencies.USD); - brokerage.Setup(x => x.GetCashBalance()).Returns(new List { new CashAmount(10000, Currencies.USD), new CashAmount(11, Currencies.GBP)}); + brokerage.Setup(x => x.GetCashBalance()).Returns(new List { new CashAmount(10000, Currencies.USD), new CashAmount(11, Currencies.GBP) }); brokerage.Setup(x => x.GetAccountHoldings()).Returns(new List()); brokerage.Setup(x => x.GetOpenOrders()).Returns(new List()); @@ -593,6 +593,51 @@ public void HasErrorWithZeroTotalPortfolioValue(bool hasCashBalance, bool hasHol } } + [Test] + public void ZeroQuantityCurrenciesAreNotAddedToCashBook() + { + var algorithm = new TestAlgorithm(); + algorithm.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage); + algorithm.SetHistoryProvider(new BrokerageTransactionHandlerTests.BrokerageTransactionHandlerTests.EmptyHistoryProvider()); + + var job = GetJob(); + var resultHandler = new Mock(); + var transactionHandler = new Mock(); + var realTimeHandler = new Mock(); + var brokerage = new Mock(); + + brokerage.Setup(x => x.IsConnected).Returns(true); + brokerage.Setup(x => x.AccountBaseCurrency).Returns(Currencies.USD); + + // EUR with zero quantity, should NOT be added to CashBook + brokerage.Setup(x => x.GetCashBalance()).Returns(new List + { + new CashAmount(0, "USD"), + new CashAmount(0, "EUR"), + new CashAmount(123, "ETH") + }); + + brokerage.Setup(x => x.GetAccountHoldings()).Returns(new List()); + brokerage.Setup(x => x.GetOpenOrders()).Returns(new List()); + + using var setupHandler = new BrokerageSetupHandler(); + + IBrokerageFactory factory; + setupHandler.CreateBrokerage(job, algorithm, out factory); + factory.Dispose(); + + var result = setupHandler.Setup(new SetupHandlerParameters(_dataManager.UniverseSelection, algorithm, brokerage.Object, job, resultHandler.Object, + transactionHandler.Object, realTimeHandler.Object, TestGlobals.DataCacheProvider, TestGlobals.MapFileProvider)); + + Assert.IsTrue(result); + // USD should be present even though it has zero quantity because it's the account currency + Assert.IsTrue(algorithm.Portfolio.CashBook.ContainsKey("USD")); + // EUR should NOT be present (zero amount) + Assert.IsFalse(algorithm.Portfolio.CashBook.ContainsKey("EUR")); + // ETH should be present + Assert.IsTrue(algorithm.Portfolio.CashBook.ContainsKey("ETH")); + } + private void TestLoadExistingHoldingsAndOrders(IAlgorithm algorithm, Func> getHoldings, Func> getOrders, bool expected) { var job = GetJob(); From 2052a86351e53c475c3d282ae5c1868473ed5590 Mon Sep 17 00:00:00 2001 From: Alexandre Catarino Date: Wed, 12 Nov 2025 12:30:12 +0000 Subject: [PATCH 009/103] Renames File Stochastics.cs -> Stochastic.cs (#9079) Match the class name: `Stochastic`. Fixes summaries. --- Indicators/{Stochastics.cs => Stochastic.cs} | 21 ++++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) rename Indicators/{Stochastics.cs => Stochastic.cs} (90%) diff --git a/Indicators/Stochastics.cs b/Indicators/Stochastic.cs similarity index 90% rename from Indicators/Stochastics.cs rename to Indicators/Stochastic.cs index 8ae479bcd56d..57e62bb69ece 100644 --- a/Indicators/Stochastics.cs +++ b/Indicators/Stochastic.cs @@ -13,17 +13,16 @@ * limitations under the License. */ -using System; using QuantConnect.Data; using QuantConnect.Data.Market; namespace QuantConnect.Indicators { /// - /// This indicator computes the Slow Stochastics %K and %D. The Fast Stochastics %K is is computed by + /// This indicator computes the Slow Stochastics %K and %D. The Fast Stochastic %K is is computed by /// (Current Close Price - Lowest Price of given Period) / (Highest Price of given Period - Lowest Price of given Period) - /// multiplied by 100. Once the Fast Stochastics %K is calculated the Slow Stochastic %K is calculated by the average/smoothed price of - /// of the Fast %K with the given period. The Slow Stochastics %D is then derived from the Slow Stochastics %K with the given period. + /// multiplied by 100. Once the Fast Stochastic %K is calculated the Slow Stochastic %K is calculated by the average/smoothed price of + /// of the Fast %K with the given period. The Slow Stochastic %D is then derived from the Slow Stochastic %K with the given period. /// public class Stochastic : BarIndicator, IIndicatorWarmUpPeriodProvider { @@ -33,22 +32,22 @@ public class Stochastic : BarIndicator, IIndicatorWarmUpPeriodProvider private readonly IndicatorBase _sumSlowK; /// - /// Gets the value of the Fast Stochastics %K given Period. + /// Gets the value of the Fast Stochastic %K given Period. /// public IndicatorBase FastStoch { get; } /// - /// Gets the value of the Slow Stochastics given Period K. + /// Gets the value of the Slow Stochastic given Period K. /// public IndicatorBase StochK { get; } /// - /// Gets the value of the Slow Stochastics given Period D. + /// Gets the value of the Slow Stochastic given Period D. /// public IndicatorBase StochD { get; } /// - /// Creates a new Stochastics Indicator from the specified periods. + /// Creates a new Stochastic Indicator from the specified periods. /// /// The name of this indicator. /// The period given to calculate the Fast %K @@ -123,7 +122,7 @@ protected override decimal ComputeNextValue(IBaseDataBar input) /// Computes the Fast Stochastic %K. /// /// The input. - /// The Fast Stochastics %K value. + /// The Fast Stochastic %K value. private decimal ComputeFastStoch(IBaseDataBar input) { var fastStoch = 0m; @@ -150,7 +149,7 @@ private decimal ComputeFastStoch(IBaseDataBar input) /// /// The constant k. /// The input. - /// The Slow Stochastics %K value. + /// The Slow Stochastic %K value. private decimal ComputeStochK(int constantK, IBaseData input) { var stochK = 0m; @@ -167,7 +166,7 @@ private decimal ComputeStochK(int constantK, IBaseData input) /// Computes the Slow Stochastic %D. /// /// The constant d. - /// The Slow Stochastics %D value. + /// The Slow Stochastic %D value. private decimal ComputeStochD(int constantD) { var stochD = 0m; From 46639fc4ecc030df41a1a383cdd75e9b1b7505a0 Mon Sep 17 00:00:00 2001 From: Derek Melchin <38889814+DerekMelchin@users.noreply.github.com> Date: Wed, 12 Nov 2025 11:29:22 -0700 Subject: [PATCH 010/103] Update deprecation message in Top method (#9081) --- Algorithm/DollarVolumeUniverseDefinitions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Algorithm/DollarVolumeUniverseDefinitions.cs b/Algorithm/DollarVolumeUniverseDefinitions.cs index 191f911a2101..909121ef0839 100644 --- a/Algorithm/DollarVolumeUniverseDefinitions.cs +++ b/Algorithm/DollarVolumeUniverseDefinitions.cs @@ -47,7 +47,7 @@ public DollarVolumeUniverseDefinitions(QCAlgorithm algorithm) /// The settings for stocks added by this universe. /// Defaults to /// A new coarse universe for the top count of stocks by dollar volume - [Obsolete("This method is deprecated. Use method `Universe.DollarVolume.Top(...)` instead")] + [Obsolete("This method is deprecated. Use method `Universe.Top(...)` instead")] public Universe Top(int count, UniverseSettings universeSettings = null) { return _algorithm.Universe.Top(count, universeSettings); From ebaa355bf154a8d7df54f20a00ccc9c6d8168ef8 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Thu, 13 Nov 2025 15:21:55 -0500 Subject: [PATCH 011/103] Fix Python inheritance issue with SelectionModels (#9069) * Initial solution * Solve review comments * Add PythonSelectionModelHandler to reduce code duplication * Refactor universe selection models * Add python instance to Selection Models with virtual/override methods * Add python instance to Alpha Models * Add python instance to Execution models * Solve review comments * Solve new review comments * Fix calling SetPythonInstance only when method exists and is callable * Use unit test instead of regression algorithms * Solve review comments * Set python instance to the models * Initialize Python containers only when instance is set * Replace try-catch with explicit method existence check * Initialize containers in BasePythonWrapper only when needed * Add null instance check before method invocation * Refactor TryExecuteMethod * Refactor Python wrappers which inherit from BasePythonWrapper<> * Solve review comments * Remove ununsed methods * Solve review comments --- .../Alphas/BasePairsTradingAlphaModel.cs | 11 +- ...earsonCorrelationPairsTradingAlphaModel.cs | 8 +- .../Execution/SpreadExecutionModel.cs | 6 + .../StandardDeviationExecutionModel.cs | 12 ++ ...olumeWeightedAveragePriceExecutionModel.cs | 14 +- ...CoarseFundamentalUniverseSelectionModel.cs | 6 +- .../EmaCrossUniverseSelectionModel.cs | 28 ++-- .../FineFundamentalUniverseSelectionModel.cs | 12 ++ .../FundamentalUniverseSelectionModel.cs | 30 +++- .../Selection/FutureUniverseSelectionModel.cs | 6 +- .../InceptionDateUniverseSelectionModel.cs | 9 +- ...penInterestFutureUniverseSelectionModel.cs | 6 + .../Selection/OptionUniverseSelectionModel.cs | 7 +- .../Selection/QC500UniverseSelectionModel.cs | 16 +- Algorithm/Alphas/AlphaModel.cs | 5 +- Algorithm/Alphas/AlphaModelPythonWrapper.cs | 22 +-- Algorithm/Execution/ExecutionModel.cs | 3 +- .../Execution/ExecutionModelPythonWrapper.cs | 20 ++- .../Selection/CustomUniverseSelectionModel.cs | 9 +- Algorithm/Selection/UniverseSelectionModel.cs | 13 +- .../UniverseSelectionModelPythonWrapper.cs | 17 +- Common/Python/BasePythonWrapper.cs | 62 ++++++-- .../FrameworkModelsPythonInheritanceTests.cs | 146 ++++++++++++++++++ 23 files changed, 405 insertions(+), 63 deletions(-) diff --git a/Algorithm.Framework/Alphas/BasePairsTradingAlphaModel.cs b/Algorithm.Framework/Alphas/BasePairsTradingAlphaModel.cs index d9c1f9c60e0d..b4a7aa1d484c 100644 --- a/Algorithm.Framework/Alphas/BasePairsTradingAlphaModel.cs +++ b/Algorithm.Framework/Alphas/BasePairsTradingAlphaModel.cs @@ -117,7 +117,16 @@ public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges /// The first asset's symbol in the pair /// The second asset's symbol in the pair /// True if the statistical test for the pair is successful - public virtual bool HasPassedTest(QCAlgorithm algorithm, Symbol asset1, Symbol asset2) => true; + public virtual bool HasPassedTest(QCAlgorithm algorithm, Symbol asset1, Symbol asset2) + { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(HasPassedTest), out bool result, algorithm, asset1, asset2)) + { + return result; + } + + return true; + } private void UpdatePairs(QCAlgorithm algorithm) { diff --git a/Algorithm.Framework/Alphas/PearsonCorrelationPairsTradingAlphaModel.cs b/Algorithm.Framework/Alphas/PearsonCorrelationPairsTradingAlphaModel.cs index ba39c197ef14..97a30441e3ff 100644 --- a/Algorithm.Framework/Alphas/PearsonCorrelationPairsTradingAlphaModel.cs +++ b/Algorithm.Framework/Alphas/PearsonCorrelationPairsTradingAlphaModel.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -92,6 +92,12 @@ public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges /// True if the statistical test for the pair is successful public override bool HasPassedTest(QCAlgorithm algorithm, Symbol asset1, Symbol asset2) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(HasPassedTest), out bool result, algorithm, asset1, asset2)) + { + return result; + } + return _bestPair != null && asset1 == _bestPair.Item1 && asset2 == _bestPair.Item2; } diff --git a/Algorithm.Framework/Execution/SpreadExecutionModel.cs b/Algorithm.Framework/Execution/SpreadExecutionModel.cs index 3a612616e8cd..0d30fb89053e 100644 --- a/Algorithm.Framework/Execution/SpreadExecutionModel.cs +++ b/Algorithm.Framework/Execution/SpreadExecutionModel.cs @@ -83,6 +83,12 @@ public override void Execute(QCAlgorithm algorithm, IPortfolioTarget[] targets) /// protected virtual bool PriceIsFavorable(Security security) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(PriceIsFavorable), out bool result, security)) + { + return result; + } + // Has to be in opening hours of exchange to avoid extreme spread in OTC period // Price has to be larger than zero to avoid zero division error, or negative price causing the spread percentage lower than preset value by accident return security.Exchange.ExchangeOpen diff --git a/Algorithm.Framework/Execution/StandardDeviationExecutionModel.cs b/Algorithm.Framework/Execution/StandardDeviationExecutionModel.cs index 75e42904fb7a..97f85f5bf547 100644 --- a/Algorithm.Framework/Execution/StandardDeviationExecutionModel.cs +++ b/Algorithm.Framework/Execution/StandardDeviationExecutionModel.cs @@ -147,6 +147,12 @@ public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges /// protected virtual bool PriceIsFavorable(SymbolData data, decimal unorderedQuantity) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(PriceIsFavorable), out bool result, data, unorderedQuantity)) + { + return result; + } + var deviations = _deviations * data.STD; return unorderedQuantity > 0 ? data.Security.BidPrice < data.SMA - deviations @@ -158,6 +164,12 @@ protected virtual bool PriceIsFavorable(SymbolData data, decimal unorderedQuanti /// protected virtual bool IsSafeToRemove(QCAlgorithm algorithm, Symbol symbol) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(IsSafeToRemove), out bool result, algorithm, symbol)) + { + return result; + } + // confirm the security isn't currently a member of any universe return !algorithm.UniverseManager.Any(kvp => kvp.Value.ContainsMember(symbol)); } diff --git a/Algorithm.Framework/Execution/VolumeWeightedAveragePriceExecutionModel.cs b/Algorithm.Framework/Execution/VolumeWeightedAveragePriceExecutionModel.cs index 45b066d2a8f1..7cb385bac893 100644 --- a/Algorithm.Framework/Execution/VolumeWeightedAveragePriceExecutionModel.cs +++ b/Algorithm.Framework/Execution/VolumeWeightedAveragePriceExecutionModel.cs @@ -131,6 +131,12 @@ public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges /// protected virtual bool IsSafeToRemove(QCAlgorithm algorithm, Symbol symbol) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(IsSafeToRemove), out bool result, algorithm, symbol)) + { + return result; + } + // confirm the security isn't currently a member of any universe return !algorithm.UniverseManager.Any(kvp => kvp.Value.ContainsMember(symbol)); } @@ -140,6 +146,12 @@ protected virtual bool IsSafeToRemove(QCAlgorithm algorithm, Symbol symbol) /// protected virtual bool PriceIsFavorable(SymbolData data, decimal unorderedQuantity) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(PriceIsFavorable), out bool result, data, unorderedQuantity)) + { + return result; + } + if (unorderedQuantity > 0) { if (data.Security.BidPrice < data.VWAP) @@ -188,7 +200,7 @@ public SymbolData(QCAlgorithm algorithm, Security security) var name = algorithm.CreateIndicatorName(security.Symbol, "VWAP", security.Resolution); VWAP = new IntradayVwap(name); - algorithm.RegisterIndicator(security.Symbol, VWAP, Consolidator, bd => (BaseData) bd); + algorithm.RegisterIndicator(security.Symbol, VWAP, Consolidator, bd => (BaseData)bd); } } } diff --git a/Algorithm.Framework/Selection/CoarseFundamentalUniverseSelectionModel.cs b/Algorithm.Framework/Selection/CoarseFundamentalUniverseSelectionModel.cs index 414336b03606..99373adcbcbb 100644 --- a/Algorithm.Framework/Selection/CoarseFundamentalUniverseSelectionModel.cs +++ b/Algorithm.Framework/Selection/CoarseFundamentalUniverseSelectionModel.cs @@ -17,7 +17,6 @@ using System.Collections.Generic; using Python.Runtime; using QuantConnect.Data.UniverseSelection; -using QuantConnect.Securities; namespace QuantConnect.Algorithm.Framework.Selection { @@ -61,6 +60,11 @@ public CoarseFundamentalUniverseSelectionModel( /// public override IEnumerable SelectCoarse(QCAlgorithm algorithm, IEnumerable coarse) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(SelectCoarse), out IEnumerable result, algorithm, coarse)) + { + return result; + } return _coarseSelector(coarse); } } diff --git a/Algorithm.Framework/Selection/EmaCrossUniverseSelectionModel.cs b/Algorithm.Framework/Selection/EmaCrossUniverseSelectionModel.cs index 774797f14379..5a1df09c201f 100644 --- a/Algorithm.Framework/Selection/EmaCrossUniverseSelectionModel.cs +++ b/Algorithm.Framework/Selection/EmaCrossUniverseSelectionModel.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -65,17 +65,23 @@ public EmaCrossUniverseSelectionModel( /// An enumerable of symbols passing the filter public override IEnumerable SelectCoarse(QCAlgorithm algorithm, IEnumerable coarse) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(SelectCoarse), out IEnumerable result, algorithm, coarse)) + { + return result; + } + return (from cf in coarse // grab th SelectionData instance for this symbol - let avg = _averages.GetOrAdd(cf.Symbol, sym => new SelectionData(_fastPeriod, _slowPeriod)) - // Update returns true when the indicators are ready, so don't accept until they are - where avg.Update(cf.EndTime, cf.AdjustedPrice) - // only pick symbols who have their _fastPeriod-day ema over their _slowPeriod-day ema - where avg.Fast > avg.Slow * (1 + _tolerance) - // prefer symbols with a larger delta by percentage between the two averages - orderby avg.ScaledDelta descending - // we only need to return the symbol and return 'Count' symbols - select cf.Symbol).Take(_universeCount); + let avg = _averages.GetOrAdd(cf.Symbol, sym => new SelectionData(_fastPeriod, _slowPeriod)) + // Update returns true when the indicators are ready, so don't accept until they are + where avg.Update(cf.EndTime, cf.AdjustedPrice) + // only pick symbols who have their _fastPeriod-day ema over their _slowPeriod-day ema + where avg.Fast > avg.Slow * (1 + _tolerance) + // prefer symbols with a larger delta by percentage between the two averages + orderby avg.ScaledDelta descending + // we only need to return the symbol and return 'Count' symbols + select cf.Symbol).Take(_universeCount); } // class used to improve readability of the coarse selection function @@ -97,4 +103,4 @@ public SelectionData(int fastPeriod, int slowPeriod) public bool Update(DateTime time, decimal value) => Fast.Update(time, value) & Slow.Update(time, value); } } -} \ No newline at end of file +} diff --git a/Algorithm.Framework/Selection/FineFundamentalUniverseSelectionModel.cs b/Algorithm.Framework/Selection/FineFundamentalUniverseSelectionModel.cs index e5f549808643..c209b1e884d4 100644 --- a/Algorithm.Framework/Selection/FineFundamentalUniverseSelectionModel.cs +++ b/Algorithm.Framework/Selection/FineFundamentalUniverseSelectionModel.cs @@ -71,12 +71,24 @@ public FineFundamentalUniverseSelectionModel( /// public override IEnumerable SelectCoarse(QCAlgorithm algorithm, IEnumerable coarse) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(SelectCoarse), out IEnumerable result, algorithm, coarse)) + { + return result; + } + return _coarseSelector(coarse); } /// public override IEnumerable SelectFine(QCAlgorithm algorithm, IEnumerable fine) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(SelectFine), out IEnumerable result, algorithm, fine)) + { + return result; + } + return _fineSelector(fine); } } diff --git a/Algorithm.Framework/Selection/FundamentalUniverseSelectionModel.cs b/Algorithm.Framework/Selection/FundamentalUniverseSelectionModel.cs index 710898d9d9db..1ba078e51a64 100644 --- a/Algorithm.Framework/Selection/FundamentalUniverseSelectionModel.cs +++ b/Algorithm.Framework/Selection/FundamentalUniverseSelectionModel.cs @@ -175,6 +175,12 @@ public override IEnumerable CreateUniverses(QCAlgorithm algorithm) /// The coarse fundamental universe public virtual Universe CreateCoarseFundamentalUniverse(QCAlgorithm algorithm) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(CreateCoarseFundamentalUniverse), out Universe result, algorithm)) + { + return result; + } + var universeSettings = _universeSettings ?? algorithm.UniverseSettings; return new CoarseFundamentalUniverse(universeSettings, coarse => { @@ -198,9 +204,15 @@ public virtual Universe CreateCoarseFundamentalUniverse(QCAlgorithm algorithm) /// An enumerable of symbols passing the filter public virtual IEnumerable Select(QCAlgorithm algorithm, IEnumerable fundamental) { - if(_selector == null) + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(Select), out IEnumerable result, algorithm, fundamental)) + { + return result; + } + + if (_selector == null) { - throw new NotImplementedException("If inheriting, please overrride the 'Select' fundamental function, else provide it as a constructor parameter"); + throw new NotImplementedException("If inheriting, please override the 'Select' fundamental function, else provide it as a constructor parameter"); } return _selector(fundamental); } @@ -214,7 +226,13 @@ public virtual IEnumerable Select(QCAlgorithm algorithm, IEnumerable)'")] public virtual IEnumerable SelectCoarse(QCAlgorithm algorithm, IEnumerable coarse) { - throw new NotImplementedException("Please overrride the 'Select' fundamental function"); + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(SelectCoarse), out IEnumerable result, algorithm, coarse)) + { + return result; + } + + throw new NotImplementedException("Please override the 'Select' fundamental function"); } /// @@ -226,6 +244,12 @@ public virtual IEnumerable SelectCoarse(QCAlgorithm algorithm, IEnumerab [Obsolete("Fine and Coarse selection are merged, please use 'Select(QCAlgorithm, IEnumerable)'")] public virtual IEnumerable SelectFine(QCAlgorithm algorithm, IEnumerable fine) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(SelectFine), out IEnumerable result, algorithm, fine)) + { + return result; + } + // default impl performs no filtering of fine data return fine.Select(f => f.Symbol); } diff --git a/Algorithm.Framework/Selection/FutureUniverseSelectionModel.cs b/Algorithm.Framework/Selection/FutureUniverseSelectionModel.cs index 23851199e6cc..fb9c35e141e3 100644 --- a/Algorithm.Framework/Selection/FutureUniverseSelectionModel.cs +++ b/Algorithm.Framework/Selection/FutureUniverseSelectionModel.cs @@ -28,7 +28,6 @@ namespace QuantConnect.Algorithm.Framework.Selection public class FutureUniverseSelectionModel : UniverseSelectionModel { private DateTime _nextRefreshTimeUtc; - private readonly TimeSpan _refreshInterval; private readonly UniverseSettings _universeSettings; private readonly Func> _futureChainSymbolSelector; @@ -121,6 +120,11 @@ public override IEnumerable CreateUniverses(QCAlgorithm algorithm) /// protected virtual FutureFilterUniverse Filter(FutureFilterUniverse filter) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(Filter), out FutureFilterUniverse result, filter)) + { + return result; + } // NOP return filter; } diff --git a/Algorithm.Framework/Selection/InceptionDateUniverseSelectionModel.cs b/Algorithm.Framework/Selection/InceptionDateUniverseSelectionModel.cs index f31aba87d7ce..f46cccb77c32 100644 --- a/Algorithm.Framework/Selection/InceptionDateUniverseSelectionModel.cs +++ b/Algorithm.Framework/Selection/InceptionDateUniverseSelectionModel.cs @@ -16,7 +16,6 @@ using QuantConnect.Data.UniverseSelection; using System; using System.Collections.Generic; -using System.Linq; using Python.Runtime; namespace QuantConnect.Algorithm.Framework.Selection @@ -36,7 +35,7 @@ public class InceptionDateUniverseSelectionModel : CustomUniverseSelectionModel /// A unique name for this universe /// Dictionary of DateTime keyed by String that represent the Inception date for each ticker public InceptionDateUniverseSelectionModel(string name, Dictionary tickersByDate) : - base(name, (Func>) null) + base(name, (Func>)null) { _queue = new Queue>(tickersByDate); _symbols = new List(); @@ -57,6 +56,12 @@ public InceptionDateUniverseSelectionModel(string name, PyObject tickersByDate) /// public override IEnumerable Select(QCAlgorithm algorithm, DateTime date) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(Select), out IEnumerable result, algorithm, date)) + { + return result; + } + // Move Symbols that are trading from the queue to a list var added = new List(); while (_queue.TryPeek(out var keyValuePair) && keyValuePair.Value <= date) diff --git a/Algorithm.Framework/Selection/OpenInterestFutureUniverseSelectionModel.cs b/Algorithm.Framework/Selection/OpenInterestFutureUniverseSelectionModel.cs index 6726fc304eca..952c83f31e04 100644 --- a/Algorithm.Framework/Selection/OpenInterestFutureUniverseSelectionModel.cs +++ b/Algorithm.Framework/Selection/OpenInterestFutureUniverseSelectionModel.cs @@ -74,6 +74,12 @@ public OpenInterestFutureUniverseSelectionModel(IAlgorithm algorithm, PyObject f /// protected override FutureFilterUniverse Filter(FutureFilterUniverse filter) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(Filter), out FutureFilterUniverse result, filter)) + { + return result; + } + // Remove duplicated keys return filter.Contracts(FilterByOpenInterest( filter.DistinctBy(x => x).ToDictionary(x => x.Symbol, x => _marketHoursDatabase.GetEntry(x.ID.Market, x, x.ID.SecurityType)))); diff --git a/Algorithm.Framework/Selection/OptionUniverseSelectionModel.cs b/Algorithm.Framework/Selection/OptionUniverseSelectionModel.cs index e832e5e3261e..3c78638f3e74 100644 --- a/Algorithm.Framework/Selection/OptionUniverseSelectionModel.cs +++ b/Algorithm.Framework/Selection/OptionUniverseSelectionModel.cs @@ -28,7 +28,6 @@ namespace QuantConnect.Algorithm.Framework.Selection public class OptionUniverseSelectionModel : UniverseSelectionModel { private DateTime _nextRefreshTimeUtc; - private readonly TimeSpan _refreshInterval; private readonly UniverseSettings _universeSettings; private readonly Func> _optionChainSymbolSelector; @@ -118,6 +117,12 @@ public override IEnumerable CreateUniverses(QCAlgorithm algorithm) /// protected virtual OptionFilterUniverse Filter(OptionFilterUniverse filter) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(Filter), out OptionFilterUniverse result, filter)) + { + return result; + } + // NOP return filter; } diff --git a/Algorithm.Framework/Selection/QC500UniverseSelectionModel.cs b/Algorithm.Framework/Selection/QC500UniverseSelectionModel.cs index 08c8f2df75dd..946fe0018ffa 100644 --- a/Algorithm.Framework/Selection/QC500UniverseSelectionModel.cs +++ b/Algorithm.Framework/Selection/QC500UniverseSelectionModel.cs @@ -33,7 +33,7 @@ public class QC500UniverseSelectionModel : FundamentalUniverseSelectionModel // rebalances at the start of each month private int _lastMonth = -1; - private readonly Dictionary _dollarVolumeBySymbol = new (); + private readonly Dictionary _dollarVolumeBySymbol = new(); /// /// Initializes a new default instance of the @@ -60,6 +60,12 @@ public QC500UniverseSelectionModel(UniverseSettings universeSettings) /// public override IEnumerable SelectCoarse(QCAlgorithm algorithm, IEnumerable coarse) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(SelectCoarse), out IEnumerable result, algorithm, coarse)) + { + return result; + } + if (algorithm.Time.Month == _lastMonth) { return Universe.Unchanged; @@ -96,6 +102,12 @@ orderby x.DollarVolume descending /// public override IEnumerable SelectFine(QCAlgorithm algorithm, IEnumerable fine) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(SelectFine), out IEnumerable result, algorithm, fine)) + { + return result; + } + var filteredFine = (from x in fine where x.CompanyReference.CountryId == "USA" && @@ -121,7 +133,7 @@ public override IEnumerable SelectFine(QCAlgorithm algorithm, IEnumerabl // select stocks with top dollar volume in every single sector var topFineBySector = (from x in filteredFine - // Group by sector + // Group by sector group x by x.CompanyReference.IndustryTemplateCode into g let y = from item in g orderby _dollarVolumeBySymbol[item.Symbol] descending diff --git a/Algorithm/Alphas/AlphaModel.cs b/Algorithm/Alphas/AlphaModel.cs index 578b48ac8d20..1d284ddb3531 100644 --- a/Algorithm/Alphas/AlphaModel.cs +++ b/Algorithm/Alphas/AlphaModel.cs @@ -17,13 +17,14 @@ using System.Collections.Generic; using QuantConnect.Data; using QuantConnect.Data.UniverseSelection; +using QuantConnect.Python; namespace QuantConnect.Algorithm.Framework.Alphas { /// /// Provides a base class for alpha models. /// - public class AlphaModel : IAlphaModel, INamedModel + public class AlphaModel : BasePythonWrapper, IAlphaModel, INamedModel { /// /// Defines a name for a framework model @@ -47,7 +48,7 @@ public AlphaModel() /// The new insights generated public virtual IEnumerable Update(QCAlgorithm algorithm, Slice data) { - throw new System.NotImplementedException("Types deriving from 'AlphaModel' must implement the 'IEnumerable Update(QCAlgorithm, Slice) method."); + throw new NotImplementedException("Types deriving from 'AlphaModel' must implement the 'IEnumerable Update(QCAlgorithm, Slice) method."); } /// diff --git a/Algorithm/Alphas/AlphaModelPythonWrapper.cs b/Algorithm/Alphas/AlphaModelPythonWrapper.cs index a12410f8cad9..32fb50c69397 100644 --- a/Algorithm/Alphas/AlphaModelPythonWrapper.cs +++ b/Algorithm/Alphas/AlphaModelPythonWrapper.cs @@ -27,8 +27,6 @@ namespace QuantConnect.Algorithm.Framework.Alphas /// public class AlphaModelPythonWrapper : AlphaModel { - private readonly BasePythonWrapper _model; - /// /// Defines a name for a framework model /// @@ -39,13 +37,13 @@ public override string Name using (Py.GIL()) { // if the model defines a Name property then use that - if (_model.HasAttr(nameof(Name))) + if (HasAttr(nameof(Name))) { - return _model.GetProperty(nameof(Name)); + return GetProperty(nameof(Name)); } // if the model does not define a name property, use the python type name - return _model.GetProperty(" __class__" ).GetAttr("__name__").GetAndDispose(); + return GetProperty(" __class__").GetAttr("__name__").GetAndDispose(); } } } @@ -56,14 +54,20 @@ public override string Name /// >Model that generates alpha public AlphaModelPythonWrapper(PyObject model) { - _model = new BasePythonWrapper(model, false); + SetPythonInstance(model, false); foreach (var attributeName in new[] { "Update", "OnSecuritiesChanged" }) { - if (!_model.HasAttr(attributeName)) + if (!HasAttr(attributeName)) { throw new NotImplementedException($"IAlphaModel.{attributeName} must be implemented. Please implement this missing method on {model.GetPythonType()}"); } } + + var methodName = nameof(SetPythonInstance); + if (HasAttr(methodName)) + { + InvokeMethod(methodName, model); + } } /// @@ -75,7 +79,7 @@ public AlphaModelPythonWrapper(PyObject model) /// The new insights generated public override IEnumerable Update(QCAlgorithm algorithm, Slice data) { - return _model.InvokeMethodAndEnumerate(nameof(Update), algorithm, data); + return InvokeMethodAndEnumerate(nameof(Update), algorithm, data); } /// @@ -85,7 +89,7 @@ public override IEnumerable Update(QCAlgorithm algorithm, Slice data) /// The security additions and removals from the algorithm public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges changes) { - _model.InvokeVoidMethod(nameof(OnSecuritiesChanged), algorithm, changes); + InvokeVoidMethod(nameof(OnSecuritiesChanged), algorithm, changes); } } } diff --git a/Algorithm/Execution/ExecutionModel.cs b/Algorithm/Execution/ExecutionModel.cs index b1498fae6033..5407cd10876d 100644 --- a/Algorithm/Execution/ExecutionModel.cs +++ b/Algorithm/Execution/ExecutionModel.cs @@ -16,13 +16,14 @@ using QuantConnect.Algorithm.Framework.Portfolio; using QuantConnect.Data.UniverseSelection; using QuantConnect.Orders; +using QuantConnect.Python; namespace QuantConnect.Algorithm.Framework.Execution { /// /// Provides a base class for execution models /// - public class ExecutionModel : IExecutionModel + public class ExecutionModel : BasePythonWrapper, IExecutionModel { /// /// If true, orders should be submitted asynchronously. diff --git a/Algorithm/Execution/ExecutionModelPythonWrapper.cs b/Algorithm/Execution/ExecutionModelPythonWrapper.cs index 3b1520d02980..bfc7848ab390 100644 --- a/Algorithm/Execution/ExecutionModelPythonWrapper.cs +++ b/Algorithm/Execution/ExecutionModelPythonWrapper.cs @@ -27,8 +27,6 @@ namespace QuantConnect.Algorithm.Framework.Execution /// public class ExecutionModelPythonWrapper : ExecutionModel { - private readonly BasePythonWrapper _model; - private readonly bool _onOrderEventsDefined; /// @@ -37,16 +35,22 @@ public class ExecutionModelPythonWrapper : ExecutionModel /// Model defining how to execute trades to reach a portfolio target public ExecutionModelPythonWrapper(PyObject model) { - _model = new BasePythonWrapper(model, false); + SetPythonInstance(model, false); foreach (var attributeName in new[] { "Execute", "OnSecuritiesChanged" }) { - if (!_model.HasAttr(attributeName)) + if (!HasAttr(attributeName)) { throw new NotImplementedException($"IExecutionModel.{attributeName} must be implemented. Please implement this missing method on {model.GetPythonType()}"); } } - _onOrderEventsDefined = _model.HasAttr("OnOrderEvent"); + _onOrderEventsDefined = HasAttr("OnOrderEvent"); + + var methodName = nameof(SetPythonInstance); + if (HasAttr(methodName)) + { + InvokeMethod(methodName, model); + } } /// @@ -57,7 +61,7 @@ public ExecutionModelPythonWrapper(PyObject model) /// The portfolio targets to be ordered public override void Execute(QCAlgorithm algorithm, IPortfolioTarget[] targets) { - _model.InvokeMethod(nameof(Execute), algorithm, targets).Dispose(); + InvokeMethod(nameof(Execute), algorithm, targets).Dispose(); } /// @@ -67,7 +71,7 @@ public override void Execute(QCAlgorithm algorithm, IPortfolioTarget[] targets) /// The security additions and removals from the algorithm public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges changes) { - _model.InvokeMethod(nameof(OnSecuritiesChanged), algorithm, changes).Dispose(); + InvokeMethod(nameof(OnSecuritiesChanged), algorithm, changes).Dispose(); } /// @@ -79,7 +83,7 @@ public override void OnOrderEvent(QCAlgorithm algorithm, OrderEvent orderEvent) { if (_onOrderEventsDefined) { - _model.InvokeMethod(nameof(OnOrderEvent), algorithm, orderEvent).Dispose(); + InvokeMethod(nameof(OnOrderEvent), algorithm, orderEvent).Dispose(); } } } diff --git a/Algorithm/Selection/CustomUniverseSelectionModel.cs b/Algorithm/Selection/CustomUniverseSelectionModel.cs index 0b0dd71b29e0..eafc69ecc6b3 100644 --- a/Algorithm/Selection/CustomUniverseSelectionModel.cs +++ b/Algorithm/Selection/CustomUniverseSelectionModel.cs @@ -30,7 +30,6 @@ namespace QuantConnect.Algorithm.Framework.Selection public class CustomUniverseSelectionModel : UniverseSelectionModel { private static readonly MarketHoursDatabase MarketHours = MarketHoursDatabase.FromDataFolder(); - private readonly Symbol _symbol; private readonly Func> _selector; private readonly UniverseSettings _universeSettings; @@ -105,7 +104,7 @@ public CustomUniverseSelectionModel(SecurityType securityType, string name, stri public override IEnumerable CreateUniverses(QCAlgorithm algorithm) { var universeSettings = _universeSettings ?? algorithm.UniverseSettings; - var entry = MarketHours.GetEntry(_symbol.ID.Market, (string) null, _symbol.SecurityType); + var entry = MarketHours.GetEntry(_symbol.ID.Market, (string)null, _symbol.SecurityType); var config = new SubscriptionDataConfig( universeSettings.Resolution == Resolution.Tick ? typeof(Tick) : typeof(TradeBar), @@ -129,6 +128,12 @@ public override IEnumerable CreateUniverses(QCAlgorithm algorithm) /// public virtual IEnumerable Select(QCAlgorithm algorithm, DateTime date) { + // Check if this method was overridden in Python + if (TryInvokePythonOverride(nameof(Select), out IEnumerable result, algorithm, date)) + { + return result; + } + if (_selector == null) { throw new ArgumentNullException(nameof(_selector)); diff --git a/Algorithm/Selection/UniverseSelectionModel.cs b/Algorithm/Selection/UniverseSelectionModel.cs index e74d88940f55..68f070fcca9f 100644 --- a/Algorithm/Selection/UniverseSelectionModel.cs +++ b/Algorithm/Selection/UniverseSelectionModel.cs @@ -17,14 +17,23 @@ using System.Collections.Generic; using QuantConnect.Data.UniverseSelection; using QuantConnect.Interfaces; +using QuantConnect.Python; namespace QuantConnect.Algorithm.Framework.Selection { /// /// Provides a base class for universe selection models. /// - public class UniverseSelectionModel : IUniverseSelectionModel + public class UniverseSelectionModel : BasePythonWrapper, IUniverseSelectionModel { + + /// + /// Initializes a new instance of the class. + /// + public UniverseSelectionModel() + { + } + /// /// Gets the next time the framework should invoke the `CreateUniverses` method to refresh the set of universes. /// @@ -40,7 +49,7 @@ public virtual DateTime GetNextRefreshTimeUtc() /// The universes to be used by the algorithm public virtual IEnumerable CreateUniverses(QCAlgorithm algorithm) { - throw new System.NotImplementedException("Types deriving from 'UniverseSelectionModel' must implement the 'IEnumerable CreateUniverses(QCAlgorithm) method."); + throw new NotImplementedException("Types deriving from 'UniverseSelectionModel' must implement the 'IEnumerable CreateUniverses(QCAlgorithm) method."); } } } \ No newline at end of file diff --git a/Algorithm/Selection/UniverseSelectionModelPythonWrapper.cs b/Algorithm/Selection/UniverseSelectionModelPythonWrapper.cs index cbbcd4e3b1a5..8f2c88e14804 100644 --- a/Algorithm/Selection/UniverseSelectionModelPythonWrapper.cs +++ b/Algorithm/Selection/UniverseSelectionModelPythonWrapper.cs @@ -27,7 +27,6 @@ namespace QuantConnect.Algorithm.Framework.Selection /// public class UniverseSelectionModelPythonWrapper : UniverseSelectionModel { - private readonly BasePythonWrapper _model; private readonly bool _modelHasGetNextRefreshTime; /// @@ -40,7 +39,7 @@ public override DateTime GetNextRefreshTimeUtc() return DateTime.MaxValue; } - return _model.InvokeMethod(nameof(GetNextRefreshTimeUtc)); + return InvokeMethod(nameof(GetNextRefreshTimeUtc)); } /// @@ -49,18 +48,24 @@ public override DateTime GetNextRefreshTimeUtc() /// Model defining universes for the algorithm public UniverseSelectionModelPythonWrapper(PyObject model) { - _model = new BasePythonWrapper(model, false); + SetPythonInstance(model, false); using (Py.GIL()) { - _modelHasGetNextRefreshTime = _model.HasAttr(nameof(IUniverseSelectionModel.GetNextRefreshTimeUtc)); + _modelHasGetNextRefreshTime = HasAttr(nameof(IUniverseSelectionModel.GetNextRefreshTimeUtc)); foreach (var attributeName in new[] { "CreateUniverses" }) { - if (!_model.HasAttr(attributeName)) + if (!HasAttr(attributeName)) { throw new NotImplementedException($"UniverseSelectionModel.{attributeName} must be implemented. Please implement this missing method on {model.GetPythonType()}"); } } + + var methodName = nameof(SetPythonInstance); + if (HasAttr(methodName)) + { + InvokeMethod(methodName, model); + } } } @@ -71,7 +76,7 @@ public UniverseSelectionModelPythonWrapper(PyObject model) /// The universes to be used by the algorithm public override IEnumerable CreateUniverses(QCAlgorithm algorithm) { - return _model.InvokeMethodAndEnumerate(nameof(CreateUniverses), algorithm); + return InvokeMethodAndEnumerate(nameof(CreateUniverses), algorithm); } } } diff --git a/Common/Python/BasePythonWrapper.cs b/Common/Python/BasePythonWrapper.cs index 956a5ca6b2ea..956c20c90593 100644 --- a/Common/Python/BasePythonWrapper.cs +++ b/Common/Python/BasePythonWrapper.cs @@ -15,7 +15,6 @@ using System; using Python.Runtime; -using QuantConnect.Util; using System.Collections.Generic; namespace QuantConnect.Python @@ -30,7 +29,7 @@ public class BasePythonWrapper : IEquatable _pythonMethods; private Dictionary _pythonPropertyNames; - private readonly bool _validateInterface; + private bool _validateInterface; /// /// Gets the underlying python instance @@ -43,8 +42,6 @@ public class BasePythonWrapper : IEquatableWhether to perform validations for interface implementation public BasePythonWrapper(bool validateInterface = true) { - _pythonMethods = new(); - _pythonPropertyNames = new(); _validateInterface = validateInterface; } @@ -65,14 +62,34 @@ public BasePythonWrapper(PyObject instance, bool validateInterface = true) /// The underlying python instance public void SetPythonInstance(PyObject instance) { - if (_instance != null) + InitializeContainers(); + + _instance = _validateInterface ? instance.ValidateImplementationOf() : instance; + _instance.TryConvert(out _underlyingClrObject); + } + + /// + /// Sets the python instance and sets the validate interface flag + /// + /// The underlying python instance + /// Whether to perform validations for interface implementation + protected void SetPythonInstance(PyObject instance, bool validateInterface) + { + _validateInterface = validateInterface; + SetPythonInstance(instance); + } + + private void InitializeContainers() + { + if (_pythonMethods != null && _pythonPropertyNames != null) { _pythonMethods.Clear(); _pythonPropertyNames.Clear(); + return; } - _instance = _validateInterface ? instance.ValidateImplementationOf() : instance; - _instance.TryConvert(out _underlyingClrObject); + _pythonMethods = new(); + _pythonPropertyNames = new(); } /// @@ -131,12 +148,13 @@ public bool HasAttr(string name) /// Gets the Python instances method with the specified name and caches it /// /// The name of the method + /// Whether to only return python methods /// The matched method - public PyObject GetMethod(string methodName) + public PyObject GetMethod(string methodName, bool pythonOnly = false) { if (!_pythonMethods.TryGetValue(methodName, out var method)) { - method = _instance.GetMethod(methodName); + method = pythonOnly ? _instance.GetPythonMethod(methodName) : _instance.GetMethod(methodName); _pythonMethods = AddToDictionary(_pythonMethods, methodName, method); } @@ -331,6 +349,7 @@ private bool Equals(PyObject other) return PythonReferenceComparer.Instance.Equals(_instance, other); } + /// /// Dispose of this instance /// @@ -348,6 +367,31 @@ public virtual void Dispose() _instance?.Dispose(); } + /// + /// Attempts to invoke the method if it has been overridden in Python. + /// + /// The expected return type of the Python method. + /// The name of the method to call on the Python instance. + /// When this method returns, contains the method result if the call succeeded. + /// The arguments to pass to the Python method. + /// true if the Python method was successfully invoked, otherwise, false. + protected bool TryInvokePythonOverride(string methodName, out T result, params object[] args) + { + + if (_instance != null) + { + var method = GetMethod(methodName, true); + if (method != null) + { + result = PythonRuntimeChecker.InvokeMethod(method, methodName, args); + return true; + } + } + + result = default; + return false; + } + /// /// Set of helper methods to invoke Python methods with runtime checks for return values and out parameter's conversions. /// diff --git a/Tests/Algorithm/Framework/FrameworkModelsPythonInheritanceTests.cs b/Tests/Algorithm/Framework/FrameworkModelsPythonInheritanceTests.cs index 3c28b11884ef..9c81ef14bbe6 100644 --- a/Tests/Algorithm/Framework/FrameworkModelsPythonInheritanceTests.cs +++ b/Tests/Algorithm/Framework/FrameworkModelsPythonInheritanceTests.cs @@ -18,9 +18,14 @@ using Python.Runtime; using QuantConnect.Algorithm; using QuantConnect.Algorithm.Framework.Selection; +using QuantConnect.Data.Fundamental; using QuantConnect.Data.UniverseSelection; using System; +using System.Collections.Generic; using System.Linq; +using QuantConnect.Algorithm.Framework.Alphas; +using QuantConnect.Securities; +using QuantConnect.Securities.Equity; namespace QuantConnect.Tests.Algorithm.Framework { @@ -96,5 +101,146 @@ def SelectCoarse(self, algorithm, coarse): Assert.AreEqual(expected, symbol); } } + + [Test] + public void PythonCanInheritFromFundamentalUniverseSelectionModelAndOverrideMethods() + { + var code = @" +from AlgorithmImports import * + +class MockUniverseSelectionModel(FundamentalUniverseSelectionModel): + def __init__(self): + super().__init__() + self.select_call_count = 0 + self.select_coarse_call_count = 0 + self.select_fine_call_count = 0 + self.create_coarse_call_count = 0 + + def select(self, algorithm: QCAlgorithm, fundamental: list[Fundamental]) -> list[Symbol]: + self.select_call_count += 1 + return [Futures.Metals.GOLD] + + def select_coarse(self, algorithm, coarse): + self.select_coarse_call_count += 1 + self.select_coarse_called = True + + filtered = [c for c in coarse if c.price > 10] + return [c.symbol for c in filtered[:2]] + + def select_fine(self, algorithm, fine): + self.select_fine_call_count += 1 + self.select_fine_called = True + + return [f.symbol for f in fine[:2]] + + def create_coarse_fundamental_universe(self, algorithm): + self.create_coarse_call_count += 1 + self.create_coarse_called = True + + return CoarseFundamentalUniverse( + algorithm.universe_settings, + self.custom_coarse_selector + ) + + def custom_coarse_selector(self, coarse): + filtered = [c for c in coarse if c.has_fundamental_data] + return [c.symbol for c in filtered[:5]]"; + + using (Py.GIL()) + { + dynamic pyModel = PyModule.FromString(Guid.NewGuid().ToString(), code) + .GetAttr("MockUniverseSelectionModel"); + + PyObject pyModelInstance = pyModel(); + var algorithm = new QCAlgorithm(); + var model = new FundamentalUniverseSelectionModel(); + model.SetPythonInstance(pyModelInstance); + + // call the create_universes method + var universes = model.CreateUniverses(algorithm).ToList(); + var universe = universes.First(); + var selectedSymbols = universe.SelectSymbols(DateTime.Now, new BaseDataCollection()).ToList(); + int selectCount = pyModelInstance.GetAttr("select_call_count").As(); + Assert.Greater(selectCount, 0); + + // call the select method + model.Select(algorithm, new List()); + selectCount = pyModelInstance.GetAttr("select_call_count").As(); + Assert.Greater(selectCount, 1); + + // call the select_coarse method + model.SelectCoarse(algorithm, new List()); + int selectCoarseCount = pyModelInstance.GetAttr("select_coarse_call_count").As(); + Assert.Greater(selectCoarseCount, 0); + + // call the select_fine method + model.SelectFine(algorithm, new List()); + int selectFineCount = pyModelInstance.GetAttr("select_fine_call_count").As(); + Assert.Greater(selectFineCount, 0); + + // call the create_coarse_fundamental_universe method + model.CreateCoarseFundamentalUniverse(algorithm); + int createCoarseCount = pyModelInstance.GetAttr("create_coarse_call_count").As(); + Assert.Greater(createCoarseCount, 0); + } + } + + [Test] + public void PythonCanInheritFromBasePairsTradingAlphaModelAndOverrideMethods() + { + var code = @" +from AlgorithmImports import * + +class MockPairsTradingAlphaModel(BasePairsTradingAlphaModel): + def __init__(self): + super().__init__() + self.has_passed_test_call_count = 0 + + def has_passed_test(self, algorithm, asset1, asset2): + self.has_passed_test_call_count += 1 + return False"; + + using (Py.GIL()) + { + var pyModel = PyModule.FromString("test", code).GetAttr("MockPairsTradingAlphaModel"); + var pyInstance = pyModel.Invoke(); + + var algorithm = new QCAlgorithm(); + var model = new BasePairsTradingAlphaModel(); + model.SetPythonInstance(pyInstance); + + var security1 = new Equity( + Symbols.SPY, + SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), + new Cash("USD", 1m, 1m), + SymbolProperties.GetDefault("USD"), + ErrorCurrencyConverter.Instance, + new RegisteredSecurityDataTypesProvider(), + new SecurityCache() + ); + + var security2 = new Equity( + Symbols.AAPL, + SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), + new Cash("USD", 1m, 1m), + SymbolProperties.GetDefault("USD"), + ErrorCurrencyConverter.Instance, + new RegisteredSecurityDataTypesProvider(), + new SecurityCache() + ); + + var changes = SecurityChanges.Create( + new List { security1, security2 }, + new List(), + new List(), + new List() + ); + + model.OnSecuritiesChanged(new QCAlgorithm(), changes); + + int hasPassedTestCallCount = pyInstance.GetAttr("has_passed_test_call_count").As(); + Assert.AreEqual(1, hasPassedTestCallCount); + } + } } } From a31436bc6dbd708c9c9299a30898761920987be3 Mon Sep 17 00:00:00 2001 From: Roman Yavnikov <45608740+Romazes@users.noreply.github.com> Date: Fri, 14 Nov 2025 15:45:46 +0200 Subject: [PATCH 012/103] Test:Feat: parse different future option file name csv (#9084) * test:feat: parse different future option file name csv * test:refactor: ReadSymbolFromZipEntry --- Tests/ToolBox/LeanDataReaderTests.cs | 59 ++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/Tests/ToolBox/LeanDataReaderTests.cs b/Tests/ToolBox/LeanDataReaderTests.cs index 73a7fe3a9346..bb756f3d53a0 100644 --- a/Tests/ToolBox/LeanDataReaderTests.cs +++ b/Tests/ToolBox/LeanDataReaderTests.cs @@ -484,6 +484,65 @@ public void ReadLeanSpotMarketsSecuritiesDataFromFilePath(string securityType, s new object[] {"crypto", "coinbase", "daily", "btcusd", "btcusd_trade.zip", 1318, 3725052.03}, }; + private static IEnumerable MinuteZipEntryFileNames + { + get + { + yield return new TestCaseData( + Symbol.CreateCanonicalOption(Symbol.CreateFuture(Futures.Grains.Corn, Market.CBOT, new(2025, 12, 12))), + "20251103_ozc_minute_trade_american_call_41000_20251121.csv", + 4.1m, + OptionRight.Call, + new DateTime(2025, 11, 21)); + + yield return new TestCaseData( + Symbol.CreateCanonicalOption(Symbol.CreateFuture(Futures.Currencies.JPY, Market.CME, new(2025, 12, 15))), + "20251103_jpu_minute_trade_american_call_62.50000_20260109.csv", + 0.00625m, + OptionRight.Call, + new DateTime(2026, 01, 09)); + + yield return new TestCaseData( + Symbol.CreateCanonicalOption(Symbol.CreateFuture(Futures.Currencies.AUD, Market.CME, new(2025, 12, 15))), + "20251103_adu_minute_openinterest_american_put_6350_20251205.csv", + 0.635m, + OptionRight.Put, + new DateTime(2025, 12, 05)); + + yield return new TestCaseData( + Symbol.CreateCanonicalOption(Symbol.CreateFuture(Futures.Currencies.AUD, Market.CME, new(2025, 12, 15))), + "20251103_adu_minute_quote_american_call_8400_20260306.csv", + 0.84m, + OptionRight.Call, + new DateTime(2026, 03, 06)); + + yield return new TestCaseData( + Symbol.CreateCanonicalOption(Symbol.CreateFuture(Futures.Currencies.NZD, Market.CME, new(2025, 12, 15))), + "20251103_6n_minute_quote_american_call_5600_20260403.csv", + 0.56m, + OptionRight.Call, + new DateTime(2026, 04, 03)); + + yield return new TestCaseData( + Symbol.CreateCanonicalOption(Symbol.CreateFuture(Futures.Meats.LiveCattle, Market.CME, new(2025, 12, 31))), + "20251103_le_minute_quote_american_call_21800_20251205.csv", + 2.18m, + OptionRight.Call, + new DateTime(2025, 12, 05)); + } + } + + [TestCaseSource(nameof(MinuteZipEntryFileNames))] + public void ReadSymbolFromZipEntryShouldParseFileNameWithFloatingNumber(Symbol rootSymbol, string fileNameCsv, + decimal expectedStrike, OptionRight expectedOptionRight, DateTime expectedExpiry) + { + var actualSymbol = LeanData.ReadSymbolFromZipEntry(rootSymbol, Resolution.Minute, fileNameCsv); + + Assert.AreEqual(expectedStrike, actualSymbol.ID.StrikePrice); + Assert.AreEqual(expectedOptionRight, actualSymbol.ID.OptionRight); + Assert.AreEqual(expectedExpiry, actualSymbol.ID.Date); + } + public static string GenerateFilepathForTesting(string dataDirectory, string securityType, string market, string resolution, string ticker, string fileName) { From afca923cd991d2d2bec4d428c4c5dbc249b65b43 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Tue, 18 Nov 2025 12:28:17 -0300 Subject: [PATCH 013/103] Fix history provider equity skip (#9090) --- .../HistoricalData/HistoryProviderManager.cs | 6 +- Research/QuantBook.cs | 7 +- .../HistoryProviderManagerTests.cs | 65 +++++++++++++------ 3 files changed, 54 insertions(+), 24 deletions(-) diff --git a/Engine/HistoricalData/HistoryProviderManager.cs b/Engine/HistoricalData/HistoryProviderManager.cs index 316a9904f363..73b3c2b4df8d 100644 --- a/Engine/HistoricalData/HistoryProviderManager.cs +++ b/Engine/HistoricalData/HistoryProviderManager.cs @@ -19,6 +19,7 @@ using QuantConnect.Interfaces; using QuantConnect.Lean.Engine.DataFeeds.Enumerators; using QuantConnect.Logging; +using QuantConnect.Packets; using QuantConnect.Util; using System; using System.Collections.Generic; @@ -33,6 +34,7 @@ namespace QuantConnect.Lean.Engine.HistoricalData /// public class HistoryProviderManager : HistoryProviderBase { + private AlgorithmNodePacket _job; private IDataPermissionManager _dataPermissionManager; private IBrokerage _brokerage; private bool _initialized; @@ -70,6 +72,7 @@ public override void Initialize(HistoryProviderInitializeParameters parameters) throw new InvalidOperationException("BrokerageHistoryProvider can only be initialized once"); } _initialized = true; + _job = parameters.Job; var dataProvidersList = parameters.Job?.HistoryProvider.DeserializeList() ?? new List(); if (dataProvidersList.IsNullOrEmpty()) @@ -153,7 +156,8 @@ public override IEnumerable GetHistory(IEnumerable reques } historyEnumerators.Add(history.GetEnumerator()); - if (_historyProviders.Count > 1 && historyRequests.All(x => x.Symbol.SecurityType == SecurityType.Equity)) + if (_job != null && _job.DeploymentTarget == DeploymentTarget.CloudPlatform + && _historyProviders.Count > 1 && historyRequests.All(x => x.Symbol.SecurityType == SecurityType.Equity)) { if (!_loggedEquityShortcutWarning) { diff --git a/Research/QuantBook.cs b/Research/QuantBook.cs index e0dfdfa7291d..9bb875981932 100644 --- a/Research/QuantBook.cs +++ b/Research/QuantBook.cs @@ -131,7 +131,8 @@ public QuantBook() : base() UserId = Globals.UserId, ProjectId = Globals.ProjectId, OrganizationId = Globals.OrganizationID, - Version = Globals.Version + Version = Globals.Version, + DeploymentTarget = Config.GetValue("deployment-target", DeploymentTarget.LocalPlatform) }; ProjectId = algorithmPacket.ProjectId; @@ -185,7 +186,7 @@ public QuantBook() : base() HistoryProvider = new HistoryProviderManager(); HistoryProvider.Initialize( new HistoryProviderInitializeParameters( - null, + algorithmPacket, null, algorithmHandlers.DataProvider, _dataCacheProvider, @@ -208,7 +209,7 @@ public QuantBook() : base() SetFutureChainProvider(new CachingFutureChainProvider(futureChainProvider)); SetAlgorithmMode(AlgorithmMode.Research); - SetDeploymentTarget(Config.GetValue("deployment-target", DeploymentTarget.LocalPlatform)); + SetDeploymentTarget(algorithmPacket.DeploymentTarget); } catch (Exception exception) { diff --git a/Tests/Engine/HistoricalData/HistoryProviderManagerTests.cs b/Tests/Engine/HistoricalData/HistoryProviderManagerTests.cs index 5130048b76e5..bc0dfc33125e 100644 --- a/Tests/Engine/HistoricalData/HistoryProviderManagerTests.cs +++ b/Tests/Engine/HistoricalData/HistoryProviderManagerTests.cs @@ -37,26 +37,7 @@ public class HistoryProviderManagerTests [SetUp] public void Setup() { - _historyProviderWrapper = new(); - var historyProviders = Newtonsoft.Json.JsonConvert.SerializeObject(new[] { nameof(SubscriptionDataReaderHistoryProvider), nameof(TestHistoryProvider) }); - var jobWithArrayHistoryProviders = new LiveNodePacket - { - HistoryProvider = historyProviders - }; - _paperBrokerage = new PaperBrokerage(null, null); - _historyProviderWrapper.SetBrokerage(_paperBrokerage); - _historyProviderWrapper.Initialize(new HistoryProviderInitializeParameters( - jobWithArrayHistoryProviders, - null, - TestGlobals.DataProvider, - TestGlobals.DataCacheProvider, - TestGlobals.MapFileProvider, - TestGlobals.FactorFileProvider, - null, - false, - new DataPermissionManager(), - null, - new AlgorithmSettings())); + Setup(DeploymentTarget.LocalPlatform); } [TearDown] @@ -132,6 +113,25 @@ public void OptionsAreMappedCorrectly() Assert.AreEqual(426, _historyProviderWrapper.DataPointCount); } + [TestCase(DeploymentTarget.CloudPlatform)] + [TestCase(DeploymentTarget.LocalPlatform)] + public void EquitiesMergedCorrectly(DeploymentTarget deploymentTarget) + { + TearDown(); + Setup(deploymentTarget); + var symbol = Symbol.Create("WM", SecurityType.Equity, Market.USA); + + var request = TestsHelpers.GetHistoryRequest(symbol, new DateTime(2008, 01, 01), new DateTime(2008, 01, 05), Resolution.Daily, TickType.Trade); + + var result = _historyProviderWrapper.GetHistory(new[] { request }, TimeZones.NewYork).ToList(); + + Assert.IsNotEmpty(result); + var firstBar = result.First().Values.Single(); + Assert.AreEqual("WMI", firstBar.Symbol.Value); + Assert.AreEqual(deploymentTarget == DeploymentTarget.CloudPlatform ? 3 : 4, result.Count); + Assert.AreEqual(5, _historyProviderWrapper.DataPointCount); + } + [Test] public void DataIncreasesInTime() { @@ -148,5 +148,30 @@ public void DataIncreasesInTime() initialTime = slice.UtcTime; } } + + private void Setup(DeploymentTarget deploymentTarget) + { + _historyProviderWrapper = new(); + var historyProviders = Newtonsoft.Json.JsonConvert.SerializeObject(new[] { nameof(SubscriptionDataReaderHistoryProvider), nameof(TestHistoryProvider) }); + var jobWithArrayHistoryProviders = new LiveNodePacket + { + HistoryProvider = historyProviders, + DeploymentTarget = deploymentTarget + }; + _paperBrokerage = new PaperBrokerage(null, null); + _historyProviderWrapper.SetBrokerage(_paperBrokerage); + _historyProviderWrapper.Initialize(new HistoryProviderInitializeParameters( + jobWithArrayHistoryProviders, + null, + TestGlobals.DataProvider, + TestGlobals.DataCacheProvider, + TestGlobals.MapFileProvider, + TestGlobals.FactorFileProvider, + null, + false, + new DataPermissionManager(), + null, + new AlgorithmSettings())); + } } } From 4961844f829fd8b401b5394a64ac8eb8d1122870 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Tue, 18 Nov 2025 12:29:05 -0300 Subject: [PATCH 014/103] Refactor user define universe handling (#9088) * Refactor user define universe handling - Normalize user define universe additions and removals to behave like other subscriptions without requiting special handling * Minor fixes --- ...RemoveOptionContractRegressionAlgorithm.cs | 2 +- ...moveSecuritySameLoopRegressionAlgorithm.cs | 2 +- ...ntractWithContinuousRegressionAlgorithm.cs | 2 +- ...ptionContractExpiresRegressionAlgorithm.cs | 2 +- ...ContractFromUniverseRegressionAlgorithm.cs | 2 +- ...dOptionContractTwiceRegressionAlgorithm.cs | 2 +- ...iverseSelectionModelRegressionAlgorithm.cs | 2 +- ...dRemoveSecurityCacheRegressionAlgorithm.cs | 2 +- .../AddRemoveSecurityRegressionAlgorithm.cs | 2 +- ...oveOneOptionContractRegressionAlgorithm.cs | 2 +- ...uxiliaryDataHandlersRegressionAlgorithm.cs | 2 +- .../BasicTemplateOptionsFrameworkAlgorithm.cs | 2 +- ...hStrictDailyEndTimesRegressionAlgorithm.cs | 4 +- ...tStrictDailyEndTimesRegressionAlgorithm.cs | 2 +- ...mentAfterManualSecurityRemovalAlgorithm.cs | 2 +- .../DelistedIndexOptionDivestedRegression.cs | 2 +- Algorithm.CSharp/DelistingEventsAlgorithm.cs | 2 +- ...cateOptionAssignmentRegressionAlgorithm.cs | 2 +- ...DataHigherResolutionRegressionAlgorithm.cs | 2 +- ...OnDataSameResolutionRegressionAlgorithm.cs | 2 +- ...nBuySellCallIntradayRegressionAlgorithm.cs | 2 +- ...eOptionCallITMExpiryRegressionAlgorithm.cs | 2 +- ...nCallITMGreeksExpiryRegressionAlgorithm.cs | 2 +- ...eOptionCallOTMExpiryRegressionAlgorithm.cs | 2 +- ...reOptionPutITMExpiryRegressionAlgorithm.cs | 2 +- ...reOptionPutOTMExpiryRegressionAlgorithm.cs | 2 +- ...onShortCallITMExpiryRegressionAlgorithm.cs | 2 +- ...onShortCallOTMExpiryRegressionAlgorithm.cs | 2 +- ...ionShortPutITMExpiryRegressionAlgorithm.cs | 2 +- ...ionShortPutOTMExpiryRegressionAlgorithm.cs | 2 +- ...ryTimeAndLiquidationRegressionAlgorithm.cs | 2 +- ...nBuySellCallIntradayRegressionAlgorithm.cs | 2 +- ...onCallITMExpiryDailyRegressionAlgorithm.cs | 2 +- ...xOptionCallITMExpiryRegressionAlgorithm.cs | 2 +- ...nCallITMGreeksExpiryRegressionAlgorithm.cs | 2 +- ...onCallOTMExpiryDailyRegressionAlgorithm.cs | 2 +- ...xOptionCallOTMExpiryRegressionAlgorithm.cs | 2 +- ...exOptionPutITMExpiryRegressionAlgorithm.cs | 2 +- ...exOptionPutOTMExpiryRegressionAlgorithm.cs | 2 +- ...onShortCallITMExpiryRegressionAlgorithm.cs | 2 +- ...onShortCallOTMExpiryRegressionAlgorithm.cs | 2 +- ...ionShortPutITMExpiryRegressionAlgorithm.cs | 2 +- ...ionShortPutOTMExpiryRegressionAlgorithm.cs | 2 +- ...ecurityCanBeTradableRegressionAlgorithm.cs | 2 +- ...icatorSelectorsWorkWithDifferentOptions.cs | 2 +- ...ForAutomaticExerciseRegressionAlgorithm.cs | 2 +- ...rnalSubscriptionHistoryRequestAlgorithm.cs | 2 +- .../OptionAssignmentRegressionAlgorithm.cs | 2 +- ...AssignmentStatisticsRegressionAlgorithm.cs | 2 +- ...nSubscriptionRemovalRegressionAlgorithm.cs | 2 +- ...ryAndNonTradableDateRegressionAlgorithm.cs | 2 +- ...iryOrderHasZeroPriceRegressionAlgorithm.cs | 2 +- .../OptionTimeSliceRegressionAlgorithm.cs | 4 +- .../ProcessSplitSymbolsRegressionAlgorithm.cs | 2 +- .../Collective2IndexOptionAlgorithm.cs | 2 +- ...seCompositeDelistingRegressionAlgorithm.cs | 43 ++--- ...istingRegressionAlgorithmNoAddEquityETF.cs | 2 +- ...verseMappedCompositeRegressionAlgorithm.cs | 12 +- .../RemoveUnderlyingRegressionAlgorithm.cs | 2 +- ...nReAdditionForEquityRegressionAlgorithm.cs | 2 +- ...yAddedFutureContractRegressionAlgorithm.cs | 2 +- ...rManuallyAddedOptionRegressionAlgorithm.cs | 2 +- ...thChangeOfResolutionRegressionAlgorithm.cs | 2 +- ...lectionSymbolCacheRemovalRegressionTest.cs | 2 +- ...tSubscriptionRequestRegressionAlgorithm.cs | 2 +- ...SubscriptionTradableRegressionAlgorithm.cs | 2 +- ...aTypesBarCountWarmupRegressionAlgorithm.cs | 2 +- .../WarmupDataTypesRegressionAlgorithm.cs | 2 +- ...seCompositeDelistingRegressionAlgorithm.py | 6 +- ...istingRegressionAlgorithmNoAddEquityETF.py | 2 +- Algorithm/QCAlgorithm.Universe.cs | 38 ++-- Algorithm/QCAlgorithm.cs | 13 +- .../Backtesting/BacktestingBrokerage.cs | 10 +- .../Data/SubscriptionDataConfigExtensions.cs | 10 +- Common/Securities/UniverseManager.cs | 35 +++- Common/Securities/UniverseManagerChanged.cs | 45 +++++ Common/SecurityIdentifier.cs | 5 +- Engine/DataFeeds/DataManager.cs | 179 +++++++++--------- .../CorporateEventEnumeratorFactory.cs | 5 +- ...edUniverseSubscriptionEnumeratorFactory.cs | 106 +---------- Engine/DataFeeds/FileSystemDataFeed.cs | 10 +- Engine/DataFeeds/LiveTradingDataFeed.cs | 16 +- Engine/DataFeeds/Subscription.cs | 5 + .../SubscriptionFrontierTimeProvider.cs | 5 +- Engine/DataFeeds/SubscriptionUtils.cs | 2 +- .../Common/Securities/UniverseManagerTests.cs | 8 +- .../CustomBrokerageMessageHandlerTests.cs | 48 ++--- .../DataFeeds/LiveTradingDataFeedTests.cs | 2 +- 88 files changed, 368 insertions(+), 373 deletions(-) create mode 100644 Common/Securities/UniverseManagerChanged.cs diff --git a/Algorithm.CSharp/AddAndRemoveOptionContractRegressionAlgorithm.cs b/Algorithm.CSharp/AddAndRemoveOptionContractRegressionAlgorithm.cs index 452439dc65ed..77e9bb89f315 100644 --- a/Algorithm.CSharp/AddAndRemoveOptionContractRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddAndRemoveOptionContractRegressionAlgorithm.cs @@ -87,7 +87,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 24; + public long DataPoints => 26; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AddAndRemoveSecuritySameLoopRegressionAlgorithm.cs b/Algorithm.CSharp/AddAndRemoveSecuritySameLoopRegressionAlgorithm.cs index 2c864924deee..017718215175 100644 --- a/Algorithm.CSharp/AddAndRemoveSecuritySameLoopRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddAndRemoveSecuritySameLoopRegressionAlgorithm.cs @@ -82,7 +82,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 24; + public long DataPoints => 25; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AddFutureContractWithContinuousRegressionAlgorithm.cs b/Algorithm.CSharp/AddFutureContractWithContinuousRegressionAlgorithm.cs index 5bd61eecd005..5993d707accb 100644 --- a/Algorithm.CSharp/AddFutureContractWithContinuousRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddFutureContractWithContinuousRegressionAlgorithm.cs @@ -115,7 +115,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 61; + public long DataPoints => 62; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AddOptionContractExpiresRegressionAlgorithm.cs b/Algorithm.CSharp/AddOptionContractExpiresRegressionAlgorithm.cs index 2de16c4662d0..b2f34b393392 100644 --- a/Algorithm.CSharp/AddOptionContractExpiresRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddOptionContractExpiresRegressionAlgorithm.cs @@ -117,7 +117,7 @@ public override void OnData(Slice slice) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 37597; + public long DataPoints => 37598; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AddOptionContractFromUniverseRegressionAlgorithm.cs b/Algorithm.CSharp/AddOptionContractFromUniverseRegressionAlgorithm.cs index b4f121be3a51..47a836b872e6 100644 --- a/Algorithm.CSharp/AddOptionContractFromUniverseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddOptionContractFromUniverseRegressionAlgorithm.cs @@ -169,7 +169,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 5798; + public long DataPoints => 5800; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AddOptionContractTwiceRegressionAlgorithm.cs b/Algorithm.CSharp/AddOptionContractTwiceRegressionAlgorithm.cs index 5454bfde232f..3bb03b2318e9 100644 --- a/Algorithm.CSharp/AddOptionContractTwiceRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddOptionContractTwiceRegressionAlgorithm.cs @@ -116,7 +116,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 3814; + public long DataPoints => 3818; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AddOptionUniverseSelectionModelRegressionAlgorithm.cs b/Algorithm.CSharp/AddOptionUniverseSelectionModelRegressionAlgorithm.cs index a38ef57cad4b..849ff5030f2a 100644 --- a/Algorithm.CSharp/AddOptionUniverseSelectionModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddOptionUniverseSelectionModelRegressionAlgorithm.cs @@ -96,7 +96,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 1658167; + public long DataPoints => 1658168; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AddRemoveSecurityCacheRegressionAlgorithm.cs b/Algorithm.CSharp/AddRemoveSecurityCacheRegressionAlgorithm.cs index ed9084e175a0..673e7081c3f5 100644 --- a/Algorithm.CSharp/AddRemoveSecurityCacheRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddRemoveSecurityCacheRegressionAlgorithm.cs @@ -83,7 +83,7 @@ public override void OnData(Slice slice) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 11202; + public long DataPoints => 15042; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AddRemoveSecurityRegressionAlgorithm.cs b/Algorithm.CSharp/AddRemoveSecurityRegressionAlgorithm.cs index b76f3478181b..ecb9cbd519b1 100644 --- a/Algorithm.CSharp/AddRemoveSecurityRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddRemoveSecurityRegressionAlgorithm.cs @@ -110,7 +110,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 7063; + public long DataPoints => 7065; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AddTwoAndRemoveOneOptionContractRegressionAlgorithm.cs b/Algorithm.CSharp/AddTwoAndRemoveOneOptionContractRegressionAlgorithm.cs index 0f6a0d0af28e..2ee98a54c5c7 100644 --- a/Algorithm.CSharp/AddTwoAndRemoveOneOptionContractRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddTwoAndRemoveOneOptionContractRegressionAlgorithm.cs @@ -101,7 +101,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 1578; + public long DataPoints => 1579; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/AuxiliaryDataHandlersRegressionAlgorithm.cs b/Algorithm.CSharp/AuxiliaryDataHandlersRegressionAlgorithm.cs index 2ec3d8eac6a3..26b22be5da87 100644 --- a/Algorithm.CSharp/AuxiliaryDataHandlersRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AuxiliaryDataHandlersRegressionAlgorithm.cs @@ -119,7 +119,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 126221; + public long DataPoints => 126222; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs index ea842ab17ee1..c6c5e3a5f4e2 100644 --- a/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs @@ -139,7 +139,7 @@ public override IEnumerable CreateTargets(QCAlgorithm algorith /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 17486; + public long DataPoints => 17487; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithStrictDailyEndTimesRegressionAlgorithm.cs b/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithStrictDailyEndTimesRegressionAlgorithm.cs index 575f79648c14..2d3981a1a5a7 100644 --- a/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithStrictDailyEndTimesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithStrictDailyEndTimesRegressionAlgorithm.cs @@ -81,7 +81,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public virtual long DataPoints => 47132; + public virtual long DataPoints => 47140; /// /// Data Points count of the algorithm history @@ -117,7 +117,7 @@ public override void OnEndOfAlgorithm() {"Beta", "0"}, {"Annual Standard Deviation", "0"}, {"Annual Variance", "0"}, - {"Information Ratio", "-5.732"}, + {"Information Ratio", "-6.035"}, {"Tracking Error", "0.05"}, {"Treynor Ratio", "0"}, {"Total Fees", "$0.00"}, diff --git a/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithoutStrictDailyEndTimesRegressionAlgorithm.cs b/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithoutStrictDailyEndTimesRegressionAlgorithm.cs index ff07abc720c4..74b04bd5cd77 100644 --- a/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithoutStrictDailyEndTimesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithoutStrictDailyEndTimesRegressionAlgorithm.cs @@ -26,6 +26,6 @@ public class DailyOptionChainOpenInterestDataWithoutStrictDailyEndTimesRegressio /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 46264; + public override long DataPoints => 46271; } } diff --git a/Algorithm.CSharp/DelayedSettlementAfterManualSecurityRemovalAlgorithm.cs b/Algorithm.CSharp/DelayedSettlementAfterManualSecurityRemovalAlgorithm.cs index e26d5fa9794f..425d7fbe67ba 100644 --- a/Algorithm.CSharp/DelayedSettlementAfterManualSecurityRemovalAlgorithm.cs +++ b/Algorithm.CSharp/DelayedSettlementAfterManualSecurityRemovalAlgorithm.cs @@ -105,7 +105,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 7122; + public long DataPoints => 7123; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs b/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs index 67f8274cad0a..321d90f1203a 100644 --- a/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs +++ b/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs @@ -120,7 +120,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 17099; + public long DataPoints => 17100; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/DelistingEventsAlgorithm.cs b/Algorithm.CSharp/DelistingEventsAlgorithm.cs index a6da34f2c290..5cd03a378246 100644 --- a/Algorithm.CSharp/DelistingEventsAlgorithm.cs +++ b/Algorithm.CSharp/DelistingEventsAlgorithm.cs @@ -153,7 +153,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 86; + public long DataPoints => 87; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/DuplicateOptionAssignmentRegressionAlgorithm.cs b/Algorithm.CSharp/DuplicateOptionAssignmentRegressionAlgorithm.cs index 30368ac2610b..b762e5387557 100644 --- a/Algorithm.CSharp/DuplicateOptionAssignmentRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DuplicateOptionAssignmentRegressionAlgorithm.cs @@ -213,7 +213,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 2849; + public long DataPoints => 2850; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/ForexInternalFeedOnDataHigherResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/ForexInternalFeedOnDataHigherResolutionRegressionAlgorithm.cs index 67cd5c68356d..9f27516d0652 100644 --- a/Algorithm.CSharp/ForexInternalFeedOnDataHigherResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ForexInternalFeedOnDataHigherResolutionRegressionAlgorithm.cs @@ -136,7 +136,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 63; + public long DataPoints => 64; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/ForexInternalFeedOnDataSameResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/ForexInternalFeedOnDataSameResolutionRegressionAlgorithm.cs index ca10ee0aaf4d..e2f9572edf4c 100644 --- a/Algorithm.CSharp/ForexInternalFeedOnDataSameResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ForexInternalFeedOnDataSameResolutionRegressionAlgorithm.cs @@ -135,7 +135,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 31; + public long DataPoints => 32; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionBuySellCallIntradayRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionBuySellCallIntradayRegressionAlgorithm.cs index 91421f786d28..e44a4d1e5518 100644 --- a/Algorithm.CSharp/FutureOptionBuySellCallIntradayRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionBuySellCallIntradayRegressionAlgorithm.cs @@ -112,7 +112,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 309282; + public long DataPoints => 309286; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs index d2bf2a388807..162a99eafa4c 100644 --- a/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs @@ -200,7 +200,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs index de5fc1efe60a..1d0d71d884de 100644 --- a/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs @@ -165,7 +165,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs index 303f518fa80a..340f5985c453 100644 --- a/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs @@ -176,7 +176,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionPutITMExpiryRegressionAlgorithm.cs index 195a0da6cab9..2a44fb538b2d 100644 --- a/Algorithm.CSharp/FutureOptionPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionPutITMExpiryRegressionAlgorithm.cs @@ -201,7 +201,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionPutOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionPutOTMExpiryRegressionAlgorithm.cs index 7749e276aa90..dfdb7b8ffc2c 100644 --- a/Algorithm.CSharp/FutureOptionPutOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionPutOTMExpiryRegressionAlgorithm.cs @@ -174,7 +174,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs index 6171e8e877fc..2d3fc789d073 100644 --- a/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs @@ -185,7 +185,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs index 2f2fbf4c2a70..ded9598fa40b 100644 --- a/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs @@ -168,7 +168,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs index 2f6987508d2a..81f53f1e987c 100644 --- a/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs @@ -182,7 +182,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs index 16df8db5397e..bf9f3c4dc561 100644 --- a/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs @@ -167,7 +167,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm.cs b/Algorithm.CSharp/FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm.cs index 3f803da513f9..e1b7db7d64c8 100644 --- a/Algorithm.CSharp/FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm.cs @@ -178,7 +178,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212942; + public long DataPoints => 212944; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionBuySellCallIntradayRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionBuySellCallIntradayRegressionAlgorithm.cs index 960e03d52d7c..a330fb8fe069 100644 --- a/Algorithm.CSharp/IndexOptionBuySellCallIntradayRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionBuySellCallIntradayRegressionAlgorithm.cs @@ -118,7 +118,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 32143; + public long DataPoints => 32144; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs index 3e2abc926a20..56667250d341 100644 --- a/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs @@ -38,7 +38,7 @@ public override void Initialize() /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 195; + public override long DataPoints => 196; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallITMExpiryRegressionAlgorithm.cs index b1d352df2867..b936cd3fc4cf 100644 --- a/Algorithm.CSharp/IndexOptionCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallITMExpiryRegressionAlgorithm.cs @@ -170,7 +170,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public virtual long DataPoints => 19908; + public virtual long DataPoints => 19909; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs index 9983b1e39f6e..a36079bbf2df 100644 --- a/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs @@ -156,7 +156,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 19908; + public long DataPoints => 19909; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionCallOTMExpiryDailyRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallOTMExpiryDailyRegressionAlgorithm.cs index 50931610ec93..a7fd2c8972d4 100644 --- a/Algorithm.CSharp/IndexOptionCallOTMExpiryDailyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallOTMExpiryDailyRegressionAlgorithm.cs @@ -38,7 +38,7 @@ public override void Initialize() /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 185; + public override long DataPoints => 186; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallOTMExpiryRegressionAlgorithm.cs index 02e5a96e0fee..e215291eaefe 100644 --- a/Algorithm.CSharp/IndexOptionCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallOTMExpiryRegressionAlgorithm.cs @@ -178,7 +178,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public virtual long DataPoints => 15941; + public virtual long DataPoints => 15942; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs index a40c5989f733..f16bd35527c0 100644 --- a/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs @@ -185,7 +185,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 19890; + public long DataPoints => 19891; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionPutOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionPutOTMExpiryRegressionAlgorithm.cs index 20c7e750a1c9..5df1cbf27a4e 100644 --- a/Algorithm.CSharp/IndexOptionPutOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionPutOTMExpiryRegressionAlgorithm.cs @@ -169,7 +169,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 19984; + public long DataPoints => 19985; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionShortCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionShortCallITMExpiryRegressionAlgorithm.cs index 594c18540930..91120c4c638d 100644 --- a/Algorithm.CSharp/IndexOptionShortCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionShortCallITMExpiryRegressionAlgorithm.cs @@ -183,7 +183,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 19908; + public long DataPoints => 19909; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs index 19f8a2cd96fd..1f7ae7842616 100644 --- a/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs @@ -163,7 +163,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 15941; + public long DataPoints => 15942; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionShortPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionShortPutITMExpiryRegressionAlgorithm.cs index f74354365829..dee9fb40490c 100644 --- a/Algorithm.CSharp/IndexOptionShortPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionShortPutITMExpiryRegressionAlgorithm.cs @@ -186,7 +186,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 19890; + public long DataPoints => 19891; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexOptionShortPutOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionShortPutOTMExpiryRegressionAlgorithm.cs index 6a48dcea77fe..3206a7453ea2 100644 --- a/Algorithm.CSharp/IndexOptionShortPutOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionShortPutOTMExpiryRegressionAlgorithm.cs @@ -162,7 +162,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 19984; + public long DataPoints => 19985; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndexSecurityCanBeTradableRegressionAlgorithm.cs b/Algorithm.CSharp/IndexSecurityCanBeTradableRegressionAlgorithm.cs index 89bb566fcad4..960d01fa5cde 100644 --- a/Algorithm.CSharp/IndexSecurityCanBeTradableRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexSecurityCanBeTradableRegressionAlgorithm.cs @@ -106,7 +106,7 @@ private void AssertIndexIsNotTradable() /// /// Data Points count of all timeslices of algorithm /// - public virtual long DataPoints => 796; + public virtual long DataPoints => 797; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs b/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs index d16d5f66607e..7ecff5c39405 100644 --- a/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs +++ b/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs @@ -186,7 +186,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 454077; + public long DataPoints => 454078; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs b/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs index 0b09371fa80d..43a4ecb10c03 100644 --- a/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs @@ -171,7 +171,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 2821; + public long DataPoints => 2822; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/InternalSubscriptionHistoryRequestAlgorithm.cs b/Algorithm.CSharp/InternalSubscriptionHistoryRequestAlgorithm.cs index a4e566250f7e..23bc4ffac59c 100644 --- a/Algorithm.CSharp/InternalSubscriptionHistoryRequestAlgorithm.cs +++ b/Algorithm.CSharp/InternalSubscriptionHistoryRequestAlgorithm.cs @@ -80,7 +80,7 @@ public override void OnData(Slice slice) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 107; + public long DataPoints => 108; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/OptionAssignmentRegressionAlgorithm.cs b/Algorithm.CSharp/OptionAssignmentRegressionAlgorithm.cs index 38b5a2296640..c3b691c7f718 100644 --- a/Algorithm.CSharp/OptionAssignmentRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionAssignmentRegressionAlgorithm.cs @@ -92,7 +92,7 @@ public override void OnData(Slice slice) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 4025; + public long DataPoints => 4026; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs b/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs index b333bbcbee57..c40617835545 100644 --- a/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs @@ -261,7 +261,7 @@ private static bool AreEqual(decimal expected, decimal actual) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 4358; + public long DataPoints => 4359; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/OptionChainSubscriptionRemovalRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainSubscriptionRemovalRegressionAlgorithm.cs index 2539a3a60cd4..c4d104c38179 100644 --- a/Algorithm.CSharp/OptionChainSubscriptionRemovalRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainSubscriptionRemovalRegressionAlgorithm.cs @@ -113,7 +113,7 @@ protected override OptionFilterUniverse Filter(OptionFilterUniverse filter) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 2155693; + public long DataPoints => 2155694; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/OptionExerciseOnExpiryAndNonTradableDateRegressionAlgorithm.cs b/Algorithm.CSharp/OptionExerciseOnExpiryAndNonTradableDateRegressionAlgorithm.cs index 0e0a8748dba4..047ea06bda73 100644 --- a/Algorithm.CSharp/OptionExerciseOnExpiryAndNonTradableDateRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionExerciseOnExpiryAndNonTradableDateRegressionAlgorithm.cs @@ -112,7 +112,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public virtual long DataPoints => 16638; + public virtual long DataPoints => 16640; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs b/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs index 51af45f28fed..1594f7f14675 100644 --- a/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs @@ -160,7 +160,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 212196; + public long DataPoints => 212198; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/OptionTimeSliceRegressionAlgorithm.cs b/Algorithm.CSharp/OptionTimeSliceRegressionAlgorithm.cs index 54aefbded57b..07de16a12246 100644 --- a/Algorithm.CSharp/OptionTimeSliceRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionTimeSliceRegressionAlgorithm.cs @@ -86,12 +86,12 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 10857; + public long DataPoints => 10869; /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 787; + public int AlgorithmHistoryDataPoints => 788; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/ProcessSplitSymbolsRegressionAlgorithm.cs b/Algorithm.CSharp/ProcessSplitSymbolsRegressionAlgorithm.cs index d30f037031ad..1be6bc4b2db4 100644 --- a/Algorithm.CSharp/ProcessSplitSymbolsRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ProcessSplitSymbolsRegressionAlgorithm.cs @@ -73,7 +73,7 @@ public override void OnData(Slice slice) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 34; + public long DataPoints => 35; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/RegressionTests/Collective2IndexOptionAlgorithm.cs b/Algorithm.CSharp/RegressionTests/Collective2IndexOptionAlgorithm.cs index 0f1bb5158255..6128534d6eae 100644 --- a/Algorithm.CSharp/RegressionTests/Collective2IndexOptionAlgorithm.cs +++ b/Algorithm.CSharp/RegressionTests/Collective2IndexOptionAlgorithm.cs @@ -115,7 +115,7 @@ public override void OnData(Slice slice) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 4543; + public long DataPoints => 4544; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseCompositeDelistingRegressionAlgorithm.cs b/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseCompositeDelistingRegressionAlgorithm.cs index 8bd9ea031de5..4b918fd42be9 100644 --- a/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseCompositeDelistingRegressionAlgorithm.cs +++ b/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseCompositeDelistingRegressionAlgorithm.cs @@ -106,18 +106,17 @@ public override void OnSecuritiesChanged(SecurityChanges changes) } // if we added the etf subscription it will get added and delisted and send us a addition/removal event - var adjusment = AddETFSubscription ? 1 : 0; - var expectedChangesCount = _universeSymbolCount + adjusment; + var expectedChangesCount = _universeSymbolCount; if (_universeSelectionDone) { - // "_universeSymbolCount + 1" because selection is done right away, - // so AddedSecurities includes all ETF constituents (including APPL) plus GDVD - _universeAdded |= changes.AddedSecurities.Count == expectedChangesCount; + // manually added securities are added right away, the etf universe selection happens a few days later when data available + // AAPL was already added so it wont be counted + _universeAdded |= changes.AddedSecurities.Count == (expectedChangesCount - 1); } // TODO: shouldn't be sending AAPL as a removed security since it was added by another universe - _universeRemoved |= changes.RemovedSecurities.Count == expectedChangesCount && + _universeRemoved |= changes.RemovedSecurities.Count == (expectedChangesCount + (AddETFSubscription ? 1 : 0)) && UtcTime.Date >= _delistingDate && UtcTime.Date < EndDate; } @@ -151,7 +150,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public virtual long DataPoints => 692; + public virtual long DataPoints => 826; /// /// Data Points count of the algorithm history @@ -171,31 +170,31 @@ public override void OnEndOfAlgorithm() {"Total Orders", "1"}, {"Average Win", "0%"}, {"Average Loss", "0%"}, - {"Compounding Annual Return", "30.084%"}, + {"Compounding Annual Return", "26.315%"}, {"Drawdown", "5.400%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, - {"End Equity", "104393.19"}, - {"Net Profit", "4.393%"}, - {"Sharpe Ratio", "1.543"}, - {"Sortino Ratio", "2.111"}, - {"Probabilistic Sharpe Ratio", "58.028%"}, + {"End Equity", "103892.62"}, + {"Net Profit", "3.893%"}, + {"Sharpe Ratio", "1.291"}, + {"Sortino Ratio", "1.876"}, + {"Probabilistic Sharpe Ratio", "53.929%"}, {"Loss Rate", "0%"}, {"Win Rate", "0%"}, {"Profit-Loss Ratio", "0"}, - {"Alpha", "0.166"}, - {"Beta", "0.717"}, - {"Annual Standard Deviation", "0.136"}, + {"Alpha", "0.13"}, + {"Beta", "0.697"}, + {"Annual Standard Deviation", "0.139"}, {"Annual Variance", "0.019"}, - {"Information Ratio", "1.254"}, - {"Tracking Error", "0.118"}, - {"Treynor Ratio", "0.293"}, - {"Total Fees", "$2.06"}, - {"Estimated Strategy Capacity", "$160000000.00"}, + {"Information Ratio", "0.889"}, + {"Tracking Error", "0.122"}, + {"Treynor Ratio", "0.257"}, + {"Total Fees", "$2.04"}, + {"Estimated Strategy Capacity", "$260000000.00"}, {"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "0.83%"}, {"Drawdown Recovery", "23"}, - {"OrderListHash", "527cba5cfdcac4b0f667bb354e80a1fe"} + {"OrderListHash", "cdf9a800c8ec7d5f9f750f32c2622f5a"} }; } } diff --git a/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseCompositeDelistingRegressionAlgorithmNoAddEquityETF.cs b/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseCompositeDelistingRegressionAlgorithmNoAddEquityETF.cs index 2b9499a1825b..213c17251b93 100644 --- a/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseCompositeDelistingRegressionAlgorithmNoAddEquityETF.cs +++ b/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseCompositeDelistingRegressionAlgorithmNoAddEquityETF.cs @@ -26,7 +26,7 @@ public class ETFConstituentUniverseCompositeDelistingRegressionAlgorithmNoAddEqu /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 511; + public override long DataPoints => 623; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseMappedCompositeRegressionAlgorithm.cs b/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseMappedCompositeRegressionAlgorithm.cs index 976b6b4b1c4e..736c48767c7c 100644 --- a/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseMappedCompositeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/RegressionTests/Universes/ETFConstituentUniverseMappedCompositeRegressionAlgorithm.cs @@ -157,7 +157,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 618; + public long DataPoints => 751; /// /// Data Points count of the algorithm history @@ -189,13 +189,13 @@ public override void OnEndOfAlgorithm() {"Loss Rate", "0%"}, {"Win Rate", "0%"}, {"Profit-Loss Ratio", "0"}, - {"Alpha", "-0.084"}, - {"Beta", "0.591"}, + {"Alpha", "-0.118"}, + {"Beta", "0.445"}, {"Annual Standard Deviation", "0.078"}, {"Annual Variance", "0.006"}, - {"Information Ratio", "-1.408"}, - {"Tracking Error", "0.065"}, - {"Treynor Ratio", "-0.125"}, + {"Information Ratio", "-2.01"}, + {"Tracking Error", "0.086"}, + {"Treynor Ratio", "-0.166"}, {"Total Fees", "$22.93"}, {"Estimated Strategy Capacity", "$74000000.00"}, {"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"}, diff --git a/Algorithm.CSharp/RemoveUnderlyingRegressionAlgorithm.cs b/Algorithm.CSharp/RemoveUnderlyingRegressionAlgorithm.cs index a7f60da76227..9dd057804e0b 100644 --- a/Algorithm.CSharp/RemoveUnderlyingRegressionAlgorithm.cs +++ b/Algorithm.CSharp/RemoveUnderlyingRegressionAlgorithm.cs @@ -86,7 +86,7 @@ select optionContract /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 15885; + public long DataPoints => 15886; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs b/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs index aa5ab9fe6138..4a0000326b58 100644 --- a/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs @@ -187,7 +187,7 @@ protected virtual void AssertSecurityInitializationCount(Dictionary /// Data Points count of all timeslices of algorithm /// - public virtual long DataPoints => 4036; + public virtual long DataPoints => 4072; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedFutureContractRegressionAlgorithm.cs b/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedFutureContractRegressionAlgorithm.cs index 3546d5423298..ce0f494c8b89 100644 --- a/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedFutureContractRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedFutureContractRegressionAlgorithm.cs @@ -44,7 +44,7 @@ protected override Security AddSecurity() /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 85; + public override long DataPoints => 101; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedOptionRegressionAlgorithm.cs b/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedOptionRegressionAlgorithm.cs index 61765e123bd5..efee84720b72 100644 --- a/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedOptionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedOptionRegressionAlgorithm.cs @@ -83,7 +83,7 @@ protected override void AssertSecurityInitializationCount(Dictionary /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 115; + public override long DataPoints => 139; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/SecuritySessionWithChangeOfResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/SecuritySessionWithChangeOfResolutionRegressionAlgorithm.cs index c484e18df742..00773ce5fd4e 100644 --- a/Algorithm.CSharp/SecuritySessionWithChangeOfResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecuritySessionWithChangeOfResolutionRegressionAlgorithm.cs @@ -55,7 +55,7 @@ public override void OnEndOfDay(Symbol symbol) /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 3170; + public override long DataPoints => 3172; /// /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm diff --git a/Algorithm.CSharp/UniverseSelectionSymbolCacheRemovalRegressionTest.cs b/Algorithm.CSharp/UniverseSelectionSymbolCacheRemovalRegressionTest.cs index 3f218de4e2a6..aff4c7fb7d1c 100644 --- a/Algorithm.CSharp/UniverseSelectionSymbolCacheRemovalRegressionTest.cs +++ b/Algorithm.CSharp/UniverseSelectionSymbolCacheRemovalRegressionTest.cs @@ -100,7 +100,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 24288; + public long DataPoints => 24289; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/UniverseSharingSecurityDifferentSubscriptionRequestRegressionAlgorithm.cs b/Algorithm.CSharp/UniverseSharingSecurityDifferentSubscriptionRequestRegressionAlgorithm.cs index 08255b804a7a..fd243770ccfe 100644 --- a/Algorithm.CSharp/UniverseSharingSecurityDifferentSubscriptionRequestRegressionAlgorithm.cs +++ b/Algorithm.CSharp/UniverseSharingSecurityDifferentSubscriptionRequestRegressionAlgorithm.cs @@ -134,7 +134,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 7000; + public long DataPoints => 7001; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/UniverseSharingSubscriptionTradableRegressionAlgorithm.cs b/Algorithm.CSharp/UniverseSharingSubscriptionTradableRegressionAlgorithm.cs index 3c7e89deb603..510a26f91332 100644 --- a/Algorithm.CSharp/UniverseSharingSubscriptionTradableRegressionAlgorithm.cs +++ b/Algorithm.CSharp/UniverseSharingSubscriptionTradableRegressionAlgorithm.cs @@ -114,7 +114,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 228; + public long DataPoints => 229; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/WarmupDataTypesBarCountWarmupRegressionAlgorithm.cs b/Algorithm.CSharp/WarmupDataTypesBarCountWarmupRegressionAlgorithm.cs index 0cc28198afd6..2249add732c9 100644 --- a/Algorithm.CSharp/WarmupDataTypesBarCountWarmupRegressionAlgorithm.cs +++ b/Algorithm.CSharp/WarmupDataTypesBarCountWarmupRegressionAlgorithm.cs @@ -33,6 +33,6 @@ public override void Initialize() /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 5298; + public override long DataPoints => 5299; } } diff --git a/Algorithm.CSharp/WarmupDataTypesRegressionAlgorithm.cs b/Algorithm.CSharp/WarmupDataTypesRegressionAlgorithm.cs index b00eec8b0849..6bf17995a34d 100644 --- a/Algorithm.CSharp/WarmupDataTypesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/WarmupDataTypesRegressionAlgorithm.cs @@ -99,7 +99,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public virtual long DataPoints => 3763; + public virtual long DataPoints => 3764; /// /// Data Points count of the algorithm history diff --git a/Algorithm.Python/ETFConstituentUniverseCompositeDelistingRegressionAlgorithm.py b/Algorithm.Python/ETFConstituentUniverseCompositeDelistingRegressionAlgorithm.py index 43beb8cf3a61..9563b7f66d49 100644 --- a/Algorithm.Python/ETFConstituentUniverseCompositeDelistingRegressionAlgorithm.py +++ b/Algorithm.Python/ETFConstituentUniverseCompositeDelistingRegressionAlgorithm.py @@ -59,16 +59,16 @@ def on_securities_changed(self, changes): raise AssertionError("New securities added after ETF constituents were delisted") # Since we added the etf subscription it will get delisted and send us a removal event - expected_changes_count = self.universe_symbol_count + 1 + expected_changes_count = self.universe_symbol_count if self.universe_selection_done: # "_universe_symbol_count + 1" because selection is done right away, # so AddedSecurities includes all ETF constituents (including APPL) plus GDVD - self.universe_added = self.universe_added or len(changes.added_securities) == expected_changes_count + self.universe_added = self.universe_added or len(changes.added_securities) == (expected_changes_count - 1) # TODO: shouldn't be sending AAPL as a removed security since it was added by another universe self.universe_removed = self.universe_removed or ( - len(changes.removed_securities) == expected_changes_count and + len(changes.removed_securities) == (expected_changes_count + 1) and self.utc_time.date() >= self.delisting_date and self.utc_time.date() < self.end_date.date()) diff --git a/Algorithm.Python/ETFConstituentUniverseCompositeDelistingRegressionAlgorithmNoAddEquityETF.py b/Algorithm.Python/ETFConstituentUniverseCompositeDelistingRegressionAlgorithmNoAddEquityETF.py index 7d43efabcc91..84eb91912beb 100644 --- a/Algorithm.Python/ETFConstituentUniverseCompositeDelistingRegressionAlgorithmNoAddEquityETF.py +++ b/Algorithm.Python/ETFConstituentUniverseCompositeDelistingRegressionAlgorithmNoAddEquityETF.py @@ -59,7 +59,7 @@ def on_securities_changed(self, changes): raise AssertionError("New securities added after ETF constituents were delisted") if self.universe_selection_done: - self.universe_added = self.universe_added or len(changes.added_securities) == self.universe_symbol_count + self.universe_added = self.universe_added or len(changes.added_securities) == self.universe_symbol_count - 1 # TODO: shouldn't be sending AAPL as a removed security since it was added by another universe self.universe_removed = self.universe_removed or ( diff --git a/Algorithm/QCAlgorithm.Universe.cs b/Algorithm/QCAlgorithm.Universe.cs index 8dac58fd2d71..caa3b308c0a4 100644 --- a/Algorithm/QCAlgorithm.Universe.cs +++ b/Algorithm/QCAlgorithm.Universe.cs @@ -16,6 +16,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Collections.Specialized; using NodaTime; using QuantConnect.Algorithm.Selection; using QuantConnect.Data; @@ -33,7 +34,7 @@ public partial class QCAlgorithm // this removes temporal dependencies from w/in initialize method // original motivation: adding equity/options to enforce equity raw data mode private readonly object _pendingUniverseAdditionsLock = new object(); - private readonly List _pendingUserDefinedUniverseSecurityAdditions = new List(); + private readonly List _pendingUserDefinedUniverseSecurityChanges = new(); private bool _pendingUniverseAdditions; private ConcurrentSet _rawNormalizationWarningSymbols = new ConcurrentSet(); private readonly int _rawNormalizationWarningSymbolsMaxCount = 10; @@ -69,7 +70,7 @@ public void OnEndOfTimeStep() // rewrite securities w/ derivatives to be in raw mode lock (_pendingUniverseAdditionsLock) { - if (!_pendingUniverseAdditions && _pendingUserDefinedUniverseSecurityAdditions.Count == 0) + if (!_pendingUniverseAdditions && _pendingUserDefinedUniverseSecurityChanges.Count == 0) { // no point in looping through everything if there's no pending changes return; @@ -78,7 +79,7 @@ public void OnEndOfTimeStep() var requiredHistoryRequests = new Dictionary(); foreach (var security in Securities.Select(kvp => kvp.Value).Union( - _pendingUserDefinedUniverseSecurityAdditions.Select(x => x.Security))) + _pendingUserDefinedUniverseSecurityChanges.Where(x => x.IsAddition).Select(x => x.Security))) { // check for any derivative securities and mark the underlying as raw if (security.Type == SecurityType.Equity && @@ -169,11 +170,26 @@ public void OnEndOfTimeStep() } // add subscriptionDataConfig to their respective user defined universes - foreach (var userDefinedUniverseAddition in _pendingUserDefinedUniverseSecurityAdditions) + foreach (var userDefinedUniverseAddition in _pendingUserDefinedUniverseSecurityChanges) { - foreach (var subscriptionDataConfig in userDefinedUniverseAddition.SubscriptionDataConfigs) + var changedCollection = false; + var action = NotifyCollectionChangedAction.Add; + if (userDefinedUniverseAddition.IsAddition) { - userDefinedUniverseAddition.Universe.Add(subscriptionDataConfig); + foreach (var subscriptionDataConfig in userDefinedUniverseAddition.SubscriptionDataConfigs) + { + changedCollection |= userDefinedUniverseAddition.Universe.Add(subscriptionDataConfig); + } + } + else + { + action = NotifyCollectionChangedAction.Replace; + changedCollection |= userDefinedUniverseAddition.Universe.Remove(userDefinedUniverseAddition.Security); + } + + if (changedCollection) + { + UniverseManager.Update(userDefinedUniverseAddition.Universe.Symbol, userDefinedUniverseAddition.Universe, action); } } @@ -183,7 +199,7 @@ public void OnEndOfTimeStep() UniverseManager.ProcessChanges(); _pendingUniverseAdditions = false; - _pendingUserDefinedUniverseSecurityAdditions.Clear(); + _pendingUserDefinedUniverseSecurityChanges.Clear(); } if (!_rawNormalizationWarningSymbols.IsNullOrEmpty()) @@ -645,8 +661,7 @@ private Security AddToUserDefinedUniverse( { lock (_pendingUniverseAdditionsLock) { - _pendingUserDefinedUniverseSecurityAdditions.Add( - new UserDefinedUniverseAddition(userDefinedUniverse, configurations, security)); + _pendingUserDefinedUniverseSecurityChanges.Add(new UserDefinedUniverseUpdate(userDefinedUniverse, configurations, security)); } } else @@ -743,13 +758,14 @@ private Universe AddUniverseSymbolSelector(Type dataType, string name = null, Re /// Helper class used to store additions. /// They will be consumed at /// - private class UserDefinedUniverseAddition + private class UserDefinedUniverseUpdate { + public bool IsAddition => SubscriptionDataConfigs != null; public Security Security { get; } public UserDefinedUniverse Universe { get; } public List SubscriptionDataConfigs { get; } - public UserDefinedUniverseAddition( + public UserDefinedUniverseUpdate( UserDefinedUniverse universe, List subscriptionDataConfigs, Security security) diff --git a/Algorithm/QCAlgorithm.cs b/Algorithm/QCAlgorithm.cs index 6d7aafd186b7..7b8b429d0688 100644 --- a/Algorithm/QCAlgorithm.cs +++ b/Algorithm/QCAlgorithm.cs @@ -2467,9 +2467,9 @@ public Option AddOptionContract(Symbol symbol, Resolution? resolution = null, bo var optionUniverse = universe as OptionContractUniverse; if (optionUniverse != null) { - foreach (var subscriptionDataConfig in configs.Concat(underlyingConfigs)) + lock (_pendingUniverseAdditionsLock) { - optionUniverse.Add(subscriptionDataConfig); + _pendingUserDefinedUniverseSecurityChanges.Add(new UserDefinedUniverseUpdate(optionUniverse, [.. configs, .. underlyingConfigs], option)); } } @@ -2632,14 +2632,15 @@ public bool RemoveSecurity(Symbol symbol, string tag = null) { lock (_pendingUniverseAdditionsLock) { + // for existing universes we need to purge pending additions too, also handled at OnEndOfTimeStep() + _pendingUserDefinedUniverseSecurityChanges.RemoveAll(addition => addition.Security.Symbol == symbol); + // we need to handle existing universes and pending to be added universes, that will be pushed // at the end of this time step see OnEndOfTimeStep() - foreach (var universe in UniverseManager.Select(x => x.Value).OfType()) + foreach (var universe in UniverseManager.Where(x => x.Value.ContainsMember(security)).Select(x => x.Value).OfType()) { - universe.Remove(symbol); + _pendingUserDefinedUniverseSecurityChanges.Add(new UserDefinedUniverseUpdate(universe, null, security)); } - // for existing universes we need to purge pending additions too, also handled at OnEndOfTimeStep() - _pendingUserDefinedUniverseSecurityAdditions.RemoveAll(addition => addition.Security.Symbol == symbol); } } return true; diff --git a/Brokerages/Backtesting/BacktestingBrokerage.cs b/Brokerages/Backtesting/BacktestingBrokerage.cs index 8e6c6064e840..8f6b2e1068d8 100644 --- a/Brokerages/Backtesting/BacktestingBrokerage.cs +++ b/Brokerages/Backtesting/BacktestingBrokerage.cs @@ -27,6 +27,7 @@ using QuantConnect.Securities; using QuantConnect.Securities.Option; using QuantConnect.Util; +using System.Collections.Specialized; namespace QuantConnect.Brokerages.Backtesting { @@ -553,10 +554,12 @@ public void ProcessDelistings(Delistings delistings) var universe = ukvp.Value; if (universe.ContainsMember(security.Symbol)) { - var userUniverse = universe as UserDefinedUniverse; - if (userUniverse != null) + if (universe is UserDefinedUniverse userUniverse) { - userUniverse.Remove(security.Symbol); + if (userUniverse.Remove(security.Symbol)) + { + Algorithm.UniverseManager.Update(userUniverse.Symbol, userUniverse, NotifyCollectionChangedAction.Replace); + } } else { @@ -564,6 +567,7 @@ public void ProcessDelistings(Delistings delistings) } } } + Algorithm.UniverseManager.ProcessChanges(); if (!Algorithm.IsWarmingUp) { diff --git a/Common/Data/SubscriptionDataConfigExtensions.cs b/Common/Data/SubscriptionDataConfigExtensions.cs index d87c83a5ca02..2a47c5788f50 100644 --- a/Common/Data/SubscriptionDataConfigExtensions.cs +++ b/Common/Data/SubscriptionDataConfigExtensions.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -160,6 +160,14 @@ public static bool EmitSplitsAndDividends(this SubscriptionDataConfig config) return !config.IsCustomData && !config.Symbol.Value.Contains("UNIVERSE") && config.SecurityType == SecurityType.Equity; } + /// + /// True if this configuration is associated with an asset which can have delisting events + /// + public static bool CanBeDelisted(this SubscriptionDataConfig config) + { + return config.SecurityType.IsOption() || config.SecurityType == SecurityType.Future || config.SecurityType == SecurityType.Equity; + } + /// /// Initializes a new instance of the type defined in with the symbol properly set /// diff --git a/Common/Securities/UniverseManager.cs b/Common/Securities/UniverseManager.cs index 774f57a12bea..477154bdc4d4 100644 --- a/Common/Securities/UniverseManager.cs +++ b/Common/Securities/UniverseManager.cs @@ -27,15 +27,15 @@ namespace QuantConnect.Securities /// /// Manages the algorithm's collection of universes /// - public class UniverseManager : IDictionary, INotifyCollectionChanged + public class UniverseManager : IDictionary { - private readonly Queue _pendingChanges = new(); + private readonly Queue _pendingChanges = new(); private readonly ConcurrentDictionary _universes; /// /// Event fired when a universe is added or removed /// - public event NotifyCollectionChangedEventHandler CollectionChanged; + public event EventHandler CollectionChanged; /// /// Read-only dictionary containing all active securities. An active security is @@ -173,9 +173,28 @@ public void Add(Symbol key, Universe value) { if (_universes.TryAdd(key, value)) { - lock(_pendingChanges) + lock (_pendingChanges) + { + _pendingChanges.Enqueue(new UniverseManagerChanged(NotifyCollectionChangedAction.Add, value)); + } + } + } + + /// + /// Updates an element with the provided key and value to the . + /// + /// The object to use as the key of the element to add. + /// The object to use as the value of the element to add. + /// is null. + /// An element with the same key already exists in the . + /// The is read-only. + public void Update(Symbol key, Universe value, NotifyCollectionChangedAction action) + { + if (_universes.ContainsKey(key) && !_pendingChanges.Any(x => x.Value == value)) + { + lock (_pendingChanges) { - _pendingChanges.Enqueue(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, value)); + _pendingChanges.Enqueue(new UniverseManagerChanged(action, value)); } } } @@ -185,7 +204,7 @@ public void Add(Symbol key, Universe value) /// public void ProcessChanges() { - NotifyCollectionChangedEventArgs universeChange; + UniverseManagerChanged universeChange; do { lock (_pendingChanges) @@ -214,7 +233,7 @@ public bool Remove(Symbol key) if (_universes.TryRemove(key, out universe)) { universe.Dispose(); - OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, universe)); + OnCollectionChanged(new UniverseManagerChanged(NotifyCollectionChangedAction.Remove, universe)); return true; } return false; @@ -287,7 +306,7 @@ public Universe this[Symbol symbol] /// Event invocator for the event /// /// - protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e) + protected virtual void OnCollectionChanged(UniverseManagerChanged e) { CollectionChanged?.Invoke(this, e); } diff --git a/Common/Securities/UniverseManagerChanged.cs b/Common/Securities/UniverseManagerChanged.cs new file mode 100644 index 000000000000..c8ae21a8aad2 --- /dev/null +++ b/Common/Securities/UniverseManagerChanged.cs @@ -0,0 +1,45 @@ +/* + * 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.Collections.Specialized; +using QuantConnect.Data.UniverseSelection; + +namespace QuantConnect.Securities +{ + /// + /// Event dto class fired when a universe reports a change + /// + public class UniverseManagerChanged + { + /// + /// The action that occurred + /// + public NotifyCollectionChangedAction Action { get; } + + /// + /// Universe reporting a change + /// + public Universe Value { get; } + + /// + /// Creates a new instance + /// + public UniverseManagerChanged(NotifyCollectionChangedAction action, Universe value) + { + Action = action; + Value = value; + } + } +} diff --git a/Common/SecurityIdentifier.cs b/Common/SecurityIdentifier.cs index 5cd1ea6989b3..d6e7706b54aa 100644 --- a/Common/SecurityIdentifier.cs +++ b/Common/SecurityIdentifier.cs @@ -25,7 +25,6 @@ using QuantConnect.Logging; using QuantConnect.Securities.Future; using QuantConnect.Util; -using static QuantConnect.Messages; namespace QuantConnect { @@ -336,7 +335,7 @@ public SecurityIdentifier(string symbol, ulong properties) { throw new ArgumentException(Messages.SecurityIdentifier.PropertiesDoNotMatchAnySecurityType, nameof(properties)); } - _hashCode = unchecked (symbol.GetHashCode() * 397) ^ properties.GetHashCode(); + _hashCode = Math.Abs(unchecked (symbol.GetHashCode() * 397) ^ properties.GetHashCode()); _hashCodeSet = true; } @@ -1054,7 +1053,7 @@ public override int GetHashCode() { if (!_hashCodeSet) { - _hashCode = unchecked(_symbol.GetHashCode() * 397) ^ _properties.GetHashCode(); + _hashCode = Math.Abs(unchecked(_symbol.GetHashCode() * 397) ^ _properties.GetHashCode()); _hashCodeSet = true; } return _hashCode; diff --git a/Engine/DataFeeds/DataManager.cs b/Engine/DataFeeds/DataManager.cs index a1c1e5ca033e..b57580ab31f1 100644 --- a/Engine/DataFeeds/DataManager.cs +++ b/Engine/DataFeeds/DataManager.cs @@ -82,101 +82,104 @@ public DataManager( // wire ourselves up to receive notifications when universes are added/removed algorithm.UniverseManager.CollectionChanged += (sender, args) => { + var universe = args.Value; switch (args.Action) { + case NotifyCollectionChangedAction.Replace: case NotifyCollectionChangedAction.Add: - foreach (var universe in args.NewItems.OfType()) + var config = universe.Configuration; + var start = algorithm.UtcTime; + if (algorithm.GetLocked() && args.Action == NotifyCollectionChangedAction.Add && universe is UserDefinedUniverse) { - var config = universe.Configuration; - var start = algorithm.UtcTime; + // If it is an add, after initialize, we will set time 1 tick ahead to properly sync data + // with next timeslice, avoid emitting now twice, if it is a remove then we will set time to now + // we do the same in the 'DataManager' when handling FF resolution changes + start = start.AddTicks(1); + } - var end = algorithm.LiveMode ? Time.EndOfTime - : algorithm.EndDate.ConvertToUtc(algorithm.TimeZone); + var end = algorithm.LiveMode ? Time.EndOfTime + : algorithm.EndDate.ConvertToUtc(algorithm.TimeZone); - Security security; - if (!algorithm.Securities.TryGetValue(config.Symbol, out security)) - { - // create a canonical security object if it doesn't exist - security = new Security( - _marketHoursDatabase.GetExchangeHours(config), - config, - algorithm.Portfolio.CashBook[algorithm.AccountCurrency], - SymbolProperties.GetDefault(algorithm.AccountCurrency), - algorithm.Portfolio.CashBook, - RegisteredSecurityDataTypesProvider.Null, - new SecurityCache() - ); - } + Security security; + if (!algorithm.Securities.TryGetValue(config.Symbol, out security)) + { + // create a canonical security object if it doesn't exist + security = new Security( + _marketHoursDatabase.GetExchangeHours(config), + config, + algorithm.Portfolio.CashBook[algorithm.AccountCurrency], + SymbolProperties.GetDefault(algorithm.AccountCurrency), + algorithm.Portfolio.CashBook, + RegisteredSecurityDataTypesProvider.Null, + new SecurityCache() + ); + } - // Let's adjust the start time to the previous tradable date - // so universe selection always happens right away at the start of the algorithm. - var universeType = universe.GetType(); - if ( - // We exclude the UserDefinedUniverse because their selection already happens at the algorithm start time. - // For instance, ETFs universe selection depends its first trigger time to be before the equity universe - // (the UserDefinedUniverse), because the ETFs are EndTime-indexed and that would make their first selection - // time to be before the algorithm start time, with the EndTime being the algorithms's start date, - // and both the Equity and the ETFs constituents first selection to happen together. - !universeType.IsAssignableTo(typeof(UserDefinedUniverse)) && - // We exclude the ScheduledUniverse because it's already scheduled to run at a specific time. - // Adjusting the start time would cause the first selection trigger time to be before the algorithm start time, - // making the selection to be triggered at the first algorithm time, which would be the exact StartDate. - universeType != typeof(ScheduledUniverse)) + // Let's adjust the start time to the previous tradable date + // so universe selection always happens right away at the start of the algorithm. + var universeType = universe.GetType(); + if ( + // We exclude the UserDefinedUniverse because their selection already happens at the algorithm start time. + // For instance, ETFs universe selection depends its first trigger time to be before the equity universe + // (the UserDefinedUniverse), because the ETFs are EndTime-indexed and that would make their first selection + // time to be before the algorithm start time, with the EndTime being the algorithms's start date, + // and both the Equity and the ETFs constituents first selection to happen together. + !universeType.IsAssignableTo(typeof(UserDefinedUniverse)) && + // We exclude the ScheduledUniverse because it's already scheduled to run at a specific time. + // Adjusting the start time would cause the first selection trigger time to be before the algorithm start time, + // making the selection to be triggered at the first algorithm time, which would be the exact StartDate. + universeType != typeof(ScheduledUniverse)) + { + const int maximumLookback = 60; + var loopCount = 0; + var startLocalTime = start.ConvertFromUtc(security.Exchange.TimeZone); + if (universe.UniverseSettings.Schedule.Initialized) { - const int maximumLookback = 60; - var loopCount = 0; - var startLocalTime = start.ConvertFromUtc(security.Exchange.TimeZone); - if (universe.UniverseSettings.Schedule.Initialized) + do { - do + // determine if there's a scheduled selection time at the current start local time date, note that next + // we get the previous day of the first scheduled date we find, so we are sure the data is available to trigger selection + if (universe.UniverseSettings.Schedule.Get(startLocalTime.Date, startLocalTime.Date).Any()) { - // determine if there's a scheduled selection time at the current start local time date, note that next - // we get the previous day of the first scheduled date we find, so we are sure the data is available to trigger selection - if (universe.UniverseSettings.Schedule.Get(startLocalTime.Date, startLocalTime.Date).Any()) - { - break; - } - startLocalTime = startLocalTime.AddDays(-1); - if (++loopCount >= maximumLookback) + break; + } + startLocalTime = startLocalTime.AddDays(-1); + if (++loopCount >= maximumLookback) + { + // fallback to the original, we found none + startLocalTime = algorithm.UtcTime.ConvertFromUtc(security.Exchange.TimeZone); + if (!_sentUniverseScheduleWarning) { - // fallback to the original, we found none - startLocalTime = algorithm.UtcTime.ConvertFromUtc(security.Exchange.TimeZone); - if (!_sentUniverseScheduleWarning) - { - // just in case - _sentUniverseScheduleWarning = true; - algorithm.Debug($"Warning: Found no valid start time for scheduled universe, will use default"); - } + // just in case + _sentUniverseScheduleWarning = true; + algorithm.Debug($"Warning: Found no valid start time for scheduled universe, will use default"); } - } while (loopCount < maximumLookback); - } - - startLocalTime = Time.GetStartTimeForTradeBars(security.Exchange.Hours, startLocalTime, - // disable universe selection on extended market hours, for example futures/index options have a sunday pre market we are not interested on - Time.OneDay, 1, extendedMarketHours: false, config.DataTimeZone, - LeanData.UseDailyStrictEndTimes(algorithm.Settings, config.Type, security.Symbol, Time.OneDay, security.Exchange.Hours)); - start = startLocalTime.ConvertToUtc(security.Exchange.TimeZone); + } + } while (loopCount < maximumLookback); } - AddSubscription( - new SubscriptionRequest(true, - universe, - security, - config, - start, - end)); + startLocalTime = Time.GetStartTimeForTradeBars(security.Exchange.Hours, startLocalTime, + // disable universe selection on extended market hours, for example futures/index options have a sunday pre market we are not interested on + Time.OneDay, 1, extendedMarketHours: false, config.DataTimeZone, + LeanData.UseDailyStrictEndTimes(algorithm.Settings, config.Type, security.Symbol, Time.OneDay, security.Exchange.Hours)); + start = startLocalTime.ConvertToUtc(security.Exchange.TimeZone); } + + AddSubscription( + new SubscriptionRequest(true, + universe, + security, + config, + start, + end)); break; case NotifyCollectionChangedAction.Remove: - foreach (var universe in args.OldItems.OfType()) + // removing the subscription will be handled by the SubscriptionSynchronizer + // in the next loop as well as executing a UniverseSelection one last time. + if (!universe.DisposeRequested) { - // removing the subscription will be handled by the SubscriptionSynchronizer - // in the next loop as well as executing a UniverseSelection one last time. - if (!universe.DisposeRequested) - { - universe.Dispose(); - } + universe.Dispose(); } break; @@ -196,7 +199,7 @@ public DataManager( .SelectMany(subscription => subscription.SubscriptionRequests) .ToList(); - if(requests.Count > 0) + if (requests.Count > 0) { Log.Trace($"DataManager(): Fill forward resolution has changed from {changedEvent.Old} to {changedEvent.New} at utc: {algorithm.UtcTime}. " + $"Restarting {requests.Count} subscriptions..."); @@ -274,7 +277,7 @@ public bool AddSubscription(SubscriptionRequest request) { // guarantee the configuration is present in our config collection // this is related to GH issue 3877: where we added a configuration which we also removed - if(_subscriptionManagerSubscriptions.TryAdd(request.Configuration, request.Configuration)) + if (_subscriptionManagerSubscriptions.TryAdd(request.Configuration, request.Configuration)) { _subscriptionDataConfigsEnumerator = null; } @@ -283,10 +286,14 @@ public bool AddSubscription(SubscriptionRequest request) Subscription subscription; if (DataFeedSubscriptions.TryGetValue(request.Configuration, out subscription)) { - // duplicate subscription request - subscription.AddSubscriptionRequest(request); - // only result true if the existing subscription is internal, we actually added something from the users perspective - return subscription.Configuration.IsInternalFeed; + if (!subscription.EndOfStream) + { + // duplicate subscription request + subscription.AddSubscriptionRequest(request); + // only result true if the existing subscription is internal, we actually added something from the users perspective + return subscription.Configuration.IsInternalFeed; + } + DataFeedSubscriptions.TryRemove(request.Configuration, out _); } if (request.Configuration.DataNormalizationMode == DataNormalizationMode.ScaledRaw) @@ -313,7 +320,7 @@ public bool AddSubscription(SubscriptionRequest request) Log.Trace($"DataManager.AddSubscription(): Added {request.Configuration}." + $" Start: {request.StartTimeUtc}. End: {request.EndTimeUtc}"); } - else if(Log.DebuggingEnabled) + else if (Log.DebuggingEnabled) { // for performance lets not create the message string if debugging is not enabled // this can be executed many times and its in the algorithm thread @@ -380,7 +387,7 @@ private bool RemoveSubscriptionInternal(SubscriptionDataConfig configuration, Un { Log.Trace($"DataManager.RemoveSubscription(): Removed {configuration}"); } - else if(Log.DebuggingEnabled) + else if (Log.DebuggingEnabled) { // for performance lets not create the message string if debugging is not enabled // this can be executed many times and its in the algorithm thread @@ -437,7 +444,7 @@ public IEnumerable SubscriptionManagerSubscriptions { lock (_subscriptionManagerSubscriptions) { - if(_subscriptionDataConfigsEnumerator == null) + if (_subscriptionDataConfigsEnumerator == null) { _subscriptionDataConfigsEnumerator = _subscriptionManagerSubscriptions.Values.ToList(); } @@ -539,7 +546,7 @@ public SubscriptionDataConfig Add( ) { return Add(symbol, resolution, fillForward, extendedMarketHours, isFilteredSubscription, isInternalFeed, isCustomData, - new List> { new Tuple(dataType, LeanData.GetCommonTickTypeForCommonDataTypes(dataType, symbol.SecurityType))}, + new List> { new Tuple(dataType, LeanData.GetCommonTickTypeForCommonDataTypes(dataType, symbol.SecurityType)) }, dataNormalizationMode, dataMappingMode, contractDepthOffset) .First(); } diff --git a/Engine/DataFeeds/Enumerators/Factories/CorporateEventEnumeratorFactory.cs b/Engine/DataFeeds/Enumerators/Factories/CorporateEventEnumeratorFactory.cs index 3cd5d9fd5e98..0f1aea1cc03f 100644 --- a/Engine/DataFeeds/Enumerators/Factories/CorporateEventEnumeratorFactory.cs +++ b/Engine/DataFeeds/Enumerators/Factories/CorporateEventEnumeratorFactory.cs @@ -70,7 +70,10 @@ public static IEnumerator CreateEnumerators( tradableEventProviders.Add(new MappingEventProvider()); } - tradableEventProviders.Add(new DelistingEventProvider()); + if (config.CanBeDelisted()) + { + tradableEventProviders.Add(new DelistingEventProvider()); + } var enumerator = new AuxiliaryDataEnumerator( config, diff --git a/Engine/DataFeeds/Enumerators/Factories/TimeTriggeredUniverseSubscriptionEnumeratorFactory.cs b/Engine/DataFeeds/Enumerators/Factories/TimeTriggeredUniverseSubscriptionEnumeratorFactory.cs index fe6f05d6571b..a3330ff6d5c7 100644 --- a/Engine/DataFeeds/Enumerators/Factories/TimeTriggeredUniverseSubscriptionEnumeratorFactory.cs +++ b/Engine/DataFeeds/Enumerators/Factories/TimeTriggeredUniverseSubscriptionEnumeratorFactory.cs @@ -14,10 +14,7 @@ * */ -using System; -using System.Collections; using System.Collections.Generic; -using System.Collections.Specialized; using System.Linq; using QuantConnect.Data; using QuantConnect.Data.Market; @@ -34,7 +31,6 @@ namespace QuantConnect.Lean.Engine.DataFeeds.Enumerators.Factories /// public class TimeTriggeredUniverseSubscriptionEnumeratorFactory : ISubscriptionEnumeratorFactory { - private readonly ITimeProvider _timeProvider; private readonly ITimeTriggeredUniverse _universe; private readonly MarketHoursDatabase _marketHoursDatabase; @@ -43,11 +39,9 @@ public class TimeTriggeredUniverseSubscriptionEnumeratorFactory : ISubscriptionE /// /// The user defined universe /// The market hours database - /// The time provider - public TimeTriggeredUniverseSubscriptionEnumeratorFactory(ITimeTriggeredUniverse universe, MarketHoursDatabase marketHoursDatabase, ITimeProvider timeProvider) + public TimeTriggeredUniverseSubscriptionEnumeratorFactory(ITimeTriggeredUniverse universe, MarketHoursDatabase marketHoursDatabase) { _universe = universe; - _timeProvider = timeProvider; _marketHoursDatabase = marketHoursDatabase; } @@ -59,105 +53,9 @@ public TimeTriggeredUniverseSubscriptionEnumeratorFactory(ITimeTriggeredUniverse /// An enumerator reading the subscription request public IEnumerator CreateEnumerator(SubscriptionRequest request, IDataProvider dataProvider) { - var enumerator = (IEnumerator) _universe.GetTriggerTimes(request.StartTimeUtc, request.EndTimeUtc, _marketHoursDatabase) + return _universe.GetTriggerTimes(request.StartTimeUtc, request.EndTimeUtc, _marketHoursDatabase) .Select(x => new Tick { Time = x, Symbol = request.Configuration.Symbol }) .GetEnumerator(); - - var universe = request.Universe as UserDefinedUniverse; - if (universe != null) - { - enumerator = new InjectionEnumerator(enumerator); - - // Trigger universe selection when security added/removed after Initialize - universe.CollectionChanged += (sender, args) => - { - // If it is an add we will set time 1 tick ahead to properly sync data - // with next timeslice, avoid emitting now twice, if it is a remove then we will set time to now - // we do the same in the 'DataManager' when handling FF resolution changes - IList items; - DateTime time; - if (args.Action == NotifyCollectionChangedAction.Add) - { - items = args.NewItems; - time = _timeProvider.GetUtcNow().AddTicks(1); - } - else if (args.Action == NotifyCollectionChangedAction.Remove) - { - items = args.OldItems; - time = _timeProvider.GetUtcNow(); - } - else - { - items = null; - time = DateTime.MinValue; - } - - // Check that we have our items and time - if (items == null || time == DateTime.MinValue) return; - - var symbol = items.OfType().FirstOrDefault(); - - if(symbol == null) return; - - // the data point time should always be in exchange timezone - time = time.ConvertFromUtc(request.Configuration.ExchangeTimeZone); - - var collection = new BaseDataCollection(time, symbol); - ((InjectionEnumerator) enumerator).InjectDataPoint(collection); - }; - } - - return enumerator; - } - - private class InjectionEnumerator : IEnumerator - { - private volatile bool _wasInjected; - private readonly IEnumerator _underlyingEnumerator; - - public BaseData Current { get; private set; } - - object IEnumerator.Current => Current; - - public InjectionEnumerator(IEnumerator underlyingEnumerator) - { - _underlyingEnumerator = underlyingEnumerator; - } - - public void InjectDataPoint(BaseData baseData) - { - // we use a lock because the main algorithm thread is the one injecting and the base exchange is the thread pulling MoveNext() - lock (_underlyingEnumerator) - { - _wasInjected = true; - Current = baseData; - } - } - - public void Dispose() - { - _underlyingEnumerator.Dispose(); - } - - public bool MoveNext() - { - lock (_underlyingEnumerator) - { - if (_wasInjected) - { - _wasInjected = false; - return true; - } - _underlyingEnumerator.MoveNext(); - Current = _underlyingEnumerator.Current; - return true; - } - } - - public void Reset() - { - _underlyingEnumerator.Reset(); - } } } } diff --git a/Engine/DataFeeds/FileSystemDataFeed.cs b/Engine/DataFeeds/FileSystemDataFeed.cs index 5d179db39dbc..185f76375559 100644 --- a/Engine/DataFeeds/FileSystemDataFeed.cs +++ b/Engine/DataFeeds/FileSystemDataFeed.cs @@ -162,12 +162,6 @@ public virtual Subscription CreateSubscription(SubscriptionRequest request) enumerator = AddScheduleWrapper(request, enumerator, null); - if (request.IsUniverseSubscription && request.Universe is UserDefinedUniverse) - { - // for user defined universe we do not use a worker task, since calls to AddData can happen in any moment - // and we have to be able to inject selection data points into the enumerator - return SubscriptionUtils.Create(request, enumerator, _algorithm.Settings.DailyPreciseEndTime); - } return SubscriptionUtils.CreateAndScheduleWorker(request, enumerator, _factorFileProvider, true, _algorithm.Settings.DailyPreciseEndTime); } @@ -187,9 +181,7 @@ protected IEnumerator CreateUniverseEnumerator(SubscriptionRequest req ISubscriptionEnumeratorFactory factory = _subscriptionFactory; if (request.Universe is ITimeTriggeredUniverse) { - factory = new TimeTriggeredUniverseSubscriptionEnumeratorFactory(request.Universe as ITimeTriggeredUniverse, - _marketHoursDatabase, - _timeProvider); + factory = new TimeTriggeredUniverseSubscriptionEnumeratorFactory(request.Universe as ITimeTriggeredUniverse, _marketHoursDatabase); } else if (request.Configuration.Type == typeof(FundamentalUniverse)) { diff --git a/Engine/DataFeeds/LiveTradingDataFeed.cs b/Engine/DataFeeds/LiveTradingDataFeed.cs index df4991c9c147..4a4c829f3405 100644 --- a/Engine/DataFeeds/LiveTradingDataFeed.cs +++ b/Engine/DataFeeds/LiveTradingDataFeed.cs @@ -328,21 +328,21 @@ private Subscription CreateUniverseSubscription(SubscriptionRequest request) var tzOffsetProvider = new TimeZoneOffsetProvider(request.Configuration.ExchangeTimeZone, request.StartTimeUtc, request.EndTimeUtc); IEnumerator enumerator = null; - - var timeTriggered = request.Universe as ITimeTriggeredUniverse; - if (timeTriggered != null) + if (request.Universe is ITimeTriggeredUniverse timeTriggered) { Log.Trace($"LiveTradingDataFeed.CreateUniverseSubscription(): Creating user defined universe: {config.Symbol.ID}"); // spoof a tick on the requested interval to trigger the universe selection function - var enumeratorFactory = new TimeTriggeredUniverseSubscriptionEnumeratorFactory(timeTriggered, MarketHoursDatabase.FromDataFolder(), _frontierTimeProvider); + var enumeratorFactory = new TimeTriggeredUniverseSubscriptionEnumeratorFactory(timeTriggered, MarketHoursDatabase.FromDataFolder()); enumerator = enumeratorFactory.CreateEnumerator(request, _dataProvider); enumerator = new FrontierAwareEnumerator(enumerator, _timeProvider, tzOffsetProvider); - - var enqueueable = new EnqueueableEnumerator(); - _customExchange.AddEnumerator(new EnumeratorHandler(config.Symbol, enumerator, enqueueable)); - enumerator = enqueueable; + if (request.Universe is not UserDefinedUniverse) + { + var enqueueable = new EnqueueableEnumerator(); + _customExchange.AddEnumerator(new EnumeratorHandler(config.Symbol, enumerator, enqueueable)); + enumerator = enqueueable; + } } else if (config.Type.IsAssignableTo(typeof(ETFConstituentUniverse)) || config.Type.IsAssignableTo(typeof(FundamentalUniverse)) || diff --git a/Engine/DataFeeds/Subscription.cs b/Engine/DataFeeds/Subscription.cs index 1a9ca6809111..3022fca327dd 100644 --- a/Engine/DataFeeds/Subscription.cs +++ b/Engine/DataFeeds/Subscription.cs @@ -134,6 +134,11 @@ public bool AddSubscriptionRequest(SubscriptionRequest subscriptionRequest) if (IsUniverseSelectionSubscription || subscriptionRequest.IsUniverseSubscription) { + if (subscriptionRequest.Universe is UserDefinedUniverse) + { + // for different reasons a user defined universe can trigger a subscription request, likes additions/removals + return false; + } throw new Exception("Subscription.AddSubscriptionRequest(): Universe selection" + " subscriptions should not have more than 1 SubscriptionRequest"); } diff --git a/Engine/DataFeeds/SubscriptionFrontierTimeProvider.cs b/Engine/DataFeeds/SubscriptionFrontierTimeProvider.cs index 6607bf6700f8..24a9f88782c0 100644 --- a/Engine/DataFeeds/SubscriptionFrontierTimeProvider.cs +++ b/Engine/DataFeeds/SubscriptionFrontierTimeProvider.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -70,8 +70,7 @@ private void UpdateCurrentTime() // will add new universe selection data points when is has too // so lets move it next to check if there is any subscription.Current == null - && subscription.IsUniverseSelectionSubscription - && subscription.UtcStartTime != _utcNow) + && subscription.IsUniverseSelectionSubscription) { subscription.MoveNext(); } diff --git a/Engine/DataFeeds/SubscriptionUtils.cs b/Engine/DataFeeds/SubscriptionUtils.cs index c44afdc67335..db3007565e67 100644 --- a/Engine/DataFeeds/SubscriptionUtils.cs +++ b/Engine/DataFeeds/SubscriptionUtils.cs @@ -82,7 +82,7 @@ public static Subscription CreateAndScheduleWorker( } var exchangeHours = request.Security.Exchange.Hours; var enqueueable = new EnqueueableEnumerator(true); - var timeZoneOffsetProvider = new TimeZoneOffsetProvider(request.Configuration.ExchangeTimeZone, request.StartTimeUtc, request.EndTimeUtc); + var timeZoneOffsetProvider = new TimeZoneOffsetProvider(request.ExchangeHours.TimeZone, request.StartTimeUtc, request.EndTimeUtc); var subscription = new Subscription(request, enqueueable, timeZoneOffsetProvider); var config = subscription.Configuration; enablePriceScale = enablePriceScale && config.PricesShouldBeScaled(); diff --git a/Tests/Common/Securities/UniverseManagerTests.cs b/Tests/Common/Securities/UniverseManagerTests.cs index 741c16586ba9..b10bc3b71c38 100644 --- a/Tests/Common/Securities/UniverseManagerTests.cs +++ b/Tests/Common/Securities/UniverseManagerTests.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -38,7 +38,7 @@ public void NotifiesWhenSecurityAdded() manager.CollectionChanged += (sender, args) => { - if (args.NewItems.OfType().Single() != universe) + if (args.Value != universe) { Assert.Fail("Expected args.NewItems to have exactly one element equal to universe"); } @@ -63,7 +63,7 @@ public void NotifiesWhenSecurityAddedViaIndexer() manager.CollectionChanged += (sender, args) => { - if (args.NewItems.OfType().Single() != universe) + if (args.Value != universe) { Assert.Fail("Expected args.NewItems to have exactly one element equal to universe"); } @@ -89,7 +89,7 @@ public void NotifiesWhenSecurityRemoved() manager.Add(universe.Configuration.Symbol, universe); manager.CollectionChanged += (sender, args) => { - if (args.OldItems.OfType().Single() != universe) + if (args.Value != universe) { Assert.Fail("Expected args.OldItems to have exactly one element equal to universe"); } diff --git a/Tests/Engine/CustomBrokerageMessageHandlerTests.cs b/Tests/Engine/CustomBrokerageMessageHandlerTests.cs index 299a0f4f0520..1fe95b8f0898 100644 --- a/Tests/Engine/CustomBrokerageMessageHandlerTests.cs +++ b/Tests/Engine/CustomBrokerageMessageHandlerTests.cs @@ -71,27 +71,27 @@ public void RunPartialCustomBrokerageMessageHandlerRegressionAlgorithm([Values(L {PerformanceMetrics.TotalOrders, expectedOrdersCount.ToStringInvariant()}, {"Average Win", "0%"}, {"Average Loss", "0%"}, - {"Compounding Annual Return", "-10.771%"}, + {"Compounding Annual Return", "-11.597%"}, {"Drawdown", "0.200%"}, {"Expectancy", "0"}, - {"Net Profit", "-0.146%"}, - {"Sharpe Ratio", "-5.186"}, - {"Sortino Ratio", "-6.53"}, + {"Net Profit", "-0.157%"}, + {"Sharpe Ratio", "-5.199"}, + {"Sortino Ratio", "-6.546"}, {"Probabilistic Sharpe Ratio", "24.692%"}, {"Loss Rate", "0%"}, {"Win Rate", "0%"}, {"Profit-Loss Ratio", "0"}, - {"Alpha", "0.059"}, - {"Beta", "-0.072"}, + {"Alpha", "0.058"}, + {"Beta", "-0.07"}, {"Annual Standard Deviation", "0.016"}, {"Annual Variance", "0"}, - {"Information Ratio", "-8.629"}, - {"Tracking Error", "0.239"}, - {"Treynor Ratio", "1.154"}, - {"Total Fees", "$50.00"}, - {"Estimated Strategy Capacity", "$17000000.00"}, + {"Information Ratio", "-8.635"}, + {"Tracking Error", "0.238"}, + {"Treynor Ratio", "1.157"}, + {"Total Fees", "$49.00"}, + {"Estimated Strategy Capacity", "$26000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, - {"Portfolio Turnover", "1.45%"} + {"Portfolio Turnover", "1.42%"} }, language, AlgorithmStatus.Completed); @@ -114,27 +114,27 @@ public void RunCustomBrokerageMessageHandlerRegressionAlgorithm([Values(Language {PerformanceMetrics.TotalOrders, expectedOrdersCount.ToStringInvariant()}, {"Average Win", "0%"}, {"Average Loss", "0%"}, - {"Compounding Annual Return", "-10.771%"}, + {"Compounding Annual Return", "-11.597%"}, {"Drawdown", "0.200%"}, {"Expectancy", "0"}, - {"Net Profit", "-0.146%"}, - {"Sharpe Ratio", "-5.186"}, - {"Sortino Ratio", "-6.53"}, + {"Net Profit", "-0.157%"}, + {"Sharpe Ratio", "-5.199"}, + {"Sortino Ratio", "-6.546"}, {"Probabilistic Sharpe Ratio", "24.692%"}, {"Loss Rate", "0%"}, {"Win Rate", "0%"}, {"Profit-Loss Ratio", "0"}, - {"Alpha", "0.059"}, - {"Beta", "-0.072"}, + {"Alpha", "0.058"}, + {"Beta", "-0.07"}, {"Annual Standard Deviation", "0.016"}, {"Annual Variance", "0"}, - {"Information Ratio", "-8.629"}, - {"Tracking Error", "0.239"}, - {"Treynor Ratio", "1.154"}, - {"Total Fees", "$50.00"}, - {"Estimated Strategy Capacity", "$17000000.00"}, + {"Information Ratio", "-8.635"}, + {"Tracking Error", "0.238"}, + {"Treynor Ratio", "1.157"}, + {"Total Fees", "$49.00"}, + {"Estimated Strategy Capacity", "$26000000.00"}, {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, - {"Portfolio Turnover", "1.45%"} + {"Portfolio Turnover", "1.42%"} }, language, AlgorithmStatus.Completed); diff --git a/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs b/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs index e11fb470d5fd..1ac29b27d065 100644 --- a/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs +++ b/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs @@ -1134,7 +1134,7 @@ public void WarmupExpiredOption(bool useWarmupResolution) } }, endDate: endDate, - secondsTimeStep: 60); + secondsTimeStep: 5); Assert.IsTrue(emittedData); } From c81f5d7d1ab1be69dc9581476b53a071b0d8968b Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Tue, 18 Nov 2025 13:05:56 -0400 Subject: [PATCH 015/103] Seed securities by default (#9045) * Add SeedInitialPrices algorithm setting This is true by default and indicates that the engine will seed initial prices right after the security is added or selected * Update regression algorithms * Update regression algorithms * Update regression algorithms * Refactor default securities seeding * Minor fix * Minro fixes * Cleanup * Updated and add regression algorithms * Address peer review * Centralize logic to get last known data for multiple securities * Some cleanup * Minor build fix * Minor fixes * More logic centralization * Some more cleanup * Cleanup * Update regression algorithms and minor fixes * Update regression algorithms * Minor fix * More minor fixes * Update regression algorithms * Cleanup * Minor test fix * Address peer review * Minor fix and performance improvement * Fix to seed open interest data * Minor test fixes * Address peer review * Minor change * Minor revert * Minor fixes and improvements * Disable initial seeding by default * Minor fixes * Cleanup * Cleanup * Minor fix --- ...taIndicatorNewAssetsRegressionAlgorithm.cs | 20 +- .../AutomaticSeedBaseRegressionAlgorithm.cs | 137 +++++++++ .../BasicSetAccountCurrencyAlgorithm.cs | 2 +- ...icSetAccountCurrencyWithAmountAlgorithm.cs | 2 +- .../BasicTemplateCryptoAlgorithm.cs | 4 +- .../BasicTemplateFuturesAlgorithm.cs | 2 +- ...plateFuturesWithExtendedMarketAlgorithm.cs | 2 +- ...inanceCashAccountFeeRegressionAlgorithm.cs | 2 +- ...anceMarginAccountFeeRegressionAlgorithm.cs | 2 +- ...tfinexCashAccountFeeRegressionAlgorithm.cs | 2 +- ...inexMarginAccountFeeRegressionAlgorithm.cs | 2 +- .../BybitCryptoFuturesRegressionAlgorithm.cs | 4 +- .../BybitCryptoRegressionAlgorithm.cs | 4 +- ...ybitCustomDataCryptoRegressionAlgorithm.cs | 2 +- .../CancelOpenOrdersRegressionAlgorithm.cs | 2 +- ...eOptionUniverseChainRegressionAlgorithm.cs | 5 + ...ectionsAutomaticSeedRegressionAlgorithm.cs | 120 ++++++++ ...ptoYearMarketTradingRegressionAlgorithm.cs | 2 +- ...folioSignalExportDemonstrationAlgorithm.cs | 2 +- ...tive2SignalExportDemonstrationAlgorithm.cs | 2 +- ...usFutureRolloverBaseRegressionAlgorithm.cs | 16 +- ...eTimeZoneAheadOfDataRegressionAlgorithm.cs | 5 + ...fDataWithInitialSeedRegressionAlgorithm.cs | 33 +++ ...fDataWithInitialSeedRegressionAlgorithm.cs | 34 +++ ...AsDataWithIntialSeedRegressionAlgorithm.cs | 35 +++ ...fDataWithInitialSeedRegressionAlgorithm.cs | 34 +++ ...fDataWithInitialSeedRegressionAlgorithm.cs | 34 +++ ...sDataWithInitialSeedRegressionAlgorithm.cs | 34 +++ ...fDataWithInitialSeedRegressionAlgorithm.cs | 34 +++ ...fDataWithInitialSeedRegressionAlgorithm.cs | 34 +++ ...sDataWithInitialSeedRegressionAlgorithm.cs | 34 +++ ...tomDataAutomaticSeedRegressionAlgorithm.cs | 232 +++++++++++++++ ...CustomDataPropertiesRegressionAlgorithm.cs | 3 +- ...thDifferentExchangesRegressionAlgorithm.cs | 2 +- .../CustomSecurityInitializerAlgorithm.cs | 2 +- ...ryForDailyResolutionRegressionAlgorithm.cs | 2 +- ...yForMinuteResolutionRegressionAlgorithm.cs | 2 +- ...ResolutionVsTimeSpanRegressionAlgorithm.cs | 2 +- ...tionVsTimeSpanWithSecondEquityAlgorithm.cs | 5 +- .../EmitInsightCryptoCashAccountType.cs | 2 +- .../FeeModelNotUsingAccountCurrency.cs | 2 +- ...DataHigherResolutionRegressionAlgorithm.cs | 2 +- ...OnDataSameResolutionRegressionAlgorithm.cs | 2 +- ...ForexMultiResolutionRegressionAlgorithm.cs | 2 +- .../FractionalQuantityRegressionAlgorithm.cs | 4 +- ...FuturesAutomaticSeedRegressionAlgorithm.cs | 87 ++++++ .../HSIFutureDailyRegressionAlgorithm.cs | 2 +- .../HSIFutureHourRegressionAlgorithm.cs | 2 +- ...storyProviderManagerRegressionAlgorithm.cs | 2 +- ...eExecutionModelWorksWithBinanceFeeModel.cs | 2 +- ...ChainApisConsistencyRegressionAlgorithm.cs | 5 + ...icatorSelectorsWorkWithDifferentOptions.cs | 2 +- ...entMarginOrderUpdateRegressionAlgorithm.cs | 2 +- .../LargeQuantityOptionStrategyAlgorithm.cs | 2 +- ...onEquityBaseStrategyRegressionAlgorithm.cs | 4 +- ...OptionsAutomaticSeedRegressionAlgorithm.cs | 101 +++++++ .../OrderSubmissionDataRegressionAlgorithm.cs | 2 +- ...ionLastComputedValueRegressionAlgorithm.cs | 2 +- ...nicTypeConsolidationRegressionAlgorithm.cs | 2 +- ...nReAdditionForEquityRegressionAlgorithm.cs | 2 +- ...yAddedFutureContractRegressionAlgorithm.cs | 2 +- ...CashBuyingPowerModelRegressionAlgorithm.cs | 2 +- ...ySecurityMarginModelRegressionAlgorithm.cs | 2 +- .../StartingCapitalRegressionAlgorithm.cs | 4 +- ...egCurrencyConversionRegressionAlgorithm.cs | 4 +- ...teCurrencyIsNotAccountCurrencyAlgorithm.cs | 2 +- ...armupConversionRatesRegressionAlgorithm.cs | 2 +- .../WarmupDataTypesRegressionAlgorithm.cs | 2 +- .../WarmupTrainRegressionAlgorithm.cs | 2 +- .../ConsolidateRegressionAlgorithm.py | 10 +- .../CustomDataUniverseRegressionAlgorithm.py | 14 +- ...WithCustomDataSourceRegressionAlgorithm.py | 1 + Algorithm/QCAlgorithm.History.cs | 266 +++++++++++++----- Algorithm/QCAlgorithm.Universe.cs | 36 +-- .../Python/Wrappers/AlgorithmPythonWrapper.cs | 18 +- Common/AlgorithmSettings.cs | 6 + Common/AlgorithmUtils.cs | 50 ++++ Common/Interfaces/IAlgorithm.cs | 18 +- Common/Interfaces/IAlgorithmSettings.cs | 5 + Common/Interfaces/ISecurityService.cs | 6 +- Common/Securities/Cash.cs | 4 +- Common/Securities/SecurityService.cs | 36 ++- Engine/DataFeeds/UniverseSelection.cs | 18 +- Engine/Setup/BaseSetupHandler.cs | 85 +----- Launcher/config.json | 6 + Tests/Algorithm/AlgorithmAddDataTests.cs | 9 +- Tests/Algorithm/AlgorithmHistoryTests.cs | 9 +- .../AlgorithmRegisterIndicatorTests.cs | 2 +- Tests/Algorithm/AlgorithmWarmupTests.cs | 1 + .../UserDefinedUniverseTests.cs | 2 + .../Setup/BrokerageSetupHandlerTests.cs | 27 +- 91 files changed, 1487 insertions(+), 294 deletions(-) create mode 100644 Algorithm.CSharp/AutomaticSeedBaseRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/CoarseSelectionsAutomaticSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneSameAsDataWithIntialSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/CustomDataAutomaticSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/FuturesAutomaticSeedRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/OptionsAutomaticSeedRegressionAlgorithm.cs create mode 100644 Common/AlgorithmUtils.cs diff --git a/Algorithm.CSharp/AddBetaIndicatorNewAssetsRegressionAlgorithm.cs b/Algorithm.CSharp/AddBetaIndicatorNewAssetsRegressionAlgorithm.cs index f9020dfd7406..213ab2824913 100644 --- a/Algorithm.CSharp/AddBetaIndicatorNewAssetsRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddBetaIndicatorNewAssetsRegressionAlgorithm.cs @@ -1,11 +1,11 @@ /* * 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"); + * + * 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. @@ -107,7 +107,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 77; + public int AlgorithmHistoryDataPoints => 26; /// /// Final status of the algorithm @@ -122,18 +122,18 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Total Orders", "436"}, {"Average Win", "0.28%"}, {"Average Loss", "-0.01%"}, - {"Compounding Annual Return", "1.926%"}, + {"Compounding Annual Return", "1.925%"}, {"Drawdown", "1.000%"}, - {"Expectancy", "1.650"}, + {"Expectancy", "1.649"}, {"Start Equity", "10000.00"}, - {"End Equity", "10411.11"}, - {"Net Profit", "4.111%"}, + {"End Equity", "10410.99"}, + {"Net Profit", "4.110%"}, {"Sharpe Ratio", "0.332"}, {"Sortino Ratio", "0.313"}, {"Probabilistic Sharpe Ratio", "74.084%"}, {"Loss Rate", "90%"}, {"Win Rate", "10%"}, - {"Profit-Loss Ratio", "25.26"}, + {"Profit-Loss Ratio", "25.25"}, {"Alpha", "0.003"}, {"Beta", "0.001"}, {"Annual Standard Deviation", "0.01"}, @@ -146,7 +146,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Lowest Capacity Asset", "BTCUSD 2XR"}, {"Portfolio Turnover", "2.22%"}, {"Drawdown Recovery", "139"}, - {"OrderListHash", "9fce77ef8817cf0159897fc64d01f5e9"} + {"OrderListHash", "896ecc92440d51ed26644aac5b8706e4"} }; } } diff --git a/Algorithm.CSharp/AutomaticSeedBaseRegressionAlgorithm.cs b/Algorithm.CSharp/AutomaticSeedBaseRegressionAlgorithm.cs new file mode 100644 index 000000000000..a39b4c19f68e --- /dev/null +++ b/Algorithm.CSharp/AutomaticSeedBaseRegressionAlgorithm.cs @@ -0,0 +1,137 @@ +/* + * 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.Collections.Generic; +using System.Linq; +using QuantConnect.Interfaces; +using QuantConnect.Data.UniverseSelection; +using QuantConnect.Data.Market; +using QuantConnect.Securities; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Regression algorithm asserting that security are automatically seeded by default + /// + public abstract class AutomaticSeedBaseRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition + { + protected virtual bool ShouldHaveTradeData { get; } + protected virtual bool ShouldHaveQuoteData { get; } + protected virtual bool ShouldHaveOpenInterestData { get; } + + public override void OnSecuritiesChanged(SecurityChanges changes) + { + var gotTrades = false; + var gotQuotes = false; + var gotOpenInterest = false; + + foreach (var addedSecurity in changes.AddedSecurities.Where(x => !x.Symbol.IsCanonical() || x.Symbol.SecurityType == SecurityType.Future)) + { + if (addedSecurity.Price == 0) + { + throw new RegressionTestException("Security was not seeded"); + } + + if (!addedSecurity.HasData) + { + throw new RegressionTestException("Security does not have TradeBar or QuoteBar or OpenInterest data"); + } + + gotTrades |= addedSecurity.Cache.GetData() != null; + gotQuotes |= addedSecurity.Cache.GetData() != null; + gotOpenInterest |= addedSecurity.Cache.GetData() != null; + } + + if (changes.AddedSecurities.Count > 0) + { + if (ShouldHaveTradeData && !gotTrades) + { + throw new RegressionTestException("No contract had TradeBar data"); + } + + if (ShouldHaveQuoteData && !gotQuotes) + { + throw new RegressionTestException("No contract had QuoteBar data"); + } + + if (ShouldHaveOpenInterestData && !gotOpenInterest) + { + throw new RegressionTestException("No contract had OpenInterest data"); + } + } + } + + /// + /// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm. + /// + public bool CanRunLocally { get; } = true; + + /// + /// This is used by the regression test system to indicate which languages this algorithm is written in. + /// + public List Languages { get; } = new() { Language.CSharp }; + + /// + /// Data Points count of all timeslices of algorithm + /// + public abstract long DataPoints { get; } + + /// + /// Data Points count of the algorithm history + /// + public abstract int AlgorithmHistoryDataPoints { get; } + + /// + /// Final status of the algorithm + /// + public AlgorithmStatus AlgorithmStatus => AlgorithmStatus.Completed; + + /// + /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm + /// + public virtual Dictionary ExpectedStatistics => new Dictionary + { + {"Total Orders", "0"}, + {"Average Win", "0%"}, + {"Average Loss", "0%"}, + {"Compounding Annual Return", "0%"}, + {"Drawdown", "0%"}, + {"Expectancy", "0"}, + {"Start Equity", "100000"}, + {"End Equity", "100000"}, + {"Net Profit", "0%"}, + {"Sharpe Ratio", "0"}, + {"Sortino Ratio", "0"}, + {"Probabilistic Sharpe Ratio", "0%"}, + {"Loss Rate", "0%"}, + {"Win Rate", "0%"}, + {"Profit-Loss Ratio", "0"}, + {"Alpha", "0"}, + {"Beta", "0"}, + {"Annual Standard Deviation", "0"}, + {"Annual Variance", "0"}, + {"Information Ratio", "0"}, + {"Tracking Error", "0"}, + {"Treynor Ratio", "0"}, + {"Total Fees", "$0.00"}, + {"Estimated Strategy Capacity", "$0"}, + {"Lowest Capacity Asset", ""}, + {"Portfolio Turnover", "0%"}, + {"Drawdown Recovery", "0"}, + {"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"} + }; + } +} diff --git a/Algorithm.CSharp/BasicSetAccountCurrencyAlgorithm.cs b/Algorithm.CSharp/BasicSetAccountCurrencyAlgorithm.cs index b32816e5483e..12a2a95a6a52 100644 --- a/Algorithm.CSharp/BasicSetAccountCurrencyAlgorithm.cs +++ b/Algorithm.CSharp/BasicSetAccountCurrencyAlgorithm.cs @@ -77,7 +77,7 @@ public override void OnData(Slice slice) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 120; + public int AlgorithmHistoryDataPoints => 15; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/BasicSetAccountCurrencyWithAmountAlgorithm.cs b/Algorithm.CSharp/BasicSetAccountCurrencyWithAmountAlgorithm.cs index def5fcfcb173..039ccaec651a 100644 --- a/Algorithm.CSharp/BasicSetAccountCurrencyWithAmountAlgorithm.cs +++ b/Algorithm.CSharp/BasicSetAccountCurrencyWithAmountAlgorithm.cs @@ -47,7 +47,7 @@ public override void SetAccountCurrency() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 120; + public int AlgorithmHistoryDataPoints => 15; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/BasicTemplateCryptoAlgorithm.cs b/Algorithm.CSharp/BasicTemplateCryptoAlgorithm.cs index 4268d083e60c..5c3ce2f2c90d 100644 --- a/Algorithm.CSharp/BasicTemplateCryptoAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateCryptoAlgorithm.cs @@ -202,7 +202,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 240; + public int AlgorithmHistoryDataPoints => 35; /// /// Final status of the algorithm @@ -220,7 +220,7 @@ public override void OnEndOfAlgorithm() {"Compounding Annual Return", "0%"}, {"Drawdown", "0%"}, {"Expectancy", "0"}, - {"Start Equity", "31588.24"}, + {"Start Equity", "31592.84"}, {"End Equity", "30866.71"}, {"Net Profit", "0%"}, {"Sharpe Ratio", "0"}, diff --git a/Algorithm.CSharp/BasicTemplateFuturesAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesAlgorithm.cs index 7299325651c0..8bb42742ea27 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesAlgorithm.cs @@ -154,7 +154,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 340; + public int AlgorithmHistoryDataPoints => 354; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketAlgorithm.cs index f3323557cadd..693c63a7cd56 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketAlgorithm.cs @@ -154,7 +154,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 340; + public int AlgorithmHistoryDataPoints => 354; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/BinanceCashAccountFeeRegressionAlgorithm.cs b/Algorithm.CSharp/BinanceCashAccountFeeRegressionAlgorithm.cs index 6e7ae0c2c23b..1b7aad6998f8 100644 --- a/Algorithm.CSharp/BinanceCashAccountFeeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/BinanceCashAccountFeeRegressionAlgorithm.cs @@ -46,7 +46,7 @@ public override void Initialize() /// /// Data Points count of the algorithm history /// - public override int AlgorithmHistoryDataPoints => 28; + public override int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/BinanceMarginAccountFeeRegressionAlgorithm.cs b/Algorithm.CSharp/BinanceMarginAccountFeeRegressionAlgorithm.cs index 4c30043f2586..823b2389af92 100644 --- a/Algorithm.CSharp/BinanceMarginAccountFeeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/BinanceMarginAccountFeeRegressionAlgorithm.cs @@ -46,7 +46,7 @@ public override void Initialize() /// /// Data Points count of the algorithm history /// - public override int AlgorithmHistoryDataPoints => 28; + public override int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/BitfinexCashAccountFeeRegressionAlgorithm.cs b/Algorithm.CSharp/BitfinexCashAccountFeeRegressionAlgorithm.cs index f56e8e1ed08a..1d2ca5ef72a1 100644 --- a/Algorithm.CSharp/BitfinexCashAccountFeeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/BitfinexCashAccountFeeRegressionAlgorithm.cs @@ -45,7 +45,7 @@ public override void Initialize() /// /// Data Points count of the algorithm history /// - public override int AlgorithmHistoryDataPoints => 28; + public override int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/BitfinexMarginAccountFeeRegressionAlgorithm.cs b/Algorithm.CSharp/BitfinexMarginAccountFeeRegressionAlgorithm.cs index 7536fe642e78..c6aeca81b5e2 100644 --- a/Algorithm.CSharp/BitfinexMarginAccountFeeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/BitfinexMarginAccountFeeRegressionAlgorithm.cs @@ -45,7 +45,7 @@ public override void Initialize() /// /// Data Points count of the algorithm history /// - public override int AlgorithmHistoryDataPoints => 28; + public override int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/BybitCryptoFuturesRegressionAlgorithm.cs b/Algorithm.CSharp/BybitCryptoFuturesRegressionAlgorithm.cs index b77d810a5fc8..ccda05848fda 100644 --- a/Algorithm.CSharp/BybitCryptoFuturesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/BybitCryptoFuturesRegressionAlgorithm.cs @@ -226,7 +226,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 60; + public int AlgorithmHistoryDataPoints => 10; /// /// Final status of the algorithm @@ -244,7 +244,7 @@ public override void OnEndOfAlgorithm() {"Compounding Annual Return", "0%"}, {"Drawdown", "0%"}, {"Expectancy", "0"}, - {"Start Equity", "100285.86"}, + {"Start Equity", "100285.85"}, {"End Equity", "100285.26"}, {"Net Profit", "0%"}, {"Sharpe Ratio", "0"}, diff --git a/Algorithm.CSharp/BybitCryptoRegressionAlgorithm.cs b/Algorithm.CSharp/BybitCryptoRegressionAlgorithm.cs index 09385dcd106f..c9fb4c24878e 100644 --- a/Algorithm.CSharp/BybitCryptoRegressionAlgorithm.cs +++ b/Algorithm.CSharp/BybitCryptoRegressionAlgorithm.cs @@ -135,7 +135,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 60; + public int AlgorithmHistoryDataPoints => 10; /// /// Final status of the algorithm @@ -153,7 +153,7 @@ public override void OnEndOfAlgorithm() {"Compounding Annual Return", "0%"}, {"Drawdown", "0%"}, {"Expectancy", "0"}, - {"Start Equity", "117171.12"}, + {"Start Equity", "117170.74"}, {"End Equity", "117244.52"}, {"Net Profit", "0%"}, {"Sharpe Ratio", "0"}, diff --git a/Algorithm.CSharp/BybitCustomDataCryptoRegressionAlgorithm.cs b/Algorithm.CSharp/BybitCustomDataCryptoRegressionAlgorithm.cs index af3e61d55f38..63303bd45752 100644 --- a/Algorithm.CSharp/BybitCustomDataCryptoRegressionAlgorithm.cs +++ b/Algorithm.CSharp/BybitCustomDataCryptoRegressionAlgorithm.cs @@ -147,7 +147,7 @@ public override BaseData Reader(SubscriptionDataConfig config, string line, Date /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 60; + public int AlgorithmHistoryDataPoints => 10; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/CancelOpenOrdersRegressionAlgorithm.cs b/Algorithm.CSharp/CancelOpenOrdersRegressionAlgorithm.cs index 5f87df40d595..5fd071b242c9 100644 --- a/Algorithm.CSharp/CancelOpenOrdersRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CancelOpenOrdersRegressionAlgorithm.cs @@ -130,7 +130,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 120; + public int AlgorithmHistoryDataPoints => 20; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/CoarseFineOptionUniverseChainRegressionAlgorithm.cs b/Algorithm.CSharp/CoarseFineOptionUniverseChainRegressionAlgorithm.cs index ca659fe4512d..dba0e2d74b0a 100644 --- a/Algorithm.CSharp/CoarseFineOptionUniverseChainRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CoarseFineOptionUniverseChainRegressionAlgorithm.cs @@ -47,6 +47,11 @@ public override void Initialize() _aapl = QuantConnect.Symbol.Create("AAPL", SecurityType.Equity, Market.USA); UniverseSettings.Resolution = Resolution.Minute; + // Let's disable initial price seeding, the algorithm will wait until both equity + // and options are added an have prices to do the tests, we don't want the equity + // having prices before the options are added. + Settings.SeedInitialPrices = false; + SetStartDate(2014, 06, 04); // TWX is selected the 4th and 5th and aapl after that. // If the algo ends on the 6th, TWX subscriptions will not be removed before OnEndOfAlgorithm is called: diff --git a/Algorithm.CSharp/CoarseSelectionsAutomaticSeedRegressionAlgorithm.cs b/Algorithm.CSharp/CoarseSelectionsAutomaticSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..16a9b60a43b2 --- /dev/null +++ b/Algorithm.CSharp/CoarseSelectionsAutomaticSeedRegressionAlgorithm.cs @@ -0,0 +1,120 @@ +/* + * 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 System.Linq; +using QuantConnect.Data.UniverseSelection; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Regression algorithm asserting that securities added via coarse selection get automatically seeded by default + /// + public class CoarseSelectionsAutomaticSeedRegressionAlgorithm : AutomaticSeedBaseRegressionAlgorithm + { + private readonly Queue> _coarseSelections = new(new[] { "AAPL", "GOOG", "AIG", "BAC", "FB", "IBM" } + .Select(x => QuantConnect.Symbol.Create(x, SecurityType.Equity, Market.USA)) + .BatchBy(2)); + + private HashSet _addedSecurities = new(); + + protected override bool ShouldHaveTradeData => true; + // Daily resolution, only trade data is available + protected override bool ShouldHaveQuoteData => false; + protected override bool ShouldHaveOpenInterestData => false; + + public override void Initialize() + { + SetStartDate(2015, 01, 01); + SetEndDate(2015, 03, 01); + SetCash(100000); + + Settings.SeedInitialPrices = true; + UniverseSettings.Resolution = Resolution.Daily; + + AddUniverse((coarse) => + { + var selection = _coarseSelections.Dequeue(); + _coarseSelections.Enqueue(selection); + return selection; + }); + } + + public override void OnSecuritiesChanged(SecurityChanges changes) + { + base.OnSecuritiesChanged(changes); + + foreach (var addedSecurity in changes.AddedSecurities.Where(x => !x.Symbol.IsCanonical())) + { + _addedSecurities.Add(addedSecurity.Symbol); + } + } + + public override void OnEndOfAlgorithm() + { + if (!_coarseSelections.SelectMany(x => x).Order().SequenceEqual(_addedSecurities.Order())) + { + throw new RegressionTestException("Not all securities were added"); + } + } + + /// + /// Data Points count of all timeslices of algorithm + /// + public override long DataPoints => 358; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 390; + + /// + /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm + /// + public override Dictionary ExpectedStatistics => new Dictionary + { + {"Total Orders", "0"}, + {"Average Win", "0%"}, + {"Average Loss", "0%"}, + {"Compounding Annual Return", "0%"}, + {"Drawdown", "0%"}, + {"Expectancy", "0"}, + {"Start Equity", "100000"}, + {"End Equity", "100000"}, + {"Net Profit", "0%"}, + {"Sharpe Ratio", "0"}, + {"Sortino Ratio", "0"}, + {"Probabilistic Sharpe Ratio", "0%"}, + {"Loss Rate", "0%"}, + {"Win Rate", "0%"}, + {"Profit-Loss Ratio", "0"}, + {"Alpha", "0"}, + {"Beta", "0"}, + {"Annual Standard Deviation", "0"}, + {"Annual Variance", "0"}, + {"Information Ratio", "-1.066"}, + {"Tracking Error", "0.116"}, + {"Treynor Ratio", "0"}, + {"Total Fees", "$0.00"}, + {"Estimated Strategy Capacity", "$0"}, + {"Lowest Capacity Asset", ""}, + {"Portfolio Turnover", "0%"}, + {"Drawdown Recovery", "0"}, + {"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"} + }; + } +} diff --git a/Algorithm.CSharp/CoinbaseCryptoYearMarketTradingRegressionAlgorithm.cs b/Algorithm.CSharp/CoinbaseCryptoYearMarketTradingRegressionAlgorithm.cs index 71aff42b6187..598444164a60 100644 --- a/Algorithm.CSharp/CoinbaseCryptoYearMarketTradingRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CoinbaseCryptoYearMarketTradingRegressionAlgorithm.cs @@ -104,7 +104,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 43; + public int AlgorithmHistoryDataPoints => 11; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/Collective2PortfolioSignalExportDemonstrationAlgorithm.cs b/Algorithm.CSharp/Collective2PortfolioSignalExportDemonstrationAlgorithm.cs index 221427ea306c..7e4a1ab222be 100644 --- a/Algorithm.CSharp/Collective2PortfolioSignalExportDemonstrationAlgorithm.cs +++ b/Algorithm.CSharp/Collective2PortfolioSignalExportDemonstrationAlgorithm.cs @@ -153,7 +153,7 @@ public override void OnData(Slice slice) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 11147; + public int AlgorithmHistoryDataPoints => 50; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/Collective2SignalExportDemonstrationAlgorithm.cs b/Algorithm.CSharp/Collective2SignalExportDemonstrationAlgorithm.cs index cdfff0c7ce25..3db21ab2f84c 100644 --- a/Algorithm.CSharp/Collective2SignalExportDemonstrationAlgorithm.cs +++ b/Algorithm.CSharp/Collective2SignalExportDemonstrationAlgorithm.cs @@ -176,7 +176,7 @@ public override void OnData(Slice slice) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 11147; + public int AlgorithmHistoryDataPoints => 50; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/ContinuousFutureRolloverBaseRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverBaseRegressionAlgorithm.cs index 8975109da32c..3b8134c69420 100644 --- a/Algorithm.CSharp/ContinuousFutureRolloverBaseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ContinuousFutureRolloverBaseRegressionAlgorithm.cs @@ -45,17 +45,23 @@ public abstract class ContinuousFutureRolloverBaseRegressionAlgorithm : QCAlgori protected abstract Offset ExchangeToDataTimeZoneOffset { get; } + protected virtual bool SeedIntialPrices { get; } + private DateTimeZone DataTimeZone => TimeZones.Utc; private DateTimeZone ExchangeTimeZone => DateTimeZone.ForOffset(ExchangeToDataTimeZoneOffset); private bool RolloverHappened => _rolloverTime != DateTime.MinValue; + private BaseData MappedContractSeededData; + public override void Initialize() { SetStartDate(2013, 10, 8); SetEndDate(2013, 12, 20); + Settings.SeedInitialPrices = SeedIntialPrices; + _originalMhdbEntry = MarketHoursDatabase.GetEntry(Market.CME, Ticker, SecurityType.Future); var exchangeHours = new SecurityExchangeHours(ExchangeTimeZone, _originalMhdbEntry.ExchangeHours.Holidays, @@ -115,6 +121,9 @@ public override void OnData(Slice slice) $"Expected {expectedMappingOldSymbol} -> {expectedMappingNewSymbol} " + $"but was {symbolChangedEvent.OldSymbol} -> {symbolChangedEvent.NewSymbol}"); } + + var mappedContract = Securities[_continuousContract.Mapped]; + MappedContractSeededData = mappedContract.GetLastData(); } var mappedFuture = Securities[_continuousContract.Mapped]; @@ -148,7 +157,10 @@ public override void OnData(Slice slice) } else if (mappedFuturePrice != 0 || !RolloverHappened) { - if (continuousContractPrice != mappedFuturePrice) + var mappedFutureData = mappedFuture.GetLastData(); + // We only do this check is default securities seeding is desabled, else the mapped contract will have historical data + if ((!Settings.SeedInitialPrices || !ReferenceEquals(MappedContractSeededData, mappedFutureData)) && + continuousContractPrice != mappedFuturePrice) { var continuousContractLastData = _continuousContract.GetLastData(); throw new RegressionTestException($"[{Time}] -- Prices do not match. " + @@ -221,7 +233,7 @@ private void ResetMarketHoursDatabase() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 0; + public virtual int AlgorithmHistoryDataPoints => 0; /// /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm diff --git a/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataRegressionAlgorithm.cs index c96e620c275a..c982f8b4d0c6 100644 --- a/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataRegressionAlgorithm.cs @@ -34,5 +34,10 @@ public class ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataRegressionA /// Data Points count of all timeslices of algorithm /// public override long DataPoints => 483; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 0; } } diff --git a/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..2ffbe7e930c9 --- /dev/null +++ b/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs @@ -0,0 +1,33 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Base class for regression algorithms testing that when a continuous future rollover happens, + /// the continuous contract is updated correctly with the new contract data. + /// The algorithms asserts the behavior for the case when the exchange time zone is ahead of the data time zone. + /// + public class ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm + : ContinuousFutureRolloverDailyExchangeTimeZoneAheadOfDataRegressionAlgorithm + { + protected override bool SeedIntialPrices => true; + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 15; + } +} diff --git a/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..def2d23bca51 --- /dev/null +++ b/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs @@ -0,0 +1,34 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Base class for regression algorithms testing that when a continuous future rollover happens, + /// the continuous contract is updated correctly with the new contract data. + /// The algorithms asserts the behavior for the case when the exchange time zone is behind of the data time zone. + /// + public class ContinuousFutureRolloverDailyExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm + : ContinuousFutureRolloverDailyExchangeTimeZoneBehindOfDataRegressionAlgorithm + { + protected override bool SeedIntialPrices => true; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 17; + } +} diff --git a/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneSameAsDataWithIntialSeedRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneSameAsDataWithIntialSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..1a5713bac8e3 --- /dev/null +++ b/Algorithm.CSharp/ContinuousFutureRolloverDailyExchangeTimeZoneSameAsDataWithIntialSeedRegressionAlgorithm.cs @@ -0,0 +1,35 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Base class for regression algorithms testing that when a continuous future rollover happens, + /// the continuous contract is updated correctly with the new contract data. + /// The algorithms asserts the behavior for the case when the data time zone is the same as the exchange time zone. + /// + public class ContinuousFutureRolloverDailyExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm + : ContinuousFutureRolloverDailyExchangeTimeZoneSameAsDataRegressionAlgorithm + + { + protected override bool SeedIntialPrices => true; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 17; + } +} diff --git a/Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..9e088413d171 --- /dev/null +++ b/Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs @@ -0,0 +1,34 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Base class for regression algorithms testing that when a continuous future rollover happens, + /// the continuous contract is updated correctly with the new contract data. + /// The algorithms asserts the behavior for the case when the exchange time zone is ahead of the data time zone. + /// + public class ContinuousFutureRolloverHourExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm + : ContinuousFutureRolloverHourExchangeTimeZoneAheadOfDataRegressionAlgorithm + { + protected override bool SeedIntialPrices => true; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 65; + } +} diff --git a/Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..9ed875f9d432 --- /dev/null +++ b/Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs @@ -0,0 +1,34 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Base class for regression algorithms testing that when a continuous future rollover happens, + /// the continuous contract is updated correctly with the new contract data. + /// The algorithms asserts the behavior for the case when the exchange time zone is behind of the data time zone. + /// + public class ContinuousFutureRolloverHourExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm + : ContinuousFutureRolloverHourExchangeTimeZoneBehindOfDataRegressionAlgorithm + { + protected override bool SeedIntialPrices => true; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 64; + } +} diff --git a/Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..894d12d113f0 --- /dev/null +++ b/Algorithm.CSharp/ContinuousFutureRolloverHourExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm.cs @@ -0,0 +1,34 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Base class for regression algorithms testing that when a continuous future rollover happens, + /// the continuous contract is updated correctly with the new contract data. + /// The algorithms asserts the behavior for the case when the data time zone is the same as the exchange time zone. + /// + public class ContinuousFutureRolloverHourExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm + : ContinuousFutureRolloverHourExchangeTimeZoneSameAsDataRegressionAlgorithm + { + protected override bool SeedIntialPrices => true; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 64; + } +} diff --git a/Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..6774f5fcdc9e --- /dev/null +++ b/Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm.cs @@ -0,0 +1,34 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Base class for regression algorithms testing that when a continuous future rollover happens, + /// the continuous contract is updated correctly with the new contract data. + /// The algorithms asserts the behavior for the case when the exchange time zone is ahead of the data time zone. + /// + public class ContinuousFutureRolloverMinuteExchangeTimeZoneAheadOfDataWithInitialSeedRegressionAlgorithm + : ContinuousFutureRolloverMinuteExchangeTimeZoneAheadOfDataRegressionAlgorithm + { + protected override bool SeedIntialPrices => true; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 1958; + } +} diff --git a/Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..7531da4271dd --- /dev/null +++ b/Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm.cs @@ -0,0 +1,34 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Base class for regression algorithms testing that when a continuous future rollover happens, + /// the continuous contract is updated correctly with the new contract data. + /// The algorithms asserts the behavior for the case when the exchange time zone is behind of the data time zone. + /// + public class ContinuousFutureRolloverMinuteExchangeTimeZoneBehindOfDataWithInitialSeedRegressionAlgorithm + : ContinuousFutureRolloverMinuteExchangeTimeZoneBehindOfDataRegressionAlgorithm + { + protected override bool SeedIntialPrices => true; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 892; + } +} diff --git a/Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm.cs b/Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..cc2cc354c353 --- /dev/null +++ b/Algorithm.CSharp/ContinuousFutureRolloverMinuteExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm.cs @@ -0,0 +1,34 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Base class for regression algorithms testing that when a continuous future rollover happens, + /// the continuous contract is updated correctly with the new contract data. + /// The algorithms asserts the behavior for the case when the data time zone is the same as the exchange time zone. + /// + public class ContinuousFutureRolloverMinuteExchangeTimeZoneSameAsDataWithInitialSeedRegressionAlgorithm + : ContinuousFutureRolloverMinuteExchangeTimeZoneSameAsDataRegressionAlgorithm + { + protected override bool SeedIntialPrices => true; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 668; + } +} diff --git a/Algorithm.CSharp/CustomDataAutomaticSeedRegressionAlgorithm.cs b/Algorithm.CSharp/CustomDataAutomaticSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..11751eaade2d --- /dev/null +++ b/Algorithm.CSharp/CustomDataAutomaticSeedRegressionAlgorithm.cs @@ -0,0 +1,232 @@ +/* + * 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 System.Globalization; +using Newtonsoft.Json; +using QuantConnect.Data; +using QuantConnect.Interfaces; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Regression test to assert that custom data is seeded by default + /// + public class CustomDataAutomaticSeedRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition + { + public override void Initialize() + { + SetStartDate(2020, 01, 05); + SetEndDate(2020, 01, 10); + SetCash(100000); + + Settings.SeedInitialPrices = true; + + var resolution = Resolution.Daily; + var customData = AddData("BTC", resolution); + + if (!customData.HasData || customData.Price == 0) + { + throw new RegressionTestException("Custom data was not seeded with data on addition"); + } + + var seedData = customData.GetLastData(); + if (seedData is not Bitcoin) + { + throw new RegressionTestException("Custom data was not seeded with correct data type"); + } + } + + /// + /// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm. + /// + public bool CanRunLocally { get; } = true; + + /// + /// This is used by the regression test system to indicate which languages this algorithm is written in. + /// + public List Languages { get; } = new() { Language.CSharp }; + + /// + /// Data Points count of all timeslices of algorithm + /// + public long DataPoints => 50; + + /// + /// Data Points count of the algorithm history + /// + public int AlgorithmHistoryDataPoints => 5; + + /// + /// Final status of the algorithm + /// + public AlgorithmStatus AlgorithmStatus => AlgorithmStatus.Completed; + + /// + /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm + /// + public Dictionary ExpectedStatistics => new Dictionary + { + {"Total Orders", "0"}, + {"Average Win", "0%"}, + {"Average Loss", "0%"}, + {"Compounding Annual Return", "0%"}, + {"Drawdown", "0%"}, + {"Expectancy", "0"}, + {"Start Equity", "100000"}, + {"End Equity", "100000"}, + {"Net Profit", "0%"}, + {"Sharpe Ratio", "0"}, + {"Sortino Ratio", "0"}, + {"Probabilistic Sharpe Ratio", "0%"}, + {"Loss Rate", "0%"}, + {"Win Rate", "0%"}, + {"Profit-Loss Ratio", "0"}, + {"Alpha", "0"}, + {"Beta", "0"}, + {"Annual Standard Deviation", "0"}, + {"Annual Variance", "0"}, + {"Information Ratio", "-9.259"}, + {"Tracking Error", "0.073"}, + {"Treynor Ratio", "0"}, + {"Total Fees", "$0.00"}, + {"Estimated Strategy Capacity", "$0"}, + {"Lowest Capacity Asset", ""}, + {"Portfolio Turnover", "0%"}, + {"Drawdown Recovery", "0"}, + {"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"} + }; + + /// + /// Custom Data Type: Bitcoin data from Quandl - http://www.quandl.com/help/api-for-bitcoin-data + /// + public class Bitcoin : BaseData + { + [JsonProperty("timestamp")] + public int Timestamp { get; set; } + [JsonProperty("open")] + public decimal Open { get; set; } + [JsonProperty("high")] + public decimal High { get; set; } + [JsonProperty("low")] + public decimal Low { get; set; } + public decimal Mid { get; set; } + + [JsonProperty("last")] + public decimal Close { get; set; } + [JsonProperty("bid")] + public decimal Bid { get; set; } + [JsonProperty("ask")] + public decimal Ask { get; set; } + [JsonProperty("vwap")] + public decimal WeightedPrice { get; set; } + [JsonProperty("volume")] + public decimal VolumeBTC { get; set; } + + /// + /// The end time of this data. Some data covers spans (trade bars) + /// and as such we want to know the entire time span covered + /// + /// + /// This property is overriden to allow different values for Time and EndTime + /// if they are set in the Reader. In the base implementation EndTime equals Time + /// + public override DateTime EndTime { get; set; } + + /// + /// 1. DEFAULT CONSTRUCTOR: Custom data types need a default constructor. + /// We search for a default constructor so please provide one here. It won't be used for data, just to generate the "Factory". + /// + public Bitcoin() + { + Symbol = "BTC"; + } + + /// + /// 2. RETURN THE STRING URL SOURCE LOCATION FOR YOUR DATA: + /// This is a powerful and dynamic select source file method. If you have a large dataset, 10+mb we recommend you break it into smaller files. E.g. One zip per year. + /// We can accept raw text or ZIP files. We read the file extension to determine if it is a zip file. + /// + /// Configuration object + /// Date of this source file + /// true if we're in live mode, false for backtesting mode + /// String URL of source file. + public override SubscriptionDataSource GetSource(SubscriptionDataConfig config, DateTime date, bool isLiveMode) + { + if (isLiveMode) + { + return new SubscriptionDataSource("https://www.bitstamp.net/api/ticker/", SubscriptionTransportMedium.Rest); + } + + //return "http://my-ftp-server.com/futures-data-" + date.ToString("Ymd") + ".zip"; + // OR simply return a fixed small data file. Large files will slow down your backtest + return new SubscriptionDataSource("https://www.quantconnect.com/api/v2/proxy/nasdaq/api/v3/datatables/QDL/BITFINEX.csv?code=BTCUSD&api_key=qAWKpUfmSVFnU3bRQwKy") + { + Sort = true + }; + } + + /// + /// 3. READER METHOD: Read 1 line from data source and convert it into Object. + /// Each line of the CSV File is presented in here. The backend downloads your file, loads it into memory and then line by line + /// feeds it into your algorithm + /// + /// string line from the data source file submitted above + /// Subscription data, symbol name, data type + /// Current date we're requesting. This allows you to break up the data source into daily files. + /// true if we're in live mode, false for backtesting mode + /// New Bitcoin Object which extends BaseData. + public override BaseData Reader(SubscriptionDataConfig config, string line, DateTime date, bool isLiveMode) + { + var coin = new Bitcoin(); + if (isLiveMode) + { + //Example Line Format: + //{"high": "441.00", "last": "421.86", "timestamp": "1411606877", "bid": "421.96", "vwap": "428.58", "volume": "14120.40683975", "low": "418.83", "ask": "421.99"} + try + { + coin = JsonConvert.DeserializeObject(line); + coin.EndTime = DateTime.UtcNow.ConvertFromUtc(config.ExchangeTimeZone); + coin.Value = coin.Close; + } + catch { /* Do nothing, possible error in json decoding */ } + return coin; + } + + //Example Line Format: + // code date high low mid last bid ask volume + // BTCUSD 2024-10-08 63248.0 61940.0 62246.5 62245.0 62246.0 62247.0 477.91102114 + try + { + string[] data = line.Split(','); + coin.Time = DateTime.Parse(data[1], CultureInfo.InvariantCulture); + coin.EndTime = coin.Time.AddDays(1); + coin.High = Convert.ToDecimal(data[2], CultureInfo.InvariantCulture); + coin.Low = Convert.ToDecimal(data[3], CultureInfo.InvariantCulture); + coin.Mid = Convert.ToDecimal(data[4], CultureInfo.InvariantCulture); + coin.Close = Convert.ToDecimal(data[5], CultureInfo.InvariantCulture); + coin.Bid = Convert.ToDecimal(data[6], CultureInfo.InvariantCulture); + coin.Ask = Convert.ToDecimal(data[7], CultureInfo.InvariantCulture); + coin.VolumeBTC = Convert.ToDecimal(data[8], CultureInfo.InvariantCulture); + coin.Value = coin.Close; + } + catch { /* Do nothing, skip first title row */ } + + return coin; + } + } + } +} diff --git a/Algorithm.CSharp/CustomDataPropertiesRegressionAlgorithm.cs b/Algorithm.CSharp/CustomDataPropertiesRegressionAlgorithm.cs index 1534c82ea0dc..fba19955843a 100644 --- a/Algorithm.CSharp/CustomDataPropertiesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CustomDataPropertiesRegressionAlgorithm.cs @@ -198,7 +198,6 @@ public class Bitcoin : BaseData /// public Bitcoin() { - Symbol = "BTC"; } /// @@ -237,7 +236,7 @@ public override SubscriptionDataSource GetSource(SubscriptionDataConfig config, /// New Bitcoin Object which extends BaseData. public override BaseData Reader(SubscriptionDataConfig config, string line, DateTime date, bool isLiveMode) { - var coin = new Bitcoin(); + var coin = new Bitcoin() { Symbol = config.Symbol }; if (isLiveMode) { //Example Line Format: diff --git a/Algorithm.CSharp/CustomDataWorksWithDifferentExchangesRegressionAlgorithm.cs b/Algorithm.CSharp/CustomDataWorksWithDifferentExchangesRegressionAlgorithm.cs index 71cf23798821..fc7a4360f09e 100644 --- a/Algorithm.CSharp/CustomDataWorksWithDifferentExchangesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CustomDataWorksWithDifferentExchangesRegressionAlgorithm.cs @@ -83,7 +83,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 60; + public int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/CustomSecurityInitializerAlgorithm.cs b/Algorithm.CSharp/CustomSecurityInitializerAlgorithm.cs index e30e808caf64..ae4ba351d154 100644 --- a/Algorithm.CSharp/CustomSecurityInitializerAlgorithm.cs +++ b/Algorithm.CSharp/CustomSecurityInitializerAlgorithm.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * diff --git a/Algorithm.CSharp/DailyHistoryForDailyResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/DailyHistoryForDailyResolutionRegressionAlgorithm.cs index 93479ffcf571..093d906eda8f 100644 --- a/Algorithm.CSharp/DailyHistoryForDailyResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DailyHistoryForDailyResolutionRegressionAlgorithm.cs @@ -101,7 +101,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 564; + public int AlgorithmHistoryDataPoints => 458; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/DailyHistoryForMinuteResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/DailyHistoryForMinuteResolutionRegressionAlgorithm.cs index 5394ffa04328..35c4e458624c 100644 --- a/Algorithm.CSharp/DailyHistoryForMinuteResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DailyHistoryForMinuteResolutionRegressionAlgorithm.cs @@ -103,7 +103,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 43089; + public int AlgorithmHistoryDataPoints => 15307; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/DailyResolutionVsTimeSpanRegressionAlgorithm.cs b/Algorithm.CSharp/DailyResolutionVsTimeSpanRegressionAlgorithm.cs index a937d9ba2150..eeba2f06f68a 100644 --- a/Algorithm.CSharp/DailyResolutionVsTimeSpanRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DailyResolutionVsTimeSpanRegressionAlgorithm.cs @@ -38,7 +38,7 @@ public override void Initialize() Settings.DailyPreciseEndTime = DailyPreciseEndTime; - // First RSI: Updates at market close (4 PM) by default + // First RSI: Updates at market close (4 PM) by default // If DailyPreciseEndTime is false, updates at midnight (12:00 AM) RelativeStrengthIndex1 = new RelativeStrengthIndex(14, MovingAverageType.Wilders); RegisterIndicator(Spy, RelativeStrengthIndex1, Resolution.Daily); diff --git a/Algorithm.CSharp/DailyResolutionVsTimeSpanWithSecondEquityAlgorithm.cs b/Algorithm.CSharp/DailyResolutionVsTimeSpanWithSecondEquityAlgorithm.cs index d4431df85d44..a5b6bbc19eae 100644 --- a/Algorithm.CSharp/DailyResolutionVsTimeSpanWithSecondEquityAlgorithm.cs +++ b/Algorithm.CSharp/DailyResolutionVsTimeSpanWithSecondEquityAlgorithm.cs @@ -17,7 +17,7 @@ namespace QuantConnect.Algorithm.CSharp { - public class DailyResolutionVsTimeSpanWithSecondResolutionEquityAlgorithm : DailyResolutionVsTimeSpanRegressionAlgorithm + public class DailyResolutionVsTimeSpanWithSecondEquityAlgorithm : DailyResolutionVsTimeSpanRegressionAlgorithm { protected override void InitializeBaseSettings() { @@ -62,7 +62,8 @@ protected override void InitializeBaseSettings() {"Estimated Strategy Capacity", "$0"}, {"Lowest Capacity Asset", ""}, {"Portfolio Turnover", "0%"}, + {"Drawdown Recovery", "0"}, {"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"} }; } -} \ No newline at end of file +} diff --git a/Algorithm.CSharp/EmitInsightCryptoCashAccountType.cs b/Algorithm.CSharp/EmitInsightCryptoCashAccountType.cs index 6ea12e46f3e1..528bfc773784 100644 --- a/Algorithm.CSharp/EmitInsightCryptoCashAccountType.cs +++ b/Algorithm.CSharp/EmitInsightCryptoCashAccountType.cs @@ -74,7 +74,7 @@ public override void OnData(Slice slice) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 120; + public int AlgorithmHistoryDataPoints => 15; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/FeeModelNotUsingAccountCurrency.cs b/Algorithm.CSharp/FeeModelNotUsingAccountCurrency.cs index 37a7b086d104..9b62692c94f9 100644 --- a/Algorithm.CSharp/FeeModelNotUsingAccountCurrency.cs +++ b/Algorithm.CSharp/FeeModelNotUsingAccountCurrency.cs @@ -157,7 +157,7 @@ public override OrderFee GetOrderFee(OrderFeeParameters parameters) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 120; + public int AlgorithmHistoryDataPoints => 10; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/ForexInternalFeedOnDataHigherResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/ForexInternalFeedOnDataHigherResolutionRegressionAlgorithm.cs index 9f27516d0652..351c702226e7 100644 --- a/Algorithm.CSharp/ForexInternalFeedOnDataHigherResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ForexInternalFeedOnDataHigherResolutionRegressionAlgorithm.cs @@ -141,7 +141,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 120; + public int AlgorithmHistoryDataPoints => 10; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/ForexInternalFeedOnDataSameResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/ForexInternalFeedOnDataSameResolutionRegressionAlgorithm.cs index e2f9572edf4c..c405536d0315 100644 --- a/Algorithm.CSharp/ForexInternalFeedOnDataSameResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ForexInternalFeedOnDataSameResolutionRegressionAlgorithm.cs @@ -140,7 +140,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 120; + public int AlgorithmHistoryDataPoints => 10; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/ForexMultiResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/ForexMultiResolutionRegressionAlgorithm.cs index 2bd99298e9ee..9f4d5dea4e4b 100644 --- a/Algorithm.CSharp/ForexMultiResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ForexMultiResolutionRegressionAlgorithm.cs @@ -93,7 +93,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 189; + public int AlgorithmHistoryDataPoints => 55; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/FractionalQuantityRegressionAlgorithm.cs b/Algorithm.CSharp/FractionalQuantityRegressionAlgorithm.cs index 684749ad17ce..da5b1d807ca9 100644 --- a/Algorithm.CSharp/FractionalQuantityRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FractionalQuantityRegressionAlgorithm.cs @@ -101,7 +101,7 @@ private void DataConsolidated(object sender, TradeBar e) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 60; + public int AlgorithmHistoryDataPoints => 10; /// /// Final status of the algorithm @@ -119,7 +119,7 @@ private void DataConsolidated(object sender, TradeBar e) {"Compounding Annual Return", "1497.266%"}, {"Drawdown", "5.500%"}, {"Expectancy", "1.339"}, - {"Start Equity", "100000.0"}, + {"Start Equity", "100000.00"}, {"End Equity", "113775.23"}, {"Net Profit", "13.775%"}, {"Sharpe Ratio", "4.906"}, diff --git a/Algorithm.CSharp/FuturesAutomaticSeedRegressionAlgorithm.cs b/Algorithm.CSharp/FuturesAutomaticSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..e6233f05cdd9 --- /dev/null +++ b/Algorithm.CSharp/FuturesAutomaticSeedRegressionAlgorithm.cs @@ -0,0 +1,87 @@ +/* + * 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.Data.UniverseSelection; +using QuantConnect.Securities; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Regression algorithm asserting that futures and future option contracts added via universe selection + /// get automatically seeded by default + /// + public class FuturesAutomaticSeedRegressionAlgorithm : AutomaticSeedBaseRegressionAlgorithm + { + private bool _futureContractsAdded; + private bool _fopsContractsAdded; + + protected override bool ShouldHaveTradeData => true; + protected override bool ShouldHaveQuoteData => false; + protected override bool ShouldHaveOpenInterestData => true; + + public override void Initialize() + { + SetStartDate(2020, 01, 07); + SetEndDate(2020, 01, 07); + SetCash(100000); + + Settings.SeedInitialPrices = true; + + var futures = AddFuture(Futures.Indices.SP500EMini); + futures.SetFilter(0, 365); + + AddFutureOption(futures.Symbol, universe => universe.Strikes(-5, +5)); + } + + public override void OnSecuritiesChanged(SecurityChanges changes) + { + base.OnSecuritiesChanged(changes); + + if (!_futureContractsAdded || !_fopsContractsAdded) + { + foreach (var addedSecurity in changes.AddedSecurities) + { + // Just making sure we had the data to select and seed futures and future options + _futureContractsAdded |= addedSecurity.Symbol.SecurityType == SecurityType.Future; + _fopsContractsAdded |= addedSecurity.Symbol.SecurityType == SecurityType.FutureOption; + } + } + } + + public override void OnEndOfAlgorithm() + { + if (!_futureContractsAdded) + { + throw new RegressionTestException("No option contracts were added"); + } + + if (!_fopsContractsAdded) + { + throw new RegressionTestException("No future option contracts were added"); + } + } + + /// + /// Data Points count of all timeslices of algorithm + /// + public override long DataPoints => 448; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 453; + } +} diff --git a/Algorithm.CSharp/HSIFutureDailyRegressionAlgorithm.cs b/Algorithm.CSharp/HSIFutureDailyRegressionAlgorithm.cs index 2529ddccfa1c..2c851fdfc754 100644 --- a/Algorithm.CSharp/HSIFutureDailyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/HSIFutureDailyRegressionAlgorithm.cs @@ -36,7 +36,7 @@ public class HSIFutureDailyRegressionAlgorithm : HSIFutureHourRegressionAlgorith /// /// Data Points count of the algorithm history /// - public override int AlgorithmHistoryDataPoints => 17; + public override int AlgorithmHistoryDataPoints => 115; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/HSIFutureHourRegressionAlgorithm.cs b/Algorithm.CSharp/HSIFutureHourRegressionAlgorithm.cs index 637b42ed7b31..7cc7211d1371 100644 --- a/Algorithm.CSharp/HSIFutureHourRegressionAlgorithm.cs +++ b/Algorithm.CSharp/HSIFutureHourRegressionAlgorithm.cs @@ -166,7 +166,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// /// Data Points count of the algorithm history /// - public virtual int AlgorithmHistoryDataPoints => 30; + public virtual int AlgorithmHistoryDataPoints => 133; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/HistoryProviderManagerRegressionAlgorithm.cs b/Algorithm.CSharp/HistoryProviderManagerRegressionAlgorithm.cs index 07499a1fd0ad..1490fd859681 100644 --- a/Algorithm.CSharp/HistoryProviderManagerRegressionAlgorithm.cs +++ b/Algorithm.CSharp/HistoryProviderManagerRegressionAlgorithm.cs @@ -77,7 +77,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 14061; + public int AlgorithmHistoryDataPoints => 100; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/ImmediateExecutionModelWorksWithBinanceFeeModel.cs b/Algorithm.CSharp/ImmediateExecutionModelWorksWithBinanceFeeModel.cs index fcd4655a458b..d6a75735c42e 100644 --- a/Algorithm.CSharp/ImmediateExecutionModelWorksWithBinanceFeeModel.cs +++ b/Algorithm.CSharp/ImmediateExecutionModelWorksWithBinanceFeeModel.cs @@ -75,7 +75,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 60; + public int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/IndexOptionChainApisConsistencyRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionChainApisConsistencyRegressionAlgorithm.cs index b6a759012d6e..d5b6c4b78931 100644 --- a/Algorithm.CSharp/IndexOptionChainApisConsistencyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionChainApisConsistencyRegressionAlgorithm.cs @@ -36,5 +36,10 @@ protected override Option GetOption() /// Data Points count of all timeslices of algorithm /// public override long DataPoints => 2862; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 2; } } diff --git a/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs b/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs index 7ecff5c39405..b1f6534ed443 100644 --- a/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs +++ b/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs @@ -191,7 +191,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 351; + public int AlgorithmHistoryDataPoints => 296; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/InsufficientMarginOrderUpdateRegressionAlgorithm.cs b/Algorithm.CSharp/InsufficientMarginOrderUpdateRegressionAlgorithm.cs index e20792fb57e4..e71d106cd8cc 100644 --- a/Algorithm.CSharp/InsufficientMarginOrderUpdateRegressionAlgorithm.cs +++ b/Algorithm.CSharp/InsufficientMarginOrderUpdateRegressionAlgorithm.cs @@ -159,7 +159,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 60; + public int AlgorithmHistoryDataPoints => 5; /// /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm diff --git a/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs b/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs index f1062955a0f2..ef4a70c268c5 100644 --- a/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs +++ b/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs @@ -111,7 +111,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 7; + public int AlgorithmHistoryDataPoints => 175; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/OptionEquityBaseStrategyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBaseStrategyRegressionAlgorithm.cs index 279a5a315077..e0d16846d3f7 100644 --- a/Algorithm.CSharp/OptionEquityBaseStrategyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBaseStrategyRegressionAlgorithm.cs @@ -80,12 +80,12 @@ protected decimal GetPriceSpreadDifference(params Symbol[] symbols) { if (security.AskPrice != 0) { - spread = security.Price - security.AskPrice; + spread = security.Price - security.Holdings.AveragePrice; } } else if(security.BidPrice != 0) { - spread = security.BidPrice - security.Price; + spread = security.Holdings.AveragePrice - security.Price; } spreadPaid += spread * actualQuantity * security.SymbolProperties.ContractMultiplier; } diff --git a/Algorithm.CSharp/OptionsAutomaticSeedRegressionAlgorithm.cs b/Algorithm.CSharp/OptionsAutomaticSeedRegressionAlgorithm.cs new file mode 100644 index 000000000000..4e123af087ba --- /dev/null +++ b/Algorithm.CSharp/OptionsAutomaticSeedRegressionAlgorithm.cs @@ -0,0 +1,101 @@ +/* + * 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.Data; +using QuantConnect.Data.UniverseSelection; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Regression algorithm asserting that option contracts added via universe selection get automatically seeded by default + /// + public class OptionsAutomaticSeedRegressionAlgorithm : AutomaticSeedBaseRegressionAlgorithm + { + private bool _contractsAdded; + + protected override bool ShouldHaveTradeData => true; + protected override bool ShouldHaveQuoteData => true; + protected override bool ShouldHaveOpenInterestData => true; + + public override void Initialize() + { + SetStartDate(2015, 12, 28); + SetEndDate(2015, 12, 28); + SetCash(100000); + + Settings.SeedInitialPrices = true; + UniverseSettings.Resolution = Resolution.Minute; + + var equity = AddEquity("GOOG"); + + // This security should haven been seeded right away + if (!equity.HasData || equity.Price == 0) + { + throw new RegressionTestException("Equity security was not seeded"); + } + + var option = AddOption(equity.Symbol); + + option.SetFilter(u => u.Strikes(-2, +2).Expiration(0, 180)); + } + + public override void OnData(Slice slice) + { + if (Time.TimeOfDay.Hours > 12) + { + var anotherEquity = AddEquity("SPY", Resolution.Daily); + + // This security should haven been seeded right away + if (!anotherEquity.HasData || anotherEquity.Price == 0) + { + throw new RegressionTestException("Equity security was not seeded"); + } + } + } + + public override void OnSecuritiesChanged(SecurityChanges changes) + { + base.OnSecuritiesChanged(changes); + + if (!_contractsAdded) + { + foreach (var addedSecurity in changes.AddedSecurities) + { + // Just making sure we had the data to select and seed options + _contractsAdded |= addedSecurity.Symbol.SecurityType == SecurityType.Option; + } + } + } + + public override void OnEndOfAlgorithm() + { + if (!_contractsAdded) + { + throw new RegressionTestException("No option contracts were added"); + } + } + + /// + /// Data Points count of all timeslices of algorithm + /// + public override long DataPoints => 4044; + + /// + /// Data Points count of the algorithm history + /// + public override int AlgorithmHistoryDataPoints => 218; + } +} diff --git a/Algorithm.CSharp/OrderSubmissionDataRegressionAlgorithm.cs b/Algorithm.CSharp/OrderSubmissionDataRegressionAlgorithm.cs index 0e1112e41ec0..5fb54088b678 100644 --- a/Algorithm.CSharp/OrderSubmissionDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OrderSubmissionDataRegressionAlgorithm.cs @@ -86,7 +86,7 @@ private void PlaceTrade(string ticker) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 60; + public int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/RegressionTests/CorrelationLastComputedValueRegressionAlgorithm.cs b/Algorithm.CSharp/RegressionTests/CorrelationLastComputedValueRegressionAlgorithm.cs index e532ef49817b..2989c9dbdc6c 100644 --- a/Algorithm.CSharp/RegressionTests/CorrelationLastComputedValueRegressionAlgorithm.cs +++ b/Algorithm.CSharp/RegressionTests/CorrelationLastComputedValueRegressionAlgorithm.cs @@ -97,7 +97,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 72; + public int AlgorithmHistoryDataPoints => 21; /// /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm diff --git a/Algorithm.CSharp/RegressionTests/CustomData/CustomDataUnlinkedTradeBarIconicTypeConsolidationRegressionAlgorithm.cs b/Algorithm.CSharp/RegressionTests/CustomData/CustomDataUnlinkedTradeBarIconicTypeConsolidationRegressionAlgorithm.cs index ffc4d735b3fb..650cff0faf4d 100644 --- a/Algorithm.CSharp/RegressionTests/CustomData/CustomDataUnlinkedTradeBarIconicTypeConsolidationRegressionAlgorithm.cs +++ b/Algorithm.CSharp/RegressionTests/CustomData/CustomDataUnlinkedTradeBarIconicTypeConsolidationRegressionAlgorithm.cs @@ -66,7 +66,7 @@ public override void OnData(Slice slice) /// /// Incrementally updating data /// - private class IncrementallyGeneratedCustomData : UnlinkedDataTradeBar + public class IncrementallyGeneratedCustomData : UnlinkedDataTradeBar { private const decimal _start = 10.01m; private static decimal _step; diff --git a/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs b/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs index 4a0000326b58..193b76e2bb79 100644 --- a/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs @@ -192,7 +192,7 @@ protected virtual void AssertSecurityInitializationCount(Dictionary /// Data Points count of the algorithm history /// - public virtual int AlgorithmHistoryDataPoints => 3848; + public virtual int AlgorithmHistoryDataPoints => 2948; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedFutureContractRegressionAlgorithm.cs b/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedFutureContractRegressionAlgorithm.cs index ce0f494c8b89..fe86a481efbf 100644 --- a/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedFutureContractRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecurityInitializationOnReAdditionForManuallyAddedFutureContractRegressionAlgorithm.cs @@ -49,7 +49,7 @@ protected override Security AddSecurity() /// /// Data Points count of the algorithm history /// - public override int AlgorithmHistoryDataPoints => 48; + public override int AlgorithmHistoryDataPoints => 80; /// /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm diff --git a/Algorithm.CSharp/SetAccountCurrencyCashBuyingPowerModelRegressionAlgorithm.cs b/Algorithm.CSharp/SetAccountCurrencyCashBuyingPowerModelRegressionAlgorithm.cs index 9210b5a0ff33..0f1c623141ed 100644 --- a/Algorithm.CSharp/SetAccountCurrencyCashBuyingPowerModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SetAccountCurrencyCashBuyingPowerModelRegressionAlgorithm.cs @@ -239,7 +239,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 120; + public int AlgorithmHistoryDataPoints => 15; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/SetAccountCurrencySecurityMarginModelRegressionAlgorithm.cs b/Algorithm.CSharp/SetAccountCurrencySecurityMarginModelRegressionAlgorithm.cs index a07fef771bfe..860ec82a273e 100644 --- a/Algorithm.CSharp/SetAccountCurrencySecurityMarginModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SetAccountCurrencySecurityMarginModelRegressionAlgorithm.cs @@ -198,7 +198,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 60; + public int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/StartingCapitalRegressionAlgorithm.cs b/Algorithm.CSharp/StartingCapitalRegressionAlgorithm.cs index 0b6e2bafeff9..de6681e61c76 100644 --- a/Algorithm.CSharp/StartingCapitalRegressionAlgorithm.cs +++ b/Algorithm.CSharp/StartingCapitalRegressionAlgorithm.cs @@ -77,7 +77,7 @@ public override void OnData(Slice slice) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 180; + public int AlgorithmHistoryDataPoints => 25; /// /// Final status of the algorithm @@ -95,7 +95,7 @@ public override void OnData(Slice slice) {"Compounding Annual Return", "0%"}, {"Drawdown", "0%"}, {"Expectancy", "0"}, - {"Start Equity", "76970482.10"}, + {"Start Equity", "77011732.10"}, {"End Equity", "71490762.61"}, {"Net Profit", "0%"}, {"Sharpe Ratio", "0"}, diff --git a/Algorithm.CSharp/TwoLegCurrencyConversionRegressionAlgorithm.cs b/Algorithm.CSharp/TwoLegCurrencyConversionRegressionAlgorithm.cs index ec6492821a38..cad8d5c8a156 100644 --- a/Algorithm.CSharp/TwoLegCurrencyConversionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/TwoLegCurrencyConversionRegressionAlgorithm.cs @@ -111,7 +111,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 120; + public int AlgorithmHistoryDataPoints => 20; /// /// Final status of the algorithm @@ -129,7 +129,7 @@ public override void OnEndOfAlgorithm() {"Compounding Annual Return", "0%"}, {"Drawdown", "0%"}, {"Expectancy", "0"}, - {"Start Equity", "132348.63"}, + {"Start Equity", "132337.76"}, {"End Equity", "131620.05"}, {"Net Profit", "0%"}, {"Sharpe Ratio", "0"}, diff --git a/Algorithm.CSharp/UnsettledCashWhenQuoteCurrencyIsNotAccountCurrencyAlgorithm.cs b/Algorithm.CSharp/UnsettledCashWhenQuoteCurrencyIsNotAccountCurrencyAlgorithm.cs index 858bcd24f6d8..2bb42245d952 100644 --- a/Algorithm.CSharp/UnsettledCashWhenQuoteCurrencyIsNotAccountCurrencyAlgorithm.cs +++ b/Algorithm.CSharp/UnsettledCashWhenQuoteCurrencyIsNotAccountCurrencyAlgorithm.cs @@ -169,7 +169,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 7594; + public int AlgorithmHistoryDataPoints => 50; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/WarmupConversionRatesRegressionAlgorithm.cs b/Algorithm.CSharp/WarmupConversionRatesRegressionAlgorithm.cs index 96c1b0fb5cd1..9c96947d10d8 100644 --- a/Algorithm.CSharp/WarmupConversionRatesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/WarmupConversionRatesRegressionAlgorithm.cs @@ -86,7 +86,7 @@ public override void OnData(Slice slice) /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 180; + public int AlgorithmHistoryDataPoints => 20; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/WarmupDataTypesRegressionAlgorithm.cs b/Algorithm.CSharp/WarmupDataTypesRegressionAlgorithm.cs index 6bf17995a34d..db08422c87f9 100644 --- a/Algorithm.CSharp/WarmupDataTypesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/WarmupDataTypesRegressionAlgorithm.cs @@ -104,7 +104,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public virtual int AlgorithmHistoryDataPoints => 41; + public virtual int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/WarmupTrainRegressionAlgorithm.cs b/Algorithm.CSharp/WarmupTrainRegressionAlgorithm.cs index f5a8a55f05b0..584b04234ae9 100644 --- a/Algorithm.CSharp/WarmupTrainRegressionAlgorithm.cs +++ b/Algorithm.CSharp/WarmupTrainRegressionAlgorithm.cs @@ -73,7 +73,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 7494; + public int AlgorithmHistoryDataPoints => 48; /// /// Final status of the algorithm diff --git a/Algorithm.Python/ConsolidateRegressionAlgorithm.py b/Algorithm.Python/ConsolidateRegressionAlgorithm.py index 90b54060b310..25d4e390cecb 100644 --- a/Algorithm.Python/ConsolidateRegressionAlgorithm.py +++ b/Algorithm.Python/ConsolidateRegressionAlgorithm.py @@ -69,17 +69,12 @@ def initialize(self): # custom data self._custom_data_consolidator = 0 - custom_symbol = self.add_data(Bitcoin, "BTC", Resolution.DAILY).symbol + custom_symbol = self.add_data(Bitcoin, "BTC", Resolution.MINUTE).symbol self.consolidate(custom_symbol, timedelta(1), lambda bar: self.increment_counter(1)) - self._custom_data_consolidator2 = 0 - self.consolidate(custom_symbol, Resolution.DAILY, lambda bar: self.increment_counter(2)) - def increment_counter(self, id): if id == 1: self._custom_data_consolidator += 1 - if id == 2: - self._custom_data_consolidator2 += 1 def update_trade_bar(self, bar, position): self._smas[position].update(bar.end_time, bar.volume) @@ -113,9 +108,6 @@ def on_end_of_algorithm(self): if self._custom_data_consolidator == 0: raise ValueError("Custom data consolidator did not consolidate any data") - if self._custom_data_consolidator2 == 0: - raise ValueError("Custom data consolidator 2 did not consolidate any data") - for i, sma in enumerate(self._smas): if sma.samples != self._expected_consolidation_counts[i]: raise AssertionError(f"Expected {self._expected_consolidation_counts[i]} samples in each SMA but found {sma.samples} in SMA in index {i}") diff --git a/Algorithm.Python/CustomDataUniverseRegressionAlgorithm.py b/Algorithm.Python/CustomDataUniverseRegressionAlgorithm.py index 871fd2b22174..c7f16e7080a9 100644 --- a/Algorithm.Python/CustomDataUniverseRegressionAlgorithm.py +++ b/Algorithm.Python/CustomDataUniverseRegressionAlgorithm.py @@ -67,16 +67,18 @@ def on_end_of_algorithm(self): if len(self._selection_time) != 0: raise ValueError(f"Unexpected selection times, missing {len(self._selection_time)}") - def OnSecuritiesChanged(self, changes): - for security in changes.AddedSecurities: + def on_securities_changed(self, changes): + for security in changes.added_securities: if security.symbol.security_type == SecurityType.BASE: continue - self.current_underlying_symbols.add(security.Symbol) + self.current_underlying_symbols.add(security.symbol) - for security in changes.RemovedSecurities: - if security.symbol.security_type == SecurityType.BASE: + for security in changes.removed_securities: + if (security.symbol.security_type == SecurityType.BASE or + # This check can be removed after GH issue #9055 is resolved + not security.symbol in self.current_underlying_symbols): continue - self.current_underlying_symbols.remove(security.Symbol) + self.current_underlying_symbols.remove(security.symbol) class MyPyCustomData(PythonData): diff --git a/Algorithm.Python/HistoryWithCustomDataSourceRegressionAlgorithm.py b/Algorithm.Python/HistoryWithCustomDataSourceRegressionAlgorithm.py index 7574caf39008..282b1ecf95bc 100644 --- a/Algorithm.Python/HistoryWithCustomDataSourceRegressionAlgorithm.py +++ b/Algorithm.Python/HistoryWithCustomDataSourceRegressionAlgorithm.py @@ -55,6 +55,7 @@ def get_source(self, config, date, is_live_mode): def reader(self, config, line, date, is_live_mode): trade_bar = TradeBar.parse_equity(config, line, date) data = CustomData() + data.Symbol = config.symbol data.time = trade_bar.time data.value = trade_bar.value data.close = trade_bar.close diff --git a/Algorithm/QCAlgorithm.History.cs b/Algorithm/QCAlgorithm.History.cs index 75d178995e62..d9d206e75445 100644 --- a/Algorithm/QCAlgorithm.History.cs +++ b/Algorithm/QCAlgorithm.History.cs @@ -25,12 +25,17 @@ using QuantConnect.Python; using Python.Runtime; using QuantConnect.Data.UniverseSelection; -using QuantConnect.Data.Auxiliary; +using QuantConnect.Configuration; namespace QuantConnect.Algorithm { public partial class QCAlgorithm { + private readonly int SeedLookbackPeriod = Config.GetInt("seed-lookback-period", 5); + private readonly int SeedRetryMinuteLookbackPeriod = Config.GetInt("seed-retry-minute-lookback-period", 24 * 60); + private readonly int SeedRetryHourLookbackPeriod = Config.GetInt("seed-retry-hour-lookback-period", 24); + private readonly int SeedRetryDailyLookbackPeriod = Config.GetInt("seed-retry-daily-lookback-period", 10); + private bool _dataDictionaryTickWarningSent; /// @@ -713,7 +718,7 @@ public IEnumerable GetLastKnownPrices(Security security) } /// - /// Yields data to warmup a security for all it's subscribed data types + /// Yields data to warm up a security for all its subscribed data types /// /// The symbol we want to get seed data for /// Securities historical data @@ -726,61 +731,45 @@ public IEnumerable GetLastKnownPrices(Symbol symbol) return Enumerable.Empty(); } - var result = new Dictionary(); - Resolution? resolution = null; - Func requestData = period => - { - var historyRequests = CreateBarCountHistoryRequests(new[] { symbol }, period) - .Select(request => - { - // For speed and memory usage, use Resolution.Minute as the minimum resolution - request.Resolution = (Resolution)Math.Max((int)Resolution.Minute, (int)request.Resolution); - // force no fill forward behavior - request.FillForwardResolution = null; + var data = GetLastKnownPrices([symbol]); + return data.Values.FirstOrDefault() ?? Enumerable.Empty(); + } - resolution = request.Resolution; - return request; - }) - // request only those tick types we didn't get the data we wanted - .Where(request => !result.ContainsKey(request.TickType)) - .ToList(); - foreach (var slice in History(historyRequests)) - { - for (var i = 0; i < historyRequests.Count; i++) - { - var historyRequest = historyRequests[i]; - var data = slice.Get(historyRequest.DataType); - if (data.ContainsKey(symbol)) - { - // keep the last data point per tick type - result[historyRequest.TickType] = (BaseData)data[symbol]; - } - } - } - // true when all history requests tick types have a data point - return historyRequests.All(request => result.ContainsKey(request.TickType)); - }; + /// + /// Yields data to warm up multiple securities for all their subscribed data types + /// + /// The securities we want to get seed data for + /// Securities historical data + [DocumentationAttribute(AddingData)] + [DocumentationAttribute(HistoricalData)] + public Dictionary> GetLastKnownPrices(IEnumerable securities) + { + return GetLastKnownPrices(securities.Select(s => s.Symbol)); + } - if (!requestData(5)) + /// + /// Yields data to warm up multiple securities for all their subscribed data types + /// + /// The symbols we want to get seed data for + /// Securities historical data + [DocumentationAttribute(AddingData)] + [DocumentationAttribute(HistoricalData)] + public Dictionary> GetLastKnownPrices(IEnumerable symbols) + { + if (HistoryProvider == null) { - if (resolution.HasValue) - { - // If the first attempt to get the last know price returns null, it maybe the case of an illiquid security. - // We increase the look-back period for this case accordingly to the resolution to cover 3 trading days - var periods = - resolution.Value == Resolution.Daily ? 3 : - resolution.Value == Resolution.Hour ? 24 : 1440; - requestData(periods); - } - else - { - // this shouldn't happen but just in case - QuantConnect.Logging.Log.Error( - $"QCAlgorithm.GetLastKnownPrices(): no history request was created for symbol {symbol} at {Time}"); - } + return new Dictionary>(); } - // return the data ordered by time ascending - return result.Values.OrderBy(data => data.Time); + + var data = new Dictionary<(Symbol, Type, TickType), BaseData>(); + GetLastKnownPricesImpl(symbols, data); + + return data + .GroupBy(kvp => kvp.Key.Item1) + .ToDictionary(g => g.Key, + g => g.OrderBy(kvp => kvp.Value.Time) + .ThenBy(kvp => GetTickTypeOrder(kvp.Key.Item1.SecurityType, kvp.Key.Item3)) + .Select(kvp => kvp.Value)); } /// @@ -795,12 +784,149 @@ public IEnumerable GetLastKnownPrices(Symbol symbol) [DocumentationAttribute(HistoricalData)] public BaseData GetLastKnownPrice(Security security) { - return GetLastKnownPrices(security.Symbol) + return GetLastKnownPrice(security.Symbol); + } + + /// + /// Get the last known price using the history provider. + /// Useful for seeding securities with the correct price + /// + /// Symbol for which to retrieve historical data + /// A single object with the last known price + [Obsolete("This method is obsolete please use 'GetLastKnownPrices' which will return the last data point" + + " for each type associated with the requested security")] + [DocumentationAttribute(AddingData)] + [DocumentationAttribute(HistoricalData)] + public BaseData GetLastKnownPrice(Symbol symbol) + { + return GetLastKnownPrices(symbol) // since we are returning a single data point let's respect order .OrderByDescending(data => GetTickTypeOrder(data.Symbol.SecurityType, LeanData.GetCommonTickTypeForCommonDataTypes(data.GetType(), data.Symbol.SecurityType))) .LastOrDefault(); } + private void GetLastKnownPricesImpl(IEnumerable symbols, Dictionary<(Symbol, Type, TickType), BaseData> result, + int attempts = 0, IEnumerable failedRequests = null) + { + IEnumerable historyRequests; + var isRetry = failedRequests != null; + + symbols = symbols?.Where(x => !x.IsCanonical() || x.SecurityType == SecurityType.Future); + + if (attempts == 0) + { + historyRequests = CreateBarCountHistoryRequests(symbols, SeedLookbackPeriod, + fillForward: false, useAllSubscriptions: true) + .SelectMany(request => + { + // Make open interest request daily, higher resolutions will need greater periods to return data + if (request.DataType == typeof(OpenInterest) && request.Resolution < Resolution.Daily) + { + return CreateBarCountHistoryRequests([request.Symbol], typeof(OpenInterest), SeedLookbackPeriod, + Resolution.Daily, fillForward: false, useAllSubscriptions: true); + } + + if (request.Resolution < Resolution.Minute) + { + var dataType = request.DataType; + if (dataType == typeof(Tick)) + { + dataType = request.TickType == TickType.Trade ? typeof(TradeBar) : typeof(QuoteBar); + } + + return CreateBarCountHistoryRequests([request.Symbol], dataType, SeedLookbackPeriod, + Resolution.Minute, fillForward: false, useAllSubscriptions: true); + } + + return [request]; + }); + } + else if (attempts == 1) + { + // If the first attempt to get the last know price returns no data, it maybe the case of an illiquid security. + // We increase the look-back period for this case accordingly to the resolution to cover a longer period + historyRequests = failedRequests + .GroupBy(request => request.Symbol) + .Select(group => + { + var symbolRequests = group.ToArray(); + var resolution = symbolRequests[0].Resolution; + var periods = resolution == Resolution.Daily + ? SeedRetryDailyLookbackPeriod + : resolution == Resolution.Hour ? SeedRetryHourLookbackPeriod : SeedRetryMinuteLookbackPeriod; + return CreateBarCountHistoryRequests([group.Key], periods, resolution, fillForward: false, useAllSubscriptions: true) + .Where(request => symbolRequests.Any(x => x.DataType == request.DataType)); + }) + .SelectMany(x => x); + } + else + { + // Fall back to bigger daily requests as a last resort + historyRequests = CreateBarCountHistoryRequests(failedRequests.Select(x => x.Symbol).Distinct(), + Math.Min(60, 5 * SeedRetryDailyLookbackPeriod), Resolution.Daily, fillForward: false, useAllSubscriptions: true); + } + + var requests = historyRequests.ToArray(); + if (requests.Length == 0) + { + return; + } + + foreach (var slice in History(requests)) + { + for (var i = 0; i < requests.Length; i++) + { + var historyRequest = requests[i]; + + // keep the last data point per tick type + BaseData data = null; + + if (historyRequest.DataType == typeof(QuoteBar)) + { + if (slice.QuoteBars.TryGetValue(historyRequest.Symbol, out var quoteBar)) + { + data = quoteBar; + } + } + else if (historyRequest.DataType == typeof(TradeBar)) + { + if (slice.Bars.TryGetValue(historyRequest.Symbol, out var quoteBar)) + { + data = quoteBar; + } + } + else if (historyRequest.DataType == typeof(OpenInterest)) + { + if (slice.Ticks.TryGetValue(historyRequest.Symbol, out var openInterests)) + { + data = openInterests[0]; + } + } + // No Tick data, resolution is limited to Minute as minimum + else + { + var typeData = slice.Get(historyRequest.DataType); + if (typeData.ContainsKey(historyRequest.Symbol)) + { + data = typeData[historyRequest.Symbol]; + } + } + + if (data != null) + { + result[(historyRequest.Symbol, historyRequest.DataType, historyRequest.TickType)] = data; + } + } + } + + if (attempts < 2) + { + // Give it another try to get data for all symbols and all data types + GetLastKnownPricesImpl(null, result, attempts + 1, + requests.Where((request, i) => !result.ContainsKey((request.Symbol, request.DataType, request.TickType)))); + } + } + /// /// Centralized logic to get data typed history given a list of requests for the specified symbol. /// This method is used to keep backwards compatibility for those History methods that expect an ArgumentException to be thrown @@ -990,7 +1116,7 @@ protected IEnumerable CreateDateRangeHistoryRequests(IEnumerable /// private IEnumerable CreateBarCountHistoryRequests(IEnumerable symbols, int periods, Resolution? resolution = null, bool? fillForward = null, bool? extendedMarketHours = null, DataMappingMode? dataMappingMode = null, - DataNormalizationMode? dataNormalizationMode = null, int? contractDepthOffset = null) + DataNormalizationMode? dataNormalizationMode = null, int? contractDepthOffset = null, bool useAllSubscriptions = false) { // Materialize the symbols to avoid multiple enumeration var symbolsArray = symbols.ToArray(); @@ -1003,7 +1129,8 @@ private IEnumerable CreateBarCountHistoryRequests(IEnumerable @@ -1011,12 +1138,12 @@ private IEnumerable CreateBarCountHistoryRequests(IEnumerable private IEnumerable CreateBarCountHistoryRequests(IEnumerable symbols, Type requestedType, int periods, Resolution? resolution = null, bool? fillForward = null, bool? extendedMarketHours = null, DataMappingMode? dataMappingMode = null, - DataNormalizationMode? dataNormalizationMode = null, int? contractDepthOffset = null) + DataNormalizationMode? dataNormalizationMode = null, int? contractDepthOffset = null, bool useAllSubscriptions = false) { return symbols.Where(HistoryRequestValid).SelectMany(symbol => { // Match or create configs for the symbol - var configs = GetMatchingSubscriptions(symbol, requestedType, resolution).ToList(); + var configs = GetMatchingSubscriptions(symbol, requestedType, resolution, useAllSubscriptions).ToList(); if (configs.Count == 0) { return Enumerable.Empty(); @@ -1043,7 +1170,7 @@ private int GetTickTypeOrder(SecurityType securityType, TickType tickType) return SubscriptionManager.AvailableDataTypes[securityType].IndexOf(tickType); } - private IEnumerable GetMatchingSubscriptions(Symbol symbol, Type type, Resolution? resolution = null) + private IEnumerable GetMatchingSubscriptions(Symbol symbol, Type type, Resolution? resolution = null, bool useAllSubscriptions = false) { var subscriptions = SubscriptionManager.SubscriptionDataConfigService // we add internal subscription so that history requests are covered, this allows us to warm them up too @@ -1068,7 +1195,7 @@ private IEnumerable GetMatchingSubscriptions(Symbol symb else { // Filter subscriptions matching the requested type - matchingSubscriptions = subscriptions.Where(s => SubscriptionDataConfigTypeFilter(type, s.Type)); + matchingSubscriptions = subscriptions.Where(s => SubscriptionDataConfigTypeFilter(type, s.Type, filterOutOpenInterest: !useAllSubscriptions)); } var internalConfig = new List(); @@ -1091,9 +1218,16 @@ private IEnumerable GetMatchingSubscriptions(Symbol symb { configs = userConfig; } - else if (internalConfig.Count != 0) + if ((useAllSubscriptions || configs == null) && internalConfig.Count != 0) { - configs = internalConfig; + if (configs == null) + { + configs = internalConfig; + } + else + { + configs.AddRange(internalConfig); + } } // we use the subscription manager registered configurations here, we can not rely on the Securities collection @@ -1186,7 +1320,7 @@ private IEnumerable GetMatchingSubscriptions(Symbol symb .LookupSubscriptionConfigDataTypes(symbol.SecurityType, res, // for continuous contracts, if we are given a type (or none) that's common (like trade/quote), we respect it symbol.IsCanonical() && (symbol.SecurityType != SecurityType.Future || type != null && !LeanData.IsCommonLeanDataType(type))) - .Where(tuple => SubscriptionDataConfigTypeFilter(type, tuple.Item1)) + .Where(tuple => SubscriptionDataConfigTypeFilter(type, tuple.Item1, filterOutOpenInterest: !useAllSubscriptions)) .Select(x => { var configType = x.Item1; @@ -1220,16 +1354,16 @@ private IEnumerable GetMatchingSubscriptions(Symbol symb /// /// If the target type is , config types will return false. /// This is useful to filter OpenInterest by default from history requests unless it's explicitly requested - private bool SubscriptionDataConfigTypeFilter(Type targetType, Type configType) + private bool SubscriptionDataConfigTypeFilter(Type targetType, Type configType, bool filterOutOpenInterest = true) { if (targetType == null) { - return configType != typeof(OpenInterest); + return !filterOutOpenInterest || configType != typeof(OpenInterest); } var targetIsGenericType = targetType == typeof(BaseData); - return targetType.IsAssignableFrom(configType) && (!targetIsGenericType || configType != typeof(OpenInterest)); + return targetType.IsAssignableFrom(configType) && (!targetIsGenericType || !filterOutOpenInterest || configType != typeof(OpenInterest)); } private SecurityExchangeHours GetExchangeHours(Symbol symbol, Type type = null) diff --git a/Algorithm/QCAlgorithm.Universe.cs b/Algorithm/QCAlgorithm.Universe.cs index caa3b308c0a4..3f249e067498 100644 --- a/Algorithm/QCAlgorithm.Universe.cs +++ b/Algorithm/QCAlgorithm.Universe.cs @@ -76,7 +76,7 @@ public void OnEndOfTimeStep() return; } - var requiredHistoryRequests = new Dictionary(); + var securitiesToSeed = new HashSet(); foreach (var security in Securities.Select(kvp => kvp.Value).Union( _pendingUserDefinedUniverseSecurityChanges.Where(x => x.IsAddition).Select(x => x.Security))) @@ -124,22 +124,9 @@ public void OnEndOfTimeStep() ConfigureUnderlyingSecurity(underlyingSecurity); } - if (LiveMode && underlyingSecurity.GetLastData() == null) + if (LiveMode && !Settings.SeedInitialPrices && underlyingSecurity.GetLastData() == null) { - if (requiredHistoryRequests.ContainsKey(underlyingSecurity)) - { - // lets request the higher resolution - var currentResolutionRequest = requiredHistoryRequests[underlyingSecurity]; - if (currentResolutionRequest != Resolution.Minute // Can not be less than Minute - && resolution < currentResolutionRequest) - { - requiredHistoryRequests[underlyingSecurity] = (Resolution)Math.Max((int)resolution, (int)Resolution.Minute); - } - } - else - { - requiredHistoryRequests.Add(underlyingSecurity, (Resolution)Math.Max((int)resolution, (int)Resolution.Minute)); - } + securitiesToSeed.Add(underlyingSecurity); } // set the underlying security on the derivative -- we do this in two places since it's possible // to do AddOptionContract w/out the underlying already added and normalized properly @@ -151,22 +138,9 @@ public void OnEndOfTimeStep() } } - if (!requiredHistoryRequests.IsNullOrEmpty()) + if (!securitiesToSeed.IsNullOrEmpty()) { - // Create requests - var historyRequests = Enumerable.Empty(); - foreach (var byResolution in requiredHistoryRequests.GroupBy(x => x.Value)) - { - historyRequests = historyRequests.Concat( - CreateBarCountHistoryRequests(byResolution.Select(x => x.Key.Symbol), 3, byResolution.Key)); - } - // Request data - var historicLastData = History(historyRequests); - historicLastData.PushThrough(x => - { - var security = requiredHistoryRequests.Keys.FirstOrDefault(y => y.Symbol == x.Symbol); - security?.Cache.AddData(x); - }); + AlgorithmUtils.SeedSecurities(securitiesToSeed, this); } // add subscriptionDataConfig to their respective user defined universes diff --git a/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs b/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs index 5b11d40c5959..8cd9fce81516 100644 --- a/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs +++ b/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs @@ -1087,9 +1087,23 @@ public void OnWarmupFinished() /// Get the last known price using the history provider. /// Useful for seeding securities with the correct price /// - /// object for which to retrieve historical data + /// Symbol for which to retrieve historical data /// A single object with the last known price - public BaseData GetLastKnownPrice(Security security) => _baseAlgorithm.GetLastKnownPrice(security); + public BaseData GetLastKnownPrice(Symbol symbol) => _baseAlgorithm.GetLastKnownPrice(symbol); + + /// + /// Yields data to warmup a security for all it's subscribed data types + /// + /// Symbol for which to retrieve historical data + /// Securities historical data + public IEnumerable GetLastKnownPrices(Symbol symbol) => _baseAlgorithm.GetLastKnownPrices(symbol); + + /// + /// Yields data to warm up multiple securities for all their subscribed data types + /// + /// The symbols we want to get seed data for + /// Securities historical data + public Dictionary> GetLastKnownPrices(IEnumerable symbols) => _baseAlgorithm.GetLastKnownPrices(symbols); /// /// Set the runtime error diff --git a/Common/AlgorithmSettings.cs b/Common/AlgorithmSettings.cs index e8eaec146a7e..ae79dfd43544 100644 --- a/Common/AlgorithmSettings.cs +++ b/Common/AlgorithmSettings.cs @@ -173,6 +173,11 @@ public Resolution? WarmUpResolution /// public TimeSpan PerformanceSamplePeriod { get; set; } + /// + /// Determines whether to seed initial prices for all selected and manually added securities. + /// + public bool SeedInitialPrices { get; set; } + /// /// Initializes a new instance of the class /// @@ -189,6 +194,7 @@ public AlgorithmSettings() MinAbsolutePortfolioTargetPercentage = 0.0000000001m; DatabasesRefreshPeriod = _defaultDatabasesRefreshPeriod; IgnoreUnknownAssetHoldings = _defaultIgnoreUnknownAssetHoldings; + SeedInitialPrices = false; } } } diff --git a/Common/AlgorithmUtils.cs b/Common/AlgorithmUtils.cs new file mode 100644 index 000000000000..df62c3b46b93 --- /dev/null +++ b/Common/AlgorithmUtils.cs @@ -0,0 +1,50 @@ +/* + * 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; +using QuantConnect.Securities; +using System.Collections.Generic; +using System.Linq; + +namespace QuantConnect +{ + /// + /// Provides utility methods for or related to algorithms + /// + public static class AlgorithmUtils + { + /// + /// Seeds the provided securities with their last known prices from the algorithm + /// + /// The securities to seed + /// The algorithm instance + public static void SeedSecurities(IReadOnlyCollection securities, IAlgorithm algorithm) + { + var securitiesToSeed = securities.Where(x => x.Price == 0); + var data = algorithm.GetLastKnownPrices(securitiesToSeed.Select(x => x.Symbol)); + + foreach (var security in securitiesToSeed) + { + if (data.TryGetValue(security.Symbol, out var seedData)) + { + foreach (var datum in seedData) + { + security.SetMarketPrice(datum); + } + } + } + } + } +} diff --git a/Common/Interfaces/IAlgorithm.cs b/Common/Interfaces/IAlgorithm.cs index 4fb640376b27..2ac9f8392b3f 100644 --- a/Common/Interfaces/IAlgorithm.cs +++ b/Common/Interfaces/IAlgorithm.cs @@ -839,9 +839,23 @@ Security AddSecurity(Symbol symbol, Resolution? resolution = null, bool fillForw /// Get the last known price using the history provider. /// Useful for seeding securities with the correct price /// - /// object for which to retrieve historical data + /// The symbol for which to retrieve historical data /// A single object with the last known price - BaseData GetLastKnownPrice(Security security); + BaseData GetLastKnownPrice(Symbol symbol); + + /// + /// Yields data to warmup a security for all it's subscribed data types + /// + /// The symbol for which to retrieve historical data + /// Securities historical data + IEnumerable GetLastKnownPrices(Symbol symbol); + + /// + /// Yields data to warm up multiple securities for all their subscribed data types + /// + /// The symbols we want to get seed data for + /// Securities historical data + Dictionary> GetLastKnownPrices(IEnumerable symbols); /// /// Set the runtime error diff --git a/Common/Interfaces/IAlgorithmSettings.cs b/Common/Interfaces/IAlgorithmSettings.cs index e30072063e1f..7e71531f1078 100644 --- a/Common/Interfaces/IAlgorithmSettings.cs +++ b/Common/Interfaces/IAlgorithmSettings.cs @@ -143,5 +143,10 @@ public interface IAlgorithmSettings /// Performance tracking sample period to use if any, useful to debug performance issues /// TimeSpan PerformanceSamplePeriod { get; set; } + + /// + /// Determines whether to seed initial prices for all selected and manually added securities. + /// + bool SeedInitialPrices { get; set; } } } diff --git a/Common/Interfaces/ISecurityService.cs b/Common/Interfaces/ISecurityService.cs index 5d7f362f389d..466fcb8c7cc1 100644 --- a/Common/Interfaces/ISecurityService.cs +++ b/Common/Interfaces/ISecurityService.cs @@ -34,7 +34,8 @@ Security CreateSecurity(Symbol symbol, List subscriptionDataConfigList, decimal leverage = 0, bool addToSymbolCache = true, - Security underlying = null); + Security underlying = null, + bool seedSecurity = true); /// /// Creates a new security @@ -45,7 +46,8 @@ Security CreateSecurity(Symbol symbol, SubscriptionDataConfig subscriptionDataConfig, decimal leverage = 0, bool addToSymbolCache = true, - Security underlying = null); + Security underlying = null, + bool seedSecurity = true); /// /// Creates a new benchmark security diff --git a/Common/Securities/Cash.cs b/Common/Securities/Cash.cs index 6858ab484c9e..a561c1f87666 100644 --- a/Common/Securities/Cash.cs +++ b/Common/Securities/Cash.cs @@ -316,7 +316,9 @@ public List EnsureCurrencyDataFeed(SecurityManager secur var newSecurity = securityService.CreateSecurity(symbol, config, - addToSymbolCache: false); + addToSymbolCache: false, + // All securities added for currency conversion will be seeded in batch after all are created + seedSecurity: false); Log.Trace("Cash.EnsureCurrencyDataFeed(): " + Messages.Cash.AddingSecuritySymbolForCashCurrencyFeed(symbol, Symbol)); diff --git a/Common/Securities/SecurityService.cs b/Common/Securities/SecurityService.cs index 9ba4d2a80fa0..aab216a7f11b 100644 --- a/Common/Securities/SecurityService.cs +++ b/Common/Securities/SecurityService.cs @@ -73,10 +73,14 @@ private Security CreateSecurity(Symbol symbol, bool addToSymbolCache, Security underlying, bool initializeSecurity, - bool reCreateSecurity) + bool reCreateSecurity, + bool seedSecurity) { var configList = new SubscriptionDataConfigList(symbol); - configList.AddRange(subscriptionDataConfigList); + if (subscriptionDataConfigList != null) + { + configList.AddRange(subscriptionDataConfigList); + } if (!reCreateSecurity && _algorithm != null && _algorithm.Securities.TryGetValue(symbol, out var existingSecurity)) { @@ -88,7 +92,7 @@ private Security CreateSecurity(Symbol symbol, existingSecurity.MakeTradable(); } - InitializeSecurity(initializeSecurity, existingSecurity); + InitializeSecurity(initializeSecurity, existingSecurity, seedSecurity); return existingSecurity; } @@ -231,7 +235,7 @@ private Security CreateSecurity(Symbol symbol, security.AddData(configList); // invoke the security initializer - InitializeSecurity(initializeSecurity, security); + InitializeSecurity(initializeSecurity, security, seedSecurity); CheckCanonicalSecurityModels(security); @@ -262,10 +266,11 @@ public Security CreateSecurity(Symbol symbol, List subscriptionDataConfigList, decimal leverage = 0, bool addToSymbolCache = true, - Security underlying = null) + Security underlying = null, + bool seedSecurity = true) { return CreateSecurity(symbol, subscriptionDataConfigList, leverage, addToSymbolCache, underlying, - initializeSecurity: true, reCreateSecurity: false); + initializeSecurity: true, reCreateSecurity: false, seedSecurity: seedSecurity); } /// @@ -273,9 +278,14 @@ public Security CreateSecurity(Symbol symbol, /// /// Following the obsoletion of Security.Subscriptions, /// both overloads will be merged removing arguments - public Security CreateSecurity(Symbol symbol, SubscriptionDataConfig subscriptionDataConfig, decimal leverage = 0, bool addToSymbolCache = true, Security underlying = null) + public Security CreateSecurity(Symbol symbol, + SubscriptionDataConfig subscriptionDataConfig, + decimal leverage = 0, + bool addToSymbolCache = true, + Security underlying = null, + bool seedSecurity = true) { - return CreateSecurity(symbol, new List { subscriptionDataConfig }, leverage, addToSymbolCache, underlying); + return CreateSecurity(symbol, new List { subscriptionDataConfig }, leverage, addToSymbolCache, underlying, seedSecurity); } /// @@ -291,7 +301,8 @@ public Security CreateBenchmarkSecurity(Symbol symbol) addToSymbolCache: false, underlying: null, initializeSecurity: false, - reCreateSecurity: true); + reCreateSecurity: true, + seedSecurity: false); } /// @@ -328,10 +339,15 @@ private void CheckCanonicalSecurityModels(Security security) } } - private void InitializeSecurity(bool initializeSecurity, Security security) + private void InitializeSecurity(bool initializeSecurity, Security security, bool seedSecurity) { if (initializeSecurity && !security.IsInitialized) { + if (seedSecurity && _algorithm.Settings.SeedInitialPrices) + { + AlgorithmUtils.SeedSecurities([security], _algorithm); + } + _securityInitializerProvider.SecurityInitializer.Initialize(security); security.IsInitialized = true; } diff --git a/Engine/DataFeeds/UniverseSelection.cs b/Engine/DataFeeds/UniverseSelection.cs index 14ca3bd5a3ab..3a8a2e2c16fd 100644 --- a/Engine/DataFeeds/UniverseSelection.cs +++ b/Engine/DataFeeds/UniverseSelection.cs @@ -313,6 +313,8 @@ public SecurityChanges ApplyUniverseSelection(Universe universe, DateTime dateTi Log.Debug("UniverseSelection.ApplyUniverseSelection(): " + dateTimeUtc + ": " + securityChanges); } + SeedAddedSecurities(securityChanges); + return securityChanges; } @@ -496,12 +498,26 @@ private Security GetOrCreateSecurity(Dictionary pendingAdditio Security security; if (!pendingAdditions.TryGetValue(symbol, out security)) { - security = _securityService.CreateSecurity(symbol, new List(), universeSettings.Leverage, symbol.ID.SecurityType.IsOption(), underlying); + security = _securityService.CreateSecurity(symbol, + (List)null, + universeSettings.Leverage, + symbol.ID.SecurityType.IsOption(), + underlying, + // Securities will be seeded after all selections are applied + seedSecurity: false); pendingAdditions.Add(symbol, security); } return security; } + + private void SeedAddedSecurities(SecurityChanges changes) + { + if (_algorithm.Settings.SeedInitialPrices) + { + AlgorithmUtils.SeedSecurities(changes.AddedSecurities, _algorithm); + } + } } } diff --git a/Engine/Setup/BaseSetupHandler.cs b/Engine/Setup/BaseSetupHandler.cs index 7fc933084e64..44998da47fc9 100644 --- a/Engine/Setup/BaseSetupHandler.cs +++ b/Engine/Setup/BaseSetupHandler.cs @@ -29,7 +29,6 @@ using QuantConnect.Lean.Engine.DataFeeds; using QuantConnect.Data.UniverseSelection; using QuantConnect.Lean.Engine.DataFeeds.WorkScheduling; -using HistoryRequest = QuantConnect.Data.HistoryRequest; using QuantConnect.Securities; namespace QuantConnect.Lean.Engine.Setup @@ -99,95 +98,13 @@ public static void SetupCurrencyConversions( .Distinct() .ToList(); - var historyRequestFactory = new HistoryRequestFactory(algorithm); - var historyRequests = new List(); - foreach (var security in securitiesToUpdate) - { - var configs = algorithm - .SubscriptionManager - .SubscriptionDataConfigService - .GetSubscriptionDataConfigs(security.Symbol, - includeInternalConfigs: true); - - // we need to order and select a specific configuration type - // so the conversion rate is deterministic - var configToUse = configs.OrderBy(x => x.TickType).First(); - var hours = security.Exchange.Hours; - - var resolution = configs.GetHighestResolution(); - var startTime = historyRequestFactory.GetStartTimeAlgoTz( - security.Symbol, - 60, - resolution, - hours, - configToUse.DataTimeZone, - configToUse.Type); - var endTime = algorithm.Time; - - historyRequests.Add(historyRequestFactory.CreateHistoryRequest( - configToUse, - startTime, - endTime, - security.Exchange.Hours, - resolution)); - } - - // Attempt to get history for these requests and update cash - var slices = algorithm.HistoryProvider.GetHistory(historyRequests, algorithm.TimeZone); - slices.PushThrough(data => - { - foreach (var security in securitiesToUpdate.Where(x => x.Symbol == data.Symbol)) - { - security.SetMarketPrice(data); - } - }); + AlgorithmUtils.SeedSecurities(securitiesToUpdate, algorithm); foreach (var cash in cashToUpdate) { cash.Update(); } - // Any remaining unassigned cash will attempt to fall back to a daily resolution history request to resolve - var unassignedCash = cashToUpdate.Where(x => x.ConversionRate == 0).ToList(); - if (unassignedCash.Any()) - { - Log.Trace( - $"Failed to assign conversion rates for the following cash: {string.Join(",", unassignedCash.Select(x => x.Symbol))}." + - $" Attempting to request daily resolution history to resolve conversion rate"); - - var unassignedCashSymbols = unassignedCash - .SelectMany(x => x.SecuritySymbols) - .ToHashSet(); - - var replacementHistoryRequests = new List(); - foreach (var request in historyRequests.Where(x => - unassignedCashSymbols.Contains(x.Symbol) && x.Resolution < Resolution.Daily)) - { - var newRequest = new HistoryRequest(request.EndTimeUtc.AddDays(-10), request.EndTimeUtc, - request.DataType, - request.Symbol, Resolution.Daily, request.ExchangeHours, request.DataTimeZone, - request.FillForwardResolution, - request.IncludeExtendedMarketHours, request.IsCustomData, request.DataNormalizationMode, - request.TickType); - - replacementHistoryRequests.Add(newRequest); - } - - slices = algorithm.HistoryProvider.GetHistory(replacementHistoryRequests, algorithm.TimeZone); - slices.PushThrough(data => - { - foreach (var security in securitiesToUpdate.Where(x => x.Symbol == data.Symbol)) - { - security.SetMarketPrice(data); - } - }); - - foreach (var cash in unassignedCash) - { - cash.Update(); - } - } - Log.Trace($"BaseSetupHandler.SetupCurrencyConversions():{Environment.NewLine}" + $"Account Type: {algorithm.BrokerageModel.AccountType}{Environment.NewLine}{Environment.NewLine}{algorithm.Portfolio.CashBook}"); // this is useful for debugging diff --git a/Launcher/config.json b/Launcher/config.json index 8a83567be959..fbe48f9ee6e7 100644 --- a/Launcher/config.json +++ b/Launcher/config.json @@ -48,6 +48,12 @@ "symbol-second-limit": 10000, "symbol-tick-limit": 10000, + // retry lookback periods for automatic security seed history requests + "seed-lookback-period": 5, + "seed-retry-minute-lookback-period": 1440, + "seed-retry-hour-lookback-period": 24, + "seed-retry-daily-lookback-period": 10, + // Ignore unknown asset types from brokerages "ignore-unknown-asset-holdings": true, diff --git a/Tests/Algorithm/AlgorithmAddDataTests.cs b/Tests/Algorithm/AlgorithmAddDataTests.cs index 1074a637fd8e..374c654efd26 100644 --- a/Tests/Algorithm/AlgorithmAddDataTests.cs +++ b/Tests/Algorithm/AlgorithmAddDataTests.cs @@ -179,6 +179,7 @@ public void OnEndOfTimeStepSeedsUnderlyingSecuritiesThatHaveNoData() var qcAlgorithm = new QCAlgorithm(); qcAlgorithm.SubscriptionManager.SetDataManager(new DataManagerStub(qcAlgorithm, new MockDataFeed())); qcAlgorithm.SetLiveMode(true); + qcAlgorithm.Settings.SeedInitialPrices = false; var testHistoryProvider = new TestHistoryProvider(); qcAlgorithm.HistoryProvider = testHistoryProvider; @@ -201,6 +202,7 @@ public void OnEndOfTimeStepDoesNotThrowWhenSeedsSameUnderlyingForTwoSecurities() var qcAlgorithm = new QCAlgorithm(); qcAlgorithm.SubscriptionManager.SetDataManager(new DataManagerStub(qcAlgorithm, new MockDataFeed())); qcAlgorithm.SetLiveMode(true); + qcAlgorithm.Settings.SeedInitialPrices = false; var testHistoryProvider = new TestHistoryProvider(); qcAlgorithm.HistoryProvider = testHistoryProvider; var option = qcAlgorithm.AddOption(testHistoryProvider.underlyingSymbol); @@ -215,7 +217,6 @@ public void OnEndOfTimeStepDoesNotThrowWhenSeedsSameUnderlyingForTwoSecurities() qcAlgorithm.OnEndOfTimeStep(); var data = qcAlgorithm.Securities[testHistoryProvider.underlyingSymbol].GetLastData(); - Assert.AreEqual(testHistoryProvider.LastResolutionRequest, Resolution.Minute); Assert.IsNotNull(data); Assert.AreEqual(data.Price, 2); } @@ -728,7 +729,6 @@ private class TestHistoryProvider : HistoryProviderBase public string underlyingSymbol = "GOOG"; public string underlyingSymbol2 = "AAPL"; public override int DataPointCount { get; } - public Resolution LastResolutionRequest; public override void Initialize(HistoryProviderInitializeParameters parameters) { @@ -738,12 +738,11 @@ public override void Initialize(HistoryProviderInitializeParameters parameters) public override IEnumerable GetHistory(IEnumerable requests, DateTimeZone sliceTimeZone) { var now = DateTime.UtcNow; - LastResolutionRequest = requests.First().Resolution; #pragma warning disable CS0618 var tradeBar1 = new TradeBar(now, underlyingSymbol, 1, 1, 1, 1, 1, TimeSpan.FromDays(1)); var tradeBar2 = new TradeBar(now, underlyingSymbol2, 3, 3, 3, 3, 3, TimeSpan.FromDays(1)); var slice1 = new Slice(now, new List { tradeBar1, tradeBar2 }, - new TradeBars(now), new QuoteBars(), + new TradeBars(now) { tradeBar1, tradeBar2 }, new QuoteBars(), new Ticks(), new OptionChains(), new FuturesChains(), new Splits(), new Dividends(now), new Delistings(), @@ -751,7 +750,7 @@ public override IEnumerable GetHistory(IEnumerable reques var tradeBar1_2 = new TradeBar(now, underlyingSymbol, 2, 2, 2, 2, 2, TimeSpan.FromDays(1)); #pragma warning restore CS0618 var slice2 = new Slice(now, new List { tradeBar1_2 }, - new TradeBars(now), new QuoteBars(), + new TradeBars(now) { tradeBar1_2 }, new QuoteBars(), new Ticks(), new OptionChains(), new FuturesChains(), new Splits(), new Dividends(now), new Delistings(), diff --git a/Tests/Algorithm/AlgorithmHistoryTests.cs b/Tests/Algorithm/AlgorithmHistoryTests.cs index 7e62b3eca925..68ff1646e18c 100644 --- a/Tests/Algorithm/AlgorithmHistoryTests.cs +++ b/Tests/Algorithm/AlgorithmHistoryTests.cs @@ -522,6 +522,7 @@ def getTickHistory(algorithm, symbol, start, end): public void TimeSpanHistoryRequestIsCorrectlyBuilt(Resolution resolution, Language language, bool symbolAlreadyAdded) { _algorithm.SetStartDate(2013, 10, 07); + _algorithm.Settings.SeedInitialPrices = false; var symbol = Symbols.SPY; if (symbolAlreadyAdded) @@ -618,6 +619,7 @@ public void BarCountHistoryRequestIsCorrectlyBuilt(Resolution? resolution, Langu bool symbolAlreadyAdded, DateTime dateTime, Resolution? defaultResolution, bool multiSymbol) { _algorithm.SetStartDate(dateTime); + _algorithm.Settings.SeedInitialPrices = false; if (symbolAlreadyAdded) { @@ -695,6 +697,7 @@ public void BarCountHistoryRequestIsCorrectlyBuilt(Resolution? resolution, Langu public void TickHistoryRequestIgnoresFillForward(Language language, bool symbolAlreadyAdded) { _algorithm.SetStartDate(2013, 10, 07); + _algorithm.Settings.SeedInitialPrices = false; var symbol = Symbols.SPY; if (symbolAlreadyAdded) @@ -895,9 +898,10 @@ public void GetLastKnownPricesOption() var option = algorithm.AddOptionContract(Symbols.CreateOptionSymbol("AAPL", OptionRight.Call, 250m, new DateTime(2016, 01, 15))); var lastKnownPrices = algorithm.GetLastKnownPrices(option).ToList(); - Assert.AreEqual(2, lastKnownPrices.Count); + Assert.AreEqual(3, lastKnownPrices.Count); Assert.AreEqual(1, lastKnownPrices.Count(data => data.GetType() == typeof(TradeBar))); Assert.AreEqual(1, lastKnownPrices.Count(data => data.GetType() == typeof(QuoteBar))); + Assert.AreEqual(1, lastKnownPrices.Count(data => data.GetType() == typeof(OpenInterest))); } [Test] @@ -919,9 +923,10 @@ public void GetLastKnownPricesFuture() var future = algorithm.AddSecurity(Symbols.CreateFutureSymbol(Futures.Indices.SP500EMini, new DateTime(2013, 12, 20))); var lastKnownPrices = algorithm.GetLastKnownPrices(future).ToList(); - Assert.AreEqual(2, lastKnownPrices.Count); + Assert.AreEqual(3, lastKnownPrices.Count); Assert.AreEqual(1, lastKnownPrices.Count(data => data.GetType() == typeof(TradeBar))); Assert.AreEqual(1, lastKnownPrices.Count(data => data.GetType() == typeof(QuoteBar))); + Assert.AreEqual(1, lastKnownPrices.Count(data => data.GetType() == typeof(OpenInterest))); } [TestCase(Language.CSharp)] diff --git a/Tests/Algorithm/AlgorithmRegisterIndicatorTests.cs b/Tests/Algorithm/AlgorithmRegisterIndicatorTests.cs index a5c49c6d4b30..3bdaa6f0156b 100644 --- a/Tests/Algorithm/AlgorithmRegisterIndicatorTests.cs +++ b/Tests/Algorithm/AlgorithmRegisterIndicatorTests.cs @@ -211,7 +211,7 @@ from QuantConnect.Lean.Engine.DataFeeds import * marketHoursDatabase = MarketHoursDatabase.FromDataFolder() symbolPropertiesDatabase = SymbolPropertiesDatabase.FromDataFolder() -securityService = SecurityService(algo.Portfolio.CashBook, marketHoursDatabase, symbolPropertiesDatabase, algo, RegisteredSecurityDataTypesProvider.Null, SecurityCacheProvider(algo.Portfolio)) +securityService = SecurityService(algo.Portfolio.CashBook, marketHoursDatabase, symbolPropertiesDatabase, algo, RegisteredSecurityDataTypesProvider.Null, SecurityCacheProvider(algo.Portfolio), algorithm=algo) algo.Securities.SetSecurityService(securityService) dataPermissionManager = DataPermissionManager() dataManager = DataManager(None, UniverseSelection(algo, securityService, dataPermissionManager, None), algo, algo.TimeKeeper, marketHoursDatabase, False, RegisteredSecurityDataTypesProvider.Null, dataPermissionManager) diff --git a/Tests/Algorithm/AlgorithmWarmupTests.cs b/Tests/Algorithm/AlgorithmWarmupTests.cs index 30022c250087..f65706cba63d 100644 --- a/Tests/Algorithm/AlgorithmWarmupTests.cs +++ b/Tests/Algorithm/AlgorithmWarmupTests.cs @@ -121,6 +121,7 @@ public void WarmUpInternalSubscriptions() { HistoryProvider = new SubscriptionDataReaderHistoryProvider() }; + algo.Settings.SeedInitialPrices = false; algo.SetStartDate(2013, 10, 08); algo.AddCfd("DE30EUR", Resolution.Second, Market.Oanda); diff --git a/Tests/Common/Data/UniverseSelection/UserDefinedUniverseTests.cs b/Tests/Common/Data/UniverseSelection/UserDefinedUniverseTests.cs index 6bb8385787f2..02b43466e5cf 100644 --- a/Tests/Common/Data/UniverseSelection/UserDefinedUniverseTests.cs +++ b/Tests/Common/Data/UniverseSelection/UserDefinedUniverseTests.cs @@ -53,6 +53,8 @@ public override void Initialize() SetStartDate(2013, 10, 07); SetEndDate(2013, 10, 11); + Settings.SeedInitialPrices = false; + #pragma warning disable CS0618 var spy = AddEquity("SPY", Resolution.Minute, dataNormalizationMode: DataNormalizationMode.Raw).Symbol; diff --git a/Tests/Engine/Setup/BrokerageSetupHandlerTests.cs b/Tests/Engine/Setup/BrokerageSetupHandlerTests.cs index 2e9dbffabf8f..09eb0309d897 100644 --- a/Tests/Engine/Setup/BrokerageSetupHandlerTests.cs +++ b/Tests/Engine/Setup/BrokerageSetupHandlerTests.cs @@ -33,11 +33,14 @@ using QuantConnect.Securities; using QuantConnect.Securities.Option.StrategyMatcher; using QuantConnect.Securities.Option; -using QuantConnect.Tests.Common.Securities; using QuantConnect.Tests.Engine.DataFeeds; using QuantConnect.Util; using Bitcoin = QuantConnect.Algorithm.CSharp.LiveTradingFeaturesAlgorithm.Bitcoin; using System.Collections; +using QuantConnect.Configuration; +using NodaTime; +using QuantConnect.Data.Market; +using QuantConnect.Data; namespace QuantConnect.Tests.Engine.Setup { @@ -887,6 +890,28 @@ public bool TestLoadExistingHoldingsAndOrders(IBrokerage brokerage, IAlgorithm a return LoadExistingHoldingsAndOrders(brokerage, algorithm, parameters); } } + + private class TestHistoryProvider : HistoryProviderBase + { + public override int DataPointCount { get; } + public override void Initialize(HistoryProviderInitializeParameters parameters) + { + throw new NotImplementedException(); + } + + public override IEnumerable GetHistory(IEnumerable requests, DateTimeZone sliceTimeZone) + { + var requestsList = requests.ToList(); + if (requestsList.Count == 0) + { + return Enumerable.Empty(); + } + + var request = requestsList[0]; + return new List{ new Slice(DateTime.UtcNow, + new List {new QuoteBar(DateTime.MinValue, request.Symbol, new Bar(1, 2, 3, 4), 5, new Bar(1, 2, 3, 4), 5) }, DateTime.UtcNow)}; + } + } } internal class TestBrokerageFactory : BrokerageFactory From 95739b8a584fd89d41645133b9e4adac3301e228 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Tue, 18 Nov 2025 16:23:29 -0300 Subject: [PATCH 016/103] Increase option strike digits precision to 6 (#9086) * Increase option strike digits precision to 6 - Increase option strike digits precision to 6. Adding unit test * test:fix: couple of build tests * fix:test: Asset CUSIP and OrderListHash in Regression Algorithms * test:fix: several regression algos * test:fix: old Symbol CUSIPs to new ones --------- Co-authored-by: Romazes --- ...tractFromFutureChainRegressionAlgorithm.cs | 4 +- ...ctedInUniverseFilterRegressionAlgorithm.cs | 4 +- ...ptionContractExpiresRegressionAlgorithm.cs | 4 +- ...ContractFromUniverseRegressionAlgorithm.cs | 4 +- ...dOptionContractTwiceRegressionAlgorithm.cs | 4 +- ...RemoveOptionUniverseRegressionAlgorithm.cs | 4 +- ...oveOneOptionContractRegressionAlgorithm.cs | 4 +- ...BacktestingBrokerageRegressionAlgorithm.cs | 2 +- .../BasicTemplateIndexAlgorithm.cs | 4 +- .../BasicTemplateIndexDailyAlgorithm.cs | 4 +- .../BasicTemplateIndexHourlyAlgorithm.cs | 4 +- ...BasicTemplateIndexOptionsDailyAlgorithm.cs | 4 +- ...asicTemplateIndexOptionsHourlyAlgorithm.cs | 4 +- ...icTemplateOptionEquityStrategyAlgorithm.cs | 4 +- .../BasicTemplateOptionStrategyAlgorithm.cs | 4 +- .../BasicTemplateOptionsAlgorithm.cs | 4 +- .../BasicTemplateOptionsDailyAlgorithm.cs | 4 +- ...cTemplateOptionsFilterUniverseAlgorithm.cs | 2 +- .../BasicTemplateOptionsFrameworkAlgorithm.cs | 2 +- .../BasicTemplateOptionsHourlyAlgorithm.cs | 4 +- ...cTemplateSPXWeeklyIndexOptionsAlgorithm.cs | 4 +- ...eSPXWeeklyIndexOptionsStrategyAlgorithm.cs | 4 +- .../BasicTemplateTradableIndexAlgorithm.cs | 4 +- ...eOptionUniverseChainRegressionAlgorithm.cs | 2 +- .../ComboLegLimitOrderAlgorithm.cs | 4 +- Algorithm.CSharp/ComboLimitOrderAlgorithm.cs | 4 +- Algorithm.CSharp/ComboMarketOrderAlgorithm.cs | 4 +- .../ComboOrderTicketDemoAlgorithm.cs | 4 +- ...redAndProtectiveCallStrategiesAlgorithm.cs | 4 +- ...eredAndProtectivePutStrategiesAlgorithm.cs | 4 +- .../CoveredCallComboLimitOrderAlgorithm.cs | 4 +- ...stomOptionAssignmentRegressionAlgorithm.cs | 4 +- ...mOptionExerciseModelRegressionAlgorithm.cs | 4 +- ...aultMarginComboOrderRegressionAlgorithm.cs | 2 +- ...MarginMultipleOrdersRegressionAlgorithm.cs | 2 +- ...mentAfterManualSecurityRemovalAlgorithm.cs | 4 +- .../DelistedIndexOptionDivestedRegression.cs | 4 +- ...ingFutureOptionDailyRegressionAlgorithm.cs | 4 +- ...elistingFutureOptionRegressionAlgorithm.cs | 4 +- ...cateOptionAssignmentRegressionAlgorithm.cs | 4 +- ...xercisedBeforeExpiryRegressionAlgorithm.cs | 4 +- ...nBuySellCallIntradayRegressionAlgorithm.cs | 4 +- ...eOptionCallITMExpiryRegressionAlgorithm.cs | 4 +- ...nCallITMGreeksExpiryRegressionAlgorithm.cs | 4 +- ...eOptionCallOTMExpiryRegressionAlgorithm.cs | 4 +- ...eOptionChainFullDataRegressionAlgorithm.cs | 4 +- ...ainsMultipleFullDataRegressionAlgorithm.cs | 4 +- .../FutureOptionDailyRegressionAlgorithm.cs | 4 +- .../FutureOptionHourlyRegressionAlgorithm.cs | 4 +- ...SameUnderlyingFutureRegressionAlgorithm.cs | 4 +- ...reOptionPutITMExpiryRegressionAlgorithm.cs | 4 +- ...reOptionPutOTMExpiryRegressionAlgorithm.cs | 4 +- ...onShortCallITMExpiryRegressionAlgorithm.cs | 4 +- ...onShortCallOTMExpiryRegressionAlgorithm.cs | 4 +- ...ionShortPutITMExpiryRegressionAlgorithm.cs | 4 +- ...ionShortPutOTMExpiryRegressionAlgorithm.cs | 4 +- ...ryTimeAndLiquidationRegressionAlgorithm.cs | 2 +- ...nBuySellCallIntradayRegressionAlgorithm.cs | 4 +- ...onCallITMExpiryDailyRegressionAlgorithm.cs | 4 +- ...xOptionCallITMExpiryRegressionAlgorithm.cs | 4 +- ...nCallITMGreeksExpiryRegressionAlgorithm.cs | 4 +- ...onCallOTMExpiryDailyRegressionAlgorithm.cs | 4 +- ...xOptionCallOTMExpiryRegressionAlgorithm.cs | 4 +- ...exOptionPutITMExpiryRegressionAlgorithm.cs | 4 +- ...exOptionPutOTMExpiryRegressionAlgorithm.cs | 4 +- ...exOptionScaledStrikeRegressionAlgorithm.cs | 4 +- ...onShortCallITMExpiryRegressionAlgorithm.cs | 4 +- ...onShortCallOTMExpiryRegressionAlgorithm.cs | 4 +- ...ionShortPutITMExpiryRegressionAlgorithm.cs | 4 +- ...ionShortPutOTMExpiryRegressionAlgorithm.cs | 4 +- ...ForAutomaticExerciseRegressionAlgorithm.cs | 4 +- ...IndexOptionsExerciseRegressionAlgorithm.cs | 4 +- .../IronCondorStrategyAlgorithm.cs | 4 +- .../LargeQuantityOptionStrategyAlgorithm.cs | 4 +- ...ipleOptionStrategiesRegressionAlgorithm.cs | 4 +- ...ndShortButterflyCallStrategiesAlgorithm.cs | 4 +- ...AndShortButterflyPutStrategiesAlgorithm.cs | 4 +- ...rtCallCalendarSpreadStrategiesAlgorithm.cs | 4 +- ...ortPutCalendarSpreadStrategiesAlgorithm.cs | 4 +- ...LongAndShortStraddleStrategiesAlgorithm.cs | 4 +- ...LongAndShortStrangleStrategiesAlgorithm.cs | 4 +- .../NakedCallStrategyAlgorithm.cs | 4 +- Algorithm.CSharp/NakedPutStrategyAlgorithm.cs | 4 +- ...dShortOptionStrategyOverMarginAlgorithm.cs | 4 +- ...uyingPowerOptionBullCallSpreadAlgorithm.cs | 4 +- ...NullMarginComboOrderRegressionAlgorithm.cs | 2 +- ...MarginMultipleOrdersRegressionAlgorithm.cs | 2 +- ...NullOptionAssignmentRegressionAlgorithm.cs | 2 +- .../OptionAssignmentRegressionAlgorithm.cs | 4 +- ...AssignmentStatisticsRegressionAlgorithm.cs | 2 +- ...tionChainConsistencyRegressionAlgorithm.cs | 4 +- .../OptionChainFullDataRegressionAlgorithm.cs | 4 +- .../OptionChainProviderAlgorithm.cs | 4 +- ...iverseSelectionModelRegressionAlgorithm.cs | 4 +- ...ainsMultipleFullDataRegressionAlgorithm.cs | 4 +- ...EquityBearCallLadderRegressionAlgorithm.cs | 4 +- ...EquityBearCallSpreadRegressionAlgorithm.cs | 4 +- ...allSpreadSetHoldingsRegressionAlgorithm.cs | 4 +- ...nEquityBearPutLadderRegressionAlgorithm.cs | 4 +- ...nEquityBearPutSpreadRegressionAlgorithm.cs | 4 +- ...ptionEquityBoxSpreadRegressionAlgorithm.cs | 4 +- ...EquityBullCallLadderRegressionAlgorithm.cs | 4 +- ...EquityBullCallSpreadRegressionAlgorithm.cs | 4 +- ...nEquityBullPutLadderRegressionAlgorithm.cs | 4 +- ...nEquityBullPutSpreadRegressionAlgorithm.cs | 4 +- ...EquityCallBackspreadRegressionAlgorithm.cs | 4 +- ...nEquityCallButterflyRegressionAlgorithm.cs | 4 +- ...tyCallCalendarSpreadRegressionAlgorithm.cs | 4 +- ...tionEquityConversionRegressionAlgorithm.cs | 4 +- ...ionEquityCoveredCallRegressionAlgorithm.cs | 2 +- ...tionEquityCoveredPutRegressionAlgorithm.cs | 2 +- ...nEquityIronButterflyRegressionAlgorithm.cs | 4 +- ...tionEquityIronCondorRegressionAlgorithm.cs | 4 +- ...ptionEquityJellyRollRegressionAlgorithm.cs | 4 +- ...uityProtectiveCollarRegressionAlgorithm.cs | 4 +- ...nEquityPutBackspreadRegressionAlgorithm.cs | 4 +- ...onEquityPutButterflyRegressionAlgorithm.cs | 4 +- ...ityPutCalendarSpreadRegressionAlgorithm.cs | 4 +- ...ityReverseConversionRegressionAlgorithm.cs | 4 +- ...EquityShortBoxSpreadRegressionAlgorithm.cs | 4 +- ...tyShortButterflyCallRegressionAlgorithm.cs | 4 +- ...ityShortButterflyPutRegressionAlgorithm.cs | 4 +- ...yShortCallBackspreadRegressionAlgorithm.cs | 4 +- ...tyShortIronButterflyRegressionAlgorithm.cs | 4 +- ...quityShortIronCondorRegressionAlgorithm.cs | 4 +- ...EquityShortJellyRollRegressionAlgorithm.cs | 4 +- ...tyShortPutBackspreadRegressionAlgorithm.cs | 4 +- ...OptionEquityStraddleRegressionAlgorithm.cs | 4 +- ...OptionEquityStrangleRegressionAlgorithm.cs | 4 +- ...quityStrategyMatcherRegressionAlgorithm.cs | 4 +- ...OptionExerciseAssignRegressionAlgorithm.cs | 2 +- ...ryAndNonTradableDateRegressionAlgorithm.cs | 4 +- .../OptionExerciseRegressionAlgorithm.cs | 4 +- ...iryOrderHasZeroPriceRegressionAlgorithm.cs | 4 +- .../OptionOpenInterestRegressionAlgorithm.cs | 4 +- .../OptionRenameDailyRegressionAlgorithm.cs | 4 +- .../OptionRenameRegressionAlgorithm.cs | 4 +- .../OptionResolutionRegressionAlgorithm.cs | 2 +- ...ptionShortCallMarginCallEventsAlgorithm.cs | 4 +- .../OptionSplitRegressionAlgorithm.cs | 4 +- ...ingUniverseBoxSpreadRegressionAlgorithm.cs | 4 +- ...niverseCallButterflyRegressionAlgorithm.cs | 4 +- ...seCallCalendarSpreadRegressionAlgorithm.cs | 4 +- ...ngUniverseCallLadderRegressionAlgorithm.cs | 4 +- ...ngUniverseCallSpreadRegressionAlgorithm.cs | 4 +- ...ngUniverseConversionRegressionAlgorithm.cs | 4 +- ...ngUniverseIronCondorRegressionAlgorithm.cs | 4 +- ...ingUniverseJellyRollRegressionAlgorithm.cs | 4 +- ...erseProtectiveCollarRegressionAlgorithm.cs | 4 +- ...UniversePutButterflyRegressionAlgorithm.cs | 4 +- ...rsePutCalendarSpreadRegressionAlgorithm.cs | 4 +- ...ingUniversePutLadderRegressionAlgorithm.cs | 4 +- ...ingUniversePutSpreadRegressionAlgorithm.cs | 4 +- ...ngUniverseSingleCallRegressionAlgorithm.cs | 4 +- ...ingUniverseSinglePutRegressionAlgorithm.cs | 4 +- ...ringUniverseStraddleRegressionAlgorithm.cs | 4 +- ...ringUniverseStrangleRegressionAlgorithm.cs | 4 +- ...OptionStrategyMarginCallEventsAlgorithm.cs | 2 +- ...ptionSymbolCanonicalRegressionAlgorithm.cs | 4 +- .../Collective2IndexOptionAlgorithm.cs | 4 +- .../RemoveUnderlyingRegressionAlgorithm.cs | 4 +- .../RevertComboOrderPositionsAlgorithm.cs | 4 +- ...nUsingCalendarSpreadRegressionAlgorithm.cs | 4 +- ...roupBuyingPowerModelRegressionAlgorithm.cs | 4 +- ...owerResolutionOptionRegressionAlgorithm.cs | 4 +- .../WarmupOptionRegressionAlgorithm.cs | 4 +- Common/SecurityIdentifier.cs | 9 +++- .../ReadOrdersResponseJsonConverterTests.cs | 30 ++++++------ .../Securities/SecurityIdentifierTests.cs | 48 +++++++++++++++---- Tests/Common/SymbolJsonConverterTests.cs | 8 ++-- Tests/Common/SymbolTests.cs | 2 +- Tests/Python/PythonOptionTests.cs | 2 +- 172 files changed, 385 insertions(+), 346 deletions(-) diff --git a/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs b/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs index c27639ebe074..867c376f5294 100644 --- a/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs @@ -134,10 +134,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "68696.045"}, {"Total Fees", "$35.70"}, {"Estimated Strategy Capacity", "$2600000.00"}, - {"Lowest Capacity Asset", "ES 31C3JQS9D84PW|ES XCZJLC9NOB29"}, + {"Lowest Capacity Asset", "ES 31C3JQS9DCF1G|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "495.15%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "85257286f088992d599c1ad0799a6237"} + {"OrderListHash", "3f6016b4879428eaef0b7057d4b86f18"} }; } } diff --git a/Algorithm.CSharp/AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm.cs b/Algorithm.CSharp/AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm.cs index 0add96b829d3..adaa92a3cf3d 100644 --- a/Algorithm.CSharp/AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm.cs @@ -261,10 +261,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "2.237"}, {"Total Fees", "$3.57"}, {"Estimated Strategy Capacity", "$760000.00"}, - {"Lowest Capacity Asset", "ES XCZJLDQX2SRO|ES XCZJLC9NOB29"}, + {"Lowest Capacity Asset", "ES XCZJLDQX7338|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "32.31%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "7a04f66a30d793bf187c2695781ad3ee"} + {"OrderListHash", "9179c6e6a693a6593c97bfa825d53170"} }; } } diff --git a/Algorithm.CSharp/AddOptionContractExpiresRegressionAlgorithm.cs b/Algorithm.CSharp/AddOptionContractExpiresRegressionAlgorithm.cs index b2f34b393392..7b3cd2e256d5 100644 --- a/Algorithm.CSharp/AddOptionContractExpiresRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddOptionContractExpiresRegressionAlgorithm.cs @@ -158,10 +158,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "2.01"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$5700000.00"}, - {"Lowest Capacity Asset", "AOL VRKS95ENLBYE|AOL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AOL VRKS95ENPM9Y|AOL R735QTJ8XC9X"}, {"Portfolio Turnover", "0.55%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "fc5ab25181a01ca5ce39212f60eb0ecd"} + {"OrderListHash", "d314aef81752b6583fd58f9e49054cd4"} }; } } diff --git a/Algorithm.CSharp/AddOptionContractFromUniverseRegressionAlgorithm.cs b/Algorithm.CSharp/AddOptionContractFromUniverseRegressionAlgorithm.cs index 47a836b872e6..deca83e88107 100644 --- a/Algorithm.CSharp/AddOptionContractFromUniverseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddOptionContractFromUniverseRegressionAlgorithm.cs @@ -210,10 +210,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0.335"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$2800000.00"}, - {"Lowest Capacity Asset", "AOL VRKS95ENLBYE|AOL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AOL VRKS95ENPM9Y|AOL R735QTJ8XC9X"}, {"Portfolio Turnover", "1.14%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "90aa4bf345a6ba5ea2b0b14e32d1598f"} + {"OrderListHash", "e33b98d8e94ed92d0441fc6fe0d461fb"} }; } } diff --git a/Algorithm.CSharp/AddOptionContractTwiceRegressionAlgorithm.cs b/Algorithm.CSharp/AddOptionContractTwiceRegressionAlgorithm.cs index 3bb03b2318e9..15fec4905e3d 100644 --- a/Algorithm.CSharp/AddOptionContractTwiceRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddOptionContractTwiceRegressionAlgorithm.cs @@ -157,10 +157,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$5000000.00"}, - {"Lowest Capacity Asset", "AAPL VXBK4R62CXGM|AAPL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AAPL VXBK4R62H7S6|AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "22.70%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "29fd1b75f6db05dd823a6db7e8bd90a9"} + {"OrderListHash", "71511e4929377cd55fbf5e7e9555c248"} }; } } diff --git a/Algorithm.CSharp/AddRemoveOptionUniverseRegressionAlgorithm.cs b/Algorithm.CSharp/AddRemoveOptionUniverseRegressionAlgorithm.cs index e056c3329ecd..d10fb7f61d80 100644 --- a/Algorithm.CSharp/AddRemoveOptionUniverseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddRemoveOptionUniverseRegressionAlgorithm.cs @@ -246,10 +246,10 @@ public override void OnSecuritiesChanged(SecurityChanges changes) {"Treynor Ratio", "0"}, {"Total Fees", "$6.00"}, {"Estimated Strategy Capacity", "$4000.00"}, - {"Lowest Capacity Asset", "GOOCV 305RBQ2BZBZT2|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 305RBQ2BZGA4M|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.58%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "12037c87de17d6e62eadd99c70a0685e"} + {"OrderListHash", "f418de0673fc166487daf80991dfe3a0"} }; } } diff --git a/Algorithm.CSharp/AddTwoAndRemoveOneOptionContractRegressionAlgorithm.cs b/Algorithm.CSharp/AddTwoAndRemoveOneOptionContractRegressionAlgorithm.cs index 2ee98a54c5c7..7d1807b35b3c 100644 --- a/Algorithm.CSharp/AddTwoAndRemoveOneOptionContractRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddTwoAndRemoveOneOptionContractRegressionAlgorithm.cs @@ -142,10 +142,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$6200000.00"}, - {"Lowest Capacity Asset", "AAPL VXBK4QA5EM92|AAPL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AAPL VXBK4QA5IWKM|AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "90.27%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "a111609c2c64554268539b5798e5b31f"} + {"OrderListHash", "a332b93ff5e2dfe89258c450a64c7125"} }; } } diff --git a/Algorithm.CSharp/BacktestingBrokerageRegressionAlgorithm.cs b/Algorithm.CSharp/BacktestingBrokerageRegressionAlgorithm.cs index 458818cbd35d..57fb83f684cc 100644 --- a/Algorithm.CSharp/BacktestingBrokerageRegressionAlgorithm.cs +++ b/Algorithm.CSharp/BacktestingBrokerageRegressionAlgorithm.cs @@ -340,7 +340,7 @@ public override OrderEvent MarketFill(Security asset, MarketOrder order) {"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "17.02%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "a7ce5ff2bbe0fe273cf1631ea5a73fa6"} + {"OrderListHash", "1be5073f2cf8802ffa163f7dab7d040e"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateIndexAlgorithm.cs b/Algorithm.CSharp/BasicTemplateIndexAlgorithm.cs index da2f7a2ba14b..debaeb04cf9c 100644 --- a/Algorithm.CSharp/BasicTemplateIndexAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateIndexAlgorithm.cs @@ -168,10 +168,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-1.771"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$3000.00"}, - {"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "23.97%"}, {"Drawdown Recovery", "9"}, - {"OrderListHash", "51f1bc2ea080df79748dc66c2520b782"} + {"OrderListHash", "4b560d2a8cfae510c3c8dc92603470fc"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateIndexDailyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateIndexDailyAlgorithm.cs index 1839b7d4e303..44a783d0a7f8 100644 --- a/Algorithm.CSharp/BasicTemplateIndexDailyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateIndexDailyAlgorithm.cs @@ -147,10 +147,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-6.937"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "2.42%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "61e8517ac3da6bed414ef23d26736fef"} + {"OrderListHash", "ce421d0aeb7bde3bc92a6b87c09c510e"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateIndexHourlyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateIndexHourlyAlgorithm.cs index 0b930443b1ac..f0770bd9878a 100644 --- a/Algorithm.CSharp/BasicTemplateIndexHourlyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateIndexHourlyAlgorithm.cs @@ -64,10 +64,10 @@ public class BasicTemplateIndexHourlyAlgorithm : BasicTemplateIndexDailyAlgorith {"Treynor Ratio", "-6.189"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$300000.00"}, - {"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "24.63%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "5595ab834c2584c1d124ad575e88cc1a"} + {"OrderListHash", "7bc05310e971f09b0663bc380fdfee80"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateIndexOptionsDailyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateIndexOptionsDailyAlgorithm.cs index 2e1104681c5b..130e9dcbaa36 100644 --- a/Algorithm.CSharp/BasicTemplateIndexOptionsDailyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateIndexOptionsDailyAlgorithm.cs @@ -108,10 +108,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "-44.954"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX XL80P59H5E6M|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P59H9OI6|SPX 31"}, {"Portfolio Turnover", "0.00%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8340619d603921c1ce261287890b9c1c"} + {"OrderListHash", "34d295b82e29b1dbe8f104d3300d9255"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateIndexOptionsHourlyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateIndexOptionsHourlyAlgorithm.cs index f418209945d2..8584b5c09753 100644 --- a/Algorithm.CSharp/BasicTemplateIndexOptionsHourlyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateIndexOptionsHourlyAlgorithm.cs @@ -79,10 +79,10 @@ public class BasicTemplateIndexOptionsHourlyAlgorithm : BasicTemplateIndexOption {"Treynor Ratio", "116.921"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX XL80P59H5E6M|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P59H9OI6|SPX 31"}, {"Portfolio Turnover", "0.00%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "1c5f424cfe62777733ee68a20320bb8d"} + {"OrderListHash", "214026660a13ecaecc7074fa97f86ea1"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateOptionEquityStrategyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionEquityStrategyAlgorithm.cs index 05895c5d1f9d..d929845bcc40 100644 --- a/Algorithm.CSharp/BasicTemplateOptionEquityStrategyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionEquityStrategyAlgorithm.cs @@ -143,10 +143,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$69000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "61.31%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "35d406df401e5b27244e20f5ec57346e"} + {"OrderListHash", "ccd6cb1b6244d0c6d30b2760938958f1"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateOptionStrategyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionStrategyAlgorithm.cs index c5b45fe0ca18..8705658fd2fb 100644 --- a/Algorithm.CSharp/BasicTemplateOptionStrategyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionStrategyAlgorithm.cs @@ -153,10 +153,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$543.40"}, {"Estimated Strategy Capacity", "$4000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMEBBB2E|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMEBFLDY|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "338.60%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "301c15063f6e269023d144ca69a765da"} + {"OrderListHash", "8229716b93428dc885cf856b4cc9fc35"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateOptionsAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionsAlgorithm.cs index 059e24cc9a66..f852e532e3e3 100644 --- a/Algorithm.CSharp/BasicTemplateOptionsAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionsAlgorithm.cs @@ -150,10 +150,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$1300000.00"}, - {"Lowest Capacity Asset", "GOOCV 30AKMEIPOSS1Y|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 30AKMEIPOX2DI|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "10.71%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8a36462ee0349c04d01d464e592dd347"} + {"OrderListHash", "19ba1220073493495880581b38df2da9"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateOptionsDailyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionsDailyAlgorithm.cs index 9a048a9df069..b6b1f61c6a51 100644 --- a/Algorithm.CSharp/BasicTemplateOptionsDailyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionsDailyAlgorithm.cs @@ -163,10 +163,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-3.212"}, {"Total Fees", "$1.00"}, {"Estimated Strategy Capacity", "$72000.00"}, - {"Lowest Capacity Asset", "AAPL W78ZEO2985GM|AAPL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AAPL W78ZEO29CFS6|AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "0.02%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "5e20fad3461ac9998afe8d76ad43b25c"} + {"OrderListHash", "5639c19a7d56ec312f61029b943903b8"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateOptionsFilterUniverseAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionsFilterUniverseAlgorithm.cs index 9daf2616b3db..4950cff1c710 100644 --- a/Algorithm.CSharp/BasicTemplateOptionsFilterUniverseAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionsFilterUniverseAlgorithm.cs @@ -143,7 +143,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "15.08%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "f68f6d64a5721ee148bc3c643f8d1b7f"} + {"OrderListHash", "c53bc9318676161ed3b7797c945e2113"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs index c6c5e3a5f4e2..5b17aa867192 100644 --- a/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionsFrameworkAlgorithm.cs @@ -183,7 +183,7 @@ public override IEnumerable CreateTargets(QCAlgorithm algorith {"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "13.50%"}, {"Drawdown Recovery", "2"}, - {"OrderListHash", "d40c84371facba5dac8a2c919ea75807"} + {"OrderListHash", "2ab4ffc0944a2888a3be0568c2570a79"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateOptionsHourlyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionsHourlyAlgorithm.cs index 882d82d9294b..139595b4a951 100644 --- a/Algorithm.CSharp/BasicTemplateOptionsHourlyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionsHourlyAlgorithm.cs @@ -150,10 +150,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "1.434"}, {"Total Fees", "$4.00"}, {"Estimated Strategy Capacity", "$1000.00"}, - {"Lowest Capacity Asset", "AAPL 2ZTXYMUAHCIAU|AAPL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AAPL 2ZTXYMUAHGSME|AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "2.28%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "7804b3dcf20d3096a2265a289fa81cd3"} + {"OrderListHash", "70bbc60c969f18e943e8e00cf0f7a0ea"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateSPXWeeklyIndexOptionsAlgorithm.cs b/Algorithm.CSharp/BasicTemplateSPXWeeklyIndexOptionsAlgorithm.cs index 6d3fb41d9010..a9b121363b77 100644 --- a/Algorithm.CSharp/BasicTemplateSPXWeeklyIndexOptionsAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateSPXWeeklyIndexOptionsAlgorithm.cs @@ -144,10 +144,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "-0.725"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$580000.00"}, - {"Lowest Capacity Asset", "SPXW 31K54PVWHUJHQ|SPX 31"}, + {"Lowest Capacity Asset", "SPXW 31K54PVWHYTTA|SPX 31"}, {"Portfolio Turnover", "0.40%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "db5e3681c5fa1888262f2370a9b14c11"} + {"OrderListHash", "03148bbb5453fc1056a3285bd31ce158"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateSPXWeeklyIndexOptionsStrategyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateSPXWeeklyIndexOptionsStrategyAlgorithm.cs index e52b07e15ced..01cc595854ed 100644 --- a/Algorithm.CSharp/BasicTemplateSPXWeeklyIndexOptionsStrategyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateSPXWeeklyIndexOptionsStrategyAlgorithm.cs @@ -150,10 +150,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0.589"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$13000000.00"}, - {"Lowest Capacity Asset", "SPXW XKX6S2GM9PGU|SPX 31"}, + {"Lowest Capacity Asset", "SPXW XKX6S2GMDZSE|SPX 31"}, {"Portfolio Turnover", "0.28%"}, {"Drawdown Recovery", "2"}, - {"OrderListHash", "17764ae9e216d003b1f3ce68d15b68ef"} + {"OrderListHash", "9d03f85003416861df07ccb31a18af9a"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateTradableIndexAlgorithm.cs b/Algorithm.CSharp/BasicTemplateTradableIndexAlgorithm.cs index 4dfa61e47926..fd2b14693819 100644 --- a/Algorithm.CSharp/BasicTemplateTradableIndexAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateTradableIndexAlgorithm.cs @@ -87,10 +87,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-1.771"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$3000.00"}, - {"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "24.03%"}, {"Drawdown Recovery", "9"}, - {"OrderListHash", "fcd6fddb0a315e21095c2b35eb633e2b"} + {"OrderListHash", "691cf4990024b856a0a70255c9fd2545"} }; } } diff --git a/Algorithm.CSharp/CoarseFineOptionUniverseChainRegressionAlgorithm.cs b/Algorithm.CSharp/CoarseFineOptionUniverseChainRegressionAlgorithm.cs index dba0e2d74b0a..6a9a39a2ae11 100644 --- a/Algorithm.CSharp/CoarseFineOptionUniverseChainRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CoarseFineOptionUniverseChainRegressionAlgorithm.cs @@ -211,7 +211,7 @@ public override void OnEndOfAlgorithm() {"Lowest Capacity Asset", "AOL R735QTJ8XC9X"}, {"Portfolio Turnover", "17.64%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "a8605c1f5a9c67f60f1ddc963ec45542"} + {"OrderListHash", "228e694280e05c8aa24246a5866b5a83"} }; } } diff --git a/Algorithm.CSharp/ComboLegLimitOrderAlgorithm.cs b/Algorithm.CSharp/ComboLegLimitOrderAlgorithm.cs index 710ec6fe4d09..4f95178bd97b 100644 --- a/Algorithm.CSharp/ComboLegLimitOrderAlgorithm.cs +++ b/Algorithm.CSharp/ComboLegLimitOrderAlgorithm.cs @@ -121,10 +121,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$58000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "30.22%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "ab6171073cd96df46fd9d7bce62f5594"} + {"OrderListHash", "6168ffaa5b9f3c389f5da52e90455889"} }; } } diff --git a/Algorithm.CSharp/ComboLimitOrderAlgorithm.cs b/Algorithm.CSharp/ComboLimitOrderAlgorithm.cs index 289ab8cb4a84..2cc45e509f8b 100644 --- a/Algorithm.CSharp/ComboLimitOrderAlgorithm.cs +++ b/Algorithm.CSharp/ComboLimitOrderAlgorithm.cs @@ -187,10 +187,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$52.00"}, {"Estimated Strategy Capacity", "$5000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "60.91%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "100742aeee45101940dc60e26fa1aa39"} + {"OrderListHash", "7daf3d43bef2b023ab26517085840c0e"} }; } } diff --git a/Algorithm.CSharp/ComboMarketOrderAlgorithm.cs b/Algorithm.CSharp/ComboMarketOrderAlgorithm.cs index da2353838df8..fe437576855e 100644 --- a/Algorithm.CSharp/ComboMarketOrderAlgorithm.cs +++ b/Algorithm.CSharp/ComboMarketOrderAlgorithm.cs @@ -93,10 +93,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$69000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "30.35%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "615c795b0c450cb8e4c3cba803ebb180"} + {"OrderListHash", "0b9f42bc22c9c7c382bc57a64c99f7e5"} }; } } diff --git a/Algorithm.CSharp/ComboOrderTicketDemoAlgorithm.cs b/Algorithm.CSharp/ComboOrderTicketDemoAlgorithm.cs index d50f1c44d187..ab0881afa21e 100644 --- a/Algorithm.CSharp/ComboOrderTicketDemoAlgorithm.cs +++ b/Algorithm.CSharp/ComboOrderTicketDemoAlgorithm.cs @@ -372,10 +372,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$2000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "58.98%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "e69460f62d4c165fe4b4a9bff1f48962"} + {"OrderListHash", "bec09c16bbc4d87a4e5122f29dd5a38b"} }; } } diff --git a/Algorithm.CSharp/CoveredAndProtectiveCallStrategiesAlgorithm.cs b/Algorithm.CSharp/CoveredAndProtectiveCallStrategiesAlgorithm.cs index 25d0f8626653..d87fe16fa006 100644 --- a/Algorithm.CSharp/CoveredAndProtectiveCallStrategiesAlgorithm.cs +++ b/Algorithm.CSharp/CoveredAndProtectiveCallStrategiesAlgorithm.cs @@ -138,10 +138,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$4.60"}, {"Estimated Strategy Capacity", "$120000.00"}, - {"Lowest Capacity Asset", "GOOCV WBGM92QHIYO6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV WBGM92QHN8ZQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "32.18%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "c0e25967c528ec4b1281f25a7735ed92"} + {"OrderListHash", "f8b1dfb65e4795a7929e7f3a3edd0205"} }; } } diff --git a/Algorithm.CSharp/CoveredAndProtectivePutStrategiesAlgorithm.cs b/Algorithm.CSharp/CoveredAndProtectivePutStrategiesAlgorithm.cs index 7821533a836c..9d2d3700cdc1 100644 --- a/Algorithm.CSharp/CoveredAndProtectivePutStrategiesAlgorithm.cs +++ b/Algorithm.CSharp/CoveredAndProtectivePutStrategiesAlgorithm.cs @@ -138,10 +138,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$4.60"}, {"Estimated Strategy Capacity", "$160000.00"}, - {"Lowest Capacity Asset", "GOOCV 30AKMEIPOSS1Y|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 30AKMEIPOX2DI|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "32.12%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "6a09be0b3b0ec11848f3b2c520234332"} + {"OrderListHash", "3f95cba29e9c396bc19c0d47a889dbfb"} }; } } diff --git a/Algorithm.CSharp/CoveredCallComboLimitOrderAlgorithm.cs b/Algorithm.CSharp/CoveredCallComboLimitOrderAlgorithm.cs index cc4628f61c1b..9e0b86d701ca 100644 --- a/Algorithm.CSharp/CoveredCallComboLimitOrderAlgorithm.cs +++ b/Algorithm.CSharp/CoveredCallComboLimitOrderAlgorithm.cs @@ -147,10 +147,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$6.90"}, {"Estimated Strategy Capacity", "$8000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMEBBB2E|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMEBFLDY|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "227.27%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "94a9ae926f68c23d06d32af2b5a25fea"} + {"OrderListHash", "e36c11e174486d80060855efed57a2a9"} }; } } diff --git a/Algorithm.CSharp/CustomOptionAssignmentRegressionAlgorithm.cs b/Algorithm.CSharp/CustomOptionAssignmentRegressionAlgorithm.cs index e53cc9836cc6..2c2c8c2360b8 100644 --- a/Algorithm.CSharp/CustomOptionAssignmentRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CustomOptionAssignmentRegressionAlgorithm.cs @@ -83,10 +83,10 @@ public override OptionAssignmentResult GetAssignment(OptionAssignmentParameters {"Treynor Ratio", "-0.115"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$4800000.00"}, - {"Lowest Capacity Asset", "GOOCV 305RBQ20WHPNQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 305RBQ20WLZZA|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "26.72%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "fb2bef182af109f6441ae739d826f39f"} + {"OrderListHash", "20f33e143b62ee896aa56f85dd2aa2e8"} }; } } diff --git a/Algorithm.CSharp/CustomOptionExerciseModelRegressionAlgorithm.cs b/Algorithm.CSharp/CustomOptionExerciseModelRegressionAlgorithm.cs index c1df92e98d8f..cb57aea29042 100644 --- a/Algorithm.CSharp/CustomOptionExerciseModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CustomOptionExerciseModelRegressionAlgorithm.cs @@ -91,10 +91,10 @@ public override IEnumerable OptionExercise(Option option, OptionExer {"Treynor Ratio", "-3.295"}, {"Total Fees", "$16.00"}, {"Estimated Strategy Capacity", "$87000.00"}, - {"Lowest Capacity Asset", "GOOCV 305RBQ20WHPNQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 305RBQ20WLZZA|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "10.93%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8133cb99a1a9f9e9335bc98def3cc624"} + {"OrderListHash", "19b8f2a8081c3cfa8f6bc02b5d045765"} }; } } diff --git a/Algorithm.CSharp/DefaultMarginComboOrderRegressionAlgorithm.cs b/Algorithm.CSharp/DefaultMarginComboOrderRegressionAlgorithm.cs index 794a1afd7551..e776b7f00fb5 100644 --- a/Algorithm.CSharp/DefaultMarginComboOrderRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DefaultMarginComboOrderRegressionAlgorithm.cs @@ -82,7 +82,7 @@ protected override void AssertState(OrderTicket ticket, int expectedGroupCount, {"Lowest Capacity Asset", ""}, {"Portfolio Turnover", "0%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "2d5054cdc5dd7701845823749255ce1c"} + {"OrderListHash", "73b6f756bf1eacbe11b72be54bc13103"} }; } } diff --git a/Algorithm.CSharp/DefaultMarginMultipleOrdersRegressionAlgorithm.cs b/Algorithm.CSharp/DefaultMarginMultipleOrdersRegressionAlgorithm.cs index 90e1257b675d..c457a2fe4a29 100644 --- a/Algorithm.CSharp/DefaultMarginMultipleOrdersRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DefaultMarginMultipleOrdersRegressionAlgorithm.cs @@ -82,7 +82,7 @@ protected override void AssertState(OrderTicket ticket, int expectedGroupCount, {"Lowest Capacity Asset", ""}, {"Portfolio Turnover", "0%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "d9133c55f97224d3fd291607d75a6aeb"} + {"OrderListHash", "f5636192a24570f4a1a95ee49e4073a8"} }; } } diff --git a/Algorithm.CSharp/DelayedSettlementAfterManualSecurityRemovalAlgorithm.cs b/Algorithm.CSharp/DelayedSettlementAfterManualSecurityRemovalAlgorithm.cs index 425d7fbe67ba..43c24c4e1c93 100644 --- a/Algorithm.CSharp/DelayedSettlementAfterManualSecurityRemovalAlgorithm.cs +++ b/Algorithm.CSharp/DelayedSettlementAfterManualSecurityRemovalAlgorithm.cs @@ -146,10 +146,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$720000.00"}, - {"Lowest Capacity Asset", "GOOCV WHEA9CWI9A86|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV WHEA9CWIDKJQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "11.63%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "65ac4f8e4de760fec3809bf1aa3e0e9c"} + {"OrderListHash", "d0d7b2b1f483d16e72863ecf3bbc3ed6"} }; } } diff --git a/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs b/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs index 321d90f1203a..2e9c1ccf8c4a 100644 --- a/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs +++ b/Algorithm.CSharp/DelistedIndexOptionDivestedRegression.cs @@ -161,10 +161,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "1.124"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$1000000.00"}, - {"Lowest Capacity Asset", "SPX 31KC0UJFONTBI|SPX 31"}, + {"Lowest Capacity Asset", "SPX 31KC0UJFOS3N2|SPX 31"}, {"Portfolio Turnover", "1.24%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "4d70dc21785d91df8755e1499f3f68e1"} + {"OrderListHash", "eea2a6b8ea827058d695cd5a7bb338ab"} }; } } diff --git a/Algorithm.CSharp/DelistingFutureOptionDailyRegressionAlgorithm.cs b/Algorithm.CSharp/DelistingFutureOptionDailyRegressionAlgorithm.cs index 30d53f928fef..e64888704c58 100644 --- a/Algorithm.CSharp/DelistingFutureOptionDailyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DelistingFutureOptionDailyRegressionAlgorithm.cs @@ -59,10 +59,10 @@ public class DelistingFutureOptionDailyRegressionAlgorithm : DelistingFutureOpti {"Treynor Ratio", "-84.756"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$540000000.00"}, - {"Lowest Capacity Asset", "ES XCZJLDREXSX0|ES XCZJLC9NOB29"}, + {"Lowest Capacity Asset", "ES XCZJLDRF238K|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "0.04%"}, {"Drawdown Recovery", "3"}, - {"OrderListHash", "f8c078f0d4552a15538508966a440c5a"} + {"OrderListHash", "11ac76bc66928a5e97e064281f6e7ef5"} }; } } diff --git a/Algorithm.CSharp/DelistingFutureOptionRegressionAlgorithm.cs b/Algorithm.CSharp/DelistingFutureOptionRegressionAlgorithm.cs index 905a66fd4763..c308b4bbe6b1 100644 --- a/Algorithm.CSharp/DelistingFutureOptionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DelistingFutureOptionRegressionAlgorithm.cs @@ -146,10 +146,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-15.266"}, {"Total Fees", "$11.36"}, {"Estimated Strategy Capacity", "$65000000.00"}, - {"Lowest Capacity Asset", "ES XCZJLDQX2SRO|ES XCZJLC9NOB29"}, + {"Lowest Capacity Asset", "ES XCZJLDQX7338|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "0.16%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "224292a1aace8a0895ea272d84714eac"} + {"OrderListHash", "48b7918176ec22534969502849fe596b"} }; } } diff --git a/Algorithm.CSharp/DuplicateOptionAssignmentRegressionAlgorithm.cs b/Algorithm.CSharp/DuplicateOptionAssignmentRegressionAlgorithm.cs index b762e5387557..0e412d41a747 100644 --- a/Algorithm.CSharp/DuplicateOptionAssignmentRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DuplicateOptionAssignmentRegressionAlgorithm.cs @@ -254,10 +254,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "1.883"}, {"Total Fees", "$1.00"}, {"Estimated Strategy Capacity", "$1300000.00"}, - {"Lowest Capacity Asset", "GOOCV 305RBQ20WHPNQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 305RBQ20WLZZA|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "7.07%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "fff8641650865d3ac20351d33ac9b204"} + {"OrderListHash", "79ecc4dd8b045ddf0aa38057b8eb69bf"} }; } } diff --git a/Algorithm.CSharp/EuropeanOptionsCannotBeExercisedBeforeExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/EuropeanOptionsCannotBeExercisedBeforeExpiryRegressionAlgorithm.cs index 9b8c72812632..fa08c0debfc9 100644 --- a/Algorithm.CSharp/EuropeanOptionsCannotBeExercisedBeforeExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/EuropeanOptionsCannotBeExercisedBeforeExpiryRegressionAlgorithm.cs @@ -183,10 +183,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-2.004"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$1700000.00"}, - {"Lowest Capacity Asset", "SPX XL80P3HB5O6M|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3HB9YI6|SPX 31"}, {"Portfolio Turnover", "0.35%"}, {"Drawdown Recovery", "10"}, - {"OrderListHash", "c511179c15aa167365cc1acb91b20bf3"} + {"OrderListHash", "d671fe71272a6c1b489d09071967a5de"} }; } } diff --git a/Algorithm.CSharp/FutureOptionBuySellCallIntradayRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionBuySellCallIntradayRegressionAlgorithm.cs index e44a4d1e5518..30f7d51069f1 100644 --- a/Algorithm.CSharp/FutureOptionBuySellCallIntradayRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionBuySellCallIntradayRegressionAlgorithm.cs @@ -153,10 +153,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "3.785"}, {"Total Fees", "$2.84"}, {"Estimated Strategy Capacity", "$120000000.00"}, - {"Lowest Capacity Asset", "ES XFH59UPBIJ7O|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES XFH59UPBMTJ8|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "3.67%"}, {"Drawdown Recovery", "74"}, - {"OrderListHash", "c4be2f5b6bff9e6fae4a675a973e2f27"} + {"OrderListHash", "6e17a52c917383260dcf0345567a1ea9"} }; } } diff --git a/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs index 162a99eafa4c..f569f7d2140e 100644 --- a/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionCallITMExpiryRegressionAlgorithm.cs @@ -241,10 +241,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-21.841"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$120000000.00"}, - {"Lowest Capacity Asset", "ES XFH59UPBIJ7O|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES XFH59UPBMTJ8|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "1.94%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "0fcfb38b639ae544952fd313fbc76077"} + {"OrderListHash", "a7d2aa89bb101a77fdbc04890235f83c"} }; } } diff --git a/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs index 1d0d71d884de..12a2775e3bbb 100644 --- a/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionCallITMGreeksExpiryRegressionAlgorithm.cs @@ -206,10 +206,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-18.59"}, {"Total Fees", "$7.10"}, {"Estimated Strategy Capacity", "$24000000.00"}, - {"Lowest Capacity Asset", "ES XFH59UPBIJ7O|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES XFH59UPBMTJ8|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "12.22%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "355dbab2e93d7a62b073b6e6cd4557c2"} + {"OrderListHash", "1d4a9403cd69b8510f15d100acdffa26"} }; } } diff --git a/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs index 340f5985c453..2225385ab1c4 100644 --- a/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionCallOTMExpiryRegressionAlgorithm.cs @@ -217,10 +217,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-23.065"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$180000000.00"}, - {"Lowest Capacity Asset", "ES XFH59UPHGV9G|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES XFH59UPHL5L0|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "0.02%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "1d3c36cec32b24e8911d87d7b9730192"} + {"OrderListHash", "d84cd529c8535b576d63c0f9c29635c3"} }; } } diff --git a/Algorithm.CSharp/FutureOptionChainFullDataRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionChainFullDataRegressionAlgorithm.cs index c6a9984a1911..970699ae6d2e 100644 --- a/Algorithm.CSharp/FutureOptionChainFullDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionChainFullDataRegressionAlgorithm.cs @@ -119,10 +119,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$34601.14"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "ES XCZJLCGM383O|ES XCZJLC9NOB29"}, + {"Lowest Capacity Asset", "ES XCZJLCGM7IF8|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "112.25%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "2bef4eb69857dcfbda06009e2b712ac2"} + {"OrderListHash", "4000aa7b360b9146b9f184d0cc188980"} }; } } diff --git a/Algorithm.CSharp/FutureOptionChainsMultipleFullDataRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionChainsMultipleFullDataRegressionAlgorithm.cs index 48d529f7d648..a2fb0a1903a3 100644 --- a/Algorithm.CSharp/FutureOptionChainsMultipleFullDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionChainsMultipleFullDataRegressionAlgorithm.cs @@ -139,10 +139,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$19016.64"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "ES XCZJLCGM383O|ES XCZJLC9NOB29"}, + {"Lowest Capacity Asset", "ES XCZJLCGM7IF8|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "49.52%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "4e1e5bc330f892d94a23a887d002133e"} + {"OrderListHash", "8ef148c1100cb53bdd6a833c7a958974"} }; } } diff --git a/Algorithm.CSharp/FutureOptionDailyRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionDailyRegressionAlgorithm.cs index 1fda2484099c..7267e6cd17bc 100644 --- a/Algorithm.CSharp/FutureOptionDailyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionDailyRegressionAlgorithm.cs @@ -159,10 +159,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$2.84"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "ES XCZJLCEYJVLW|ES XCZJLC9NOB29"}, + {"Lowest Capacity Asset", "ES XCZJLCEYO5XG|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "4.24%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "3917ccec8393e2505e9a5183bccfd237"} + {"OrderListHash", "ea4b22620e9435d7fa80888b8bd7be87"} }; } } diff --git a/Algorithm.CSharp/FutureOptionHourlyRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionHourlyRegressionAlgorithm.cs index 8f768898fd53..0a91efe93c1f 100644 --- a/Algorithm.CSharp/FutureOptionHourlyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionHourlyRegressionAlgorithm.cs @@ -104,10 +104,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$2.84"}, {"Estimated Strategy Capacity", "$3000.00"}, - {"Lowest Capacity Asset", "ES XCZJLCEYJVLW|ES XCZJLC9NOB29"}, + {"Lowest Capacity Asset", "ES XCZJLCEYO5XG|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "4.90%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "66d11399fe18d95de2821f2e456500ab"} + {"OrderListHash", "10661c6d84f71ca7e07e2fdf5b79851b"} }; } } diff --git a/Algorithm.CSharp/FutureOptionMultipleContractsInDifferentContractMonthsWithSameUnderlyingFutureRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionMultipleContractsInDifferentContractMonthsWithSameUnderlyingFutureRegressionAlgorithm.cs index 8a9a8fcfa3c2..f3f8d0968b54 100644 --- a/Algorithm.CSharp/FutureOptionMultipleContractsInDifferentContractMonthsWithSameUnderlyingFutureRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionMultipleContractsInDifferentContractMonthsWithSameUnderlyingFutureRegressionAlgorithm.cs @@ -150,10 +150,10 @@ private static Symbol CreateOption(DateTime expiry, OptionRight optionRight, dec {"Treynor Ratio", "0.451"}, {"Total Fees", "$9.88"}, {"Estimated Strategy Capacity", "$31000000.00"}, - {"Lowest Capacity Asset", "OG 31BFX0QKBVPGG|GC XE1Y0ZJ8NQ8T"}, + {"Lowest Capacity Asset", "OG 31BFX0QKBZZS0|GC XE1Y0ZJ8NQ8T"}, {"Portfolio Turnover", "2.65%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "06e076b1b516ea2c7a67401867467740"} + {"OrderListHash", "9b619fad030ef229690386aabbaedb4d"} }; } } diff --git a/Algorithm.CSharp/FutureOptionPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionPutITMExpiryRegressionAlgorithm.cs index 2a44fb538b2d..f76a2c2b166d 100644 --- a/Algorithm.CSharp/FutureOptionPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionPutITMExpiryRegressionAlgorithm.cs @@ -242,10 +242,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-36.3"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$79000000.00"}, - {"Lowest Capacity Asset", "ES 31EL5FAOOQON8|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES 31EL5FAOOUYYS|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "1.98%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "20da5994dd627b414fb7b589eefa4d5c"} + {"OrderListHash", "a4de58a3a31739f593c8a1ed099bad10"} }; } } diff --git a/Algorithm.CSharp/FutureOptionPutOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionPutOTMExpiryRegressionAlgorithm.cs index dfdb7b8ffc2c..8abe7d085383 100644 --- a/Algorithm.CSharp/FutureOptionPutOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionPutOTMExpiryRegressionAlgorithm.cs @@ -215,10 +215,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-32.556"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$290000000.00"}, - {"Lowest Capacity Asset", "ES 31EL5FBZBMXES|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES 31EL5FBZBR7QC|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "0.03%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "c00499f16e60faf91708e5c1c4fcf851"} + {"OrderListHash", "01fc084078bdca7ec7d409f7bb398c14"} }; } } diff --git a/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs index 2d3fc789d073..daf89dbb3b41 100644 --- a/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortCallITMExpiryRegressionAlgorithm.cs @@ -226,10 +226,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-13.127"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$13000000.00"}, - {"Lowest Capacity Asset", "ES XFH59UP5K75W|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES XFH59UP5OHHG|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "1.79%"}, {"Drawdown Recovery", "165"}, - {"OrderListHash", "ea7c72a493aa29a52a5f782fc741d391"} + {"OrderListHash", "51a7c148e25c56692d0ed5971483f04d"} }; } } diff --git a/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs index ded9598fa40b..d1e49db4e09d 100644 --- a/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortCallOTMExpiryRegressionAlgorithm.cs @@ -209,10 +209,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-11.048"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$100000000.00"}, - {"Lowest Capacity Asset", "ES XFH59UPNF7B8|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES XFH59UPNJHMS|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "0.01%"}, {"Drawdown Recovery", "165"}, - {"OrderListHash", "2b83fbaa9c10a1a9c65ecd779bd40b94"} + {"OrderListHash", "3e39f8bdb373b371999835fbf680eef8"} }; } } diff --git a/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs index 81f53f1e987c..99a75a59b56e 100644 --- a/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortPutITMExpiryRegressionAlgorithm.cs @@ -223,10 +223,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-41.831"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$12000000.00"}, - {"Lowest Capacity Asset", "ES 31EL5FAOUP0P0|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES 31EL5FAOUTB0K|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "1.87%"}, {"Drawdown Recovery", "165"}, - {"OrderListHash", "cc0e2d8195b87d37b842de7224eac8f0"} + {"OrderListHash", "3ced70635b9a6a1ff260a0f8706e9fff"} }; } } diff --git a/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs index bf9f3c4dc561..7fb1e141f109 100644 --- a/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FutureOptionShortPutOTMExpiryRegressionAlgorithm.cs @@ -208,10 +208,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-24.076"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$110000000.00"}, - {"Lowest Capacity Asset", "ES 31EL5FAJQ6SBO|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES 31EL5FAJQB2N8|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "0.02%"}, {"Drawdown Recovery", "165"}, - {"OrderListHash", "a4f512c607cf1ec56f3d76ede17728dd"} + {"OrderListHash", "ddc3a9d7483eb53bac7313682f4b7d0f"} }; } } diff --git a/Algorithm.CSharp/FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm.cs b/Algorithm.CSharp/FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm.cs index e1b7db7d64c8..ab85a2583e82 100644 --- a/Algorithm.CSharp/FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm.cs +++ b/Algorithm.CSharp/FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm.cs @@ -222,7 +222,7 @@ public override void OnEndOfAlgorithm() {"Lowest Capacity Asset", "ES XFH59UK0MYO1"}, {"Portfolio Turnover", "1.04%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "873800e40d1b38b08fc1764cd578bb4a"} + {"OrderListHash", "6ef08dcc3239de1821ecaa4bbdee41ab"} }; } } diff --git a/Algorithm.CSharp/IndexOptionBuySellCallIntradayRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionBuySellCallIntradayRegressionAlgorithm.cs index a330fb8fe069..f85442ad3521 100644 --- a/Algorithm.CSharp/IndexOptionBuySellCallIntradayRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionBuySellCallIntradayRegressionAlgorithm.cs @@ -159,10 +159,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "3.118"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX XL80P3HB5O6M|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3HB9YI6|SPX 31"}, {"Portfolio Turnover", "0.51%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "ff967a551873aa872879d0a11d043679"} + {"OrderListHash", "9237e1fd3cf099a47a2adae18f91aa2f"} }; } } diff --git a/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs index 56667250d341..470c0d737abe 100644 --- a/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallITMExpiryDailyRegressionAlgorithm.cs @@ -74,10 +74,10 @@ public override void Initialize() {"Treynor Ratio", "-7.99"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "1.90%"}, {"Drawdown Recovery", "9"}, - {"OrderListHash", "fce4ce6f25578a0ec8e7efa272b2dd02"} + {"OrderListHash", "b02af3819f796241269614e0ebf49964"} }; } } diff --git a/Algorithm.CSharp/IndexOptionCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallITMExpiryRegressionAlgorithm.cs index b936cd3fc4cf..dd29a2052f9f 100644 --- a/Algorithm.CSharp/IndexOptionCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallITMExpiryRegressionAlgorithm.cs @@ -211,10 +211,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-7.347"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "1.95%"}, {"Drawdown Recovery", "9"}, - {"OrderListHash", "da367473fff3a12856ba2194d2bb2006"} + {"OrderListHash", "59551fdea61b6d4436ffd4a60aed1f40"} }; } } diff --git a/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs index a36079bbf2df..77a743213691 100644 --- a/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallITMGreeksExpiryRegressionAlgorithm.cs @@ -197,10 +197,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-8.141"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$59000000.00"}, - {"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "2.19%"}, {"Drawdown Recovery", "9"}, - {"OrderListHash", "1a742c2ab3442846f82ddb3728f814ef"} + {"OrderListHash", "5b8ec5478b149dc9adfb09ea6407af82"} }; } } diff --git a/Algorithm.CSharp/IndexOptionCallOTMExpiryDailyRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallOTMExpiryDailyRegressionAlgorithm.cs index a7fd2c8972d4..a31b987ebb34 100644 --- a/Algorithm.CSharp/IndexOptionCallOTMExpiryDailyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallOTMExpiryDailyRegressionAlgorithm.cs @@ -74,10 +74,10 @@ public override void Initialize() {"Treynor Ratio", "-32.969"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX XL80P59H5E6M|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P59H9OI6|SPX 31"}, {"Portfolio Turnover", "0.00%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "adfa67772fb1a7f40d65922cbe180c8e"} + {"OrderListHash", "0a8db8bba3b2198ba4675fc909426c35"} }; } } diff --git a/Algorithm.CSharp/IndexOptionCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionCallOTMExpiryRegressionAlgorithm.cs index e215291eaefe..1b42c4bacf34 100644 --- a/Algorithm.CSharp/IndexOptionCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionCallOTMExpiryRegressionAlgorithm.cs @@ -219,10 +219,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-32.969"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$22000.00"}, - {"Lowest Capacity Asset", "SPX XL80P59H5E6M|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P59H9OI6|SPX 31"}, {"Portfolio Turnover", "0.00%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "adfa67772fb1a7f40d65922cbe180c8e"} + {"OrderListHash", "0a8db8bba3b2198ba4675fc909426c35"} }; } } diff --git a/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs index f16bd35527c0..c3ac8a75e13c 100644 --- a/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionPutITMExpiryRegressionAlgorithm.cs @@ -226,10 +226,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-3.216"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX 31KC0UJHC75TA|SPX 31"}, + {"Lowest Capacity Asset", "SPX 31KC0UJHCBG4U|SPX 31"}, {"Portfolio Turnover", "1.94%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "318a374cfedd073d468f69c53f827323"} + {"OrderListHash", "3f315a4d5124203fb8ed466926314824"} }; } } diff --git a/Algorithm.CSharp/IndexOptionPutOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionPutOTMExpiryRegressionAlgorithm.cs index 5df1cbf27a4e..399d03431b81 100644 --- a/Algorithm.CSharp/IndexOptionPutOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionPutOTMExpiryRegressionAlgorithm.cs @@ -210,10 +210,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-5.965"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX 31KC0UJFONTBI|SPX 31"}, + {"Lowest Capacity Asset", "SPX 31KC0UJFOS3N2|SPX 31"}, {"Portfolio Turnover", "0.01%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "2a1eac1c8ef2e2696a7390231fc6073d"} + {"OrderListHash", "22c6e3e24145b1d57ef6a7f2b30108a7"} }; } } diff --git a/Algorithm.CSharp/IndexOptionScaledStrikeRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionScaledStrikeRegressionAlgorithm.cs index 0dd64dd58b86..de392d6ae6ec 100644 --- a/Algorithm.CSharp/IndexOptionScaledStrikeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionScaledStrikeRegressionAlgorithm.cs @@ -150,10 +150,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "1.7351225556608623E+28"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$7000.00"}, - {"Lowest Capacity Asset", "NQX 31M220FF62ZSE|NDX 31"}, + {"Lowest Capacity Asset", "NQX 31M220FF67A3Y|NDX 31"}, {"Portfolio Turnover", "6.40%"}, {"Drawdown Recovery", "1"}, - {"OrderListHash", "0de4f8d2fcbb87307e5fe01c060dd44a"} + {"OrderListHash", "bbdd7eb2f738326a6184bc71d435c6cb"} }; } } diff --git a/Algorithm.CSharp/IndexOptionShortCallITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionShortCallITMExpiryRegressionAlgorithm.cs index 91120c4c638d..91f0feb9ead6 100644 --- a/Algorithm.CSharp/IndexOptionShortCallITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionShortCallITMExpiryRegressionAlgorithm.cs @@ -224,10 +224,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-5.019"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, {"Portfolio Turnover", "0.19%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "1b0b0418d3290ea45c38f6c4db8285d2"} + {"OrderListHash", "358b15e6d71c9fab8de9f53e667df96e"} }; } } diff --git a/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs index 1f7ae7842616..b439ff57964b 100644 --- a/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionShortCallOTMExpiryRegressionAlgorithm.cs @@ -204,10 +204,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "14.02"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$22000.00"}, - {"Lowest Capacity Asset", "SPX XL80P59H5E6M|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P59H9OI6|SPX 31"}, {"Portfolio Turnover", "0.00%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "0b702d78062c1c50372b42bcd6ed2981"} + {"OrderListHash", "b2d0a0970bfbb57c5b20d251b0366e29"} }; } } diff --git a/Algorithm.CSharp/IndexOptionShortPutITMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionShortPutITMExpiryRegressionAlgorithm.cs index dee9fb40490c..84b872f11072 100644 --- a/Algorithm.CSharp/IndexOptionShortPutITMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionShortPutITMExpiryRegressionAlgorithm.cs @@ -227,10 +227,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-4.521"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX 31KC0UJHC75TA|SPX 31"}, + {"Lowest Capacity Asset", "SPX 31KC0UJHCBG4U|SPX 31"}, {"Portfolio Turnover", "0.19%"}, {"Drawdown Recovery", "9"}, - {"OrderListHash", "5fa3290876b6616eb338fedccd65fd6f"} + {"OrderListHash", "86a79c56040bedf9067b7255131e0387"} }; } } diff --git a/Algorithm.CSharp/IndexOptionShortPutOTMExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/IndexOptionShortPutOTMExpiryRegressionAlgorithm.cs index 3206a7453ea2..76d7e117ecc3 100644 --- a/Algorithm.CSharp/IndexOptionShortPutOTMExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/IndexOptionShortPutOTMExpiryRegressionAlgorithm.cs @@ -203,10 +203,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-4.22"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "SPX 31KC0UJFONTBI|SPX 31"}, + {"Lowest Capacity Asset", "SPX 31KC0UJFOS3N2|SPX 31"}, {"Portfolio Turnover", "0.01%"}, {"Drawdown Recovery", "9"}, - {"OrderListHash", "b11d26454cf946dae38b484863698248"} + {"OrderListHash", "0b39fcedbea77ba71bf0d4547a3b8fc5"} }; } } diff --git a/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs b/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs index 43a4ecb10c03..86aff0d031be 100644 --- a/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/InsufficientBuyingPowerForAutomaticExerciseRegressionAlgorithm.cs @@ -212,10 +212,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-0.2"}, {"Total Fees", "$3.30"}, {"Estimated Strategy Capacity", "$2400000.00"}, - {"Lowest Capacity Asset", "GOOCV 305RBQ20WHPNQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 305RBQ20WLZZA|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "54.01%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "97d1c3373a72ec15038949710e7c7a62"} + {"OrderListHash", "2f22fc5e9584c2d201b9e0b767a7160d"} }; } } diff --git a/Algorithm.CSharp/InteractiveBrokersBrokerageDisablesIndexOptionsExerciseRegressionAlgorithm.cs b/Algorithm.CSharp/InteractiveBrokersBrokerageDisablesIndexOptionsExerciseRegressionAlgorithm.cs index 834f61542cf5..3c7f59d74941 100644 --- a/Algorithm.CSharp/InteractiveBrokersBrokerageDisablesIndexOptionsExerciseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/InteractiveBrokersBrokerageDisablesIndexOptionsExerciseRegressionAlgorithm.cs @@ -186,10 +186,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$1.00"}, {"Estimated Strategy Capacity", "$1700000.00"}, - {"Lowest Capacity Asset", "SPX XL80P3HB5O6M|SPX 31"}, + {"Lowest Capacity Asset", "SPX XL80P3HB9YI6|SPX 31"}, {"Portfolio Turnover", "0.16%"}, {"Drawdown Recovery", "10"}, - {"OrderListHash", "e83502aa04c68dbd42a1f670cd81833f"} + {"OrderListHash", "be2eef3af814d254879e4c6902d9eb9c"} }; } } diff --git a/Algorithm.CSharp/IronCondorStrategyAlgorithm.cs b/Algorithm.CSharp/IronCondorStrategyAlgorithm.cs index e115837fd860..a714bcb8a633 100644 --- a/Algorithm.CSharp/IronCondorStrategyAlgorithm.cs +++ b/Algorithm.CSharp/IronCondorStrategyAlgorithm.cs @@ -160,10 +160,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$10.40"}, {"Estimated Strategy Capacity", "$4000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZL2DIL4G6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZL2DIPERQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.00%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "293b5b1c428514fc9d7bb069be75e5e9"} + {"OrderListHash", "690651f39abc866e9749e12a1096a79c"} }; } } diff --git a/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs b/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs index ef4a70c268c5..f63e125c7d1c 100644 --- a/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs +++ b/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs @@ -147,10 +147,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$24.70"}, {"Estimated Strategy Capacity", "$6000.00"}, - {"Lowest Capacity Asset", "GOOCV 30AKMELSHQVZA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 30AKMELSHV6AU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "208.51%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "80f3cfbffc903339387a788a4d35dad1"} + {"OrderListHash", "574530af8e007d4b770b3782bbe31b1b"} }; } } diff --git a/Algorithm.CSharp/LiquidatingMultipleOptionStrategiesRegressionAlgorithm.cs b/Algorithm.CSharp/LiquidatingMultipleOptionStrategiesRegressionAlgorithm.cs index 0d7f661359d2..b3faa601537b 100644 --- a/Algorithm.CSharp/LiquidatingMultipleOptionStrategiesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/LiquidatingMultipleOptionStrategiesRegressionAlgorithm.cs @@ -188,10 +188,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$8.00"}, {"Estimated Strategy Capacity", "$13000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "1.31%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "61b9991ec6483ed14639c9839a653b9e"} + {"OrderListHash", "7e6fb74d29704118659d2fcc59b6cd78"} }; } } diff --git a/Algorithm.CSharp/LongAndShortButterflyCallStrategiesAlgorithm.cs b/Algorithm.CSharp/LongAndShortButterflyCallStrategiesAlgorithm.cs index 028b4072465c..87e035d06ca5 100644 --- a/Algorithm.CSharp/LongAndShortButterflyCallStrategiesAlgorithm.cs +++ b/Algorithm.CSharp/LongAndShortButterflyCallStrategiesAlgorithm.cs @@ -160,10 +160,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$10.40"}, {"Estimated Strategy Capacity", "$7000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMEBBB2E|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMEBFLDY|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.17%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "4026c2d0b0d8de3bd1f375a77d5b5c97"} + {"OrderListHash", "819b008b902a1a0013646a12d31f4ae4"} }; } } diff --git a/Algorithm.CSharp/LongAndShortButterflyPutStrategiesAlgorithm.cs b/Algorithm.CSharp/LongAndShortButterflyPutStrategiesAlgorithm.cs index 0a2a8f0bf6d9..2cf4a57c02d6 100644 --- a/Algorithm.CSharp/LongAndShortButterflyPutStrategiesAlgorithm.cs +++ b/Algorithm.CSharp/LongAndShortButterflyPutStrategiesAlgorithm.cs @@ -160,10 +160,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$10.40"}, {"Estimated Strategy Capacity", "$4000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZL2DIL4G6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZL2DIPERQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.23%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "5edf17765f812f4b6114c03bb69a3bc2"} + {"OrderListHash", "cf836c2b04e698db4f69048870f3fb1c"} }; } } diff --git a/Algorithm.CSharp/LongAndShortCallCalendarSpreadStrategiesAlgorithm.cs b/Algorithm.CSharp/LongAndShortCallCalendarSpreadStrategiesAlgorithm.cs index 481c9502b6d2..ea79cd66f0b0 100644 --- a/Algorithm.CSharp/LongAndShortCallCalendarSpreadStrategiesAlgorithm.cs +++ b/Algorithm.CSharp/LongAndShortCallCalendarSpreadStrategiesAlgorithm.cs @@ -143,10 +143,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$5.20"}, {"Estimated Strategy Capacity", "$7000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZEOEHQRYE|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZEOEHV29Y|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "1.85%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "fde9204f63cc0d6676155381fc7537ff"} + {"OrderListHash", "ee77a60de004210b9ab977f397c70f73"} }; } } diff --git a/Algorithm.CSharp/LongAndShortPutCalendarSpreadStrategiesAlgorithm.cs b/Algorithm.CSharp/LongAndShortPutCalendarSpreadStrategiesAlgorithm.cs index 5a25f89add4e..dc8047b22fa4 100644 --- a/Algorithm.CSharp/LongAndShortPutCalendarSpreadStrategiesAlgorithm.cs +++ b/Algorithm.CSharp/LongAndShortPutCalendarSpreadStrategiesAlgorithm.cs @@ -143,10 +143,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$5.20"}, {"Estimated Strategy Capacity", "$14000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZK4DP0LC6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZK4DP4VNQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "1.87%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "4c07701fd7a79beca45efc3afebbd693"} + {"OrderListHash", "c86c7c9e58f41cbea206196e5717ce4f"} }; } } diff --git a/Algorithm.CSharp/LongAndShortStraddleStrategiesAlgorithm.cs b/Algorithm.CSharp/LongAndShortStraddleStrategiesAlgorithm.cs index 61a8241ac3be..f657fb788386 100644 --- a/Algorithm.CSharp/LongAndShortStraddleStrategiesAlgorithm.cs +++ b/Algorithm.CSharp/LongAndShortStraddleStrategiesAlgorithm.cs @@ -140,10 +140,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$5.20"}, {"Estimated Strategy Capacity", "$16000.00"}, - {"Lowest Capacity Asset", "GOOCV WBGM92QHIYO6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV WBGM92QHN8ZQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "4.31%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "cccaf73a927ca18dc8d11634bc80d198"} + {"OrderListHash", "c9b2bbdb35e439484e1ae97cfdfa2977"} }; } } diff --git a/Algorithm.CSharp/LongAndShortStrangleStrategiesAlgorithm.cs b/Algorithm.CSharp/LongAndShortStrangleStrategiesAlgorithm.cs index efd7f4d6c3b5..703a93194a0f 100644 --- a/Algorithm.CSharp/LongAndShortStrangleStrategiesAlgorithm.cs +++ b/Algorithm.CSharp/LongAndShortStrangleStrategiesAlgorithm.cs @@ -150,10 +150,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$5.20"}, {"Estimated Strategy Capacity", "$15000.00"}, - {"Lowest Capacity Asset", "GOOCV 30AKMELSHQVZA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 30AKMELSHV6AU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "4.21%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "c7b4e8981536d76878cf9dd5bd6fc771"} + {"OrderListHash", "7037493f637362745f993c1dc940bd05"} }; } } diff --git a/Algorithm.CSharp/NakedCallStrategyAlgorithm.cs b/Algorithm.CSharp/NakedCallStrategyAlgorithm.cs index 36f6cb83d2c7..079e92821b3c 100644 --- a/Algorithm.CSharp/NakedCallStrategyAlgorithm.cs +++ b/Algorithm.CSharp/NakedCallStrategyAlgorithm.cs @@ -129,10 +129,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$2.60"}, {"Estimated Strategy Capacity", "$8000.00"}, - {"Lowest Capacity Asset", "GOOCV WBGM92QHIYO6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV WBGM92QHN8ZQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.19%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "56c4d8b527d4a8f8d1cc659f8b2d4fc7"} + {"OrderListHash", "6942c6b893f9d77dce3c2f7b5e753718"} }; } } diff --git a/Algorithm.CSharp/NakedPutStrategyAlgorithm.cs b/Algorithm.CSharp/NakedPutStrategyAlgorithm.cs index 7cacd09e6569..fcf557dd8967 100644 --- a/Algorithm.CSharp/NakedPutStrategyAlgorithm.cs +++ b/Algorithm.CSharp/NakedPutStrategyAlgorithm.cs @@ -129,10 +129,10 @@ protected override void LiquidateStrategy() {"Treynor Ratio", "0"}, {"Total Fees", "$2.60"}, {"Estimated Strategy Capacity", "$10000.00"}, - {"Lowest Capacity Asset", "GOOCV 30AKMEIPOSS1Y|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 30AKMEIPOX2DI|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.13%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "be055400ff8650bd9aeabd98e7d89c4e"} + {"OrderListHash", "699eda4fdbcfa625cc7cb6c4ccbbd7ba"} }; } } diff --git a/Algorithm.CSharp/NakedShortOptionStrategyOverMarginAlgorithm.cs b/Algorithm.CSharp/NakedShortOptionStrategyOverMarginAlgorithm.cs index 3cc7943fb001..936b03de55c3 100644 --- a/Algorithm.CSharp/NakedShortOptionStrategyOverMarginAlgorithm.cs +++ b/Algorithm.CSharp/NakedShortOptionStrategyOverMarginAlgorithm.cs @@ -172,10 +172,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$9.10"}, {"Estimated Strategy Capacity", "$2600000.00"}, - {"Lowest Capacity Asset", "GOOCV 30AKMEIPOSS1Y|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 30AKMEIPOX2DI|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "7.50%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "70487a4231ef2237ca24642be28652c4"} + {"OrderListHash", "67fba235c5efade156e60ed66e4b8031"} }; } } diff --git a/Algorithm.CSharp/NullBuyingPowerOptionBullCallSpreadAlgorithm.cs b/Algorithm.CSharp/NullBuyingPowerOptionBullCallSpreadAlgorithm.cs index bbe1f89cd4a3..a99678e79451 100644 --- a/Algorithm.CSharp/NullBuyingPowerOptionBullCallSpreadAlgorithm.cs +++ b/Algorithm.CSharp/NullBuyingPowerOptionBullCallSpreadAlgorithm.cs @@ -148,10 +148,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$1300.00"}, {"Estimated Strategy Capacity", "$36000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2888.68%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "ce2d1d95115c73052aa0268491ff2423"} + {"OrderListHash", "8a2ee1e491737ecabd775ad5afbe2e4b"} }; } } diff --git a/Algorithm.CSharp/NullMarginComboOrderRegressionAlgorithm.cs b/Algorithm.CSharp/NullMarginComboOrderRegressionAlgorithm.cs index 18e6771e963b..b2fa12a5b0a8 100644 --- a/Algorithm.CSharp/NullMarginComboOrderRegressionAlgorithm.cs +++ b/Algorithm.CSharp/NullMarginComboOrderRegressionAlgorithm.cs @@ -75,7 +75,7 @@ protected override void PlaceTrades(OptionContract optionContract) {"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "7580.62%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "5d8c976a405e1e5d1b19af0d1cdbf05d"} + {"OrderListHash", "06de8022dfcb44c5eb0a2199bd7a7232"} }; } } diff --git a/Algorithm.CSharp/NullMarginMultipleOrdersRegressionAlgorithm.cs b/Algorithm.CSharp/NullMarginMultipleOrdersRegressionAlgorithm.cs index 45c068666bcb..a3f550be7314 100644 --- a/Algorithm.CSharp/NullMarginMultipleOrdersRegressionAlgorithm.cs +++ b/Algorithm.CSharp/NullMarginMultipleOrdersRegressionAlgorithm.cs @@ -163,7 +163,7 @@ protected virtual void AssertState(OrderTicket ticket, int expectedGroupCount, i {"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "7580.62%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "ea13456d0c97785f9f2fc12842831990"} + {"OrderListHash", "4b36a135ed647a66c1ef3f1d9439cf02"} }; } } diff --git a/Algorithm.CSharp/NullOptionAssignmentRegressionAlgorithm.cs b/Algorithm.CSharp/NullOptionAssignmentRegressionAlgorithm.cs index 2e9fff489068..aa24e13b3123 100644 --- a/Algorithm.CSharp/NullOptionAssignmentRegressionAlgorithm.cs +++ b/Algorithm.CSharp/NullOptionAssignmentRegressionAlgorithm.cs @@ -72,7 +72,7 @@ public override void Initialize() {"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "26.71%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "2d12d0562e5fc5c45cf8b59398ed59b0"} + {"OrderListHash", "5d0637a25841a3eb1344e8564792acb7"} }; } } diff --git a/Algorithm.CSharp/OptionAssignmentRegressionAlgorithm.cs b/Algorithm.CSharp/OptionAssignmentRegressionAlgorithm.cs index c3b691c7f718..8622e8720b9d 100644 --- a/Algorithm.CSharp/OptionAssignmentRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionAssignmentRegressionAlgorithm.cs @@ -133,10 +133,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "-0.229"}, {"Total Fees", "$16.00"}, {"Estimated Strategy Capacity", "$710000.00"}, - {"Lowest Capacity Asset", "GOOCV 305RBQ20WHPNQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 305RBQ20WLZZA|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "218.80%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "29afd40aab156229739653124c4cab4f"} + {"OrderListHash", "590ba58e303f1f60f855f458300d08af"} }; } } diff --git a/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs b/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs index c40617835545..42a3c3962f57 100644 --- a/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionAssignmentStatisticsRegressionAlgorithm.cs @@ -305,7 +305,7 @@ private static bool AreEqual(decimal expected, decimal actual) {"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "50.31%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "eaa9f229fb4efb0beaccbbd71881268a"} + {"OrderListHash", "65544a2eaccc912e8c81519f5975da1a"} }; } } diff --git a/Algorithm.CSharp/OptionChainConsistencyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainConsistencyRegressionAlgorithm.cs index 87b21c29067b..018693e5abe9 100644 --- a/Algorithm.CSharp/OptionChainConsistencyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainConsistencyRegressionAlgorithm.cs @@ -159,10 +159,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$5000.00"}, - {"Lowest Capacity Asset", "GOOCV W6NBKPFL0ACM|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W6NBKPFL4KO6|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "9.93%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8887ac32d29175b21e40f335437cee61"} + {"OrderListHash", "29e41c0e2a316485a2761c4e56189585"} }; } } diff --git a/Algorithm.CSharp/OptionChainFullDataRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainFullDataRegressionAlgorithm.cs index 36bb119f487b..9b1bb4dd4262 100644 --- a/Algorithm.CSharp/OptionChainFullDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainFullDataRegressionAlgorithm.cs @@ -119,10 +119,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$209.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "GOOCV W6U7PD1F2WYU|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W6U7PD1F77AE|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "85.46%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "a7ab1a9e64fe9ba76ea33a40a78a4e3b"} + {"OrderListHash", "8ee1c7a1574ae0ad6f231ad0b7d15310"} }; } } diff --git a/Algorithm.CSharp/OptionChainProviderAlgorithm.cs b/Algorithm.CSharp/OptionChainProviderAlgorithm.cs index ad423e35029d..1d09e6dbc715 100644 --- a/Algorithm.CSharp/OptionChainProviderAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainProviderAlgorithm.cs @@ -136,10 +136,10 @@ where symbol.ID.StrikePrice - underlyingPrice > 0 {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$6300000.00"}, - {"Lowest Capacity Asset", "GOOCV W723A0UB7HTY|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W723A0UBBS5I|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "76.04%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "d7290944d7fee84f232b47d658010730"} + {"OrderListHash", "20963045be4abe2ce837a0261329462d"} }; } } diff --git a/Algorithm.CSharp/OptionChainedUniverseSelectionModelRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainedUniverseSelectionModelRegressionAlgorithm.cs index 73cf8d03f026..24476faf6fbb 100644 --- a/Algorithm.CSharp/OptionChainedUniverseSelectionModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainedUniverseSelectionModelRegressionAlgorithm.cs @@ -124,10 +124,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$4.00"}, {"Estimated Strategy Capacity", "$110000.00"}, - {"Lowest Capacity Asset", "AAPL 2ZTXYLO9EQPZA|AAPL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AAPL 2ZTXYLO9EV0AU|AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "8.85%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "a542a51c6e634f2ddd9a97ce208d5a67"} + {"OrderListHash", "32f3cebb622264a2d6fd84c552ff4d0e"} }; } } diff --git a/Algorithm.CSharp/OptionChainsMultipleFullDataRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainsMultipleFullDataRegressionAlgorithm.cs index 7745ec39ea70..f1e180fe6ccd 100644 --- a/Algorithm.CSharp/OptionChainsMultipleFullDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainsMultipleFullDataRegressionAlgorithm.cs @@ -134,10 +134,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$209.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "GOOCV W6U7PD1F2WYU|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W6U7PD1F77AE|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "85.46%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "a7ab1a9e64fe9ba76ea33a40a78a4e3b"} + {"OrderListHash", "8ee1c7a1574ae0ad6f231ad0b7d15310"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBearCallLadderRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBearCallLadderRegressionAlgorithm.cs index 8d73f349ce29..ce26459476ba 100644 --- a/Algorithm.CSharp/OptionEquityBearCallLadderRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBearCallLadderRegressionAlgorithm.cs @@ -118,10 +118,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$9.75"}, {"Estimated Strategy Capacity", "$47000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "11.48%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "2d7e030df7ade6d6dcc1c715a329ad32"} + {"OrderListHash", "a573795b3fb76288c1e8b71b1f2bc928"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBearCallSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBearCallSpreadRegressionAlgorithm.cs index 97629fbde1ab..1b1997fa47cb 100644 --- a/Algorithm.CSharp/OptionEquityBearCallSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBearCallSpreadRegressionAlgorithm.cs @@ -120,10 +120,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$6.50"}, {"Estimated Strategy Capacity", "$5400000.00"}, - {"Lowest Capacity Asset", "GOOCV WBGM95TAH2LI|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV WBGM95TALCX2|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "28.44%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "e9104f749ad7055346b26e6db3bdb437"} + {"OrderListHash", "d5354d8376960b0b11a80bc1a164a6a3"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBearCallSpreadSetHoldingsRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBearCallSpreadSetHoldingsRegressionAlgorithm.cs index 5f9d628fb248..4d3c8b9a1b4d 100644 --- a/Algorithm.CSharp/OptionEquityBearCallSpreadSetHoldingsRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBearCallSpreadSetHoldingsRegressionAlgorithm.cs @@ -119,10 +119,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$7.15"}, {"Estimated Strategy Capacity", "$45000000.00"}, - {"Lowest Capacity Asset", "GOOCV WBGM95TAH2LI|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV WBGM95TALCX2|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "6.17%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8f1288896dafb2856b6045f8930e86a6"} + {"OrderListHash", "735ec0801dd3dcf9e03eaf3b67931910"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBearPutLadderRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBearPutLadderRegressionAlgorithm.cs index 194d9edd3389..3a55a35c5abb 100644 --- a/Algorithm.CSharp/OptionEquityBearPutLadderRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBearPutLadderRegressionAlgorithm.cs @@ -121,10 +121,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$9.75"}, {"Estimated Strategy Capacity", "$1100000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZL2DIL4G6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZL2DIPERQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "9.45%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "64e3480ee2ece70a3bb24bef3e7ecdd6"} + {"OrderListHash", "344a4a84239e83eda686ea21d086b6fd"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBearPutSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBearPutSpreadRegressionAlgorithm.cs index b594fc49dca4..1f0ccfac057c 100644 --- a/Algorithm.CSharp/OptionEquityBearPutSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBearPutSpreadRegressionAlgorithm.cs @@ -117,10 +117,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$13.00"}, {"Estimated Strategy Capacity", "$1300000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZK7GHYP9I|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZK7GI2ZL2|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "13.43%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "fa96a26ab949ba2e053c2fa78930ad70"} + {"OrderListHash", "0d10d7319b27523377bb53bbd9702552"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBoxSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBoxSpreadRegressionAlgorithm.cs index e596dedfd197..97aac6aead0b 100644 --- a/Algorithm.CSharp/OptionEquityBoxSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBoxSpreadRegressionAlgorithm.cs @@ -129,10 +129,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$64000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "27.98%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "27e4456cb375fae2a15697c803bc0779"} + {"OrderListHash", "153196ec52843cf95d979e14d18b98b5"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBullCallLadderRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBullCallLadderRegressionAlgorithm.cs index e527d57f5742..4fa17dfccb4e 100644 --- a/Algorithm.CSharp/OptionEquityBullCallLadderRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBullCallLadderRegressionAlgorithm.cs @@ -121,10 +121,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$9.75"}, {"Estimated Strategy Capacity", "$51000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "11.09%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "87d10f2406a4ce6b9d7685bea26d3daf"} + {"OrderListHash", "9412b7091b1e677c662a6bd8acc688a7"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBullCallSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBullCallSpreadRegressionAlgorithm.cs index 823d42c2264f..8d91244cb552 100644 --- a/Algorithm.CSharp/OptionEquityBullCallSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBullCallSpreadRegressionAlgorithm.cs @@ -116,10 +116,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$4.50"}, {"Estimated Strategy Capacity", "$5400000.00"}, - {"Lowest Capacity Asset", "GOOCV WBGM95TAH2LI|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV WBGM95TALCX2|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "28.20%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "a67da2b19b248ab78686660793ddff73"} + {"OrderListHash", "8e7710ac4b8287b4746beddbc5ce9611"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBullPutLadderRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBullPutLadderRegressionAlgorithm.cs index cde8de55751e..e72818ab1b70 100644 --- a/Algorithm.CSharp/OptionEquityBullPutLadderRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBullPutLadderRegressionAlgorithm.cs @@ -118,10 +118,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$9.75"}, {"Estimated Strategy Capacity", "$1400000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZL2DIL4G6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZL2DIPERQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "9.76%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "7e626752cd561e225a1990b19b220177"} + {"OrderListHash", "c94aea4f3f3af337890d430a47a078e2"} }; } } diff --git a/Algorithm.CSharp/OptionEquityBullPutSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBullPutSpreadRegressionAlgorithm.cs index 4f0346b6a9ae..5b47e516b19f 100644 --- a/Algorithm.CSharp/OptionEquityBullPutSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBullPutSpreadRegressionAlgorithm.cs @@ -115,10 +115,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$13.00"}, {"Estimated Strategy Capacity", "$2300000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZK7GHYP9I|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZK7GI2ZL2|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "13.47%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "ee051f3093b67c6f921eaa0f517b2880"} + {"OrderListHash", "674e63d3d499cc9b6c3be48c92786536"} }; } } diff --git a/Algorithm.CSharp/OptionEquityCallBackspreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityCallBackspreadRegressionAlgorithm.cs index 9085b8ac5b92..35537a699cb3 100644 --- a/Algorithm.CSharp/OptionEquityCallBackspreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityCallBackspreadRegressionAlgorithm.cs @@ -120,10 +120,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$9.75"}, {"Estimated Strategy Capacity", "$47000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "11.81%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "6ece6c59826ea66fa7b0a1094a0021c7"} + {"OrderListHash", "d6c330a7840e7294bfa1bc6572d418bd"} }; } } diff --git a/Algorithm.CSharp/OptionEquityCallButterflyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityCallButterflyRegressionAlgorithm.cs index 71114bfb0075..9dbaa7e10ea5 100644 --- a/Algorithm.CSharp/OptionEquityCallButterflyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityCallButterflyRegressionAlgorithm.cs @@ -120,10 +120,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$69000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "30.35%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "6d90cdf33bc1dd6e8d190021898a4e66"} + {"OrderListHash", "1f9515dab3cf62b5e1d9026a2d27a994"} }; } } diff --git a/Algorithm.CSharp/OptionEquityCallCalendarSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityCallCalendarSpreadRegressionAlgorithm.cs index 0f54f7172aea..3743ae349aa3 100644 --- a/Algorithm.CSharp/OptionEquityCallCalendarSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityCallCalendarSpreadRegressionAlgorithm.cs @@ -117,10 +117,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$13.00"}, {"Estimated Strategy Capacity", "$23000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "26.19%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "4b1bd9b5d8b0dba8ddaceeb1dfbcbbc9"} + {"OrderListHash", "2c84b684c855e060a2dced86497181e0"} }; } } diff --git a/Algorithm.CSharp/OptionEquityConversionRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityConversionRegressionAlgorithm.cs index d1e3291ec5e8..f33e0adc6c9c 100644 --- a/Algorithm.CSharp/OptionEquityConversionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityConversionRegressionAlgorithm.cs @@ -119,10 +119,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$3.00"}, {"Estimated Strategy Capacity", "$1600000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "38.88%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8d8b71fdb1faafde96e301b4b2f9ca7d"} + {"OrderListHash", "af86d222380d975e533a88b92b16f280"} }; } } diff --git a/Algorithm.CSharp/OptionEquityCoveredCallRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityCoveredCallRegressionAlgorithm.cs index 0033db4720fb..6cafcc12dba9 100644 --- a/Algorithm.CSharp/OptionEquityCoveredCallRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityCoveredCallRegressionAlgorithm.cs @@ -121,7 +121,7 @@ public override void OnData(Slice slice) {"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "201.44%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "0eee5332f35455eb689a4ef2a27f11fc"} + {"OrderListHash", "7bbdaa6bb6a8e92177dbab76992cfea6"} }; } } diff --git a/Algorithm.CSharp/OptionEquityCoveredPutRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityCoveredPutRegressionAlgorithm.cs index 301f6a87c274..f600b73bd8e0 100644 --- a/Algorithm.CSharp/OptionEquityCoveredPutRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityCoveredPutRegressionAlgorithm.cs @@ -122,7 +122,7 @@ public override void OnData(Slice slice) {"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "399.81%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "326721b5b46d1094a5a758c60ba67da0"} + {"OrderListHash", "89db7ece35155c62319cbbb810d9a58e"} }; } } diff --git a/Algorithm.CSharp/OptionEquityIronButterflyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityIronButterflyRegressionAlgorithm.cs index 11c0d0ae5b52..b14a42a65e88 100644 --- a/Algorithm.CSharp/OptionEquityIronButterflyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityIronButterflyRegressionAlgorithm.cs @@ -127,10 +127,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$500000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "26.45%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "b92ac4977a039360c4b09232ebe9e60f"} + {"OrderListHash", "cbf6f38a1ad909fa68c926edaae45f7a"} }; } } diff --git a/Algorithm.CSharp/OptionEquityIronCondorRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityIronCondorRegressionAlgorithm.cs index 100d0a64d9f2..bbe4b329ea14 100644 --- a/Algorithm.CSharp/OptionEquityIronCondorRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityIronCondorRegressionAlgorithm.cs @@ -129,10 +129,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$480000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "25.26%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "ec76ffecec334bc53867752638aee2fa"} + {"OrderListHash", "21935ddaaa9549064bbeeca2cd7ba4ac"} }; } } diff --git a/Algorithm.CSharp/OptionEquityJellyRollRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityJellyRollRegressionAlgorithm.cs index d011b30a2e78..cf9bf7b9d972 100644 --- a/Algorithm.CSharp/OptionEquityJellyRollRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityJellyRollRegressionAlgorithm.cs @@ -125,10 +125,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$4.00"}, {"Estimated Strategy Capacity", "$180000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "4.70%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "34f1fe90151a1fc5dff43cd7b1205861"} + {"OrderListHash", "b3857d494d146a638a8e70d313d0e724"} }; } } diff --git a/Algorithm.CSharp/OptionEquityProtectiveCollarRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityProtectiveCollarRegressionAlgorithm.cs index 4d5553872bef..a1168c89cc09 100644 --- a/Algorithm.CSharp/OptionEquityProtectiveCollarRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityProtectiveCollarRegressionAlgorithm.cs @@ -120,10 +120,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$3.00"}, {"Estimated Strategy Capacity", "$1600000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "38.71%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "74791244fa3c7fbefd47dd99c3cd6fa7"} + {"OrderListHash", "531dca5eb401dc71132dbdfeec71a4f2"} }; } } diff --git a/Algorithm.CSharp/OptionEquityPutBackspreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityPutBackspreadRegressionAlgorithm.cs index f500e5429b51..bf74aea0eef1 100644 --- a/Algorithm.CSharp/OptionEquityPutBackspreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityPutBackspreadRegressionAlgorithm.cs @@ -120,10 +120,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$9.75"}, {"Estimated Strategy Capacity", "$1100000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZL2DIL4G6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZL2DIPERQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "9.15%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "1a51f04db9201f960dc04668b7f5d41d"} + {"OrderListHash", "7da2977580a65c43f696a3e013fb8035"} }; } } diff --git a/Algorithm.CSharp/OptionEquityPutButterflyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityPutButterflyRegressionAlgorithm.cs index 948bc4f8961c..5ccba48e7d0d 100644 --- a/Algorithm.CSharp/OptionEquityPutButterflyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityPutButterflyRegressionAlgorithm.cs @@ -119,10 +119,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$280000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZL2DIL4G6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZL2DIPERQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "25.77%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "90ff39e71c0e1dea734cd5e7e45f50d4"} + {"OrderListHash", "e4d100d6e96ad81660b800f09267a623"} }; } } diff --git a/Algorithm.CSharp/OptionEquityPutCalendarSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityPutCalendarSpreadRegressionAlgorithm.cs index fcd5e71512c0..e73dd6799436 100644 --- a/Algorithm.CSharp/OptionEquityPutCalendarSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityPutCalendarSpreadRegressionAlgorithm.cs @@ -116,10 +116,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$13.00"}, {"Estimated Strategy Capacity", "$1300000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZK7GHYP9I|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZK7GI2ZL2|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "21.14%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "9d0596275684d9baa53937a13d71800e"} + {"OrderListHash", "250cf48cc95b03dd9db84ab9ba18a0c4"} }; } } diff --git a/Algorithm.CSharp/OptionEquityReverseConversionRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityReverseConversionRegressionAlgorithm.cs index bae67d2cb5de..f52a653c3953 100644 --- a/Algorithm.CSharp/OptionEquityReverseConversionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityReverseConversionRegressionAlgorithm.cs @@ -119,10 +119,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$3.00"}, {"Estimated Strategy Capacity", "$7400000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "38.84%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "722e8214812becc745646ff31fcbce1b"} + {"OrderListHash", "5e0bf1da18d2ef159f3771de4bdcc4b9"} }; } } diff --git a/Algorithm.CSharp/OptionEquityShortBoxSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityShortBoxSpreadRegressionAlgorithm.cs index 8980ecb50336..d85b18e89181 100644 --- a/Algorithm.CSharp/OptionEquityShortBoxSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityShortBoxSpreadRegressionAlgorithm.cs @@ -136,10 +136,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$23000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "28.04%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "f91f438caebb667dda197418168eadd3"} + {"OrderListHash", "4f1e402bd285c0ac07a5611fe4776c5f"} }; } } diff --git a/Algorithm.CSharp/OptionEquityShortButterflyCallRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityShortButterflyCallRegressionAlgorithm.cs index 04695ccae7c4..8022893810c0 100644 --- a/Algorithm.CSharp/OptionEquityShortButterflyCallRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityShortButterflyCallRegressionAlgorithm.cs @@ -120,10 +120,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$23000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "30.26%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "6588b52d6dbf36c1996fb27ca734a219"} + {"OrderListHash", "3e3d9bdac468c34733ae06ddbc4db4d8"} }; } } diff --git a/Algorithm.CSharp/OptionEquityShortButterflyPutRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityShortButterflyPutRegressionAlgorithm.cs index 9bd0c59d32ff..607c67588656 100644 --- a/Algorithm.CSharp/OptionEquityShortButterflyPutRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityShortButterflyPutRegressionAlgorithm.cs @@ -118,10 +118,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$890000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZL2DIL4G6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZL2DIPERQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "25.69%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "96609f0e05a71aea39fd31d90b7273d1"} + {"OrderListHash", "9e1b1c3724e5981b74cb03a5c7064914"} }; } } diff --git a/Algorithm.CSharp/OptionEquityShortCallBackspreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityShortCallBackspreadRegressionAlgorithm.cs index ac5c262e3245..0f7e330e9e44 100644 --- a/Algorithm.CSharp/OptionEquityShortCallBackspreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityShortCallBackspreadRegressionAlgorithm.cs @@ -122,10 +122,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$9.75"}, {"Estimated Strategy Capacity", "$53000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "11.48%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "357f13ed9e71c4dd8bb8e51e339ba7c5"} + {"OrderListHash", "8174f45d8e7ca380e7e064cecaf3124d"} }; } } diff --git a/Algorithm.CSharp/OptionEquityShortIronButterflyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityShortIronButterflyRegressionAlgorithm.cs index e538411db097..fd4d10a6ac43 100644 --- a/Algorithm.CSharp/OptionEquityShortIronButterflyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityShortIronButterflyRegressionAlgorithm.cs @@ -127,10 +127,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$150000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "26.63%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "2e8aabda630eb75675b202456d2b085a"} + {"OrderListHash", "782c4d80f0d098b0a6dccfe54aa74e23"} }; } } diff --git a/Algorithm.CSharp/OptionEquityShortIronCondorRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityShortIronCondorRegressionAlgorithm.cs index 110bf8d5b249..ab20e24b35c6 100644 --- a/Algorithm.CSharp/OptionEquityShortIronCondorRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityShortIronCondorRegressionAlgorithm.cs @@ -124,10 +124,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$26.00"}, {"Estimated Strategy Capacity", "$150000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "25.35%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "15edd05d23c67c5902994eeeaf0855c7"} + {"OrderListHash", "35e7dd1e08bd0b9f4645740b72851d1f"} }; } } diff --git a/Algorithm.CSharp/OptionEquityShortJellyRollRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityShortJellyRollRegressionAlgorithm.cs index af8ad0289d45..f5c2f779c078 100644 --- a/Algorithm.CSharp/OptionEquityShortJellyRollRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityShortJellyRollRegressionAlgorithm.cs @@ -125,10 +125,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$4.00"}, {"Estimated Strategy Capacity", "$110000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "4.70%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "e2eab12be821aad91d9760a50ef9eab9"} + {"OrderListHash", "858390f60e75ee2a501d9570ad37a925"} }; } } diff --git a/Algorithm.CSharp/OptionEquityShortPutBackspreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityShortPutBackspreadRegressionAlgorithm.cs index d074cb559894..5b027dfa6dbe 100644 --- a/Algorithm.CSharp/OptionEquityShortPutBackspreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityShortPutBackspreadRegressionAlgorithm.cs @@ -122,10 +122,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$9.75"}, {"Estimated Strategy Capacity", "$1200000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZL2DIL4G6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZL2DIPERQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "8.84%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "7294da06231632975e97c57721d26442"} + {"OrderListHash", "eeef2acb2fcf1b166d8884fcf8b49bbd"} }; } } diff --git a/Algorithm.CSharp/OptionEquityStraddleRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityStraddleRegressionAlgorithm.cs index 0ea9ef9f38b8..553cf76bf190 100644 --- a/Algorithm.CSharp/OptionEquityStraddleRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityStraddleRegressionAlgorithm.cs @@ -116,10 +116,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$13.00"}, {"Estimated Strategy Capacity", "$270000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "14.41%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "15b312a11b54cf67489d550260c68f5c"} + {"OrderListHash", "b70cd0519217e6970f4aaaa04331ca68"} }; } } diff --git a/Algorithm.CSharp/OptionEquityStrangleRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityStrangleRegressionAlgorithm.cs index 4250c3925d6c..13a5b2002f9f 100644 --- a/Algorithm.CSharp/OptionEquityStrangleRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityStrangleRegressionAlgorithm.cs @@ -116,10 +116,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$13.00"}, {"Estimated Strategy Capacity", "$250000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "13.14%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "14a2226f740e34fb9c06e5c6ace85ceb"} + {"OrderListHash", "a8bc714c098862047c37ce9389e252a5"} }; } } diff --git a/Algorithm.CSharp/OptionEquityStrategyMatcherRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityStrategyMatcherRegressionAlgorithm.cs index 1a5237dc79b1..b727b16dea5c 100644 --- a/Algorithm.CSharp/OptionEquityStrategyMatcherRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityStrategyMatcherRegressionAlgorithm.cs @@ -153,10 +153,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$36.95"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMEBBB2E|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMEBFLDY|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "274.86%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "003871a1f5e8ed7352d41c4b66fe8944"} + {"OrderListHash", "6d0e54c4897844ae98e478045bbd1569"} }; } } diff --git a/Algorithm.CSharp/OptionExerciseAssignRegressionAlgorithm.cs b/Algorithm.CSharp/OptionExerciseAssignRegressionAlgorithm.cs index 631e31615f9e..6fe8d4fc6bd6 100644 --- a/Algorithm.CSharp/OptionExerciseAssignRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionExerciseAssignRegressionAlgorithm.cs @@ -163,7 +163,7 @@ public override void OnAssignmentOrderEvent(OrderEvent assignmentEvent) {"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "30.10%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "c32a840b8e572bce151e319354df0723"} + {"OrderListHash", "b7830811367ced9052c1623875787637"} }; } } diff --git a/Algorithm.CSharp/OptionExerciseOnExpiryAndNonTradableDateRegressionAlgorithm.cs b/Algorithm.CSharp/OptionExerciseOnExpiryAndNonTradableDateRegressionAlgorithm.cs index 047ea06bda73..d4867599a759 100644 --- a/Algorithm.CSharp/OptionExerciseOnExpiryAndNonTradableDateRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionExerciseOnExpiryAndNonTradableDateRegressionAlgorithm.cs @@ -153,10 +153,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$8000.00"}, - {"Lowest Capacity Asset", "SPXW Y9T7LPL1X0TQ|SPX 31"}, + {"Lowest Capacity Asset", "SPXW Y9T7LPL21B5A|SPX 31"}, {"Portfolio Turnover", "0.02%"}, {"Drawdown Recovery", "4"}, - {"OrderListHash", "764432f8c2753cb2d5120a98997da47a"} + {"OrderListHash", "a1f4c8031a753d2b73655adf94f9889b"} }; } } diff --git a/Algorithm.CSharp/OptionExerciseRegressionAlgorithm.cs b/Algorithm.CSharp/OptionExerciseRegressionAlgorithm.cs index 9abd4ea9b605..dc4b6bf6460d 100644 --- a/Algorithm.CSharp/OptionExerciseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionExerciseRegressionAlgorithm.cs @@ -154,10 +154,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$23.00"}, {"Estimated Strategy Capacity", "$420000.00"}, - {"Lowest Capacity Asset", "AAPL 2ZQA0P58YFYIU|AAPL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AAPL 2ZQA0P58YK8UE|AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "66.12%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "046413f5ee0d4c200e5a98d823ae5a61"} + {"OrderListHash", "8e667d067b15819e8626d2157ce7b0b5"} }; } } diff --git a/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs b/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs index 1594f7f14675..4a0c6a701dfb 100644 --- a/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionOTMExpiryOrderHasZeroPriceRegressionAlgorithm.cs @@ -201,10 +201,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-23.065"}, {"Total Fees", "$1.42"}, {"Estimated Strategy Capacity", "$180000000.00"}, - {"Lowest Capacity Asset", "ES XFH59UPHGV9G|ES XFH59UK0MYO1"}, + {"Lowest Capacity Asset", "ES XFH59UPHL5L0|ES XFH59UK0MYO1"}, {"Portfolio Turnover", "0.02%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "1d3c36cec32b24e8911d87d7b9730192"} + {"OrderListHash", "d84cd529c8535b576d63c0f9c29635c3"} }; } } diff --git a/Algorithm.CSharp/OptionOpenInterestRegressionAlgorithm.cs b/Algorithm.CSharp/OptionOpenInterestRegressionAlgorithm.cs index 1a17a8975694..15e8a8d5a63f 100644 --- a/Algorithm.CSharp/OptionOpenInterestRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionOpenInterestRegressionAlgorithm.cs @@ -164,10 +164,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "AOL W78ZERDZK1QE|AOL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AOL W78ZERDZOC1Y|AOL R735QTJ8XC9X"}, {"Portfolio Turnover", "0.07%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "58c3e82532109b692429e1eb062296b5"} + {"OrderListHash", "020bab5fcb635e1378f404364e9495a2"} }; } } diff --git a/Algorithm.CSharp/OptionRenameDailyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionRenameDailyRegressionAlgorithm.cs index 0c42dd193bdc..198bb8098250 100644 --- a/Algorithm.CSharp/OptionRenameDailyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionRenameDailyRegressionAlgorithm.cs @@ -194,10 +194,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "NWSA VJ5IKAXU7WBQ|NWSA T3MO1488O0H1"}, + {"Lowest Capacity Asset", "NWSA VJ5IKAXUC6NA|NWSA T3MO1488O0H1"}, {"Portfolio Turnover", "0.06%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "4dc221b1c1461ada80a8d494dd8f2610"} + {"OrderListHash", "bab17a4489f3ecf79df28e661de80a9f"} }; } } diff --git a/Algorithm.CSharp/OptionRenameRegressionAlgorithm.cs b/Algorithm.CSharp/OptionRenameRegressionAlgorithm.cs index 135aef3adfcb..180898b9cea5 100644 --- a/Algorithm.CSharp/OptionRenameRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionRenameRegressionAlgorithm.cs @@ -182,10 +182,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$4.00"}, {"Estimated Strategy Capacity", "$8600000.00"}, - {"Lowest Capacity Asset", "NWSA VJ5IKAXU7WBQ|NWSA T3MO1488O0H1"}, + {"Lowest Capacity Asset", "NWSA VJ5IKAXUC6NA|NWSA T3MO1488O0H1"}, {"Portfolio Turnover", "0.13%"}, {"Drawdown Recovery", "2"}, - {"OrderListHash", "83dfb4b2f1d41429273d83335b63426c"} + {"OrderListHash", "9e6589151844ae971e04a44a72fb80cd"} }; } } diff --git a/Algorithm.CSharp/OptionResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/OptionResolutionRegressionAlgorithm.cs index 7e46616f0da3..c5cd4d2fa5b7 100644 --- a/Algorithm.CSharp/OptionResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionResolutionRegressionAlgorithm.cs @@ -132,7 +132,7 @@ public override void OnData(Slice slice) {"Lowest Capacity Asset", ""}, {"Portfolio Turnover", "0%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "ce4cdd4d05199b633559cd14bc6db237"} + {"OrderListHash", "2a63ba11c7395ae4f7b710aa3a64c71a"} }; } } diff --git a/Algorithm.CSharp/OptionShortCallMarginCallEventsAlgorithm.cs b/Algorithm.CSharp/OptionShortCallMarginCallEventsAlgorithm.cs index fe34a43b590f..aec7cc3ce60d 100644 --- a/Algorithm.CSharp/OptionShortCallMarginCallEventsAlgorithm.cs +++ b/Algorithm.CSharp/OptionShortCallMarginCallEventsAlgorithm.cs @@ -120,10 +120,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "-2.981"}, {"Total Fees", "$7.50"}, {"Estimated Strategy Capacity", "$66000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "1.01%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "98d7ad800db7b97a373ca7edc56e3223"} + {"OrderListHash", "039fb1adfb5366ea629e3f5e0646ab8b"} }; } } diff --git a/Algorithm.CSharp/OptionSplitRegressionAlgorithm.cs b/Algorithm.CSharp/OptionSplitRegressionAlgorithm.cs index 00f0d8012051..b15887f61377 100644 --- a/Algorithm.CSharp/OptionSplitRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionSplitRegressionAlgorithm.cs @@ -165,10 +165,10 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$88000.00"}, - {"Lowest Capacity Asset", "AAPL VRCWOCTRR37Q|AAPL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AAPL VRCWOCTRVDJA|AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "0.04%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "75e0d3e5d72502421287925c55de3054"} + {"OrderListHash", "6753be1c117f9528f920eb84976a070f"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseBoxSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseBoxSpreadRegressionAlgorithm.cs index cc1eed036bd0..8b7f4342044f 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseBoxSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseBoxSpreadRegressionAlgorithm.cs @@ -125,10 +125,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$4.00"}, {"Estimated Strategy Capacity", "$3600000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPQ5YT51I|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPQ5YXFD2|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "3.66%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "b498b296357ad672073c12dce73be212"} + {"OrderListHash", "b8f487d284100b6fe8cf84b0bcbd5941"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseCallButterflyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseCallButterflyRegressionAlgorithm.cs index 940b188dd074..4298de39e68c 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseCallButterflyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseCallButterflyRegressionAlgorithm.cs @@ -121,10 +121,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$3.30"}, {"Estimated Strategy Capacity", "$4000000.00"}, - {"Lowest Capacity Asset", "GOOCV W7FVK9Q85UPY|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W7FVK9Q8A51I|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "3.86%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "4aa7b753745ce198ab5c92ab730ddb06"} + {"OrderListHash", "8588e9d994886ac2d6118ec7bd99a37b"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseCallCalendarSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseCallCalendarSpreadRegressionAlgorithm.cs index 4af060b69fb6..d2af342853e7 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseCallCalendarSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseCallCalendarSpreadRegressionAlgorithm.cs @@ -114,10 +114,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$1700000.00"}, - {"Lowest Capacity Asset", "GOOCV W7TNTL2UX5FQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W7TNTL2V1FRA|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.58%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8a33a4fad0585112f230f75f03e0c2fd"} + {"OrderListHash", "89f5088049017cdefcda5b924f142ce6"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseCallLadderRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseCallLadderRegressionAlgorithm.cs index 340180b2112c..638b1e5815f2 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseCallLadderRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseCallLadderRegressionAlgorithm.cs @@ -121,10 +121,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$3.00"}, {"Estimated Strategy Capacity", "$11000000.00"}, - {"Lowest Capacity Asset", "GOOCV W7FVKA6RJBNQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W7FVKA6RNLZA|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.97%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "73508fbc2c2f4ee3ffdb4dc653717205"} + {"OrderListHash", "a6e4aef493f4429caa9e7495e944a77a"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseCallSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseCallSpreadRegressionAlgorithm.cs index 6b62f1497000..c287102901e4 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseCallSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseCallSpreadRegressionAlgorithm.cs @@ -114,10 +114,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$10000000.00"}, - {"Lowest Capacity Asset", "GOOCV W7FVKA6RJBNQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W7FVKA6RNLZA|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.09%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8efb4594409cb11fc8b25a1eedb2b3e3"} + {"OrderListHash", "0e99ad3d24cce65429344fcbc810923d"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseConversionRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseConversionRegressionAlgorithm.cs index f4e2c167fe6f..b08201bcacb8 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseConversionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseConversionRegressionAlgorithm.cs @@ -113,10 +113,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$3.00"}, {"Estimated Strategy Capacity", "$15000000.00"}, - {"Lowest Capacity Asset", "GOOCV W7FVK9Q85UPY|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W7FVK9Q8A51I|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "39.39%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "6fb9441bb0f49a1af2fb73dac30c5982"} + {"OrderListHash", "c5615899d622d94d8b1d8a8a416977f6"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseIronCondorRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseIronCondorRegressionAlgorithm.cs index 9c9a84039d0f..163cb4e90f4d 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseIronCondorRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseIronCondorRegressionAlgorithm.cs @@ -127,10 +127,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$4.00"}, {"Estimated Strategy Capacity", "$3400000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPPH5QXMU|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPPH5V7YE|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.76%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "5162055c872b1954d3c51d05391defc3"} + {"OrderListHash", "8a30c50c7eb8b1b63067a6c17481ea9f"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseJellyRollRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseJellyRollRegressionAlgorithm.cs index c7a5d3fb9f3c..299ad4135349 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseJellyRollRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseJellyRollRegressionAlgorithm.cs @@ -125,10 +125,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$4.00"}, {"Estimated Strategy Capacity", "$3200000.00"}, - {"Lowest Capacity Asset", "GOOCV W7TNTL2UX5FQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W7TNTL2V1FRA|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "4.92%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "5945821ac297e6e39dfd8549af06ba12"} + {"OrderListHash", "7f6c8cf903d0982b244c4c7fc55f9941"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseProtectiveCollarRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseProtectiveCollarRegressionAlgorithm.cs index afde48ee186e..99ff1aee0878 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseProtectiveCollarRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseProtectiveCollarRegressionAlgorithm.cs @@ -114,10 +114,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$3.00"}, {"Estimated Strategy Capacity", "$38000000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPQ5YT51I|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPQ5YXFD2|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "39.24%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "6bbae139ff483b232448a003383f296a"} + {"OrderListHash", "92255bb1d24205b620441d2bb1f21f04"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniversePutButterflyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniversePutButterflyRegressionAlgorithm.cs index ea31ee639136..f7663e701b3b 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniversePutButterflyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniversePutButterflyRegressionAlgorithm.cs @@ -121,10 +121,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$3.30"}, {"Estimated Strategy Capacity", "$3400000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPQ5YT51I|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPQ5YXFD2|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "3.43%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "4d232421a55b71dd93e47e25fff3eff7"} + {"OrderListHash", "f7baa1f5e8b8a9f59563487c1cdd08fa"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniversePutCalendarSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniversePutCalendarSpreadRegressionAlgorithm.cs index d1d75e103fa0..71ff5e467538 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniversePutCalendarSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniversePutCalendarSpreadRegressionAlgorithm.cs @@ -114,10 +114,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$9100000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPPXP4EKM|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPPXP8OW6|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.36%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "d2ff169cdbd21d4229b6381e5417fd33"} + {"OrderListHash", "e7c580fc19e2cc545c96277031b9d9ed"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniversePutLadderRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniversePutLadderRegressionAlgorithm.cs index 27579dc6ac33..665a357ab517 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniversePutLadderRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniversePutLadderRegressionAlgorithm.cs @@ -121,10 +121,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$3.00"}, {"Estimated Strategy Capacity", "$2900000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPPH5QXMU|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPPH5V7YE|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2.43%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "96a0b3dbc7070c667a169459d24ec28e"} + {"OrderListHash", "e8cbf8de4fe77a51f7b09c123d865d09"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniversePutSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniversePutSpreadRegressionAlgorithm.cs index f6b4ed370cb8..f46cc19839e0 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniversePutSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniversePutSpreadRegressionAlgorithm.cs @@ -114,10 +114,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$1900000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPPH5QXMU|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPPH5V7YE|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "1.60%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "7600923ed8d7dae66e7827fde5421cbe"} + {"OrderListHash", "4631d091180d27a2eaa4cdc06c6f4044"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseSingleCallRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseSingleCallRegressionAlgorithm.cs index e2e62e96cb03..5821a6c71143 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseSingleCallRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseSingleCallRegressionAlgorithm.cs @@ -107,10 +107,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$1.00"}, {"Estimated Strategy Capacity", "$9500000.00"}, - {"Lowest Capacity Asset", "GOOCV W7FVK9YHUL6U|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W7FVK9YHYVIE|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "0.87%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "05291a87003539134cf529870851206f"} + {"OrderListHash", "50acbede042747f30c4fe8cae47a84c0"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseSinglePutRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseSinglePutRegressionAlgorithm.cs index 70ff6327cb34..578af95cd55e 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseSinglePutRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseSinglePutRegressionAlgorithm.cs @@ -107,10 +107,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$1.00"}, {"Estimated Strategy Capacity", "$8100000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPPXP4EKM|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPPXP8OW6|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "0.77%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "5ebd6e00d06329e3c7151407527e449f"} + {"OrderListHash", "c16233245f4266df677d9bf5d0ec2e43"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseStraddleRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseStraddleRegressionAlgorithm.cs index 382b9f70fef5..61bd7c7bce4f 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseStraddleRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseStraddleRegressionAlgorithm.cs @@ -112,10 +112,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$2400000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPPXP4EKM|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPPXP8OW6|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "1.99%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "6d7049bd413081a2ece8609841aebe02"} + {"OrderListHash", "cb036434acd9a61cb85bd4b2b5671b79"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyFilteringUniverseStrangleRegressionAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFilteringUniverseStrangleRegressionAlgorithm.cs index 87f99da0b489..8150e7842b0f 100644 --- a/Algorithm.CSharp/OptionStrategyFilteringUniverseStrangleRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFilteringUniverseStrangleRegressionAlgorithm.cs @@ -113,10 +113,10 @@ protected override void TestFiltering(OptionChain chain) {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$2000000.00"}, - {"Lowest Capacity Asset", "GOOCV 306JVPPH5QXMU|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306JVPPH5V7YE|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "1.64%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "dcae5f3a4eadd9acf5a72f6cf4b386a1"} + {"OrderListHash", "e0599c7737867243d62b3b3311535842"} }; } } diff --git a/Algorithm.CSharp/OptionStrategyMarginCallEventsAlgorithm.cs b/Algorithm.CSharp/OptionStrategyMarginCallEventsAlgorithm.cs index c2985e1b9662..14ab078411c5 100644 --- a/Algorithm.CSharp/OptionStrategyMarginCallEventsAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyMarginCallEventsAlgorithm.cs @@ -143,7 +143,7 @@ public override void OnMarginCall(List requests) {"Treynor Ratio", "0"}, {"Total Fees", "$1252.00"}, {"Estimated Strategy Capacity", "$130000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "1.17%"}, {"OrderListHash", "681be68373c2f38e51456d7f8010e7d3"} }; diff --git a/Algorithm.CSharp/OptionSymbolCanonicalRegressionAlgorithm.cs b/Algorithm.CSharp/OptionSymbolCanonicalRegressionAlgorithm.cs index 3e3e09fe3b62..7d625a1bc535 100644 --- a/Algorithm.CSharp/OptionSymbolCanonicalRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionSymbolCanonicalRegressionAlgorithm.cs @@ -118,10 +118,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$1.00"}, {"Estimated Strategy Capacity", "$5700000.00"}, - {"Lowest Capacity Asset", "AOL VRKS95ENLBYE|AOL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AOL VRKS95ENPM9Y|AOL R735QTJ8XC9X"}, {"Portfolio Turnover", "0.59%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "cf5752ad13afe5294a9a8aad660d015a"} + {"OrderListHash", "4351c4e0db0da9c6c9e032a08ee861ff"} }; } } diff --git a/Algorithm.CSharp/RegressionTests/Collective2IndexOptionAlgorithm.cs b/Algorithm.CSharp/RegressionTests/Collective2IndexOptionAlgorithm.cs index 6128534d6eae..bddb8bfe1e39 100644 --- a/Algorithm.CSharp/RegressionTests/Collective2IndexOptionAlgorithm.cs +++ b/Algorithm.CSharp/RegressionTests/Collective2IndexOptionAlgorithm.cs @@ -151,10 +151,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "5.946"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$8000.00"}, - {"Lowest Capacity Asset", "SPXW XKX6S2GM9PGU|SPX 31"}, + {"Lowest Capacity Asset", "SPXW XKX6S2GMDZSE|SPX 31"}, {"Portfolio Turnover", "0.01%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "44d9880b19d4709447faf505d24aad7f"} + {"OrderListHash", "ad9c0f3aa3b311065df12bcff9a2b4de"} }; } } diff --git a/Algorithm.CSharp/RemoveUnderlyingRegressionAlgorithm.cs b/Algorithm.CSharp/RemoveUnderlyingRegressionAlgorithm.cs index 9dd057804e0b..07d41de81a9d 100644 --- a/Algorithm.CSharp/RemoveUnderlyingRegressionAlgorithm.cs +++ b/Algorithm.CSharp/RemoveUnderlyingRegressionAlgorithm.cs @@ -127,10 +127,10 @@ select optionContract {"Treynor Ratio", "0"}, {"Total Fees", "$1.00"}, {"Estimated Strategy Capacity", "$28000.00"}, - {"Lowest Capacity Asset", "GOOCV 305RBQ2BZBZT2|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 305RBQ2BZGA4M|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "0.07%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "10acd880e4d9a4593efd155ba291c4e3"} + {"OrderListHash", "35f9749f41b6fd30dfcd6b74f172a93a"} }; } } diff --git a/Algorithm.CSharp/RevertComboOrderPositionsAlgorithm.cs b/Algorithm.CSharp/RevertComboOrderPositionsAlgorithm.cs index 75b20a65dcf5..5b89eea17645 100644 --- a/Algorithm.CSharp/RevertComboOrderPositionsAlgorithm.cs +++ b/Algorithm.CSharp/RevertComboOrderPositionsAlgorithm.cs @@ -214,10 +214,10 @@ private decimal GetComboOrderFillPrice(List orderTickets) {"Treynor Ratio", "0"}, {"Total Fees", "$36.00"}, {"Estimated Strategy Capacity", "$15000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZERHAT67A|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "2088.83%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "52947bba687287a189cee038daec6918"} + {"OrderListHash", "89a786ad77fd17f19037676d3fc66d94"} }; } } diff --git a/Algorithm.CSharp/RollOutFrontMonthToBackMonthOptionUsingCalendarSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/RollOutFrontMonthToBackMonthOptionUsingCalendarSpreadRegressionAlgorithm.cs index 0ae067561412..2563a071035a 100644 --- a/Algorithm.CSharp/RollOutFrontMonthToBackMonthOptionUsingCalendarSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/RollOutFrontMonthToBackMonthOptionUsingCalendarSpreadRegressionAlgorithm.cs @@ -178,10 +178,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$3.00"}, {"Estimated Strategy Capacity", "$190000.00"}, - {"Lowest Capacity Asset", "GOOCV 306CZK4DP0LC6|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 306CZK4DP4VNQ|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "1.19%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "007124f0e2e4f0048f367782ef7fcd02"} + {"OrderListHash", "860bacced1208f152cfc0aad369a111e"} }; } } diff --git a/Algorithm.CSharp/SingleOptionPositionGroupBuyingPowerModelRegressionAlgorithm.cs b/Algorithm.CSharp/SingleOptionPositionGroupBuyingPowerModelRegressionAlgorithm.cs index ce8a9afbb5ab..b91c5757f287 100644 --- a/Algorithm.CSharp/SingleOptionPositionGroupBuyingPowerModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SingleOptionPositionGroupBuyingPowerModelRegressionAlgorithm.cs @@ -205,10 +205,10 @@ private void PerfomQuantityCalculations(IPositionGroup positionGroup, Security s {"Treynor Ratio", "-4.737"}, {"Total Fees", "$19.50"}, {"Estimated Strategy Capacity", "$49000.00"}, - {"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV W78ZFMML4BUU|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "0.45%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "5d2df7cb88dbc63da13518c0195eea60"} + {"OrderListHash", "8b8bafd11c0c2a868dbbc28db36d4ce0"} }; } } diff --git a/Algorithm.CSharp/WarmupLowerResolutionOptionRegressionAlgorithm.cs b/Algorithm.CSharp/WarmupLowerResolutionOptionRegressionAlgorithm.cs index 266ba4b4d371..764fedd6a9eb 100644 --- a/Algorithm.CSharp/WarmupLowerResolutionOptionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/WarmupLowerResolutionOptionRegressionAlgorithm.cs @@ -167,10 +167,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$5000.00"}, - {"Lowest Capacity Asset", "AAPL 2ZTXYMUME0LUU|AAPL R735QTJ8XC9X"}, + {"Lowest Capacity Asset", "AAPL 2ZTXYMUME4W6E|AAPL R735QTJ8XC9X"}, {"Portfolio Turnover", "1.08%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "1dfc2281fd254870f2e32528e7bb7842"} + {"OrderListHash", "94523a9f34b004d45970aa5ed06f8672"} }; } } diff --git a/Algorithm.CSharp/WarmupOptionRegressionAlgorithm.cs b/Algorithm.CSharp/WarmupOptionRegressionAlgorithm.cs index af40df66beb9..0490920a8664 100644 --- a/Algorithm.CSharp/WarmupOptionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/WarmupOptionRegressionAlgorithm.cs @@ -154,10 +154,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "0"}, {"Total Fees", "$2.00"}, {"Estimated Strategy Capacity", "$1300000.00"}, - {"Lowest Capacity Asset", "GOOCV 30AKMEIPOSS1Y|GOOCV VP83T1ZUHROL"}, + {"Lowest Capacity Asset", "GOOCV 30AKMEIPOX2DI|GOOCV VP83T1ZUHROL"}, {"Portfolio Turnover", "10.71%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8a36462ee0349c04d01d464e592dd347"} + {"OrderListHash", "19ba1220073493495880581b38df2da9"} }; } } diff --git a/Common/SecurityIdentifier.cs b/Common/SecurityIdentifier.cs index d6e7706b54aa..dad234444762 100644 --- a/Common/SecurityIdentifier.cs +++ b/Common/SecurityIdentifier.cs @@ -42,6 +42,7 @@ public class SecurityIdentifier : IEquatable, IComparable TypeMapping = new(); private static readonly Dictionary SecurityIdentifierCache = new(); private static readonly char[] InvalidCharacters = {'|', ' '}; @@ -81,7 +82,7 @@ public class SecurityIdentifier : IEquatable, IComparable Date: Mon, 24 Nov 2025 16:09:39 -0500 Subject: [PATCH 017/103] Replace /// with (#9095) --- Common/Api/Nodes.cs | 20 ++- Common/Global.cs | 135 +++++++++++++++++- Common/Packets/Packet.cs | 104 ++++++++++++++ .../Interfaces/IContinuousContractModel.cs | 4 + Common/Series.cs | 19 ++- 5 files changed, 274 insertions(+), 8 deletions(-) diff --git a/Common/Api/Nodes.cs b/Common/Api/Nodes.cs index 1cc97e9e7046..f1a39da30b15 100644 --- a/Common/Api/Nodes.cs +++ b/Common/Api/Nodes.cs @@ -243,12 +243,20 @@ public override string ToString() /// public enum NodeType { - /// A node for running backtests - Backtest, //0 - /// A node for running research - Research, //1 - /// A node for live trading - Live //2 + /// + /// A node for running backtests (0) + /// + Backtest, + + /// + /// A node for running research (1) + /// + Research, + + /// + /// A node for live trading (2) + /// + Live } /// diff --git a/Common/Global.cs b/Common/Global.cs index c03edebed771..60fd027d4411 100644 --- a/Common/Global.cs +++ b/Common/Global.cs @@ -443,19 +443,39 @@ public enum AccountType /// public enum MarketDataType { + /// /// Base market data type (0) + /// Base, + + /// /// TradeBar market data type (OHLC summary bar) (1) + /// TradeBar, + + /// /// Tick market data type (price-time pair) (2) + /// Tick, + + /// /// Data associated with an instrument (3) + /// Auxiliary, + + /// /// QuoteBar market data type (4) [Bid(OHLC), Ask(OHLC) and Mid(OHLC) summary bar] + /// QuoteBar, + + /// /// Option chain data (5) + /// OptionChain, + + /// /// Futures chain data (6) + /// FuturesChain } @@ -464,13 +484,24 @@ public enum MarketDataType /// public enum DataFeedEndpoint { + /// /// Backtesting Datafeed Endpoint (0) + /// Backtesting, + + /// /// Loading files off the local system (1) + /// FileSystem, + + /// /// Getting datafeed from a QC-Live-Cloud (2) + /// LiveTrading, + + /// /// Database (3) + /// Database } @@ -479,10 +510,14 @@ public enum DataFeedEndpoint /// public enum StoragePermissions { + /// /// Public Storage Permissions (0) + /// Public, + /// /// Authenticated Read Storage Permissions (1) + /// Authenticated } @@ -492,11 +527,19 @@ public enum StoragePermissions /// QuantConnect currently only has trade, quote, open interest tick data. public enum TickType { + /// /// Trade type tick object (0) - Trade , + /// + Trade, + + /// /// Quote type tick object (1) + /// Quote, + + /// /// Open Interest type tick object (for options, futures) (2) + /// OpenInterest } @@ -538,15 +581,29 @@ public enum SplitType /// Always sort the enum from the smallest to largest resolution public enum Resolution { + /// /// Tick Resolution (0) + /// Tick, + + /// /// Second Resolution (1) + /// Second, + + /// /// Minute Resolution (2) + /// Minute, + + /// /// Hour Resolution (3) + /// Hour, + + /// /// Daily Resolution (4) + /// Daily } @@ -662,29 +719,64 @@ public AlgorithmControl() /// public enum AlgorithmStatus { + /// /// Error compiling algorithm at start (0) + /// DeployError, + + /// /// Waiting for a server (1) + /// InQueue, + + /// /// Running algorithm (2) + /// Running, + + /// /// Stopped algorithm or exited with runtime errors (3) + /// Stopped, + + /// /// Liquidated algorithm (4) + /// Liquidated, + + /// /// Algorithm has been deleted (5) + /// Deleted, + + /// /// Algorithm completed running (6) + /// Completed, + + /// /// Runtime Error Stoped Algorithm (7) + /// RuntimeError, + + /// /// Error in the algorithm id (not used) (8) + /// Invalid, + + /// /// The algorithm is logging into the brokerage (9) + /// LoggingIn, + + /// /// The algorithm is initializing (10) + /// Initializing, + + /// /// History status update (11) + /// History } @@ -745,33 +837,74 @@ public enum WritePolicy /// public enum Period { + /// /// Period Short Codes - 10 + /// TenSeconds = 10, + + /// /// Period Short Codes - 30 Second + /// ThirtySeconds = 30, + + /// /// Period Short Codes - 60 Second + /// OneMinute = 60, + + /// /// Period Short Codes - 120 Second + /// TwoMinutes = 120, + + /// /// Period Short Codes - 180 Second + /// ThreeMinutes = 180, + + /// /// Period Short Codes - 300 Second + /// FiveMinutes = 300, + + /// /// Period Short Codes - 600 Second + /// TenMinutes = 600, + + /// /// Period Short Codes - 900 Second + /// FifteenMinutes = 900, + + /// /// Period Short Codes - 1200 Second + /// TwentyMinutes = 1200, + + /// /// Period Short Codes - 1800 Second + /// ThirtyMinutes = 1800, + + /// /// Period Short Codes - 3600 Second + /// OneHour = 3600, + + /// /// Period Short Codes - 7200 Second + /// TwoHours = 7200, + + /// /// Period Short Codes - 14400 Second + /// FourHours = 14400, + + /// /// Period Short Codes - 21600 Second + /// SixHours = 21600 } diff --git a/Common/Packets/Packet.cs b/Common/Packets/Packet.cs index 831d0c44a195..f4b308663cd6 100644 --- a/Common/Packets/Packet.cs +++ b/Common/Packets/Packet.cs @@ -51,160 +51,264 @@ public Packet(PacketType type) [JsonConverter(typeof(StringEnumConverter))] public enum PacketType { + /// /// Default, unset: + /// None, + /// /// Base type for backtest and live work + /// AlgorithmNode, + /// /// Autocomplete Work Packet + /// AutocompleteWork, + /// /// Result of the Autocomplete Job: + /// AutocompleteResult, + /// /// Controller->Backtest Node Packet: + /// BacktestNode, + /// /// Packet out of backtest node: + /// BacktestResult, + /// /// API-> Controller Work Packet: + /// BacktestWork, + /// /// Controller -> Live Node Packet: + /// LiveNode, + /// /// Live Node -> User Packet: + /// LiveResult, + /// /// API -> Controller Packet: + /// LiveWork, + /// /// Node -> User Algo Security Types + /// SecurityTypes, + /// /// Controller -> User Error in Backtest Settings: + /// BacktestError, + /// /// Nodes -> User Algorithm Status Packet: + /// AlgorithmStatus, + /// /// API -> Compiler Work Packet: + /// BuildWork, + /// /// Compiler -> User Build Success + /// BuildSuccess, + /// /// Compiler -> User, Compile Error + /// BuildError, + /// /// Node -> User Algorithm Runtime Error + /// RuntimeError, + /// /// Error is an internal handled error packet inside users algorithm + /// HandledError, + /// /// Nodes -> User Log Message + /// Log, + /// /// Nodes -> User Debug Message + /// Debug, + /// /// Nodes -> User, Order Update Event + /// OrderEvent, + /// /// Boolean true/false success + /// Success, + /// /// History live job packets + /// History, + /// /// Result from a command + /// CommandResult, + /// /// Hook from git hub + /// GitHubHook, + /// /// Documentation result from docs server + /// DocumentationResult, + /// /// Documentation request to the docs server + /// Documentation, + /// /// Debug packet generated by Lean + /// SystemDebug, + /// /// Packet containing insights generated by the algorithm + /// AlphaResult, + /// /// Alpha API -> Controller packet + /// AlphaWork, + /// /// Alpha Controller -> Alpha Node packet + /// AlphaNode, + /// /// Packet containing list of algorithms to run as a regression test + /// RegressionAlgorithm, + /// /// Packet containing a heartbeat + /// AlphaHeartbeat, + /// /// Used when debugging to send status updates + /// DebuggingStatus, + /// /// Optimization Node Packet: + /// OptimizationNode, + /// /// Optimization Estimate Packet: + /// OptimizationEstimate, + /// /// Optimization work status update + /// OptimizationStatus, + /// /// Optimization work result + /// OptimizationResult, + /// /// Aggregated packets + /// Aggregated, + /// /// Query the language model + /// LanguageModelQuery, + /// /// Send feedback to a language model response + /// LanguageModelFeedback, + /// /// The language models response + /// LanguageModelResponse, + /// /// Language model code analysis + /// LanguageModelCodeAnalysis, + /// /// Language model chat work + /// LanguageModelChatWork, + /// /// Language model chat response + /// LanguageModelChatResponse, + /// /// Algorithm name update + /// AlgorithmNameUpdate, + /// /// Algorithm tags update + /// AlgorithmTagsUpdate, + /// /// Research job packet + /// ResearchNode, + /// /// Organization update + /// OrganizationUpdate, + /// /// Compiler -> User Build Warnings + /// BuildWarning, + /// /// Language model function call related packet + /// LanguageModelFunctionCall, + /// /// Language model agent message + /// LanguageModelAgentMessage, } } diff --git a/Common/Securities/Interfaces/IContinuousContractModel.cs b/Common/Securities/Interfaces/IContinuousContractModel.cs index 1af3560d3166..d3d257c73cf7 100644 --- a/Common/Securities/Interfaces/IContinuousContractModel.cs +++ b/Common/Securities/Interfaces/IContinuousContractModel.cs @@ -24,10 +24,14 @@ namespace QuantConnect.Securities.Interfaces /// public enum AdjustmentType { + /// /// ForwardAdjusted - new quotes are adjusted as new data comes + /// ForwardAdjusted, + /// /// BackAdjusted - old quotes are retrospectively adjusted as new data comes + /// BackAdjusted }; diff --git a/Common/Series.cs b/Common/Series.cs index 5974b2eddb21..6aa39e0c46d0 100644 --- a/Common/Series.cs +++ b/Common/Series.cs @@ -176,7 +176,7 @@ public override ISeriesPoint ConsolidateChartPoints() var sum = 0m; foreach (ChartPoint point in Values) { - if(point.y.HasValue) + if (point.y.HasValue) { sum += point.y.Value; } @@ -216,22 +216,39 @@ public override BaseSeries Clone(bool empty = false) [JsonConverter(typeof(StringEnumConverter))] public enum ScatterMarkerSymbol { + /// /// Circle symbol (0) + /// [EnumMember(Value = "none")] None, + + /// /// Circle symbol (1) + /// [EnumMember(Value = "circle")] Circle, + + /// /// Square symbol (2) + /// [EnumMember(Value = "square")] Square, + + /// /// Diamond symbol (3) + /// [EnumMember(Value = "diamond")] Diamond, + + /// /// Triangle symbol (4) + /// [EnumMember(Value = "triangle")] Triangle, + + /// /// Triangle-down symbol (5) + /// [EnumMember(Value = "triangle-down")] TriangleDown } From acb787e8f625bde9c17d5e5fa7cdcd2950cabb05 Mon Sep 17 00:00:00 2001 From: yyxxddjj <2505553080@qq.com> Date: Tue, 25 Nov 2025 05:51:42 +0800 Subject: [PATCH 018/103] Docs(Algorithm): Add XML code references (#9077) * Docs(Algorithm): Add XML code references Adds XML documentation tags (, ) to code references within the Algorithm folder. This improves code navigation, IntelliSense, and helps the stubs generator tool to correctly map C# elements. Resolves #9016 * Fix missing newline at end of QCAlgorithm.cs * Update print statement from 'Hello' to 'Goodbye' * Fix documentation for market parameter in crypto methods --- Algorithm/ConstituentUniverseDefinitions.cs | 16 ++--- Algorithm/DollarVolumeUniverseDefinitions.cs | 2 +- Algorithm/QCAlgorithm.Framework.cs | 12 ++-- Algorithm/QCAlgorithm.cs | 68 ++++++++++---------- 4 files changed, 50 insertions(+), 48 deletions(-) diff --git a/Algorithm/ConstituentUniverseDefinitions.cs b/Algorithm/ConstituentUniverseDefinitions.cs index e83ffebc92a7..54b1e63c62eb 100644 --- a/Algorithm/ConstituentUniverseDefinitions.cs +++ b/Algorithm/ConstituentUniverseDefinitions.cs @@ -29,7 +29,7 @@ public class ConstituentUniverseDefinitions private readonly IAlgorithm _algorithm; /// - /// Universe which selects companies whose revenues and earnings have both been growing significantly faster than + /// which selects companies whose revenues and earnings have both been growing significantly faster than /// the general economy. /// public Universe AggressiveGrowth(UniverseSettings universeSettings = null) @@ -40,7 +40,7 @@ public Universe AggressiveGrowth(UniverseSettings universeSettings = null) } /// - /// Universe which selects companies that are growing respectably faster than the general economy, and often pay a + /// which selects companies that are growing respectably faster than the general economy, and often pay a /// steady dividend. They tend to be mature and solidly profitable businesses. /// public Universe ClassicGrowth(UniverseSettings universeSettings = null) @@ -51,7 +51,7 @@ public Universe ClassicGrowth(UniverseSettings universeSettings = null) } /// - /// Universe which selects companies in the cyclicals and durables sectors, except those in the three types below. + /// which selects companies in the cyclicals and durables sectors, except those in the three types below. /// The profits of cyclicals tend to rise and fall with the general economy. /// public Universe Cyclicals(UniverseSettings universeSettings = null) @@ -62,7 +62,7 @@ public Universe Cyclicals(UniverseSettings universeSettings = null) } /// - /// Universe which selects companies that have had consistently declining cash flows and earnings over the past + /// which selects companies that have had consistently declining cash flows and earnings over the past /// three years, and/or very high debt. /// public Universe Distressed(UniverseSettings universeSettings = null) @@ -73,7 +73,7 @@ public Universe Distressed(UniverseSettings universeSettings = null) } /// - /// Universe which selects companies that deal in assets such as oil, metals, and real estate, which tend to do + /// which selects companies that deal in assets such as oil, metals, and real estate, which tend to do /// well in inflationary environments. /// public Universe HardAsset(UniverseSettings universeSettings = null) @@ -84,7 +84,7 @@ public Universe HardAsset(UniverseSettings universeSettings = null) } /// - /// Universe which selects companies that have dividend yields at least twice the average for large-cap stocks. + /// which selects companies that have dividend yields at least twice the average for large-cap stocks. /// They tend to be mature, slow-growing companies. /// public Universe HighYield(UniverseSettings universeSettings = null) @@ -95,7 +95,7 @@ public Universe HighYield(UniverseSettings universeSettings = null) } /// - /// Universe which selects companies that have shown slow revenue and earnings growth (typically less than the rate + /// which selects companies that have shown slow revenue and earnings growth (typically less than the rate /// of GDP growth) over at least three years. /// public Universe SlowGrowth(UniverseSettings universeSettings = null) @@ -106,7 +106,7 @@ public Universe SlowGrowth(UniverseSettings universeSettings = null) } /// - /// Universe which selects companies that have shown strong revenue growth but slower or spotty earnings growth. + /// which selects companies that have shown strong revenue growth but slower or spotty earnings growth. /// Very small or young companies also tend to fall into this class. /// public Universe SpeculativeGrowth(UniverseSettings universeSettings = null) diff --git a/Algorithm/DollarVolumeUniverseDefinitions.cs b/Algorithm/DollarVolumeUniverseDefinitions.cs index 909121ef0839..bee8d69de266 100644 --- a/Algorithm/DollarVolumeUniverseDefinitions.cs +++ b/Algorithm/DollarVolumeUniverseDefinitions.cs @@ -40,7 +40,7 @@ public DollarVolumeUniverseDefinitions(QCAlgorithm algorithm) } /// - /// Creates a new coarse universe that contains the top count of stocks + /// Creates a new coarse that contains the top count of stocks /// by daily dollar volume /// /// The number of stock to select diff --git a/Algorithm/QCAlgorithm.Framework.cs b/Algorithm/QCAlgorithm.Framework.cs index ab7bf74bd673..ef46f760f651 100644 --- a/Algorithm/QCAlgorithm.Framework.cs +++ b/Algorithm/QCAlgorithm.Framework.cs @@ -79,8 +79,8 @@ public partial class QCAlgorithm public IRiskManagementModel RiskManagement { get; set; } /// - /// Called by setup handlers after Initialize and allows the algorithm a chance to organize - /// the data gather in the Initialize method + /// Called by setup handlers after and allows the algorithm a chance to organize + /// the data gather in the method /// [DocumentationAttribute(AlgorithmFramework)] public void FrameworkPostInitialize() @@ -100,7 +100,7 @@ public void FrameworkPostInitialize() /// /// Used to send data updates to algorithm framework models /// - /// The current data slice + /// The current data [DocumentationAttribute(AlgorithmFramework)] [DocumentationAttribute(HandlingData)] public void OnFrameworkData(Slice slice) @@ -166,12 +166,12 @@ public void OnFrameworkData(Slice slice) } /// - /// They different framework models will process the new provided insight. + /// They different framework models will process the new provided . /// The will create targets, /// the will adjust the targets /// and the will execute the /// - /// The insight to process + /// The to process [DocumentationAttribute(AlgorithmFramework)] private void ProcessInsights(Insight[] insights) { @@ -179,7 +179,7 @@ private void ProcessInsights(Insight[] insights) var targetsEnumerable = PortfolioConstruction.CreateTargets(this, insights); // for performance only call 'ToArray' if not empty enumerable (which is static) var targets = targetsEnumerable == Enumerable.Empty() - ? new IPortfolioTarget[] {} : targetsEnumerable.ToArray(); + ? new IPortfolioTarget[] { } : targetsEnumerable.ToArray(); // set security targets w/ those generated via portfolio construction module foreach (var target in targets) diff --git a/Algorithm/QCAlgorithm.cs b/Algorithm/QCAlgorithm.cs index 7b8b429d0688..702e6ab4e080 100644 --- a/Algorithm/QCAlgorithm.cs +++ b/Algorithm/QCAlgorithm.cs @@ -256,7 +256,7 @@ public QCAlgorithm() public event AlgorithmEvent InsightsGenerated; /// - /// Security collection is an array of the security objects such as Equities and FOREX. Securities data + /// Security collection is an array of the security objects such as and . Securities data /// manages the properties of tradeable assets such as price, open and close time and holdings information. /// [DocumentationAttribute(SecuritiesAndPortfolio)] @@ -1247,6 +1247,7 @@ public virtual void OnAssignmentOrderEvent(OrderEvent assignmentEvent) /// /// Brokerage message event handler. This method is called for all types of brokerage messages. /// + /// The brokerage message event instance containing the message details. [DocumentationAttribute(LiveTrading)] [DocumentationAttribute(Modeling)] [DocumentationAttribute(TradingAndOrders)] @@ -1440,7 +1441,7 @@ public void SetRiskFreeInterestRateModel(IRiskFreeInterestRateModel model) /// Sets the benchmark used for computing statistics of the algorithm to the specified symbol /// /// symbol to use as the benchmark - /// Is the symbol an equity, forex, base, etc. Default SecurityType.Equity + /// Is the symbol an equity, forex, base, etc. Default /// /// Must use symbol that is available to the trade engine in your data store(not strictly enforced) /// @@ -1462,12 +1463,12 @@ public void SetBenchmark(SecurityType securityType, string symbol) } /// - /// Sets the benchmark used for computing statistics of the algorithm to the specified ticker, defaulting to SecurityType.Equity + /// Sets the benchmark used for computing statistics of the algorithm to the specified ticker, defaulting to /// if the ticker doesn't exist in the algorithm /// /// Ticker to use as the benchmark /// - /// Overload to accept ticker without passing SecurityType. If ticker is in portfolio it will use that SecurityType, otherwise will default to SecurityType.Equity + /// Overload to accept ticker without passing . If ticker is in portfolio it will use that , otherwise will default to /// [DocumentationAttribute(TradingAndOrders)] [DocumentationAttribute(SecuritiesAndPortfolio)] @@ -1531,9 +1532,9 @@ public void SetBenchmark(Func benchmark) } /// - /// Benchmark + /// The for the algorithm /// - /// Use Benchmark to override default symbol based benchmark, and create your own benchmark. For example a custom moving average benchmark + /// Use for the algorithm to override default symbol based benchmark, and create your own benchmark. For example a custom moving average benchmark /// [DocumentationAttribute(TradingAndOrders)] [DocumentationAttribute(SecuritiesAndPortfolio)] @@ -1622,7 +1623,7 @@ public void SetAccountCurrency(string accountCurrency, decimal? startingCash = n /// and replaced with the actual cash of your brokerage account. /// /// Starting cash for the strategy backtest - /// Alias of SetCash(decimal) + /// Alias of [DocumentationAttribute(SecuritiesAndPortfolio)] public void SetCash(double startingCash) { @@ -1634,7 +1635,7 @@ public void SetCash(double startingCash) /// and replaced with the actual cash of your brokerage account. /// /// Starting cash for the strategy backtest - /// Alias of SetCash(decimal) + /// Alias of [DocumentationAttribute(SecuritiesAndPortfolio)] public void SetCash(int startingCash) { @@ -1746,7 +1747,7 @@ public void SetAlgorithmId(string algorithmId) /// /// Set the start date for the backtest /// - /// Datetime Start date for backtest + /// The start date for the backtest /// Must be less than end date and within data available /// [DocumentationAttribute(HandlingData)] @@ -2148,7 +2149,7 @@ public Option AddOption(string underlying, Resolution? resolution = null, string /// /// Underlying asset Symbol to use as the option's underlying /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The option's market, . Default value is null, but will be resolved using BrokerageModel.DefaultMarkets in + /// The option's market, . Default value is null, but will be resolved using in /// If true, data will be provided to the algorithm every Second, Minute, Hour, or Day, while the asset is open and depending on the Resolution this option was configured to use. /// The requested leverage for the /// The new option security instance @@ -2167,7 +2168,7 @@ public Option AddOption(Symbol underlying, Resolution? resolution = null, string /// Underlying asset Symbol to use as the option's underlying /// The target option ticker. This is useful when the option ticker does not match the underlying, e.g. SPX index and the SPXW weekly option. If null is provided will use underlying /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The option's market, . Default value is null, but will be resolved using BrokerageModel.DefaultMarkets in + /// The option's market, . Default value is null, but will be resolved using in /// If true, data will be provided to the algorithm every Second, Minute, Hour, or Day, while the asset is open and depending on the Resolution this option was configured to use. /// The requested leverage for the /// The new option security instance @@ -2206,9 +2207,9 @@ public Option AddOption(Symbol underlying, string targetOption, Resolution? reso /// /// The future ticker /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The futures market, . Default is value null and looked up using BrokerageModel.DefaultMarkets in + /// The futures market, . Default is value null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true - /// The requested leverage for this equity. Default is set by + /// The requested leverage for this future. Default is set by /// Use extended market hours data /// The contract mapping mode to use for the continuous future contract /// The price scaling mode to use for the continuous future contract @@ -2241,7 +2242,7 @@ public Future AddFuture(string ticker, Resolution? resolution = null, string mar /// The futures contract symbol /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is /// If true, returns the last available data even if none in that timeslice. Default is true - /// The requested leverage for this equity. Default is set by + /// The requested leverage for this future. Default is set by /// Use extended market hours data /// The new security [DocumentationAttribute(AddingData)] @@ -2301,12 +2302,13 @@ public Option AddFutureOptionContract(Symbol symbol, Resolution? resolution = nu /// /// Creates and adds index options to the algorithm. /// - /// The underlying ticker of the Index Option + /// The underlying ticker of the /// Resolution of the index option contracts, i.e. the granularity of the data - /// The foreign exchange trading market, . Default value is null and looked up using BrokerageModel.DefaultMarkets in + /// The foreign exchange trading market, . Default value is null and looked up using in /// If true, this will fill in missing data points with the previous data point /// Canonical Option security [DocumentationAttribute(AddingData)] + public IndexOption AddIndexOption(string underlying, Resolution? resolution = null, string market = null, bool fillForward = true) { return AddIndexOption(underlying, null, resolution, market, fillForward); @@ -2350,7 +2352,7 @@ public IndexOption AddIndexOption(Symbol symbol, string targetOption, Resolution /// The underlying ticker of the Index Option /// The target option ticker. This is useful when the option ticker does not match the underlying, e.g. SPX index and the SPXW weekly option. If null is provided will use underlying /// Resolution of the index option contracts, i.e. the granularity of the data - /// The foreign exchange trading market, . Default value is null and looked up using BrokerageModel.DefaultMarkets in + /// The foreign exchange trading market, . Default value is null and looked up using in /// If true, this will fill in missing data points with the previous data point /// Canonical Option security [DocumentationAttribute(AddingData)] @@ -2368,7 +2370,7 @@ public IndexOption AddIndexOption(string underlying, string targetOption, Resolu /// Resolution of the index option contract, i.e. the granularity of the data /// If true, this will fill in missing data points with the previous data point /// Index Option Contract - /// The provided Symbol is not an Index Option + /// The provided Symbol is not an [DocumentationAttribute(AddingData)] public IndexOption AddIndexOptionContract(Symbol symbol, Resolution? resolution = null, bool fillForward = true) { @@ -2386,7 +2388,7 @@ public IndexOption AddIndexOptionContract(Symbol symbol, Resolution? resolution /// The option contract symbol /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is /// If true, returns the last available data even if none in that timeslice. Default is true - /// The requested leverage for this equity. Default is set by + /// The requested leverage for this option. Default is set by /// Use extended market hours data /// The new security [DocumentationAttribute(AddingData)] @@ -2481,9 +2483,9 @@ public Option AddOptionContract(Symbol symbol, Resolution? resolution = null, bo /// /// The currency pair /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The foreign exchange trading market, . Default value is null and looked up using BrokerageModel.DefaultMarkets in + /// The foreign exchange trading market, . Default value is null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true - /// The requested leverage for this equity. Default is set by + /// The requested leverage for this forex security. Default is set by /// The new security [DocumentationAttribute(AddingData)] public Forex AddForex(string ticker, Resolution? resolution = null, string market = null, bool fillForward = true, decimal leverage = Security.NullLeverage) @@ -2494,11 +2496,11 @@ public Forex AddForex(string ticker, Resolution? resolution = null, string marke /// /// Creates and adds a new security to the algorithm /// - /// The currency pair + /// The CFD ticker symbol /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The cfd trading market, . Default value is null and looked up using BrokerageModel.DefaultMarkets in + /// The cfd trading market, . Default value is null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true - /// The requested leverage for this equity. Default is set by + /// The requested leverage for this CFD. Default is set by /// The new security [DocumentationAttribute(AddingData)] public Cfd AddCfd(string ticker, Resolution? resolution = null, string market = null, bool fillForward = true, decimal leverage = Security.NullLeverage) @@ -2510,9 +2512,9 @@ public Cfd AddCfd(string ticker, Resolution? resolution = null, string market = /// /// Creates and adds a new security to the algorithm /// - /// The currency pair + /// The index ticker /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The index trading market, . Default value is null and looked up using BrokerageModel.DefaultMarkets in + /// The index trading market, . Default value is null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true /// The new security [DocumentationAttribute(AddingData)] @@ -2525,11 +2527,11 @@ public Index AddIndex(string ticker, Resolution? resolution = null, string marke /// /// Creates and adds a new security to the algorithm /// - /// The currency pair + /// The crypto ticker symbol/param> /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The cfd trading market, . Default value is null and looked up using BrokerageModel.DefaultMarkets in + /// The The crypto trading market, . Default value is null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true - /// The requested leverage for this equity. Default is set by + /// The requested leverage for this crypto. Default is set by /// The new security [DocumentationAttribute(AddingData)] public Crypto AddCrypto(string ticker, Resolution? resolution = null, string market = null, bool fillForward = true, decimal leverage = Security.NullLeverage) @@ -2540,11 +2542,11 @@ public Crypto AddCrypto(string ticker, Resolution? resolution = null, string mar /// /// Creates and adds a new security to the algorithm /// - /// The currency pair + /// The crypto future ticker symbol /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The cfd trading market, . Default value is null and looked up using BrokerageModel.DefaultMarkets in + /// The The crypto future trading market, . Default value is null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true - /// The requested leverage for this equity. Default is set by + /// The requested leverage for this crypto future. Default is set by /// The new security [DocumentationAttribute(AddingData)] public CryptoFuture AddCryptoFuture(string ticker, Resolution? resolution = null, string market = null, bool fillForward = true, decimal leverage = Security.NullLeverage) @@ -2558,7 +2560,7 @@ public CryptoFuture AddCryptoFuture(string ticker, Resolution? resolution = null /// /// The symbol of the security to be removed /// Optional tag to indicate the cause of removal - /// Sugar syntax for + /// Sugar syntax for [DocumentationAttribute(AddingData)] public bool RemoveOptionContract(Symbol symbol, string tag = null) { From 59990573c2d4801431a922743673edd4addc72be Mon Sep 17 00:00:00 2001 From: Roman Yavnikov <45608740+Romazes@users.noreply.github.com> Date: Tue, 25 Nov 2025 20:32:06 +0200 Subject: [PATCH 019/103] Fix: Use decimal option strike precision (#9099) * fix: use decimal instead long in Scale's LeanData test:feat: validate naming with large precision * feat: use normalization in Scale's LeanData test:fix: strike precisions * fix: use str normalization in Scale's LeanData --- Common/Util/LeanData.cs | 6 +++--- Tests/Common/Util/LeanDataTests.cs | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Common/Util/LeanData.cs b/Common/Util/LeanData.cs index 3072f9bca589..4bbcf1e62e97 100644 --- a/Common/Util/LeanData.cs +++ b/Common/Util/LeanData.cs @@ -946,11 +946,11 @@ public static Symbol ReadSymbolFromZipEntry(Symbol symbol, Resolution resolution } /// - /// Scale and convert the resulting number to deci-cents int. + /// Scales the value by 10_000 and returns a normalized string. /// - private static long Scale(decimal value) + private static string Scale(decimal value) { - return (long)(value * 10000); + return Extensions.NormalizeToStr(value * 10_000m); } /// diff --git a/Tests/Common/Util/LeanDataTests.cs b/Tests/Common/Util/LeanDataTests.cs index 9e9dabb4ccb2..f09a18f79737 100644 --- a/Tests/Common/Util/LeanDataTests.cs +++ b/Tests/Common/Util/LeanDataTests.cs @@ -257,7 +257,7 @@ public void GetSource(LeanDataTestParameters parameters) var factory = (BaseData)Activator.CreateInstance(parameters.BaseDataType); var source = factory.GetSource(parameters.Config, parameters.Date, false); var expected = parameters.ExpectedZipFilePath; - if (parameters.SecurityType == SecurityType.Option || parameters.SecurityType == SecurityType.Future) + if (parameters.SecurityType is SecurityType.Option or SecurityType.Future or SecurityType.FutureOption) { expected += "#" + parameters.ExpectedZipEntryName; } @@ -818,6 +818,10 @@ private static TestCaseData[] GetLeanDataTestParameters() new LeanDataTestParameters(Symbols.SPY_P_192_Feb19_2016, date, Resolution.Hour, TickType.Quote, "spy_2016_quote_american.zip", "spy_quote_american_put_1920000_20160219.csv", "option/usa/hour"), new LeanDataTestParameters(Symbols.SPY_P_192_Feb19_2016, date, Resolution.Daily, TickType.Trade, "spy_2016_trade_american.zip", "spy_trade_american_put_1920000_20160219.csv", "option/usa/daily"), new LeanDataTestParameters(Symbols.SPY_P_192_Feb19_2016, date, Resolution.Daily, TickType.Quote, "spy_2016_quote_american.zip", "spy_quote_american_put_1920000_20160219.csv", "option/usa/daily"), + + // future option + new LeanDataTestParameters(Symbol.CreateOption(Symbol.CreateFuture(Futures.Grains.SoybeanOil, Market.CBOT, new(2025, 12, 12)), Market.CBOT, SecurityType.FutureOption.DefaultOptionStyle(), OptionRight.Call, 0.45m, new(2025, 10, 24)), date, Resolution.Minute, TickType.Trade, "20160217_trade_american.zip", "20160217_ozl_minute_trade_american_call_4500_20251024.csv", "futureoption/cbot/minute/ozl/202512"), + new LeanDataTestParameters(Symbol.CreateOption(Symbol.CreateFuture(Futures.Currencies.JPY, Market.CME, new(2025, 12, 15)), Market.CME, SecurityType.FutureOption.DefaultOptionStyle(), OptionRight.Call, 0.006475m, new(2025, 12, 05)), date, Resolution.Minute, TickType.Quote, "20160217_quote_american.zip", "20160217_jpu_minute_quote_american_call_64.75_20251205.csv", "futureoption/cme/minute/jpu/202512"), // forex new LeanDataTestParameters(Symbols.EURUSD, date, Resolution.Tick, TickType.Quote, "20160217_quote.zip", "20160217_eurusd_tick_quote.csv", "forex/oanda/tick/eurusd"), From 16fdf619035f152c94da38f378ae985aa7a5c784 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Fri, 28 Nov 2025 10:37:31 -0400 Subject: [PATCH 020/103] Track securities addition and removal notifications (#9097) * Track security addition and removal sent notifications * Minor regression algorithm fixes * Fix regression algorithms data points count * Add description to new regression algorithms * Simplify tracking removal notifications * Cleanup --- .../BasicTemplateFuturesDailyAlgorithm.cs | 36 ++-- .../BasicTemplateFuturesHourlyAlgorithm.cs | 4 +- ...FuturesWithExtendedMarketDailyAlgorithm.cs | 34 +-- ...uturesWithExtendedMarketHourlyAlgorithm.cs | 2 +- .../DefaultFutureChainRegressionAlgorithm.cs | 2 +- ...inuousMidnightExpiryRegressionAlgorithm.cs | 76 +++++++ ...omChainAndContinuousRegressionAlgorithm.cs | 196 ++++++++++++++++++ ...istedFutureLiquidateRegressionAlgorithm.cs | 15 ++ ...icatorSelectorsWorkWithDifferentOptions.cs | 2 +- Data/future/comex/universes/gc/20131028.csv | 1 + Engine/DataFeeds/PendingRemovalsManager.cs | 55 +++-- Engine/DataFeeds/UniverseSelection.cs | 8 +- .../DataFeeds/PendingRemovalsManagerTests.cs | 49 +++-- 13 files changed, 402 insertions(+), 78 deletions(-) create mode 100644 Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousMidnightExpiryRegressionAlgorithm.cs create mode 100644 Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm.cs diff --git a/Algorithm.CSharp/BasicTemplateFuturesDailyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesDailyAlgorithm.cs index 2706e4c9e63b..f974b487d57d 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesDailyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesDailyAlgorithm.cs @@ -127,7 +127,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// /// Data Points count of all timeslices of algorithm /// - public virtual long DataPoints => 5861; + public virtual long DataPoints => 5867; /// /// Data Points count of the algorithm history @@ -144,34 +144,34 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// public virtual Dictionary ExpectedStatistics => new Dictionary { - {"Total Orders", "34"}, + {"Total Orders", "38"}, {"Average Win", "0.33%"}, - {"Average Loss", "-0.04%"}, - {"Compounding Annual Return", "0.106%"}, + {"Average Loss", "-0.03%"}, + {"Compounding Annual Return", "0.098%"}, {"Drawdown", "0.300%"}, - {"Expectancy", "0.178"}, + {"Expectancy", "0.165"}, {"Start Equity", "1000000"}, - {"End Equity", "1001066.2"}, - {"Net Profit", "0.107%"}, - {"Sharpe Ratio", "-1.695"}, - {"Sortino Ratio", "-0.804"}, - {"Probabilistic Sharpe Ratio", "14.797%"}, - {"Loss Rate", "88%"}, - {"Win Rate", "12%"}, - {"Profit-Loss Ratio", "9.01"}, + {"End Equity", "1000991.96"}, + {"Net Profit", "0.099%"}, + {"Sharpe Ratio", "-1.708"}, + {"Sortino Ratio", "-0.84"}, + {"Probabilistic Sharpe Ratio", "14.542%"}, + {"Loss Rate", "89%"}, + {"Win Rate", "11%"}, + {"Profit-Loss Ratio", "10.07"}, {"Alpha", "-0.007"}, {"Beta", "0.002"}, {"Annual Standard Deviation", "0.004"}, {"Annual Variance", "0"}, - {"Information Ratio", "-1.353"}, + {"Information Ratio", "-1.354"}, {"Tracking Error", "0.089"}, - {"Treynor Ratio", "-4.112"}, - {"Total Fees", "$76.30"}, + {"Treynor Ratio", "-4.054"}, + {"Total Fees", "$85.54"}, {"Estimated Strategy Capacity", "$0"}, {"Lowest Capacity Asset", "ES VRJST036ZY0X"}, - {"Portfolio Turnover", "0.92%"}, + {"Portfolio Turnover", "1.04%"}, {"Drawdown Recovery", "69"}, - {"OrderListHash", "ddaa9dd20647fdbc4811d6e64bb30a40"} + {"OrderListHash", "eafc33ea4dcb219f7aacdbdd0973d5bc"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateFuturesHourlyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesHourlyAlgorithm.cs index aeceacdfd9c1..7315cc7d6b90 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesHourlyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesHourlyAlgorithm.cs @@ -36,7 +36,7 @@ public class BasicTemplateFuturesHourlyAlgorithm : BasicTemplateFuturesDailyAlgo /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 25312; + public override long DataPoints => 25339; /// /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm @@ -70,7 +70,7 @@ public class BasicTemplateFuturesHourlyAlgorithm : BasicTemplateFuturesDailyAlgo {"Lowest Capacity Asset", "ES VP274HSU1AF5"}, {"Portfolio Turnover", "20.14%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "f6482c8757f82cb9f4c058e3ed6bc494"} + {"OrderListHash", "c301a0a086f8905b1a555f0257087272"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketDailyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketDailyAlgorithm.cs index ab16ebf797f9..1c4e76a60095 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketDailyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketDailyAlgorithm.cs @@ -36,41 +36,41 @@ public class BasicTemplateFuturesWithExtendedMarketDailyAlgorithm : BasicTemplat /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 5965; + public override long DataPoints => 5971; /// /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm /// public override Dictionary ExpectedStatistics => new Dictionary { - {"Total Orders", "32"}, + {"Total Orders", "36"}, {"Average Win", "0.33%"}, - {"Average Loss", "-0.04%"}, - {"Compounding Annual Return", "0.110%"}, + {"Average Loss", "-0.03%"}, + {"Compounding Annual Return", "0.103%"}, {"Drawdown", "0.300%"}, - {"Expectancy", "0.184"}, + {"Expectancy", "0.172"}, {"Start Equity", "1000000"}, - {"End Equity", "1001108"}, - {"Net Profit", "0.111%"}, - {"Sharpe Ratio", "-1.688"}, - {"Sortino Ratio", "-0.772"}, - {"Probabilistic Sharpe Ratio", "14.944%"}, - {"Loss Rate", "88%"}, - {"Win Rate", "12%"}, - {"Profit-Loss Ratio", "8.47"}, + {"End Equity", "1001033.76"}, + {"Net Profit", "0.103%"}, + {"Sharpe Ratio", "-1.701"}, + {"Sortino Ratio", "-0.809"}, + {"Probabilistic Sharpe Ratio", "14.685%"}, + {"Loss Rate", "89%"}, + {"Win Rate", "11%"}, + {"Profit-Loss Ratio", "9.55"}, {"Alpha", "-0.007"}, {"Beta", "0.002"}, {"Annual Standard Deviation", "0.004"}, {"Annual Variance", "0"}, {"Information Ratio", "-1.353"}, {"Tracking Error", "0.089"}, - {"Treynor Ratio", "-4.099"}, - {"Total Fees", "$72.00"}, + {"Treynor Ratio", "-4.042"}, + {"Total Fees", "$81.24"}, {"Estimated Strategy Capacity", "$0"}, {"Lowest Capacity Asset", "ES VRJST036ZY0X"}, - {"Portfolio Turnover", "0.87%"}, + {"Portfolio Turnover", "0.99%"}, {"Drawdown Recovery", "69"}, - {"OrderListHash", "741a26424d2210171ad849d92fc75d23"} + {"OrderListHash", "67120ad5c9a6116001dda6c8061e5353"} }; } } diff --git a/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketHourlyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketHourlyAlgorithm.cs index 3e2bd74e5694..89ac65c85714 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketHourlyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketHourlyAlgorithm.cs @@ -41,7 +41,7 @@ public class BasicTemplateFuturesWithExtendedMarketHourlyAlgorithm : BasicTempla /// /// Data Points count of all timeslices of algorithm /// - public override long DataPoints => 67924; + public override long DataPoints => 67998; /// /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm diff --git a/Algorithm.CSharp/DefaultFutureChainRegressionAlgorithm.cs b/Algorithm.CSharp/DefaultFutureChainRegressionAlgorithm.cs index 05de0d98977d..9ac3347d43d9 100644 --- a/Algorithm.CSharp/DefaultFutureChainRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DefaultFutureChainRegressionAlgorithm.cs @@ -62,7 +62,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 70735; + public long DataPoints => 70736; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousMidnightExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousMidnightExpiryRegressionAlgorithm.cs new file mode 100644 index 000000000000..cb08750a51df --- /dev/null +++ b/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousMidnightExpiryRegressionAlgorithm.cs @@ -0,0 +1,76 @@ +/* + * 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.Collections.Generic; +using QuantConnect.Securities; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Regression algorithm asserting that a future contract selected by both the continuous future and + /// the future chain universes gets liquidated on delisting and that the algorithm receives the correct + /// security addition/removal notifications. + /// + /// This algorithm uses Gold futures with midnight expiry time to reproduce an edge case where + /// the delisting data instance and the universe deselection happen in the same loop but without a particular order. + /// + /// This partly reproduces GH issue https://github.com/QuantConnect/Lean/issues/9092 + /// + public class DelistedFutureLiquidateFromChainAndContinuousMidnightExpiryRegressionAlgorithm : DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm + { + protected override string FutureTicker => Futures.Metals.Gold; + + /// + /// Data Points count of all timeslices of algorithm + /// + public override long DataPoints => 317492; + + /// + /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm + /// + public override Dictionary ExpectedStatistics => new Dictionary + { + {"Total Orders", "2"}, + {"Average Win", "0%"}, + {"Average Loss", "-5.18%"}, + {"Compounding Annual Return", "-20.700%"}, + {"Drawdown", "6.400%"}, + {"Expectancy", "-1"}, + {"Start Equity", "100000"}, + {"End Equity", "94817.53"}, + {"Net Profit", "-5.182%"}, + {"Sharpe Ratio", "-2.965"}, + {"Sortino Ratio", "-3.407"}, + {"Probabilistic Sharpe Ratio", "0.000%"}, + {"Loss Rate", "100%"}, + {"Win Rate", "0%"}, + {"Profit-Loss Ratio", "0"}, + {"Alpha", "-0.064"}, + {"Beta", "-0.2"}, + {"Annual Standard Deviation", "0.048"}, + {"Annual Variance", "0.002"}, + {"Information Ratio", "-4.899"}, + {"Tracking Error", "0.11"}, + {"Treynor Ratio", "0.716"}, + {"Total Fees", "$2.47"}, + {"Estimated Strategy Capacity", "$1400000.00"}, + {"Lowest Capacity Asset", "GC VL5E74HP3EE5"}, + {"Portfolio Turnover", "3.18%"}, + {"Drawdown Recovery", "0"}, + {"OrderListHash", "c197fe000cd6d7f2fd84860f7086d730"} + }; + } +} diff --git a/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm.cs b/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm.cs new file mode 100644 index 000000000000..873f7a015838 --- /dev/null +++ b/Algorithm.CSharp/DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm.cs @@ -0,0 +1,196 @@ +/* + * 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 System.Linq; +using QuantConnect.Data; +using QuantConnect.Data.UniverseSelection; +using QuantConnect.Interfaces; +using QuantConnect.Orders; +using QuantConnect.Securities; +using QuantConnect.Securities.Future; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Regression algorithm asserting that a future contract selected by both the continuous future and + /// the future chain universes gets liquidated on delisting and that the algorithm receives the correct + /// security addition/removal notifications. + /// + /// This partly reproduces GH issue https://github.com/QuantConnect/Lean/issues/9092 + /// + public class DelistedFutureLiquidateFromChainAndContinuousRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition + { + private Symbol _contractSymbol; + + private Future _continuousFuture; + + private DateTime _internalContractRemovalTime; + private DateTime _contractRemovalTime; + + protected virtual string FutureTicker => Futures.Indices.SP500EMini; + + public override void Initialize() + { + SetStartDate(2013, 10, 08); + SetEndDate(2013, 12, 30); + + _continuousFuture = AddFuture(FutureTicker); + _continuousFuture.SetFilter(0, 182); + } + + public override void OnData(Slice slice) + { + if (_contractSymbol == null) + { + foreach (var chain in slice.FutureChains) + { + // Make sure the mapped contract is in the chain, that is, is selected by both universes + if (chain.Value.Any(x => x.Symbol == _continuousFuture.Mapped)) + { + _contractSymbol = _continuousFuture.Mapped; + var ticket = MarketOrder(_contractSymbol, 1); + + if (ticket.Status != OrderStatus.Filled) + { + throw new RegressionTestException($"Order should be filled: {ticket}"); + } + } + } + } + } + + public override void OnSecuritiesChanged(SecurityChanges changes) + { + if (changes.RemovedSecurities.Any(x => x.Symbol == _contractSymbol)) + { + if (_contractRemovalTime != default) + { + throw new RegressionTestException($"Contract {_contractSymbol} was removed multiple times"); + } + _contractRemovalTime = Time; + } + else + { + changes.FilterInternalSecurities = false; + if (changes.RemovedSecurities.Any(x => x.Symbol == _contractSymbol)) + { + if (_internalContractRemovalTime != default) + { + throw new RegressionTestException($"Contract {_contractSymbol} was removed multiple times as internal subscription"); + } + _internalContractRemovalTime = Time; + } + } + } + + public override void OnEndOfAlgorithm() + { + if (_contractSymbol == null) + { + throw new RegressionTestException("No contract was ever traded"); + } + + if (_internalContractRemovalTime == default) + { + throw new RegressionTestException($"Contract {_contractSymbol} was not removed from the algorithm"); + } + + if (_contractRemovalTime == default) + { + throw new RegressionTestException($"Contract {_contractSymbol} was not removed from the algorithm as external subscription"); + } + + // The internal subscription should be removed first (on continuous future mapping), + // and the regular subscription later (on delisting) + if (_contractRemovalTime < _internalContractRemovalTime) + { + throw new RegressionTestException($"Contract {_contractSymbol} was removed from the algorithm as aregular subscription before internal subscription"); + } + + if (Securities[_contractSymbol].Invested) + { + throw new RegressionTestException($"Position should be closed when {_contractSymbol} got delisted {_contractSymbol.ID.Date}"); + } + } + + public override void OnOrderEvent(OrderEvent orderEvent) + { + Log($"{orderEvent}. Delisting on: {_contractSymbol.ID.Date}"); + } + + /// + /// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm. + /// + public bool CanRunLocally { get; } = true; + + /// + /// This is used by the regression test system to indicate which languages this algorithm is written in. + /// + public List Languages { get; } = new() { Language.CSharp }; + + /// + /// Data Points count of all timeslices of algorithm + /// + public virtual long DataPoints => 288140; + + /// + /// Data Points count of the algorithm history + /// + public int AlgorithmHistoryDataPoints => 0; + + /// + /// Final status of the algorithm + /// + public AlgorithmStatus AlgorithmStatus => AlgorithmStatus.Completed; + + /// + /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm + /// + public virtual Dictionary ExpectedStatistics => new Dictionary + { + {"Total Orders", "2"}, + {"Average Win", "7.02%"}, + {"Average Loss", "0%"}, + {"Compounding Annual Return", "34.386%"}, + {"Drawdown", "1.500%"}, + {"Expectancy", "0"}, + {"Start Equity", "100000"}, + {"End Equity", "107016.6"}, + {"Net Profit", "7.017%"}, + {"Sharpe Ratio", "3.217"}, + {"Sortino Ratio", "0"}, + {"Probabilistic Sharpe Ratio", "99.828%"}, + {"Loss Rate", "0%"}, + {"Win Rate", "100%"}, + {"Profit-Loss Ratio", "0"}, + {"Alpha", "0.228"}, + {"Beta", "0.108"}, + {"Annual Standard Deviation", "0.084"}, + {"Annual Variance", "0.007"}, + {"Information Ratio", "-1.122"}, + {"Tracking Error", "0.112"}, + {"Treynor Ratio", "2.501"}, + {"Total Fees", "$2.15"}, + {"Estimated Strategy Capacity", "$1700000000.00"}, + {"Lowest Capacity Asset", "ES VMKLFZIH2MTD"}, + {"Portfolio Turnover", "2.01%"}, + {"Drawdown Recovery", "16"}, + {"OrderListHash", "640ce720644ff0b580687e80105d0a92"} + }; + } +} diff --git a/Algorithm.CSharp/DelistedFutureLiquidateRegressionAlgorithm.cs b/Algorithm.CSharp/DelistedFutureLiquidateRegressionAlgorithm.cs index e5c1fe8c119f..f1294c24de1f 100644 --- a/Algorithm.CSharp/DelistedFutureLiquidateRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DelistedFutureLiquidateRegressionAlgorithm.cs @@ -18,6 +18,7 @@ using System.Collections.Generic; using System.Linq; using QuantConnect.Data; +using QuantConnect.Data.UniverseSelection; using QuantConnect.Interfaces; using QuantConnect.Orders; using QuantConnect.Securities; @@ -30,6 +31,7 @@ namespace QuantConnect.Algorithm.CSharp public class DelistedFutureLiquidateRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition { private Symbol _contractSymbol; + private bool _contractRemoved; protected virtual Resolution Resolution => Resolution.Minute; /// @@ -65,8 +67,21 @@ public override void OnData(Slice slice) } } + public override void OnSecuritiesChanged(SecurityChanges changes) + { + if (changes.RemovedSecurities.Any(x => x.Symbol == _contractSymbol)) + { + _contractRemoved = true; + } + } + public override void OnEndOfAlgorithm() { + if (!_contractRemoved) + { + throw new RegressionTestException($"Contract {_contractSymbol} was not removed from the algorithm"); + } + Log($"{_contractSymbol}: {Securities[_contractSymbol].Invested}"); if (Securities[_contractSymbol].Invested) { diff --git a/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs b/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs index b1f6534ed443..f8f1b1075065 100644 --- a/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs +++ b/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs @@ -186,7 +186,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 454078; + public long DataPoints => 455431; /// /// Data Points count of the algorithm history diff --git a/Data/future/comex/universes/gc/20131028.csv b/Data/future/comex/universes/gc/20131028.csv index eea38c0c4408..fb970ee6c81d 100644 --- a/Data/future/comex/universes/gc/20131028.csv +++ b/Data/future/comex/universes/gc/20131028.csv @@ -1,4 +1,5 @@ #expiry,open,high,low,close,volume,open_interest +201310,1314.1,1320.8,1313.9,1319.9,50,234 201311,1347.9,1351.7,1343.8,1344.9,39,56 201312,1348.6,1352.9,1342.4,1344.8,47850,210712 201402,1349.1,1353.6,1343.4,1346,3578,55934 diff --git a/Engine/DataFeeds/PendingRemovalsManager.cs b/Engine/DataFeeds/PendingRemovalsManager.cs index dfdb37406cd8..30fb33ddfc7a 100644 --- a/Engine/DataFeeds/PendingRemovalsManager.cs +++ b/Engine/DataFeeds/PendingRemovalsManager.cs @@ -26,13 +26,13 @@ namespace QuantConnect.Lean.Engine.DataFeeds /// public class PendingRemovalsManager { - private readonly Dictionary> _pendingRemovals; + private readonly Dictionary> _pendingRemovals; private readonly IOrderProvider _orderProvider; /// /// Current pending removals /// - public IReadOnlyDictionary> PendingRemovals => _pendingRemovals; + public IReadOnlyDictionary> PendingRemovals => _pendingRemovals; /// /// Create a new instance @@ -41,21 +41,23 @@ public class PendingRemovalsManager public PendingRemovalsManager(IOrderProvider orderProvider) { _orderProvider = orderProvider; - _pendingRemovals = new Dictionary>(); + _pendingRemovals = new Dictionary>(); } /// /// Determines if we can safely remove the security member from a universe. /// We must ensure that we have zero holdings, no open orders, and no existing portfolio targets /// - private bool IsSafeToRemove(Security member, Universe universe) + private bool IsSafeToRemove(Universe.Member member, Universe universe) { + var security = member.Security; + // but don't physically remove it from the algorithm if we hold stock or have open orders against it or an open target - var openOrders = _orderProvider.GetOpenOrders(x => x.Symbol == member.Symbol); - if (!member.HoldStock && !openOrders.Any() && (member.Holdings.Target == null || member.Holdings.Target.Quantity == 0)) + var openOrders = _orderProvider.GetOpenOrders(x => x.Symbol == security.Symbol); + if (!security.HoldStock && !openOrders.Any() && (security.Holdings.Target == null || security.Holdings.Target.Quantity == 0)) { if (universe.Securities.Any(pair => - pair.Key.Underlying == member.Symbol && !IsSafeToRemove(pair.Value.Security, universe))) + pair.Key.Underlying == security.Symbol && !IsSafeToRemove(pair.Value, universe))) { // don't remove if any member in the universe which uses this 'member' as underlying can't be removed // covers the options use case @@ -63,7 +65,7 @@ private bool IsSafeToRemove(Security member, Universe universe) } // don't remove if there are unsettled positions - var unsettledCash = member.SettlementModel.GetUnsettledCash(); + var unsettledCash = security.SettlementModel.GetUnsettledCash(); if (unsettledCash != default && unsettledCash.Amount > 0) { return false; @@ -82,11 +84,11 @@ private bool IsSafeToRemove(Security member, Universe universe) /// The security to remove /// The universe which the security is a member of /// The member to remove - public List TryRemoveMember(Security member, Universe universe) + public List TryRemoveMember(Universe.Member member, Universe universe) { if (IsSafeToRemove(member, universe)) { - return new List {new RemovedMember(universe, member)}; + return new List {new RemovedMember(universe, member.Security)}; } if (_pendingRemovals.ContainsKey(universe)) @@ -98,12 +100,33 @@ public List TryRemoveMember(Security member, Universe universe) } else { - _pendingRemovals.Add(universe, new List { member }); + _pendingRemovals.Add(universe, new List { member }); } return null; } + /// + /// Will check if the security is pending for removal + /// + /// The security + /// Whether it's an internal subscription + /// Whether the security is pending for removal + public bool IsPendingForRemoval(Security security, bool isInternal) + { + return _pendingRemovals.Values.Any(x => x.Any(y => y.IsInternal == isInternal && y.Security.Symbol == security.Symbol)); + } + + /// + /// Will check if the member is pending for removal + /// + /// The universe member + /// Whether the security is pending for removal + public bool IsPendingForRemoval(Universe.Member member) + { + return IsPendingForRemoval(member.Security, member.IsInternal); + } + /// /// Will check pending security removals /// @@ -119,22 +142,22 @@ public List CheckPendingRemovals( foreach (var kvp in _pendingRemovals.ToList()) { var universeRemoving = kvp.Key; - foreach (var security in kvp.Value.ToList()) + foreach (var member in kvp.Value.ToList()) { - var isSafeToRemove = IsSafeToRemove(security, universeRemoving); + var isSafeToRemove = IsSafeToRemove(member, universeRemoving); if (isSafeToRemove || // if we are re selecting it we remove it as a pending removal // else we might remove it when we do not want to do so universeRemoving == currentUniverse - && selectedSymbols.Contains(security.Symbol)) + && selectedSymbols.Contains(member.Security.Symbol)) { if (isSafeToRemove) { - result.Add(new RemovedMember(universeRemoving, security)); + result.Add(new RemovedMember(universeRemoving, member.Security)); } - _pendingRemovals[universeRemoving].Remove(security); + _pendingRemovals[universeRemoving].Remove(member); // if there are no more pending removals for this universe lets remove it if (!_pendingRemovals[universeRemoving].Any()) diff --git a/Engine/DataFeeds/UniverseSelection.cs b/Engine/DataFeeds/UniverseSelection.cs index 3a8a2e2c16fd..6bb15037b785 100644 --- a/Engine/DataFeeds/UniverseSelection.cs +++ b/Engine/DataFeeds/UniverseSelection.cs @@ -207,13 +207,13 @@ public SecurityChanges ApplyUniverseSelection(Universe universe, DateTime dateTi // don't remove if the universe wants to keep him in if (!universe.CanRemoveMember(dateTimeUtc, security)) continue; - if (!member.Security.IsDelisted) + if (!member.Security.IsDelisted && !_pendingRemovalsManager.IsPendingForRemoval(member)) { // TODO: here we are not checking if other universes have this security still selected _securityChangesConstructor.Remove(member.Security, member.IsInternal); } - RemoveSecurityFromUniverse(_pendingRemovalsManager.TryRemoveMember(security, universe), + RemoveSecurityFromUniverse(_pendingRemovalsManager.TryRemoveMember(member, universe), dateTimeUtc, algorithmEndDateUtc); } @@ -434,9 +434,11 @@ public SecurityChanges HandleDelisting(BaseData data, bool isInternalFeed) security.IsDelisted = true; security.Reset(); + _algorithm.Securities.Remove(data.Symbol); + // Add the security removal to the security changes but only if not pending for removal. // If pending, the removed change event was already emitted for this security - if (_algorithm.Securities.Remove(data.Symbol) && !_pendingRemovalsManager.PendingRemovals.Values.Any(x => x.Any(y => y.Symbol == data.Symbol))) + if (!_pendingRemovalsManager.IsPendingForRemoval(security, isInternalFeed)) { _securityChangesConstructor.Remove(security, isInternalFeed); diff --git a/Tests/Engine/DataFeeds/PendingRemovalsManagerTests.cs b/Tests/Engine/DataFeeds/PendingRemovalsManagerTests.cs index f0c1fc775a64..62935caf3dc3 100644 --- a/Tests/Engine/DataFeeds/PendingRemovalsManagerTests.cs +++ b/Tests/Engine/DataFeeds/PendingRemovalsManagerTests.cs @@ -39,9 +39,10 @@ public void ReturnedRemoved_Add() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); using var universe = new TestUniverse(); - var result = pendingRemovals.TryRemoveMember(security, universe); + var result = pendingRemovals.TryRemoveMember(member, universe); Assert.IsTrue(result.Any()); Assert.AreEqual(universe, result.First().Universe); @@ -57,9 +58,10 @@ public void ReturnedRemoved_Check() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); using var universe = new TestUniverse(); orderProvider.AddOrder(new LimitOrder(security.Symbol, 1, 1, DateTime.UtcNow)); - pendingRemovals.TryRemoveMember(security, universe); + pendingRemovals.TryRemoveMember(member, universe); orderProvider.Clear(); var result = pendingRemovals.CheckPendingRemovals(new HashSet(), universe); @@ -78,6 +80,7 @@ public void WontRemoveBecauseOfUnderlying() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var equity = CreateSecurity(Symbols.SPY); + var member = new Universe.Member(Noon, equity, false); var equityOption = CreateSecurity(Symbols.SPY_C_192_Feb19_2016); // we add an order of the equity option @@ -87,11 +90,11 @@ public void WontRemoveBecauseOfUnderlying() universe.AddMember(DateTime.UtcNow, equityOption, false); // we try to remove the equity - Assert.IsNull(pendingRemovals.TryRemoveMember(equity, universe)); + Assert.IsNull(pendingRemovals.TryRemoveMember(member, universe)); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count()); Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First()); - Assert.AreEqual(equity, pendingRemovals.PendingRemovals.Values.First().First()); + Assert.AreEqual(equity, pendingRemovals.PendingRemovals.Values.First().First().Security); } [Test] @@ -100,14 +103,15 @@ public void WontRemoveBecauseOpenOrder_Add() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); using var universe = new TestUniverse(); orderProvider.AddOrder(new LimitOrder(security.Symbol, 1, 1, DateTime.UtcNow)); - Assert.IsNull(pendingRemovals.TryRemoveMember(security, universe)); + Assert.IsNull(pendingRemovals.TryRemoveMember(member, universe)); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count()); Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First()); - Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First()); + Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First().Security); } [Test] @@ -116,15 +120,16 @@ public void WontRemoveBecauseOpenOrder_Check() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); using var universe = new TestUniverse(); orderProvider.AddOrder(new LimitOrder(security.Symbol, 1, 1, DateTime.UtcNow)); - Assert.IsNull(pendingRemovals.TryRemoveMember(security, universe)); + Assert.IsNull(pendingRemovals.TryRemoveMember(member, universe)); Assert.IsFalse(pendingRemovals.CheckPendingRemovals(new HashSet(), universe).Any()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count()); Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First()); - Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First()); + Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First().Security); } [Test] @@ -133,14 +138,15 @@ public void WontRemoveBecauseHoldings_Add() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); using var universe = new TestUniverse(); security.Holdings.SetHoldings(10, 10); - Assert.IsNull(pendingRemovals.TryRemoveMember(security, universe)); + Assert.IsNull(pendingRemovals.TryRemoveMember(member, universe)); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count()); Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First()); - Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First()); + Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First().Security); } [Test] @@ -149,15 +155,16 @@ public void WontRemoveBecauseHoldings_Check() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); using var universe = new TestUniverse(); security.Holdings.SetHoldings(10, 10); - Assert.IsNull(pendingRemovals.TryRemoveMember(security, universe)); + Assert.IsNull(pendingRemovals.TryRemoveMember(member, universe)); Assert.IsFalse(pendingRemovals.CheckPendingRemovals(new HashSet(), universe).Any()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count()); Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First()); - Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First()); + Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First().Security); } [Test] @@ -166,14 +173,15 @@ public void WontRemoveBecauseTarget_Add() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); using var universe = new TestUniverse(); security.Holdings.Target = new PortfolioTarget(security.Symbol, 10); - Assert.IsNull(pendingRemovals.TryRemoveMember(security, universe)); + Assert.IsNull(pendingRemovals.TryRemoveMember(member, universe)); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count()); Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First()); - Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First()); + Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First().Security); } [Test] @@ -182,15 +190,16 @@ public void WontRemoveBecauseTarget_Check() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); using var universe = new TestUniverse(); security.Holdings.Target = new PortfolioTarget(security.Symbol, 10); - Assert.IsNull(pendingRemovals.TryRemoveMember(security, universe)); + Assert.IsNull(pendingRemovals.TryRemoveMember(member, universe)); Assert.IsFalse(pendingRemovals.CheckPendingRemovals(new HashSet(), universe).Any()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count()); Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First()); - Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First()); + Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First().Security); } [Test] @@ -199,9 +208,10 @@ public void WontBeReturnedBecauseReSelected() var orderProvider = new FakeOrderProcessor(); var pendingRemovals = new PendingRemovalsManager(orderProvider); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); using var universe = new TestUniverse(); orderProvider.AddOrder(new LimitOrder(security.Symbol, 1, 1, DateTime.UtcNow)); - pendingRemovals.TryRemoveMember(security, universe); + pendingRemovals.TryRemoveMember(member, universe); Assert.IsFalse(pendingRemovals.CheckPendingRemovals( new HashSet { security.Symbol}, universe).Any()); @@ -218,6 +228,7 @@ public void WontRemoveBecauseUnsettledFunds() var pendingRemovals = new PendingRemovalsManager(orderProvider); using var universe = new TestUniverse(); var security = SecurityTests.GetSecurity(); + var member = new Universe.Member(Noon, security, false); security.SetSettlementModel(new DelayedSettlementModel(1, TimeSpan.FromHours(8))); var securities = new SecurityManager(TimeKeeper); @@ -226,12 +237,12 @@ public void WontRemoveBecauseUnsettledFunds() security.SettlementModel.ApplyFunds(new ApplyFundsSettlementModelParameters(portfolio, security, TimeKeeper.UtcTime.Date.AddDays(1), new CashAmount(1000, Currencies.USD), null)); - Assert.IsNull(pendingRemovals.TryRemoveMember(security, universe)); + Assert.IsNull(pendingRemovals.TryRemoveMember(member, universe)); Assert.IsFalse(pendingRemovals.CheckPendingRemovals(new HashSet(), universe).Any()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Keys.Count()); Assert.AreEqual(1, pendingRemovals.PendingRemovals.Values.Count()); Assert.AreEqual(universe, pendingRemovals.PendingRemovals.Keys.First()); - Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First()); + Assert.AreEqual(security, pendingRemovals.PendingRemovals.Values.First().First().Security); } private class TestUniverse : Universe From 52b788d9de74bd7676e308e62d7a61101dffd34d Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Fri, 28 Nov 2025 11:39:09 -0500 Subject: [PATCH 021/103] Fix inclusive loop upper bound (#9102) --- Indicators/HurstExponent.cs | 4 +- Tests/TestData/spy_hurst_exponent.csv | 6348 ++++++++++++++++++++++--- 2 files changed, 5600 insertions(+), 752 deletions(-) diff --git a/Indicators/HurstExponent.cs b/Indicators/HurstExponent.cs index 4e41d93c4cb3..a36c10de8b72 100644 --- a/Indicators/HurstExponent.cs +++ b/Indicators/HurstExponent.cs @@ -55,7 +55,7 @@ public class HurstExponent : Indicator, IIndicatorWarmUpPeriodProvider /// The maximum lag to consider for time series analysis. public HurstExponent(string name, int period, int maxLag = 20) : base(name) { - if (maxLag < 2) + if (maxLag < 3) { throw new ArgumentException("The maxLag parameter must be greater than 2 to compute the Hurst Exponent.", nameof(maxLag)); } @@ -63,7 +63,7 @@ public HurstExponent(string name, int period, int maxLag = 20) : base(name) _timeLags = new List(); // Precompute logarithms of time lags and their squares for regression calculations - for (var i = 2; i < maxLag; i++) + for (var i = 2; i <= maxLag; i++) { var logTimeLag = (decimal)Math.Log(i); _timeLags.Add(i); diff --git a/Tests/TestData/spy_hurst_exponent.csv b/Tests/TestData/spy_hurst_exponent.csv index 6412dfa37d27..ecc8193480ab 100644 --- a/Tests/TestData/spy_hurst_exponent.csv +++ b/Tests/TestData/spy_hurst_exponent.csv @@ -250,753 +250,5601 @@ date,close,hurst_exponent 19981228 00:00,1226300, 19981229 00:00,1243100, 19981230 00:00,1233800, -19981231 00:00,1228800,0.4709650229354222 -19990104 00:00,1228800,0.4724702457187315 -19990105 00:00,1244400,0.47572427532708894 -19990106 00:00,1275000,0.47725189261727285 -19990107 00:00,1269400,0.48117374681335173 -19990108 00:00,1275000,0.48383867794231367 -19990111 00:00,1262800,0.48596627730936864 -19990112 00:00,1240000,0.4838328851409185 -19990113 00:00,1233100,0.48051416557538146 -19990114 00:00,1211600,0.474928060885975 -19990115 00:00,1243100,0.47444766056425774 -19990119 00:00,1252800,0.4720545828041306 -19990120 00:00,1256300,0.4718178264487143 -19990121 00:00,1235900,0.47118631426728363 -19990122 00:00,1225600,0.46892381022153584 -19990125 00:00,1236300,0.4681411540243111 -19990126 00:00,1255000,0.46710473528214536 -19990127 00:00,1244700,0.4669697009216986 -19990128 00:00,1266600,0.46586214444922525 -19990129 00:00,1278800,0.4636621508855357 -19990201 00:00,1270900,0.46329967571546515 -19990202 00:00,1262800,0.4627110096405497 -19990203 00:00,1271900,0.46251184324037414 -19990204 00:00,1248400,0.4615074011037598 -19990205 00:00,1240000,0.45935877871872915 -19990208 00:00,1243800,0.458296635795728 -19990209 00:00,1218600,0.4557252604491275 -19990210 00:00,1226900,0.45452665941400455 -19990211 00:00,1256900,0.4528290779538152 -19990212 00:00,1235000,0.45271436032880125 -19990216 00:00,1243800,0.45230546714496894 -19990217 00:00,1227500,0.4520950394395493 -19990218 00:00,1239400,0.4520546072720265 -19990219 00:00,1239400,0.45199650942770225 -19990222 00:00,1276900,0.4485681282840103 -19990223 00:00,1275000,0.445618743739483 -19990224 00:00,1254100,0.4446844887769471 -19990225 00:00,1247500,0.44317208838723526 -19990226 00:00,1239100,0.44184589883680503 -19990301 00:00,1237800,0.44079416218180495 -19990302 00:00,1228100,0.4394229901333191 -19990303 00:00,1231300,0.4389463443842218 -19990304 00:00,1250000,0.4378870288141178 -19990305 00:00,1278100,0.43435912814138794 -19990308 00:00,1285200,0.43097686679270336 -19990309 00:00,1282500,0.4296299578470874 -19990310 00:00,1290300,0.4285972337522332 -19990311 00:00,1302200,0.42781614323590217 -19990312 00:00,1295300,0.42805829790945793 -19990315 00:00,1311600,0.4288512623727367 -19990316 00:00,1309800,0.4298882705618538 -19990317 00:00,1302500,0.43081652657510733 -19990318 00:00,1321600,0.43252172274011114 -19990319 00:00,1300600,0.43329634846247383 -19990322 00:00,1299100,0.4335544524799842 -19990323 00:00,1264100,0.42937270668182115 -19990324 00:00,1269400,0.4269726604687383 -19990325 00:00,1291300,0.4267196993772797 -19990326 00:00,1284700,0.42656305533013855 -19990329 00:00,1312200,0.4260263790763986 -19990330 00:00,1303400,0.42623133338035185 -19990331 00:00,1286300,0.4260293967444643 -19990401 00:00,1293800,0.42568832255501904 -19990405 00:00,1323800,0.42380068511498453 -19990406 00:00,1319400,0.4227592423843723 -19990407 00:00,1328800,0.4220942311666522 -19990408 00:00,1345300,0.42056914665328654 -19990409 00:00,1348800,0.42000813037061097 -19990412 00:00,1360600,0.4196269269669342 -19990413 00:00,1351900,0.42022941593968005 -19990414 00:00,1330300,0.41923683737556006 -19990415 00:00,1326300,0.41780436234907337 -19990416 00:00,1321300,0.4171080119730849 -19990419 00:00,1289100,0.41261448358528224 -19990420 00:00,1306300,0.41153219656766293 -19990421 00:00,1336900,0.4106134656006191 -19990422 00:00,1359700,0.4085047081746514 -19990423 00:00,1357500,0.4084876021819663 -19990426 00:00,1361300,0.4081363407012954 -19990427 00:00,1365600,0.4084144224345969 -19990428 00:00,1353400,0.4096104890741444 -19990429 00:00,1345600,0.4098023326973988 -19990430 00:00,1334700,0.40860551603346507 -19990503 00:00,1356300,0.40854180214774877 -19990504 00:00,1333100,0.4084363074675848 -19990505 00:00,1349700,0.40846781020183304 -19990506 00:00,1335000,0.4081437669725865 -19990507 00:00,1346300,0.408543938694356 -19990510 00:00,1342200,0.4083020801189368 -19990511 00:00,1357200,0.40811675905733713 -19990512 00:00,1366300,0.4073668987272595 -19990513 00:00,1370200,0.40700409497272566 -19990514 00:00,1343000,0.40647254230575103 -19990517 00:00,1343100,0.4055584338622398 -19990518 00:00,1336300,0.4050180891484288 -19990519 00:00,1348100,0.40484667389022155 -19990520 00:00,1343100,0.4052744380988143 -19990521 00:00,1334200,0.4058914485973257 -19990524 00:00,1310900,0.4051212186496914 -19990525 00:00,1288400,0.40247407918234857 -19990526 00:00,1306600,0.40265565760219335 -19990527 00:00,1284400,0.4035337449484146 -19990528 00:00,1305900,0.4047954504280296 -19990601 00:00,1298800,0.40655331110798015 -19990602 00:00,1297800,0.4086908066909055 -19990603 00:00,1302800,0.4117116855007809 -19990604 00:00,1319400,0.41244560019918164 -19990607 00:00,1337500,0.41107266207032 -19990608 00:00,1321600,0.4124070270040162 -19990609 00:00,1321600,0.4144312106505699 -19990610 00:00,1309100,0.41556834280879185 -19990611 00:00,1298100,0.41488910067442225 -19990614 00:00,1297800,0.414404894173951 -19990615 00:00,1305900,0.4140833949574304 -19990616 00:00,1334800,0.41154905997123764 -19990617 00:00,1346600,0.40864536877510493 -19990618 00:00,1343100,0.40704747719278983 -19990621 00:00,1349400,0.4059870092569051 -19990622 00:00,1337000,0.40547585664463265 -19990623 00:00,1332800,0.4043958036695223 -19990624 00:00,1316900,0.4027529840205636 -19990625 00:00,1316600,0.40143872334591985 -19990628 00:00,1333800,0.401091243278644 -19990629 00:00,1351300,0.40010494354575105 -19990630 00:00,1367500,0.3988278169469906 -19990701 00:00,1380600,0.3971818139540849 -19990702 00:00,1391900,0.396403525970764 -19990706 00:00,1387200,0.3964901798737813 -19990707 00:00,1395600,0.3971709563021177 -19990708 00:00,1395600,0.3969873326320931 -19990709 00:00,1402200,0.39725471981221905 -19990712 00:00,1400600,0.3966140397213903 -19990713 00:00,1395000,0.39482088889720635 -19990714 00:00,1398400,0.391602500181397 -19990715 00:00,1411300,0.38847205298657 -19990716 00:00,1420000,0.38459690376028977 -19990719 00:00,1410000,0.38069129618149977 -19990720 00:00,1378000,0.3731914118916214 -19990721 00:00,1378800,0.3670167486506555 -19990722 00:00,1361400,0.36045174100581556 -19990723 00:00,1357500,0.35595555934309814 -19990726 00:00,1350000,0.3527808942820457 -19990727 00:00,1365000,0.35103025305774216 -19990728 00:00,1367300,0.3503362613756029 -19990729 00:00,1343800,0.3516982034626755 -19990730 00:00,1330900,0.35522575165443276 -19990802 00:00,1329400,0.35925939677484076 -19990803 00:00,1323600,0.3626698198472383 -19990804 00:00,1306900,0.36552636763641366 -19990805 00:00,1315600,0.3675189763161779 -19990806 00:00,1300600,0.3693352142601052 -19990809 00:00,1300500,0.37053182622719016 -19990810 00:00,1282200,0.3720235500854127 -19990811 00:00,1305300,0.3734996874990306 -19990812 00:00,1300200,0.3733460549874898 -19990813 00:00,1331900,0.3687237543820872 -19990816 00:00,1333800,0.3658407384393127 -19990817 00:00,1347000,0.35906598319369704 -19990818 00:00,1335600,0.3529818416170014 -19990819 00:00,1328800,0.3486333508298881 -19990820 00:00,1338800,0.3457761735464015 -19990823 00:00,1363900,0.3436091162208866 -19990824 00:00,1365000,0.34452532923328844 -19990825 00:00,1384400,0.3514168034699647 -19990826 00:00,1365000,0.36341303989928836 -19990827 00:00,1351600,0.3709951456679765 -19990830 00:00,1326600,0.3702133883404313 -19990831 00:00,1325000,0.3664186417377868 -19990901 00:00,1335600,0.3656018646304501 -19990902 00:00,1322500,0.36471113204558897 -19990903 00:00,1361900,0.36508823689260816 -19990907 00:00,1355200,0.3650915639462064 -19990908 00:00,1349100,0.36591607931363324 -19990909 00:00,1351300,0.3656721798051631 -19990910 00:00,1354500,0.3696407418243528 -19990913 00:00,1348100,0.3696083074320306 -19990914 00:00,1340600,0.3674954995740446 -19990915 00:00,1320800,0.3643234363555514 -19990916 00:00,1323800,0.36174727910275034 -19990917 00:00,1337200,0.3609568749156715 -19990920 00:00,1336300,0.3615066131962756 -19990921 00:00,1309100,0.3633976416207915 -19990922 00:00,1311600,0.3635048098520462 -19990923 00:00,1280000,0.3632627156259346 -19990924 00:00,1280600,0.3643653108690847 -19990927 00:00,1282800,0.368110208472656 -19990928 00:00,1281900,0.37585556829729533 -19990929 00:00,1267800,0.38799735908025246 -19990930 00:00,1283800,0.3931925826441989 -19991001 00:00,1283400,0.39496331711624405 -19991004 00:00,1306300,0.39581720553151145 -19991005 00:00,1301900,0.39529993476209074 -19991006 00:00,1326300,0.3909944958176915 -19991007 00:00,1320000,0.38628267903983965 -19991008 00:00,1337200,0.38107749046517836 -19991011 00:00,1338100,0.37651489796107573 -19991012 00:00,1314100,0.37306458005870563 -19991013 00:00,1286600,0.368794975215163 -19991014 00:00,1284100,0.3651806112730772 -19991015 00:00,1248100,0.3575283044698005 -19991018 00:00,1255600,0.3526625217476009 -19991019 00:00,1260800,0.34998925290424493 -19991020 00:00,1292200,0.3463279732395914 -19991021 00:00,1286300,0.34381830649581735 -19991022 00:00,1303400,0.3414199302605452 -19991025 00:00,1295000,0.3396422326924965 -19991026 00:00,1282500,0.33847696495384216 -19991027 00:00,1301300,0.3369709141786506 -19991028 00:00,1345000,0.33027197791677926 -19991029 00:00,1365600,0.3211663862544099 -19991101 00:00,1359400,0.3167564376808683 -19991102 00:00,1348100,0.31477854124590265 -19991103 00:00,1356900,0.3144209137932585 -19991104 00:00,1364700,0.3152407862387194 -19991105 00:00,1372200,0.3182781336099487 -19991108 00:00,1379400,0.3233471208663067 -19991109 00:00,1367200,0.32690494416433546 -19991110 00:00,1377500,0.3312747166385546 -19991111 00:00,1383800,0.3359747755474458 -19991112 00:00,1397500,0.34124955154305997 -19991115 00:00,1398100,0.34615997344936433 -19991116 00:00,1424400,0.3514661938164651 -19991117 00:00,1415600,0.3567098087999124 -19991118 00:00,1428100,0.3626410321711404 -19991119 00:00,1425000,0.36830297277591095 -19991122 00:00,1424700,0.3720319833989637 -19991123 00:00,1408800,0.3725826474376597 -19991124 00:00,1420600,0.37380462421503374 -19991126 00:00,1414400,0.3748843084427507 -19991129 00:00,1410000,0.3757839400623461 -19991130 00:00,1392500,0.3741631216636458 -19991201 00:00,1401300,0.3740636784818577 -19991202 00:00,1411300,0.3734715911631321 -19991203 00:00,1436900,0.3723816398370538 -19991206 00:00,1427500,0.37174672045304163 -19991207 00:00,1419400,0.3722084045309603 -19991208 00:00,1406300,0.3714881674858039 -19991209 00:00,1410000,0.3715131221844028 -19991210 00:00,1420000,0.36915445600744873 -19991213 00:00,1421300,0.36628828288823456 -19991214 00:00,1408100,0.3630085542484402 -19991215 00:00,1418000,0.36099953981961935 -19991216 00:00,1423800,0.3599988592180418 -19991217 00:00,1423800,0.35941027921232255 -19991220 00:00,1416900,0.3593246065692477 -19991221 00:00,1433400,0.3594428165340511 -19991222 00:00,1437500,0.3594296055972655 -19991223 00:00,1460900,0.35825751662946903 -19991227 00:00,1458100,0.35807950827667134 -19991228 00:00,1461400,0.35847276504520914 -19991229 00:00,1463400,0.3591722168739354 -19991230 00:00,1466300,0.3603229952415024 -19991231 00:00,1468800,0.36251384670260767 -20000103 00:00,1455600,0.36554689013230063 -20000104 00:00,1400600,0.3581623137349412 -20000105 00:00,1402800,0.35241977364756666 -20000106 00:00,1403400,0.35039041701696777 -20000107 00:00,1444400,0.35078279210723007 -20000110 00:00,1458100,0.3487108533345098 -20000111 00:00,1440900,0.3483340037260527 -20000112 00:00,1433400,0.3474835037565063 -20000113 00:00,1451300,0.34874422602383365 -20000114 00:00,1465000,0.347396793886688 -20000118 00:00,1456300,0.3474714095217981 -20000119 00:00,1456900,0.34789346785462455 -20000120 00:00,1445000,0.34824082932058725 -20000121 00:00,1441300,0.35000914905386543 -20000124 00:00,1400600,0.34835732265933783 -20000125 00:00,1410000,0.3473361924589792 -20000126 00:00,1406700,0.3484990908053213 -20000127 00:00,1400000,0.3486756564845395 -20000128 00:00,1364700,0.34820527616470154 -20000131 00:00,1394400,0.349487464149058 -20000201 00:00,1401900,0.34984531026740123 -20000202 00:00,1413000,0.35109816786535814 -20000203 00:00,1428400,0.35005196480397227 -20000204 00:00,1427800,0.3500222032491812 -20000207 00:00,1427200,0.3503365291943103 -20000208 00:00,1442800,0.35036623128074623 -20000209 00:00,1414100,0.35078270618481716 -20000210 00:00,1418800,0.35153374595166675 -20000211 00:00,1391300,0.3508918097946064 -20000214 00:00,1392500,0.35012739143572225 -20000215 00:00,1407500,0.34991158535691347 -20000216 00:00,1390900,0.35029229158813774 -20000217 00:00,1390600,0.34959309491831725 -20000218 00:00,1351900,0.3492526754777063 -20000222 00:00,1354200,0.35014409585499007 -20000223 00:00,1365200,0.35033189102605494 -20000224 00:00,1356900,0.3510313082535032 -20000225 00:00,1337500,0.3522365982286706 -20000228 00:00,1350600,0.3545844686709145 -20000229 00:00,1369100,0.35647907324569444 -20000301 00:00,1383100,0.35842312346181693 -20000302 00:00,1387200,0.3595109871143911 -20000303 00:00,1413100,0.3564656486641098 -20000306 00:00,1393900,0.356380850082492 -20000307 00:00,1359400,0.35556574477135305 -20000308 00:00,1370500,0.3550612413506781 -20000309 00:00,1405900,0.35338028416010064 -20000310 00:00,1400000,0.35232094569078753 -20000313 00:00,1388800,0.3521428084962222 -20000314 00:00,1365000,0.3507768257662129 -20000315 00:00,1395000,0.35097075718855997 -20000316 00:00,1463100,0.3469075150687823 -20000317 00:00,1466900,0.3435065460540627 -20000320 00:00,1459800,0.3439119432228303 -20000321 00:00,1497200,0.345033001280781 -20000322 00:00,1500000,0.34801266861547453 -20000323 00:00,1526300,0.35346853414845947 -20000324 00:00,1532800,0.359809626749683 -20000327 00:00,1525000,0.36756153636504624 -20000328 00:00,1510000,0.37297098495766545 -20000329 00:00,1510300,0.37964796666151024 -20000330 00:00,1488800,0.38292842161613566 -20000331 00:00,1505600,0.3882513758212 -20000403 00:00,1507700,0.3939472531985652 -20000404 00:00,1500000,0.3979326148737181 -20000405 00:00,1488800,0.3999876724440155 -20000406 00:00,1503100,0.4032905464732933 -20000407 00:00,1517800,0.40775899189192655 -20000410 00:00,1507800,0.4114278217773562 -20000411 00:00,1500600,0.4128228608943041 -20000412 00:00,1466300,0.4121302703853895 -20000413 00:00,1440000,0.4082529980380572 -20000414 00:00,1358100,0.39722028966992146 -20000417 00:00,1400600,0.39917131400789985 -20000418 00:00,1442200,0.3965922813668083 -20000419 00:00,1430000,0.39696346375908786 -20000420 00:00,1433800,0.39812813610270087 -20000424 00:00,1430000,0.40018673927304843 -20000425 00:00,1478800,0.39709570268262456 -20000426 00:00,1463800,0.39600269346101286 -20000427 00:00,1465000,0.39534669845672293 -20000428 00:00,1452200,0.3957536837841852 -20000501 00:00,1471900,0.3951829065580686 -20000502 00:00,1446300,0.39590267571278354 -20000503 00:00,1416300,0.3939269094199787 -20000504 00:00,1413100,0.39342733983730793 -20000505 00:00,1433400,0.39339737484096665 -20000508 00:00,1425300,0.39377380657162636 -20000509 00:00,1416300,0.39316581734686473 -20000510 00:00,1385900,0.39144923709328494 -20000511 00:00,1411100,0.39143059673135544 -20000512 00:00,1424100,0.39064587940248535 -20000515 00:00,1453800,0.38779683090180633 -20000516 00:00,1470000,0.38416587135492586 -20000517 00:00,1452500,0.3843530910328839 -20000518 00:00,1440600,0.3856808868012284 -20000519 00:00,1408800,0.3861008698884279 -20000522 00:00,1404100,0.38493835737846105 -20000523 00:00,1375600,0.3825260475136682 -20000524 00:00,1404100,0.3823816346217289 -20000525 00:00,1388800,0.3822975613950187 -20000526 00:00,1383100,0.382545651785092 -20000530 00:00,1426300,0.38131928469745224 -20000531 00:00,1424100,0.38023305744825475 -20000601 00:00,1451700,0.3780375582355451 -20000602 00:00,1480900,0.3732193428989682 -20000605 00:00,1472500,0.3721845482107286 -20000606 00:00,1463400,0.3715244438686344 -20000607 00:00,1475600,0.37158967989303726 -20000608 00:00,1465600,0.3707932006407937 -20000609 00:00,1463400,0.36979899985872206 -20000612 00:00,1452800,0.3691099506928781 -20000613 00:00,1474700,0.36948274406042336 -20000614 00:00,1475000,0.3696903478562222 -20000615 00:00,1482500,0.3708683210406589 -20000616 00:00,1468800,0.37144856335081916 -20000619 00:00,1486600,0.37334910112975744 -20000620 00:00,1478100,0.37407763513527464 -20000621 00:00,1479500,0.3743311716023535 -20000622 00:00,1455300,0.37367041413451013 -20000623 00:00,1443800,0.37352117560183545 -20000626 00:00,1457500,0.3747708161703189 -20000627 00:00,1455600,0.3757393848766181 -20000628 00:00,1456300,0.37626339863788894 -20000629 00:00,1444400,0.37624745794429254 -20000630 00:00,1453800,0.3757002164752446 -20000703 00:00,1472800,0.3744848953899319 -20000705 00:00,1450900,0.373494984239111 -20000706 00:00,1458800,0.37187523052434934 -20000707 00:00,1480900,0.3688585642216733 -20000710 00:00,1479700,0.36574817293745376 -20000711 00:00,1483800,0.36303453589160045 -20000712 00:00,1495900,0.3594512709644752 -20000713 00:00,1498800,0.3552246113750958 -20000714 00:00,1508800,0.3518711358578106 -20000717 00:00,1510600,0.3492855649922279 -20000718 00:00,1496900,0.34747764652230995 -20000719 00:00,1484400,0.34529927984417774 -20000720 00:00,1498100,0.3446352994678631 -20000721 00:00,1482500,0.34367942680968383 -20000724 00:00,1466600,0.34219588168971965 -20000725 00:00,1474400,0.3423483379196537 -20000726 00:00,1461600,0.34351912390457 -20000727 00:00,1455000,0.3437267873308388 -20000728 00:00,1422500,0.34266352010325557 -20000731 00:00,1434400,0.34342364058644775 -20000801 00:00,1440000,0.34434665746261295 -20000802 00:00,1442700,0.3449201052544889 -20000803 00:00,1455000,0.345693036769207 -20000804 00:00,1465300,0.34530928761103474 -20000807 00:00,1481300,0.3437772142289263 -20000808 00:00,1485600,0.34321852710920286 -20000809 00:00,1476900,0.34369831759604397 -20000810 00:00,1465600,0.34493767279117393 -20000811 00:00,1474400,0.3452701812710374 -20000814 00:00,1493800,0.3450616160565791 -20000815 00:00,1490200,0.3453677363866181 -20000816 00:00,1483800,0.3460753410642473 -20000817 00:00,1499400,0.3481101191122931 -20000818 00:00,1496700,0.3496399571687623 -20000821 00:00,1503600,0.350473741677672 -20000822 00:00,1502300,0.35124521839322653 -20000823 00:00,1509100,0.35346749292605667 -20000824 00:00,1514400,0.35510070065884736 -20000825 00:00,1510900,0.35546796957158167 -20000828 00:00,1517800,0.35600037191200073 -20000829 00:00,1515000,0.35644135136396404 -20000830 00:00,1506300,0.35560965629335417 -20000831 00:00,1522500,0.3560517612018587 -20000901 00:00,1525600,0.3531387228225354 -20000905 00:00,1512500,0.35043217262186865 -20000906 00:00,1496900,0.3472518110591213 -20000907 00:00,1507500,0.3451154404613728 -20000908 00:00,1497500,0.3433626180827773 -20000911 00:00,1494700,0.3424564201017832 -20000912 00:00,1487500,0.3418711882983093 -20000913 00:00,1488800,0.34209797084458476 -20000914 00:00,1485300,0.3426886770493738 -20000915 00:00,1467500,0.34443374239847013 -20000918 00:00,1446900,0.34609584467320886 -20000919 00:00,1460800,0.347740048073848 -20000920 00:00,1452200,0.3499125038461418 -20000921 00:00,1450300,0.3516355056114102 -20000922 00:00,1451600,0.3536119553200199 -20000925 00:00,1441300,0.35632457086947006 -20000926 00:00,1428900,0.359328825689795 -20000927 00:00,1428100,0.363650651645084 -20000928 00:00,1461900,0.36518293412207864 -20000929 00:00,1437800,0.3686926598977344 -20001002 00:00,1438100,0.37036713664190346 -20001003 00:00,1426300,0.3725651113372431 -20001004 00:00,1435800,0.37434558992161654 -20001005 00:00,1438800,0.3761791023790421 -20001006 00:00,1410000,0.3806205498884125 -20001009 00:00,1404400,0.386776195774249 -20001010 00:00,1388800,0.3900956945961803 -20001011 00:00,1365600,0.3898142167157031 -20001012 00:00,1331600,0.3871804350256728 -20001013 00:00,1375600,0.3848256137621493 -20001016 00:00,1374700,0.3823084402526975 -20001017 00:00,1354800,0.38125932496069287 -20001018 00:00,1344100,0.3811915403472946 -20001019 00:00,1390500,0.37758118910303784 -20001020 00:00,1398800,0.3729494489817849 -20001023 00:00,1400000,0.3693009139889531 -20001024 00:00,1401300,0.36852049916540297 -20001025 00:00,1369200,0.3686187041610134 -20001026 00:00,1367500,0.3666921748973246 -20001027 00:00,1383800,0.36601573699013856 -20001030 00:00,1402500,0.36384910822335104 -20001031 00:00,1429700,0.36011379767207535 -20001101 00:00,1424100,0.35847415895922025 -20001102 00:00,1430300,0.3580561290973304 -20001103 00:00,1431100,0.3585067452910156 -20001106 00:00,1437000,0.35985863861898076 -20001107 00:00,1436600,0.3620515176768613 -20001108 00:00,1412500,0.3630064849669281 -20001109 00:00,1404100,0.3629751573464688 -20001110 00:00,1369700,0.35963673342219754 -20001113 00:00,1353800,0.3553698725221494 -20001114 00:00,1387500,0.3546754410034326 -20001115 00:00,1391300,0.35358278410960853 -20001116 00:00,1377700,0.3534773373442136 -20001117 00:00,1374700,0.35372411057968683 -20001120 00:00,1346900,0.35380402808406813 -20001121 00:00,1351600,0.35433974580672584 -20001122 00:00,1325000,0.35582976573481195 -20001124 00:00,1348400,0.3577779386977699 -20001127 00:00,1355000,0.35878489117694173 -20001128 00:00,1338100,0.36139198689625207 -20001129 00:00,1346400,0.3633693234167695 -20001130 00:00,1316300,0.3655319358111107 -20001201 00:00,1318800,0.36817077065438386 -20001204 00:00,1330000,0.36975893789735004 -20001205 00:00,1381300,0.36511429051951266 -20001206 00:00,1355300,0.3634972925374258 -20001207 00:00,1349800,0.36211316209730326 -20001208 00:00,1376600,0.3605549973640241 -20001211 00:00,1386300,0.3586572119498646 -20001212 00:00,1377500,0.35807798143781266 -20001213 00:00,1365300,0.3577569687313655 -20001214 00:00,1341900,0.35643080491295287 -20001215 00:00,1314500,0.353135783351676 -20001218 00:00,1323800,0.3526372543467207 -20001219 00:00,1305600,0.351802382792019 -20001220 00:00,1266900,0.3488740689304236 -20001221 00:00,1276900,0.3481197004038146 -20001222 00:00,1308600,0.3475658163715545 -20001226 00:00,1318900,0.3463533579781176 -20001227 00:00,1331300,0.3453368585105991 -20001228 00:00,1336100,0.34557842131366096 -20001229 00:00,1322500,0.34878290534283135 -20010102 00:00,1282500,0.3499281799979598 -20010103 00:00,1350000,0.3503712665113111 -20010104 00:00,1334100,0.35151553024114474 -20010105 00:00,1302500,0.35386613797380423 -20010108 00:00,1297500,0.35303106044836885 -20010109 00:00,1301300,0.35263821634589654 -20010110 00:00,1316600,0.35262927021490353 -20010111 00:00,1327700,0.3528778870357779 -20010112 00:00,1319100,0.3527497151888355 -20010116 00:00,1325800,0.35302704634217613 -20010117 00:00,1329400,0.35383459714690035 -20010118 00:00,1350500,0.35539825410594666 -20010119 00:00,1344800,0.35770896936272684 -20010122 00:00,1346300,0.3595759826653138 -20010123 00:00,1361300,0.35994999380035186 -20010124 00:00,1366900,0.36074249859902385 -20010125 00:00,1360600,0.3622309152410318 -20010126 00:00,1357800,0.36300188276641765 -20010129 00:00,1366500,0.36721615365775573 -20010130 00:00,1377500,0.36934382358390405 -20010131 00:00,1370600,0.37081344259979704 -20010201 00:00,1374800,0.3716517387756344 -20010202 00:00,1350800,0.37046742982176745 -20010205 00:00,1358900,0.3700385178740403 -20010206 00:00,1354200,0.369573813818082 -20010207 00:00,1342200,0.3692267047410586 -20010208 00:00,1334800,0.3685685906063436 -20010209 00:00,1318300,0.3678600368357675 -20010212 00:00,1331400,0.3680249745477322 -20010213 00:00,1321200,0.36851891832884204 -20010214 00:00,1321500,0.3706202462850442 -20010215 00:00,1329600,0.37247289115733895 -20010216 00:00,1304600,0.3744046288839106 -20010220 00:00,1283200,0.3729429238459092 -20010221 00:00,1256000,0.3707259950682131 -20010222 00:00,1255200,0.3699478335433371 -20010223 00:00,1248900,0.3688572212550754 -20010226 00:00,1272100,0.3658409603624306 -20010227 00:00,1263500,0.36238206597151884 -20010228 00:00,1241500,0.35932614908546945 -20010301 00:00,1244900,0.35632430066690485 -20010302 00:00,1237700,0.352796894954418 -20010305 00:00,1244000,0.3530776330918064 -20010306 00:00,1258700,0.3479120136909707 -20010307 00:00,1266400,0.3391791345338501 -20010308 00:00,1269000,0.3306980308199958 -20010309 00:00,1236700,0.32748985998447666 -20010312 00:00,1184400,0.32157147659528496 -20010313 00:00,1202000,0.31875936248580317 -20010314 00:00,1172000,0.3233668518805186 -20010315 00:00,1177100,0.32741415517504013 -20010316 00:00,1153100,0.32949576123634094 -20010319 00:00,1173000,0.33281165960826736 -20010320 00:00,1142500,0.33892557623754543 -20010321 00:00,1123400,0.34202151490415966 -20010322 00:00,1119000,0.34610849453280207 -20010323 00:00,1142500,0.34696867143608795 -20010326 00:00,1155000,0.34548270579594753 -20010327 00:00,1185100,0.33969958436735537 -20010328 00:00,1154500,0.3396390412429313 -20010329 00:00,1149800,0.33930401432038787 -20010330 00:00,1161200,0.34011643685126347 -20010402 00:00,1145400,0.34093172247623954 -20010403 00:00,1106700,0.34119295934877053 -20010404 00:00,1103100,0.34155768801545044 -20010405 00:00,1152200,0.34176334313565027 -20010406 00:00,1130500,0.34251469927351513 -20010409 00:00,1140000,0.3458940837515479 -20010410 00:00,1170900,0.3503775134646279 -20010411 00:00,1169600,0.358657121098429 -20010412 00:00,1185500,0.3655532158343022 -20010416 00:00,1182300,0.36635396647435353 -20010417 00:00,1194200,0.3745477646196531 -20010418 00:00,1241400,0.37562777452445206 -20010419 00:00,1257200,0.3751854897973483 -20010420 00:00,1243600,0.37882276111608354 -20010423 00:00,1227000,0.3832749603624816 -20010424 00:00,1211300,0.38608711051838274 -20010425 00:00,1231000,0.3906930201138312 -20010426 00:00,1237400,0.3954813094183113 -20010427 00:00,1255500,0.4014523505400229 -20010430 00:00,1252100,0.4075513864320133 -20010501 00:00,1269500,0.4166510699640361 -20010502 00:00,1268900,0.42278155860361005 -20010503 00:00,1251600,0.42641185716636043 -20010504 00:00,1269500,0.43070112380185355 -20010507 00:00,1265700,0.4342931047481759 -20010508 00:00,1265200,0.4372870518937229 -20010509 00:00,1258700,0.43891318397344986 -20010510 00:00,1259900,0.44293603197889503 -20010511 00:00,1248200,0.4451714908957942 -20010514 00:00,1252300,0.44665274931283655 -20010515 00:00,1253000,0.44782680559574367 -20010516 00:00,1289600,0.45118794792955125 -20010517 00:00,1293100,0.45373521286419316 -20010518 00:00,1296200,0.456126939750742 -20010521 00:00,1317700,0.45491721102120564 -20010522 00:00,1313700,0.45343209725889233 -20010523 00:00,1292900,0.4512526379278276 -20010524 00:00,1297000,0.4506824920825495 -20010525 00:00,1282300,0.4513013910297971 -20010529 00:00,1273000,0.45392634515571595 -20010530 00:00,1252900,0.4532207460976528 -20010531 00:00,1261000,0.45565882820850034 -20010601 00:00,1266400,0.4557704063955022 -20010604 00:00,1271700,0.45586215978693595 -20010605 00:00,1288700,0.45534425158267383 -20010606 00:00,1275300,0.45548115486921137 -20010607 00:00,1282400,0.4557284064620623 -20010608 00:00,1270000,0.45608330520183654 -20010611 00:00,1259400,0.4561447215862137 -20010612 00:00,1261300,0.4570613516840664 -20010613 00:00,1247400,0.45704329247069053 -20010614 00:00,1224800,0.45606598518957486 -20010615 00:00,1216200,0.4553102119172123 -20010618 00:00,1210800,0.45512176162745605 -20010619 00:00,1214600,0.45618066134844615 -20010620 00:00,1226000,0.4567436814803372 -20010621 00:00,1238600,0.4567431793341881 -20010622 00:00,1227500,0.4557605203197939 -20010625 00:00,1221300,0.45468181954065695 -20010626 00:00,1218400,0.45416998378517676 -20010627 00:00,1213100,0.45392170960028716 -20010628 00:00,1228900,0.4534699276247104 -20010629 00:00,1232000,0.4533650151923871 -20010702 00:00,1239000,0.4529257803436645 -20010703 00:00,1240800,0.45273827673247463 -20010705 00:00,1221300,0.45451775399601685 -20010706 00:00,1191900,0.4538726087010187 -20010709 00:00,1201000,0.4533545135517334 -20010710 00:00,1183500,0.4529695171067696 -20010711 00:00,1182700,0.45280945195365574 -20010712 00:00,1211600,0.45187235774263007 -20010713 00:00,1219000,0.4499381476864054 -20010716 00:00,1206000,0.4493922322223206 -20010717 00:00,1216700,0.4492983682663923 -20010718 00:00,1211000,0.44928692605387904 -20010719 00:00,1218300,0.4491983122354188 -20010720 00:00,1214500,0.450722148674771 -20010723 00:00,1193600,0.4509723436940917 -20010724 00:00,1173900,0.44921953769991135 -20010725 00:00,1193000,0.45015114770025194 -20010726 00:00,1207500,0.44966384596986264 -20010727 00:00,1210000,0.4480508083128499 -20010730 00:00,1208200,0.4458838805884334 -20010731 00:00,1214600,0.44405648352308585 -20010801 00:00,1219600,0.44267192325808763 -20010802 00:00,1223800,0.44190724430725964 -20010803 00:00,1218700,0.44142810932086435 -20010806 00:00,1204500,0.44028316434867265 -20010807 00:00,1208300,0.43943155493364383 -20010808 00:00,1186500,0.437973848393486 -20010809 00:00,1187400,0.4364621236338462 -20010810 00:00,1194400,0.4360099833718936 -20010813 00:00,1194900,0.43541807543753674 -20010814 00:00,1191100,0.4351070570352719 -20010815 00:00,1182800,0.4349105953351758 -20010816 00:00,1186200,0.4351879057957543 -20010817 00:00,1166400,0.43497526826488736 -20010820 00:00,1175600,0.435311836149681 -20010821 00:00,1161300,0.43551283492397064 -20010822 00:00,1170500,0.43597486343344266 -20010823 00:00,1167000,0.43612089921569175 -20010824 00:00,1190000,0.43492687244691575 -20010827 00:00,1184900,0.4340765284253613 -20010828 00:00,1166400,0.4333906786575926 -20010829 00:00,1154000,0.43218113031587413 -20010830 00:00,1132800,0.4305006041054099 -20010831 00:00,1139200,0.4290618539314974 -20010904 00:00,1136500,0.4281487825170929 -20010905 00:00,1136500,0.42728973092480815 -20010906 00:00,1111000,0.42672965823841136 -20010907 00:00,1091300,0.42535856006809775 -20010910 00:00,1098300,0.4255236439473785 -20010917 00:00,1043000,0.4242890698122318 -20010918 00:00,1039000,0.42381531340913303 -20010919 00:00,1020200,0.4257028929170603 -20010920 00:00,989600,0.4285505498995984 -20010921 00:00,968500,0.43213723052970404 -20010924 00:00,1004800,0.4372696013840778 -20010925 00:00,1014000,0.4398610795750123 -20010926 00:00,1010000,0.4434831602613025 -20010927 00:00,1020500,0.44563366541330685 -20010928 00:00,1042500,0.44429394621260576 -20011001 00:00,1040000,0.4437029250732659 -20011002 00:00,1053800,0.4430652061333922 -20011003 00:00,1073400,0.44011819291245813 -20011004 00:00,1071000,0.4383927764453953 -20011005 00:00,1072600,0.4378231417208766 -20011008 00:00,1065300,0.43840394719482145 -20011009 00:00,1058700,0.4397353767412074 -20011010 00:00,1084000,0.4429938953083142 -20011011 00:00,1100100,0.4476652276329496 -20011012 00:00,1094500,0.45202504435472984 -20011015 00:00,1093000,0.4575029656114293 -20011016 00:00,1100600,0.462476895466672 -20011017 00:00,1079000,0.4632833163007434 -20011018 00:00,1072100,0.46318220280221467 -20011019 00:00,1075500,0.4637039286642661 -20011022 00:00,1092600,0.46482459050007496 -20011023 00:00,1088000,0.4664876927974521 -20011024 00:00,1087700,0.4694415248264928 -20011025 00:00,1103100,0.4699253293554193 -20011026 00:00,1107700,0.470565483825887 -20011029 00:00,1082300,0.47153076857492154 -20011030 00:00,1062000,0.47058513873324054 -20011031 00:00,1062700,0.47175981387639 -20011101 00:00,1086700,0.4756148810667447 -20011102 00:00,1090600,0.47833715300061014 -20011105 00:00,1105800,0.4782933465253684 -20011106 00:00,1122900,0.4753707042314633 -20011107 00:00,1119600,0.473891867036904 -20011108 00:00,1123500,0.47269020023469344 -20011109 00:00,1124400,0.47207805548487564 -20011112 00:00,1121600,0.47262580063355714 -20011113 00:00,1143900,0.4749613339602817 -20011114 00:00,1146200,0.477223333410456 -20011115 00:00,1146000,0.4796660549868419 -20011116 00:00,1143100,0.48148741653608024 -20011119 00:00,1155300,0.4844975316020891 -20011120 00:00,1148100,0.48668138289563917 -20011121 00:00,1141500,0.4894391518537147 -20011123 00:00,1155200,0.49268473930735973 -20011126 00:00,1162200,0.4957872343928845 -20011127 00:00,1154000,0.4975481495719016 -20011128 00:00,1133400,0.49749248123240825 -20011129 00:00,1144800,0.4985071418024879 -20011130 00:00,1143000,0.49873451396090906 -20011203 00:00,1133600,0.49901294348364417 -20011204 00:00,1150000,0.49964416239206205 -20011205 00:00,1176400,0.49883546531559875 -20011206 00:00,1173000,0.5007393447418276 -20011207 00:00,1164500,0.5050853390769089 -20011210 00:00,1144600,0.5059818997375886 -20011211 00:00,1141900,0.5047178949563098 -20011212 00:00,1142900,0.5049594069295138 -20011213 00:00,1123600,0.5053426923527256 -20011214 00:00,1129000,0.505167431991032 -20011217 00:00,1139900,0.5069121127172563 -20011218 00:00,1149300,0.509780729669778 -20011219 00:00,1155000,0.513267749917293 -20011220 00:00,1146900,0.5152418547391179 -20011221 00:00,1146600,0.5161531758728721 -20011224 00:00,1147300,0.5192402099866456 -20011226 00:00,1152500,0.5197744371036728 \ No newline at end of file +19981231 00:00,1228800,0.4712910520523543 +19990104 00:00,1228800,0.4728670561542627 +19990105 00:00,1244400,0.475950496057797 +19990106 00:00,1275000,0.47712727616774975 +19990107 00:00,1269400,0.4806961665069667 +19990108 00:00,1275000,0.48300980030733176 +19990111 00:00,1262800,0.4850552892025323 +19990112 00:00,1240000,0.4829739721935275 +19990113 00:00,1233100,0.47996467686269106 +19990114 00:00,1211600,0.4744520721553315 +19990115 00:00,1243100,0.4741231329837287 +19990119 00:00,1252800,0.47193012934351225 +19990120 00:00,1256300,0.4717566768361204 +19990121 00:00,1235900,0.4710780794623569 +19990122 00:00,1225600,0.46877612737790114 +19990125 00:00,1236300,0.46794031258499236 +19990126 00:00,1255000,0.46699207752469607 +19990127 00:00,1244700,0.46678006945434036 +19990128 00:00,1266600,0.46562082029786156 +19990129 00:00,1278800,0.46343199543052493 +19990201 00:00,1270900,0.46305648873597693 +19990202 00:00,1262800,0.4624422976076848 +19990203 00:00,1271900,0.4621976999383761 +19990204 00:00,1248400,0.461364555435642 +19990205 00:00,1240000,0.45938336071248725 +19990208 00:00,1243800,0.4584778168587569 +19990209 00:00,1218600,0.4560342181259994 +19990210 00:00,1226900,0.4547618765871354 +19990211 00:00,1256900,0.4530881960316191 +19990212 00:00,1235000,0.4528551805526957 +19990216 00:00,1243800,0.4523534462209105 +19990217 00:00,1227500,0.45205923506980444 +19990218 00:00,1239400,0.45196456307179433 +19990219 00:00,1239400,0.451764365956601 +19990222 00:00,1276900,0.448418217351059 +19990223 00:00,1275000,0.44553679173658073 +19990224 00:00,1254100,0.44451744002886967 +19990225 00:00,1247500,0.44299463435100045 +19990226 00:00,1239100,0.44175409662164355 +19990301 00:00,1237800,0.4408998099808091 +19990302 00:00,1228100,0.43973341302610197 +19990303 00:00,1231300,0.4393329961090751 +19990304 00:00,1250000,0.438359737755776 +19990305 00:00,1278100,0.4348533991377446 +19990308 00:00,1285200,0.43148760640011696 +19990309 00:00,1282500,0.4300601500534214 +19990310 00:00,1290300,0.42915080533176386 +19990311 00:00,1302200,0.42844656654650254 +19990312 00:00,1295300,0.42855806955615716 +19990315 00:00,1311600,0.4292906281052388 +19990316 00:00,1309800,0.43019127625206977 +19990317 00:00,1302500,0.4311416585512466 +19990318 00:00,1321600,0.4327711026287231 +19990319 00:00,1300600,0.43352612807083796 +19990322 00:00,1299100,0.433669951895955 +19990323 00:00,1264100,0.429629198898721 +19990324 00:00,1269400,0.4272484439506795 +19990325 00:00,1291300,0.4269972742147061 +19990326 00:00,1284700,0.4268438767602945 +19990329 00:00,1312200,0.4264515269137314 +19990330 00:00,1303400,0.42682583165463805 +19990331 00:00,1286300,0.42667724808301016 +19990401 00:00,1293800,0.42638873644615144 +19990405 00:00,1323800,0.42462741097689183 +19990406 00:00,1319400,0.4236512076272837 +19990407 00:00,1328800,0.42301594736393167 +19990408 00:00,1345300,0.4214753872177995 +19990409 00:00,1348800,0.4207881384315672 +19990412 00:00,1360600,0.42028612820917216 +19990413 00:00,1351900,0.4206961333159151 +19990414 00:00,1330300,0.4197148291430789 +19990415 00:00,1326300,0.4183409930739607 +19990416 00:00,1321300,0.41766476034257166 +19990419 00:00,1289100,0.4132951399150537 +19990420 00:00,1306300,0.41218644766468016 +19990421 00:00,1336900,0.4114669302134066 +19990422 00:00,1359700,0.4097270163991815 +19990423 00:00,1357500,0.40975081421616466 +19990426 00:00,1361300,0.4094986527823426 +19990427 00:00,1365600,0.4097276503301416 +19990428 00:00,1353400,0.41087700863505866 +19990429 00:00,1345600,0.41111221063744185 +19990430 00:00,1334700,0.4098841852798828 +19990503 00:00,1356300,0.40972202166880173 +19990504 00:00,1333100,0.409494685147687 +19990505 00:00,1349700,0.4093709677361191 +19990506 00:00,1335000,0.4090400314471041 +19990507 00:00,1346300,0.409430505729772 +19990510 00:00,1342200,0.40928699182985656 +19990511 00:00,1357200,0.40912263733637233 +19990512 00:00,1366300,0.4084041111952369 +19990513 00:00,1370200,0.40799105118714973 +19990514 00:00,1343000,0.40743675412450764 +19990517 00:00,1343100,0.4064768548381979 +19990518 00:00,1336300,0.4058410851304908 +19990519 00:00,1348100,0.40568480389192124 +19990520 00:00,1343100,0.4061868026317747 +19990521 00:00,1334200,0.4068005693544095 +19990524 00:00,1310900,0.4061374244599704 +19990525 00:00,1288400,0.4037340262337524 +19990526 00:00,1306600,0.40390991550811883 +19990527 00:00,1284400,0.40463563114575 +19990528 00:00,1305900,0.4057097354008404 +19990601 00:00,1298800,0.40741362545006365 +19990602 00:00,1297800,0.40931783611469325 +19990603 00:00,1302800,0.4121294350966899 +19990604 00:00,1319400,0.4127417864234357 +19990607 00:00,1337500,0.41140282226998315 +19990608 00:00,1321600,0.41266120253901306 +19990609 00:00,1321600,0.4146457162238674 +19990610 00:00,1309100,0.415927505691807 +19990611 00:00,1298100,0.4155537874132969 +19990614 00:00,1297800,0.415143213219923 +19990615 00:00,1305900,0.4148124708292455 +19990616 00:00,1334800,0.4123125671661425 +19990617 00:00,1346600,0.409380445726191 +19990618 00:00,1343100,0.40769284286624774 +19990621 00:00,1349400,0.4065131457311868 +19990622 00:00,1337000,0.40609037193650227 +19990623 00:00,1332800,0.40515599722178247 +19990624 00:00,1316900,0.40362634602670455 +19990625 00:00,1316600,0.402452972722789 +19990628 00:00,1333800,0.4021780794432048 +19990629 00:00,1351300,0.40129486056195923 +19990630 00:00,1367500,0.4001697828013303 +19990701 00:00,1380600,0.3986209417943816 +19990702 00:00,1391900,0.39768717162964873 +19990706 00:00,1387200,0.397409639619978 +19990707 00:00,1395600,0.3974472905730589 +19990708 00:00,1395600,0.39669505185022275 +19990709 00:00,1402200,0.3967000244733249 +19990712 00:00,1400600,0.3959980471019314 +19990713 00:00,1395000,0.3942110610303234 +19990714 00:00,1398400,0.3908279342203257 +19990715 00:00,1411300,0.38762029059864017 +19990716 00:00,1420000,0.3835482644282193 +19990719 00:00,1410000,0.3793552518397153 +19990720 00:00,1378000,0.37215447499667437 +19990721 00:00,1378800,0.36645851001860125 +19990722 00:00,1361400,0.36028625047074403 +19990723 00:00,1357500,0.3559007263901399 +19990726 00:00,1350000,0.3525803078347946 +19990727 00:00,1365000,0.3508405507276472 +19990728 00:00,1367300,0.35011099587472944 +19990729 00:00,1343800,0.35113907146549683 +19990730 00:00,1330900,0.35367891821774267 +19990802 00:00,1329400,0.3567772724615287 +19990803 00:00,1323600,0.35789988662663286 +19990804 00:00,1306900,0.36005730175374673 +19990805 00:00,1315600,0.36133416042604766 +19990806 00:00,1300600,0.3625291593591411 +19990809 00:00,1300500,0.3630880726377724 +19990810 00:00,1282200,0.36490883830148824 +19990811 00:00,1305300,0.36660708096729194 +19990812 00:00,1300200,0.3666578807070677 +19990813 00:00,1331900,0.3630053126478859 +19990816 00:00,1333800,0.36110708765722815 +19990817 00:00,1347000,0.3551941529880093 +19990818 00:00,1335600,0.3502760331316931 +19990819 00:00,1328800,0.34655656574890487 +19990820 00:00,1338800,0.3441475316798097 +19990823 00:00,1363900,0.342218980267551 +19990824 00:00,1365000,0.3434224611872218 +19990825 00:00,1384400,0.3505276394936448 +19990826 00:00,1365000,0.3622818087151258 +19990827 00:00,1351600,0.36957673124841567 +19990830 00:00,1326600,0.3689393862168969 +19990831 00:00,1325000,0.36531677994089645 +19990901 00:00,1335600,0.36453953970343606 +19990902 00:00,1322500,0.36362617987178536 +19990903 00:00,1361900,0.36413954854384634 +19990907 00:00,1355200,0.36435099872726884 +19990908 00:00,1349100,0.36493550070033665 +19990909 00:00,1351300,0.36446618687111143 +19990910 00:00,1354500,0.36824260787734764 +19990913 00:00,1348100,0.36808576937081494 +19990914 00:00,1340600,0.36598671523980203 +19990915 00:00,1320800,0.36290299873116216 +19990916 00:00,1323800,0.3604252873778396 +19990917 00:00,1337200,0.3598131168988562 +19990920 00:00,1336300,0.3604709688114378 +19990921 00:00,1309100,0.3626223907088779 +19990922 00:00,1311600,0.3631684678438024 +19990923 00:00,1280000,0.36418594997976617 +19990924 00:00,1280600,0.3658451031094933 +19990927 00:00,1282800,0.36979499635393664 +19990928 00:00,1281900,0.3772625361104586 +19990929 00:00,1267800,0.3887715801625025 +19990930 00:00,1283800,0.39372406149872363 +19991001 00:00,1283400,0.3950482829113537 +19991004 00:00,1306300,0.3959259842016034 +19991005 00:00,1301900,0.3952751511500452 +19991006 00:00,1326300,0.3909609588238364 +19991007 00:00,1320000,0.38629690655634746 +19991008 00:00,1337200,0.3807496601607845 +19991011 00:00,1338100,0.37578606371195933 +19991012 00:00,1314100,0.37238987396825185 +19991013 00:00,1286600,0.3683627669378771 +19991014 00:00,1284100,0.36509027728352605 +19991015 00:00,1248100,0.3582479941649377 +19991018 00:00,1255600,0.35399771727176826 +19991019 00:00,1260800,0.35139755069824363 +19991020 00:00,1292200,0.3478557121333766 +19991021 00:00,1286300,0.3452733884377442 +19991022 00:00,1303400,0.34279508266285663 +19991025 00:00,1295000,0.34077175991792386 +19991026 00:00,1282500,0.33897053642620883 +19991027 00:00,1301300,0.3370306079127502 +19991028 00:00,1345000,0.3301735154459785 +19991029 00:00,1365600,0.3210238850308604 +19991101 00:00,1359400,0.31656724193022845 +19991102 00:00,1348100,0.31443525707988057 +19991103 00:00,1356900,0.3137210513998113 +19991104 00:00,1364700,0.314230213706212 +19991105 00:00,1372200,0.3165506957595849 +19991108 00:00,1379400,0.32066637730248415 +19991109 00:00,1367200,0.3236691736239906 +19991110 00:00,1377500,0.32773019111044144 +19991111 00:00,1383800,0.33236489993983315 +19991112 00:00,1397500,0.33841859282662107 +19991115 00:00,1398100,0.3440938510393393 +19991116 00:00,1424400,0.3502007857444094 +19991117 00:00,1415600,0.3556112207169644 +19991118 00:00,1428100,0.3618566555188021 +19991119 00:00,1425000,0.36758756435621104 +19991122 00:00,1424700,0.3716891878942301 +19991123 00:00,1408800,0.37303292661920223 +19991124 00:00,1420600,0.37481593369712607 +19991126 00:00,1414400,0.37598582701905114 +19991129 00:00,1410000,0.3769077449124121 +19991130 00:00,1392500,0.3751417115951892 +19991201 00:00,1401300,0.3750473452526881 +19991202 00:00,1411300,0.374529965053748 +19991203 00:00,1436900,0.37357361274900597 +19991206 00:00,1427500,0.37295395871532494 +19991207 00:00,1419400,0.37317601731085 +19991208 00:00,1406300,0.3722793630863831 +19991209 00:00,1410000,0.37206701077783133 +19991210 00:00,1420000,0.3697302207309045 +19991213 00:00,1421300,0.36715403293733756 +19991214 00:00,1408100,0.36440769959097086 +19991215 00:00,1418000,0.36294637588959855 +19991216 00:00,1423800,0.36223564745117126 +19991217 00:00,1423800,0.36178968040205833 +19991220 00:00,1416900,0.3618056260743898 +19991221 00:00,1433400,0.3620394065626814 +19991222 00:00,1437500,0.3621603089883878 +19991223 00:00,1460900,0.36097098471747774 +19991227 00:00,1458100,0.360761890881554 +19991228 00:00,1461400,0.3611303861218349 +19991229 00:00,1463400,0.3619126379205118 +19991230 00:00,1466300,0.36301422718518395 +19991231 00:00,1468800,0.3650738181880914 +20000103 00:00,1455600,0.36790997833281885 +20000104 00:00,1400600,0.3608633272812466 +20000105 00:00,1402800,0.3553141229838069 +20000106 00:00,1403400,0.35314334991282886 +20000107 00:00,1444400,0.3534942923727392 +20000110 00:00,1458100,0.3513086122923103 +20000111 00:00,1440900,0.35085355767318843 +20000112 00:00,1433400,0.35000655429007355 +20000113 00:00,1451300,0.35128899710659955 +20000114 00:00,1465000,0.34999061880679444 +20000118 00:00,1456300,0.349936044377353 +20000119 00:00,1456900,0.3502969634070193 +20000120 00:00,1445000,0.3505830831360565 +20000121 00:00,1441300,0.3521561930566994 +20000124 00:00,1400600,0.3506496144005466 +20000125 00:00,1410000,0.34975880913132334 +20000126 00:00,1406700,0.3509607520415373 +20000127 00:00,1400000,0.3512319992085345 +20000128 00:00,1364700,0.3509555858956619 +20000131 00:00,1394400,0.3523366661541953 +20000201 00:00,1401900,0.35274066782606756 +20000202 00:00,1413000,0.35384775178434197 +20000203 00:00,1428400,0.35278798765595926 +20000204 00:00,1427800,0.3526167513610221 +20000207 00:00,1427200,0.35287157238823297 +20000208 00:00,1442800,0.35273183284862136 +20000209 00:00,1414100,0.352942077143746 +20000210 00:00,1418800,0.3536183847119388 +20000211 00:00,1391300,0.35297270775074024 +20000214 00:00,1392500,0.3524711443295658 +20000215 00:00,1407500,0.35238142730470623 +20000216 00:00,1390900,0.35283273883151256 +20000217 00:00,1390600,0.35236579426287146 +20000218 00:00,1351900,0.3523549079839841 +20000222 00:00,1354200,0.3530345139220729 +20000223 00:00,1365200,0.35326362054567145 +20000224 00:00,1356900,0.35390475249456876 +20000225 00:00,1337500,0.35496979644618815 +20000228 00:00,1350600,0.3568056705083418 +20000229 00:00,1369100,0.3585899436596429 +20000301 00:00,1383100,0.36061101275292157 +20000302 00:00,1387200,0.3617232299103371 +20000303 00:00,1413100,0.3586675035333211 +20000306 00:00,1393900,0.35858937813583885 +20000307 00:00,1359400,0.3579826611386207 +20000308 00:00,1370500,0.3577295201644814 +20000309 00:00,1405900,0.355965150091393 +20000310 00:00,1400000,0.35472742113882616 +20000313 00:00,1388800,0.35449621690749233 +20000314 00:00,1365000,0.35327462153775147 +20000315 00:00,1395000,0.35346537378886395 +20000316 00:00,1463100,0.3491925383937738 +20000317 00:00,1466900,0.34549799187597263 +20000320 00:00,1459800,0.34596841834358116 +20000321 00:00,1497200,0.34697233124914323 +20000322 00:00,1500000,0.34942580120230593 +20000323 00:00,1526300,0.35446862510583144 +20000324 00:00,1532800,0.3609157396234462 +20000327 00:00,1525000,0.3685894739195692 +20000328 00:00,1510000,0.373882619444316 +20000329 00:00,1510300,0.38032424154442457 +20000330 00:00,1488800,0.38357290519551324 +20000331 00:00,1505600,0.3884460060649471 +20000403 00:00,1507700,0.39397797725213257 +20000404 00:00,1500000,0.39835233216935784 +20000405 00:00,1488800,0.40069765423267306 +20000406 00:00,1503100,0.4040120796062559 +20000407 00:00,1517800,0.4086259338381824 +20000410 00:00,1507800,0.41259156603465613 +20000411 00:00,1500600,0.41461687073922376 +20000412 00:00,1466300,0.4139360942090703 +20000413 00:00,1440000,0.40993389594106755 +20000414 00:00,1358100,0.3984325535057672 +20000417 00:00,1400600,0.3996271078282339 +20000418 00:00,1442200,0.3970347303845736 +20000419 00:00,1430000,0.3971970324136626 +20000420 00:00,1433800,0.39836910386045155 +20000424 00:00,1430000,0.4003952124472069 +20000425 00:00,1478800,0.39714812451590437 +20000426 00:00,1463800,0.3959824434107445 +20000427 00:00,1465000,0.3951384985977798 +20000428 00:00,1452200,0.39542156299351267 +20000501 00:00,1471900,0.3947022864192429 +20000502 00:00,1446300,0.3954299402280534 +20000503 00:00,1416300,0.3936597101960254 +20000504 00:00,1413100,0.39330182047222584 +20000505 00:00,1433400,0.3935285255096049 +20000508 00:00,1425300,0.39429735831147394 +20000509 00:00,1416300,0.3941463313627641 +20000510 00:00,1385900,0.39298616543813775 +20000511 00:00,1411100,0.39302936356591023 +20000512 00:00,1424100,0.3922170203369584 +20000515 00:00,1453800,0.3898337222997657 +20000516 00:00,1470000,0.386546605469682 +20000517 00:00,1452500,0.38682619155718034 +20000518 00:00,1440600,0.38815413661941295 +20000519 00:00,1408800,0.38853875849556724 +20000522 00:00,1404100,0.38733314232339267 +20000523 00:00,1375600,0.3852775308484594 +20000524 00:00,1404100,0.3852511208085664 +20000525 00:00,1388800,0.3853732392359998 +20000526 00:00,1383100,0.3856708789423696 +20000530 00:00,1426300,0.384561735691355 +20000531 00:00,1424100,0.3834185973723606 +20000601 00:00,1451700,0.38109605439150407 +20000602 00:00,1480900,0.37624397041655294 +20000605 00:00,1472500,0.3750381908932384 +20000606 00:00,1463400,0.3741458394354995 +20000607 00:00,1475600,0.3739648602972704 +20000608 00:00,1465600,0.3731138662436768 +20000609 00:00,1463400,0.37198260673492867 +20000612 00:00,1452800,0.37119162548061263 +20000613 00:00,1474700,0.3713040207752373 +20000614 00:00,1475000,0.37120778185624204 +20000615 00:00,1482500,0.372007520096833 +20000616 00:00,1468800,0.3723907795258845 +20000619 00:00,1486600,0.37431125258685705 +20000620 00:00,1478100,0.37519894476138793 +20000621 00:00,1479500,0.37597699668576007 +20000622 00:00,1455300,0.3757071934619908 +20000623 00:00,1443800,0.37595647627754597 +20000626 00:00,1457500,0.3775278714060973 +20000627 00:00,1455600,0.3785497631994831 +20000628 00:00,1456300,0.3790564760822265 +20000629 00:00,1444400,0.3788726647679579 +20000630 00:00,1453800,0.3782196271682743 +20000703 00:00,1472800,0.3769024240809561 +20000705 00:00,1450900,0.3756348095020284 +20000706 00:00,1458800,0.373909605980938 +20000707 00:00,1480900,0.37069338004186275 +20000710 00:00,1479700,0.3674351916362647 +20000711 00:00,1483800,0.36441370143114804 +20000712 00:00,1495900,0.36081914875490767 +20000713 00:00,1498800,0.3565956876871952 +20000714 00:00,1508800,0.35359495129795676 +20000717 00:00,1510600,0.3513572783010122 +20000718 00:00,1496900,0.3498273630745259 +20000719 00:00,1484400,0.3479364708577593 +20000720 00:00,1498100,0.3473553097445989 +20000721 00:00,1482500,0.34657369806219634 +20000724 00:00,1466600,0.3452694910758662 +20000725 00:00,1474400,0.3456116916576705 +20000726 00:00,1461600,0.34688932246584847 +20000727 00:00,1455000,0.3470673898417632 +20000728 00:00,1422500,0.34577649404299127 +20000731 00:00,1434400,0.34630385436364863 +20000801 00:00,1440000,0.3470965495273747 +20000802 00:00,1442700,0.34752377621815184 +20000803 00:00,1455000,0.3481972461073051 +20000804 00:00,1465300,0.3477854526088391 +20000807 00:00,1481300,0.34632222715098504 +20000808 00:00,1485600,0.3458648200959142 +20000809 00:00,1476900,0.3463672439697071 +20000810 00:00,1465600,0.3476395284050239 +20000811 00:00,1474400,0.3480388161202911 +20000814 00:00,1493800,0.34782381776080107 +20000815 00:00,1490200,0.3480102163254541 +20000816 00:00,1483800,0.3486373342526018 +20000817 00:00,1499400,0.3504944244312464 +20000818 00:00,1496700,0.3518649530136886 +20000821 00:00,1503600,0.3524276933560454 +20000822 00:00,1502300,0.35295404735639574 +20000823 00:00,1509100,0.35454594376421694 +20000824 00:00,1514400,0.3557250975157037 +20000825 00:00,1510900,0.3560467187581129 +20000828 00:00,1517800,0.35660043810814673 +20000829 00:00,1515000,0.35696203718224895 +20000830 00:00,1506300,0.35617896854316305 +20000831 00:00,1522500,0.35663850535328256 +20000901 00:00,1525600,0.3540421735653227 +20000905 00:00,1512500,0.3515571996613849 +20000906 00:00,1496900,0.34875050422846293 +20000907 00:00,1507500,0.3469334016126925 +20000908 00:00,1497500,0.34556309380439976 +20000911 00:00,1494700,0.34492401506420334 +20000912 00:00,1487500,0.34444721485182106 +20000913 00:00,1488800,0.3445616131426756 +20000914 00:00,1485300,0.3449783111061253 +20000915 00:00,1467500,0.3461312447191946 +20000918 00:00,1446900,0.34723590746374466 +20000919 00:00,1460800,0.34858266629956897 +20000920 00:00,1452200,0.35059960416117075 +20000921 00:00,1450300,0.35227463377470025 +20000922 00:00,1451600,0.35426416917709935 +20000925 00:00,1441300,0.35693227437875935 +20000926 00:00,1428900,0.3599659107137651 +20000927 00:00,1428100,0.3642769906877474 +20000928 00:00,1461900,0.3657322615006483 +20000929 00:00,1437800,0.3691577820419001 +20001002 00:00,1438100,0.371098014721694 +20001003 00:00,1426300,0.3734817240529839 +20001004 00:00,1435800,0.3754386586829943 +20001005 00:00,1438800,0.37748181423337734 +20001006 00:00,1410000,0.3821087742980694 +20001009 00:00,1404400,0.3883403793036399 +20001010 00:00,1388800,0.3917341872111138 +20001011 00:00,1365600,0.39162178244415147 +20001012 00:00,1331600,0.3892205110883509 +20001013 00:00,1375600,0.38684062392177004 +20001016 00:00,1374700,0.38421786737175706 +20001017 00:00,1354800,0.3828251726874806 +20001018 00:00,1344100,0.3825518635495294 +20001019 00:00,1390500,0.37881568239374763 +20001020 00:00,1398800,0.3742315520338868 +20001023 00:00,1400000,0.3705854939001256 +20001024 00:00,1401300,0.36991027145676303 +20001025 00:00,1369200,0.36997841073255533 +20001026 00:00,1367500,0.36848823084414 +20001027 00:00,1383800,0.36794834274143473 +20001030 00:00,1402500,0.36600521761976146 +20001031 00:00,1429700,0.36237234378431854 +20001101 00:00,1424100,0.36068112860643253 +20001102 00:00,1430300,0.3599116177752071 +20001103 00:00,1431100,0.3600704712925024 +20001106 00:00,1437000,0.36112157834733694 +20001107 00:00,1436600,0.3631513018513261 +20001108 00:00,1412500,0.3641310466897837 +20001109 00:00,1404100,0.36434403287659795 +20001110 00:00,1369700,0.3610594733668761 +20001113 00:00,1353800,0.3568314561952019 +20001114 00:00,1387500,0.3561761975580211 +20001115 00:00,1391300,0.3552132916891955 +20001116 00:00,1377700,0.35503262138110603 +20001117 00:00,1374700,0.3551841877975029 +20001120 00:00,1346900,0.3551010879685249 +20001121 00:00,1351600,0.35543753265699174 +20001122 00:00,1325000,0.35633037813379564 +20001124 00:00,1348400,0.35782407042526315 +20001127 00:00,1355000,0.3584859574692314 +20001128 00:00,1338100,0.36067328208104865 +20001129 00:00,1346400,0.36251561803953986 +20001130 00:00,1316300,0.3645773775894932 +20001201 00:00,1318800,0.36733770754266354 +20001204 00:00,1330000,0.36914370264332147 +20001205 00:00,1381300,0.36486335746969717 +20001206 00:00,1355300,0.36371510580115285 +20001207 00:00,1349800,0.36256045361058065 +20001208 00:00,1376600,0.36099317992010266 +20001211 00:00,1386300,0.3591281146014992 +20001212 00:00,1377500,0.3586240812409477 +20001213 00:00,1365300,0.358287999247884 +20001214 00:00,1341900,0.3570461825052945 +20001215 00:00,1314500,0.35397521362472695 +20001218 00:00,1323800,0.3535265472761571 +20001219 00:00,1305600,0.352669383873644 +20001220 00:00,1266900,0.34973155736261063 +20001221 00:00,1276900,0.348621419876965 +20001222 00:00,1308600,0.3479871892216133 +20001226 00:00,1318900,0.3467444293841328 +20001227 00:00,1331300,0.34563073986623916 +20001228 00:00,1336100,0.34542734955753623 +20001229 00:00,1322500,0.3482938848158094 +20010102 00:00,1282500,0.34913184344082865 +20010103 00:00,1350000,0.34959145213895376 +20010104 00:00,1334100,0.35072409910672125 +20010105 00:00,1302500,0.3529764998027673 +20010108 00:00,1297500,0.352219630022492 +20010109 00:00,1301300,0.35209781169149135 +20010110 00:00,1316600,0.3522671994737829 +20010111 00:00,1327700,0.35256593938318825 +20010112 00:00,1319100,0.3524377678975281 +20010116 00:00,1325800,0.3526300284224165 +20010117 00:00,1329400,0.35342281974062434 +20010118 00:00,1350500,0.35478162889190396 +20010119 00:00,1344800,0.35694036483823033 +20010122 00:00,1346300,0.35873072885915464 +20010123 00:00,1361300,0.3592994114934427 +20010124 00:00,1366900,0.3600293236524521 +20010125 00:00,1360600,0.36134706376305176 +20010126 00:00,1357800,0.36188098234290494 +20010129 00:00,1366500,0.3658990828147158 +20010130 00:00,1377500,0.36790398616344533 +20010131 00:00,1370600,0.36964961502063975 +20010201 00:00,1374800,0.3704022619261164 +20010202 00:00,1350800,0.3694401809664333 +20010205 00:00,1358900,0.3693102246899551 +20010206 00:00,1354200,0.36901057981221724 +20010207 00:00,1342200,0.3688759893555646 +20010208 00:00,1334800,0.3683809361062821 +20010209 00:00,1318300,0.36776487803073654 +20010212 00:00,1331400,0.3679285640658797 +20010213 00:00,1321200,0.3683158863745959 +20010214 00:00,1321500,0.37031133534385713 +20010215 00:00,1329600,0.3717807306749443 +20010216 00:00,1304600,0.3732268174481928 +20010220 00:00,1283200,0.3712157802105863 +20010221 00:00,1256000,0.3680880608097035 +20010222 00:00,1255200,0.36654726925504927 +20010223 00:00,1248900,0.36421357536103915 +20010226 00:00,1272100,0.35986544430105327 +20010227 00:00,1263500,0.35560272305397855 +20010228 00:00,1241500,0.3524956778243806 +20010301 00:00,1244900,0.34954195857212794 +20010302 00:00,1237700,0.3466573084775881 +20010305 00:00,1244000,0.3469780397371272 +20010306 00:00,1258700,0.34217703252928927 +20010307 00:00,1266400,0.3341358345266069 +20010308 00:00,1269000,0.3265119633981919 +20010309 00:00,1236700,0.323762820132828 +20010312 00:00,1184400,0.31823620334233005 +20010313 00:00,1202000,0.31612185149979616 +20010314 00:00,1172000,0.3213426708746613 +20010315 00:00,1177100,0.3264712659091759 +20010316 00:00,1153100,0.32951446441573906 +20010319 00:00,1173000,0.33280080529678724 +20010320 00:00,1142500,0.33899588945080994 +20010321 00:00,1123400,0.34183668424479136 +20010322 00:00,1119000,0.34559695903563453 +20010323 00:00,1142500,0.3463096212889737 +20010326 00:00,1155000,0.3450864720565337 +20010327 00:00,1185100,0.3399234702957086 +20010328 00:00,1154500,0.34005555847720276 +20010329 00:00,1149800,0.34001221567187606 +20010330 00:00,1161200,0.3409070680951246 +20010402 00:00,1145400,0.3420267746386051 +20010403 00:00,1106700,0.3429847851495268 +20010404 00:00,1103100,0.34410043161413667 +20010405 00:00,1152200,0.3447332982436529 +20010406 00:00,1130500,0.34593120923443343 +20010409 00:00,1140000,0.34930638165019945 +20010410 00:00,1170900,0.3535103734293222 +20010411 00:00,1169600,0.3610538154425925 +20010412 00:00,1185500,0.3673558176075101 +20010416 00:00,1182300,0.3680465473934625 +20010417 00:00,1194200,0.375473171050988 +20010418 00:00,1241400,0.376017317842077 +20010419 00:00,1257200,0.3756569430859598 +20010420 00:00,1243600,0.379359272051169 +20010423 00:00,1227000,0.3836171186460805 +20010424 00:00,1211300,0.38624678657497585 +20010425 00:00,1231000,0.39003877012339044 +20010426 00:00,1237400,0.39452709251833773 +20010427 00:00,1255500,0.4001604909864036 +20010430 00:00,1252100,0.4058227010306005 +20010501 00:00,1269500,0.4147970710280987 +20010502 00:00,1268900,0.4215935442407319 +20010503 00:00,1251600,0.42590036586403346 +20010504 00:00,1269500,0.4300800614613408 +20010507 00:00,1265700,0.4341473239961622 +20010508 00:00,1265200,0.4375956196768061 +20010509 00:00,1258700,0.4393149544344534 +20010510 00:00,1259900,0.4433984538705123 +20010511 00:00,1248200,0.4456745510166548 +20010514 00:00,1252300,0.4473870757175146 +20010515 00:00,1253000,0.4487755083154229 +20010516 00:00,1289600,0.4521171280671783 +20010517 00:00,1293100,0.45447180095211387 +20010518 00:00,1296200,0.4567590627698502 +20010521 00:00,1317700,0.4556018921672155 +20010522 00:00,1313700,0.45448772941277327 +20010523 00:00,1292900,0.45264710949260367 +20010524 00:00,1297000,0.4524277798947498 +20010525 00:00,1282300,0.45341424559016474 +20010529 00:00,1273000,0.45626077306338847 +20010530 00:00,1252900,0.45564639651000316 +20010531 00:00,1261000,0.4580243625130304 +20010601 00:00,1266400,0.45817806728029825 +20010604 00:00,1271700,0.45824284263566073 +20010605 00:00,1288700,0.45774781869196957 +20010606 00:00,1275300,0.4578845323108694 +20010607 00:00,1282400,0.45815079830419464 +20010608 00:00,1270000,0.4584532488941017 +20010611 00:00,1259400,0.4584754448588922 +20010612 00:00,1261300,0.4592851923119714 +20010613 00:00,1247400,0.45915216035551193 +20010614 00:00,1224800,0.45808202061606834 +20010615 00:00,1216200,0.4572268716663765 +20010618 00:00,1210800,0.45687047865515706 +20010619 00:00,1214600,0.45801313000253563 +20010620 00:00,1226000,0.4586851075622402 +20010621 00:00,1238600,0.45868306650152796 +20010622 00:00,1227500,0.4578351221259764 +20010625 00:00,1221300,0.45694937946141906 +20010626 00:00,1218400,0.45651738326388774 +20010627 00:00,1213100,0.4563326447949 +20010628 00:00,1228900,0.4559992484760625 +20010629 00:00,1232000,0.4560967455410535 +20010702 00:00,1239000,0.45579678865375356 +20010703 00:00,1240800,0.45565647546079296 +20010705 00:00,1221300,0.4575179895495662 +20010706 00:00,1191900,0.45713593972473904 +20010709 00:00,1201000,0.4567469915736868 +20010710 00:00,1183500,0.4564287575717794 +20010711 00:00,1182700,0.45634519948541763 +20010712 00:00,1211600,0.4555096397695216 +20010713 00:00,1219000,0.4537280992022657 +20010716 00:00,1206000,0.4533139512663997 +20010717 00:00,1216700,0.45336801629004453 +20010718 00:00,1211000,0.45342017160590165 +20010719 00:00,1218300,0.4533405280531469 +20010720 00:00,1214500,0.4548235427826541 +20010723 00:00,1193600,0.455044326887496 +20010724 00:00,1173900,0.45324961321751145 +20010725 00:00,1193000,0.45406348547786174 +20010726 00:00,1207500,0.4534801890915506 +20010727 00:00,1210000,0.45177590806149326 +20010730 00:00,1208200,0.4496178794589562 +20010731 00:00,1214600,0.44770490259517376 +20010801 00:00,1219600,0.4462335270016085 +20010802 00:00,1223800,0.445449783662297 +20010803 00:00,1218700,0.4449185623701507 +20010806 00:00,1204500,0.4437142732903246 +20010807 00:00,1208300,0.44296658795180216 +20010808 00:00,1186500,0.4416500678316965 +20010809 00:00,1187400,0.4402185010654198 +20010810 00:00,1194400,0.43988851719158867 +20010813 00:00,1194900,0.43942145661153753 +20010814 00:00,1191100,0.43916854061313604 +20010815 00:00,1182800,0.4390242506203501 +20010816 00:00,1186200,0.4393632422935433 +20010817 00:00,1166400,0.4391701251158019 +20010820 00:00,1175600,0.439490490312665 +20010821 00:00,1161300,0.439638944028183 +20010822 00:00,1170500,0.4400515887743164 +20010823 00:00,1167000,0.4401421162545722 +20010824 00:00,1190000,0.43896434217304936 +20010827 00:00,1184900,0.43808903091235424 +20010828 00:00,1166400,0.43732403381808005 +20010829 00:00,1154000,0.43611492775543365 +20010830 00:00,1132800,0.4346448791090069 +20010831 00:00,1139200,0.4333387858642098 +20010904 00:00,1136500,0.4325121474853045 +20010905 00:00,1136500,0.43170645829367743 +20010906 00:00,1111000,0.4311061143825131 +20010907 00:00,1091300,0.4297440711772497 +20010910 00:00,1098300,0.4298009375057405 +20010917 00:00,1043000,0.4283585921833417 +20010918 00:00,1039000,0.42759299393211264 +20010919 00:00,1020200,0.42879946658954626 +20010920 00:00,989600,0.43063895326247714 +20010921 00:00,968500,0.4334210639303417 +20010924 00:00,1004800,0.43821210466911753 +20010925 00:00,1014000,0.4404278220221373 +20010926 00:00,1010000,0.4437860537000726 +20010927 00:00,1020500,0.44602809495542145 +20010928 00:00,1042500,0.4451885708220026 +20011001 00:00,1040000,0.4450498613477131 +20011002 00:00,1053800,0.4445973823418414 +20011003 00:00,1073400,0.4416894265109373 +20011004 00:00,1071000,0.43994484702601333 +20011005 00:00,1072600,0.4393089037570454 +20011008 00:00,1065300,0.439861690121946 +20011009 00:00,1058700,0.4410961149098062 +20011010 00:00,1084000,0.4439731972985753 +20011011 00:00,1100100,0.44811127590935673 +20011012 00:00,1094500,0.4517873132740209 +20011015 00:00,1093000,0.4567329088787868 +20011016 00:00,1100600,0.4611655251960067 +20011017 00:00,1079000,0.4619636615980831 +20011018 00:00,1072100,0.46230448762543724 +20011019 00:00,1075500,0.4635548840626379 +20011022 00:00,1092600,0.46513712310611977 +20011023 00:00,1088000,0.467156255986571 +20011024 00:00,1087700,0.4704840824846891 +20011025 00:00,1103100,0.47135404504220585 +20011026 00:00,1107700,0.47220201262332556 +20011029 00:00,1082300,0.47330117633857854 +20011030 00:00,1062000,0.47246764041168654 +20011031 00:00,1062700,0.4737416756872727 +20011101 00:00,1086700,0.47761170387176216 +20011102 00:00,1090600,0.48031581590847466 +20011105 00:00,1105800,0.4803475859411885 +20011106 00:00,1122900,0.47771011049968665 +20011107 00:00,1119600,0.47615889669351374 +20011108 00:00,1123500,0.4748397134789196 +20011109 00:00,1124400,0.4742135382291572 +20011112 00:00,1121600,0.4749887472878162 +20011113 00:00,1143900,0.4772878713044744 +20011114 00:00,1146200,0.47954353498554203 +20011115 00:00,1146000,0.48206179467770544 +20011116 00:00,1143100,0.4838297806313143 +20011119 00:00,1155300,0.4865961602897201 +20011120 00:00,1148100,0.4887722332811323 +20011121 00:00,1141500,0.4915036786350203 +20011123 00:00,1155200,0.4945335054329569 +20011126 00:00,1162200,0.49743917524912196 +20011127 00:00,1154000,0.4992606015181109 +20011128 00:00,1133400,0.4993190846009758 +20011129 00:00,1144800,0.5006506694237282 +20011130 00:00,1143000,0.5010672005146094 +20011203 00:00,1133600,0.5015009612691267 +20011204 00:00,1150000,0.5022706286326776 +20011205 00:00,1176400,0.501612097522608 +20011206 00:00,1173000,0.5035978252290206 +20011207 00:00,1164500,0.5078616766601908 +20011210 00:00,1144600,0.5087788041575417 +20011211 00:00,1141900,0.507790141975557 +20011212 00:00,1142900,0.508063191066643 +20011213 00:00,1123600,0.5084255191629118 +20011214 00:00,1129000,0.5083489549075211 +20011217 00:00,1139900,0.5102429407282801 +20011218 00:00,1149300,0.5131944101929952 +20011219 00:00,1155000,0.516648179624221 +20011220 00:00,1146900,0.5185953440242989 +20011221 00:00,1146600,0.5194532020682503 +20011224 00:00,1147300,0.5223255078034078 +20011226 00:00,1152500,0.5227668307845923 +20011227 00:00,1159300,0.5253684595373205 +20011228 00:00,1162100,0.5276908492429967 +20011231 00:00,1148900,0.5280917735948246 +20020102 00:00,1155900,0.5283505684822303 +20020103 00:00,1167600,0.5289155600005553 +20020104 00:00,1174100,0.5306907762160703 +20020107 00:00,1167000,0.5309455822531264 +20020108 00:00,1163600,0.5312867383441316 +20020109 00:00,1157000,0.5344375844958744 +20020110 00:00,1159600,0.5355459465725559 +20020111 00:00,1147700,0.5341433655737415 +20020114 00:00,1141200,0.5330230477622709 +20020115 00:00,1148800,0.5327973955089194 +20020116 00:00,1130500,0.531847466176232 +20020117 00:00,1141300,0.5316058249711698 +20020118 00:00,1130800,0.5320075791637981 +20020122 00:00,1122500,0.5326238632718917 +20020123 00:00,1131400,0.5335011938669129 +20020124 00:00,1135400,0.5335501745780542 +20020125 00:00,1135900,0.5341839485278996 +20020128 00:00,1136300,0.5348248162402853 +20020129 00:00,1102800,0.5335625865233811 +20020130 00:00,1116100,0.5324532309695581 +20020131 00:00,1132400,0.5307989606671135 +20020201 00:00,1126000,0.5298230931744103 +20020204 00:00,1097000,0.5274655689357373 +20020205 00:00,1092700,0.5241456299927438 +20020206 00:00,1087000,0.5214122284841026 +20020207 00:00,1083800,0.5187114696689312 +20020208 00:00,1099700,0.5164548397082056 +20020211 00:00,1115900,0.5127959788394719 +20020212 00:00,1111100,0.5103627479500571 +20020213 00:00,1122600,0.5079781607634163 +20020214 00:00,1119800,0.5059654063439286 +20020215 00:00,1108300,0.5045851467985333 +20020219 00:00,1087400,0.5021576794381496 +20020220 00:00,1103200,0.5008595268171178 +20020221 00:00,1086000,0.4999174268788774 +20020222 00:00,1093700,0.5011658585437677 +20020225 00:00,1115000,0.5004262948973013 +20020226 00:00,1113600,0.49790878546692074 +20020227 00:00,1115500,0.49540591273810486 +20020228 00:00,1111900,0.4927034674563734 +20020301 00:00,1136600,0.48921675739096493 +20020304 00:00,1159300,0.48288434663300245 +20020305 00:00,1152100,0.47872092248136683 +20020306 00:00,1168100,0.47605520754202524 +20020307 00:00,1163300,0.4740194857376955 +20020308 00:00,1168900,0.4737189601568981 +20020311 00:00,1173400,0.4734687933281145 +20020312 00:00,1171000,0.4731910103142252 +20020313 00:00,1159000,0.4750455295044654 +20020314 00:00,1158600,0.48275534786825247 +20020315 00:00,1167900,0.48634173131104574 +20020318 00:00,1167600,0.4877644654738496 +20020319 00:00,1173500,0.4910557920021573 +20020320 00:00,1154300,0.4921978823324494 +20020321 00:00,1156000,0.49385340353304336 +20020322 00:00,1150900,0.49446069848310714 +20020325 00:00,1134300,0.4967717760398412 +20020326 00:00,1140800,0.49642938557955185 +20020327 00:00,1146700,0.4960831523210252 +20020328 00:00,1149100,0.4966393837358927 +20020401 00:00,1148300,0.49627449601837315 +20020402 00:00,1139300,0.4949985247994713 +20020403 00:00,1127400,0.4974798648632128 +20020404 00:00,1128900,0.4964099579256078 +20020405 00:00,1125300,0.4951462768831866 +20020408 00:00,1128100,0.4974959887478343 +20020409 00:00,1120500,0.4955970777961908 +20020410 00:00,1133500,0.490935585429635 +20020411 00:00,1107200,0.486037671034891 +20020412 00:00,1113300,0.48226575249401304 +20020415 00:00,1106300,0.4801506926752321 +20020416 00:00,1131200,0.4775188338520822 +20020417 00:00,1130500,0.47481637492880985 +20020418 00:00,1127600,0.4739733686245501 +20020419 00:00,1128500,0.47459262086524484 +20020422 00:00,1111400,0.4792890963560287 +20020423 00:00,1103800,0.4824166511259182 +20020424 00:00,1095900,0.48155774940277124 +20020425 00:00,1094300,0.48316826242481875 +20020426 00:00,1079500,0.4830306703247548 +20020429 00:00,1069200,0.48100114793109533 +20020430 00:00,1079800,0.4812928304589372 +20020501 00:00,1089600,0.4804704420125911 +20020502 00:00,1087700,0.4796617006048627 +20020503 00:00,1076700,0.4792089923066894 +20020506 00:00,1056200,0.47804099425307717 +20020507 00:00,1052300,0.47765223117480854 +20020508 00:00,1091600,0.47553768409335057 +20020509 00:00,1076500,0.47435986804242725 +20020510 00:00,1059800,0.47399121452165766 +20020513 00:00,1078200,0.47368263403566 +20020514 00:00,1100900,0.47072990332853026 +20020515 00:00,1095500,0.4694555586528393 +20020516 00:00,1103500,0.4689140283937119 +20020517 00:00,1111100,0.4702638093439894 +20020520 00:00,1096400,0.47436872963683385 +20020521 00:00,1084800,0.4786864167940398 +20020522 00:00,1090500,0.479337338018811 +20020523 00:00,1101600,0.48018705778591925 +20020524 00:00,1088500,0.48013811410171536 +20020528 00:00,1079000,0.4793312703549468 +20020529 00:00,1072500,0.47836291492500344 +20020530 00:00,1070100,0.4774834534319146 +20020531 00:00,1072300,0.4777823495650566 +20020603 00:00,1043000,0.47597704637479593 +20020604 00:00,1044100,0.4740737650541012 +20020605 00:00,1055000,0.47494507397912344 +20020606 00:00,1034200,0.47558779995396244 +20020607 00:00,1032600,0.4760925106013069 +20020610 00:00,1035600,0.4764403284326482 +20020611 00:00,1018900,0.4774591882758671 +20020612 00:00,1026400,0.4790558393343356 +20020613 00:00,1015000,0.4820181222912359 +20020614 00:00,1012900,0.48492907386782397 +20020617 00:00,1041900,0.4853418444176453 +20020618 00:00,1042400,0.48653708264636625 +20020619 00:00,1025400,0.4885266295781319 +20020620 00:00,1012000,0.4887257146521494 +20020621 00:00,991900,0.4880171297588215 +20020624 00:00,996900,0.48898009625834576 +20020625 00:00,979000,0.4897172582632933 +20020626 00:00,976200,0.4898761176303978 +20020627 00:00,994500,0.49047581446471944 +20020628 00:00,992500,0.49066027457983896 +20020701 00:00,970800,0.4914262598728151 +20020702 00:00,950200,0.4911605124724784 +20020703 00:00,956900,0.4930210338183921 +20020705 00:00,993000,0.49124260324801 +20020708 00:00,980300,0.49124935136296183 +20020709 00:00,956100,0.4934546409620828 +20020710 00:00,922900,0.49453165509366764 +20020711 00:00,931500,0.495386310002453 +20020712 00:00,924600,0.49585745472962484 +20020715 00:00,921000,0.49747074163179195 +20020716 00:00,905800,0.5008608264628162 +20020717 00:00,910000,0.5048002943846435 +20020718 00:00,883300,0.5064163154339761 +20020719 00:00,848000,0.5045421158962283 +20020722 00:00,822100,0.5015838513583214 +20020723 00:00,800000,0.5008324019364483 +20020724 00:00,847500,0.504083003579501 +20020725 00:00,842000,0.5075363426949331 +20020726 00:00,856000,0.5100744055114959 +20020729 00:00,902300,0.5012784958900088 +20020730 00:00,907000,0.4956160793284352 +20020731 00:00,913800,0.4906380040129506 +20020801 00:00,886400,0.489775185697547 +20020802 00:00,866600,0.48843167214543065 +20020805 00:00,837300,0.48517258659611273 +20020806 00:00,864000,0.48494647828396004 +20020807 00:00,881500,0.48318558975316234 +20020808 00:00,909800,0.47947868423400075 +20020809 00:00,912600,0.4772040548689554 +20020812 00:00,907000,0.47701874096627633 +20020813 00:00,887500,0.4770989169121885 +20020814 00:00,924100,0.47850231638711455 +20020815 00:00,934000,0.47879058049295076 +20020816 00:00,932200,0.48030121167694306 +20020819 00:00,955200,0.4814623976126945 +20020820 00:00,942700,0.48232598266363697 +20020821 00:00,955000,0.48232752492432146 +20020822 00:00,967600,0.48064713661805203 +20020823 00:00,945200,0.4781333239035837 +20020826 00:00,952800,0.47386712481178256 +20020827 00:00,939000,0.4698979875497447 +20020828 00:00,923000,0.46263674056991294 +20020829 00:00,923000,0.4556667869443181 +20020830 00:00,921000,0.44746363764762515 +20020903 00:00,882100,0.43636764480625334 +20020904 00:00,897500,0.4290431154691078 +20020905 00:00,884700,0.42291893352752663 +20020906 00:00,898600,0.4199069059074863 +20020909 00:00,908000,0.41807581812683453 +20020910 00:00,915500,0.4188408792928038 +20020911 00:00,915000,0.4239056813916693 +20020912 00:00,892600,0.43015888250596535 +20020913 00:00,895400,0.4376981507389242 +20020916 00:00,897300,0.4501390740210451 +20020917 00:00,879700,0.45318579014694854 +20020918 00:00,874900,0.45685100162697845 +20020919 00:00,848500,0.4562696152595217 +20020920 00:00,846600,0.45271008149040076 +20020923 00:00,835900,0.45146275316868506 +20020924 00:00,821500,0.44954695160500424 +20020925 00:00,841100,0.4489826312776775 +20020926 00:00,858700,0.4476404667186945 +20020927 00:00,828500,0.4488181727683703 +20020930 00:00,816000,0.4488217069616519 +20021001 00:00,850000,0.449066670137509 +20021002 00:00,830500,0.4498904870519263 +20021003 00:00,820500,0.450754826942132 +20021004 00:00,803900,0.4519156136459352 +20021007 00:00,788200,0.453132027959924 +20021008 00:00,801100,0.45572999567761985 +20021009 00:00,780000,0.4594583689963302 +20021010 00:00,806600,0.45994606108897185 +20021011 00:00,839000,0.45483483493155336 +20021014 00:00,844700,0.4497227021954654 +20021015 00:00,884200,0.4402080031225553 +20021016 00:00,863700,0.4372685048978307 +20021017 00:00,881800,0.433493452730736 +20021018 00:00,886500,0.43103779277440435 +20021021 00:00,902900,0.4295081694256715 +20021022 00:00,893200,0.42997349137282137 +20021023 00:00,899700,0.43127884864702315 +20021024 00:00,885800,0.43237477066998115 +20021025 00:00,900400,0.4366286553380299 +20021028 00:00,894200,0.4418123762636326 +20021029 00:00,886000,0.4427015045889344 +20021030 00:00,894500,0.4451133327764688 +20021031 00:00,888600,0.448217039898239 +20021101 00:00,905300,0.4521711343101167 +20021104 00:00,911500,0.45630592695761196 +20021105 00:00,919700,0.4592825187781317 +20021106 00:00,927700,0.4616646752090258 +20021107 00:00,905700,0.4626793466858892 +20021108 00:00,898700,0.46237264472457645 +20021111 00:00,880500,0.46093698730033933 +20021112 00:00,887500,0.4608813077798339 +20021113 00:00,886800,0.4603904091074478 +20021114 00:00,908700,0.4598127418595214 +20021115 00:00,913800,0.4589033723600644 +20021118 00:00,905000,0.4587438552470711 +20021119 00:00,902300,0.45879657643836785 +20021120 00:00,919400,0.4588085635313276 +20021121 00:00,939000,0.4578410243951601 +20021122 00:00,936200,0.4576115537860082 +20021125 00:00,938000,0.4587245569605745 +20021126 00:00,918500,0.4590098797342135 +20021127 00:00,943500,0.46028361302308496 +20021129 00:00,939800,0.4612528566727345 +20021202 00:00,938900,0.46276713905187794 +20021203 00:00,925500,0.46536140989226155 +20021204 00:00,923700,0.46614491320368306 +20021205 00:00,911600,0.46689753386515154 +20021206 00:00,918100,0.4688308473990235 +20021209 00:00,896900,0.46897514333071144 +20021210 00:00,909200,0.46886527241007575 +20021211 00:00,910400,0.46865165594252517 +20021212 00:00,907500,0.46843705077541814 +20021213 00:00,895000,0.4683867472935085 +20021216 00:00,916800,0.46853695843843934 +20021217 00:00,909300,0.46840586036952675 +20021218 00:00,896400,0.4681660905579234 +20021219 00:00,890800,0.46797910603534393 +20021220 00:00,896900,0.46816319123757805 +20021223 00:00,899300,0.4684373660036696 +20021224 00:00,893300,0.46901283677690436 +20021226 00:00,890300,0.46941013593726255 +20021227 00:00,876800,0.46953245625013934 +20021230 00:00,880900,0.4696268382491776 +20021231 00:00,881800,0.4706056572054782 +20030102 00:00,911300,0.469279786616708 +20030103 00:00,911300,0.46729003006445136 +20030106 00:00,931300,0.4645366152304626 +20030107 00:00,925600,0.46312666917888534 +20030108 00:00,912000,0.46237008857687434 +20030109 00:00,930000,0.46201541677074404 +20030110 00:00,929700,0.46189660856506287 +20030113 00:00,928800,0.46213547745387423 +20030114 00:00,934400,0.46277283899170996 +20030115 00:00,921200,0.46320142548905274 +20030116 00:00,918300,0.4635405512771811 +20030117 00:00,904800,0.46322173096651703 +20030121 00:00,890300,0.4616335466581803 +20030122 00:00,880400,0.4601288367996835 +20030123 00:00,890600,0.4598810232564715 +20030124 00:00,863300,0.4588852057248079 +20030127 00:00,850300,0.45775405449712536 +20030128 00:00,861200,0.4581507930769849 +20030129 00:00,867800,0.4591224628002077 +20030130 00:00,848000,0.4604004241794707 +20030131 00:00,858400,0.4634183990422338 +20030203 00:00,862700,0.4656094913960348 +20030204 00:00,851400,0.46629722528502876 +20030205 00:00,846400,0.4665809644968064 +20030206 00:00,841700,0.4669957448202002 +20030207 00:00,832900,0.4678939857178279 +20030210 00:00,839400,0.4675973573696311 +20030211 00:00,832100,0.46746875176026254 +20030212 00:00,822200,0.4668383669153368 +20030213 00:00,821000,0.4670577243217864 +20030214 00:00,838800,0.46646990053303716 +20030218 00:00,855500,0.46223261966017404 +20030219 00:00,849300,0.457822418853509 +20030220 00:00,840900,0.45496371020918913 +20030221 00:00,853400,0.45270314071423234 +20030224 00:00,836300,0.4510240633313309 +20030225 00:00,843200,0.4500641635597651 +20030226 00:00,831900,0.4499298321524148 +20030227 00:00,841700,0.45135999200552124 +20030228 00:00,846200,0.45476102511218536 +20030303 00:00,839300,0.4559044220792057 +20030304 00:00,827300,0.45589989754041405 +20030305 00:00,835000,0.45663748347937283 +20030306 00:00,827000,0.4566926948139149 +20030307 00:00,833700,0.4570720357241611 +20030310 00:00,812300,0.4566865392331958 +20030311 00:00,805500,0.4558188538041952 +20030312 00:00,809700,0.455582391284727 +20030313 00:00,837800,0.45452199901023704 +20030314 00:00,839000,0.4530860570881442 +20030317 00:00,868300,0.4491387377227596 +20030318 00:00,871900,0.44598098598507013 +20030319 00:00,879900,0.4444365255107751 +20030320 00:00,881300,0.44397094911328305 +20030321 00:00,897400,0.44430477299116966 +20030324 00:00,865800,0.4448793683426587 +20030325 00:00,876700,0.44640246850965687 +20030326 00:00,872000,0.44772806887434136 +20030327 00:00,871000,0.44908556303454855 +20030328 00:00,865900,0.4503672889735138 +20030331 00:00,849800,0.45049192312460157 +20030401 00:00,860700,0.45144685195114936 +20030402 00:00,883900,0.45220859418131343 +20030403 00:00,878800,0.4531162242582544 +20030404 00:00,881200,0.45426712462501584 +20030407 00:00,882000,0.45540786041189907 +20030408 00:00,881100,0.4563229913559627 +20030409 00:00,868600,0.4564343708316259 +20030410 00:00,874500,0.4572104123376479 +20030411 00:00,871700,0.4576664874821656 +20030414 00:00,888500,0.45832713005288467 +20030415 00:00,894200,0.45735631414114297 +20030416 00:00,882300,0.4573257811084075 +20030417 00:00,896600,0.4578951994200367 +20030421 00:00,895000,0.4592674089587698 +20030422 00:00,915100,0.45983099487736817 +20030423 00:00,922000,0.4601659559373968 +20030424 00:00,914200,0.46134343150766294 +20030425 00:00,901500,0.46222932005038686 +20030428 00:00,918700,0.4632656144989907 +20030429 00:00,921500,0.46434647675079965 +20030430 00:00,918500,0.4653899115256849 +20030501 00:00,919200,0.4671723817953573 +20030502 00:00,933000,0.46962938680725047 +20030505 00:00,929500,0.4713449024030694 +20030506 00:00,937900,0.4741208466076838 +20030507 00:00,933300,0.476690230795579 +20030508 00:00,923400,0.4782366730564677 +20030509 00:00,937200,0.48006352182460366 +20030512 00:00,949000,0.484057092693444 +20030513 00:00,946400,0.48561408650133164 +20030514 00:00,943600,0.4854714578651075 +20030515 00:00,951300,0.4855997318163737 +20030516 00:00,948600,0.4848870577259545 +20030519 00:00,925100,0.48303325591174523 +20030520 00:00,924500,0.4810216185229555 +20030521 00:00,927800,0.4802230512934892 +20030522 00:00,936800,0.4791662377546194 +20030523 00:00,937200,0.478406613388488 +20030527 00:00,956200,0.47690383749518217 +20030528 00:00,958300,0.4752900153876861 +20030529 00:00,953700,0.4743090879083209 +20030530 00:00,969300,0.4736543798938888 +20030602 00:00,971700,0.473019698344815 +20030603 00:00,977100,0.4723927874256593 +20030604 00:00,991400,0.47125933947373183 +20030605 00:00,995600,0.47049203279802854 +20030606 00:00,992200,0.4703478491738195 +20030609 00:00,981100,0.46999460768523854 +20030610 00:00,990400,0.4699253413832504 +20030611 00:00,1003300,0.47014174052441104 +20030612 00:00,1005200,0.4700105326526098 +20030613 00:00,994400,0.47059533380356366 +20030616 00:00,1016600,0.47149873214553534 +20030617 00:00,1016800,0.470648741068326 +20030618 00:00,1015400,0.47064496749256635 +20030619 00:00,1000200,0.4690310064193704 +20030620 00:00,997500,0.4654197768569914 +20030623 00:00,983600,0.4598869075824044 +20030624 00:00,986500,0.4525756625589673 +20030625 00:00,978000,0.4456756137257201 +20030626 00:00,988900,0.43873658108895053 +20030627 00:00,978600,0.4301420330821925 +20030630 00:00,976900,0.42254538174049844 +20030701 00:00,985600,0.4161059935321177 +20030702 00:00,996300,0.4131411252986047 +20030703 00:00,988000,0.4092419717813057 +20030707 00:00,1007500,0.405581869681141 +20030708 00:00,1010200,0.4034317723210549 +20030709 00:00,1005500,0.4008593811719145 +20030710 00:00,992100,0.399584525966152 +20030711 00:00,1001400,0.4002589835406623 +20030714 00:00,1007200,0.40276217546844084 +20030715 00:00,1003800,0.40776925456226937 +20030716 00:00,997600,0.414090743888227 +20030717 00:00,985100,0.4258131944205883 +20030718 00:00,995800,0.4340778278417491 +20030721 00:00,982400,0.43510555025478675 +20030722 00:00,991200,0.4339220923781075 +20030723 00:00,992300,0.43631491939185063 +20030724 00:00,985000,0.43630396695050033 +20030725 00:00,1002300,0.43943942300760863 +20030728 00:00,1000400,0.4403840528568109 +20030729 00:00,993200,0.441314437614836 +20030730 00:00,991100,0.4443406443447556 +20030731 00:00,994100,0.45168423356957627 +20030801 00:00,983800,0.4536139175021087 +20030804 00:00,987200,0.45201195201680655 +20030805 00:00,968500,0.45561928257399464 +20030806 00:00,971000,0.45855086245307247 +20030807 00:00,978800,0.4600837004114564 +20030808 00:00,982200,0.4604050065947054 +20030811 00:00,985100,0.46154342882143695 +20030812 00:00,995400,0.46259759013456125 +20030813 00:00,988900,0.4699789589653871 +20030814 00:00,995400,0.4705190944278114 +20030815 00:00,995400,0.47042124105898153 +20030818 00:00,1005000,0.4700566311953115 +20030819 00:00,1008200,0.46720170522384397 +20030820 00:00,1005000,0.46618743896178744 +20030821 00:00,1009100,0.46348624490496687 +20030822 00:00,997700,0.46070407534465413 +20030825 00:00,998200,0.4576304637198813 +20030826 00:00,1001800,0.45533140502283403 +20030827 00:00,1002400,0.4524488812128432 +20030828 00:00,1008500,0.45013023610521136 +20030829 00:00,1014000,0.4488219770607041 +20030902 00:00,1027700,0.44456765644631485 +20030903 00:00,1031900,0.4429150169383276 +20030904 00:00,1034300,0.43941471886321315 +20030905 00:00,1026700,0.4384405811623186 +20030908 00:00,1038000,0.4345053268329709 +20030909 00:00,1029300,0.42802100530941795 +20030910 00:00,1016900,0.41982413922335654 +20030911 00:00,1022500,0.4114575788214976 +20030912 00:00,1025200,0.404856816988657 +20030915 00:00,1021200,0.39977063664916185 +20030916 00:00,1035500,0.39747751220431293 +20030917 00:00,1032200,0.3970868307335868 +20030918 00:00,1045900,0.3975734477435324 +20030919 00:00,1038600,0.39724951489295696 +20030922 00:00,1024900,0.396581096205821 +20030923 00:00,1030900,0.3956435139131449 +20030924 00:00,1012000,0.3945438285967613 +20030925 00:00,1005900,0.3929074372863557 +20030926 00:00,1000200,0.39684328059488655 +20030929 00:00,1008700,0.39625382416806404 +20030930 00:00,998600,0.39403960193903736 +20031001 00:00,1020000,0.4003642194453275 +20031002 00:00,1023200,0.4013505752289999 +20031003 00:00,1032600,0.39981450798491636 +20031006 00:00,1037200,0.3938108699281065 +20031007 00:00,1041900,0.3871564032278085 +20031008 00:00,1037100,0.3834685059602341 +20031009 00:00,1041700,0.38838855036984565 +20031010 00:00,1042000,0.39230873263466537 +20031013 00:00,1048600,0.395214054326334 +20031014 00:00,1052900,0.39668850895988134 +20031015 00:00,1050200,0.397125150314807 +20031016 00:00,1053300,0.40004138501384756 +20031017 00:00,1042300,0.40085731873975283 +20031020 00:00,1047800,0.40145864090675915 +20031021 00:00,1049600,0.40248352243360414 +20031022 00:00,1034000,0.40171426955410683 +20031023 00:00,1037400,0.40136337952135803 +20031024 00:00,1032800,0.40067303662085524 +20031027 00:00,1034400,0.4008527138468529 +20031028 00:00,1050200,0.40026551455587017 +20031029 00:00,1052500,0.3996718737606057 +20031030 00:00,1050900,0.39960035019953727 +20031031 00:00,1054200,0.4006348311004959 +20031103 00:00,1063200,0.40047977235922677 +20031104 00:00,1057800,0.4013159583729495 +20031105 00:00,1056300,0.4037716892578071 +20031106 00:00,1062600,0.40979589774239117 +20031107 00:00,1058100,0.41159296304275916 +20031110 00:00,1051800,0.41125326508557447 +20031111 00:00,1050800,0.4113106142257134 +20031112 00:00,1063800,0.4126381284042634 +20031113 00:00,1063500,0.41473848247549716 +20031114 00:00,1055400,0.4149553346112927 +20031117 00:00,1048600,0.41471259975001185 +20031118 00:00,1039100,0.41543669229397906 +20031119 00:00,1047800,0.4201393403752404 +20031120 00:00,1039000,0.42008134582979806 +20031121 00:00,1040400,0.41798403366477377 +20031124 00:00,1057200,0.4156052821478034 +20031125 00:00,1060100,0.4117486742720512 +20031126 00:00,1064000,0.41079814180116553 +20031128 00:00,1065400,0.4074150783650476 +20031201 00:00,1075700,0.4040638032109565 +20031202 00:00,1072700,0.40187384594591685 +20031203 00:00,1071100,0.4004594644770274 +20031204 00:00,1076800,0.3995991333711271 +20031205 00:00,1068100,0.3991499145538435 +20031208 00:00,1075200,0.3988217981599648 +20031209 00:00,1066200,0.39878510915067195 +20031210 00:00,1065400,0.39832253130750245 +20031211 00:00,1078400,0.39895168591300567 +20031212 00:00,1081300,0.39906210959612964 +20031215 00:00,1075200,0.3991343041813177 +20031216 00:00,1081700,0.4023325184513202 +20031217 00:00,1083400,0.4044311370334552 +20031218 00:00,1096000,0.4043064688693114 +20031219 00:00,1090400,0.40435432413309313 +20031222 00:00,1094600,0.4048613106738446 +20031223 00:00,1097900,0.40598594374349894 +20031224 00:00,1095800,0.40680997007597336 +20031226 00:00,1096700,0.4069934893240492 +20031229 00:00,1111500,0.40960973074402685 +20031230 00:00,1111700,0.41416231201614123 +20031231 00:00,1111500,0.4200845945430117 +20040102 00:00,1110000,0.41715406312181114 +20040105 00:00,1123700,0.4137116511090816 +20040106 00:00,1126300,0.4058785094864769 +20040107 00:00,1129000,0.39766218181932395 +20040108 00:00,1133200,0.3928843693433323 +20040109 00:00,1125100,0.38141498577615696 +20040112 00:00,1131100,0.36970129388513934 +20040113 00:00,1124700,0.35701222022277707 +20040114 00:00,1133100,0.34432769413539704 +20040115 00:00,1135300,0.33267201750555525 +20040116 00:00,1142500,0.3231911104947508 +20040120 00:00,1142100,0.3156910012381875 +20040121 00:00,1150600,0.31035379154571585 +20040122 00:00,1147300,0.3069312070101045 +20040123 00:00,1143600,0.30529029721388984 +20040126 00:00,1158000,0.3027985729966101 +20040127 00:00,1147000,0.30183236937471347 +20040128 00:00,1132300,0.29614679197963106 +20040129 00:00,1137500,0.29148308071295637 +20040130 00:00,1134400,0.28949243618686193 +20040202 00:00,1138300,0.2878291566107029 +20040203 00:00,1139500,0.28722725128144333 +20040204 00:00,1130300,0.2867954977868908 +20040205 00:00,1132600,0.2866462030843548 +20040206 00:00,1146600,0.2855043247262497 +20040209 00:00,1143400,0.2847293537670333 +20040210 00:00,1149000,0.2831872131435027 +20040211 00:00,1161900,0.2795458855439995 +20040212 00:00,1156700,0.2802178001552094 +20040213 00:00,1151200,0.2833526632650929 +20040217 00:00,1161400,0.2808265935803238 +20040218 00:00,1156600,0.27805238726679593 +20040219 00:00,1152200,0.2759419492120124 +20040220 00:00,1150000,0.2744358475111804 +20040223 00:00,1145500,0.2740118571492461 +20040224 00:00,1144500,0.2728265457464601 +20040225 00:00,1149100,0.2724325273864639 +20040226 00:00,1150400,0.2715939503734513 +20040227 00:00,1150800,0.2725538948531793 +20040301 00:00,1160700,0.2752904507735151 +20040302 00:00,1154900,0.2767403086452971 +20040303 00:00,1157000,0.27621980019775105 +20040304 00:00,1160500,0.27807866118739377 +20040305 00:00,1162900,0.27906940240278977 +20040308 00:00,1152700,0.2830225345525563 +20040309 00:00,1146600,0.282788802565141 +20040310 00:00,1129800,0.2869577926187593 +20040311 00:00,1113500,0.2938958895664111 +20040312 00:00,1126900,0.30168649564802513 +20040315 00:00,1110300,0.3128379586029141 +20040316 00:00,1117300,0.3180870218484271 +20040317 00:00,1130000,0.32111757997455587 +20040318 00:00,1129100,0.32480896603296283 +20040319 00:00,1112900,0.3318426197516974 +20040322 00:00,1097400,0.34087274192682265 +20040323 00:00,1096500,0.34838133984222064 +20040324 00:00,1094100,0.3590299806829111 +20040325 00:00,1111100,0.36632205108119026 +20040326 00:00,1111700,0.37335910818857554 +20040329 00:00,1124900,0.3744010725165093 +20040330 00:00,1129700,0.3761360163519722 +20040331 00:00,1128800,0.3765381219179557 +20040401 00:00,1134900,0.3768806117903196 +20040402 00:00,1144400,0.3746652659192817 +20040405 00:00,1153300,0.3718036958737588 +20040406 00:00,1150800,0.371054120798304 +20040407 00:00,1144900,0.36984575382158047 +20040408 00:00,1142300,0.36726223710351075 +20040412 00:00,1148800,0.36648107175114314 +20040413 00:00,1133100,0.36370785759665847 +20040414 00:00,1131900,0.3605102236622644 +20040415 00:00,1131700,0.35842417611931826 +20040416 00:00,1137200,0.3581387419146296 +20040419 00:00,1138900,0.3583881965971341 +20040420 00:00,1121400,0.3573778230681812 +20040421 00:00,1128100,0.35693678914286514 +20040422 00:00,1144400,0.3573609702086613 +20040423 00:00,1144400,0.35601223958516437 +20040426 00:00,1139100,0.3570274078019959 +20040427 00:00,1142200,0.3569122754134164 +20040428 00:00,1125800,0.35675778798208835 +20040429 00:00,1118400,0.3561037552355608 +20040430 00:00,1111300,0.35615367031445005 +20040503 00:00,1121400,0.35755151748479846 +20040504 00:00,1123600,0.35851568811887 +20040505 00:00,1125800,0.3597410609147631 +20040506 00:00,1118500,0.3603758627847321 +20040507 00:00,1103000,0.3609538498364763 +20040510 00:00,1091300,0.3596203273470227 +20040511 00:00,1100100,0.36180764267018106 +20040512 00:00,1103000,0.3636515796481189 +20040513 00:00,1101500,0.3655858659101678 +20040514 00:00,1100200,0.3717374419249682 +20040517 00:00,1088500,0.37632445053483565 +20040518 00:00,1097000,0.3726602760118826 +20040519 00:00,1094100,0.3696743090043419 +20040520 00:00,1095200,0.36796241760372056 +20040521 00:00,1099300,0.367038174789377 +20040524 00:00,1100900,0.36651634081337425 +20040525 00:00,1119200,0.3623615466755667 +20040526 00:00,1120900,0.359114391661461 +20040527 00:00,1127200,0.35802415416225664 +20040528 00:00,1127100,0.35769410471267343 +20040601 00:00,1126800,0.3593251938791091 +20040602 00:00,1131200,0.36094638181790595 +20040603 00:00,1122500,0.3610664976821575 +20040604 00:00,1129000,0.3622471278018869 +20040607 00:00,1146500,0.3632903546154395 +20040608 00:00,1148500,0.3678243812117517 +20040609 00:00,1137700,0.37057894534828656 +20040610 00:00,1143000,0.37267528930341876 +20040614 00:00,1131900,0.3729817795672346 +20040615 00:00,1139500,0.37667587646149786 +20040616 00:00,1139900,0.3792455752572123 +20040617 00:00,1138600,0.38340569833319293 +20040618 00:00,1137100,0.388301166129321 +20040621 00:00,1133100,0.390423999997583 +20040622 00:00,1137900,0.3922412263085118 +20040623 00:00,1147000,0.39223616919768417 +20040624 00:00,1144400,0.39234970958944926 +20040625 00:00,1141300,0.39245542761982505 +20040628 00:00,1136800,0.3926785576103564 +20040629 00:00,1139900,0.39382445089600987 +20040630 00:00,1144500,0.39643070585746654 +20040701 00:00,1132000,0.3975301473392928 +20040702 00:00,1128000,0.39679511424710795 +20040706 00:00,1119600,0.3976363680952978 +20040707 00:00,1121400,0.39707093594717624 +20040708 00:00,1112200,0.3969519823503672 +20040709 00:00,1116400,0.3963588443445593 +20040712 00:00,1117800,0.3977672654757753 +20040713 00:00,1118900,0.3980347620445661 +20040714 00:00,1114900,0.39976076928304455 +20040715 00:00,1110400,0.40246720711552036 +20040716 00:00,1105300,0.40459014310275504 +20040719 00:00,1104500,0.40753641502387183 +20040720 00:00,1112500,0.40946289787992995 +20040721 00:00,1097900,0.414042239439367 +20040722 00:00,1100100,0.4175203404882553 +20040723 00:00,1089200,0.42131718069381185 +20040726 00:00,1088500,0.42548838578060344 +20040727 00:00,1098800,0.4291533386735999 +20040728 00:00,1100300,0.4323760738313159 +20040729 00:00,1105500,0.43405337168863956 +20040730 00:00,1106700,0.43561768944000506 +20040802 00:00,1111000,0.43770551683607495 +20040803 00:00,1103800,0.4392679976740763 +20040804 00:00,1102800,0.44042170353714644 +20040805 00:00,1085200,0.4379212337202226 +20040806 00:00,1068300,0.4312170723393829 +20040809 00:00,1070100,0.42813959728190204 +20040810 00:00,1083600,0.4268376288326769 +20040811 00:00,1080900,0.425632243951692 +20040812 00:00,1068500,0.42562181440518915 +20040813 00:00,1070700,0.4260044582186465 +20040816 00:00,1085300,0.4251274957568939 +20040817 00:00,1087100,0.4238425160313541 +20040818 00:00,1100800,0.41999424602255586 +20040819 00:00,1096100,0.41873287246020363 +20040820 00:00,1104400,0.416643568495363 +20040823 00:00,1102200,0.4160517372406891 +20040824 00:00,1101900,0.41511416023487935 +20040825 00:00,1111200,0.4146344690800703 +20040826 00:00,1111600,0.4153666229707771 +20040827 00:00,1114600,0.4179185586022578 +20040830 00:00,1105800,0.42082217772068453 +20040831 00:00,1110700,0.42355617554970454 +20040901 00:00,1113100,0.4243166837766497 +20040902 00:00,1125500,0.42526165177039993 +20040903 00:00,1120900,0.42651987723534657 +20040907 00:00,1128100,0.42827322354377834 +20040908 00:00,1123500,0.43099852919241155 +20040909 00:00,1125000,0.4324567462612014 +20040910 00:00,1130900,0.43499888177248647 +20040913 00:00,1132900,0.4368547999818814 +20040914 00:00,1136100,0.4386297111130636 +20040915 00:00,1127400,0.44039542227022144 +20040916 00:00,1131000,0.4418123695237224 +20040917 00:00,1131100,0.44331986598765927 +20040920 00:00,1125200,0.4485392518949246 +20040921 00:00,1132400,0.4533602386994369 +20040922 00:00,1116300,0.4541389491099306 +20040923 00:00,1111400,0.45648059426013154 +20040924 00:00,1113500,0.4548359843036387 +20040927 00:00,1106700,0.4526155980082966 +20040928 00:00,1113500,0.452411906973412 +20040929 00:00,1117400,0.4529093688403138 +20040930 00:00,1117400,0.45759099193643865 +20041001 00:00,1134900,0.4558948373926424 +20041004 00:00,1138500,0.45364283134527705 +20041005 00:00,1138300,0.452133062188053 +20041006 00:00,1145600,0.45027952462140935 +20041007 00:00,1133800,0.44980609048194464 +20041008 00:00,1125800,0.44831831484705 +20041011 00:00,1128700,0.4478036012850383 +20041012 00:00,1125300,0.44753964283837094 +20041013 00:00,1116700,0.4460931320177815 +20041014 00:00,1107000,0.443592663631756 +20041015 00:00,1111700,0.4431615737356601 +20041018 00:00,1118000,0.4436089191826884 +20041019 00:00,1107200,0.44368583095713776 +20041020 00:00,1107100,0.44469299796657735 +20041021 00:00,1110400,0.4462893649564573 +20041022 00:00,1099500,0.4471056038790801 +20041025 00:00,1098700,0.44848284220452034 +20041026 00:00,1114000,0.45071020099306003 +20041027 00:00,1129700,0.44775949182271735 +20041028 00:00,1131700,0.4438001397832831 +20041029 00:00,1133800,0.44130098779102994 +20041101 00:00,1134900,0.4402946031959754 +20041102 00:00,1135000,0.4395233548029319 +20041103 00:00,1147700,0.4383803366914821 +20041104 00:00,1165500,0.4345003384920841 +20041105 00:00,1171000,0.43243215748953073 +20041108 00:00,1170000,0.43454588166361 +20041109 00:00,1170000,0.4379970888461961 +20041110 00:00,1169400,0.44242364052414357 +20041111 00:00,1179900,0.4483334792586989 +20041112 00:00,1189100,0.45590195628663865 +20041115 00:00,1186700,0.46486714549383895 +20041116 00:00,1177600,0.47083463296205885 +20041117 00:00,1184000,0.4761602964426654 +20041118 00:00,1186600,0.480732404376183 +20041119 00:00,1173200,0.4825476074492387 +20041122 00:00,1179500,0.48611569237605856 +20041123 00:00,1179700,0.48928025498288685 +20041124 00:00,1185400,0.4907368156651465 +20041126 00:00,1184000,0.4918955103842551 +20041129 00:00,1181300,0.492652005862597 +20041130 00:00,1177700,0.49232771009466647 +20041201 00:00,1194700,0.49231059357529994 +20041202 00:00,1193800,0.4911849826266715 +20041203 00:00,1194300,0.4900790222645795 +20041206 00:00,1193400,0.4895589492032785 +20041207 00:00,1180700,0.4866615499420487 +20041208 00:00,1186200,0.48497767508919815 +20041209 00:00,1193000,0.4825464565287959 +20041210 00:00,1191700,0.4802702518519654 +20041213 00:00,1202900,0.47752039540782465 +20041214 00:00,1208000,0.4744923584475706 +20041215 00:00,1209700,0.47219253133256633 +20041216 00:00,1207000,0.4707049868531139 +20041217 00:00,1194200,0.4674021429772401 +20041220 00:00,1192700,0.46440961248177615 +20041221 00:00,1204000,0.4623709390441705 +20041222 00:00,1209100,0.4599798092946844 +20041223 00:00,1209900,0.4583434915753169 +20041227 00:00,1204200,0.4571988739236617 +20041228 00:00,1212500,0.45642330174933543 +20041229 00:00,1212700,0.4556812868288672 +20041230 00:00,1212300,0.4552993139488374 +20041231 00:00,1210400,0.455552336354296 +20050103 00:00,1200600,0.4553389733408691 +20050104 00:00,1187400,0.45144787517957824 +20050105 00:00,1183200,0.4479563095725735 +20050106 00:00,1187100,0.44682266824287786 +20050107 00:00,1185600,0.44653629181230853 +20050110 00:00,1189400,0.4469344167611488 +20050111 00:00,1182900,0.44784240924294394 +20050112 00:00,1188000,0.44969095354812444 +20050113 00:00,1176800,0.45132115593200706 +20050114 00:00,1184200,0.452788524482838 +20050118 00:00,1195700,0.4519898964780577 +20050119 00:00,1184000,0.4531605740873205 +20050120 00:00,1175700,0.45409975747333237 +20050121 00:00,1168000,0.455000403111448 +20050124 00:00,1164200,0.45594191612626245 +20050125 00:00,1168700,0.46088412262213657 +20050126 00:00,1174100,0.4625854328493216 +20050127 00:00,1174600,0.4630951312646129 +20050128 00:00,1171300,0.4640124998737122 +20050131 00:00,1180700,0.46383794570809506 +20050201 00:00,1189100,0.46226433360046415 +20050202 00:00,1193400,0.4606101283668211 +20050203 00:00,1190500,0.4613258794617885 +20050204 00:00,1203300,0.46109012631748575 +20050207 00:00,1202300,0.460624560341717 +20050208 00:00,1203400,0.4618043210228978 +20050209 00:00,1193000,0.4617194636271456 +20050210 00:00,1198300,0.461788314945406 +20050211 00:00,1207200,0.46166855135462065 +20050214 00:00,1207800,0.46149671031400286 +20050215 00:00,1212000,0.46157095406041376 +20050216 00:00,1211900,0.4619201228053138 +20050217 00:00,1202900,0.4614920403824699 +20050218 00:00,1203500,0.4607568304491817 +20050222 00:00,1186700,0.4566685775725914 +20050223 00:00,1193300,0.45427943168880247 +20050224 00:00,1202600,0.45113848522675404 +20050225 00:00,1213800,0.44672993793688337 +20050228 00:00,1205400,0.443307343731068 +20050301 00:00,1213000,0.4384483204788672 +20050302 00:00,1212900,0.4351046586994116 +20050303 00:00,1213600,0.4326731516243029 +20050304 00:00,1225600,0.4313656578967382 +20050307 00:00,1227800,0.43351693702135097 +20050308 00:00,1222000,0.4379568727640033 +20050309 00:00,1210100,0.4417888008042727 +20050310 00:00,1212000,0.4416692000695828 +20050311 00:00,1204100,0.43979081811008003 +20050314 00:00,1210400,0.44029437656054304 +20050315 00:00,1201700,0.44016102380712663 +20050316 00:00,1191800,0.438703867361872 +20050317 00:00,1194100,0.4425610477144033 +20050318 00:00,1188100,0.4484308834637406 +20050321 00:00,1182600,0.44870953376369804 +20050322 00:00,1171300,0.4471547267468265 +20050323 00:00,1170600,0.4490071427214891 +20050324 00:00,1171400,0.4545588246609957 +20050328 00:00,1173600,0.45923836694008013 +20050329 00:00,1164200,0.46597790594340766 +20050330 00:00,1181200,0.46909988245620354 +20050331 00:00,1179500,0.4720065999441082 +20050401 00:00,1172200,0.47737305307018885 +20050404 00:00,1175900,0.4812379083662893 +20050405 00:00,1180900,0.4820465217662786 +20050406 00:00,1184000,0.4820894800715852 +20050407 00:00,1191500,0.480907369397233 +20050408 00:00,1181000,0.48132061026896705 +20050411 00:00,1181800,0.48114171455788646 +20050412 00:00,1187600,0.4809752897614574 +20050413 00:00,1174200,0.47975301210492827 +20050414 00:00,1162700,0.4758363075180687 +20050415 00:00,1142800,0.467177668394993 +20050418 00:00,1146100,0.462380400208868 +20050419 00:00,1152900,0.4590416896493274 +20050420 00:00,1138200,0.4605084269249155 +20050421 00:00,1159900,0.4595793179253266 +20050422 00:00,1152800,0.4569001079994781 +20050425 00:00,1162700,0.45403531695268096 +20050426 00:00,1152200,0.4542364079592892 +20050427 00:00,1156800,0.4560849311564753 +20050428 00:00,1144000,0.4573749071103859 +20050429 00:00,1157000,0.45822222458009304 +20050502 00:00,1163300,0.45836549939800164 +20050503 00:00,1162500,0.45929304060010867 +20050504 00:00,1176200,0.45944113431081157 +20050505 00:00,1173600,0.4635846414572896 +20050506 00:00,1172000,0.46733485097969224 +20050509 00:00,1180100,0.46650137305464445 +20050510 00:00,1166900,0.46483880435259295 +20050511 00:00,1172000,0.46361780639989975 +20050512 00:00,1160900,0.4616525331437089 +20050513 00:00,1156000,0.45867023244010896 +20050516 00:00,1167900,0.4569876827491389 +20050517 00:00,1175900,0.45326219690859954 +20050518 00:00,1187900,0.4493244222513816 +20050519 00:00,1193800,0.44583595176439816 +20050520 00:00,1191500,0.4454148314368768 +20050523 00:00,1196500,0.44694327733162953 +20050524 00:00,1196500,0.4494817416267366 +20050525 00:00,1193200,0.45042133080451885 +20050526 00:00,1200500,0.4519800057832658 +20050527 00:00,1201800,0.4533332349515584 +20050531 00:00,1194500,0.4543437330376399 +20050601 00:00,1205400,0.45644634619368624 +20050602 00:00,1207100,0.4582425233467063 +20050603 00:00,1199400,0.46229052618941013 +20050606 00:00,1201400,0.4647786744339199 +20050607 00:00,1200700,0.46582704120130985 +20050608 00:00,1198500,0.4664572383653884 +20050609 00:00,1204900,0.4672102798887821 +20050610 00:00,1202100,0.46725767467425067 +20050613 00:00,1204900,0.4678529509423129 +20050614 00:00,1208200,0.4672436305488693 +20050615 00:00,1210600,0.4662396047387364 +20050616 00:00,1214800,0.46489510562119185 +20050617 00:00,1216000,0.4635269932670099 +20050620 00:00,1215000,0.46332576036694806 +20050621 00:00,1213000,0.46161362835038366 +20050622 00:00,1213700,0.4589634909243272 +20050623 00:00,1200000,0.4545480617861692 +20050624 00:00,1190900,0.4478109963775549 +20050627 00:00,1190400,0.44320463038326907 +20050628 00:00,1201800,0.4402143934202614 +20050629 00:00,1199400,0.4388029117561883 +20050630 00:00,1190600,0.4373465955177008 +20050701 00:00,1195000,0.4363523267352585 +20050705 00:00,1204800,0.43478579713203164 +20050706 00:00,1194900,0.4343403379880317 +20050707 00:00,1197700,0.4340468394440987 +20050708 00:00,1212200,0.43113118031755765 +20050711 00:00,1220200,0.4260222099902483 +20050712 00:00,1222200,0.42232336762701717 +20050713 00:00,1223400,0.41968005386746443 +20050714 00:00,1227400,0.41710887281750675 +20050715 00:00,1227700,0.4153006694818845 +20050718 00:00,1222000,0.4138712018537642 +20050719 00:00,1230000,0.41374700127382996 +20050720 00:00,1235400,0.4137114569738565 +20050721 00:00,1227000,0.4137131273430337 +20050722 00:00,1234300,0.4156533078097317 +20050725 00:00,1229300,0.4177041782063538 +20050726 00:00,1232300,0.4186853462915242 +20050727 00:00,1237900,0.420096048002073 +20050728 00:00,1245000,0.42197563638351765 +20050729 00:00,1235600,0.4250021891799985 +20050801 00:00,1235500,0.43042095195277397 +20050802 00:00,1244600,0.4372634781110062 +20050803 00:00,1246400,0.4461323512689004 +20050804 00:00,1236600,0.44683196481223375 +20050805 00:00,1227700,0.44310305706385794 +20050808 00:00,1224200,0.4388058513674934 +20050809 00:00,1233400,0.43849094914075 +20050810 00:00,1231200,0.43716263068549144 +20050811 00:00,1239700,0.436125388789246 +20050812 00:00,1232400,0.4362375390439456 +20050815 00:00,1236500,0.43552318657043126 +20050816 00:00,1221300,0.4339357813658251 +20050817 00:00,1222900,0.43255559240222996 +20050818 00:00,1221100,0.4316943916605907 +20050819 00:00,1222700,0.4317129156180393 +20050822 00:00,1224700,0.43200114259255085 +20050823 00:00,1220500,0.43289538763660557 +20050824 00:00,1212400,0.43368571136646544 +20050825 00:00,1215300,0.43499468214615955 +20050826 00:00,1208200,0.43636728283765464 +20050829 00:00,1216000,0.4388673472161096 +20050830 00:00,1211800,0.44173503695951977 +20050831 00:00,1223900,0.44241401325609564 +20050901 00:00,1225400,0.4412654168900633 +20050902 00:00,1221300,0.44146857935876416 +20050906 00:00,1237500,0.439176191370546 +20050907 00:00,1240200,0.4368342053222892 +20050908 00:00,1235800,0.43629042640543547 +20050909 00:00,1244800,0.4353347961625032 +20050912 00:00,1244300,0.4350948552201046 +20050913 00:00,1235500,0.43519422160495563 +20050914 00:00,1231800,0.43436708728726825 +20050915 00:00,1232200,0.43438992631617085 +20050916 00:00,1237000,0.43539773546167015 +20050919 00:00,1229600,0.435903607801968 +20050920 00:00,1221000,0.43655367161830033 +20050921 00:00,1208900,0.4321062402995166 +20050922 00:00,1214400,0.4308434569553007 +20050923 00:00,1215600,0.430538257260164 +20050926 00:00,1214700,0.4328453281423362 +20050927 00:00,1215000,0.4351046912344528 +20050928 00:00,1216800,0.43803789849063995 +20050929 00:00,1228100,0.4399358255685874 +20050930 00:00,1228200,0.43820758427733725 +20051003 00:00,1226800,0.437616043531429 +20051004 00:00,1213800,0.4381951392235041 +20051005 00:00,1196300,0.4380217115137215 +20051006 00:00,1191500,0.43677575459872253 +20051007 00:00,1196700,0.4377850662426435 +20051010 00:00,1187700,0.4406315837647452 +20051011 00:00,1185400,0.44325489916897315 +20051012 00:00,1178500,0.4434631345738071 +20051013 00:00,1177700,0.4421457829635606 +20051014 00:00,1187500,0.43981114704184116 +20051017 00:00,1190700,0.4375129557114372 +20051018 00:00,1179000,0.4333972765369236 +20051019 00:00,1196400,0.4263519468046276 +20051020 00:00,1177200,0.4224655169160579 +20051021 00:00,1180200,0.41734284469006866 +20051024 00:00,1200400,0.4113633080608916 +20051025 00:00,1197400,0.40533815848822907 +20051026 00:00,1192400,0.40185140626940535 +20051027 00:00,1179700,0.3991186216563552 +20051028 00:00,1199000,0.3975631608867801 +20051031 00:00,1207100,0.395508941570265 +20051101 00:00,1203000,0.39847175906868815 +20051102 00:00,1216300,0.3987946330766084 +20051103 00:00,1221500,0.3973207700356042 +20051104 00:00,1221100,0.3977838176257425 +20051107 00:00,1224400,0.3997954536650815 +20051108 00:00,1220700,0.40278920742792795 +20051109 00:00,1222500,0.40689692074577827 +20051110 00:00,1233500,0.4103207948402126 +20051111 00:00,1236500,0.41429101200701396 +20051114 00:00,1236700,0.41824770183368243 +20051115 00:00,1231600,0.4211289995985986 +20051116 00:00,1234700,0.42462533618602544 +20051117 00:00,1245300,0.4288962792887269 +20051118 00:00,1250900,0.43185519529970096 +20051121 00:00,1257800,0.4347550026135496 +20051122 00:00,1263700,0.4381682404117505 +20051123 00:00,1268800,0.4425552846298828 +20051125 00:00,1270500,0.4473674727364385 +20051128 00:00,1261500,0.4506507763871514 +20051129 00:00,1261200,0.4533839256837405 +20051130 00:00,1253300,0.4538775576875906 +20051201 00:00,1269100,0.4568568909706893 +20051202 00:00,1268700,0.4593552056781118 +20051205 00:00,1266400,0.4612599407500504 +20051206 00:00,1267300,0.4640924640453716 +20051207 00:00,1261500,0.4658664846509469 +20051208 00:00,1260300,0.46695190010407406 +20051209 00:00,1264100,0.46905218696149403 +20051212 00:00,1265000,0.4693466981052231 +20051213 00:00,1271700,0.46944146403688297 +20051214 00:00,1277600,0.46941395966453514 +20051215 00:00,1275300,0.46911885387207747 +20051216 00:00,1266000,0.469404192596969 +20051219 00:00,1257800,0.4690257548717988 +20051220 00:00,1257700,0.46685814459927943 +20051221 00:00,1261200,0.4647472611344348 +20051222 00:00,1266600,0.46216853185580575 +20051223 00:00,1267500,0.46043977976183464 +20051227 00:00,1255100,0.45789875967681404 +20051228 00:00,1256100,0.4561021419484696 +20051229 00:00,1253100,0.4559626976153216 +20051230 00:00,1245500,0.4572567478514695 +20060103 00:00,1267500,0.4565889428374885 +20060104 00:00,1272700,0.45245232642202854 +20060105 00:00,1272300,0.45041300984830906 +20060106 00:00,1284100,0.4472240602041209 +20060109 00:00,1289200,0.4441340407714647 +20060110 00:00,1288800,0.44310137697204377 +20060111 00:00,1293500,0.442695336001116 +20060112 00:00,1285900,0.44332920995665176 +20060113 00:00,1287200,0.4445438161361339 +20060117 00:00,1282500,0.44531607903407344 +20060118 00:00,1277900,0.4497588697301147 +20060119 00:00,1283700,0.45220849985240935 +20060120 00:00,1261200,0.4479178758036385 +20060123 00:00,1263300,0.4428999961458585 +20060124 00:00,1266200,0.4404021959244617 +20060125 00:00,1264700,0.43897377991819925 +20060126 00:00,1274100,0.4384026772926684 +20060127 00:00,1283100,0.43693436963979027 +20060130 00:00,1285300,0.4373833956055901 +20060131 00:00,1279500,0.4380408752657149 +20060201 00:00,1282300,0.4380138640762705 +20060202 00:00,1271100,0.4380830988708539 +20060203 00:00,1264100,0.4372332887716388 +20060206 00:00,1265600,0.43717280128230246 +20060207 00:00,1255700,0.4370491988436849 +20060208 00:00,1266300,0.43754861691189156 +20060209 00:00,1265000,0.43872260767202886 +20060210 00:00,1268200,0.4392601863712973 +20060213 00:00,1264600,0.43995292707080835 +20060214 00:00,1277100,0.43960397805788753 +20060215 00:00,1281400,0.43911709375308655 +20060216 00:00,1290800,0.43814991830889466 +20060217 00:00,1288800,0.438087087725272 +20060221 00:00,1285200,0.4378261452462551 +20060222 00:00,1294300,0.44041590682768006 +20060223 00:00,1290100,0.44259325974372615 +20060224 00:00,1292300,0.44221405459011376 +20060227 00:00,1296900,0.44001762968987923 +20060228 00:00,1282600,0.43824227105008545 +20060301 00:00,1293900,0.43603466887432474 +20060302 00:00,1292200,0.433825979986289 +20060303 00:00,1289900,0.43108409587040664 +20060306 00:00,1281500,0.4250248047505116 +20060307 00:00,1278600,0.41980084742417667 +20060308 00:00,1281700,0.4159417846186203 +20060309 00:00,1275700,0.41304830774960155 +20060310 00:00,1285200,0.4112787630172109 +20060313 00:00,1288200,0.4099730601611268 +20060314 00:00,1301200,0.4090746297005319 +20060315 00:00,1307700,0.40647769618554824 +20060316 00:00,1310100,0.4046793992254779 +20060317 00:00,1305800,0.4049927211058005 +20060320 00:00,1303900,0.40507034850753415 +20060321 00:00,1295900,0.40335677177952983 +20060322 00:00,1304200,0.4019207124914866 +20060323 00:00,1300800,0.40047045712715046 +20060324 00:00,1301500,0.39916294693157295 +20060327 00:00,1300800,0.3974990410897397 +20060328 00:00,1292200,0.3968612734512187 +20060329 00:00,1302100,0.3943404732792585 +20060330 00:00,1299500,0.39123810262394737 +20060331 00:00,1294900,0.3898143703022636 +20060403 00:00,1296900,0.38823501406698196 +20060404 00:00,1305300,0.38594725924851625 +20060405 00:00,1310500,0.38318332442088965 +20060406 00:00,1308200,0.3824554078228963 +20060407 00:00,1294700,0.3826188512803749 +20060410 00:00,1296000,0.38523874010746256 +20060411 00:00,1286500,0.39346830685472095 +20060412 00:00,1288400,0.4005832291015771 +20060413 00:00,1288600,0.4032784698641305 +20060417 00:00,1285200,0.40393161897615715 +20060418 00:00,1307300,0.40190667634305005 +20060419 00:00,1309900,0.3982122683956985 +20060420 00:00,1311500,0.3965952925610673 +20060421 00:00,1311000,0.39563863558963513 +20060424 00:00,1308300,0.39450659203406235 +20060425 00:00,1302300,0.39441832953677375 +20060426 00:00,1305800,0.3934214578541215 +20060427 00:00,1311600,0.3923226317512526 +20060428 00:00,1311400,0.39266750705871495 +20060501 00:00,1305600,0.3918010813813301 +20060502 00:00,1313800,0.3916064126265968 +20060503 00:00,1308200,0.39086444351842137 +20060504 00:00,1312900,0.39123095781755834 +20060505 00:00,1327100,0.3903173130664278 +20060508 00:00,1325600,0.3898700789247364 +20060509 00:00,1325300,0.39223425508886944 +20060510 00:00,1324300,0.39212689361901976 +20060511 00:00,1307800,0.3900179924714444 +20060512 00:00,1292500,0.381462117268908 +20060515 00:00,1296200,0.380281794913448 +20060516 00:00,1293600,0.3803824349029417 +20060517 00:00,1272000,0.3772752397042636 +20060518 00:00,1263600,0.37294900591918717 +20060519 00:00,1269600,0.37401296714061505 +20060522 00:00,1269800,0.37703343607329093 +20060523 00:00,1259000,0.3825506699954249 +20060524 00:00,1260800,0.3891270445020412 +20060525 00:00,1276300,0.39257636561846776 +20060526 00:00,1283000,0.39293777996570434 +20060530 00:00,1262800,0.39959589005150503 +20060531 00:00,1273000,0.4044520787196297 +20060601 00:00,1288200,0.40370315616318814 +20060602 00:00,1291300,0.40241486735260995 +20060605 00:00,1269000,0.405689143851858 +20060606 00:00,1267500,0.406812885069779 +20060607 00:00,1259100,0.40773667791309753 +20060608 00:00,1261400,0.4091532937343392 +20060609 00:00,1255300,0.4095953485521299 +20060612 00:00,1240000,0.40866027235119684 +20060613 00:00,1227300,0.4059671462291558 +20060614 00:00,1234900,0.40662781193510134 +20060615 00:00,1259700,0.4031256030163047 +20060616 00:00,1250000,0.40282631397661633 +20060619 00:00,1238200,0.4046017747507139 +20060620 00:00,1238800,0.40747876525784854 +20060621 00:00,1251300,0.4099215617978349 +20060622 00:00,1244500,0.4147149713508283 +20060623 00:00,1243900,0.4159012266446626 +20060626 00:00,1250400,0.4152590791297335 +20060627 00:00,1238700,0.41514477378834447 +20060628 00:00,1245800,0.41584253861591225 +20060629 00:00,1272300,0.40931269833367645 +20060630 00:00,1270100,0.40390845695746486 +20060703 00:00,1279000,0.3992553758857906 +20060705 00:00,1270300,0.39793681987777774 +20060706 00:00,1273700,0.3983666012966395 +20060707 00:00,1265300,0.39937105973814463 +20060710 00:00,1267400,0.3997646393330449 +20060711 00:00,1272700,0.40094966003581833 +20060712 00:00,1259600,0.4006342797462624 +20060713 00:00,1242100,0.39500724309248403 +20060714 00:00,1236300,0.3893614873831618 +20060717 00:00,1234300,0.3858964914942214 +20060718 00:00,1236800,0.3850983625465647 +20060719 00:00,1259700,0.38250108012256895 +20060720 00:00,1249600,0.3816884260528389 +20060721 00:00,1241100,0.38167261517407314 +20060724 00:00,1261300,0.3804574852481237 +20060725 00:00,1269700,0.3773763900534629 +20060726 00:00,1269000,0.3758050637727316 +20060727 00:00,1263700,0.3747425415421464 +20060728 00:00,1278500,0.37246234505593706 +20060731 00:00,1276700,0.3713889417315336 +20060801 00:00,1271600,0.3710661046922044 +20060802 00:00,1279100,0.37098507491412347 +20060803 00:00,1281200,0.3719878691025221 +20060804 00:00,1280000,0.37289428437758043 +20060807 00:00,1277600,0.37412472317417067 +20060808 00:00,1273300,0.3753859925101803 +20060809 00:00,1267800,0.3751555880835786 +20060810 00:00,1272800,0.3761293454809552 +20060811 00:00,1268400,0.3772639513123224 +20060814 00:00,1270500,0.37840273434850275 +20060815 00:00,1287100,0.3796072340929676 +20060816 00:00,1297500,0.3771943927427556 +20060817 00:00,1300300,0.376079758526013 +20060818 00:00,1304600,0.3757075816089884 +20060821 00:00,1301100,0.37615467881074394 +20060822 00:00,1301300,0.3774963548870732 +20060823 00:00,1295700,0.377822453359472 +20060824 00:00,1298700,0.3781436160437866 +20060825 00:00,1298400,0.3786120057822566 +20060828 00:00,1304800,0.3803097434834517 +20060829 00:00,1307500,0.3819955563098818 +20060830 00:00,1307400,0.38489751698546715 +20060831 00:00,1307100,0.38658098025381266 +20060901 00:00,1314800,0.3889039395647992 +20060905 00:00,1317200,0.3922928915214898 +20060906 00:00,1304300,0.39190974576105625 +20060907 00:00,1298200,0.38926933450416484 +20060908 00:00,1303000,0.3878493587413004 +20060911 00:00,1303800,0.3858501631585707 +20060912 00:00,1316400,0.3831719507061881 +20060913 00:00,1322500,0.37924811514626405 +20060914 00:00,1320500,0.37601178732548146 +20060915 00:00,1318200,0.3727319539714927 +20060918 00:00,1320200,0.37019157259486385 +20060919 00:00,1317500,0.3677292187495568 +20060920 00:00,1324100,0.36470077200823536 +20060921 00:00,1317000,0.3631955763611852 +20060922 00:00,1313900,0.3600665955490542 +20060925 00:00,1325400,0.35722974593734963 +20060926 00:00,1335400,0.3538860586890574 +20060927 00:00,1336400,0.3516882698609928 +20060928 00:00,1337800,0.3500312952473235 +20060929 00:00,1334800,0.3484094171310767 +20061002 00:00,1330700,0.349139729412264 +20061003 00:00,1334400,0.35349875867728464 +20061004 00:00,1349500,0.356236827998582 +20061005 00:00,1353000,0.35679909597570136 +20061006 00:00,1350300,0.3578323265672618 +20061009 00:00,1350900,0.3600873213345758 +20061010 00:00,1353300,0.36104601295941063 +20061011 00:00,1349900,0.3612144389377232 +20061012 00:00,1362700,0.361506145693202 +20061013 00:00,1365500,0.3612890827451303 +20061016 00:00,1368900,0.3621514959579735 +20061017 00:00,1364500,0.36299666756810023 +20061018 00:00,1365800,0.36183495259722376 +20061019 00:00,1367500,0.3633724070603223 +20061020 00:00,1368600,0.3627203238798556 +20061023 00:00,1376800,0.3610718285033033 +20061024 00:00,1377600,0.3615939394501544 +20061025 00:00,1382000,0.36140124725322953 +20061026 00:00,1388600,0.3592979365960313 +20061027 00:00,1379100,0.3569928098376569 +20061030 00:00,1378700,0.35371760068549785 +20061031 00:00,1377900,0.350822419768947 +20061101 00:00,1368900,0.34654834779202387 +20061102 00:00,1368100,0.34248097137931816 +20061103 00:00,1366000,0.3390439281044756 +20061106 00:00,1380800,0.3362714806865111 +20061107 00:00,1384300,0.3332068072871481 +20061108 00:00,1387400,0.33068048122688326 +20061109 00:00,1380900,0.32896860329227146 +20061110 00:00,1382700,0.3278697924841526 +20061113 00:00,1386800,0.32742031860752047 +20061114 00:00,1395500,0.32684571124142037 +20061115 00:00,1399700,0.327169717992105 +20061116 00:00,1402300,0.32855779127545837 +20061117 00:00,1403900,0.32984830371946133 +20061120 00:00,1403700,0.3312846532442104 +20061121 00:00,1405800,0.33249515197358165 +20061122 00:00,1409200,0.3336380679075048 +20061124 00:00,1404600,0.3348076091982659 +20061127 00:00,1384900,0.33160636835417073 +20061128 00:00,1390300,0.329867210322653 +20061129 00:00,1403600,0.32967933299617586 +20061130 00:00,1404600,0.330315670430612 +20061201 00:00,1400600,0.329421764703622 +20061204 00:00,1413300,0.3286995866008885 +20061205 00:00,1418800,0.3273820563408616 +20061206 00:00,1417500,0.3268320093827368 +20061207 00:00,1412200,0.326617184667729 +20061208 00:00,1414100,0.32683612069179735 +20061211 00:00,1417400,0.3271079615977955 +20061212 00:00,1416200,0.3274250278883159 +20061213 00:00,1418400,0.32786144452049537 +20061214 00:00,1429800,0.3296235113969766 +20061215 00:00,1423800,0.33205962577985776 +20061218 00:00,1419400,0.3322034361460551 +20061219 00:00,1422800,0.33194753473799293 +20061220 00:00,1421300,0.33183811928929585 +20061221 00:00,1416200,0.33151019635828155 +20061222 00:00,1408500,0.3310610624739439 +20061226 00:00,1415400,0.3320686001410932 +20061227 00:00,1425900,0.3318084312574536 +20061228 00:00,1421900,0.33254048875120573 +20061229 00:00,1415200,0.33418685521775543 +20070103 00:00,1414500,0.3393525431222735 +20070104 00:00,1416700,0.34050562564953546 +20070105 00:00,1407600,0.34147609990983335 +20070108 00:00,1411700,0.3431199488419841 +20070109 00:00,1411300,0.34263137041052216 +20070110 00:00,1414000,0.34140645152776683 +20070111 00:00,1422700,0.33934955596705 +20070112 00:00,1429700,0.3363641512186513 +20070116 00:00,1430300,0.33444083590188517 +20070117 00:00,1429400,0.3336637669102569 +20070118 00:00,1424500,0.3336043862150179 +20070119 00:00,1429300,0.3343210482591996 +20070122 00:00,1422100,0.3353461112177138 +20070123 00:00,1427500,0.335687760195897 +20070124 00:00,1439100,0.3356559651360878 +20070125 00:00,1423500,0.3362063017725671 +20070126 00:00,1421900,0.3365696487461804 +20070129 00:00,1419600,0.33611876127615953 +20070130 00:00,1427600,0.3367959585920988 +20070131 00:00,1438100,0.3375850719359614 +20070201 00:00,1445700,0.3376182113974675 +20070202 00:00,1447900,0.3398617658232254 +20070205 00:00,1447000,0.34034803898995136 +20070206 00:00,1447900,0.34016660773073143 +20070207 00:00,1450300,0.3401211117451608 +20070208 00:00,1448800,0.34023737129513115 +20070209 00:00,1439200,0.33940127142760335 +20070212 00:00,1434200,0.3381087154749618 +20070213 00:00,1445100,0.33909466142826866 +20070214 00:00,1456400,0.3407447294801958 +20070215 00:00,1458300,0.340947193584611 +20070216 00:00,1456800,0.34114801314187254 +20070220 00:00,1461000,0.341487424964774 +20070221 00:00,1458900,0.34188013769225023 +20070222 00:00,1458300,0.3423655348863487 +20070223 00:00,1453600,0.3424889227863353 +20070226 00:00,1452100,0.3424459892422015 +20070227 00:00,1400000,0.3256575366832844 +20070228 00:00,1409300,0.31640227012918226 +20070301 00:00,1405900,0.31272824882623557 +20070302 00:00,1389800,0.31333368516664595 +20070305 00:00,1376900,0.31710004683021226 +20070306 00:00,1398000,0.3230837173639851 +20070307 00:00,1394600,0.32967696171980615 +20070308 00:00,1405400,0.3344112080390245 +20070309 00:00,1406200,0.339647022863087 +20070312 00:00,1410100,0.3457832732546493 +20070313 00:00,1381500,0.3567839586649968 +20070314 00:00,1391400,0.3662849175441561 +20070315 00:00,1395700,0.37306341222999423 +20070316 00:00,1384800,0.38093428755397246 +20070319 00:00,1400700,0.385373857277609 +20070320 00:00,1409300,0.38625164082525376 +20070321 00:00,1433300,0.3792719825706735 +20070322 00:00,1433100,0.3750263931337338 +20070323 00:00,1435000,0.3729641966618282 +20070326 00:00,1435900,0.3725297312481858 +20070327 00:00,1427100,0.37266014793539265 +20070328 00:00,1415400,0.37065581332627273 +20070329 00:00,1421200,0.3706104168790062 +20070330 00:00,1419400,0.3707701865549113 +20070402 00:00,1423000,0.37148633623363114 +20070403 00:00,1436600,0.3725801168246603 +20070404 00:00,1437900,0.3737813466929734 +20070405 00:00,1442800,0.37547299111313087 +20070409 00:00,1444200,0.3789034879232472 +20070410 00:00,1448000,0.3826227327236739 +20070411 00:00,1438300,0.3841474231102194 +20070412 00:00,1447400,0.386061503952774 +20070413 00:00,1452600,0.3871660308058571 +20070416 00:00,1467800,0.3880686879131135 +20070417 00:00,1470700,0.3894046654419144 +20070418 00:00,1471500,0.3922337620763949 +20070419 00:00,1470300,0.3929948065677283 +20070420 00:00,1484700,0.394044006052427 +20070423 00:00,1481200,0.3948691299235927 +20070424 00:00,1480400,0.3955200157966814 +20070425 00:00,1494600,0.3969212198363034 +20070426 00:00,1493900,0.3984827974293043 +20070427 00:00,1494000,0.39883463922022655 +20070430 00:00,1482300,0.39607204853395744 +20070501 00:00,1486100,0.39340678483334107 +20070502 00:00,1496200,0.3921980583636359 +20070503 00:00,1502600,0.38916946538750885 +20070504 00:00,1506400,0.388354508803283 +20070507 00:00,1509500,0.3867831016394912 +20070508 00:00,1508600,0.3834836417714289 +20070509 00:00,1513800,0.3817105678976879 +20070510 00:00,1493300,0.37894278027348755 +20070511 00:00,1508100,0.3801451507762659 +20070514 00:00,1505500,0.37910926427203745 +20070515 00:00,1503800,0.37777263834511327 +20070516 00:00,1516100,0.3776686717254885 +20070517 00:00,1514400,0.37691537175441964 +20070518 00:00,1524900,0.3742299448409176 +20070521 00:00,1527100,0.37228183758769606 +20070522 00:00,1526000,0.37003447490025465 +20070523 00:00,1523800,0.3671453128908966 +20070524 00:00,1510100,0.3650116621957367 +20070525 00:00,1518600,0.3639173115947294 +20070529 00:00,1520800,0.3597803277948991 +20070530 00:00,1533700,0.35407693331229645 +20070531 00:00,1533500,0.35328280759395286 +20070601 00:00,1539600,0.3499787997176933 +20070604 00:00,1542400,0.347840425883093 +20070605 00:00,1534400,0.3485262961385503 +20070606 00:00,1521000,0.3463675660986085 +20070607 00:00,1493600,0.3376534995414513 +20070608 00:00,1510500,0.33665332845550017 +20070611 00:00,1513000,0.3386130634100285 +20070612 00:00,1496700,0.3409630147314997 +20070613 00:00,1519500,0.3410386587579873 +20070614 00:00,1527100,0.3405262378169691 +20070615 00:00,1530400,0.33864869903537786 +20070618 00:00,1529000,0.34001610064636245 +20070619 00:00,1532000,0.33948306421613106 +20070620 00:00,1510200,0.3391687286268923 +20070621 00:00,1519800,0.33910593835893105 +20070622 00:00,1502400,0.3387834853673506 +20070625 00:00,1496100,0.33878612146803816 +20070626 00:00,1490700,0.3409908537216888 +20070627 00:00,1505500,0.34374434779293317 +20070628 00:00,1504000,0.3513723409257996 +20070629 00:00,1499800,0.3573821304739499 +20070702 00:00,1518000,0.35569995494077006 +20070703 00:00,1522400,0.35315255610848517 +20070705 00:00,1524300,0.3518047059778952 +20070706 00:00,1529600,0.3511631056405606 +20070709 00:00,1530800,0.35207984690354827 +20070710 00:00,1508900,0.353390829047224 +20070711 00:00,1518400,0.35677003366189985 +20070712 00:00,1547500,0.3604534131042751 +20070713 00:00,1551100,0.36006601178632064 +20070716 00:00,1549000,0.358994428013735 +20070717 00:00,1548600,0.3589765998443025 +20070718 00:00,1545900,0.36054315026058337 +20070719 00:00,1552200,0.3621680578451077 +20070720 00:00,1533300,0.36170552150402824 +20070723 00:00,1540600,0.36187125770886197 +20070724 00:00,1511200,0.35720008951073895 +20070725 00:00,1517500,0.352760776031337 +20070726 00:00,1485500,0.3435705907065648 +20070727 00:00,1460400,0.32965870792903135 +20070730 00:00,1472700,0.3285617041307121 +20070731 00:00,1453900,0.33306600013823956 +20070801 00:00,1466200,0.34040888597813485 +20070802 00:00,1472900,0.3477252332464872 +20070803 00:00,1433500,0.3621253753206556 +20070806 00:00,1467600,0.3726054265650415 +20070807 00:00,1476800,0.3773092264911073 +20070808 00:00,1498600,0.37495178181814776 +20070809 00:00,1457200,0.3868687356685357 +20070810 00:00,1455400,0.3943971252435598 +20070813 00:00,1455100,0.40305442646509554 +20070814 00:00,1427700,0.41296036890144167 +20070815 00:00,1409000,0.4201816044350085 +20070816 00:00,1417300,0.42788326549303235 +20070817 00:00,1447400,0.42941740341381973 +20070820 00:00,1447500,0.42989697715909336 +20070821 00:00,1449500,0.4304546767626207 +20070822 00:00,1466600,0.4280432075789495 +20070823 00:00,1465700,0.4262791448821654 +20070824 00:00,1481600,0.42310433734675373 +20070827 00:00,1469200,0.42266221520607333 +20070828 00:00,1436500,0.4189951056727334 +20070829 00:00,1467100,0.41909361780849946 +20070830 00:00,1461500,0.4184008738388425 +20070831 00:00,1474700,0.41794664340263327 +20070904 00:00,1492000,0.41590701556517107 +20070905 00:00,1475500,0.41695932665838736 +20070906 00:00,1482600,0.41850328230273426 +20070907 00:00,1458400,0.41656447204878905 +20070910 00:00,1455100,0.413814704514469 +20070911 00:00,1476400,0.41404618141435434 +20070912 00:00,1476400,0.41401976059798573 +20070913 00:00,1488100,0.4137081659447466 +20070914 00:00,1489300,0.41355760725692203 +20070917 00:00,1481300,0.4131720030956866 +20070918 00:00,1523900,0.40987791644226496 +20070919 00:00,1533600,0.4041617277443548 +20070920 00:00,1523400,0.40275172001771326 +20070921 00:00,1522700,0.40281330593737447 +20070924 00:00,1515500,0.4026723201098062 +20070925 00:00,1516400,0.4035812335637537 +20070926 00:00,1523700,0.4049990182966494 +20070927 00:00,1529400,0.4064027317275259 +20070928 00:00,1524700,0.40761827740640216 +20071001 00:00,1545200,0.40945056853228146 +20071002 00:00,1544300,0.4110086218680119 +20071003 00:00,1538000,0.4131316770201858 +20071004 00:00,1541600,0.41542287318444054 +20071005 00:00,1556000,0.4181416076423554 +20071008 00:00,1551900,0.4204145758846591 +20071009 00:00,1564000,0.42246505351469926 +20071010 00:00,1560300,0.42431810032334605 +20071011 00:00,1553500,0.42537866197159396 +20071012 00:00,1560600,0.4270665037098132 +20071015 00:00,1548300,0.42710408269940625 +20071016 00:00,1537700,0.4252573314780817 +20071017 00:00,1540300,0.4243299577651525 +20071018 00:00,1538200,0.4236952728969983 +20071019 00:00,1499700,0.417730309723928 +20071022 00:00,1506000,0.4143574435143764 +20071023 00:00,1519400,0.41362256268983544 +20071024 00:00,1515600,0.4137510475781365 +20071025 00:00,1513200,0.4147382028428531 +20071026 00:00,1534500,0.4141857632509984 +20071029 00:00,1540000,0.4133612050436554 +20071030 00:00,1530600,0.4138895533315895 +20071031 00:00,1547900,0.4131787593046079 +20071101 00:00,1507800,0.4138277404117251 +20071102 00:00,1511100,0.4129208976738837 +20071105 00:00,1501900,0.41304432822703535 +20071106 00:00,1520900,0.41396459812445513 +20071107 00:00,1475900,0.4136823602500991 +20071108 00:00,1475300,0.41197352958338757 +20071109 00:00,1452600,0.4105723556306537 +20071112 00:00,1439900,0.4100791740166549 +20071113 00:00,1481900,0.41084577171244496 +20071114 00:00,1471000,0.4121245746793081 +20071115 00:00,1453600,0.41483689889460273 +20071116 00:00,1460400,0.4174477989778497 +20071119 00:00,1435600,0.42166812228488165 +20071120 00:00,1442000,0.4262826148523249 +20071121 00:00,1418100,0.4319786917375351 +20071123 00:00,1441800,0.4372354470366978 +20071126 00:00,1408200,0.4452554189765709 +20071127 00:00,1430900,0.4503884166045911 +20071128 00:00,1472600,0.4450454849409667 +20071129 00:00,1472700,0.44048251163453256 +20071130 00:00,1484600,0.43575207960047213 +20071203 00:00,1475600,0.43431790828788736 +20071204 00:00,1465500,0.4340494558876088 +20071205 00:00,1488600,0.43332306651857927 +20071206 00:00,1511100,0.43041912796358606 +20071207 00:00,1507500,0.42988959138191046 +20071210 00:00,1520300,0.4306875863030995 +20071211 00:00,1482400,0.4302598802766972 +20071212 00:00,1491300,0.43020566477136607 +20071213 00:00,1493000,0.431165142240248 +20071214 00:00,1471800,0.429923769355552 +20071217 00:00,1450700,0.42513188340412256 +20071218 00:00,1458200,0.4233051046231324 +20071219 00:00,1456300,0.42233766292505903 +20071220 00:00,1465400,0.42251446305744583 +20071221 00:00,1482000,0.42206929799637194 +20071224 00:00,1492000,0.42077376432049257 +20071226 00:00,1494800,0.41988097462424295 +20071227 00:00,1475200,0.41966643811612236 +20071228 00:00,1475400,0.41967168815231565 +20071231 00:00,1464200,0.4195817894201045 +20080102 00:00,1445600,0.41831833056983453 +20080103 00:00,1444600,0.41787779668020614 +20080104 00:00,1409300,0.415750991498078 +20080107 00:00,1414600,0.4156019620920266 +20080108 00:00,1388100,0.41572334352328666 +20080109 00:00,1407800,0.4178722255193322 +20080110 00:00,1418000,0.41870967030861544 +20080111 00:00,1400300,0.42142842153444754 +20080114 00:00,1414600,0.4231947183237039 +20080115 00:00,1379500,0.4263781041523256 +20080116 00:00,1371400,0.4286164279901285 +20080117 00:00,1332300,0.43011858503941197 +20080118 00:00,1324900,0.4334687942435496 +20080122 00:00,1310200,0.439622708215354 +20080123 00:00,1336200,0.44610203554124905 +20080124 00:00,1349900,0.4499286468780922 +20080125 00:00,1329800,0.45596581601634684 +20080128 00:00,1353200,0.458598961573891 +20080129 00:00,1360700,0.45974379276672767 +20080130 00:00,1353700,0.4617086935221553 +20080131 00:00,1374400,0.4607973526086931 +20080201 00:00,1394500,0.4566199014500716 +20080204 00:00,1380200,0.45526107446450303 +20080205 00:00,1337200,0.4522985374764312 +20080206 00:00,1327200,0.4479484324194854 +20080207 00:00,1337800,0.4465962685383184 +20080208 00:00,1331200,0.4456750000443871 +20080211 00:00,1339100,0.4455561747453884 +20080212 00:00,1349200,0.44591218697255547 +20080213 00:00,1367100,0.4439481583148266 +20080214 00:00,1350100,0.4424857208983356 +20080215 00:00,1350700,0.4409094685668368 +20080219 00:00,1350300,0.43988409385887045 +20080220 00:00,1361100,0.4392838367306876 +20080221 00:00,1344800,0.43979423184097843 +20080222 00:00,1356400,0.4419839040521509 +20080225 00:00,1373100,0.44566262718032335 +20080226 00:00,1383500,0.44855754836885464 +20080227 00:00,1381200,0.4480186188645262 +20080228 00:00,1370000,0.448706344806775 +20080229 00:00,1332500,0.4457688676894551 +20080303 00:00,1333900,0.44252929268706126 +20080304 00:00,1329200,0.4404493472721358 +20080305 00:00,1337000,0.43929663882656506 +20080306 00:00,1308200,0.43717923708007195 +20080307 00:00,1297100,0.4348239672958495 +20080310 00:00,1278600,0.43301901106990237 +20080311 00:00,1323900,0.432581530972185 +20080312 00:00,1313100,0.43126274299204764 +20080313 00:00,1319200,0.430432435763014 +20080314 00:00,1292600,0.43108832952556164 +20080317 00:00,1279000,0.4322964038873394 +20080318 00:00,1333200,0.4309472091966389 +20080319 00:00,1303600,0.43118320072831684 +20080320 00:00,1327300,0.42950094492172075 +20080324 00:00,1347700,0.42528838892416354 +20080325 00:00,1350500,0.4222445165761114 +20080326 00:00,1338300,0.42125187555333715 +20080327 00:00,1324500,0.41908716283055414 +20080328 00:00,1314000,0.41574097728321935 +20080331 00:00,1319400,0.41328903648246024 +20080401 00:00,1368000,0.4095966492986472 +20080402 00:00,1366600,0.4062132494185292 +20080403 00:00,1368000,0.4049012650379992 +20080404 00:00,1369700,0.40466692531298515 +20080407 00:00,1370500,0.4050637603939913 +20080408 00:00,1364700,0.40534318001221953 +20080409 00:00,1353900,0.40468647597895174 +20080410 00:00,1359400,0.40479876718914176 +20080411 00:00,1332900,0.4030897068627506 +20080414 00:00,1328100,0.40093545398237107 +20080415 00:00,1335200,0.40003709831158607 +20080416 00:00,1362300,0.39890398319772163 +20080417 00:00,1364800,0.3977221866513132 +20080418 00:00,1389600,0.39547521649499345 +20080421 00:00,1387800,0.39418184708887166 +20080422 00:00,1376900,0.39378664245109646 +20080423 00:00,1379800,0.393684002431829 +20080424 00:00,1387900,0.39413074445433643 +20080425 00:00,1397600,0.39464011766379725 +20080428 00:00,1396200,0.3950901090055741 +20080429 00:00,1390700,0.3954532713109904 +20080430 00:00,1384300,0.395691959635081 +20080501 00:00,1409300,0.3966047815567324 +20080502 00:00,1413400,0.39724468026430837 +20080505 00:00,1407100,0.39834820916741703 +20080506 00:00,1418400,0.400126052845651 +20080507 00:00,1392800,0.40073045598483964 +20080508 00:00,1398400,0.4015556670321243 +20080509 00:00,1389300,0.4018554130720716 +20080512 00:00,1404700,0.4028599033234768 +20080513 00:00,1404000,0.40353717675912903 +20080514 00:00,1409600,0.40420564826318833 +20080515 00:00,1425500,0.4042919005683373 +20080516 00:00,1426500,0.40445618570480074 +20080519 00:00,1428300,0.4048324802786871 +20080520 00:00,1416300,0.4052235247587584 +20080521 00:00,1393100,0.4039107059477642 +20080522 00:00,1395700,0.4030519419542195 +20080523 00:00,1378600,0.40212827106193194 +20080527 00:00,1387400,0.4020866722373052 +20080528 00:00,1393700,0.4021575084311629 +20080529 00:00,1400300,0.40185070981515036 +20080530 00:00,1401000,0.4017467122286171 +20080602 00:00,1388300,0.40213573375213535 +20080603 00:00,1380100,0.4031233915578133 +20080604 00:00,1380400,0.40455391757612874 +20080605 00:00,1406400,0.4040068891425883 +20080606 00:00,1363800,0.40458169548204986 +20080609 00:00,1366200,0.4040197442492276 +20080610 00:00,1361400,0.4041064106221758 +20080611 00:00,1339500,0.40519112324823603 +20080612 00:00,1344500,0.405764658940147 +20080613 00:00,1364000,0.4057891979201919 +20080616 00:00,1363900,0.4058703122930147 +20080617 00:00,1355000,0.40669751652243513 +20080618 00:00,1343200,0.4077805194010453 +20080619 00:00,1347100,0.40745335189468235 +20080620 00:00,1315900,0.4076939837988514 +20080623 00:00,1316300,0.40678437597729383 +20080624 00:00,1312400,0.4066197641882509 +20080625 00:00,1320000,0.4068909917134861 +20080626 00:00,1282100,0.40776983418030094 +20080627 00:00,1278000,0.4086392537024618 +20080630 00:00,1278400,0.411018863941973 +20080701 00:00,1283700,0.4127562668755475 +20080702 00:00,1260700,0.4153226835303262 +20080703 00:00,1263800,0.4177960955761165 +20080707 00:00,1250900,0.4201098907557518 +20080708 00:00,1272800,0.4211882755560779 +20080709 00:00,1244300,0.42688785883204433 +20080710 00:00,1253800,0.4304440278051394 +20080711 00:00,1240200,0.43136807457843834 +20080714 00:00,1228200,0.43215027175920934 +20080715 00:00,1214300,0.4330271973436198 +20080716 00:00,1244700,0.43256089634510964 +20080717 00:00,1259000,0.42929556668940516 +20080718 00:00,1259200,0.42709444499580557 +20080721 00:00,1259900,0.42599425279080283 +20080722 00:00,1276900,0.4254600274037004 +20080723 00:00,1282200,0.42472527483225636 +20080724 00:00,1254300,0.4272636959323138 +20080725 00:00,1257200,0.42692127718308714 +20080728 00:00,1235600,0.42571115106733376 +20080729 00:00,1262700,0.4258738944289097 +20080730 00:00,1284500,0.4247921787321297 +20080731 00:00,1268500,0.4255010238372946 +20080801 00:00,1261100,0.42551910724519193 +20080804 00:00,1249200,0.4276765696723178 +20080805 00:00,1284200,0.42885138442521675 +20080806 00:00,1290900,0.4293411888435352 +20080807 00:00,1268600,0.4342133004274845 +20080808 00:00,1296200,0.43551992620399904 +20080811 00:00,1306500,0.43671038174953863 +20080812 00:00,1292400,0.43910395259763674 +20080813 00:00,1288200,0.4387683293192042 +20080814 00:00,1295200,0.4402846414926305 +20080815 00:00,1300500,0.4416369102014598 +20080818 00:00,1282400,0.4416547180091745 +20080819 00:00,1270000,0.44054294262022853 +20080820 00:00,1277100,0.4400359794483068 +20080821 00:00,1279800,0.4396664622717538 +20080822 00:00,1295100,0.43899024560003796 +20080825 00:00,1270800,0.4398712821426417 +20080826 00:00,1274400,0.4384125696916494 +20080827 00:00,1284600,0.43718891881498156 +20080828 00:00,1303100,0.43496175113066876 +20080829 00:00,1286900,0.43365156103810387 +20080902 00:00,1281000,0.4316168246648793 +20080903 00:00,1279600,0.43093936384679365 +20080904 00:00,1240700,0.42643936929406234 +20080905 00:00,1246400,0.423385327108996 +20080908 00:00,1272500,0.41976667255627337 +20080909 00:00,1229400,0.41670261434797756 +20080910 00:00,1236000,0.4135460676501161 +20080911 00:00,1255100,0.4108640259938568 +20080912 00:00,1257400,0.4086211002173783 +20080915 00:00,1203600,0.4067718255454195 +20080916 00:00,1218500,0.4062258967531865 +20080917 00:00,1163500,0.4021548445801324 +20080918 00:00,1205500,0.40224895187786985 +20080919 00:00,1250500,0.394472389178527 +20080922 00:00,1207000,0.39404888683605793 +20080923 00:00,1187000,0.3927910854651157 +20080924 00:00,1188100,0.39318244993934165 +20080925 00:00,1210000,0.39327118525932886 +20080926 00:00,1213300,0.3931605044154412 +20080929 00:00,1130200,0.3918706195321056 +20080930 00:00,1165400,0.391775637606386 +20081001 00:00,1160000,0.39177369769200243 +20081002 00:00,1113600,0.3919656177714921 +20081003 00:00,1099700,0.3921060221141945 +20081006 00:00,1062800,0.3920842990145483 +20081007 00:00,997400,0.3877039233259547 +20081008 00:00,983900,0.388968770017307 +20081009 00:00,917200,0.39263644602500913 +20081010 00:00,904500,0.4021404809321984 +20081013 00:00,1006800,0.40552336752602786 +20081014 00:00,999100,0.40734773005009944 +20081015 00:00,907500,0.42167074819228445 +20081016 00:00,944100,0.43367370095043895 +20081017 00:00,940900,0.44481581236253287 +20081020 00:00,984900,0.4490996400482152 +20081021 00:00,955000,0.4569824314916611 +20081022 00:00,903900,0.4654446629737539 +20081023 00:00,910400,0.473128332496967 +20081024 00:00,875400,0.4802355066864464 +20081027 00:00,848200,0.4839342972235428 +20081028 00:00,937700,0.4838406631599877 +20081029 00:00,923600,0.48239281619107716 +20081030 00:00,954400,0.47898284817805925 +20081031 00:00,971300,0.47435331677420495 +20081103 00:00,967400,0.4722353767675458 +20081104 00:00,1002800,0.4694787887368228 +20081105 00:00,957000,0.47154200512143307 +20081106 00:00,908100,0.467244012503272 +20081107 00:00,931300,0.4661777167099468 +20081110 00:00,921700,0.4646640019720404 +20081111 00:00,901600,0.4624508147565249 +20081112 00:00,857300,0.45844063946715824 +20081113 00:00,910500,0.4580750299792017 +20081114 00:00,876800,0.4563897585175124 +20081117 00:00,853000,0.4546417245112745 +20081118 00:00,861700,0.45309087675839627 +20081119 00:00,813400,0.45097101986290594 +20081120 00:00,759500,0.445260481897099 +20081121 00:00,802700,0.44578860627940925 +20081124 00:00,848900,0.445597485179451 +20081125 00:00,860600,0.4428930025611936 +20081126 00:00,890200,0.4369943728451589 +20081128 00:00,898200,0.43214051267640313 +20081201 00:00,821300,0.4318121708418621 +20081202 00:00,852700,0.4316519265494009 +20081203 00:00,874100,0.43175978229062006 +20081204 00:00,850000,0.4317771041831165 +20081205 00:00,879700,0.4314155958085318 +20081208 00:00,910600,0.4296372627891424 +20081209 00:00,895500,0.4300025601092295 +20081210 00:00,902500,0.43087274913675544 +20081211 00:00,880300,0.43209184723772887 +20081212 00:00,884700,0.43391658923327453 +20081215 00:00,874800,0.4352817591366467 +20081216 00:00,918700,0.43821764080077913 +20081217 00:00,910200,0.4406922141064356 +20081218 00:00,892000,0.4433121336837468 +20081219 00:00,882800,0.4444254523833637 +20081222 00:00,865700,0.4429319865242585 +20081223 00:00,861900,0.44091686170386596 +20081224 00:00,865600,0.4392617052379197 +20081226 00:00,871000,0.4381144839427341 +20081229 00:00,868900,0.43753488410991537 +20081230 00:00,888700,0.4371811436602667 +20081231 00:00,903300,0.4363310821901084 +20090102 00:00,930300,0.43459325285488154 +20090105 00:00,928400,0.4336529112825866 +20090106 00:00,934400,0.43312490718460284 +20090107 00:00,906200,0.43367721230739265 +20090108 00:00,910100,0.4342644903489336 +20090109 00:00,890100,0.4351098314100199 +20090112 00:00,869400,0.4350616096551233 +20090113 00:00,870500,0.43764977583626036 +20090114 00:00,842100,0.43763485739334573 +20090115 00:00,844400,0.4380279226385272 +20090116 00:00,850200,0.4374814963068282 +20090120 00:00,805400,0.4361180426198194 +20090121 00:00,840200,0.4368820798752336 +20090122 00:00,828400,0.4369457094766479 +20090123 00:00,831100,0.4371938431101387 +20090126 00:00,837300,0.43810985088861354 +20090127 00:00,845900,0.4380700003128364 +20090128 00:00,873800,0.4364512351304504 +20090129 00:00,845700,0.43688216706272454 +20090130 00:00,826900,0.43705798567106857 +20090202 00:00,825200,0.43937639028283054 +20090203 00:00,837200,0.4407548016606931 +20090204 00:00,833300,0.44034844347733565 +20090205 00:00,845700,0.43997420049575936 +20090206 00:00,870000,0.43894705446035653 +20090209 00:00,871300,0.438758774966102 +20090210 00:00,829200,0.4387532868114814 +20090211 00:00,836300,0.43848894069864414 +20090212 00:00,836100,0.4384467912547005 +20090213 00:00,827400,0.43857677273306683 +20090217 00:00,791900,0.43737156810579864 +20090218 00:00,789700,0.43650006607733244 +20090219 00:00,782800,0.43583683536727835 +20090220 00:00,773800,0.43642757603833576 +20090223 00:00,746500,0.4361625814283167 +20090224 00:00,774700,0.4363950682192838 +20090225 00:00,768300,0.4371816486560365 +20090226 00:00,755400,0.4391442260401738 +20090227 00:00,739300,0.44072600328343325 +20090302 00:00,705800,0.44072362530228776 +20090303 00:00,700700,0.44135309281168195 +20090304 00:00,716700,0.4424452463789434 +20090305 00:00,687900,0.44487353132552465 +20090306 00:00,688400,0.4458200059046906 +20090309 00:00,681100,0.44664630074141826 +20090310 00:00,721600,0.444882868544419 +20090311 00:00,726100,0.44268144767980744 +20090312 00:00,755300,0.4382207439027302 +20090313 00:00,761500,0.43465212979605394 +20090316 00:00,759600,0.43235449434539236 +20090317 00:00,782400,0.4302935186424364 +20090318 00:00,798900,0.4282143357135178 +20090319 00:00,788400,0.428452173511587 +20090320 00:00,766500,0.4282667564497683 +20090323 00:00,822200,0.4296027538370976 +20090324 00:00,806000,0.4313315963706304 +20090325 00:00,813200,0.43368256646622044 +20090326 00:00,831100,0.4371155196393823 +20090327 00:00,816100,0.4419041125588491 +20090330 00:00,787600,0.44448456311496704 +20090331 00:00,794400,0.4466635169388531 +20090401 00:00,810000,0.4493414222283597 +20090402 00:00,833900,0.4518604305773145 +20090403 00:00,842700,0.4539150525044478 +20090406 00:00,834800,0.45594077181158454 +20090407 00:00,816100,0.45661015807502386 +20090408 00:00,824900,0.4570796101461311 +20090409 00:00,858200,0.45756514541630583 +20090413 00:00,858300,0.4575501738821205 +20090414 00:00,843800,0.4584926792374459 +20090415 00:00,853100,0.4597759097292812 +20090416 00:00,866200,0.46074507274309545 +20090417 00:00,871400,0.46160352998854465 +20090420 00:00,834100,0.46158015652038065 +20090421 00:00,850800,0.4618588265897382 +20090422 00:00,845700,0.4620288894666223 +20090423 00:00,853700,0.46253526528297717 +20090424 00:00,866800,0.463031945326023 +20090427 00:00,858400,0.46379205018250563 +20090428 00:00,855600,0.46463112927744105 +20090429 00:00,873600,0.46563260619785396 +20090430 00:00,875500,0.4665632308068453 +20090501 00:00,878400,0.46712112658678717 +20090504 00:00,909200,0.4673184871807252 +20090505 00:00,905600,0.4678752515480407 +20090506 00:00,921100,0.46891562854878294 +20090507 00:00,909000,0.4701498882225479 +20090508 00:00,929900,0.47168283597804656 +20090511 00:00,911400,0.47368391637972024 +20090512 00:00,910100,0.475414003756324 +20090513 00:00,888000,0.47633168500777445 +20090514 00:00,894500,0.4774390483875628 +20090515 00:00,887300,0.47811902897940534 +20090518 00:00,912400,0.47944083511162205 +20090519 00:00,911200,0.48076392738085616 +20090520 00:00,905100,0.481765506978951 +20090521 00:00,892400,0.48224930337891936 +20090522 00:00,890400,0.4825477924899124 +20090526 00:00,913000,0.48337339399218776 +20090527 00:00,897100,0.48378989989522136 +20090528 00:00,909300,0.48387543036438824 +20090529 00:00,924100,0.48342419688439586 +20090601 00:00,947800,0.48205908159222577 +20090602 00:00,948800,0.4810978182096302 +20090603 00:00,936400,0.48109662102147344 +20090604 00:00,946000,0.4809844996654758 +20090605 00:00,945300,0.4814936914587885 +20090608 00:00,943000,0.48166445683230147 +20090609 00:00,946200,0.4820535878559471 +20090610 00:00,943400,0.48225317104208026 +20090611 00:00,948500,0.4833413573000665 +20090612 00:00,950900,0.48390964317174934 +20090615 00:00,928800,0.4832828635442786 +20090616 00:00,916400,0.4819943214136032 +20090617 00:00,915200,0.48111313426121355 +20090618 00:00,920800,0.4808223193694246 +20090619 00:00,920400,0.480810285044726 +20090622 00:00,892700,0.48018459304411915 +20090623 00:00,893600,0.47991109418540845 +20090624 00:00,901500,0.4802267598690591 +20090625 00:00,920000,0.48062526780737325 +20090626 00:00,918900,0.480183531363679 +20090629 00:00,926800,0.4797082437222795 +20090630 00:00,919200,0.479668822786341 +20090701 00:00,923400,0.4798742873197535 +20090702 00:00,898500,0.4796250110802036 +20090706 00:00,898000,0.47942668990945586 +20090707 00:00,881100,0.47879242359668434 +20090708 00:00,880000,0.4790611545431479 +20090709 00:00,882000,0.47866038465515104 +20090710 00:00,879500,0.4787955839681312 +20090713 00:00,901300,0.478220535636355 +20090714 00:00,906300,0.47740176584343696 +20090715 00:00,932500,0.47650915353820184 +20090716 00:00,941200,0.47468728076741473 +20090717 00:00,941700,0.47359166820231835 +20090720 00:00,950700,0.4729598454876584 +20090721 00:00,955700,0.4727353995474732 +20090722 00:00,955500,0.4732789749335224 +20090723 00:00,977000,0.47424660251796186 +20090724 00:00,981000,0.4747648242794776 +20090727 00:00,983500,0.47583584380201543 +20090728 00:00,981100,0.4780787384827436 +20090729 00:00,976800,0.47968709181653285 +20090730 00:00,987000,0.4821773848370002 +20090731 00:00,988100,0.4845152684014697 +20090803 00:00,1004500,0.48729448562750227 +20090804 00:00,1006800,0.49062859457438607 +20090805 00:00,1003700,0.4929630562829718 +20090806 00:00,998900,0.49485182352501017 +20090807 00:00,1012000,0.4974300743880598 +20090810 00:00,1009800,0.49879174486588634 +20090811 00:00,996600,0.49968650685790084 +20090812 00:00,1007700,0.5005602323908563 +20090813 00:00,1015700,0.5013266837513697 +20090814 00:00,1007300,0.502001458285917 +20090817 00:00,982700,0.5018560664545801 +20090818 00:00,991600,0.5018143535554006 +20090819 00:00,1000100,0.5019948265571049 +20090820 00:00,1010100,0.501816395404155 +20090821 00:00,1029700,0.5010179394779897 +20090824 00:00,1029600,0.5002225881892824 +20090825 00:00,1031400,0.5002160121163788 +20090826 00:00,1031700,0.5002558238725888 +20090827 00:00,1034300,0.49987332812449525 +20090828 00:00,1033300,0.49984967085566995 +20090831 00:00,1025500,0.4995817828086632 +20090901 00:00,1002000,0.4988110335408181 +20090902 00:00,998000,0.4976962086914535 +20090903 00:00,1006500,0.497396627253196 +20090904 00:00,1020800,0.49638183965172084 +20090908 00:00,1028900,0.4946210694027273 +20090909 00:00,1037600,0.49273254924498455 +20090910 00:00,1048200,0.48937831902984147 +20090911 00:00,1047900,0.4845402008463093 +20090914 00:00,1053400,0.4775058512164966 +20090915 00:00,1057400,0.4715731371666618 +20090916 00:00,1073300,0.46314026431371225 +20090917 00:00,1071600,0.4602377174975727 +20090918 00:00,1067200,0.44958772912987455 +20090921 00:00,1064400,0.4355897251164088 +20090922 00:00,1070800,0.42320328199389295 +20090923 00:00,1061400,0.4122149273763248 +20090924 00:00,1049500,0.3998234475453089 +20090925 00:00,1044500,0.38658849510789056 +20090928 00:00,1063200,0.37174844801709167 +20090929 00:00,1060300,0.3613961446611649 +20090930 00:00,1055600,0.3519529854239404 +20091001 00:00,1030500,0.3461795578223385 +20091002 00:00,1025400,0.3446375767578203 +20091005 00:00,1040100,0.3501031809488852 +20091006 00:00,1055500,0.3558405223821822 +20091007 00:00,1057700,0.35909689841383474 +20091008 00:00,1066400,0.36097637329337995 +20091009 00:00,1072500,0.365441955897827 +20091012 00:00,1077600,0.3691390214360634 +20091013 00:00,1075000,0.37461148520477017 +20091014 00:00,1093100,0.37635139310476734 +20091015 00:00,1096500,0.3779664364456414 +20091016 00:00,1088600,0.37913617742980277 +20091019 00:00,1098600,0.3801830587970102 +20091020 00:00,1092000,0.3866515236425088 +20091021 00:00,1081500,0.3895398062247909 +20091022 00:00,1093400,0.39104357546773 +20091023 00:00,1080800,0.39163302087607416 +20091026 00:00,1068300,0.3952064591480169 +20091027 00:00,1064000,0.4066304753245894 +20091028 00:00,1043800,0.4007210292670186 +20091029 00:00,1066500,0.3998135290537873 +20091030 00:00,1035600,0.3943100638770016 +20091102 00:00,1043600,0.38795271441250734 +20091103 00:00,1046500,0.3829668599878599 +20091104 00:00,1049100,0.383963508590101 +20091105 00:00,1068600,0.38068287182906935 +20091106 00:00,1071600,0.3792088070848622 +20091109 00:00,1096300,0.378438186967678 +20091110 00:00,1095700,0.3805795753114455 +20091111 00:00,1101500,0.38164660570105674 +20091112 00:00,1089900,0.38275101213012924 +20091113 00:00,1096100,0.391532822445531 +20091116 00:00,1112200,0.3971202049310909 +20091117 00:00,1113200,0.4023759031811159 +20091118 00:00,1112700,0.4122558923855508 +20091119 00:00,1097700,0.4123014007847687 +20091120 00:00,1094300,0.4221704135458266 +20091123 00:00,1109200,0.42829564398456677 +20091124 00:00,1109900,0.4310325031619946 +20091125 00:00,1113700,0.4335802638351896 +20091127 00:00,1095000,0.43841642974120976 +20091130 00:00,1098800,0.4407327480285591 +20091201 00:00,1112500,0.4452584866598473 +20091202 00:00,1113200,0.44665158452016224 +20091203 00:00,1103800,0.4471335076134949 +20091204 00:00,1110100,0.45151005003512995 +20091207 00:00,1108000,0.4516351791513114 +20091208 00:00,1096100,0.451914611943191 +20091209 00:00,1099700,0.4521677042533108 +20091210 00:00,1106500,0.45284061078822885 +20091211 00:00,1111800,0.45331571070704657 +20091214 00:00,1119000,0.45404588038206073 +20091215 00:00,1113000,0.454838382356815 +20091216 00:00,1114900,0.456602372943038 +20091217 00:00,1101300,0.45805521105567765 +20091218 00:00,1101900,0.4578997901259887 +20091221 00:00,1113300,0.4573202869604839 +20091222 00:00,1117400,0.45657679951276064 +20091223 00:00,1119700,0.4566218144275824 +20091224 00:00,1126000,0.45698900372693835 +20091228 00:00,1126700,0.457948464073822 +20091229 00:00,1126200,0.46127129777535714 +20091230 00:00,1124500,0.46203251595209516 +20091231 00:00,1114400,0.4595804372508623 +20100104 00:00,1133300,0.4552165115063358 +20100105 00:00,1136500,0.4518893577062969 +20100106 00:00,1137300,0.4507113601573017 +20100107 00:00,1142100,0.4502095286698972 +20100108 00:00,1146200,0.4529083363218821 +20100111 00:00,1147400,0.45507471897595336 +20100112 00:00,1136700,0.4565210857612217 +20100113 00:00,1146400,0.4587563320594986 +20100114 00:00,1149400,0.4595240763136708 +20100115 00:00,1136700,0.46091718552808636 +20100119 00:00,1151200,0.46085448159500936 +20100120 00:00,1138600,0.4618272395149851 +20100121 00:00,1116500,0.4583759211318545 +20100122 00:00,1092100,0.4523398378987334 +20100125 00:00,1097800,0.44892758426697205 +20100126 00:00,1092900,0.44657569691525756 +20100127 00:00,1098100,0.44338309388606506 +20100128 00:00,1085400,0.4416444939635766 +20100129 00:00,1073700,0.4382930425725124 +20100201 00:00,1090600,0.43587882720948146 +20100202 00:00,1104100,0.43128900962356786 +20100203 00:00,1098200,0.4252469102627382 +20100204 00:00,1064900,0.4201902922427448 +20100205 00:00,1066600,0.41063034230401685 +20100208 00:00,1058700,0.39863129223221166 +20100209 00:00,1072000,0.3860784816705776 +20100210 00:00,1070100,0.37815864577742103 +20100211 00:00,1081300,0.3705363139926512 +20100212 00:00,1080400,0.3667614730523323 +20100216 00:00,1097500,0.3621658673366373 +20100217 00:00,1102600,0.35858260172634454 +20100218 00:00,1109100,0.35656374901802407 +20100219 00:00,1111800,0.356635822653588 +20100222 00:00,1111500,0.3568736056998496 +20100223 00:00,1098100,0.3577747545301931 +20100224 00:00,1108400,0.3637372186021978 +20100225 00:00,1106700,0.3721172686503415 +20100226 00:00,1107600,0.3805641804713894 +20100301 00:00,1118600,0.38463646272849006 +20100302 00:00,1121900,0.3810287266794932 +20100303 00:00,1123000,0.37701784737171057 +20100304 00:00,1126600,0.3763897997602319 +20100305 00:00,1142300,0.37156708629916974 +20100308 00:00,1142900,0.36839308984243924 +20100309 00:00,1144600,0.3686277923180988 +20100310 00:00,1149900,0.36847847380015253 +20100311 00:00,1154500,0.3694458199346765 +20100312 00:00,1154600,0.3693763949682516 +20100315 00:00,1155000,0.3697155401038246 +20100316 00:00,1164100,0.37128382077257327 +20100317 00:00,1171300,0.3720425814036883 +20100318 00:00,1170300,0.37460506258972787 +20100319 00:00,1159300,0.37518532068755356 +20100322 00:00,1165900,0.377569304435085 +20100323 00:00,1174000,0.3794704354752373 +20100324 00:00,1168500,0.38061758661032646 +20100325 00:00,1166200,0.3814654125180331 +20100326 00:00,1166600,0.38626691286653936 +20100329 00:00,1173200,0.38738045443685737 +20100330 00:00,1174000,0.3892808502326847 +20100331 00:00,1169900,0.392189271622002 +20100401 00:00,1178200,0.3935824704503644 +20100405 00:00,1187600,0.39371969018280023 +20100406 00:00,1190400,0.395001839710307 +20100407 00:00,1183600,0.3950291172153444 +20100408 00:00,1187800,0.3969804350313986 +20100409 00:00,1195500,0.3971371677303849 +20100412 00:00,1197400,0.39711304334538905 +20100413 00:00,1198700,0.3968170296009757 +20100414 00:00,1211900,0.39590935229665114 +20100415 00:00,1213200,0.39557627526488226 +20100416 00:00,1194000,0.3970647594786071 +20100419 00:00,1198100,0.39802190538473015 +20100420 00:00,1208800,0.39615305027048153 +20100421 00:00,1206600,0.39497378276282846 +20100422 00:00,1210200,0.3944678085638652 +20100423 00:00,1217900,0.3941973742177665 +20100426 00:00,1213500,0.3947945425682864 +20100427 00:00,1184300,0.39243334547550607 +20100428 00:00,1193500,0.39339296445395905 +20100429 00:00,1208500,0.39442683893963026 +20100430 00:00,1188600,0.39741716111510045 +20100503 00:00,1203600,0.40019916330229954 +20100504 00:00,1175800,0.39938132845884616 +20100505 00:00,1168200,0.39747985685259957 +20100506 00:00,1127400,0.3915801155607409 +20100507 00:00,1110000,0.3858131641114567 +20100510 00:00,1161700,0.38992799077232526 +20100511 00:00,1158300,0.3909281490103697 +20100512 00:00,1174700,0.39025631692758284 +20100513 00:00,1160200,0.39193348681002743 +20100514 00:00,1139200,0.39461530376934434 +20100517 00:00,1139100,0.39795872132157034 +20100518 00:00,1124300,0.40357508580629914 +20100519 00:00,1117400,0.4097490053941671 +20100520 00:00,1075500,0.4132341077319723 +20100521 00:00,1090300,0.42002333947034676 +20100524 00:00,1077000,0.4285609946230842 +20100525 00:00,1078000,0.43650019769141124 +20100526 00:00,1071700,0.4489882774232124 +20100527 00:00,1107900,0.45505974633002194 +20100528 00:00,1094400,0.4599480584116717 +20100601 00:00,1075200,0.46375782128438525 +20100602 00:00,1102800,0.46445898598617774 +20100603 00:00,1107000,0.4641525450425972 +20100604 00:00,1069400,0.4655515513173969 +20100607 00:00,1054900,0.46450775345803297 +20100608 00:00,1065700,0.46646753371256877 +20100609 00:00,1059900,0.4686034281879422 +20100610 00:00,1091900,0.4677050730722598 +20100611 00:00,1096800,0.46570169553376906 +20100614 00:00,1095700,0.46611294555804067 +20100615 00:00,1119500,0.4626736847889329 +20100616 00:00,1119600,0.46023802898238175 +20100617 00:00,1121400,0.459256187581085 +20100618 00:00,1116600,0.4601545413774333 +20100621 00:00,1114100,0.4608140711134149 +20100622 00:00,1095700,0.4596721363025226 +20100623 00:00,1092600,0.458918593018801 +20100624 00:00,1074700,0.45590520291875697 +20100625 00:00,1079500,0.45450465586487127 +20100628 00:00,1074900,0.45363171445841544 +20100629 00:00,1042000,0.45124528735436625 +20100630 00:00,1032200,0.448523837171796 +20100701 00:00,1028100,0.44979163553329693 +20100702 00:00,1022000,0.44814609537923117 +20100706 00:00,1028600,0.44771751324775005 +20100707 00:00,1061500,0.44116248601522046 +20100708 00:00,1071700,0.43272997085182624 +20100709 00:00,1079300,0.4259352865457023 +20100712 00:00,1080300,0.4218894566021486 +20100713 00:00,1096600,0.4170782837979976 +20100714 00:00,1096700,0.4141104844689195 +20100715 00:00,1096800,0.4116084715236064 +20100716 00:00,1066300,0.409091086240003 +20100719 00:00,1072900,0.40719502569619337 +20100720 00:00,1084800,0.4066073331995649 +20100721 00:00,1070700,0.40660578771727895 +20100722 00:00,1094800,0.40761050973886004 +20100723 00:00,1104100,0.4072215021637396 +20100726 00:00,1115700,0.4072824432502115 +20100727 00:00,1115500,0.408541110017359 +20100728 00:00,1108000,0.4101641661664582 +20100729 00:00,1102900,0.411646603030168 +20100730 00:00,1102700,0.41291844859720017 +20100802 00:00,1127600,0.41441503619890024 +20100803 00:00,1122200,0.41510289550053314 +20100804 00:00,1129700,0.4157517931222832 +20100805 00:00,1128500,0.41643663875217823 +20100806 00:00,1124100,0.4170235045270033 +20100809 00:00,1130100,0.41835651780114336 +20100810 00:00,1123900,0.41913578209982943 +20100811 00:00,1093000,0.41613207006048614 +20100812 00:00,1086000,0.41233334885016687 +20100813 00:00,1082800,0.41136640135368563 +20100816 00:00,1082600,0.41020525594043755 +20100817 00:00,1095900,0.410370521555769 +20100818 00:00,1097800,0.4106343129666439 +20100819 00:00,1078800,0.4116101333338966 +20100820 00:00,1075300,0.41170119626209273 +20100823 00:00,1071300,0.41227171876682284 +20100824 00:00,1055600,0.41301222207532756 +20100825 00:00,1058800,0.4145826837328041 +20100826 00:00,1052300,0.4171048077034937 +20100827 00:00,1068200,0.4198632292703496 +20100830 00:00,1053400,0.4246987694473759 +20100831 00:00,1054700,0.42771897520908414 +20100901 00:00,1084400,0.42585163649027913 +20100902 00:00,1094700,0.42324276121901216 +20100903 00:00,1109200,0.4203651023682504 +20100907 00:00,1096800,0.42034004935506114 +20100908 00:00,1104100,0.42048749076242153 +20100909 00:00,1109400,0.4206325471449141 +20100910 00:00,1115400,0.4208762689438211 +20100913 00:00,1127200,0.42165229984238295 +20100914 00:00,1126500,0.4231202199915913 +20100915 00:00,1131400,0.42481003704641174 +20100916 00:00,1131000,0.42684395442084794 +20100917 00:00,1125100,0.4289292143477097 +20100920 00:00,1142300,0.43212951537717115 +20100921 00:00,1140000,0.43515504342217765 +20100922 00:00,1134300,0.43885548055192236 +20100923 00:00,1125000,0.4403821744853757 +20100924 00:00,1147900,0.44272409358838355 +20100927 00:00,1143200,0.4439635947343269 +20100928 00:00,1146700,0.4468737465002369 +20100929 00:00,1144100,0.4498723848961866 +20100930 00:00,1141200,0.4514263677187686 +20101001 00:00,1146100,0.45215707303011743 +20101004 00:00,1137500,0.4543413001859609 +20101005 00:00,1160500,0.45601754054058197 +20101006 00:00,1160600,0.4564539120983223 +20101007 00:00,1158900,0.45748173776950096 +20101008 00:00,1165600,0.4581042890088608 +20101011 00:00,1166600,0.45851132293512603 +20101012 00:00,1169900,0.45896228615457163 +20101013 00:00,1178800,0.45976086339606653 +20101014 00:00,1175500,0.4596104970397832 +20101015 00:00,1177200,0.45974150460750995 +20101018 00:00,1185500,0.4602493374796193 +20101019 00:00,1167100,0.46107998089107205 +20101020 00:00,1178700,0.4624373727115323 +20101021 00:00,1181200,0.4635076465282117 +20101022 00:00,1183800,0.46713627047478046 +20101025 00:00,1186900,0.46970683229068083 +20101026 00:00,1187300,0.47121094069801395 +20101027 00:00,1183800,0.4717498939568619 +20101028 00:00,1184000,0.47041755608063535 +20101029 00:00,1185300,0.47126780295920717 +20101101 00:00,1185300,0.470618661485957 +20101102 00:00,1194900,0.47054759898011256 +20101103 00:00,1200100,0.47146210002907823 +20101104 00:00,1222600,0.47207811729701665 +20101105 00:00,1227400,0.4720358566689212 +20101108 00:00,1225400,0.47310073765764393 +20101109 00:00,1216000,0.4732895729724599 +20101110 00:00,1220900,0.47391098594043046 +20101111 00:00,1216600,0.474422036217167 +20101112 00:00,1201800,0.47443523364914675 +20101115 00:00,1200400,0.473912477371741 +20101116 00:00,1181200,0.4712725413926135 +20101117 00:00,1182100,0.46988484345856035 +20101118 00:00,1200200,0.4697592913909836 +20101119 00:00,1202600,0.469288061580876 +20101122 00:00,1201900,0.4694773445631051 +20101123 00:00,1184200,0.4692310805552804 +20101124 00:00,1201900,0.4696590073052201 +20101126 00:00,1192700,0.47008803483834555 +20101129 00:00,1191600,0.47069231408759715 +20101130 00:00,1184800,0.4711414385039641 +20101201 00:00,1210000,0.4707633731746229 +20101202 00:00,1225700,0.46767320811726476 +20101203 00:00,1228600,0.46539136912275714 +20101206 00:00,1227400,0.4647095103805409 +20101207 00:00,1228300,0.4642863856450674 +20101208 00:00,1232900,0.4641675381609452 +20101209 00:00,1238200,0.46430204371653355 +20101210 00:00,1245000,0.4646278249666642 +20101213 00:00,1245600,0.4653833625154527 +20101214 00:00,1246500,0.4668479699871981 +20101215 00:00,1241200,0.4678923811649702 +20101216 00:00,1248200,0.46919529437584123 +20101217 00:00,1243800,0.46992278096197043 +20101220 00:00,1245700,0.4709418250870123 +20101221 00:00,1253900,0.472024273078195 +20101222 00:00,1257900,0.4730449155788699 +20101223 00:00,1256100,0.47384979176319336 +20101227 00:00,1256500,0.4744399806789099 +20101228 00:00,1258000,0.47488256753355224 +20101229 00:00,1259200,0.4751172216271694 +20101230 00:00,1257200,0.47479739316260333 +20101231 00:00,1257800,0.47577711814938023 +20110103 00:00,1270100,0.4745893734402771 +20110104 00:00,1269300,0.4731093783221038 +20110105 00:00,1276400,0.47119363605948766 +20110106 00:00,1273900,0.4685971660335564 +20110107 00:00,1271300,0.4652889803338159 +20110110 00:00,1270100,0.46160037672435095 +20110111 00:00,1274300,0.45900316294556964 +20110112 00:00,1286400,0.45580744253556166 +20110113 00:00,1284500,0.4532923299304455 +20110114 00:00,1292800,0.4520992367842383 +20110118 00:00,1295300,0.454732975240783 +20110119 00:00,1282700,0.45798405997222624 +20110120 00:00,1281400,0.45812678909909144 +20110121 00:00,1283600,0.457923572556302 +20110124 00:00,1291600,0.4582237340989068 +20110125 00:00,1291600,0.4587391062187326 +20110126 00:00,1296900,0.46006746999556725 +20110127 00:00,1300300,0.4606158981728892 +20110128 00:00,1277200,0.46094931440062564 +20110131 00:00,1286700,0.46178695264497754 +20110201 00:00,1307100,0.4656853369931788 +20110202 00:00,1304800,0.46846799746645335 +20110203 00:00,1307600,0.467199454176312 +20110204 00:00,1311700,0.4659899154787504 +20110207 00:00,1320000,0.46485312910683296 +20110208 00:00,1325900,0.46374874125019605 +20110209 00:00,1323200,0.463259664488317 +20110210 00:00,1323300,0.46291645939595316 +20110211 00:00,1331500,0.4630497158976905 +20110214 00:00,1334300,0.46272177991529934 +20110215 00:00,1330400,0.46235402396019737 +20110216 00:00,1338200,0.4624441726464149 +20110217 00:00,1342200,0.46282318009557294 +20110218 00:00,1345700,0.46285591987110786 +20110222 00:00,1318000,0.4598849356652244 +20110223 00:00,1310100,0.45533346464053304 +20110224 00:00,1309200,0.4523205464539835 +20110225 00:00,1323200,0.4511828766590629 +20110228 00:00,1331500,0.4499125368724845 +20110301 00:00,1308900,0.44906726728286234 +20110302 00:00,1311600,0.44859771118772107 +20110303 00:00,1334700,0.4478180244360034 +20110304 00:00,1324700,0.44738514328109513 +20110307 00:00,1313700,0.446911375052694 +20110308 00:00,1325600,0.4468532703102865 +20110309 00:00,1323900,0.44678657491329543 +20110310 00:00,1299300,0.4460336821950913 +20110311 00:00,1308400,0.4459895511638207 +20110314 00:00,1300500,0.44625981009083665 +20110315 00:00,1285600,0.4458065453273576 +20110316 00:00,1262100,0.4437464399221421 +20110317 00:00,1278500,0.4443748460718058 +20110318 00:00,1277600,0.4450948150188167 +20110321 00:00,1297400,0.444154895557342 +20110322 00:00,1293000,0.44408188829250334 +20110323 00:00,1296400,0.44373275321742184 +20110324 00:00,1309000,0.44231181994297575 +20110325 00:00,1312900,0.4408193234015642 +20110328 00:00,1309400,0.4403503486814266 +20110329 00:00,1318600,0.43971570285660855 +20110330 00:00,1327000,0.43916848085528615 +20110331 00:00,1325100,0.4390648958250244 +20110401 00:00,1331500,0.4390850941033353 +20110404 00:00,1332400,0.439416518476721 +20110405 00:00,1332400,0.44039534037833533 +20110406 00:00,1336600,0.4411616205804777 +20110407 00:00,1333200,0.4408418981798566 +20110408 00:00,1328600,0.44015239960620545 +20110411 00:00,1324700,0.438856580634957 +20110412 00:00,1314500,0.4360063680369128 +20110413 00:00,1314500,0.4328886206328763 +20110414 00:00,1315600,0.4312523717084801 +20110415 00:00,1321200,0.4290696385628946 +20110418 00:00,1305300,0.4249410893768713 +20110419 00:00,1312800,0.42098739563193005 +20110420 00:00,1331600,0.4144313616125813 +20110421 00:00,1337400,0.40676189433710264 +20110425 00:00,1336200,0.39783241841328637 +20110426 00:00,1347900,0.3911349006291517 +20110427 00:00,1356300,0.38142274853745045 +20110428 00:00,1360400,0.371645925193515 +20110429 00:00,1365400,0.36439087014958116 +20110502 00:00,1362500,0.35975372262353195 +20110503 00:00,1357100,0.35696456933635756 +20110504 00:00,1348600,0.3532448608990777 +20110505 00:00,1336300,0.35122846350545234 +20110506 00:00,1342000,0.3555969866288967 +20110509 00:00,1347200,0.3469565542615172 +20110510 00:00,1358700,0.3386408692729019 +20110511 00:00,1344500,0.33247889470687175 +20110512 00:00,1351000,0.3283985886814914 +20110513 00:00,1340400,0.3263766084377881 +20110516 00:00,1331900,0.3275240666787633 +20110517 00:00,1331700,0.33156092008809573 +20110518 00:00,1343800,0.3343116157743393 +20110519 00:00,1346600,0.3342029861069868 +20110520 00:00,1336700,0.33580865987867786 +20110523 00:00,1320400,0.3370782116035944 +20110524 00:00,1319500,0.3397777743873582 +20110525 00:00,1323700,0.34266881711209185 +20110526 00:00,1330100,0.34663880076249115 +20110527 00:00,1335400,0.3483733272310969 +20110531 00:00,1348900,0.3485471409548116 +20110601 00:00,1318500,0.35244673545579724 +20110602 00:00,1316900,0.35508051368283144 +20110603 00:00,1304000,0.35388146637390727 +20110606 00:00,1290500,0.35608896245133265 +20110607 00:00,1288500,0.35981761976619436 +20110608 00:00,1284000,0.3685413681646516 +20110609 00:00,1294000,0.36905511560583887 +20110610 00:00,1275600,0.37160465486952154 +20110613 00:00,1276700,0.37466839131900054 +20110614 00:00,1293200,0.37278973458858644 +20110615 00:00,1270200,0.37578705291897424 +20110616 00:00,1272800,0.37965847585372287 +20110617 00:00,1270200,0.3862065480672913 +20110620 00:00,1277000,0.39401064915128253 +20110621 00:00,1294200,0.3980818483276897 +20110622 00:00,1287000,0.40527127376435257 +20110623 00:00,1282900,0.412130448823726 +20110624 00:00,1268100,0.4236419475036608 +20110627 00:00,1279400,0.4346424556061528 +20110628 00:00,1296100,0.4340210214199563 +20110629 00:00,1307500,0.4302589198179435 +20110630 00:00,1319700,0.4266164699467723 +20110701 00:00,1339600,0.4246414660635448 +20110705 00:00,1337100,0.4266720583719602 +20110706 00:00,1339400,0.4263410154460461 +20110707 00:00,1354600,0.4268240743669267 +20110708 00:00,1344000,0.42886237523043386 +20110711 00:00,1319600,0.42612825834416196 +20110712 00:00,1314300,0.42371332386500893 +20110713 00:00,1318500,0.42510030198748766 +20110714 00:00,1309400,0.42467688457925207 +20110715 00:00,1317400,0.42482489346573316 +20110718 00:00,1305800,0.4245160286202308 +20110719 00:00,1327800,0.4254500663008815 +20110720 00:00,1326500,0.4299244797124112 +20110721 00:00,1345200,0.4294438677250993 +20110722 00:00,1346100,0.42789904001236784 +20110725 00:00,1338300,0.4263506739171585 +20110726 00:00,1333600,0.42379085483915413 +20110727 00:00,1306000,0.41795531647275214 +20110728 00:00,1301600,0.41347878553113865 +20110729 00:00,1290500,0.4101317250463633 +20110801 00:00,1287100,0.4037142762591532 +20110802 00:00,1254900,0.39624403887211074 +20110803 00:00,1262100,0.3922839827987087 +20110804 00:00,1201800,0.3855485557503893 +20110805 00:00,1199800,0.3837438779455399 +20110808 00:00,1122600,0.37991434055942364 +20110809 00:00,1173700,0.3941875452551859 +20110810 00:00,1123500,0.41410307779748057 +20110811 00:00,1172800,0.429555397021859 +20110812 00:00,1181500,0.4396947737348605 +20110815 00:00,1205500,0.44416990572766174 +20110816 00:00,1195600,0.45535796872431694 +20110817 00:00,1196700,0.4673831259846576 +20110818 00:00,1146100,0.48001312241115324 +20110819 00:00,1126800,0.48703495737820185 +20110822 00:00,1127300,0.495545023104354 +20110823 00:00,1164600,0.4986323192474119 +20110824 00:00,1181300,0.4960509723875047 +20110825 00:00,1163100,0.49773085683079976 +20110826 00:00,1180400,0.4978942573332629 +20110829 00:00,1213800,0.49337881822462626 +20110830 00:00,1216200,0.4912129859799415 +20110831 00:00,1220600,0.48927170362091194 +20110901 00:00,1209600,0.4885761924332078 +20110902 00:00,1178400,0.4853507531150334 +20110906 00:00,1169900,0.4814179977650251 +20110907 00:00,1202700,0.4813502917206976 +20110908 00:00,1190200,0.48114673872230646 +20110909 00:00,1158600,0.47781037066422566 +20110912 00:00,1166600,0.4761252551599523 +20110913 00:00,1175800,0.4754294133759176 +20110914 00:00,1193600,0.47434013584812 +20110915 00:00,1214700,0.4715718668814069 +20110916 00:00,1215800,0.4700709473617686 +20110919 00:00,1203100,0.4700148616879974 +20110920 00:00,1201700,0.4697617369302062 +20110921 00:00,1165100,0.4661806353048344 +20110922 00:00,1128000,0.45581248619558945 +20110923 00:00,1135400,0.4513896043931011 +20110926 00:00,1162500,0.44931677613133403 +20110927 00:00,1176000,0.4463656209457524 +20110928 00:00,1151600,0.44603209511846753 +20110929 00:00,1160200,0.44555556361509374 +20110930 00:00,1131700,0.44527213429453283 +20111003 00:00,1099300,0.4420121583891737 +20111004 00:00,1121300,0.44239028512182627 +20111005 00:00,1145000,0.44104191456315045 +20111006 00:00,1165100,0.43718543169487983 +20111007 00:00,1157500,0.43558691112430165 +20111010 00:00,1195900,0.4301500319556243 +20111011 00:00,1196800,0.425439792088314 +20111012 00:00,1206700,0.42206778722958993 +20111013 00:00,1204700,0.42033840292114377 +20111014 00:00,1225600,0.4190874924712365 +20111017 00:00,1202400,0.4194557647091559 +20111018 00:00,1226100,0.4209339316312711 +20111019 00:00,1211400,0.4225176888312061 +20111020 00:00,1216900,0.424788454092757 +20111021 00:00,1239100,0.4276825611485431 +20111024 00:00,1254900,0.4303624932076133 +20111025 00:00,1230800,0.4334924389158132 +20111026 00:00,1243300,0.437598188884223 +20111027 00:00,1285300,0.4416395219404002 +20111028 00:00,1286800,0.44639712510641566 +20111031 00:00,1254500,0.4507627665944558 +20111101 00:00,1220800,0.44780303883060474 +20111102 00:00,1239900,0.4485184434238825 +20111103 00:00,1262400,0.4486437547101286 +20111104 00:00,1254500,0.4491691284609811 +20111107 00:00,1262800,0.4498831541534135 +20111108 00:00,1278600,0.45044103087133125 +20111109 00:00,1231900,0.45024801114304985 +20111110 00:00,1243200,0.4501850935135249 +20111111 00:00,1266200,0.4499403572327144 +20111114 00:00,1254600,0.44972887966013714 +20111115 00:00,1261200,0.44909360483378385 +20111116 00:00,1240500,0.44799005043834067 +20111117 00:00,1221800,0.4456420888993334 +20111118 00:00,1219900,0.4443331514557091 +20111121 00:00,1196200,0.4421226016330498 +20111122 00:00,1191900,0.4400628255103308 +20111123 00:00,1165600,0.43864800700585094 +20111125 00:00,1162000,0.4386209334465985 +20111128 00:00,1197000,0.4389861578518808 +20111129 00:00,1200800,0.43945704101032285 +20111130 00:00,1251100,0.43199604624776267 +20111201 00:00,1249800,0.4260841428407616 +20111202 00:00,1248600,0.4228339273344396 +20111205 00:00,1262100,0.4199249570064067 +20111206 00:00,1262600,0.41820934575374913 +20111207 00:00,1267500,0.41732620807981263 +20111208 00:00,1239800,0.4165422669831497 +20111209 00:00,1260300,0.4168432495777033 +20111212 00:00,1242400,0.41678575750014885 +20111213 00:00,1231100,0.41585203828379314 +20111214 00:00,1217100,0.41407303810622403 +20111215 00:00,1221500,0.4132974423180994 +20111216 00:00,1215700,0.41258655136326106 +20111219 00:00,1203200,0.4115407360044418 +20111220 00:00,1238800,0.41151221271587995 +20111221 00:00,1241700,0.4107418058780081 +20111222 00:00,1253300,0.4100467247690646 +20111223 00:00,1263900,0.40893402904419185 +20111227 00:00,1264900,0.40795906266286586 +20111228 00:00,1249200,0.40736572211909355 +20111229 00:00,1261000,0.40696522217439773 +20111230 00:00,1255000,0.4067422281610387 +20120103 00:00,1274900,0.40645462938974164 +20120104 00:00,1276300,0.4061591232053514 +20120105 00:00,1281000,0.4063642543433135 +20120106 00:00,1278200,0.4068056125009516 +20120109 00:00,1279900,0.40745612524114744 +20120110 00:00,1291300,0.4084465639040606 +20120111 00:00,1292500,0.4095233609679668 +20120112 00:00,1295100,0.41084665679014026 +20120113 00:00,1290100,0.41190356637297054 +20120117 00:00,1293100,0.41307093888570645 +20120118 00:00,1308000,0.41442398458623025 +20120119 00:00,1314800,0.4149285062277897 +20120120 00:00,1319500,0.4151866527327607 +20120123 00:00,1315800,0.4154204191864172 +20120124 00:00,1314600,0.4157863574175614 +20120125 00:00,1325700,0.416500694625318 +20120126 00:00,1319000,0.41743453706410627 +20120127 00:00,1317300,0.4181476349832166 +20120130 00:00,1313800,0.4190974810435455 +20120131 00:00,1312100,0.4196925693107238 +20120201 00:00,1324700,0.42024780963363884 +20120202 00:00,1326800,0.4208097574470332 +20120203 00:00,1345700,0.42127255463061514 +20120206 00:00,1344600,0.42187179191176716 +20120207 00:00,1347900,0.42246027164968913 +20120208 00:00,1351900,0.42307467377426594 +20120209 00:00,1353400,0.42386812061026174 +20120210 00:00,1344300,0.4244922384685948 +20120213 00:00,1353600,0.42512706306768905 +20120214 00:00,1351900,0.42550270007887925 +20120215 00:00,1345400,0.4255759990027547 +20120216 00:00,1360400,0.4257777848084316 +20120217 00:00,1364100,0.4261431515318716 +20120221 00:00,1364600,0.4269924742661082 +20120222 00:00,1360200,0.42712394521826846 +20120223 00:00,1366100,0.42767815219400535 +20120224 00:00,1369300,0.4283894698170914 +20120227 00:00,1371600,0.428646160772998 +20120228 00:00,1375600,0.4288540527486496 +20120229 00:00,1368700,0.4296110470063111 +20120301 00:00,1377700,0.4300050178693241 +20120302 00:00,1373200,0.4305259664418538 +20120305 00:00,1367500,0.4307373654654615 +20120306 00:00,1346700,0.4299808342228059 +20120307 00:00,1356900,0.43098367182971525 +20120308 00:00,1370200,0.43203302761694995 +20120309 00:00,1375700,0.43185423244856935 +20120312 00:00,1375800,0.43303862187830955 +20120313 00:00,1400600,0.43327161261242586 +20120314 00:00,1399100,0.432204330494213 +20120315 00:00,1407200,0.43154505723274106 +20120316 00:00,1402700,0.4313947001664552 +20120319 00:00,1408800,0.43160415930106705 +20120320 00:00,1404100,0.43186310384894977 +20120321 00:00,1401600,0.43242759459598656 +20120322 00:00,1391600,0.4326233581643306 +20120323 00:00,1396900,0.43287238513982595 +20120326 00:00,1416100,0.4332205604516727 +20120327 00:00,1411300,0.433894124694741 +20120328 00:00,1404300,0.4341674145206227 +20120329 00:00,1402200,0.4342465457075165 +20120330 00:00,1407200,0.43450928294566715 +20120402 00:00,1417900,0.434762386455386 +20120403 00:00,1412600,0.4350712057068198 +20120404 00:00,1398400,0.4348296157555257 +20120405 00:00,1397800,0.434816306354326 +20120409 00:00,1382300,0.43430641157117716 +20120410 00:00,1358400,0.4322555756495453 +20120411 00:00,1369000,0.43164872114484637 +20120412 00:00,1388500,0.43069470262274184 +20120413 00:00,1371300,0.43061992384090897 +20120416 00:00,1369300,0.4306604566778498 +20120417 00:00,1390900,0.430415144497682 +20120418 00:00,1385900,0.43134552905919227 +20120419 00:00,1377500,0.4325635552372335 +20120420 00:00,1379500,0.4331517823613193 +20120423 00:00,1367900,0.4339126940656806 +20120424 00:00,1373100,0.4350165269757599 +20120425 00:00,1392400,0.43473887046474263 +20120426 00:00,1401700,0.43352836220363344 +20120427 00:00,1404200,0.4326141787278921 +20120430 00:00,1397700,0.4323830879929554 +20120501 00:00,1407400,0.4323651829029662 +20120502 00:00,1402800,0.4324919538710165 +20120503 00:00,1392500,0.43216319817194593 +20120504 00:00,1369600,0.4307183692831222 +20120507 00:00,1371000,0.4294940531094621 +20120508 00:00,1365000,0.42811523527545753 +20120509 00:00,1357400,0.42662280179717127 +20120510 00:00,1359500,0.4256883468549849 +20120511 00:00,1355600,0.4248579952908905 +20120514 00:00,1341300,0.4239295761704031 +20120515 00:00,1333500,0.4235214362020704 +20120516 00:00,1328800,0.4234256356502712 +20120517 00:00,1308700,0.4230029367701079 +20120518 00:00,1297400,0.42315285908154765 +20120521 00:00,1320200,0.4237477343118476 +20120522 00:00,1322000,0.4247010678052244 +20120523 00:00,1322700,0.42617803688482897 +20120524 00:00,1325300,0.42743557110546276 +20120525 00:00,1321000,0.42874933079878613 +20120529 00:00,1337000,0.4290571863608874 +20120530 00:00,1317300,0.43170157330027853 +20120531 00:00,1314900,0.4329989505085544 +20120601 00:00,1281600,0.43380899685953667 +20120604 00:00,1281000,0.43401041909986166 +20120605 00:00,1290300,0.434547642535012 +20120606 00:00,1320200,0.433133694099539 +20120607 00:00,1320500,0.4314689181245577 +20120608 00:00,1331200,0.4301369117098218 +20120611 00:00,1314500,0.42910779934265963 +20120612 00:00,1330100,0.4277172309922732 +20120613 00:00,1321000,0.4275544934196767 +20120614 00:00,1335700,0.42622683498380987 +20120615 00:00,1341000,0.42502913965121897 +20120618 00:00,1344300,0.42442244981484983 +20120619 00:00,1356900,0.4236723925864687 +20120620 00:00,1354400,0.42405818456637445 +20120621 00:00,1324400,0.4232885523718411 +20120622 00:00,1334200,0.42307631329893763 +20120625 00:00,1312600,0.42332985192187855 +20120626 00:00,1320000,0.42457026024023387 +20120627 00:00,1331700,0.42594147837588187 +20120628 00:00,1327900,0.42732137595372766 +20120629 00:00,1362700,0.4270959853013297 +20120702 00:00,1364600,0.4258626663733169 +20120703 00:00,1374700,0.42483566486837654 +20120705 00:00,1368400,0.42409160642425997 +20120706 00:00,1355900,0.4233093303419841 +20120709 00:00,1353200,0.42123353564058985 +20120710 00:00,1341400,0.41683628514140103 +20120711 00:00,1341600,0.41201917660482806 +20120712 00:00,1335100,0.40497354724673196 +20120713 00:00,1357500,0.3984411200117994 +20120716 00:00,1353900,0.3901818622616075 +20120717 00:00,1363600,0.38376592877428334 +20120718 00:00,1374100,0.37333544891426745 +20120719 00:00,1377400,0.3630521907854351 +20120720 00:00,1364700,0.3494078838340491 +20120723 00:00,1350900,0.33384023895984405 +20120724 00:00,1340300,0.3181800548861909 +20120725 00:00,1339500,0.3040257488159888 +20120726 00:00,1361700,0.29379970608812517 +20120727 00:00,1388000,0.28386766601815705 +20120730 00:00,1386800,0.2786091704483309 +20120731 00:00,1377100,0.27854699947046924 +20120801 00:00,1375900,0.2824954874890487 +20120802 00:00,1366400,0.2917901674550316 +20120803 00:00,1393900,0.29764027892852885 +20120806 00:00,1396200,0.2998788755712674 +20120807 00:00,1403200,0.3009188747318304 +20120808 00:00,1404900,0.30154747416502853 +20120809 00:00,1406300,0.3063148439978748 +20120810 00:00,1408400,0.3082163080698924 +20120813 00:00,1407700,0.3100519454882752 +20120814 00:00,1407900,0.31439323474333786 +20120815 00:00,1409500,0.32034194755671247 +20120816 00:00,1420100,0.32785796605946993 +20120817 00:00,1422200,0.3295353664860568 +20120820 00:00,1422200,0.3331488700734497 +20120821 00:00,1417600,0.33791063460755905 +20120822 00:00,1418200,0.3395585192113033 +20120823 00:00,1406800,0.33951345839754116 +20120824 00:00,1415200,0.3431710414525233 +20120827 00:00,1415400,0.34414286081494094 +20120828 00:00,1414000,0.3425454774917691 +20120829 00:00,1415100,0.34130595606229863 +20120830 00:00,1404900,0.34129075292642086 +20120831 00:00,1412400,0.34029606650625316 +20120904 00:00,1408700,0.3389374381031516 +20120905 00:00,1409400,0.3377429372226301 +20120906 00:00,1437800,0.3346061812048985 +20120907 00:00,1443900,0.33023197161627293 +20120910 00:00,1435100,0.33079819278487943 +20120911 00:00,1438900,0.3315377069349565 +20120912 00:00,1443900,0.3321651139705695 +20120913 00:00,1467000,0.3303454898588091 +20120914 00:00,1472400,0.3297729911317997 +20120917 00:00,1467400,0.33333279083695344 +20120918 00:00,1466200,0.3394656178881064 +20120919 00:00,1467400,0.3492288704217566 +20120920 00:00,1467500,0.35109416448913283 +20120921 00:00,1458900,0.3507542783855511 +20120924 00:00,1455900,0.34972973022439396 +20120925 00:00,1441900,0.34868800398245214 +20120926 00:00,1432900,0.3501842962584601 +20120927 00:00,1447200,0.3497354670834061 +20120928 00:00,1439300,0.3517580217112787 +20121001 00:00,1442400,0.3452216810037476 +20121002 00:00,1445000,0.3393937999243087 +20121003 00:00,1450700,0.33544089464030874 +20121004 00:00,1462700,0.3314296300871755 +20121005 00:00,1461300,0.32901798740694027 +20121008 00:00,1456600,0.3279175614996866 +20121009 00:00,1442500,0.3264725217439407 +20121010 00:00,1432800,0.32480285858000485 +20121011 00:00,1433600,0.3246415301739243 +20121012 00:00,1428400,0.32476125563147684 +20121015 00:00,1440100,0.3254068070526389 +20121016 00:00,1455800,0.3245491029452542 +20121017 00:00,1461600,0.3237905139414576 +20121018 00:00,1458600,0.3254847735658664 +20121019 00:00,1433000,0.32744440710207223 +20121022 00:00,1434100,0.32739067737143274 +20121023 00:00,1413500,0.3257482986316875 +20121024 00:00,1410500,0.32926348914624065 +20121025 00:00,1414300,0.329957052927132 +20121026 00:00,1413500,0.32741090459962124 +20121031 00:00,1411800,0.3271177441540538 +20121101 00:00,1429100,0.32281420223795165 +20121102 00:00,1415600,0.32714575747768304 +20121105 00:00,1419000,0.3269272042147996 +20121106 00:00,1429300,0.32332163501283523 +20121107 00:00,1397800,0.3232163234981947 +20121108 00:00,1379500,0.32143090647355976 +20121109 00:00,1381600,0.32235917747471976 +20121112 00:00,1382400,0.3269654650867611 +20121113 00:00,1378000,0.33147352631922866 +20121114 00:00,1359800,0.3392110033014757 +20121115 00:00,1357000,0.34824857691857936 +20121116 00:00,1363500,0.36095968230378483 +20121119 00:00,1391500,0.3660242119408952 +20121120 00:00,1392800,0.3689384130851475 +20121121 00:00,1394500,0.37333853073178574 +20121123 00:00,1413300,0.37311996622790905 +20121126 00:00,1411700,0.37382442457217246 +20121127 00:00,1403800,0.3788171841199447 +20121128 00:00,1414800,0.38901040083663596 +20121129 00:00,1421600,0.3961594761876742 +20121130 00:00,1420600,0.4033538912853997 +20121203 00:00,1414700,0.40348841990117906 +20121204 00:00,1412200,0.4040004334641321 +20121205 00:00,1415000,0.4051359421504031 +20121206 00:00,1419100,0.40687129722909404 +20121207 00:00,1424000,0.4100140430732784 +20121210 00:00,1425200,0.41405453076000714 +20121211 00:00,1434200,0.4158217349020097 +20121212 00:00,1435400,0.4222472016346304 +20121213 00:00,1426600,0.4250624954621557 +20121214 00:00,1421200,0.4246030975876898 +20121217 00:00,1437900,0.42339417707369187 +20121218 00:00,1454100,0.4212877564485335 +20121219 00:00,1442700,0.4204451499343224 +20121220 00:00,1451400,0.4216665801986055 +20121221 00:00,1427700,0.4191909914205089 +20121224 00:00,1423300,0.4156467089311015 +20121226 00:00,1416500,0.4120668903786436 +20121227 00:00,1415900,0.4099280818687353 +20121228 00:00,1398700,0.40644840196571724 +20121231 00:00,1425200,0.40436978918337524 +20130102 00:00,1461500,0.3955637842486624 +20130103 00:00,1457300,0.39024904247464304 +20130104 00:00,1464500,0.38630451123945714 +20130107 00:00,1459200,0.384022869549504 +20130108 00:00,1455300,0.38225870224342146 +20130109 00:00,1459900,0.3809813616136636 +20130110 00:00,1470700,0.37983426130812536 +20130111 00:00,1470700,0.37924754314319037 +20130114 00:00,1469600,0.37898517102299506 +20130115 00:00,1470700,0.37906318885162105 +20130116 00:00,1470500,0.3794655967013563 +20130117 00:00,1479700,0.38048204718964884 +20130118 00:00,1483300,0.38150591131826805 +20130122 00:00,1491000,0.3829881570784535 +20130123 00:00,1493700,0.38507041438433615 +20130124 00:00,1494200,0.3869583661800578 +20130125 00:00,1502500,0.388875266521846 +20130128 00:00,1500700,0.3912316845074713 +20130129 00:00,1506600,0.3928665972356864 +20130130 00:00,1500800,0.3932845350941581 +20130131 00:00,1497000,0.39307608383656506 +20130201 00:00,1512800,0.39439505784723644 +20130204 00:00,1495300,0.39476931347247257 +20130205 00:00,1510800,0.39578863442007506 +20130206 00:00,1511800,0.39619774833254234 +20130207 00:00,1509600,0.3965939114958245 +20130208 00:00,1518000,0.3971588538084574 +20130211 00:00,1517700,0.39779309927721684 +20130212 00:00,1520000,0.3983731695031989 +20130213 00:00,1521500,0.39894135003744585 +20130214 00:00,1523100,0.39940448815610635 +20130215 00:00,1521700,0.3995789803608174 +20130219 00:00,1532000,0.40004466176432846 +20130220 00:00,1512600,0.39927122082704947 +20130221 00:00,1504000,0.3969121910578907 +20130222 00:00,1518900,0.3962175762599008 +20130225 00:00,1490100,0.39389968248406226 +20130226 00:00,1500200,0.39246544018467283 +20130227 00:00,1519100,0.39093275651633047 +20130228 00:00,1515300,0.3899404887499053 +20130301 00:00,1521100,0.38935446085627884 +20130304 00:00,1529200,0.38808257397706347 +20130305 00:00,1542900,0.38724137957335725 +20130306 00:00,1545000,0.3869009523670553 +20130307 00:00,1548200,0.3858520159997756 +20130308 00:00,1554400,0.38597721899692794 +20130311 00:00,1560300,0.38673599175820894 +20130312 00:00,1556400,0.38807401265584596 +20130313 00:00,1558400,0.3904099242394119 +20130314 00:00,1567300,0.3933482522478568 +20130315 00:00,1558800,0.3940326142398616 +20130318 00:00,1549700,0.39358134301986136 +20130319 00:00,1546100,0.39232331555173067 +20130320 00:00,1556300,0.39235394586808464 +20130321 00:00,1543400,0.39128363919294246 +20130322 00:00,1556000,0.3912144287272794 +20130325 00:00,1550700,0.3907117960270233 +20130326 00:00,1561500,0.39166705132629803 +20130327 00:00,1561600,0.3911580617423345 +20130328 00:00,1565500,0.38933544475732823 +20130401 00:00,1560500,0.38788206134366715 +20130402 00:00,1568200,0.38703916966617735 +20130403 00:00,1551500,0.3866774670468572 +20130404 00:00,1558500,0.3865539868825346 +20130405 00:00,1551800,0.3882465025875748 +20130408 00:00,1562100,0.39078276969162834 +20130409 00:00,1567500,0.39265528500598745 +20130410 00:00,1587300,0.39410555434052985 +20130411 00:00,1592200,0.39253286602398935 +20130412 00:00,1587800,0.3931446080745989 +20130415 00:00,1551700,0.3891588987251409 +20130416 00:00,1574200,0.38841498047721784 +20130417 00:00,1550400,0.386293928716199 +20130418 00:00,1541400,0.3826639467332004 +20130419 00:00,1554800,0.38039112972048217 +20130422 00:00,1562000,0.3776221741985923 +20130423 00:00,1577900,0.37381018579046815 +20130424 00:00,1579000,0.3692341543982774 +20130425 00:00,1586100,0.3674410152922805 +20130426 00:00,1582600,0.36526798329216936 +20130429 00:00,1593000,0.3578755423244994 +20130430 00:00,1596800,0.34856342524944894 +20130501 00:00,1583200,0.3389467116731542 +20130502 00:00,1597200,0.3311029407237395 +20130503 00:00,1613200,0.3221978472305208 +20130506 00:00,1617800,0.3153269792262614 +20130507 00:00,1626300,0.3081793910702698 +20130508 00:00,1633400,0.3026717006330966 +20130509 00:00,1629300,0.2977267908490764 +20130510 00:00,1634100,0.29488240322325376 +20130513 00:00,1635400,0.2941712988336914 +20130514 00:00,1652800,0.29639430044740783 +20130515 00:00,1661500,0.30044566236393766 +20130516 00:00,1653400,0.3045269800442623 +20130517 00:00,1669700,0.31029294074402025 +20130520 00:00,1669700,0.3153396719306077 +20130521 00:00,1671100,0.31946220579664625 +20130522 00:00,1659200,0.3228282248347565 +20130523 00:00,1654500,0.3233187357483823 +20130524 00:00,1653300,0.32406895623780907 +20130528 00:00,1663000,0.3262505582278664 +20130529 00:00,1652200,0.3279214032590558 +20130530 00:00,1658900,0.3300271504975316 +20130531 00:00,1632400,0.33295492770714097 +20130603 00:00,1643800,0.3358117880758452 +20130604 00:00,1635600,0.3377702524761519 +20130605 00:00,1611800,0.3367672581367799 +20130606 00:00,1626400,0.34054613066457834 +20130607 00:00,1648100,0.3409706566171537 +20130610 00:00,1648000,0.3403047463728288 +20130611 00:00,1631200,0.34215804723672855 +20130612 00:00,1617500,0.3441070013072912 +20130613 00:00,1642200,0.3461704414359421 +20130614 00:00,1631700,0.3487115519840954 +20130617 00:00,1645000,0.3509649798630461 +20130618 00:00,1656900,0.3504730404204838 +20130619 00:00,1635400,0.3528386619762827 +20130620 00:00,1592700,0.349287048725428 +20130621 00:00,1590500,0.34960099883171797 +20130624 00:00,1569900,0.35093807338519195 +20130625 00:00,1586500,0.3535917670278171 +20130626 00:00,1601700,0.35513365855188833 +20130627 00:00,1611300,0.35690969759470537 +20130628 00:00,1600100,0.36150618360907794 +20130701 00:00,1614000,0.36491949225200426 +20130702 00:00,1611600,0.3696640196043348 +20130703 00:00,1613400,0.37100450049237527 +20130705 00:00,1630500,0.3706562283886259 +20130708 00:00,1639400,0.3707808388145485 +20130709 00:00,1650800,0.37008150979123583 +20130710 00:00,1652100,0.36982884675966154 +20130711 00:00,1675100,0.3681996103036631 +20130712 00:00,1675100,0.36755657381889884 +20130715 00:00,1682200,0.368608019906954 +20130716 00:00,1675000,0.3710398532677169 +20130717 00:00,1679700,0.37422418182922595 +20130718 00:00,1688800,0.37908211584748386 +20130719 00:00,1692300,0.384926819460412 +20130722 00:00,1695000,0.39229377274675203 +20130723 00:00,1691400,0.4003567120654416 +20130724 00:00,1685500,0.4042533647607006 +20130725 00:00,1689300,0.4062035487062784 +20130726 00:00,1691100,0.40902605451172186 +20130729 00:00,1685300,0.41328415378648653 +20130730 00:00,1686000,0.4143051540480621 +20130731 00:00,1686600,0.41578679927763335 +20130801 00:00,1706500,0.41707367206463636 +20130802 00:00,1709500,0.4172569904693447 +20130805 00:00,1708000,0.4180680805297438 +20130806 00:00,1697300,0.42017165132118917 +20130807 00:00,1691800,0.4193093317823358 +20130808 00:00,1698100,0.4191089983186205 +20130809 00:00,1693000,0.4186589223189264 +20130812 00:00,1691000,0.4182111171241025 +20130813 00:00,1696900,0.4180380652133477 +20130814 00:00,1687400,0.41790442933579774 +20130815 00:00,1662700,0.41543672159048833 +20130816 00:00,1658700,0.41351619483905383 +20130819 00:00,1647600,0.4124259426532007 +20130820 00:00,1655900,0.41319647246393104 +20130821 00:00,1645600,0.4151579711275943 +20130822 00:00,1660600,0.41717417427272435 +20130823 00:00,1666700,0.4180712651610311 +20130826 00:00,1659700,0.42002327254799154 +20130827 00:00,1632900,0.42139614665568126 +20130828 00:00,1639100,0.4238061454798565 +20130829 00:00,1642200,0.4268795549356348 +20130830 00:00,1636500,0.43039604422954464 +20130903 00:00,1643800,0.433158285710493 +20130904 00:00,1657600,0.4339153600207033 +20130905 00:00,1658600,0.43518702200011544 +20130906 00:00,1660400,0.4381809220239426 +20130909 00:00,1676700,0.4399409259327639 +20130910 00:00,1688400,0.4376954995334133 +20130911 00:00,1693700,0.4361416316581057 +20130912 00:00,1690400,0.4371546058814573 +20130913 00:00,1693300,0.4393812724039492 +20130916 00:00,1703800,0.44129040487706117 +20130917 00:00,1710700,0.44099817998613483 +20130918 00:00,1731400,0.4401936978663213 +20130919 00:00,1728100,0.44099960158669227 +20130920 00:00,1706200,0.44076823156755585 +20130923 00:00,1699400,0.4395271521926871 +20130924 00:00,1695700,0.4392418239175092 +20130925 00:00,1691100,0.4387509757833908 +20130926 00:00,1696900,0.43920393261111945 +20130927 00:00,1689500,0.4382015963439662 +20130930 00:00,1681000,0.436768523064135 +20131001 00:00,1694000,0.4357739294769932 +20131002 00:00,1691100,0.4351574838982187 +20131003 00:00,1676200,0.4340579829888515 +20131004 00:00,1688900,0.4336866234306194 +20131007 00:00,1674200,0.4329868760282894 +20131008 00:00,1654800,0.4310836950242725 +20131009 00:00,1655700,0.43139421171389375 +20131010 00:00,1692400,0.42938848280274455 +20131011 00:00,1703000,0.4233826003834735 +20131014 00:00,1710400,0.41853384605844096 +20131015 00:00,1697200,0.416636272516739 +20131016 00:00,1720500,0.4143639495324986 +20131017 00:00,1732700,0.40781412587984317 +20131018 00:00,1743600,0.3994750968326648 +20131021 00:00,1744500,0.393708844365464 +20131022 00:00,1753500,0.3897315047837944 +20131023 00:00,1746200,0.38712162300269687 +20131024 00:00,1752400,0.385443597878605 +20131025 00:00,1759300,0.3854171667299061 +20131028 00:00,1762400,0.38653821292091717 +20131029 00:00,1772200,0.3884431078698084 +20131030 00:00,1763300,0.39064165747055546 +20131031 00:00,1757300,0.3922055137703445 +20131101 00:00,1761400,0.39526157220521774 +20131104 00:00,1768600,0.3998061719292095 +20131105 00:00,1762800,0.40562395193475653 +20131106 00:00,1771800,0.41629715455056826 +20131107 00:00,1749700,0.4176482320986669 +20131108 00:00,1773100,0.41884616148325127 +20131111 00:00,1772900,0.4197932366548846 +20131112 00:00,1769800,0.42164351593950905 +20131113 00:00,1783200,0.4223499218878452 +20131114 00:00,1793200,0.4216020047477074 +20131115 00:00,1801200,0.42277124197289295 +20131118 00:00,1795000,0.4245535731516845 +20131119 00:00,1790300,0.42430622878625224 +20131120 00:00,1785100,0.42409877758130965 +20131121 00:00,1799700,0.4243628227140097 +20131122 00:00,1808100,0.4241250229328217 +20131125 00:00,1807100,0.4240520233912292 +20131126 00:00,1806400,0.42444228710776855 +20131127 00:00,1811200,0.4245553263132354 +20131129 00:00,1809300,0.4245325459386839 +20131202 00:00,1805400,0.4241178014874323 +20131203 00:00,1798500,0.4229809435918825 +20131204 00:00,1796700,0.4220060785063755 +20131205 00:00,1790100,0.42078523190428885 +20131206 00:00,1809500,0.42052231187543326 +20131209 00:00,1814000,0.41958197845085793 +20131210 00:00,1807500,0.419387109209453 +20131211 00:00,1787200,0.4181469907244757 +20131212 00:00,1781300,0.41675752415418343 +20131213 00:00,1781100,0.4168651801162339 +20131216 00:00,1792200,0.41877424098194577 +20131217 00:00,1785400,0.4202152610430177 +20131218 00:00,1817000,0.4209536351225766 +20131219 00:00,1815000,0.4214382659116902 +20131220 00:00,1815800,0.4253182587306797 +20131223 00:00,1825400,0.4249039516020875 +20131224 00:00,1829300,0.42428810311251725 +20131226 00:00,1838400,0.4235243209055406 +20131227 00:00,1838400,0.42371018872066146 +20131230 00:00,1838200,0.4305365633420866 +20131231 00:00,1846700,0.4320609531540627 +20140102 00:00,1829200,0.43171699837664623 +20140103 00:00,1828800,0.4305241537581938 +20140106 00:00,1823600,0.42961227985602674 +20140107 00:00,1834300,0.4293664527849425 +20140108 00:00,1835200,0.4292672995157574 +20140109 00:00,1836400,0.4292223333722247 +20140110 00:00,1841400,0.4295213004045854 +20140113 00:00,1816600,0.427853776531247 +20140114 00:00,1837200,0.42787648458933947 +20140115 00:00,1846900,0.42691229628177546 +20140116 00:00,1843900,0.42692909045084826 +20140117 00:00,1836500,0.4268330374183068 +20140121 00:00,1841800,0.42686555209589927 +20140122 00:00,1843000,0.42689392267840315 +20140123 00:00,1827900,0.42662214859239056 +20140124 00:00,1788300,0.419540723068517 +20140127 00:00,1780100,0.4128327438650864 +20140128 00:00,1791000,0.41192463304490085 +20140129 00:00,1772800,0.41268012885515715 +20140130 00:00,1792300,0.41464511426332795 +20140131 00:00,1781800,0.4177741943803197 +20140203 00:00,1741500,0.41957791533663513 +20140204 00:00,1753600,0.42458337084530645 +20140205 00:00,1751700,0.43070222746376874 +20140206 00:00,1774800,0.4343926572340447 +20140207 00:00,1797400,0.4321292319854091 +20140210 00:00,1800100,0.430771237963219 +20140211 00:00,1819800,0.42661110598414814 +20140212 00:00,1821600,0.4242368372891661 +20140213 00:00,1830000,0.42247525592516694 +20140214 00:00,1840100,0.4211783042861865 +20140218 00:00,1842600,0.42131983758704855 +20140219 00:00,1830500,0.424442934964376 +20140220 00:00,1841000,0.4256696801325528 +20140221 00:00,1839600,0.4267087394974418 +20140224 00:00,1849100,0.4292863208424477 +20140225 00:00,1848400,0.43237213603254554 +20140226 00:00,1848500,0.43514072527153275 +20140227 00:00,1858700,0.4384078617859928 +20140228 00:00,1863000,0.44234565958403316 +20140303 00:00,1849800,0.44565557889289076 +20140304 00:00,1875800,0.4500923814311613 +20140305 00:00,1876100,0.4523869569951819 +20140306 00:00,1882100,0.45450404509325676 +20140307 00:00,1882600,0.4559373735732945 +20140310 00:00,1882100,0.4567448746544837 +20140311 00:00,1872300,0.45667516740869335 +20140312 00:00,1872800,0.45656985995379706 +20140313 00:00,1851800,0.454242301534212 +20140314 00:00,1846600,0.4523467729889968 +20140317 00:00,1863300,0.4520663939200621 +20140318 00:00,1876600,0.4507690462155674 +20140319 00:00,1866600,0.45038523471299585 +20140320 00:00,1877500,0.44973817890035467 +20140321 00:00,1861900,0.4496256764293282 +20140324 00:00,1854000,0.44841669250527044 +20140325 00:00,1863100,0.4484211768897147 +20140326 00:00,1849700,0.44826615736776304 +20140327 00:00,1845800,0.44821939156372886 +20140328 00:00,1855000,0.44893737987173815 +20140331 00:00,1870400,0.4486273298099643 +20140401 00:00,1882700,0.44723517240552046 +20140402 00:00,1888600,0.44597540583983536 +20140403 00:00,1886000,0.4457929896866241 +20140404 00:00,1863800,0.44630197780800207 +20140407 00:00,1843400,0.4437843995070965 +20140408 00:00,1851300,0.4432823444173739 +20140409 00:00,1871500,0.44419617344295753 +20140410 00:00,1831700,0.44728433675886414 +20140411 00:00,1814800,0.44498480533662366 +20140414 00:00,1829400,0.4429816117635872 +20140415 00:00,1842400,0.44368807074484595 +20140416 00:00,1861400,0.4390032843788201 +20140417 00:00,1863900,0.43512118041745534 +20140421 00:00,1870400,0.43126550231686706 +20140422 00:00,1878900,0.42696383335303945 +20140423 00:00,1874400,0.42398019714098995 +20140424 00:00,1878100,0.42118644557006013 +20140425 00:00,1862900,0.41897833319778294 +20140428 00:00,1868800,0.4170104078198248 +20140429 00:00,1877000,0.4157664795211903 +20140430 00:00,1884300,0.41467662397505434 +20140501 00:00,1882900,0.41526405279266415 +20140502 00:00,1880600,0.4158444731353491 +20140505 00:00,1884400,0.4163975221469004 +20140506 00:00,1868100,0.41625783916961395 +20140507 00:00,1878900,0.4166427279949608 +20140508 00:00,1877000,0.4168970317356285 +20140509 00:00,1880000,0.4180084370995435 +20140512 00:00,1898100,0.41901043571326674 +20140513 00:00,1899600,0.41992686322251677 +20140514 00:00,1890400,0.4190184685669673 +20140515 00:00,1874000,0.4163525048067025 +20140516 00:00,1881100,0.41519719649522335 +20140519 00:00,1887000,0.41333314868132076 +20140520 00:00,1875500,0.41200759098104617 +20140521 00:00,1891300,0.41110744212285605 +20140522 00:00,1896000,0.4092241681045977 +20140523 00:00,1903800,0.40699394044739134 +20140527 00:00,1915700,0.4034947891903994 +20140528 00:00,1913800,0.4003333035502738 +20140529 00:00,1924000,0.39763158899244205 +20140530 00:00,1926300,0.3952573474042521 +20140602 00:00,1929100,0.3937024592772636 +20140603 00:00,1928100,0.39288243897346276 +20140604 00:00,1931900,0.3915304090872234 +20140605 00:00,1944600,0.3938508978663136 +20140606 00:00,1954100,0.39376305730803457 +20140609 00:00,1955700,0.39373887447072886 +20140610 00:00,1955900,0.3949008904898434 +20140611 00:00,1949200,0.3957590869730262 +20140612 00:00,1935400,0.3960678110438111 +20140613 00:00,1941600,0.3976472681610452 +20140616 00:00,1942900,0.4004563339719136 +20140617 00:00,1948300,0.4067367295543991 +20140618 00:00,1962600,0.42194598858207427 +20140619 00:00,1964800,0.4304460405392509 +20140620 00:00,1959400,0.4286661461762063 +20140623 00:00,1958800,0.4251281888793745 +20140624 00:00,1947100,0.4204668831110883 +20140625 00:00,1955800,0.4165448095884578 +20140626 00:00,1954500,0.4131420998879333 +20140627 00:00,1957900,0.41063053609446215 +20140630 00:00,1957200,0.4079932442581432 +20140701 00:00,1970600,0.40620270970657146 +20140702 00:00,1972200,0.405503020737678 +20140703 00:00,1982500,0.40567878405763635 +20140707 00:00,1975100,0.40613568277128687 +20140708 00:00,1962800,0.4060045589206647 +20140709 00:00,1971200,0.40673642373718166 +20140710 00:00,1963500,0.4073741368579319 +20140711 00:00,1966000,0.40711873407093857 +20140714 00:00,1976000,0.40699966822670625 +20140715 00:00,1972300,0.4069264368117499 +20140716 00:00,1979600,0.4072251386590449 +20140717 00:00,1957100,0.4067852032412959 +20140718 00:00,1977400,0.4063803091000502 +20140721 00:00,1973400,0.4053086705682237 +20140722 00:00,1982000,0.40380934994624296 +20140723 00:00,1986400,0.401861064377412 +20140724 00:00,1986500,0.40002499794619695 +20140725 00:00,1977400,0.3978486708124419 +20140728 00:00,1978000,0.39549369559985914 +20140729 00:00,1969300,0.393583343068889 +20140730 00:00,1969800,0.3917482945208303 +20140731 00:00,1930900,0.3857218880822718 +20140801 00:00,1924800,0.37628743177458673 +20140804 00:00,1938800,0.37052302781664015 +20140805 00:00,1920100,0.36623469915553636 +20140806 00:00,1920700,0.36413822079861385 +20140807 00:00,1909900,0.3646210083008701 +20140808 00:00,1932400,0.3645442353665117 +20140811 00:00,1938000,0.36462600218941577 +20140812 00:00,1935400,0.3673789718666711 +20140813 00:00,1948900,0.3713962036752055 +20140814 00:00,1957600,0.37388209846387993 +20140815 00:00,1957100,0.37529072515589307 +20140818 00:00,1973200,0.37445771344701745 +20140819 00:00,1983900,0.3721020808574375 +20140820 00:00,1989200,0.37049690181156947 +20140821 00:00,1995000,0.3690391513146392 +20140822 00:00,1991900,0.37012934363323574 +20140825 00:00,2002000,0.37433623090750967 +20140826 00:00,2003300,0.37701468850191655 +20140827 00:00,2002500,0.3769144107928369 +20140828 00:00,2001400,0.37775166565393437 +20140829 00:00,2007100,0.37969504201649706 +20140902 00:00,2006100,0.3823491344363124 +20140903 00:00,2005000,0.385185318623101 +20140904 00:00,2002200,0.3874633055726189 +20140905 00:00,2011100,0.39112188787998053 +20140908 00:00,2005900,0.3946386548168618 +20140909 00:00,1993200,0.3946813961537108 +20140910 00:00,2000700,0.39424117102280115 +20140911 00:00,2003000,0.39313929077444704 +20140912 00:00,1991200,0.39263492482752604 +20140915 00:00,1990200,0.39254797306503075 +20140916 00:00,2005200,0.3919809297831323 +20140917 00:00,2007500,0.3902063646443497 +20140918 00:00,2018200,0.38947744971840714 +20140919 00:00,2007000,0.39101593277421237 +20140922 00:00,1991500,0.3902856938365424 +20140923 00:00,1980100,0.38876710134013737 +20140924 00:00,1995700,0.38884440644377977 +20140925 00:00,1963300,0.3881410084858394 +20140926 00:00,1979000,0.38913981358681293 +20140929 00:00,1974900,0.3895510520446024 +20140930 00:00,1970200,0.38950017465313513 +20141001 00:00,1943700,0.3907474424860226 +20141002 00:00,1944200,0.3920582441385266 +20141003 00:00,1965200,0.39130226295977344 +20141006 00:00,1963000,0.3938365309572802 +20141007 00:00,1933000,0.3943996912074991 +20141008 00:00,1966100,0.3952927109835416 +20141009 00:00,1927000,0.4005874219362082 +20141010 00:00,1905400,0.4002656021725263 +20141013 00:00,1874500,0.399779836474422 +20141014 00:00,1878300,0.4053152521385729 +20141015 00:00,1864300,0.4163664873161096 +20141016 00:00,1862700,0.4271005597382253 +20141017 00:00,1884700,0.4343521846658086 +20141020 00:00,1903000,0.4357280901041597 +20141021 00:00,1940700,0.4254469933684812 +20141022 00:00,1926900,0.42294265094701367 +20141023 00:00,1949300,0.4178098444121572 +20141024 00:00,1964300,0.41137408344754406 +20141027 00:00,1961600,0.4083497233151643 +20141028 00:00,1984100,0.404860672659636 +20141029 00:00,1981100,0.40455351149333124 +20141030 00:00,1993800,0.40486955940743286 +20141031 00:00,2016600,0.4055122570854498 +20141103 00:00,2017700,0.40886958691021236 +20141104 00:00,2010700,0.41447559048259414 +20141105 00:00,2023400,0.4220959421355604 +20141106 00:00,2031500,0.43130488831693947 +20141107 00:00,2033400,0.4419784530184286 +20141110 00:00,2039800,0.45261090208430693 +20141111 00:00,2041600,0.46248044085983614 +20141112 00:00,2039600,0.47163982663330284 +20141113 00:00,2041900,0.47854967109483093 +20141114 00:00,2042400,0.48321935919162673 +20141117 00:00,2043700,0.48681793692887315 +20141118 00:00,2055500,0.4897948231373316 +20141119 00:00,2052200,0.4923291601358207 +20141120 00:00,2055800,0.49501883972045957 +20141121 00:00,2067200,0.49635334541981047 +20141124 00:00,2072600,0.4972380332286098 +20141125 00:00,2072500,0.49806350136915384 +20141126 00:00,2076400,0.4989413020537806 +20141128 00:00,2072000,0.49983735362527043 +20141201 00:00,2058000,0.4995692809962756 +20141202 00:00,2070900,0.5001494572150675 +20141203 00:00,2079100,0.5002988895055329 +20141204 00:00,2076400,0.5006007752337185 +20141205 00:00,2080000,0.5011858691356684 +20141208 00:00,2066100,0.5018529449052571 +20141209 00:00,2064700,0.5037553414048912 +20141210 00:00,2031600,0.5010805782075191 +20141211 00:00,2042300,0.49889437806909653 +20141212 00:00,2009400,0.49494952293711675 +20141215 00:00,1995100,0.4907837503413891 +20141216 00:00,1979000,0.4886600636923441 +20141217 00:00,2017900,0.4910700387706814 +20141218 00:00,2068400,0.47847948544655594 +20141219 00:00,2063300,0.4716486843392069 +20141222 00:00,2074700,0.4668128183841822 +20141223 00:00,2077500,0.4636982223972677 +20141224 00:00,2078100,0.4617451503955234 +20141226 00:00,2084400,0.4599365356104374 +20141229 00:00,2087200,0.45864740068714976 +20141230 00:00,2076000,0.45756809411104027 +20141231 00:00,2055000,0.4548682926838082 +20150102 00:00,2054300,0.4523684337741706 +20150105 00:00,2017600,0.4453837486686303 +20150106 00:00,1998200,0.43610554359157155 +20150107 00:00,2023100,0.4316306028177001 +20150108 00:00,2059000,0.4244855420197193 +20150109 00:00,2041900,0.4204237200165304 +20150112 00:00,2026500,0.41599041857214447 +20150113 00:00,2020800,0.41531557278920417 +20150114 00:00,2009400,0.4132911022888801 +20150115 00:00,1989700,0.4119752505614996 +20150116 00:00,2016300,0.4132947815857406 +20150120 00:00,2020800,0.4153173913101808 +20150121 00:00,2030600,0.41908705058073475 +20150122 00:00,2060500,0.4226389458654152 +20150123 00:00,2049700,0.42716852457834953 +20150126 00:00,2054400,0.4268831617981832 +20150127 00:00,2027900,0.42671396001462036 +20150128 00:00,2001400,0.42436123419090777 +20150129 00:00,2020100,0.42314831332733865 +20150130 00:00,1994700,0.4251294574210466 +20150202 00:00,2019000,0.42507260836595434 +20150203 00:00,2048400,0.4194755559856413 +20150204 00:00,2040600,0.4168219673063777 +20150205 00:00,2061800,0.4153388591293218 +20150206 00:00,2055300,0.41400436301226795 +20150209 00:00,2046300,0.4128475692364566 +20150210 00:00,2067700,0.41228613677591297 +20150211 00:00,2069300,0.41164356187611795 +20150212 00:00,2089200,0.41120832226034904 +20150213 00:00,2097800,0.4108885260920006 +20150217 00:00,2101600,0.41142088756997836 +20150218 00:00,2101500,0.41252117198621846 +20150219 00:00,2099800,0.4139273435832907 +20150220 00:00,2112800,0.41599600709933476 +20150223 00:00,2111900,0.41849222162161526 +20150224 00:00,2118100,0.42150457231176075 +20150225 00:00,2116100,0.4247766084656513 +20150226 00:00,2113700,0.42785846411674505 +20150227 00:00,2106600,0.4295063352737921 +20150302 00:00,2119900,0.4316696816472718 +20150303 00:00,2111200,0.4339272354760045 +20150304 00:00,2102100,0.4333842216790366 +20150305 00:00,2105100,0.43325083209816595 +20150306 00:00,2075000,0.4307753167874444 +20150309 00:00,2083600,0.4298845700492487 +20150310 00:00,2050000,0.4273207769382083 +20150311 00:00,2045000,0.4254197907230755 +20150312 00:00,2071300,0.4258899539785983 +20150313 00:00,2058400,0.42714186399610415 +20150316 00:00,2086400,0.42737324805988847 +20150317 00:00,2079900,0.42698042261431646 +20150318 00:00,2104200,0.4244293234408182 +20150319 00:00,2095000,0.42363650303546624 +20150320 00:00,2104500,0.4231824885026619 +20150323 00:00,2100000,0.4229782741533931 +20150324 00:00,2088200,0.4231681058144232 +20150325 00:00,2057600,0.4214395802086919 +20150326 00:00,2052700,0.42018528517427917 +20150327 00:00,2057500,0.42156490291663434 +20150330 00:00,2082400,0.4222070082833738 +20150331 00:00,2064300,0.42300903941136725 +20150401 00:00,2057000,0.4237088255856681 +20150402 00:00,2064000,0.4264120286728299 +20150406 00:00,2078400,0.42956838896851346 +20150407 00:00,2072800,0.430790684623976 +20150408 00:00,2080200,0.431666127285856 +20150409 00:00,2089200,0.43259069177494874 +20150410 00:00,2100600,0.4362604921208278 +20150413 00:00,2090600,0.43630845119563244 +20150414 00:00,2094900,0.43787572751637494 +20150415 00:00,2104700,0.4391587928152896 +20150416 00:00,2104000,0.43995337593667133 +20150417 00:00,2079800,0.4393475982964127 +20150420 00:00,2098500,0.4396858778158931 +20150421 00:00,2096000,0.4396060581774579 +20150422 00:00,2106600,0.43981894164173624 +20150423 00:00,2112100,0.4400828468301675 +20150424 00:00,2116700,0.44037331144255776 +20150427 00:00,2107400,0.4408581609151497 +20150428 00:00,2114400,0.44128462403055135 +20150429 00:00,2105300,0.4412708890042627 +20150430 00:00,2085200,0.4396607234315854 +20150501 00:00,2107200,0.4397106378128835 +20150504 00:00,2113900,0.4391021575437906 +20150505 00:00,2089200,0.43845305978929205 +20150506 00:00,2080400,0.4365199058555475 +20150507 00:00,2088700,0.43585331167465596 +20150508 00:00,2116500,0.4341460976272008 +20150511 00:00,2106000,0.43306347066396783 +20150512 00:00,2099800,0.43290387129942764 +20150513 00:00,2100600,0.43341044730026607 +20150514 00:00,2122500,0.432087609482673 +20150515 00:00,2124400,0.4299524987146536 +20150518 00:00,2131000,0.4282545736543077 +20150519 00:00,2130300,0.4271499984750562 +20150520 00:00,2128800,0.4266540042654043 +20150521 00:00,2135000,0.4262332874713242 +20150522 00:00,2130000,0.4261458306283718 +20150526 00:00,2107100,0.42447547899501037 +20150527 00:00,2126700,0.42438374997877926 +20150528 00:00,2125000,0.4241960608610356 +20150529 00:00,2111300,0.42363865494163033 +20150601 00:00,2115400,0.4234469930808693 +20150602 00:00,2113900,0.42351456623617406 +20150603 00:00,2119200,0.4241002866450867 +20150604 00:00,2102700,0.4244579898794284 +20150605 00:00,2097600,0.42401781363507046 +20150608 00:00,2084800,0.42357252421822056 +20150609 00:00,2084700,0.4239109172743796 +20150610 00:00,2109500,0.42421028164145225 +20150611 00:00,2116300,0.42313809275002484 +20150612 00:00,2100100,0.42371094407077714 +20150615 00:00,2091100,0.4240682404123437 +20150616 00:00,2102500,0.42490747992059313 +20150617 00:00,2105900,0.4252598543825196 +20150618 00:00,2127800,0.4240144536089612 +20150619 00:00,2108100,0.4245008080505719 +20150622 00:00,2118900,0.42446472496592136 +20150623 00:00,2120400,0.4242783624927957 +20150624 00:00,2105000,0.42417643237286057 +20150625 00:00,2098600,0.42357260986225576 +20150626 00:00,2098200,0.42337534361843066 +20150629 00:00,2054200,0.4198682256804212 +20150630 00:00,2058500,0.41772884218724604 +20150701 00:00,2075000,0.41723704751741425 +20150702 00:00,2073100,0.41687140396787054 +20150706 00:00,2067200,0.4172081608341203 +20150707 00:00,2080200,0.4169545133924091 +20150708 00:00,2045300,0.4174849788422242 +20150709 00:00,2049000,0.4175162570551655 +20150710 00:00,2074800,0.41698238652168346 +20150713 00:00,2097700,0.41286654231965025 +20150714 00:00,2106800,0.40831432238144133 +20150715 00:00,2106100,0.4056370441677983 +20150716 00:00,2123000,0.40199647571362185 +20150717 00:00,2124800,0.40094852133425224 +20150720 00:00,2125900,0.3993817982026988 +20150721 00:00,2117500,0.39886881455241247 +20150722 00:00,2113700,0.39833677279848395 +20150723 00:00,2101800,0.3978008830483864 +20150724 00:00,2080000,0.3959271305852023 +20150727 00:00,2067900,0.39373885499002587 +20150728 00:00,2093300,0.39581650559479464 +20150729 00:00,2107700,0.39786233986056657 +20150730 00:00,2108200,0.4009735285119839 +20150731 00:00,2105000,0.3997344599382264 +20150803 00:00,2097900,0.39789607849966024 +20150804 00:00,2093800,0.39730435749163956 +20150805 00:00,2100700,0.3953160404094861 +20150806 00:00,2083500,0.39315504308321864 +20150807 00:00,2079500,0.39114257602115604 +20150810 00:00,2105700,0.38934083038947354 +20150811 00:00,2086700,0.38883740005183526 +20150812 00:00,2089200,0.38873789968627936 +20150813 00:00,2086600,0.3890179186570365 +20150814 00:00,2094200,0.3896026953251068 +20150817 00:00,2105900,0.39028147898747445 +20150818 00:00,2099800,0.3907186383377151 +20150819 00:00,2083200,0.3906273553298049 +20150820 00:00,2039700,0.38612918858761797 +20150821 00:00,1978300,0.3712609362507523 +20150824 00:00,1895000,0.34495787868084077 +20150825 00:00,1872700,0.3336629495395435 +20150826 00:00,1944600,0.33635280948845536 +20150827 00:00,1992700,0.32860962575729963 +20150828 00:00,1992800,0.32562571662540857 +20150831 00:00,1976700,0.3280551979864661 +20150901 00:00,1917700,0.3351368425352622 +20150902 00:00,1954100,0.34091962486902044 +20150903 00:00,1955500,0.3459390432667169 +20150904 00:00,1925900,0.35387070537159054 +20150908 00:00,1974300,0.3572019807388343 +20150909 00:00,1947900,0.3626873511913588 +20150910 00:00,1958500,0.36661481371554083 +20150911 00:00,1967400,0.36922474771196967 +20150914 00:00,1960100,0.372337412302802 +20150915 00:00,1984600,0.37308613073543306 +20150916 00:00,2001800,0.3706352559775904 +20150917 00:00,1997300,0.3681164921241339 +20150918 00:00,1954500,0.36377078845531186 +20150921 00:00,1964600,0.35969566895825833 +20150922 00:00,1939100,0.3551005047925955 +20150923 00:00,1936000,0.3514923102900605 +20150924 00:00,1929000,0.34779490817684894 +20150925 00:00,1928500,0.3462136279452027 +20150928 00:00,1880100,0.3431210479252099 +20150929 00:00,1881200,0.3414159667301145 +20150930 00:00,1916300,0.34075350634471296 +20151001 00:00,1921300,0.34024116736346094 +20151002 00:00,1950000,0.33815537409329116 +20151005 00:00,1984700,0.33415032328382843 +20151006 00:00,1977900,0.3331332196354541 +20151007 00:00,1994100,0.33068125641803825 +20151008 00:00,2012100,0.33445808638906027 +20151009 00:00,2013300,0.33417632127875524 +20151012 00:00,2015200,0.3312838337418771 +20151013 00:00,2002500,0.32466376638168376 +20151014 00:00,1992900,0.31787640632126957 +20151015 00:00,2023500,0.3122895046396142 +20151016 00:00,2032700,0.3083675497498994 +20151019 00:00,2033700,0.307045570419501 +20151020 00:00,2031100,0.3065069330425598 +20151021 00:00,2018500,0.3067007829357269 +20151022 00:00,2052600,0.30969102941336457 +20151023 00:00,2075100,0.31321871797557505 +20151026 00:00,2070000,0.3176942359308838 +20151027 00:00,2066000,0.3209295196918131 +20151028 00:00,2089500,0.32449161183405834 +20151029 00:00,2088300,0.32744919779535747 +20151030 00:00,2079300,0.3290555548935453 +20151102 00:00,2103900,0.33172019492659527 +20151103 00:00,2110000,0.3342201131204436 +20151104 00:00,2103600,0.33645742854953065 +20151105 00:00,2101500,0.33842267594952385 +20151106 00:00,2100400,0.3403298240134889 +20151109 00:00,2080800,0.3406758824420409 +20151110 00:00,2085600,0.34145849033207876 +20151111 00:00,2077400,0.3417038297068166 +20151112 00:00,2049000,0.33977606977660235 +20151113 00:00,2025300,0.33622072393060515 +20151116 00:00,2056500,0.3358612402133303 +20151117 00:00,2054000,0.3352000834995278 +20151118 00:00,2086800,0.33336551458557007 +20151119 00:00,2085400,0.33190143267754424 +20151120 00:00,2093800,0.33051278322131883 +20151123 00:00,2090900,0.3291997839883187 +20151124 00:00,2093700,0.3280210085559036 +20151125 00:00,2093000,0.3271695894831905 +20151127 00:00,2095300,0.32664454858850894 +20151130 00:00,2086900,0.32632964924982133 +20151201 00:00,2106800,0.32650870986602376 +20151202 00:00,2085400,0.32677565069019043 +20151203 00:00,2055800,0.32581305828471724 +20151204 00:00,2096600,0.3269596990116562 +20151207 00:00,2082700,0.3282961104654361 +20151208 00:00,2069900,0.32952979677042255 +20151209 00:00,2053300,0.3306360367721004 +20151210 00:00,2058600,0.3311180354685685 +20151211 00:00,2018800,0.3316006657522583 +20151214 00:00,2030000,0.33250010423840487 +20151215 00:00,2050600,0.3353832963194532 +20151216 00:00,2080200,0.3414473421685897 +20151217 00:00,2048600,0.34499470949375394 +20151218 00:00,2000200,0.3429195726980135 +20151221 00:00,2017000,0.34284729783655543 +20151222 00:00,2035600,0.34213589868005706 +20151223 00:00,2060500,0.33982266163857316 +20151224 00:00,2056500,0.33877569706840494 +20151228 00:00,2052200,0.3388618025968405 +20151229 00:00,2074000,0.339024302603491 +20151230 00:00,2059300,0.34034366125177057 +20151231 00:00,2038900,0.34121603377152604 +20160104 00:00,2010100,0.340991843525749 +20160105 00:00,2013500,0.3407165572363091 +20160106 00:00,1988500,0.34167456786879224 +20160107 00:00,1939900,0.33789571593916745 +20160108 00:00,1919500,0.3359550274667347 +20160111 00:00,1921100,0.33713543521427397 +20160112 00:00,1936600,0.33932575816731797 +20160113 00:00,1888700,0.3443339910453126 +20160114 00:00,1918900,0.34864120479666627 +20160115 00:00,1878300,0.35604880752736556 +20160119 00:00,1880600,0.36233357317032205 +20160120 00:00,1858100,0.37030954735524124 +20160121 00:00,1867000,0.37797781515146556 +20160122 00:00,1905500,0.38251250862064107 +20160125 00:00,1876300,0.38995967106922946 +20160126 00:00,1902400,0.3949513580745669 +20160127 00:00,1881400,0.3981819128033524 +20160128 00:00,1891700,0.39865944170400036 +20160129 00:00,1938700,0.39426238923870716 +20160201 00:00,1936500,0.3909131888713631 +20160202 00:00,1901100,0.38908706222704476 +20160203 00:00,1912300,0.38757443051615764 +20160204 00:00,1915300,0.3860390742703759 +20160205 00:00,1879800,0.38437397853922933 +20160208 00:00,1853500,0.3808412121203064 +20160209 00:00,1853500,0.3795912860535746 +20160210 00:00,1853100,0.3792111096370655 +20160211 00:00,1830300,0.3789457733615744 +20160212 00:00,1866500,0.3789122600965135 +20160216 00:00,1898100,0.3760443812858868 +20160217 00:00,1928700,0.3711942242928762 +20160218 00:00,1920500,0.36901346268516644 +20160219 00:00,1920000,0.36790951207551786 +20160222 00:00,1948300,0.3662261257669923 +20160223 00:00,1923300,0.3659512820524435 +20160224 00:00,1932300,0.36593866303683575 +20160225 00:00,1955500,0.36631206324875776 +20160226 00:00,1951000,0.36715509859759854 +20160229 00:00,1935600,0.3680791728644738 +20160301 00:00,1982100,0.37070406389444893 +20160302 00:00,1990300,0.37335692174940804 +20160303 00:00,1997700,0.37742488570697474 +20160304 00:00,2003600,0.3828885521927551 +20160307 00:00,2006300,0.38832762137479987 +20160308 00:00,1983600,0.39267634925403333 +20160309 00:00,1994100,0.39711778348201404 +20160310 00:00,1995400,0.40143750520010546 +20160311 00:00,2027600,0.4054772257915406 +20160314 00:00,2025300,0.4089976263613926 +20160315 00:00,2022000,0.41143374477751066 +20160316 00:00,2033900,0.41399647602986517 +20160317 00:00,2047900,0.4166912101481014 +20160318 00:00,2045200,0.41937951561147047 +20160321 00:00,2046900,0.42271735522774334 +20160322 00:00,2046200,0.4264337693652907 +20160323 00:00,2032200,0.4283908452520722 +20160324 00:00,2031100,0.4288319732187141 +20160328 00:00,2032700,0.4294130359514306 +20160329 00:00,2052300,0.4298566858035894 +20160330 00:00,2061000,0.43046675346952823 +20160331 00:00,2055600,0.43069391086068715 +20160401 00:00,2069100,0.4312819621513601 +20160404 00:00,2062900,0.43182511997705364 +20160405 00:00,2041400,0.43162323153308635 +20160406 00:00,2064600,0.4324366988914503 +20160407 00:00,2038900,0.43246676569774956 +20160408 00:00,2044800,0.43234926728577117 +20160411 00:00,2039900,0.4321790818537867 +20160412 00:00,2059900,0.43223064814766615 +20160413 00:00,2080400,0.4314643510134747 +20160414 00:00,2080200,0.4312426903795903 +20160415 00:00,2078000,0.431136449479509 +20160418 00:00,2092500,0.43145902273261494 +20160419 00:00,2099100,0.4315356942245856 +20160420 00:00,2100700,0.43198618375346565 +20160421 00:00,2089000,0.4323511530539117 +20160422 00:00,2089600,0.4327199806680212 +20160425 00:00,2085900,0.43312747493865955 +20160426 00:00,2090000,0.43350616550878635 +20160427 00:00,2093800,0.4343268889772218 +20160428 00:00,2074200,0.43421344362860254 +20160429 00:00,2063000,0.4335162886982156 +20160502 00:00,2080300,0.4339056024722345 +20160503 00:00,2061300,0.43430201147569114 +20160504 00:00,2049600,0.4336351158783685 +20160505 00:00,2049500,0.43392912361125635 +20160506 00:00,2057000,0.4341355970384154 +20160509 00:00,2058900,0.4343274988228331 +20160510 00:00,2084600,0.4337103049648624 +20160511 00:00,2065000,0.43434439069469366 +20160512 00:00,2065500,0.4349398907388993 +20160513 00:00,2047200,0.4348650836669247 +20160516 00:00,2068100,0.43482247907510174 +20160517 00:00,2048200,0.43482293235297476 +20160518 00:00,2049100,0.4347488904020228 +20160519 00:00,2042400,0.4347831583638491 +20160520 00:00,2054900,0.4350488905419259 +20160523 00:00,2051600,0.43507121103400864 +20160524 00:00,2078700,0.4344958455089454 +20160525 00:00,2092600,0.43318313770027833 +20160526 00:00,2093400,0.4325329252888931 +20160527 00:00,2102100,0.4320983733575489 +20160531 00:00,2100800,0.4320763870463577 +20160601 00:00,2103000,0.43236880974766667 +20160602 00:00,2109200,0.4331208190929704 +20160603 00:00,2102800,0.4336322617480466 +20160606 00:00,2113900,0.4342706240670525 +20160607 00:00,2117000,0.4354156461314335 +20160608 00:00,2123900,0.4366986385535521 +20160609 00:00,2120400,0.4372704884272828 +20160610 00:00,2100300,0.43712070154088306 +20160613 00:00,2084200,0.4360191477921313 +20160614 00:00,2080900,0.43563654911208394 +20160615 00:00,2077800,0.43526526927443004 +20160616 00:00,2083500,0.4350275848409678 +20160617 00:00,2065300,0.4346159111792372 +20160620 00:00,2079100,0.4347268721644974 +20160621 00:00,2084100,0.43520902319758126 +20160622 00:00,2080300,0.4364670890040262 +20160623 00:00,2108700,0.4366396392471952 +20160624 00:00,2031300,0.43712259093571687 +20160627 00:00,1995300,0.4321087045198552 +20160628 00:00,2032200,0.4312897142424866 +20160629 00:00,2067100,0.428731265480197 +20160630 00:00,2095300,0.4245486869484699 +20160701 00:00,2097900,0.42181804795990047 +20160705 00:00,2083900,0.42099438340331896 +20160706 00:00,2097700,0.4205278261395149 +20160707 00:00,2095400,0.4214415944897047 +20160708 00:00,2127000,0.4226825876599186 +20160711 00:00,2134500,0.4228785194089664 +20160712 00:00,2150000,0.42277801973349166 +20160713 00:00,2149300,0.4234668549930117 +20160714 00:00,2161100,0.4248262630705571 +20160715 00:00,2158400,0.42644828992379147 +20160718 00:00,2164100,0.42871737710055546 +20160719 00:00,2161800,0.43136112017656847 +20160720 00:00,2171300,0.434518945571671 +20160721 00:00,2162200,0.43766905253764776 +20160722 00:00,2172500,0.4406914214337875 +20160725 00:00,2166400,0.44312940926848504 +20160726 00:00,2167500,0.445187622804552 +20160727 00:00,2165100,0.4434575980998226 +20160728 00:00,2168000,0.44007057708798225 +20160729 00:00,2171500,0.4362662805024043 +20160801 00:00,2169300,0.43223236220915534 +20160802 00:00,2155200,0.42772716032013175 +20160803 00:00,2162300,0.4227665692986706 +20160804 00:00,2164300,0.4170167424362542 +20160805 00:00,2181400,0.41194836737796203 +20160808 00:00,2180500,0.4066735981185908 +20160809 00:00,2182200,0.39993687391146027 +20160810 00:00,2176300,0.3947886421757262 +20160811 00:00,2186800,0.3902440913006139 +20160812 00:00,2184100,0.3873372250657166 +20160815 00:00,2190900,0.38631345217013896 +20160816 00:00,2179600,0.3900953245082443 +20160817 00:00,2183800,0.40110888544403595 +20160818 00:00,2189000,0.41951777537689117 +20160819 00:00,2185600,0.43708831952226185 +20160822 00:00,2185100,0.44316769956340873 +20160823 00:00,2189300,0.4479059053483466 +20160824 00:00,2178800,0.45987037013760207 +20160825 00:00,2176600,0.46115136420820296 +20160826 00:00,2172800,0.4628048285876786 +20160829 00:00,2183400,0.46608138406053506 +20160830 00:00,2179800,0.46572469917699266 +20160831 00:00,2174400,0.4668311504946301 +20160901 00:00,2173700,0.4665653028109266 +20160902 00:00,2183600,0.46590725139626143 +20160906 00:00,2190900,0.466655640854712 +20160907 00:00,2190100,0.4656249376764585 +20160908 00:00,2185100,0.46590732547995417 +20160909 00:00,2133200,0.46311479824673885 +20160912 00:00,2164000,0.46279655996782215 +20160913 00:00,2132400,0.4628650939098775 +20160914 00:00,2131500,0.4629291350653599 +20160915 00:00,2152800,0.4665647227184432 +20160916 00:00,2133700,0.47128561435799493 +20160919 00:00,2134100,0.47258164257911917 +20160920 00:00,2134200,0.47578007225030106 +20160921 00:00,2158200,0.4757065425934741 +20160922 00:00,2171800,0.4747514466339635 +20160923 00:00,2159900,0.47525468050489744 +20160926 00:00,2142400,0.4745712405835864 +20160927 00:00,2155700,0.4724625569716201 +20160928 00:00,2166400,0.4717991347963988 +20160929 00:00,2146800,0.4712603555292471 +20160930 00:00,2163000,0.4720625435730002 +20161003 00:00,2157800,0.47097502698001165 +20161004 00:00,2146800,0.46927977377403 +20161005 00:00,2156300,0.4678016834638595 +20161006 00:00,2157800,0.46577990373437045 +20161007 00:00,2150400,0.4641215530168369 +20161010 00:00,2161600,0.4626040550177928 +20161011 00:00,2134300,0.4607492068017521 +20161012 00:00,2137100,0.45862671122151766 +20161013 00:00,2130100,0.4575480655850156 +20161014 00:00,2131200,0.4565650666703076 +20161017 00:00,2123800,0.4562531363315825 +20161018 00:00,2137100,0.4566752404863429 +20161019 00:00,2142800,0.4576870983814765 +20161020 00:00,2138800,0.461542978169565 +20161021 00:00,2139800,0.46229452698773754 +20161024 00:00,2148900,0.4622355704562236 +20161025 00:00,2141700,0.4628599092893251 +20161026 00:00,2137400,0.46384696532151726 +20161027 00:00,2131700,0.4639005024566158 +20161028 00:00,2125400,0.46411014457199823 +20161031 00:00,2125500,0.46507185790767325 +20161101 00:00,2110100,0.46493569966647763 +20161102 00:00,2097400,0.4648587401853339 +20161103 00:00,2087800,0.4649978467984111 +20161104 00:00,2085500,0.46625027190477486 +20161107 00:00,2131500,0.46627739641388055 +20161108 00:00,2141100,0.46388083900509663 +20161109 00:00,2164400,0.46165877737956756 +20161110 00:00,2169200,0.4603295443197449 +20161111 00:00,2164200,0.4591873149065651 +20161114 00:00,2165900,0.4613615543348281 +20161115 00:00,2182800,0.46191461129872496 +20161116 00:00,2178700,0.4635334179820459 +20161117 00:00,2189900,0.4634493374108312 +20161118 00:00,2185000,0.4634936455426966 +20161121 00:00,2201500,0.46347924565558024 +20161122 00:00,2205800,0.46380507946454713 +20161123 00:00,2207000,0.464591839966524 +20161125 00:00,2215200,0.4660141945229392 +20161128 00:00,2204800,0.46740173045234545 +20161129 00:00,2209100,0.4692945876710263 +20161130 00:00,2203800,0.4722914753027517 +20161201 00:00,2195700,0.47314432814767154 +20161202 00:00,2196800,0.47440710024706734 +20161205 00:00,2210000,0.4765717870178484 +20161206 00:00,2217000,0.4778034005741834 +20161207 00:00,2246000,0.47676436620798296 +20161208 00:00,2251500,0.4749623660080097 +20161209 00:00,2265100,0.47210340981149596 +20161212 00:00,2262500,0.47239543252128413 +20161213 00:00,2277600,0.471430614736254 +20161214 00:00,2258800,0.4678291606752023 +20161215 00:00,2268100,0.46563151317858165 +20161216 00:00,2250400,0.45827288865638705 +20161219 00:00,2255300,0.45674186808576234 +20161220 00:00,2264000,0.4521061090092731 +20161221 00:00,2257700,0.4429798236058366 +20161222 00:00,2253800,0.42901518211053097 +20161223 00:00,2257100,0.41574554652956835 +20161227 00:00,2262700,0.4029303025308131 +20161228 00:00,2244000,0.3901690023807658 +20161229 00:00,2243500,0.38152106362969546 +20161230 00:00,2235300,0.3761034153635748 +20170103 00:00,2252400,0.374470206212259 +20170104 00:00,2265800,0.3786164032518369 +20170105 00:00,2264000,0.3829381138532142 +20170106 00:00,2272100,0.3827593654816183 +20170109 00:00,2264600,0.38307996958190055 +20170110 00:00,2264600,0.38394776259162106 +20170111 00:00,2271000,0.38541611650703606 +20170112 00:00,2265300,0.38478918598275536 +20170113 00:00,2270500,0.3860478249088275 +20170117 00:00,2262500,0.38578953261746296 +20170118 00:00,2267500,0.3853644222594341 +20170119 00:00,2259100,0.3875658356800722 +20170120 00:00,2267400,0.3882949052944976 +20170123 00:00,2261500,0.3876644485692027 +20170124 00:00,2276000,0.38850699264778393 +20170125 00:00,2295700,0.38737045669061876 +20170126 00:00,2293300,0.39030537699424867 +20170127 00:00,2289700,0.39169677798205027 +20170130 00:00,2275500,0.39528721806719336 +20170131 00:00,2275300,0.3998873027959254 +20170201 00:00,2276200,0.40170858767115103 +20170202 00:00,2277700,0.40745504044599956 +20170203 00:00,2293400,0.4162902773108664 +20170206 00:00,2289300,0.4153441974908169 +20170207 00:00,2289400,0.41012456665177277 +20170208 00:00,2292400,0.40556379271314424 +20170209 00:00,2306000,0.40121489316660097 +20170210 00:00,2315100,0.4018869471822714 +20170213 00:00,2327700,0.3997875213117846 +20170214 00:00,2337000,0.39532637979385166 +20170215 00:00,2349200,0.39257705071328386 +20170216 00:00,2347200,0.3899980483587177 +20170217 00:00,2350900,0.38695371397306555 +20170221 00:00,2364900,0.38675543819246117 +20170222 00:00,2362800,0.3855729242646695 +20170223 00:00,2364400,0.38507165066548354 +20170224 00:00,2367400,0.3867731121336627 +20170227 00:00,2371100,0.3895675305466921 +20170228 00:00,2364700,0.3945403569046178 +20170301 00:00,2397800,0.397679815641135 +20170302 00:00,2382700,0.4000206279250569 +20170303 00:00,2384200,0.40201825351225495 +20170306 00:00,2377100,0.40366120304059 +20170307 00:00,2370000,0.4039412254376418 +20170308 00:00,2365600,0.40398621073451946 +20170309 00:00,2368600,0.4052523177681069 +20170310 00:00,2376900,0.4068666703244862 +20170313 00:00,2378100,0.40698169039818877 +20170314 00:00,2369000,0.4070447632096508 +20170315 00:00,2389500,0.40770400377619326 +20170316 00:00,2384800,0.4075441791600607 +20170317 00:00,2370300,0.40730885936893924 +20170320 00:00,2367700,0.4069721122083582 +20170321 00:00,2337300,0.4047211145911146 +20170322 00:00,2342800,0.40378023129598684 +20170323 00:00,2340300,0.40374103270661 +20170324 00:00,2338600,0.40516306849902745 +20170327 00:00,2336200,0.40754806066499927 +20170328 00:00,2353200,0.40861296099652566 +20170329 00:00,2355400,0.4098552011842544 +20170330 00:00,2362900,0.4102975928889405 +20170331 00:00,2357400,0.412973586368282 +20170403 00:00,2353300,0.41462314502618436 +20170404 00:00,2354800,0.4154008980294165 +20170405 00:00,2347800,0.41728847327821644 +20170406 00:00,2354400,0.4192157695990229 +20170407 00:00,2352000,0.42177371077996045 +20170410 00:00,2353400,0.4265687675470576 +20170411 00:00,2350600,0.4284460378893651 +20170412 00:00,2340300,0.42839281167717835 +20170413 00:00,2325100,0.427328278868156 +20170417 00:00,2345700,0.427418527900409 +20170418 00:00,2338700,0.42600408572582843 +20170419 00:00,2334400,0.42430740539938117 +20170420 00:00,2353400,0.42218383777298146 +20170421 00:00,2345900,0.42072404957211906 +20170424 00:00,2371700,0.4176168332101834 +20170425 00:00,2385500,0.41298698754507096 +20170426 00:00,2384000,0.410989755698687 +20170427 00:00,2386000,0.4110302119967934 +20170428 00:00,2380800,0.4107051938030396 +20170501 00:00,2386800,0.410680656672924 +20170502 00:00,2387700,0.41275296471445205 +20170503 00:00,2384800,0.4130904317293896 +20170504 00:00,2387600,0.4133780659397841 +20170505 00:00,2397000,0.41416540668140245 +20170508 00:00,2396600,0.4153064376127786 +20170509 00:00,2394400,0.4157126930799978 +20170510 00:00,2398700,0.4192440609336908 +20170511 00:00,2393800,0.4203181569477251 +20170512 00:00,2389800,0.4207197368852982 +20170515 00:00,2403000,0.4201521502726709 +20170516 00:00,2400800,0.421538981643198 +20170517 00:00,2358200,0.4167665437026796 +20170518 00:00,2367700,0.4141458959257612 +20170519 00:00,2383100,0.41473566077524326 +20170522 00:00,2395200,0.415286555090092 +20170523 00:00,2400500,0.41799637272072887 +20170524 00:00,2406100,0.4172586752980854 +20170525 00:00,2417600,0.41513743620311216 +20170526 00:00,2417100,0.41306278682967834 +20170530 00:00,2415000,0.40931273804291923 +20170531 00:00,2414400,0.4053380500592987 +20170601 00:00,2433600,0.4008776559452782 +20170602 00:00,2441700,0.3957420989119079 +20170605 00:00,2439900,0.3927998009180312 +20170606 00:00,2432100,0.38943384414095006 +20170607 00:00,2436600,0.3872382255866636 +20170608 00:00,2437800,0.38730417281625074 +20170609 00:00,2434100,0.3891460611513466 +20170612 00:00,2433600,0.38976020508144193 +20170613 00:00,2445500,0.39031738817552764 +20170614 00:00,2442400,0.39097875694723555 +20170615 00:00,2437700,0.3915349774486191 +20170616 00:00,2426400,0.39155086033544145 +20170619 00:00,2446600,0.3918126927722988 +20170620 00:00,2430100,0.39390429556232764 +20170621 00:00,2429500,0.3987153300126855 +20170622 00:00,2428400,0.40602538934345755 +20170623 00:00,2431300,0.4301669097222278 +20170626 00:00,2432900,0.42402599647057065 +20170627 00:00,2413300,0.42795586290886634 +20170628 00:00,2434900,0.4296347065451267 +20170629 00:00,2413500,0.4275403270858473 +20170630 00:00,2418000,0.42640211222022895 +20170703 00:00,2422100,0.42593047144571405 +20170705 00:00,2427700,0.4273383913042641 +20170706 00:00,2405500,0.4308779845052366 +20170707 00:00,2421100,0.4374021211562267 +20170710 00:00,2423700,0.4393845332551629 +20170711 00:00,2421900,0.44126591342990723 +20170712 00:00,2440100,0.44062217245992374 +20170713 00:00,2444200,0.4394717072348803 +20170714 00:00,2455600,0.4373458309236386 +20170717 00:00,2455300,0.436327733840984 +20170718 00:00,2456600,0.43587514865338617 +20170719 00:00,2469900,0.43526522806172147 +20170720 00:00,2471000,0.4352664586637311 +20170721 00:00,2468800,0.43573803018806345 +20170724 00:00,2468200,0.43670014284162867 +20170725 00:00,2474200,0.43790540551986906 +20170726 00:00,2474300,0.43924627721242304 +20170727 00:00,2472000,0.44033428214805254 +20170728 00:00,2469100,0.44122673598663853 +20170731 00:00,2467700,0.4422910676003471 +20170801 00:00,2473200,0.4431722683062559 +20170802 00:00,2474400,0.4446949314035271 +20170803 00:00,2469600,0.4458605570896495 +20170804 00:00,2474100,0.44679418270657434 +20170807 00:00,2478700,0.446612899213164 +20170808 00:00,2472600,0.44639017434821376 +20170809 00:00,2472500,0.4459140109950486 +20170810 00:00,2437600,0.4415692488698669 +20170811 00:00,2441200,0.43751776893035177 +20170814 00:00,2465400,0.4354154372216637 +20170815 00:00,2465100,0.43249408154344837 +20170816 00:00,2469400,0.43008183398151895 +20170817 00:00,2430900,0.4266827719530398 +20170818 00:00,2427100,0.4213603441535651 +20170821 00:00,2429000,0.41877643499099915 +20170822 00:00,2454400,0.4150706781712061 +20170823 00:00,2445600,0.41277737186133345 +20170824 00:00,2439900,0.4117665894095761 +20170825 00:00,2445600,0.4110143007594072 +20170828 00:00,2445700,0.41074169337501354 +20170829 00:00,2448500,0.4098947910479236 +20170830 00:00,2460100,0.40842661977902595 +20170831 00:00,2474900,0.4056167844717315 +20170901 00:00,2478400,0.4041006489327751 +20170905 00:00,2460600,0.4047009659395747 +20170906 00:00,2469000,0.4076819619566303 +20170907 00:00,2468700,0.4153645153837544 +20170908 00:00,2465800,0.4198792626917471 +20170911 00:00,2492100,0.41929454205097894 +20170912 00:00,2500500,0.4201195517248773 +20170913 00:00,2501700,0.42037514945403476 +20170914 00:00,2500900,0.4211646828779036 +20170915 00:00,2491900,0.4218212642769155 +20170918 00:00,2497200,0.4231936548309998 +20170919 00:00,2499700,0.4254397238029162 +20170920 00:00,2500600,0.4282205411257861 +20170921 00:00,2493900,0.42680115860675577 +20170922 00:00,2494400,0.42613030954621056 +20170925 00:00,2489300,0.42378699999016295 +20170926 00:00,2490800,0.4236387717007277 +20170927 00:00,2500500,0.42229034306088353 +20170928 00:00,2503500,0.42017996741410113 +20170929 00:00,2512300,0.4188399840050315 +20171002 00:00,2523200,0.41633008867583676 +20171003 00:00,2528600,0.41364228814233517 +20171004 00:00,2531600,0.41181446726658066 +20171005 00:00,2546600,0.40858749184774446 +20171006 00:00,2543700,0.40557705052484194 +20171009 00:00,2539500,0.402444529897867 +20171010 00:00,2546200,0.40058274002622923 +20171011 00:00,2550200,0.3987645399123355 +20171012 00:00,2546400,0.3971841526265967 +20171013 00:00,2549500,0.3963600253668573 +20171016 00:00,2552900,0.3957574166765762 +20171017 00:00,2554700,0.3963638715868593 +20171018 00:00,2557200,0.39627241252754514 +20171019 00:00,2557900,0.396628871996276 +20171020 00:00,2571100,0.3976884987237689 +20171023 00:00,2561100,0.39898626005094834 +20171024 00:00,2565600,0.40230186105431703 +20171025 00:00,2552900,0.4041689608437239 +20171026 00:00,2556200,0.4062513160091197 +20171027 00:00,2577100,0.40766316616493664 +20171030 00:00,2567500,0.4088579419137817 +20171031 00:00,2571500,0.4109743070671174 +20171101 00:00,2574900,0.40911943493395375 +20171102 00:00,2575900,0.40640458101288984 +20171103 00:00,2584500,0.40885300701648314 +20171106 00:00,2588500,0.4171354886972391 +20171107 00:00,2586700,0.41840140031955114 +20171108 00:00,2591100,0.4184445190465005 +20171109 00:00,2581700,0.41705586202030637 +20171110 00:00,2580900,0.41502205465271813 +20171113 00:00,2583300,0.4131130416056829 +20171114 00:00,2577300,0.41011849804551637 +20171115 00:00,2564400,0.4059097036487831 +20171116 00:00,2586200,0.40334239030006125 +20171117 00:00,2578600,0.40113746154167224 +20171120 00:00,2583000,0.39915055518175635 +20171121 00:00,2599900,0.3962728988613614 +20171122 00:00,2597600,0.39446886963245453 +20171124 00:00,2603600,0.392867942613163 +20171127 00:00,2602300,0.3931422941429022 +20171128 00:00,2628700,0.3899263511536772 +20171129 00:00,2627100,0.38872627528081366 +20171130 00:00,2650100,0.3864225906531704 +20171201 00:00,2644600,0.3886759669671884 +20171204 00:00,2641400,0.39498907953285534 +20171205 00:00,2631900,0.401312572704553 +20171206 00:00,2632400,0.40785801870148 +20171207 00:00,2640700,0.41000883204198585 +20171208 00:00,2655100,0.4120742048236556 +20171211 00:00,2663100,0.41333429749852885 +20171212 00:00,2667800,0.41545624124270075 +20171213 00:00,2667500,0.41900977573653897 +20171214 00:00,2656600,0.42037145956730876 +20171215 00:00,2665100,0.42248623619132475 +20171218 00:00,2682000,0.42469614465530436 +20171219 00:00,2671700,0.42618981189766436 +20171220 00:00,2670300,0.4273415022301709 +20171221 00:00,2675800,0.42858723802113563 +20171222 00:00,2675100,0.42970809940030974 +20171226 00:00,2671900,0.43099390813178295 +20171227 00:00,2673200,0.432960064479484 +20171228 00:00,2678700,0.4335631585587379 +20171229 00:00,2668600,0.4337359643325314 +20180102 00:00,2687700,0.43666593551609634 +20180103 00:00,2704700,0.4343508616205391 +20180104 00:00,2716100,0.4308532388561839 +20180105 00:00,2734200,0.42610729624819627 +20180108 00:00,2739200,0.42356732933376867 +20180109 00:00,2745400,0.4226803014057935 +20180110 00:00,2741200,0.4235942459685528 +20180111 00:00,2761200,0.4261615210678364 +20180112 00:00,2779200,0.4281551733953743 +20180116 00:00,2769700,0.4328847590491007 +20180117 00:00,2796100,0.43845032060595335 +20180118 00:00,2791400,0.4443153967531632 +20180119 00:00,2804100,0.4518086558524357 +20180122 00:00,2826900,0.4597691955793496 +20180123 00:00,2832900,0.46947859921260665 +20180124 00:00,2831800,0.4788765339882664 +20180125 00:00,2833000,0.4903795195900768 +20180126 00:00,2865800,0.5027344077171101 +20180129 00:00,2846800,0.5122427548334437 +20180130 00:00,2817600,0.5076085397341243 +20180131 00:00,2819000,0.5021695130332375 +20180201 00:00,2815800,0.4971151505332598 +20180202 00:00,2754500,0.46897938878520457 +20180205 00:00,2639300,0.37416716736006855 +20180206 00:00,2691300,0.34968524799124073 +20180207 00:00,2676700,0.33995340666846136 +20180208 00:00,2576300,0.33364387743866303 +20180209 00:00,2615000,0.3453455963784946 +20180212 00:00,2653400,0.35687252063364716 +20180213 00:00,2660000,0.3695478115296583 +20180214 00:00,2695900,0.374449535141845 +20180215 00:00,2730300,0.37010360233743883 +20180216 00:00,2731100,0.3711065580347135 +20180220 00:00,2714000,0.378922098446965 +20180221 00:00,2700500,0.3878387268840923 +20180222 00:00,2704000,0.396193442419223 +20180223 00:00,2747100,0.3985467004272135 +20180226 00:00,2779000,0.39426513044281597 +20180227 00:00,2744300,0.39694477244244625 +20180228 00:00,2716500,0.3969547300277524 +20180301 00:00,2677000,0.39072620898957733 +20180302 00:00,2690800,0.38804670395291574 +20180305 00:00,2721900,0.38679735284762035 +20180306 00:00,2728800,0.3856102541556193 +20180307 00:00,2727800,0.3853543837511078 +20180308 00:00,2741000,0.385943475856231 +20180309 00:00,2788700,0.3844563556358885 +20180312 00:00,2785200,0.38268157716768214 +20180313 00:00,2767200,0.38177599578391813 +20180314 00:00,2753000,0.3803624443321429 +20180315 00:00,2750000,0.3795420377342773 +20180316 00:00,2742000,0.37910630195278217 +20180319 00:00,2704900,0.3759430677508201 +20180320 00:00,2709500,0.3738232084041157 +20180321 00:00,2704300,0.37252227129912463 +20180322 00:00,2636700,0.36685682186896296 +20180323 00:00,2580500,0.35501063455300097 +20180326 00:00,2651100,0.35650455248436114 +20180327 00:00,2606000,0.3598973603544458 +20180328 00:00,2598300,0.3640147390802005 +20180329 00:00,2631500,0.368263772749594 +20180402 00:00,2574700,0.3785631042865622 +20180403 00:00,2607700,0.38727772701353813 +20180404 00:00,2635600,0.3917837259115684 +20180405 00:00,2656400,0.39322553202172067 +20180406 00:00,2597200,0.40253528775507486 +20180409 00:00,2610000,0.4095918722231212 +20180410 00:00,2651500,0.4118854866154796 +20180411 00:00,2637600,0.41521120431952147 +20180412 00:00,2659300,0.41635483785335453 +20180413 00:00,2651500,0.4174103449884104 +20180416 00:00,2673300,0.4171139772032268 +20180417 00:00,2701900,0.4152270312086025 +20180418 00:00,2703900,0.4145607347607603 +20180419 00:00,2688900,0.41557605476071935 +20180420 00:00,2666100,0.4151816462107815 +20180423 00:00,2665700,0.4158096557550284 +20180424 00:00,2629800,0.4124782860860269 +20180425 00:00,2636300,0.4104063318105537 +20180426 00:00,2663100,0.40995698470991115 +20180427 00:00,2665600,0.40943280065943033 +20180430 00:00,2645100,0.4091378119750605 +20180501 00:00,2649800,0.40889717946656057 +20180502 00:00,2632000,0.40850548318119234 +20180503 00:00,2626200,0.4082570479457568 +20180504 00:00,2660200,0.40810066393464217 +20180507 00:00,2669200,0.4071009363880843 +20180508 00:00,2669200,0.4066666413994745 +20180509 00:00,2695000,0.40530732585699736 +20180510 00:00,2720200,0.4026148489264686 +20180511 00:00,2728500,0.4006509779838673 +20180514 00:00,2729800,0.4000485989391262 +20180515 00:00,2711000,0.40140502651654114 +20180516 00:00,2722400,0.402411568159418 +20180517 00:00,2720100,0.4029145170572323 +20180518 00:00,2713300,0.40358108362192413 +20180521 00:00,2733700,0.40490177631724267 +20180522 00:00,2726100,0.40605707697350557 +20180523 00:00,2733600,0.4073819374593088 +20180524 00:00,2728000,0.4083877694670709 +20180525 00:00,2721500,0.40902488436545487 +20180529 00:00,2690200,0.4074485916592942 +20180530 00:00,2726100,0.40845916183672887 +20180531 00:00,2709400,0.40890575359716586 +20180601 00:00,2736000,0.40873700000375646 +20180604 00:00,2749000,0.40767494073636706 +20180605 00:00,2751000,0.40685881862546797 +20180606 00:00,2774000,0.40565380972265946 +20180607 00:00,2773700,0.4046545481164373 +20180608 00:00,2781900,0.40389236377851456 +20180611 00:00,2785600,0.40357906122787335 +20180612 00:00,2789200,0.4035769618227112 +20180613 00:00,2780300,0.40361216685638257 +20180614 00:00,2787300,0.4039652456740903 +20180615 00:00,2771300,0.40376661621680326 +20180618 00:00,2765600,0.40325147522895394 +20180619 00:00,2755000,0.402635657694961 +20180620 00:00,2759700,0.40232064822388697 +20180621 00:00,2742400,0.401573356732038 +20180622 00:00,2747400,0.40133676540205304 +20180625 00:00,2710000,0.39990647723846984 +20180626 00:00,2716000,0.39933039614983895 +20180627 00:00,2693500,0.39864708373303204 +20180628 00:00,2708900,0.3998148784301327 +20180629 00:00,2712800,0.40075738085378054 +20180702 00:00,2718600,0.40192611774762904 +20180703 00:00,2709000,0.40393424474242207 +20180705 00:00,2731100,0.4049354955591692 +20180706 00:00,2754200,0.40383303712867646 +20180709 00:00,2779000,0.40078276132044616 +20180710 00:00,2789000,0.39828384173797354 +20180711 00:00,2768600,0.3982983694526397 +20180712 00:00,2793700,0.39780945609864987 +20180713 00:00,2795900,0.3975296514596333 +20180716 00:00,2793400,0.39759920359990353 +20180717 00:00,2804700,0.39814643171265496 +20180718 00:00,2810600,0.3989997744355403 +20180719 00:00,2800000,0.3996674183993745 +20180720 00:00,2796800,0.40007566197522426 +20180723 00:00,2802000,0.40070697490554713 +20180724 00:00,2816100,0.4016910080947189 +20180725 00:00,2840100,0.40244812925820583 +20180726 00:00,2833400,0.4033671877861605 +20180727 00:00,2814200,0.4032495531425342 +20180730 00:00,2799500,0.40184980375026585 +20180731 00:00,2813300,0.4014771881041887 +20180801 00:00,2808600,0.4008055711684451 +20180802 00:00,2823900,0.40026286898041225 +20180803 00:00,2836000,0.3996396180448337 +20180806 00:00,2846400,0.3990751397055962 +20180807 00:00,2855800,0.3990143155666848 +20180808 00:00,2854600,0.3997098412658931 +20180809 00:00,2850700,0.40018424342734804 +20180810 00:00,2831600,0.4001283714814824 +20180813 00:00,2821000,0.3994181087084836 +20180814 00:00,2839000,0.39999984119151993 +20180815 00:00,2817800,0.40089212585252704 +20180816 00:00,2840600,0.4024481034982002 +20180817 00:00,2850600,0.4018498907423368 +20180820 00:00,2856700,0.4014240564104415 +20180821 00:00,2863400,0.40086568417904306 +20180822 00:00,2861700,0.40097147035713654 +20180823 00:00,2857900,0.4008207388844664 +20180824 00:00,2875100,0.40072262337072695 +20180827 00:00,2897800,0.40010837124378074 +20180828 00:00,2899200,0.3999446404698594 +20180829 00:00,2914800,0.40004115682061897 +20180830 00:00,2903000,0.40032788294286104 +20180831 00:00,2903100,0.4007266693382564 +20180904 00:00,2898100,0.4010021774006359 +20180905 00:00,2890300,0.40091915032685715 +20180906 00:00,2881600,0.4005349546124856 +20180907 00:00,2876000,0.4002165707898657 +20180910 00:00,2881000,0.4005661043473552 +20180911 00:00,2890500,0.4005635175660143 +20180912 00:00,2891200,0.4006355786273303 +20180913 00:00,2908300,0.4006720222479599 +20180914 00:00,2908800,0.40059296646070586 +20180917 00:00,2893400,0.4003674006487443 +20180918 00:00,2909100,0.40031558685014107 +20180919 00:00,2912200,0.4002461605997896 +20180920 00:00,2935800,0.39969183931598307 +20180921 00:00,2919900,0.39947199950561196 +20180924 00:00,2910200,0.3988766738658387 +20180925 00:00,2907500,0.3983128121311407 +20180926 00:00,2898800,0.3978188813857458 +20180927 00:00,2906900,0.3977515447744931 +20180928 00:00,2907200,0.39788069677758836 +20181001 00:00,2917300,0.39794742622657286 +20181002 00:00,2915600,0.3979959914432661 +20181003 00:00,2917200,0.3980892644396697 +20181004 00:00,2894400,0.3977193114964458 +20181005 00:00,2878200,0.39659926022540615 +20181008 00:00,2878200,0.39608787524783473 +20181009 00:00,2874000,0.39610557020670717 +20181010 00:00,2783000,0.3907770372003722 +20181011 00:00,2721700,0.3785181245059716 +20181012 00:00,2759500,0.3785199957968187 +20181015 00:00,2744000,0.38194301866288416 +20181016 00:00,2804000,0.3832133894818773 +20181017 00:00,2804500,0.3845083984574005 +20181018 00:00,2764000,0.39011470319880065 +20181019 00:00,2762500,0.3951653177433827 +20181022 00:00,2750100,0.4010845242276275 +20181023 00:00,2736100,0.40749074439451466 +20181024 00:00,2653200,0.4126201771612015 +20181025 00:00,2700800,0.4198854145286346 +20181026 00:00,2653300,0.4283051287679317 +20181029 00:00,2638600,0.4363675725199025 +20181030 00:00,2677700,0.4430143443498946 +20181031 00:00,2706300,0.4453853630698216 +20181101 00:00,2735100,0.444101890730828 +20181102 00:00,2718900,0.445111208927959 +20181105 00:00,2733900,0.4451645164103646 +20181106 00:00,2751200,0.4442000603678329 +20181107 00:00,2810100,0.43876974352976783 +20181108 00:00,2805000,0.4357490944002649 +20181109 00:00,2777600,0.4346735277524409 +20181112 00:00,2725700,0.43125345697736284 +20181113 00:00,2720600,0.4282398845158552 +20181114 00:00,2702000,0.4251530543486474 +20181115 00:00,2730200,0.423890386661155 +20181116 00:00,2737300,0.4229465859512902 +20181119 00:00,2691000,0.42127495639693774 +20181120 00:00,2641200,0.4156155941686855 +20181121 00:00,2650200,0.4128232022125267 +20181123 00:00,2632500,0.4113544289077703 +20181126 00:00,2675000,0.41125070741335534 +20181127 00:00,2684000,0.4108048984775117 +20181128 00:00,2745800,0.4060117529292234 +20181129 00:00,2739800,0.4027956449311933 +20181130 00:00,2756500,0.40034642161974004 +20181203 00:00,2793000,0.3967604726857067 +20181204 00:00,2702500,0.3959738973870938 +20181206 00:00,2698400,0.39314862947204754 +20181207 00:00,2635700,0.38841766043653086 +20181210 00:00,2640700,0.3853806772590088 +20181211 00:00,2641300,0.38358776959792157 +20181212 00:00,2654600,0.38244140039658353 +20181213 00:00,2653700,0.3816420603610431 +20181214 00:00,2604700,0.38052253139788433 +20181217 00:00,2553600,0.37700210509384524 +20181218 00:00,2550800,0.3751403007076973 +20181219 00:00,2512600,0.3745336210452515 +20181220 00:00,2471700,0.3741597700018981 +20181221 00:00,2407000,0.37440866555364943 +20181224 00:00,2343400,0.3764693760885597 +20181226 00:00,2461800,0.3809562455455577 +20181227 00:00,2480700,0.3799671705136851 +20181228 00:00,2477500,0.38155313240975663 +20181231 00:00,2499200,0.3815678520260124 +20190102 00:00,2501800,0.38173904213673016 +20190103 00:00,2442100,0.38501386860429065 +20190104 00:00,2523900,0.38348938540696015 +20190107 00:00,2543800,0.3792161296403848 +20190108 00:00,2567700,0.375108651499533 +20190109 00:00,2579700,0.37243234396383723 +20190110 00:00,2588800,0.37133310444939266 +20190111 00:00,2589800,0.3717387236030668 +20190114 00:00,2574000,0.3722028810446952 +20190115 00:00,2603500,0.37322301987644685 +20190116 00:00,2609800,0.37555780858518806 +20190117 00:00,2629600,0.37783847869043036 +20190118 00:00,2664600,0.38202091655753423 +20190122 00:00,2628600,0.3856597832475728 +20190123 00:00,2634100,0.3882542512486222 +20190124 00:00,2635500,0.390332616412787 +20190125 00:00,2657800,0.3922059848888072 +20190128 00:00,2637600,0.3936178842399588 +20190129 00:00,2634100,0.39610126179548955 +20190130 00:00,2675800,0.4007557834227845 +20190131 00:00,2699300,0.4063143546400584 +20190201 00:00,2700600,0.4160463262987339 +20190204 00:00,2719600,0.43082143557821084 +20190205 00:00,2731000,0.43743569104294705 +20190206 00:00,2727400,0.43922854570001063 +20190207 00:00,2701400,0.4442586278501796 +20190208 00:00,2704700,0.4460729207386116 +20190211 00:00,2706200,0.449094817273796 +20190212 00:00,2741000,0.4515530825233749 +20190213 00:00,2749900,0.4532365219900829 +20190214 00:00,2743800,0.45569745351179713 +20190215 00:00,2773700,0.45697120260636537 +20190219 00:00,2778500,0.45836986380692674 +20190220 00:00,2784100,0.46036478484237 +20190221 00:00,2774200,0.46218400301934365 +20190222 00:00,2791400,0.4650996462099421 +20190225 00:00,2795200,0.46806877387006385 +20190226 00:00,2793200,0.46941785939977404 +20190227 00:00,2792000,0.47241311765324173 +20190228 00:00,2786800,0.4737340245004686 +20190301 00:00,2804200,0.4740068638875637 +20190304 00:00,2794000,0.4759676417149699 +20190305 00:00,2790200,0.477105169850747 +20190306 00:00,2773300,0.476077071706703 +20190307 00:00,2750100,0.47409164456114716 +20190308 00:00,2744600,0.4731217000287888 +20190311 00:00,2784400,0.4713440451275292 +20190312 00:00,2794900,0.4670754058668368 +20190313 00:00,2813400,0.4633821678793502 +20190314 00:00,2811600,0.4608797839780099 +20190315 00:00,2813100,0.4596513051685625 +20190318 00:00,2823300,0.45985318228420374 +20190319 00:00,2824000,0.4612776319616392 +20190320 00:00,2815500,0.46318821743326655 +20190321 00:00,2847300,0.46787956080963616 +20190322 00:00,2792500,0.4739044376941864 +20190325 00:00,2790400,0.4729682190378624 +20190326 00:00,2811200,0.47224058542908176 +20190327 00:00,2796500,0.47348010694134995 +20190328 00:00,2807100,0.47340542524366563 +20190329 00:00,2824800,0.47315181558448854 +20190401 00:00,2858300,0.4722678521071329 +20190402 00:00,2859700,0.4730440165542531 +20190403 00:00,2864200,0.47348059739997234 +20190404 00:00,2871800,0.47418026468032515 +20190405 00:00,2885700,0.47496058005005964 +20190408 00:00,2887900,0.47671759490210064 +20190409 00:00,2873100,0.4779667708099417 +20190410 00:00,2882900,0.47851894115284466 +20190411 00:00,2882100,0.4796276600771342 +20190412 00:00,2901600,0.4805425038414313 +20190415 00:00,2899700,0.4821655334231564 +20190416 00:00,2901600,0.48308093371604655 +20190417 00:00,2894500,0.48433715105400676 +20190418 00:00,2900200,0.486434956530706 +20190422 00:00,2902700,0.48820177450113106 +20190423 00:00,2928800,0.48929229015516174 +20190424 00:00,2922300,0.49000762267223985 +20190425 00:00,2920500,0.49015870017859126 +20190426 00:00,2934100,0.49012327972067365 +20190429 00:00,2938700,0.49045452263221145 +20190430 00:00,2940200,0.49091182907363634 +20190501 00:00,2918100,0.49049862452924226 +20190502 00:00,2911800,0.48995849980166667 +20190503 00:00,2940300,0.49031980800970854 +20190506 00:00,2928200,0.4913638286657495 +20190507 00:00,2879300,0.48989515412659573 +20190508 00:00,2875300,0.4886689274742688 +20190509 00:00,2866600,0.48872856797145087 +20190510 00:00,2881000,0.48873638107181805 +20190513 00:00,2808600,0.4865850778387602 +20190514 00:00,2834000,0.48603191242031885 +20190515 00:00,2850600,0.4858276615499238 +20190516 00:00,2877000,0.4847301772244368 +20190517 00:00,2858400,0.48495945114338457 +20190520 00:00,2839500,0.48538342395047496 +20190521 00:00,2865100,0.4856391136024261 +20190522 00:00,2856300,0.48629931475262067 +20190523 00:00,2821400,0.4868829266578711 +20190524 00:00,2827800,0.48788929112735524 +20190528 00:00,2801500,0.4889779258616817 +20190529 00:00,2782700,0.4892977335660211 +20190530 00:00,2790300,0.4909315505217516 +20190531 00:00,2752700,0.4919509749738551 +20190603 00:00,2745700,0.4941177551903061 +20190604 00:00,2805300,0.4944116833026182 +20190605 00:00,2829600,0.49180399758161697 +20190606 00:00,2848000,0.48914894419817895 +20190607 00:00,2876500,0.48508247489768785 +20190610 00:00,2889700,0.4817231863548301 +20190611 00:00,2889000,0.4797647978658522 +20190612 00:00,2883900,0.4787601853920949 +20190613 00:00,2895800,0.47837218553778776 +20190614 00:00,2892600,0.478585617558804 +20190617 00:00,2893700,0.47955374734330564 +20190618 00:00,2924000,0.4807096236866025 +20190619 00:00,2930600,0.4820874554488437 +20190620 00:00,2958600,0.483775816135986 +20190621 00:00,2940000,0.48657870553798865 +20190624 00:00,2936400,0.4889513429148858 +20190625 00:00,2907600,0.4902939762141579 +20190626 00:00,2904700,0.489939022313054 +20190627 00:00,2915000,0.49012006106675443 +20190628 00:00,2930000,0.49017188198029954 +20190701 00:00,2956600,0.4899322135925954 +20190702 00:00,2964300,0.4895613213990204 +20190703 00:00,2988000,0.48923227198440594 +20190705 00:00,2984600,0.49028574438248995 +20190708 00:00,2968200,0.4911862946499308 +20190709 00:00,2971900,0.4916157604171401 +20190710 00:00,2986100,0.49198940689733245 +20190711 00:00,2993100,0.4923095744634785 +20190712 00:00,3006500,0.49280064229689374 +20190715 00:00,3007500,0.493202321639989 +20190716 00:00,2997100,0.4935483449949965 +20190717 00:00,2977400,0.4932517615371759 +20190718 00:00,2988300,0.4933867801061672 +20190719 00:00,2971700,0.4932736031724163 +20190722 00:00,2979000,0.4933883744847629 +20190723 00:00,3000300,0.49379910235691665 +20190724 00:00,3014400,0.49408186733840637 +20190725 00:00,3000000,0.49428416064954994 +20190726 00:00,3020100,0.49490172818042605 +20190729 00:00,3014600,0.49538687880086135 +20190730 00:00,3007200,0.49530622982029976 +20190731 00:00,2974300,0.4944280808051563 +20190801 00:00,2948400,0.4923477042727878 +20190802 00:00,2926200,0.49020745384481335 +20190805 00:00,2838200,0.4823436738420572 +20190806 00:00,2878000,0.4803844960021247 +20190807 00:00,2879700,0.4797069601451996 +20190808 00:00,2936200,0.478038167419224 +20190809 00:00,2916200,0.4780686760178211 +20190812 00:00,2881000,0.47887067775072123 +20190813 00:00,2925500,0.4787944424588867 +20190814 00:00,2839000,0.47947401571907733 +20190815 00:00,2846500,0.4795566063246195 +20190816 00:00,2888500,0.4803051834184784 +20190819 00:00,2923300,0.4785334001204223 +20190820 00:00,2900900,0.47893849172301295 +20190821 00:00,2924500,0.4787433656803003 +20190822 00:00,2923600,0.4787961732739045 +20190823 00:00,2848500,0.47842928764609527 +20190826 00:00,2880000,0.4790110746624722 +20190827 00:00,2868700,0.4791353122635835 +20190828 00:00,2888900,0.47906202037367446 +20190829 00:00,2925800,0.47782759462859287 +20190830 00:00,2924500,0.4772451199585628 +20190903 00:00,2907400,0.47717404332267777 +20190904 00:00,2940400,0.47703450993168905 +20190905 00:00,2978200,0.475500222547592 +20190906 00:00,2980500,0.47465082836595474 +20190909 00:00,2982000,0.4746757627057577 +20190910 00:00,2981300,0.4753481299464227 +20190911 00:00,3002500,0.4763657159546009 +20190912 00:00,3012900,0.4776555905409795 +20190913 00:00,3010900,0.47890048864186663 +20190916 00:00,3001600,0.47929901257153484 +20190917 00:00,3009200,0.47949994194392476 +20190918 00:00,3011000,0.4799601513418345 +20190919 00:00,3010800,0.47980085979322606 +20190920 00:00,2982800,0.478356670300187 +20190923 00:00,2982100,0.47624907722195353 +20190924 00:00,2958700,0.47316320799774286 +20190925 00:00,2976200,0.47078445235908883 +20190926 00:00,2970000,0.46802291486992165 +20190927 00:00,2954000,0.464683261015573 +20190930 00:00,2967700,0.46095712503388786 +20191001 00:00,2932400,0.4564315707276284 +20191002 00:00,2880600,0.4491689197100949 +20191003 00:00,2904200,0.4442894655854198 +20191004 00:00,2943500,0.43972341884161015 +20191007 00:00,2930800,0.43721781841058754 +20191008 00:00,2885300,0.43700286024616264 +20191009 00:00,2912700,0.44037549574761936 +20191010 00:00,2932400,0.4454184137837573 +20191011 00:00,2962800,0.4436126251200592 +20191014 00:00,2959500,0.4442386192598264 +20191015 00:00,2988800,0.4432804629417962 +20191016 00:00,2984000,0.4434628985340053 +20191017 00:00,2992800,0.44433939390261085 +20191018 00:00,2979700,0.44660477064026227 +20191021 00:00,2999900,0.44834801314487605 +20191022 00:00,2990100,0.4515526264788037 +20191023 00:00,2998800,0.4560723838235683 +20191024 00:00,3003700,0.45848196344402803 +20191025 00:00,3016000,0.4589999844679 +20191028 00:00,3033000,0.4605880020799757 +20191029 00:00,3032100,0.4627525396766791 +20191030 00:00,3041400,0.46757972247717544 +20191031 00:00,3033300,0.4703676376897976 +20191101 00:00,3061400,0.471966861206098 +20191104 00:00,3073700,0.4727914446513172 +20191105 00:00,3070300,0.4753277704257861 +20191106 00:00,3071000,0.4779175889161361 +20191107 00:00,3081800,0.4790800486893762 +20191108 00:00,3089400,0.48071245783078864 +20191111 00:00,3083500,0.48386419538169545 +20191112 00:00,3090000,0.48571180150414944 +20191113 00:00,3091000,0.486196722120877 +20191114 00:00,3095500,0.4867675470853881 +20191115 00:00,3117900,0.48757347799209066 +20191118 00:00,3120200,0.48912970525097893 +20191119 00:00,3119300,0.4922635215506241 +20191120 00:00,3107700,0.4916457375087581 +20191121 00:00,3102700,0.4911761746782857 +20191122 00:00,3109600,0.48986124313831847 +20191125 00:00,3133700,0.4901251046177716 +20191126 00:00,3140800,0.48572251018530294 +20191127 00:00,3154800,0.479502386491877 +20191129 00:00,3143100,0.46670852079142783 +20191202 00:00,3116400,0.45385601746684606 +20191203 00:00,3095500,0.4397153879288845 +20191204 00:00,3114600,0.42828944747729686 +20191205 00:00,3120200,0.4178119268562126 +20191206 00:00,3148700,0.40769466964799106 +20191209 00:00,3138800,0.4015560153288581 +20191210 00:00,3135300,0.39725194729570784 +20191211 00:00,3144200,0.39594669558509654 +20191212 00:00,3171300,0.39954547751153985 +20191213 00:00,3173200,0.41026368820299863 +20191216 00:00,3195000,0.41982471819716294 +20191217 00:00,3195700,0.4283846214520303 +20191218 00:00,3195900,0.442037784911203 +20191219 00:00,3209000,0.4533626050287748 +20191220 00:00,3207300,0.4587060770036187 +20191223 00:00,3212200,0.4562214442656677 +20191224 00:00,3212300,0.46059206688471255 +20191226 00:00,3229400,0.4584112696358338 +20191227 00:00,3228600,0.45713884123093107 +20191230 00:00,3210800,0.4556153602273493 +20191231 00:00,3218600,0.45603391021171535 +20200102 00:00,3248700,0.4553724112335664 +20200103 00:00,3224100,0.46063777163729147 +20200106 00:00,3236400,0.46020399630726033 +20200107 00:00,3227300,0.45897281276973667 +20200108 00:00,3244500,0.4578122580728861 +20200109 00:00,3266500,0.45634227613021305 +20200110 00:00,3257100,0.45551382358177317 +20200113 00:00,3279500,0.45445764860943855 +20200114 00:00,3274500,0.45421377128561286 +20200115 00:00,3281900,0.45374537767677564 +20200116 00:00,3309200,0.45327469487871386 +20200117 00:00,3319500,0.45195980461720553 +20200121 00:00,3313000,0.45311039334883896 +20200122 00:00,3313400,0.45219199919401937 +20200123 00:00,3317200,0.4516170931087195 +20200124 00:00,3287700,0.4494083009419213 +20200127 00:00,3235000,0.441463695173858 +20200128 00:00,3268900,0.43940559783539057 +20200129 00:00,3266200,0.4390178777082742 +20200130 00:00,3276800,0.4378644782842939 +20200131 00:00,3217300,0.4348248014544441 +20200203 00:00,3241200,0.43358624689306047 +20200204 00:00,3290600,0.4313721421645854 +20200205 00:00,3328600,0.4260968971540161 +20200206 00:00,3339800,0.4215987798042648 +20200207 00:00,3322000,0.4201933616395961 +20200210 00:00,3346800,0.4194807384093762 +20200211 00:00,3352600,0.41971306949798753 +20200212 00:00,3374200,0.41890222148935935 +20200213 00:00,3370600,0.41909251246254253 +20200214 00:00,3376000,0.4203103150382767 +20200218 00:00,3367300,0.4208782259056242 +20200219 00:00,3383400,0.4221148626242737 +20200220 00:00,3369500,0.42303685519351875 +20200221 00:00,3334800,0.421327950808956 +20200224 00:00,3224200,0.4010092451663003 +20200225 00:00,3126500,0.3635084502877722 +20200226 00:00,3115000,0.3441499628164823 +20200227 00:00,2975100,0.3244614297144498 +20200228 00:00,2962600,0.3214081742829969 +20200302 00:00,3090900,0.32604300572787487 +20200303 00:00,3002400,0.34360813632749504 +20200304 00:00,3128600,0.34882981422955384 +20200305 00:00,3024600,0.36816614733564346 +20200306 00:00,2974600,0.3864099959668354 +20200309 00:00,2742300,0.3960612404721433 +20200310 00:00,2884200,0.41654261482589017 +20200311 00:00,2743600,0.4409796620923254 +20200312 00:00,2481100,0.4427468614602597 +20200313 00:00,2693200,0.4643337340251805 +20200316 00:00,2398500,0.48667310630094524 +20200317 00:00,2528000,0.5065766563761009 +20200318 00:00,2400000,0.5291531157965972 +20200319 00:00,2405100,0.5492641126681045 +20200320 00:00,2288000,0.5692646369545031 +20200323 00:00,2229500,0.5853519802381408 +20200324 00:00,2431500,0.5951759083986754 +20200325 00:00,2467900,0.5956083501007029 +20200326 00:00,2612000,0.5833291884643541 +20200327 00:00,2534200,0.5844737488411558 +20200330 00:00,2616500,0.5820505067613976 +20200331 00:00,2577500,0.5827791740559275 +20200401 00:00,2461500,0.5837817244464738 +20200402 00:00,2518300,0.5850046897269279 +20200403 00:00,2481900,0.5857486438968912 +20200406 00:00,2648600,0.5828429545787412 +20200407 00:00,2651300,0.5792648514150706 +20200408 00:00,2740300,0.5754686963414578 +20200409 00:00,2782000,0.5729824219360083 +20200413 00:00,2756600,0.5742171779268797 +20200414 00:00,2837900,0.5766815232135293 +20200415 00:00,2777600,0.5802013829499557 +20200416 00:00,2791000,0.5842747386771335 +20200417 00:00,2866400,0.5889193441335782 +20200420 00:00,2815900,0.5934052345936573 +20200421 00:00,2730400,0.5935766102976916 +20200422 00:00,2791000,0.5954808812173378 +20200423 00:00,2790800,0.5968410938045855 +20200424 00:00,2829700,0.5983313732655583 +20200427 00:00,2870500,0.5994243398949627 +20200428 00:00,2857300,0.6008707159119914 +20200429 00:00,2932100,0.6019679152425318 +20200430 00:00,2904800,0.6034773155926253 +20200501 00:00,2827900,0.6032232478807619 +20200504 00:00,2835700,0.6034052362573551 +20200505 00:00,2861900,0.6038303721696571 +20200506 00:00,2842500,0.6037976395101348 +20200507 00:00,2876800,0.6039317523906933 +20200508 00:00,2924400,0.6035268681875272 +20200511 00:00,2925000,0.603315546481276 +20200512 00:00,2866700,0.6034721745340339 +20200513 00:00,2816000,0.6018815375303378 +20200514 00:00,2849700,0.6015187508651334 +20200515 00:00,2862800,0.6014671710669154 +20200518 00:00,2950000,0.6000655094816671 +20200519 00:00,2919700,0.5996038364912326 +20200520 00:00,2969300,0.5993487434155573 +20200521 00:00,2948800,0.5995767978271533 +20200522 00:00,2954400,0.5994800802153512 +20200526 00:00,2990800,0.5996018174288944 +20200527 00:00,3035300,0.5987545571555472 +20200528 00:00,3029700,0.598486395348782 +20200529 00:00,3043200,0.5987592339624102 +20200601 00:00,3055500,0.5996798891577478 +20200602 00:00,3080800,0.6014109069394857 +20200603 00:00,3121800,0.602097920355146 +20200604 00:00,3113600,0.6031647584715636 +20200605 00:00,3193400,0.6035967813488985 +20200608 00:00,3232000,0.6033003099058887 +20200609 00:00,3207900,0.6046661315848879 +20200610 00:00,3190000,0.6061568630434594 +20200611 00:00,3006100,0.5991916984981415 +20200612 00:00,3042100,0.5950771878422424 +20200615 00:00,3070500,0.5935990257347075 +20200616 00:00,3129600,0.592760145758789 +20200617 00:00,3116600,0.5923279710081505 +20200618 00:00,3117800,0.5921162219557141 +20200619 00:00,3086400,0.5921906981719535 +20200622 00:00,3106200,0.5923562955412162 +20200623 00:00,3120500,0.5924294301459334 +20200624 00:00,3040900,0.5919235465583488 +20200625 00:00,3073500,0.5919953959251613 +20200626 00:00,3000500,0.5915815658130635 +20200629 00:00,3044600,0.5918590539850099 +20200630 00:00,3083600,0.5915101083853915 +20200701 00:00,3105200,0.5909029752617767 +20200702 00:00,3122300,0.5903584696660882 +20200706 00:00,3170500,0.5890607550478475 +20200707 00:00,3137800,0.588829367268937 +20200708 00:00,3161800,0.5885551334310182 +20200709 00:00,3143800,0.5883822908982157 +20200710 00:00,3175900,0.5882280607006041 +20200713 00:00,3148400,0.5880782921452252 +20200714 00:00,3189200,0.5879663215798773 +20200715 00:00,3218500,0.5874508599450269 +20200716 00:00,3207900,0.5873543521116009 +20200717 00:00,3217200,0.5872788116078268 +20200720 00:00,3243200,0.5874630091116526 +20200721 00:00,3250100,0.5876797670469309 +20200722 00:00,3268600,0.5877712986257059 +20200723 00:00,3229600,0.5878501175745382 +20200724 00:00,3208800,0.5875869696395903 +20200727 00:00,3232200,0.5880411242168883 +20200728 00:00,3211700,0.5886944372979273 +20200729 00:00,3251200,0.5899512959733351 +20200730 00:00,3239600,0.5910755627855682 +20200731 00:00,3265200,0.5924207911402326 +20200803 00:00,3287900,0.5925548625117998 +20200804 00:00,3300600,0.5930206537381436 +20200805 00:00,3321100,0.5932101568028219 +20200806 00:00,3343300,0.5931650677593893 +20200807 00:00,3345700,0.5937908811935904 +20200810 00:00,3355700,0.5942999307471876 +20200811 00:00,3328000,0.5945811117629061 +20200812 00:00,3374400,0.5954968774871695 +20200813 00:00,3368300,0.595975889372349 +20200814 00:00,3368400,0.5966362800679267 +20200817 00:00,3379100,0.5968801983745644 +20200818 00:00,3386400,0.5973627081530744 +20200819 00:00,3372300,0.5976992895045481 +20200820 00:00,3382800,0.5987268228087353 +20200821 00:00,3394800,0.5993593427314479 +20200824 00:00,3429200,0.5993821195928603 +20200825 00:00,3441200,0.5993962572611925 +20200826 00:00,3475700,0.5995576561941489 +20200827 00:00,3483300,0.5997096327296637 +20200828 00:00,3505800,0.5998565403099723 +20200831 00:00,3493100,0.6002926809176156 +20200901 00:00,3526000,0.6013418062372802 +20200902 00:00,3577000,0.6013089984467399 +20200903 00:00,3453900,0.6005872512396854 +20200904 00:00,3425700,0.5976446520587982 +20200908 00:00,3332100,0.5922076916459376 +20200909 00:00,3397900,0.590761810641453 +20200910 00:00,3338900,0.5887531613859676 +20200911 00:00,3340600,0.5872914853641331 +20200914 00:00,3384600,0.5865567971768758 +20200915 00:00,3401700,0.5858381455829254 +20200916 00:00,3388200,0.585680336619199 +20200917 00:00,3358400,0.5858305194346286 +20200918 00:00,3306500,0.5856702314271219 +20200921 00:00,3269700,0.5852154047887749 +20200922 00:00,3303000,0.5859125360528944 +20200923 00:00,3226400,0.5865492586103971 +20200924 00:00,3235000,0.5876151470469702 +20200925 00:00,3287300,0.5887299880704033 +20200928 00:00,3341900,0.5882967472882215 +20200929 00:00,3323700,0.5893943548661711 +20200930 00:00,3348900,0.5893597899140205 +20201001 00:00,3370400,0.5890925669322336 +20201002 00:00,3338400,0.5890172551235984 +20201005 00:00,3397600,0.5889090705900625 +20201006 00:00,3349300,0.5888232700748126 +20201007 00:00,3407600,0.5888347250668715 +20201008 00:00,3437800,0.5882165596501358 +20201009 00:00,3468500,0.5874770967111309 +20201012 00:00,3524300,0.5861796988085134 +20201013 00:00,3501300,0.5860755107885234 +20201014 00:00,3479300,0.5862145113028414 +20201015 00:00,3475000,0.5864610841070127 +20201016 00:00,3472900,0.5868391500509004 +20201019 00:00,3420100,0.5862099501217287 +20201020 00:00,3433800,0.5859781071310147 +20201021 00:00,3427300,0.5858372772965225 +20201022 00:00,3446100,0.585912443822824 +20201023 00:00,3457800,0.5859755051304226 +20201026 00:00,3393900,0.5855212828737139 +20201027 00:00,3382200,0.5847311078031907 +20201028 00:00,3266600,0.581291744006088 +20201029 00:00,3299800,0.579933986901129 +20201030 00:00,3265400,0.5792759393816377 +20201102 00:00,3302000,0.5793949772419303 +20201103 00:00,3360300,0.5787013316783116 +20201104 00:00,3435400,0.5757859383267204 +20201105 00:00,3502400,0.5711107344762709 +20201106 00:00,3501600,0.5684263574971338 +20201109 00:00,3545600,0.5660260429179645 +20201110 00:00,3540400,0.5648376867021986 +20201111 00:00,3566700,0.5641796210934297 +20201112 00:00,3532100,0.5642134999020338 +20201113 00:00,3581000,0.5646062006590629 +20201116 00:00,3625700,0.5647759423949351 +20201117 00:00,3606200,0.565639286446392 +20201118 00:00,3562800,0.5661116331755581 +20201119 00:00,3577800,0.5669031216494207 +20201120 00:00,3553300,0.5675161320016873 +20201123 00:00,3574600,0.5685101578247057 +20201124 00:00,3632200,0.5694969922023613 +20201125 00:00,3626600,0.5705588684132795 +20201127 00:00,3636700,0.5718154708703058 +20201130 00:00,3620600,0.572756283418908 +20201201 00:00,3660200,0.5732254932286042 +20201202 00:00,3667900,0.5734178410307154 +20201203 00:00,3666900,0.5735776497039404 +20201204 00:00,3698500,0.5736157805930095 +20201207 00:00,3690900,0.5737671131763243 +20201208 00:00,3701700,0.5739399041833362 +20201209 00:00,3668500,0.5740525276982021 +20201210 00:00,3667300,0.5740702436190002 +20201211 00:00,3663000,0.5740371112042708 +20201214 00:00,3646600,0.5738687913727714 +20201215 00:00,3695900,0.5738786685724372 +20201216 00:00,3701700,0.5737351290212614 +20201217 00:00,3722400,0.573610770694959 +20201218 00:00,3691800,0.5735890223898134 +20201221 00:00,3678600,0.5733557688002386 +20201222 00:00,3672400,0.5731407592732727 +20201223 00:00,3675700,0.5730010188610763 +20201224 00:00,3690000,0.5729762579177274 +20201228 00:00,3721700,0.5727560243576453 +20201229 00:00,3714600,0.5727000289909213 +20201230 00:00,3719900,0.5726078590754782 +20201231 00:00,3738800,0.5725320309196944 +20210104 00:00,3687900,0.5724041260413882 +20210105 00:00,3713300,0.5723615637395947 +20210106 00:00,3735500,0.5723993547381461 +20210107 00:00,3791000,0.571767382946368 +20210108 00:00,3812600,0.5709815351067049 +20210111 00:00,3786900,0.5709431855655897 +20210112 00:00,3787700,0.5708904254221592 +20210113 00:00,3797900,0.5710439874767561 +20210114 00:00,3784600,0.5711644287134439 +20210115 00:00,3757000,0.5709586169582948 +20210119 00:00,3786500,0.5711879531570336 +20210120 00:00,3838900,0.5711416404024924 +20210121 00:00,3842400,0.5714139659954879 +20210122 00:00,3828800,0.5723259416977756 +20210125 00:00,3843900,0.5725323277087295 +20210126 00:00,3837900,0.5725394730790694 +20210127 00:00,3744100,0.5710164418194464 +20210128 00:00,3776300,0.5700987306618831 +20210129 00:00,3700700,0.56784646899851 +20210201 00:00,3762300,0.568041585135663 +20210202 00:00,3815500,0.5671367281104945 +20210203 00:00,3818500,0.5652856760451395 +20210204 00:00,3861900,0.5622535443447124 +20210205 00:00,3877100,0.5587373826027323 +20210208 00:00,3905100,0.5546664220289743 +20210209 00:00,3902500,0.5499152394212625 +20210210 00:00,3900800,0.544252172385425 +20210211 00:00,3907100,0.5358705544240716 +20210212 00:00,3926400,0.5266089988589662 +20210216 00:00,3923000,0.5145842623669022 +20210217 00:00,3923900,0.5012810100278636 +20210218 00:00,3907200,0.485846257555784 +20210219 00:00,3900300,0.4698477604498517 +20210222 00:00,3870300,0.45114405964672344 +20210223 00:00,3875000,0.42759049024971163 +20210224 00:00,3917700,0.4048651576472696 +20210225 00:00,3823300,0.37889210905911047 +20210226 00:00,3803600,0.3597088518882273 +20210301 00:00,3895800,0.34209484691630876 +20210302 00:00,3865400,0.31808606060527156 +20210303 00:00,3814200,0.30066291703393283 +20210304 00:00,3767000,0.28426159489297687 +20210305 00:00,3836300,0.2770239013196848 +20210308 00:00,3817200,0.2711009524133687 +20210309 00:00,3871700,0.2718822562642916 +20210310 00:00,3895800,0.29035842837021014 +20210311 00:00,3935300,0.298652566076316 +20210312 00:00,3940600,0.2999219468971442 +20210315 00:00,3964100,0.31529009687327986 +20210316 00:00,3959100,0.31250597267623526 +20210317 00:00,3972600,0.32008915377034963 +20210318 00:00,3914800,0.318405827779393 +20210319 00:00,3894800,0.31534224408575356 +20210322 00:00,3925900,0.3085773185533856 +20210323 00:00,3895000,0.307839097747215 +20210324 00:00,3875200,0.3046323064335909 +20210325 00:00,3897000,0.3000920678700258 +20210326 00:00,3959800,0.3001520770437371 +20210329 00:00,3957800,0.29675447473389954 +20210330 00:00,3947300,0.3005158626108986 +20210331 00:00,3963300,0.2992306870606738 From 441ba1a7b582cb6f5b352f49af8cf20a9c0cfa55 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Fri, 28 Nov 2025 15:03:02 -0500 Subject: [PATCH 022/103] Add ExtendedDictionary implementations (#9096) * Add ExtendedDictionary implementations - Add DefaultExtendedDictionary class - Add ReadOnlyExtendedDictionary class - Refactor exposed dictionaries * Make DataDictionary inherits from DefaultExtendedDictionary * Refactor UniverseManager * Return ReadOnlyExtendedDictionary in GetParameters() * Solve review comments * Remove unnecesary property, no longer required * Reduce code duplication * Solve new review comments * Remove unnecesary constraints * Replace BaseExtendedDictionary with DataDictionary in GetLastKnownPrices method * Remove unused extensions --- Algorithm/QCAlgorithm.History.cs | 12 +- Algorithm/QCAlgorithm.cs | 2 +- .../Python/Wrappers/AlgorithmPythonWrapper.cs | 3 +- Common/Data/Market/DataDictionary.cs | 227 +----------- Common/Interfaces/IAlgorithm.cs | 3 +- Common/Securities/UniverseManager.cs | 196 +--------- Common/Util/BaseExtendedDictionary.cs | 256 +++++++++++++ Common/Util/LinqExtensions.cs | 45 ++- Common/Util/ReadOnlyExtendedDictionary.cs | 126 +++++++ Tests/Common/BaseExtendedDictionaryTests.cs | 338 ++++++++++++++++++ 10 files changed, 802 insertions(+), 406 deletions(-) create mode 100644 Common/Util/BaseExtendedDictionary.cs create mode 100644 Common/Util/ReadOnlyExtendedDictionary.cs create mode 100644 Tests/Common/BaseExtendedDictionaryTests.cs diff --git a/Algorithm/QCAlgorithm.History.cs b/Algorithm/QCAlgorithm.History.cs index d9d206e75445..34c418db9591 100644 --- a/Algorithm/QCAlgorithm.History.cs +++ b/Algorithm/QCAlgorithm.History.cs @@ -742,7 +742,7 @@ public IEnumerable GetLastKnownPrices(Symbol symbol) /// Securities historical data [DocumentationAttribute(AddingData)] [DocumentationAttribute(HistoricalData)] - public Dictionary> GetLastKnownPrices(IEnumerable securities) + public DataDictionary> GetLastKnownPrices(IEnumerable securities) { return GetLastKnownPrices(securities.Select(s => s.Symbol)); } @@ -754,11 +754,11 @@ public Dictionary> GetLastKnownPrices(IEnumerable< /// Securities historical data [DocumentationAttribute(AddingData)] [DocumentationAttribute(HistoricalData)] - public Dictionary> GetLastKnownPrices(IEnumerable symbols) + public DataDictionary> GetLastKnownPrices(IEnumerable symbols) { if (HistoryProvider == null) { - return new Dictionary>(); + return new DataDictionary>(); } var data = new Dictionary<(Symbol, Type, TickType), BaseData>(); @@ -766,10 +766,12 @@ public Dictionary> GetLastKnownPrices(IEnumerable< return data .GroupBy(kvp => kvp.Key.Item1) - .ToDictionary(g => g.Key, + .ToDataDictionary( + g => g.Key, g => g.OrderBy(kvp => kvp.Value.Time) .ThenBy(kvp => GetTickTypeOrder(kvp.Key.Item1.SecurityType, kvp.Key.Item3)) - .Select(kvp => kvp.Value)); + .Select(kvp => kvp.Value) + ); } /// diff --git a/Algorithm/QCAlgorithm.cs b/Algorithm/QCAlgorithm.cs index 702e6ab4e080..d8d27b126e96 100644 --- a/Algorithm/QCAlgorithm.cs +++ b/Algorithm/QCAlgorithm.cs @@ -916,7 +916,7 @@ public decimal GetParameter(string name, decimal defaultValue) [DocumentationAttribute(ParameterAndOptimization)] public IReadOnlyDictionary GetParameters() { - return _parameters.ToReadOnlyDictionary(); + return _parameters.ToReadOnlyExtendedDictionary(); } /// diff --git a/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs b/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs index 8cd9fce81516..cdaf900ffbbb 100644 --- a/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs +++ b/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs @@ -40,6 +40,7 @@ using QuantConnect.Commands; using QuantConnect.Algorithm.Framework.Portfolio.SignalExports; using QuantConnect.Algorithm.Framework.Execution; +using Common.Util; namespace QuantConnect.AlgorithmFactory.Python.Wrappers { @@ -1103,7 +1104,7 @@ public void OnWarmupFinished() /// /// The symbols we want to get seed data for /// Securities historical data - public Dictionary> GetLastKnownPrices(IEnumerable symbols) => _baseAlgorithm.GetLastKnownPrices(symbols); + public DataDictionary> GetLastKnownPrices(IEnumerable symbols) => _baseAlgorithm.GetLastKnownPrices(symbols); /// /// Set the runtime error diff --git a/Common/Data/Market/DataDictionary.cs b/Common/Data/Market/DataDictionary.cs index cd15648d02e4..a9845d39024c 100644 --- a/Common/Data/Market/DataDictionary.cs +++ b/Common/Data/Market/DataDictionary.cs @@ -13,9 +13,9 @@ * limitations under the License. */ +using Common.Util; using QuantConnect.Python; using System; -using System.Collections; using System.Collections.Generic; namespace QuantConnect.Data.Market @@ -24,15 +24,17 @@ namespace QuantConnect.Data.Market /// Provides a base class for types holding base data instances keyed by symbol /// [PandasNonExpandable] - public class DataDictionary : ExtendedDictionary, IDictionary + public class DataDictionary : BaseExtendedDictionary { - // storage for the data - private readonly IDictionary _data = new Dictionary(); + /// + /// Gets or sets the time associated with this collection of data + /// + public DateTime Time { get; set; } /// /// Initializes a new instance of the class. /// - public DataDictionary() + public DataDictionary() : base() { } @@ -43,186 +45,22 @@ public DataDictionary() /// The data source for this data dictionary /// Delegate used to select a key from the value public DataDictionary(IEnumerable data, Func keySelector) + : base(data, keySelector) { - foreach (var datum in data) - { - this[keySelector(datum)] = datum; - } } /// /// Initializes a new instance of the class. /// /// The time this data was emitted. - public DataDictionary(DateTime time) + public DataDictionary(DateTime time) : base() { -#pragma warning disable 618 // This assignment is left here until the Time property is removed. Time = time; -#pragma warning restore 618 - } - - /// - /// Gets or sets the time associated with this collection of data - /// - public DateTime Time { get; set; } - - /// - /// Returns an enumerator that iterates through the collection. - /// - /// - /// A that can be used to iterate through the collection. - /// - /// 1 - public IEnumerator> GetEnumerator() - { - return _data.GetEnumerator(); - } - /// - /// Returns an enumerator that iterates through a collection. - /// - /// - /// An object that can be used to iterate through the collection. - /// - /// 2 - IEnumerator IEnumerable.GetEnumerator() - { - return ((IEnumerable)_data).GetEnumerator(); - } - - /// - /// Adds an item to the . - /// - /// The object to add to the .The is read-only. - public void Add(KeyValuePair item) - { - _data.Add(item); - } - - /// - /// Removes all items from the . - /// - /// The is read-only. - public override void Clear() - { - _data.Clear(); - } - - /// - /// Determines whether the contains a specific value. - /// - /// - /// true if is found in the ; otherwise, false. - /// - /// The object to locate in the . - public virtual bool Contains(KeyValuePair item) - { - return _data.Contains(item); - } - - /// - /// Copies the elements of the to an , starting at a particular index. - /// - /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing.The zero-based index in at which copying begins. is null. is less than 0.The number of elements in the source is greater than the available space from to the end of the destination . - public void CopyTo(KeyValuePair[] array, int arrayIndex) - { - _data.CopyTo(array, arrayIndex); - } - - /// - /// Removes the first occurrence of a specific object from the . - /// - /// - /// true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - /// - /// The object to remove from the .The is read-only. - public virtual bool Remove(KeyValuePair item) - { - return _data.Remove(item); - } - - /// - /// Gets the number of elements contained in the . - /// - /// - /// The number of elements contained in the . - /// - public override int Count - { - get { return _data.Count; } - } - - /// - /// Gets a value indicating whether the is read-only. - /// - /// - /// true if the is read-only; otherwise, false. - /// - public override bool IsReadOnly - { - get { return _data.IsReadOnly; } - } - - /// - /// Determines whether the contains an element with the specified key. - /// - /// - /// true if the contains an element with the key; otherwise, false. - /// - /// The key to locate in the . is null. - public override bool ContainsKey(Symbol key) - { - return _data.ContainsKey(key); - } - - /// - /// Gets all the items in the dictionary - /// - /// All the items in the dictionary - public override IEnumerable> GetItems() => _data; - - /// - /// Adds an element with the provided key and value to the . - /// - /// The object to use as the key of the element to add.The object to use as the value of the element to add. is null.An element with the same key already exists in the .The is read-only. - public virtual void Add(Symbol key, T value) - { - _data.Add(key, value); - } - - /// - /// Removes the element with the specified key from the . - /// - /// - /// true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . - /// - /// The key of the element to remove. is null.The is read-only. - public override bool Remove(Symbol key) - { - return _data.Remove(key); - } - - /// - /// Gets the value associated with the specified key. - /// - /// - /// true if the object that implements contains an element with the specified key; otherwise, false. - /// - /// The key whose value to get.When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. is null. - public override bool TryGetValue(Symbol key, out T value) - { - return _data.TryGetValue(key, out value); } /// /// Gets or sets the element with the specified key. /// - /// - /// The element with the specified key. - /// - /// The key of the element to get or set. - /// is null. - /// The property is retrieved and is not found. - /// The property is set and the is read-only. public override T this[Symbol symbol] { get @@ -235,57 +73,12 @@ public override T this[Symbol symbol] CheckForImplicitlyCreatedSymbol(symbol); throw new KeyNotFoundException($"'{symbol}' wasn't found in the {GetType().GetBetterTypeName()} object, likely because there was no-data at this moment in time and it wasn't possible to fillforward historical data. Please check the data exists before accessing it with data.ContainsKey(\"{symbol}\")"); } - set - { - _data[symbol] = value; - } - } - - /// - /// Gets an containing the keys of the . - /// - /// - /// An containing the keys of the object that implements . - /// - public ICollection Keys - { - get { return _data.Keys; } - } - - /// - /// Gets an containing the values in the . - /// - /// - /// An containing the values in the object that implements . - /// - public ICollection Values - { - get { return _data.Values; } + set => base[symbol] = value; } - /// - /// Gets an containing the Symbol objects of the . - /// - /// - /// An containing the Symbol objects of the object that implements . - /// - protected override IEnumerable GetKeys => Keys; - - /// - /// Gets an containing the values in the . - /// - /// - /// An containing the values in the object that implements . - /// - protected override IEnumerable GetValues => Values; - /// /// Gets the value associated with the specified key. /// - /// The key whose value to get. - /// - /// The value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. - /// public virtual T GetValue(Symbol key) { T value; diff --git a/Common/Interfaces/IAlgorithm.cs b/Common/Interfaces/IAlgorithm.cs index 2ac9f8392b3f..e9ff46f42904 100644 --- a/Common/Interfaces/IAlgorithm.cs +++ b/Common/Interfaces/IAlgorithm.cs @@ -33,6 +33,7 @@ using QuantConnect.Algorithm.Framework.Alphas; using QuantConnect.Algorithm.Framework.Alphas.Analysis; using QuantConnect.Commands; +using Common.Util; namespace QuantConnect.Interfaces { @@ -855,7 +856,7 @@ Security AddSecurity(Symbol symbol, Resolution? resolution = null, bool fillForw /// /// The symbols we want to get seed data for /// Securities historical data - Dictionary> GetLastKnownPrices(IEnumerable symbols); + DataDictionary> GetLastKnownPrices(IEnumerable symbols); /// /// Set the runtime error diff --git a/Common/Securities/UniverseManager.cs b/Common/Securities/UniverseManager.cs index 477154bdc4d4..77df29396155 100644 --- a/Common/Securities/UniverseManager.cs +++ b/Common/Securities/UniverseManager.cs @@ -21,16 +21,16 @@ using System.Linq; using QuantConnect.Data.UniverseSelection; using QuantConnect.Util; +using Common.Util; namespace QuantConnect.Securities { /// /// Manages the algorithm's collection of universes /// - public class UniverseManager : IDictionary + public class UniverseManager : BaseExtendedDictionary> { private readonly Queue _pendingChanges = new(); - private readonly ConcurrentDictionary _universes; /// /// Event fired when a universe is added or removed @@ -43,135 +43,22 @@ public class UniverseManager : IDictionary /// public IReadOnlyDictionary ActiveSecurities => this .SelectMany(ukvp => ukvp.Value.Members.Select(mkvp => mkvp.Value)) - .DistinctBy(s => s.Symbol).ToDictionary(s => s.Symbol); + .DistinctBy(s => s.Symbol) + .ToReadOnlyExtendedDictionary(s => s.Symbol); /// /// Initializes a new instance of the class /// - public UniverseManager() + public UniverseManager() : base(new ConcurrentDictionary()) { - _universes = new ConcurrentDictionary(); - } - - #region IDictionary implementation - - /// - /// Returns an enumerator that iterates through the collection. - /// - /// - /// A that can be used to iterate through the collection. - /// - /// 1 - public IEnumerator> GetEnumerator() - { - return _universes.GetEnumerator(); - } - - /// - /// Returns an enumerator that iterates through a collection. - /// - /// - /// An object that can be used to iterate through the collection. - /// - /// 2 - IEnumerator IEnumerable.GetEnumerator() - { - return ((IEnumerable)_universes).GetEnumerator(); - } - - /// - /// Adds an item to the . - /// - /// The object to add to the .The is read-only. - public void Add(KeyValuePair item) - { - Add(item.Key, item.Value); - } - - /// - /// Removes all items from the . - /// - /// The is read-only. - public void Clear() - { - _universes.Clear(); - } - - /// - /// Determines whether the contains a specific value. - /// - /// - /// true if is found in the ; otherwise, false. - /// - /// The object to locate in the . - public bool Contains(KeyValuePair item) - { - return ContainsKey(item.Key); - } - - /// - /// Copies the elements of the to an , starting at a particular index. - /// - /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing.The zero-based index in at which copying begins. is null. is less than 0.The number of elements in the source is greater than the available space from to the end of the destination . - public void CopyTo(KeyValuePair[] array, int arrayIndex) - { - ((IDictionary)_universes).CopyTo(array, arrayIndex); } /// - /// Removes the first occurrence of a specific object from the . + /// Adds an element with the provided key and value to the dictionary /// - /// - /// true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - /// - /// The object to remove from the .The is read-only. - public bool Remove(KeyValuePair item) + public override void Add(Symbol key, Universe value) { - return Remove(item.Key); - } - - /// - /// Gets the number of elements contained in the . - /// - /// - /// The number of elements contained in the . - /// - public int Count => _universes.Skip(0).Count(); - - /// - /// Gets a value indicating whether the is read-only. - /// - /// - /// true if the is read-only; otherwise, false. - /// - public bool IsReadOnly - { - get { return false; } - } - - /// - /// Determines whether the contains an element with the specified key. - /// - /// - /// true if the contains an element with the key; otherwise, false. - /// - /// The key to locate in the . is null. - public bool ContainsKey(Symbol key) - { - return _universes.ContainsKey(key); - } - - /// - /// Adds an element with the provided key and value to the . - /// - /// The object to use as the key of the element to add. - /// The object to use as the value of the element to add. - /// is null. - /// An element with the same key already exists in the . - /// The is read-only. - public void Add(Symbol key, Universe value) - { - if (_universes.TryAdd(key, value)) + if (Dictionary.TryAdd(key, value)) { lock (_pendingChanges) { @@ -181,16 +68,11 @@ public void Add(Symbol key, Universe value) } /// - /// Updates an element with the provided key and value to the . + /// Updates an element with the provided key and value to the dictionary /// - /// The object to use as the key of the element to add. - /// The object to use as the value of the element to add. - /// is null. - /// An element with the same key already exists in the . - /// The is read-only. public void Update(Symbol key, Universe value, NotifyCollectionChangedAction action) { - if (_universes.ContainsKey(key) && !_pendingChanges.Any(x => x.Value == value)) + if (Dictionary.ContainsKey(key) && !_pendingChanges.Any(x => x.Value == value)) { lock (_pendingChanges) { @@ -221,16 +103,11 @@ public void ProcessChanges() } /// - /// Removes the element with the specified key from the . + /// Removes the element with the specified key from the dictionary /// - /// - /// true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original . - /// - /// The key of the element to remove. is null.The is read-only. - public bool Remove(Symbol key) + public override bool Remove(Symbol key) { - Universe universe; - if (_universes.TryRemove(key, out universe)) + if (Dictionary.TryRemove(key, out var universe)) { universe.Dispose(); OnCollectionChanged(new UniverseManagerChanged(NotifyCollectionChangedAction.Remove, universe)); @@ -240,38 +117,22 @@ public bool Remove(Symbol key) } /// - /// Gets the value associated with the specified key. - /// - /// - /// true if the object that implements contains an element with the specified key; otherwise, false. - /// - /// The key whose value to get.When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. is null. - public bool TryGetValue(Symbol key, out Universe value) - { - return _universes.TryGetValue(key, out value); - } - - /// - /// Gets or sets the element with the specified key. + /// Gets or sets the element with the specified key /// - /// - /// The element with the specified key. - /// - /// The key of the element to get or set. is null.The property is retrieved and is not found.The property is set and the is read-only. - public Universe this[Symbol symbol] + public override Universe this[Symbol symbol] { get { - if (!_universes.ContainsKey(symbol)) + if (!Dictionary.ContainsKey(symbol)) { throw new KeyNotFoundException($"This universe symbol ({symbol}) was not found in your universe list. Please add this security or check it exists before using it with 'Universes.ContainsKey(\"{SymbolCache.GetTicker(symbol)}\")'"); } - return _universes[symbol]; + return Dictionary[symbol]; } set { Universe existing; - if (_universes.TryGetValue(symbol, out existing) && existing != value) + if (Dictionary.TryGetValue(symbol, out existing) && existing != value) { throw new ArgumentException($"Unable to over write existing Universe: {symbol.Value}"); } @@ -284,31 +145,12 @@ public Universe this[Symbol symbol] } } - /// - /// Gets an containing the keys of the . - /// - /// - /// An containing the keys of the object that implements . - /// - public ICollection Keys => _universes.Select(x => x.Key).ToList(); - - /// - /// Gets an containing the values in the . - /// - /// - /// An containing the values in the object that implements . - /// - public ICollection Values => _universes.Select(x => x.Value).ToList(); - - #endregion - /// /// Event invocator for the event /// - /// protected virtual void OnCollectionChanged(UniverseManagerChanged e) { CollectionChanged?.Invoke(this, e); } } -} +} \ No newline at end of file diff --git a/Common/Util/BaseExtendedDictionary.cs b/Common/Util/BaseExtendedDictionary.cs new file mode 100644 index 000000000000..e38fee48ba86 --- /dev/null +++ b/Common/Util/BaseExtendedDictionary.cs @@ -0,0 +1,256 @@ +/* + * 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; +using System.Collections.Generic; +using QuantConnect; +using QuantConnect.Python; + +namespace Common.Util +{ + /// + /// Provides a generic implementation of ExtendedDictionary with specific dictionary type + /// + [PandasNonExpandable] + public class BaseExtendedDictionary : ExtendedDictionary, IDictionary + where TDictionary : IDictionary, new() + { + /// + /// The dictionary instance + /// + protected TDictionary Dictionary { get; } + + /// + /// Initializes a new instance of the BaseExtendedDictionary class that is empty + /// + public BaseExtendedDictionary() + { + Dictionary = new TDictionary(); + } + + /// + /// Initializes a new instance of the BaseExtendedDictionary class that contains elements copied from the specified dictionary + /// + /// The dictionary whose elements are copied to the new dictionary + public BaseExtendedDictionary(TDictionary dictionary) + { + Dictionary = dictionary; + } + + /// + /// Initializes a new instance of the BaseExtendedDictionary class + /// using the specified as a data source + /// + /// The data source for this dictionary + /// Delegate used to select a key from the value + public BaseExtendedDictionary(IEnumerable data, Func keySelector) + : this() + { + foreach (var datum in data) + { + Dictionary[keySelector(datum)] = datum; + } + } + + /// + /// Gets the number of elements contained in the dictionary + /// + public override int Count => Dictionary.Count; + + /// + /// Gets a value indicating whether the dictionary is read-only + /// + public override bool IsReadOnly => Dictionary.IsReadOnly; + + /// + /// Gets the value associated with the specified key + /// + /// The key whose value to get + /// When this method returns, the value associated with the specified key + /// true if the key was found; otherwise, false + public override bool TryGetValue(TKey key, out TValue value) + { + return Dictionary.TryGetValue(key, out value); + } + + /// + /// Gets all the items in the dictionary + /// + /// All the items in the dictionary + public override IEnumerable> GetItems() + { + return Dictionary; + } + + /// + /// Gets a collection containing the keys in the dictionary + /// + protected override IEnumerable GetKeys => Dictionary.Keys; + + /// + /// Gets a collection containing the values in the dictionary + /// + protected override IEnumerable GetValues => Dictionary.Values; + + /// + /// Gets a collection containing the keys of the dictionary + /// + public virtual ICollection Keys => Dictionary.Keys; + + /// + /// Gets a collection containing the values of the dictionary + /// + public virtual ICollection Values => Dictionary.Values; + + /// + /// Gets or sets the value associated with the specified key + /// + /// The key of the value to get or set + /// The value associated with the specified key + public override TValue this[TKey key] + { + get => Dictionary[key]; + set => Dictionary[key] = value; + } + + /// + /// Removes all items from the dictionary + /// + public override void Clear() + { + Dictionary.Clear(); + } + + /// + /// Removes the value with the specified key + /// + /// The key of the element to remove + /// true if the element was successfully found and removed; otherwise, false + public override bool Remove(TKey key) + { + return Dictionary.Remove(key); + } + + /// + /// Adds an element with the provided key and value to the dictionary + /// + /// The key of the element to add + /// The value of the element to add + public virtual void Add(TKey key, TValue value) + { + Dictionary.Add(key, value); + } + + /// + /// Adds an element with the provided key-value pair to the dictionary + /// + /// The key-value pair to add + public void Add(KeyValuePair item) + { + Dictionary.Add(item); + } + + /// + /// Determines whether the dictionary contains the specified key + /// + /// The key to locate in the dictionary + /// true if the dictionary contains an element with the specified key; otherwise, false + public override bool ContainsKey(TKey key) + { + return Dictionary.ContainsKey(key); + } + + /// + /// Determines whether the dictionary contains a specific key-value pair + /// + /// The key-value pair to locate + /// true if the key-value pair was found; otherwise, false + public virtual bool Contains(KeyValuePair item) + { + return Dictionary.Contains(item); + } + + /// + /// Copies the elements of the dictionary to an array, starting at a particular array index + /// + /// The array to copy to + /// The starting index in the array + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + Dictionary.CopyTo(array, arrayIndex); + } + + /// + /// Removes the first occurrence of a specific object from the dictionary + /// + /// The key-value pair to remove + /// true if the key-value pair was successfully removed; otherwise, false + public virtual bool Remove(KeyValuePair item) + { + return Dictionary.Remove(item); + } + + /// + /// Returns an enumerator that iterates through the dictionary + /// + /// An enumerator for the dictionary + public IEnumerator> GetEnumerator() + { + return Dictionary.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through the dictionary + /// + /// An enumerator for the dictionary + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } + + /// + /// Provides a default implementation of ExtendedDictionary using Dictionary{TKey, TValue} + /// + [PandasNonExpandable] + public class BaseExtendedDictionary : BaseExtendedDictionary> + { + /// + /// Initializes a new instance of the BaseExtendedDictionary class that is empty + /// + public BaseExtendedDictionary() : base() + { + } + + /// + /// Initializes a new instance of the BaseExtendedDictionary class that contains elements copied from the specified dictionary + /// + /// The dictionary whose elements are copied to the new dictionary + public BaseExtendedDictionary(IDictionary dictionary) : base(new Dictionary(dictionary)) + { + } + + /// + /// Initializes a new instance of the BaseExtendedDictionary class + /// using the specified as a data source + /// + /// The data source for this dictionary + /// Delegate used to select a key from the value + public BaseExtendedDictionary(IEnumerable data, Func keySelector) : base(data, keySelector) + { + } + } +} \ No newline at end of file diff --git a/Common/Util/LinqExtensions.cs b/Common/Util/LinqExtensions.cs index 38c4ae89ec58..82a7177c490c 100644 --- a/Common/Util/LinqExtensions.cs +++ b/Common/Util/LinqExtensions.cs @@ -18,6 +18,8 @@ using System.Collections.Immutable; using System.Collections.ObjectModel; using System.Linq; +using Common.Util; +using QuantConnect.Data.Market; namespace QuantConnect.Util { @@ -110,7 +112,7 @@ public static bool IsNullOrEmpty(this IEnumerable enumerable) public static T Median(this IEnumerable enumerable) { var collection = enumerable.ToList(); - return collection.OrderBy(x => x).Skip(collection.Count/2).First(); + return collection.OrderBy(x => x).Skip(collection.Count / 2).First(); } /// @@ -254,7 +256,7 @@ public static IEnumerable> GroupAdjacentBy(this IEnumerable { if (e.MoveNext()) { - var list = new List {e.Current}; + var list = new List { e.Current }; var pred = e.Current; while (e.MoveNext()) { @@ -265,7 +267,7 @@ public static IEnumerable> GroupAdjacentBy(this IEnumerable else { yield return list; - list = new List {e.Current}; + list = new List { e.Current }; } pred = e.Current; } @@ -285,7 +287,7 @@ public static IEnumerable> GroupAdjacentBy(this IEnumerable /// True if there are any differences between the two sets, false otherwise public static bool AreDifferent(this ISet left, ISet right) { - if(ReferenceEquals(left, right)) + if (ReferenceEquals(left, right)) { return false; } @@ -337,5 +339,40 @@ public static void DoForEach(this IEnumerable source, Action action) action(element); } } + + /// + /// Converts a dictionary to a ReadOnlyExtendedDictionary + /// + public static ReadOnlyExtendedDictionary ToReadOnlyExtendedDictionary( + this IDictionary dictionary) + { + return new ReadOnlyExtendedDictionary(dictionary); + } + + /// + /// Creates a ReadOnlyExtendedDictionary from an IEnumerable according to specified key selector + /// + public static ReadOnlyExtendedDictionary ToReadOnlyExtendedDictionary( + this IEnumerable source, + Func keySelector) + { + return new ReadOnlyExtendedDictionary(source, keySelector); + } + + /// + /// Creates a DataDictionary from an IEnumerable according to specified key and value selectors + /// + public static DataDictionary ToDataDictionary( + this IEnumerable source, + Func keySelector, + Func valueSelector) + { + var result = new DataDictionary(); + foreach (var item in source) + { + result.Add(keySelector(item), valueSelector(item)); + } + return result; + } } } diff --git a/Common/Util/ReadOnlyExtendedDictionary.cs b/Common/Util/ReadOnlyExtendedDictionary.cs new file mode 100644 index 000000000000..56f0606feb38 --- /dev/null +++ b/Common/Util/ReadOnlyExtendedDictionary.cs @@ -0,0 +1,126 @@ +/* + * 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.Python; + +namespace Common.Util +{ + /// + /// Provides a read-only implementation of ExtendedDictionary + /// + [PandasNonExpandable] + public class ReadOnlyExtendedDictionary : BaseExtendedDictionary, IReadOnlyDictionary + { + /// + /// Initializes a new instance of the ReadOnlyExtendedDictionary class that is empty + /// + public ReadOnlyExtendedDictionary() + { + } + + /// + /// Initializes a new instance of the ReadOnlyExtendedDictionary class that contains elements copied from the specified dictionary + /// + /// The dictionary whose elements are copied to the new dictionary + public ReadOnlyExtendedDictionary(IDictionary dictionary) : base(dictionary) + { + } + + /// + /// Initializes a new instance of the ReadOnlyExtendedDictionary class + /// using the specified as a data source + /// + /// The data source for this dictionary + /// Delegate used to select a key from the value + public ReadOnlyExtendedDictionary(IEnumerable data, Func keySelector) : base(data, keySelector) + { + } + + /// + /// Gets a value indicating whether the dictionary is read-only + /// + public override bool IsReadOnly => true; + + /// + /// Gets an enumerable collection containing the keys of the read-only dictionary + /// + IEnumerable IReadOnlyDictionary.Keys => base.Keys; + + /// + /// Gets an enumerable collection containing the values of the read-only dictionary + /// + IEnumerable IReadOnlyDictionary.Values => base.Values; + + /// + /// Gets or sets the value associated with the specified key + /// + /// The key of the value to get or set + /// The value associated with the specified key + public override TValue this[TKey key] + { + get => base[key]; + set => throw new InvalidOperationException("Dictionary is read-only"); + } + + /// + /// Removes all items from the dictionary + /// + public override void Clear() + { + throw new InvalidOperationException("Dictionary is read-only"); + } + + /// + /// Removes the value with the specified key + /// + /// The key of the element to remove + /// true if the element was successfully found and removed; otherwise, false + public override bool Remove(TKey key) + { + throw new InvalidOperationException("Dictionary is read-only"); + } + + /// + /// Adds an element with the provided key and value to the dictionary + /// + /// The key of the element to add + /// The value of the element to add + public new void Add(TKey key, TValue value) + { + throw new InvalidOperationException("Dictionary is read-only"); + } + + /// + /// Adds an element with the provided key-value pair to the dictionary + /// + /// The key-value pair to add + public new void Add(KeyValuePair item) + { + throw new InvalidOperationException("Dictionary is read-only"); + } + + /// + /// Removes the first occurrence of a specific object from the dictionary + /// + /// The key-value pair to remove + /// true if the key-value pair was successfully removed; otherwise, false + public new bool Remove(KeyValuePair item) + { + throw new InvalidOperationException("Dictionary is read-only"); + } + } +} \ No newline at end of file diff --git a/Tests/Common/BaseExtendedDictionaryTests.cs b/Tests/Common/BaseExtendedDictionaryTests.cs new file mode 100644 index 000000000000..1762ebc60692 --- /dev/null +++ b/Tests/Common/BaseExtendedDictionaryTests.cs @@ -0,0 +1,338 @@ +/* + * 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 System.Linq; +using NUnit.Framework; +using Common.Util; +using Python.Runtime; + +namespace QuantConnect.Tests.Common +{ + [TestFixture] + public class BaseExtendedDictionaryTests + { + [Test] + public void AddAndGetItemsWorksCorrectly() + { + var dict = new BaseExtendedDictionary(); + + dict.Add("key1", "value1"); + dict["key2"] = "value2"; + + Assert.AreEqual("value1", dict["key1"]); + Assert.AreEqual("value2", dict["key2"]); + Assert.AreEqual(2, dict.Count); + } + + [Test] + public void ContainsKeyExistingKeyReturnsTrue() + { + var dict = new BaseExtendedDictionary(); + dict.Add(1, "one"); + + Assert.IsTrue(dict.ContainsKey(1)); + Assert.IsFalse(dict.ContainsKey(2)); + } + + [Test] + public void TryGetValueExistingKeyReturnsTrueAndValue() + { + var dict = new BaseExtendedDictionary(); + dict["price"] = 100.5m; + + bool result = dict.TryGetValue("price", out decimal value); + + Assert.IsTrue(result); + Assert.AreEqual(100.5m, value); + } + + [Test] + public void TryGetValueNonExistingKeyReturnsFalseAndDefault() + { + var dict = new BaseExtendedDictionary(); + + bool result = dict.TryGetValue("nonexistent", out decimal value); + + Assert.IsFalse(result); + Assert.AreEqual(0, value); + } + + [Test] + public void RemoveExistingKeyRemovesItem() + { + var dict = new BaseExtendedDictionary(); + dict.Add("a", 1); + dict.Add("b", 2); + + bool removed = dict.Remove("a"); + + Assert.IsTrue(removed); + Assert.AreEqual(1, dict.Count); + Assert.IsFalse(dict.ContainsKey("a")); + Assert.IsTrue(dict.ContainsKey("b")); + } + + [Test] + public void ClearRemovesAllItems() + { + var dict = new BaseExtendedDictionary(); + dict.Add("a", 1); + dict.Add("b", 2); + + dict.Clear(); + + Assert.AreEqual(0, dict.Count); + Assert.IsFalse(dict.ContainsKey("a")); + Assert.IsFalse(dict.ContainsKey("b")); + } + + [Test] + public void GetMethodExistingKeyReturnsValue() + { + var dict = new BaseExtendedDictionary(); + dict["test"] = "success"; + + var result = dict.get("test"); + + Assert.AreEqual("success", result); + } + + [Test] + public void GetMethodNonExistingKeyReturnsDefault() + { + var dict = new BaseExtendedDictionary(); + + var result = dict.get("nonexistent"); + + Assert.AreEqual(0, result); + } + + [Test] + public void KeysAndValuesPropertiesReturnCorrectCollections() + { + var dict = new BaseExtendedDictionary(); + dict[1] = "one"; + dict[2] = "two"; + + var keys = dict.Keys.ToList(); + var values = dict.Values.ToList(); + + Assert.AreEqual(2, keys.Count); + Assert.AreEqual(2, values.Count); + Assert.Contains(1, keys); + Assert.Contains(2, keys); + Assert.Contains("one", values); + Assert.Contains("two", values); + } + + [Test] + public void ConstructorWithInitialDictionaryCopiesData() + { + var initialDict = new Dictionary + { + {"a", 1}, + {"b", 2} + }; + + var extendedDict = new BaseExtendedDictionary(initialDict); + + Assert.AreEqual(2, extendedDict.Count); + Assert.AreEqual(1, extendedDict["a"]); + Assert.AreEqual(2, extendedDict["b"]); + } + + [Test] + public void ConstructorWithDataAndKeySelectorPopulatesDictionary() + { + var data = new List { "apple", "banana" }; + + var dict = new BaseExtendedDictionary( + data, + fruit => fruit.Substring(0, 1) // key is first letter + ); + + Assert.AreEqual(2, dict.Count); + Assert.AreEqual("apple", dict["a"]); + Assert.AreEqual("banana", dict["b"]); + } + + [Test] + public void EnumerationWorksCorrectly() + { + var dict = new BaseExtendedDictionary(); + dict[1] = "one"; + dict[2] = "two"; + + var items = new List>(); + foreach (var kvp in dict) + { + items.Add(kvp); + } + + Assert.AreEqual(2, items.Count); + Assert.IsTrue(items.Any(kvp => kvp.Key == 1 && kvp.Value == "one")); + Assert.IsTrue(items.Any(kvp => kvp.Key == 2 && kvp.Value == "two")); + } + + [Test] + public void CopyToCopiesItemsToArray() + { + var dict = new BaseExtendedDictionary(); + dict[1] = "one"; + dict[2] = "two"; + + var array = new KeyValuePair[2]; + dict.CopyTo(array, 0); + + Assert.AreEqual(2, array.Length); + Assert.IsTrue(array.Contains(new KeyValuePair(1, "one"))); + Assert.IsTrue(array.Contains(new KeyValuePair(2, "two"))); + } + + [Test] + public void ReadOnlyExtendedDictionaryReturnsTrueForIsReadOnly() + { + var dict = new ReadOnlyExtendedDictionary(); + Assert.IsTrue(dict.IsReadOnly); + } + + [Test] + public void ReadOnlyExtendedDictionaryThrowsInvalidOperationExceptionForIndexerSet() + { + var dict = new ReadOnlyExtendedDictionary(new Dictionary { { "test", 1 } }); + + Assert.Throws(() => dict["test"] = 2); + } + + [Test] + public void ReadOnlyExtendedDictionaryThrowsInvalidOperationExceptionForClear() + { + var dict = new ReadOnlyExtendedDictionary(); + Assert.Throws(() => dict.Clear()); + } + + [Test] + public void ReadOnlyExtendedDictionaryThrowsInvalidOperationExceptionForRemoveByKey() + { + var dict = new ReadOnlyExtendedDictionary(); + Assert.Throws(() => dict.Remove("anykey")); + } + + [Test] + public void ReadOnlyExtendedDictionaryThrowsInvalidOperationExceptionForAddByKeyValue() + { + var dict = new ReadOnlyExtendedDictionary(); + Assert.Throws(() => dict.Add("newkey", 123)); + } + + [Test] + public void BaseExtendedDictionaryBehavesAsPythonDictionary() + { + using var _ = Py.GIL(); + + var module = PyModule.FromString("BaseExtendedDictionaryBehavesAsPythonDictionary", + @" +def contains(dictionary, key): + return key in dictionary + +def get(dictionary, key): + return dictionary.get(key) + +def keys(dictionary): + return dictionary.keys() + +def items(dictionary): + return list(dictionary.items()) + +def values(dictionary): + return dictionary.values() + +def pop(dictionary, key): + return dictionary.pop(key) + +def setdefault(dictionary, key, default_value): + return dictionary.setdefault(key, default_value) + +def update(dictionary, other_dict): + dictionary.update(other_dict) +"); + + var dict = new BaseExtendedDictionary + { + ["a"] = 1, + ["b"] = 2, + ["c"] = 3 + }; + using var pyDict = dict.ToPython(); + + // Test keys() + var expectedKeys = new[] { "a", "b", "c" }; + var keys = module.InvokeMethod("keys", pyDict).GetAndDispose>(); + CollectionAssert.AreEquivalent(expectedKeys, keys); + + // Test values() + var expectedValues = new[] { 1, 2, 3 }; + var values = module.InvokeMethod("values", pyDict).GetAndDispose>(); + CollectionAssert.AreEquivalent(expectedValues, values); + + // Test items() method + using var itemsResult = module.InvokeMethod("items", pyDict); + Assert.IsNotNull(itemsResult); + var itemsLength = PythonEngine.Eval($"len({itemsResult.Repr()})").As(); + Assert.AreEqual(3, itemsLength); + + // Test contains and get + foreach (var (key, value) in keys.Zip(values)) + { + using var pyKey = key.ToPython(); + Assert.IsTrue(module.InvokeMethod("contains", pyDict, pyKey).As()); + Assert.AreEqual(value, module.InvokeMethod("get", pyDict, pyKey).As()); + } + + // Test non-existing key + using var pyNonExistingKey = "d".ToPython(); + Assert.IsFalse(module.InvokeMethod("contains", pyDict, pyNonExistingKey).As()); + + // Test pop + using var pyExistingKey = keys[0].ToPython(); + var popped = module.InvokeMethod("pop", pyDict, pyExistingKey).As(); + Assert.AreEqual(1, popped); + Assert.IsFalse(module.InvokeMethod("contains", pyDict, pyExistingKey).As()); + + // Test setdefault with existing key + using var pyExistingKey2 = keys[1].ToPython(); + var setdefaultExisting = module.InvokeMethod("setdefault", pyDict, pyExistingKey2, 999.ToPython()).As(); + Assert.AreEqual(2, setdefaultExisting); // Should return existing value + + // Test setdefault with new key + using var pyNewKey = "new".ToPython(); + using var pyDefaultValue = 100.ToPython(); + var setdefaultNew = module.InvokeMethod("setdefault", pyDict, pyNewKey, pyDefaultValue).As(); + Assert.AreEqual(100, setdefaultNew); + Assert.IsTrue(module.InvokeMethod("contains", pyDict, pyNewKey).As()); + + // Test update + using var updateDict = new PyDict(); + updateDict.SetItem("x".ToPython(), 10.ToPython()); + updateDict.SetItem("y".ToPython(), 20.ToPython()); + module.InvokeMethod("update", pyDict, updateDict); + + Assert.AreEqual(10, module.InvokeMethod("get", pyDict, "x".ToPython()).As()); + Assert.AreEqual(20, module.InvokeMethod("get", pyDict, "y".ToPython()).As()); + } + } +} From 9acd30c355a1521fa119ec54182182f1d2269348 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Mon, 1 Dec 2025 12:44:22 -0400 Subject: [PATCH 023/103] Make DataDictionary ordered by key (symbol) (#9105) * Make DataDictionary ordered by key (symbol) * Cache DataDictionary sorted items * Minor tests fixes * Minor changes * Minor changes --- ...ntractWithContinuousRegressionAlgorithm.cs | 36 ++--- ...tractFromFutureChainRegressionAlgorithm.cs | 2 +- ...ctedInUniverseFilterRegressionAlgorithm.cs | 32 ++-- ...icatorWarmupDataTypeRegressionAlgorithm.cs | 2 +- .../ConsolidateRegressionAlgorithm.cs | 2 +- ...elistingFutureOptionRegressionAlgorithm.cs | 4 +- ...xercisedBeforeExpiryRegressionAlgorithm.cs | 36 ++--- ...IndexOptionsExerciseRegressionAlgorithm.cs | 30 ++-- ...AfterHoursForFuturesRegressionAlgorithm.cs | 40 ++--- ...endedHoursForFuturesRegressionAlgorithm.cs | 38 ++--- .../OpenInterestFuturesRegressionAlgorithm.cs | 4 +- ...ChainApisConsistencyRegressionAlgorithm.cs | 4 +- ...onWithFutureContractRegressionAlgorithm.cs | 2 +- .../ConsolidateRegressionAlgorithm.py | 2 +- ...ChainApisConsistencyRegressionAlgorithm.py | 4 +- Algorithm/QCAlgorithm.History.cs | 8 +- Common/Data/Market/DataDictionary.cs | 141 +++++++++++++++++- Common/Util/BaseExtendedDictionary.cs | 6 +- Tests/Common/Data/SliceTests.cs | 4 +- 19 files changed, 268 insertions(+), 129 deletions(-) diff --git a/Algorithm.CSharp/AddFutureContractWithContinuousRegressionAlgorithm.cs b/Algorithm.CSharp/AddFutureContractWithContinuousRegressionAlgorithm.cs index 5993d707accb..4267b57aefcf 100644 --- a/Algorithm.CSharp/AddFutureContractWithContinuousRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddFutureContractWithContinuousRegressionAlgorithm.cs @@ -115,7 +115,7 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 62; + public long DataPoints => 61; /// /// Data Points count of the algorithm history @@ -132,34 +132,34 @@ public override void OnSecuritiesChanged(SecurityChanges changes) /// public Dictionary ExpectedStatistics => new Dictionary { - {"Total Orders", "3"}, + {"Total Orders", "4"}, {"Average Win", "0%"}, - {"Average Loss", "-0.03%"}, - {"Compounding Annual Return", "-2.594%"}, - {"Drawdown", "0.000%"}, + {"Average Loss", "-0.10%"}, + {"Compounding Annual Return", "-14.232%"}, + {"Drawdown", "0.200%"}, {"Expectancy", "-1"}, {"Start Equity", "100000"}, - {"End Equity", "99966.4"}, - {"Net Profit", "-0.034%"}, - {"Sharpe Ratio", "-10.666"}, + {"End Equity", "99803.9"}, + {"Net Profit", "-0.196%"}, + {"Sharpe Ratio", "-7.95"}, {"Sortino Ratio", "0"}, {"Probabilistic Sharpe Ratio", "1.216%"}, {"Loss Rate", "100%"}, {"Win Rate", "0%"}, {"Profit-Loss Ratio", "0"}, - {"Alpha", "-0.029"}, - {"Beta", "0.004"}, - {"Annual Standard Deviation", "0.003"}, + {"Alpha", "-0.128"}, + {"Beta", "0.026"}, + {"Annual Standard Deviation", "0.016"}, {"Annual Variance", "0"}, - {"Information Ratio", "-0.768"}, - {"Tracking Error", "0.241"}, - {"Treynor Ratio", "-6.368"}, + {"Information Ratio", "-1.186"}, + {"Tracking Error", "0.237"}, + {"Treynor Ratio", "-4.747"}, {"Total Fees", "$8.60"}, - {"Estimated Strategy Capacity", "$5500000.00"}, - {"Lowest Capacity Asset", "ES VMKLFZIH2MTD"}, - {"Portfolio Turnover", "66.80%"}, + {"Estimated Strategy Capacity", "$2000.00"}, + {"Lowest Capacity Asset", "ES VU1EHIDJYLMP"}, + {"Portfolio Turnover", "66.50%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "39f1e15c27212d8fdd58aeb7fb2b93cc"} + {"OrderListHash", "4720516462fcabb4db1aead46051cb4a"} }; } } diff --git a/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs b/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs index 867c376f5294..68c7554e0b68 100644 --- a/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddFutureOptionContractFromFutureChainRegressionAlgorithm.cs @@ -137,7 +137,7 @@ public override void OnData(Slice slice) {"Lowest Capacity Asset", "ES 31C3JQS9DCF1G|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "495.15%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "3f6016b4879428eaef0b7057d4b86f18"} + {"OrderListHash", "af830085995d0b8fa0d33a6e80dd1241"} }; } } diff --git a/Algorithm.CSharp/AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm.cs b/Algorithm.CSharp/AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm.cs index adaa92a3cf3d..feae130a33c6 100644 --- a/Algorithm.CSharp/AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm.cs @@ -240,31 +240,31 @@ public override void OnEndOfAlgorithm() {"Total Orders", "2"}, {"Average Win", "0%"}, {"Average Loss", "0%"}, - {"Compounding Annual Return", "309.669%"}, - {"Drawdown", "0.900%"}, + {"Compounding Annual Return", "430.834%"}, + {"Drawdown", "4.200%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, - {"End Equity", "101950.53"}, - {"Net Profit", "1.951%"}, - {"Sharpe Ratio", "15.402"}, + {"End Equity", "102313.03"}, + {"Net Profit", "2.313%"}, + {"Sharpe Ratio", "17.721"}, {"Sortino Ratio", "0"}, {"Probabilistic Sharpe Ratio", "95.977%"}, {"Loss Rate", "0%"}, {"Win Rate", "0%"}, {"Profit-Loss Ratio", "0"}, - {"Alpha", "1.886"}, - {"Beta", "1.066"}, - {"Annual Standard Deviation", "0.155"}, - {"Annual Variance", "0.024"}, - {"Information Ratio", "13.528"}, - {"Tracking Error", "0.142"}, - {"Treynor Ratio", "2.237"}, + {"Alpha", "2.663"}, + {"Beta", "1.264"}, + {"Annual Standard Deviation", "0.184"}, + {"Annual Variance", "0.034"}, + {"Information Ratio", "16.514"}, + {"Tracking Error", "0.169"}, + {"Treynor Ratio", "2.574"}, {"Total Fees", "$3.57"}, - {"Estimated Strategy Capacity", "$760000.00"}, - {"Lowest Capacity Asset", "ES XCZJLDQX7338|ES XCZJLC9NOB29"}, - {"Portfolio Turnover", "32.31%"}, + {"Estimated Strategy Capacity", "$28000000.00"}, + {"Lowest Capacity Asset", "ES XCZJLCA62LNO|ES XCZJLC9NOB29"}, + {"Portfolio Turnover", "33.84%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "9179c6e6a693a6593c97bfa825d53170"} + {"OrderListHash", "7c82013ecabca41591e0253a477025dd"} }; } } diff --git a/Algorithm.CSharp/AutomaticIndicatorWarmupDataTypeRegressionAlgorithm.cs b/Algorithm.CSharp/AutomaticIndicatorWarmupDataTypeRegressionAlgorithm.cs index d6eddc5c1a6f..f6633f164a02 100644 --- a/Algorithm.CSharp/AutomaticIndicatorWarmupDataTypeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AutomaticIndicatorWarmupDataTypeRegressionAlgorithm.cs @@ -38,7 +38,7 @@ public override void Initialize() SetEndDate(2013, 10, 10); var SP500 = QuantConnect.Symbol.Create(Futures.Indices.SP500EMini, SecurityType.Future, Market.CME); - _symbol = FuturesChain(SP500).First(); + _symbol = FuturesChain(SP500).OrderBy(x => x.Symbol.ID.Date).First(); // Test case: custom IndicatorBase indicator using Future unsubscribed symbol var indicator1 = new CustomIndicator(); diff --git a/Algorithm.CSharp/ConsolidateRegressionAlgorithm.cs b/Algorithm.CSharp/ConsolidateRegressionAlgorithm.cs index 9f7b09a7c8eb..297c560ebada 100644 --- a/Algorithm.CSharp/ConsolidateRegressionAlgorithm.cs +++ b/Algorithm.CSharp/ConsolidateRegressionAlgorithm.cs @@ -47,7 +47,7 @@ public override void Initialize() SetEndDate(2020, 01, 20); var SP500 = QuantConnect.Symbol.Create(Futures.Indices.SP500EMini, SecurityType.Future, Market.CME); - var symbol = FuturesChain(SP500).First(); + var symbol = FuturesChain(SP500).OrderBy(x => x.Symbol.ID.Date).First(); _future = AddFutureContract(symbol); var tradableDatesCount = QuantConnect.Time.EachTradeableDayInTimeZone(_future.Exchange.Hours, diff --git a/Algorithm.CSharp/DelistingFutureOptionRegressionAlgorithm.cs b/Algorithm.CSharp/DelistingFutureOptionRegressionAlgorithm.cs index c308b4bbe6b1..79fcc59031c8 100644 --- a/Algorithm.CSharp/DelistingFutureOptionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DelistingFutureOptionRegressionAlgorithm.cs @@ -146,10 +146,10 @@ public override void OnEndOfAlgorithm() {"Treynor Ratio", "-15.266"}, {"Total Fees", "$11.36"}, {"Estimated Strategy Capacity", "$65000000.00"}, - {"Lowest Capacity Asset", "ES XCZJLDQX7338|ES XCZJLC9NOB29"}, + {"Lowest Capacity Asset", "ES XCZJLDQR8R1G|ES XCZJLC9NOB29"}, {"Portfolio Turnover", "0.16%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "48b7918176ec22534969502849fe596b"} + {"OrderListHash", "f9210adc1afc4460146528006675e734"} }; } } diff --git a/Algorithm.CSharp/EuropeanOptionsCannotBeExercisedBeforeExpiryRegressionAlgorithm.cs b/Algorithm.CSharp/EuropeanOptionsCannotBeExercisedBeforeExpiryRegressionAlgorithm.cs index fa08c0debfc9..3f9ce0cc1038 100644 --- a/Algorithm.CSharp/EuropeanOptionsCannotBeExercisedBeforeExpiryRegressionAlgorithm.cs +++ b/Algorithm.CSharp/EuropeanOptionsCannotBeExercisedBeforeExpiryRegressionAlgorithm.cs @@ -160,33 +160,33 @@ public override void OnEndOfAlgorithm() public Dictionary ExpectedStatistics => new Dictionary { {"Total Orders", "2"}, - {"Average Win", "0.68%"}, + {"Average Win", "2.19%"}, {"Average Loss", "0%"}, - {"Compounding Annual Return", "24.075%"}, - {"Drawdown", "1.900%"}, + {"Compounding Annual Return", "100.016%"}, + {"Drawdown", "3.600%"}, {"Expectancy", "0"}, {"Start Equity", "200000"}, - {"End Equity", "201354"}, - {"Net Profit", "0.677%"}, - {"Sharpe Ratio", "5.76"}, + {"End Equity", "204384"}, + {"Net Profit", "2.192%"}, + {"Sharpe Ratio", "9.169"}, {"Sortino Ratio", "0"}, - {"Probabilistic Sharpe Ratio", "89.644%"}, + {"Probabilistic Sharpe Ratio", "92.918%"}, {"Loss Rate", "0%"}, {"Win Rate", "100%"}, {"Profit-Loss Ratio", "0"}, - {"Alpha", "0.946"}, - {"Beta", "-0.354"}, - {"Annual Standard Deviation", "0.123"}, - {"Annual Variance", "0.015"}, - {"Information Ratio", "0.211"}, - {"Tracking Error", "0.176"}, - {"Treynor Ratio", "-2.004"}, + {"Alpha", "3.002"}, + {"Beta", "-0.818"}, + {"Annual Standard Deviation", "0.268"}, + {"Annual Variance", "0.072"}, + {"Information Ratio", "5.749"}, + {"Tracking Error", "0.31"}, + {"Treynor Ratio", "-2.999"}, {"Total Fees", "$0.00"}, - {"Estimated Strategy Capacity", "$1700000.00"}, - {"Lowest Capacity Asset", "SPX XL80P3HB9YI6|SPX 31"}, - {"Portfolio Turnover", "0.35%"}, + {"Estimated Strategy Capacity", "$420000.00"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, + {"Portfolio Turnover", "2.37%"}, {"Drawdown Recovery", "10"}, - {"OrderListHash", "d671fe71272a6c1b489d09071967a5de"} + {"OrderListHash", "0d2ccc2fdfa2b81bf71361c8248c4a59"} }; } } diff --git a/Algorithm.CSharp/InteractiveBrokersBrokerageDisablesIndexOptionsExerciseRegressionAlgorithm.cs b/Algorithm.CSharp/InteractiveBrokersBrokerageDisablesIndexOptionsExerciseRegressionAlgorithm.cs index 3c7f59d74941..0c075b4ce4ec 100644 --- a/Algorithm.CSharp/InteractiveBrokersBrokerageDisablesIndexOptionsExerciseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/InteractiveBrokersBrokerageDisablesIndexOptionsExerciseRegressionAlgorithm.cs @@ -163,33 +163,33 @@ public override void OnEndOfAlgorithm() public Dictionary ExpectedStatistics => new Dictionary { {"Total Orders", "3"}, - {"Average Win", "0.68%"}, + {"Average Win", "2.19%"}, {"Average Loss", "0%"}, - {"Compounding Annual Return", "10.046%"}, - {"Drawdown", "1.900%"}, + {"Compounding Annual Return", "36.041%"}, + {"Drawdown", "3.600%"}, {"Expectancy", "0"}, {"Start Equity", "200000"}, - {"End Equity", "201353"}, - {"Net Profit", "0.676%"}, - {"Sharpe Ratio", "3.253"}, + {"End Equity", "204383"}, + {"Net Profit", "2.192%"}, + {"Sharpe Ratio", "4.088"}, {"Sortino Ratio", "0"}, - {"Probabilistic Sharpe Ratio", "86.292%"}, + {"Probabilistic Sharpe Ratio", "89.872%"}, {"Loss Rate", "0%"}, {"Win Rate", "100%"}, {"Profit-Loss Ratio", "0"}, {"Alpha", "0"}, {"Beta", "0"}, - {"Annual Standard Deviation", "0.081"}, - {"Annual Variance", "0.007"}, - {"Information Ratio", "3.284"}, - {"Tracking Error", "0.081"}, + {"Annual Standard Deviation", "0.177"}, + {"Annual Variance", "0.031"}, + {"Information Ratio", "4.102"}, + {"Tracking Error", "0.177"}, {"Treynor Ratio", "0"}, {"Total Fees", "$1.00"}, - {"Estimated Strategy Capacity", "$1700000.00"}, - {"Lowest Capacity Asset", "SPX XL80P3HB9YI6|SPX 31"}, - {"Portfolio Turnover", "0.16%"}, + {"Estimated Strategy Capacity", "$420000.00"}, + {"Lowest Capacity Asset", "SPX XL80P3GHIA9A|SPX 31"}, + {"Portfolio Turnover", "1.09%"}, {"Drawdown Recovery", "10"}, - {"OrderListHash", "be2eef3af814d254879e4c6902d9eb9c"} + {"OrderListHash", "e913c917ccb2641d70e8fffb47df4f02"} }; } } diff --git a/Algorithm.CSharp/LimitOrdersAreFilledAfterHoursForFuturesRegressionAlgorithm.cs b/Algorithm.CSharp/LimitOrdersAreFilledAfterHoursForFuturesRegressionAlgorithm.cs index fe676af4387e..a6473ce5c98e 100644 --- a/Algorithm.CSharp/LimitOrdersAreFilledAfterHoursForFuturesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/LimitOrdersAreFilledAfterHoursForFuturesRegressionAlgorithm.cs @@ -113,7 +113,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 52987; + public long DataPoints => 50978; /// /// Data Points count of the algorithm history @@ -133,31 +133,31 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Total Orders", "2"}, {"Average Win", "0%"}, {"Average Loss", "0%"}, - {"Compounding Annual Return", "120.870%"}, - {"Drawdown", "3.700%"}, + {"Compounding Annual Return", "-9.298%"}, + {"Drawdown", "2.500%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, - {"End Equity", "101091.4"}, - {"Net Profit", "1.091%"}, - {"Sharpe Ratio", "4.261"}, - {"Sortino Ratio", "29.094"}, - {"Probabilistic Sharpe Ratio", "58.720%"}, + {"End Equity", "99866.4"}, + {"Net Profit", "-0.134%"}, + {"Sharpe Ratio", "1.959"}, + {"Sortino Ratio", "4.863"}, + {"Probabilistic Sharpe Ratio", "53.257%"}, {"Loss Rate", "0%"}, {"Win Rate", "0%"}, {"Profit-Loss Ratio", "0"}, - {"Alpha", "1.134"}, - {"Beta", "1.285"}, - {"Annual Standard Deviation", "0.314"}, - {"Annual Variance", "0.098"}, - {"Information Ratio", "15.222"}, - {"Tracking Error", "0.077"}, - {"Treynor Ratio", "1.04"}, + {"Alpha", "0.239"}, + {"Beta", "0.695"}, + {"Annual Standard Deviation", "0.178"}, + {"Annual Variance", "0.032"}, + {"Information Ratio", "2.059"}, + {"Tracking Error", "0.093"}, + {"Treynor Ratio", "0.501"}, {"Total Fees", "$4.30"}, - {"Estimated Strategy Capacity", "$39000000.00"}, - {"Lowest Capacity Asset", "ES VMKLFZIH2MTD"}, - {"Portfolio Turnover", "33.59%"}, - {"Drawdown Recovery", "3"}, - {"OrderListHash", "8286cb0dd42649527c2c0032ee00e2bd"} + {"Estimated Strategy Capacity", "$25000000.00"}, + {"Lowest Capacity Asset", "ES VU1EHIDJYLMP"}, + {"Portfolio Turnover", "33.58%"}, + {"Drawdown Recovery", "0"}, + {"OrderListHash", "5a14a3f8b50e3117d87c69d6b11102fc"} }; } } diff --git a/Algorithm.CSharp/MarketOrdersAreSupportedOnExtendedHoursForFuturesRegressionAlgorithm.cs b/Algorithm.CSharp/MarketOrdersAreSupportedOnExtendedHoursForFuturesRegressionAlgorithm.cs index da05ce7ac517..125046779e53 100644 --- a/Algorithm.CSharp/MarketOrdersAreSupportedOnExtendedHoursForFuturesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/MarketOrdersAreSupportedOnExtendedHoursForFuturesRegressionAlgorithm.cs @@ -90,7 +90,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 52987; + public long DataPoints => 50978; /// /// Data Points count of the algorithm history @@ -110,31 +110,31 @@ public override void OnOrderEvent(OrderEvent orderEvent) {"Total Orders", "2"}, {"Average Win", "0%"}, {"Average Loss", "0%"}, - {"Compounding Annual Return", "113.036%"}, - {"Drawdown", "3.700%"}, + {"Compounding Annual Return", "-0.626%"}, + {"Drawdown", "2.400%"}, {"Expectancy", "0"}, {"Start Equity", "100000"}, - {"End Equity", "101041.4"}, - {"Net Profit", "1.041%"}, - {"Sharpe Ratio", "4.262"}, - {"Sortino Ratio", "29.102"}, - {"Probabilistic Sharpe Ratio", "58.720%"}, + {"End Equity", "99991.4"}, + {"Net Profit", "-0.009%"}, + {"Sharpe Ratio", "1.959"}, + {"Sortino Ratio", "4.862"}, + {"Probabilistic Sharpe Ratio", "53.257%"}, {"Loss Rate", "0%"}, {"Win Rate", "0%"}, {"Profit-Loss Ratio", "0"}, - {"Alpha", "1.135"}, - {"Beta", "1.285"}, - {"Annual Standard Deviation", "0.314"}, - {"Annual Variance", "0.098"}, - {"Information Ratio", "15.206"}, - {"Tracking Error", "0.078"}, - {"Treynor Ratio", "1.04"}, + {"Alpha", "0.239"}, + {"Beta", "0.694"}, + {"Annual Standard Deviation", "0.177"}, + {"Annual Variance", "0.031"}, + {"Information Ratio", "2.05"}, + {"Tracking Error", "0.093"}, + {"Treynor Ratio", "0.501"}, {"Total Fees", "$4.30"}, - {"Estimated Strategy Capacity", "$12000000.00"}, - {"Lowest Capacity Asset", "ES VMKLFZIH2MTD"}, - {"Portfolio Turnover", "33.61%"}, + {"Estimated Strategy Capacity", "$15000000.00"}, + {"Lowest Capacity Asset", "ES VU1EHIDJYLMP"}, + {"Portfolio Turnover", "33.51%"}, {"Drawdown Recovery", "3"}, - {"OrderListHash", "1a8899e6c1498f63634de38910878619"} + {"OrderListHash", "523d76e17b23ee0c94ded9f826cb8c22"} }; } } diff --git a/Algorithm.CSharp/OpenInterestFuturesRegressionAlgorithm.cs b/Algorithm.CSharp/OpenInterestFuturesRegressionAlgorithm.cs index 17715252bc39..06d674473dee 100644 --- a/Algorithm.CSharp/OpenInterestFuturesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OpenInterestFuturesRegressionAlgorithm.cs @@ -133,10 +133,10 @@ public override void OnData(Slice slice) {"Treynor Ratio", "0"}, {"Total Fees", "$9.88"}, {"Estimated Strategy Capacity", "$0"}, - {"Lowest Capacity Asset", "GC VMRHKN2NLWV1"}, + {"Lowest Capacity Asset", "GC VOFJUCDY9XNH"}, {"Portfolio Turnover", "1.32%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "cc9ca77de1272050971b5438e757df61"} + {"OrderListHash", "d57e121407fdce1b84a2bbe92be78e02"} }; } } diff --git a/Algorithm.CSharp/OptionChainApisConsistencyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainApisConsistencyRegressionAlgorithm.cs index c5fa4dd360f6..bb39d036e387 100644 --- a/Algorithm.CSharp/OptionChainApisConsistencyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainApisConsistencyRegressionAlgorithm.cs @@ -38,10 +38,10 @@ public override void Initialize() var option = GetOption(); - var optionChainFromAlgorithmApi = OptionChain(option.Symbol).Contracts.Values.Select(x => x.Symbol).ToList(); + var optionChainFromAlgorithmApi = OptionChain(option.Symbol).Contracts.Keys.ToList(); var exchangeTime = UtcTime.ConvertFromUtc(option.Exchange.TimeZone); - var optionChainFromProviderApi = OptionChainProvider.GetOptionContractList(option.Symbol, exchangeTime).ToList(); + var optionChainFromProviderApi = OptionChainProvider.GetOptionContractList(option.Symbol, exchangeTime).Order().ToList(); if (optionChainFromAlgorithmApi.Count == 0) { diff --git a/Algorithm.CSharp/SecuritySessionWithFutureContractRegressionAlgorithm.cs b/Algorithm.CSharp/SecuritySessionWithFutureContractRegressionAlgorithm.cs index b55bd7f46687..ea952a6b4d7d 100644 --- a/Algorithm.CSharp/SecuritySessionWithFutureContractRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecuritySessionWithFutureContractRegressionAlgorithm.cs @@ -36,7 +36,7 @@ public override void InitializeSecurity() SetEndDate(2013, 10, 08); Security = AddFuture(Futures.Metals.Gold, Resolution.Minute, extendedMarketHours: ExtendedMarketHours); - _futureContract = AddFutureContract(FuturesChain(Security.Symbol).First()); + _futureContract = AddFutureContract(FuturesChain(Security.Symbol).OrderBy(x => x.Symbol.ID.Date).First()); // Manually add consolidators to simulate Session behavior _continuousContractConsolidator = new MarketHourAwareConsolidator(false, Resolution.Daily, typeof(QuoteBar), TickType.Quote, false); diff --git a/Algorithm.Python/ConsolidateRegressionAlgorithm.py b/Algorithm.Python/ConsolidateRegressionAlgorithm.py index 25d4e390cecb..bf3f9eead8a7 100644 --- a/Algorithm.Python/ConsolidateRegressionAlgorithm.py +++ b/Algorithm.Python/ConsolidateRegressionAlgorithm.py @@ -25,7 +25,7 @@ def initialize(self): self.set_end_date(2020, 1, 20) SP500 = Symbol.create(Futures.Indices.SP_500_E_MINI, SecurityType.FUTURE, Market.CME) - symbol = list(self.futures_chain(SP500))[0] + symbol = list(sorted(self.futures_chain(SP500).contracts.keys(), key=lambda symbol: symbol.id.date))[0] self._future = self.add_future_contract(symbol) tradable_dates_count = len(list(Time.each_tradeable_day_in_time_zone(self._future.exchange.hours, diff --git a/Algorithm.Python/OptionChainApisConsistencyRegressionAlgorithm.py b/Algorithm.Python/OptionChainApisConsistencyRegressionAlgorithm.py index 12d31d6919ab..702a20dd7bb6 100644 --- a/Algorithm.Python/OptionChainApisConsistencyRegressionAlgorithm.py +++ b/Algorithm.Python/OptionChainApisConsistencyRegressionAlgorithm.py @@ -28,10 +28,10 @@ def initialize(self) -> None: option = self.get_option() - option_chain_from_algorithm_api = [x.symbol for x in self.option_chain(option.symbol).contracts.values()] + option_chain_from_algorithm_api = self.option_chain(option.symbol).contracts.keys() exchange_time = Extensions.convert_from_utc(self.utc_time, option.exchange.time_zone) - option_chain_from_provider_api = list(self.option_chain_provider.get_option_contract_list(option.symbol, exchange_time)) + option_chain_from_provider_api = list(sorted(self.option_chain_provider.get_option_contract_list(option.symbol, exchange_time))) if len(option_chain_from_algorithm_api) == 0: raise AssertionError("No options in chain from algorithm API") diff --git a/Algorithm/QCAlgorithm.History.cs b/Algorithm/QCAlgorithm.History.cs index 34c418db9591..7ab90facb8af 100644 --- a/Algorithm/QCAlgorithm.History.cs +++ b/Algorithm/QCAlgorithm.History.cs @@ -31,10 +31,10 @@ namespace QuantConnect.Algorithm { public partial class QCAlgorithm { - private readonly int SeedLookbackPeriod = Config.GetInt("seed-lookback-period", 5); - private readonly int SeedRetryMinuteLookbackPeriod = Config.GetInt("seed-retry-minute-lookback-period", 24 * 60); - private readonly int SeedRetryHourLookbackPeriod = Config.GetInt("seed-retry-hour-lookback-period", 24); - private readonly int SeedRetryDailyLookbackPeriod = Config.GetInt("seed-retry-daily-lookback-period", 10); + private static readonly int SeedLookbackPeriod = Config.GetInt("seed-lookback-period", 5); + private static readonly int SeedRetryMinuteLookbackPeriod = Config.GetInt("seed-retry-minute-lookback-period", 24 * 60); + private static readonly int SeedRetryHourLookbackPeriod = Config.GetInt("seed-retry-hour-lookback-period", 24); + private static readonly int SeedRetryDailyLookbackPeriod = Config.GetInt("seed-retry-daily-lookback-period", 10); private bool _dataDictionaryTickWarningSent; diff --git a/Common/Data/Market/DataDictionary.cs b/Common/Data/Market/DataDictionary.cs index a9845d39024c..f41ea0017828 100644 --- a/Common/Data/Market/DataDictionary.cs +++ b/Common/Data/Market/DataDictionary.cs @@ -17,6 +17,8 @@ using QuantConnect.Python; using System; using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; namespace QuantConnect.Data.Market { @@ -26,6 +28,14 @@ namespace QuantConnect.Data.Market [PandasNonExpandable] public class DataDictionary : BaseExtendedDictionary { + /// + /// Used to cache the sorted items in the dictionary. + /// We do this instead of using a SortedDictionary to keep the O(1) access time. + /// + private List> _items; + private List _keys; + private List _values; + /// /// Gets or sets the time associated with this collection of data /// @@ -73,7 +83,11 @@ public override T this[Symbol symbol] CheckForImplicitlyCreatedSymbol(symbol); throw new KeyNotFoundException($"'{symbol}' wasn't found in the {GetType().GetBetterTypeName()} object, likely because there was no-data at this moment in time and it wasn't possible to fillforward historical data. Please check the data exists before accessing it with data.ContainsKey(\"{symbol}\")"); } - set => base[symbol] = value; + set + { + _items = null; + base[symbol] = value; + } } /// @@ -85,6 +99,131 @@ public virtual T GetValue(Symbol key) TryGetValue(key, out value); return value; } + + /// + /// Gets all the items in the dictionary + /// + /// All the items in the dictionary + public override IEnumerable> GetItems() + { + if (_items == null) + { + _items = base.GetItems().OrderBy(x => x.Key).ToList(); + } + return _items; + } + + /// + /// Gets a collection containing the keys of the dictionary + /// + public override ICollection Keys + { + get + { + if (_keys == null) + { + _keys = (_items == null ? base.Keys.OrderBy(x => x) : _items.Select(x => x.Key)).ToList(); + } + return _keys; + } + } + + /// + /// Gets a collection containing the values of the dictionary + /// + public override ICollection Values + { + get + { + if (_values == null) + { + var items = _items == null + ? base.GetItems().OrderBy(x => x.Key) + : (IEnumerable>)_items; + _values = items.Select(x => x.Value).ToList(); + } + return _values; + } + } + + /// + /// Gets a collection containing the keys in the dictionary + /// + protected override IEnumerable GetKeys => Keys; + + /// + /// Gets a collection containing the values in the dictionary + /// + protected override IEnumerable GetValues => Values; + + /// + /// Returns an enumerator that iterates through the dictionary + /// + /// An enumerator for the dictionary + public override IEnumerator> GetEnumerator() + { + return GetItems().GetEnumerator(); + } + + /// + /// Removes all items from the dictionary + /// + public override void Clear() + { + ClearCache(); + base.Clear(); + } + + /// + /// Removes the value with the specified key + /// + /// The key of the element to remove + /// true if the element was successfully found and removed; otherwise, false + public override bool Remove(Symbol key) + { + ClearCache(); + return base.Remove(key); + } + + /// + /// Removes the first occurrence of a specific object from the dictionary + /// + /// The key-value pair to remove + /// true if the key-value pair was successfully removed; otherwise, false + public override bool Remove(KeyValuePair item) + { + ClearCache(); + return base.Remove(item); + } + + /// + /// Adds an element with the provided key and value to the dictionary + /// + /// The key of the element to add + /// The value of the element to add + public override void Add(Symbol key, T value) + { + ClearCache(); + base.Add(key, value); + } + + /// + /// Adds an element with the provided key-value pair to the dictionary + /// + /// The key-value pair to add + public override void Add(KeyValuePair item) + { + ClearCache(); + base.Add(item); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ClearCache() + { + _items = null; + _keys = null; + _values = null; + } } /// diff --git a/Common/Util/BaseExtendedDictionary.cs b/Common/Util/BaseExtendedDictionary.cs index e38fee48ba86..effef7c89ebd 100644 --- a/Common/Util/BaseExtendedDictionary.cs +++ b/Common/Util/BaseExtendedDictionary.cs @@ -158,7 +158,7 @@ public virtual void Add(TKey key, TValue value) /// Adds an element with the provided key-value pair to the dictionary /// /// The key-value pair to add - public void Add(KeyValuePair item) + public virtual void Add(KeyValuePair item) { Dictionary.Add(item); } @@ -207,7 +207,7 @@ public virtual bool Remove(KeyValuePair item) /// Returns an enumerator that iterates through the dictionary /// /// An enumerator for the dictionary - public IEnumerator> GetEnumerator() + public virtual IEnumerator> GetEnumerator() { return Dictionary.GetEnumerator(); } @@ -253,4 +253,4 @@ public BaseExtendedDictionary(IEnumerable data, Func keySe { } } -} \ No newline at end of file +} diff --git a/Tests/Common/Data/SliceTests.cs b/Tests/Common/Data/SliceTests.cs index edbf530aff7c..e674b46af541 100644 --- a/Tests/Common/Data/SliceTests.cs +++ b/Tests/Common/Data/SliceTests.cs @@ -1131,7 +1131,7 @@ def Test(slice, symbol): var result = string.Empty; Assert.DoesNotThrow(() => result = test(GetSlice(), Symbols.SPY)); - Assert.AreEqual("SPY R735QTJ8XC9X: 10.0, AAPL R735QTJ8XC9X: 11.0", result); + Assert.AreEqual("AAPL R735QTJ8XC9X: 11.0, SPY R735QTJ8XC9X: 10.0", result); } } @@ -1149,7 +1149,7 @@ def Test(slice): var result = string.Empty; Assert.DoesNotThrow(() => result = test(GetSlice())); - Assert.AreEqual("SPY R735QTJ8XC9X: 10.0, AAPL R735QTJ8XC9X: 11.0", result); + Assert.AreEqual("AAPL R735QTJ8XC9X: 11.0, SPY R735QTJ8XC9X: 10.0", result); } } From a78004a1e6dad114457a794445bec4405a5ab053 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Mon, 1 Dec 2025 11:49:17 -0500 Subject: [PATCH 024/103] Add default values to ConstantAlphaModel (#9104) * Initial solution * Add unit tests * Fix constructor parameter mismatch in ConstantAlphaModel * Delete unused constructor --- .../Alphas/ConstantAlphaModel.cs | 15 +------ .../Alphas/ConstantAlphaModelTests.cs | 44 ++++++++++++++++++- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/Algorithm.Framework/Alphas/ConstantAlphaModel.cs b/Algorithm.Framework/Alphas/ConstantAlphaModel.cs index ca0c190a5487..4aaa302e10f8 100644 --- a/Algorithm.Framework/Alphas/ConstantAlphaModel.cs +++ b/Algorithm.Framework/Alphas/ConstantAlphaModel.cs @@ -36,17 +36,6 @@ public class ConstantAlphaModel : AlphaModel private readonly HashSet _securities; private readonly Dictionary _insightsTimeBySymbol; - /// - /// Initializes a new instance of the class - /// - /// The type of insight - /// The direction of the insight - /// The period over which the insight with come to fruition - public ConstantAlphaModel(InsightType type, InsightDirection direction, TimeSpan period) - : this(type, direction, period, null, null) - { - } - /// /// Initializes a new instance of the class /// @@ -56,7 +45,7 @@ public ConstantAlphaModel(InsightType type, InsightDirection direction, TimeSpan /// The predicted change in magnitude as a +- percentage /// The confidence in the insight /// The portfolio weight of the insights - public ConstantAlphaModel(InsightType type, InsightDirection direction, TimeSpan period, double? magnitude, double? confidence, double? weight = null) + public ConstantAlphaModel(InsightType type, InsightDirection direction, TimeSpan period, double? magnitude = null, double? confidence = null, double? weight = null) { _type = type; _direction = direction; @@ -127,7 +116,7 @@ public override void OnSecuritiesChanged(QCAlgorithm algorithm, SecurityChanges /// The symbol to emit an insight for protected virtual bool ShouldEmitInsight(DateTime utcTime, Symbol symbol) { - if(symbol.IsCanonical()) + if (symbol.IsCanonical()) { // canonical futures & options are none tradable return false; diff --git a/Tests/Algorithm/Framework/Alphas/ConstantAlphaModelTests.cs b/Tests/Algorithm/Framework/Alphas/ConstantAlphaModelTests.cs index 56e3e870d7d6..e2c61f36225f 100644 --- a/Tests/Algorithm/Framework/Alphas/ConstantAlphaModelTests.cs +++ b/Tests/Algorithm/Framework/Alphas/ConstantAlphaModelTests.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -19,6 +19,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using static System.FormattableString; namespace QuantConnect.Tests.Algorithm.Framework.Alphas @@ -44,6 +45,47 @@ protected override IAlphaModel CreatePythonAlphaModel() } } + [TestCase(Language.CSharp)] + [TestCase(Language.Python)] + public void ConstructorWithWeightOnlySetsWeightCorrectly(Language language) + { + IAlphaModel alpha; + if (language == Language.CSharp) + { + alpha = new ConstantAlphaModel(InsightType.Price, InsightDirection.Up, TimeSpan.FromDays(1), weight: 0.1); + } + else + { + using (Py.GIL()) + { + var testModule = PyModule.FromString("test_module", + @" +from AlgorithmImports import * + +def test_constructor(): + model = ConstantAlphaModel(InsightType.Price, InsightDirection.Up, timedelta(1), weight=0.1) + return model + "); + + alpha = testModule.GetAttr("test_constructor").Invoke().As(); + } + } + + var magnitude = GetPrivateField(alpha, "_magnitude"); + var confidence = GetPrivateField(alpha, "_confidence"); + var weight = GetPrivateField(alpha, "_weight"); + + Assert.IsNull(magnitude); + Assert.IsNull(confidence); + Assert.AreEqual(0.1, weight); + } + + private static object GetPrivateField(object obj, string fieldName) + { + var field = obj.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance); + return field?.GetValue(obj); + } + protected override IEnumerable ExpectedInsights() { return Enumerable.Range(0, 360).Select(x => new Insight(Symbols.SPY, _period, _type, _direction, _magnitude, _confidence)); From 263a9099edf1c4dc648a3bdb6aba4ececb9cd73c Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Fri, 5 Dec 2025 10:03:27 -0400 Subject: [PATCH 025/103] Add TryDownloadData extension method (#9111) --- Common/Extensions.cs | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/Common/Extensions.cs b/Common/Extensions.cs index 9ecf5dcc33ca..5d528f236c2e 100644 --- a/Common/Extensions.cs +++ b/Common/Extensions.cs @@ -262,33 +262,54 @@ public static List DeserializeList(this string jsonArray) /// /// The http client to use /// The url to download data from + /// The downloaded data + /// The request status code /// Add custom headers for the request - public static string DownloadData(this HttpClient client, string url, Dictionary headers = null) + public static bool TryDownloadData(this HttpClient client, string url, out string data, out HttpStatusCode? statusCode, Dictionary headers = null) { + data = null; + statusCode = null; + using var request = new HttpRequestMessage(HttpMethod.Get, url); if (headers != null) { foreach (var kvp in headers) { - client.DefaultRequestHeaders.Add(kvp.Key, kvp.Value); + request.Headers.Add(kvp.Key, kvp.Value); } } try { - using (var response = client.GetAsync(url).Result) + using var response = client.SendAsync(request).SynchronouslyAwaitTaskResult(); + statusCode = response.StatusCode; + + if (!response.IsSuccessStatusCode) { - using (var content = response.Content) - { - return content.ReadAsStringAsync().Result; - } + Log.Error($"DownloadData(): {Messages.Extensions.DownloadDataFailed(url)}. Status code: {response.StatusCode}"); + return false; } + + data = response.Content.ReadAsStringAsync().SynchronouslyAwaitTaskResult(); + return true; } catch (WebException ex) { Log.Error(ex, $"DownloadData(): {Messages.Extensions.DownloadDataFailed(url)}"); - return null; + return false; } } + /// + /// Helper method to download a provided url as a string + /// + /// The http client to use + /// The url to download data from + /// Add custom headers for the request + public static string DownloadData(this HttpClient client, string url, Dictionary headers = null) + { + client.TryDownloadData(url, out var data, out _, headers); + return data; + } + /// /// Helper method to download a provided url as a string /// From 683bfe007a401b131d9135cd62322d67c5fb231f Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Fri, 5 Dec 2025 10:05:40 -0400 Subject: [PATCH 026/103] Avoid emitting overlapping fill forwarded data (#9107) * Avoid emitting overlapping fill forward data * Cleanup --- ...icatorSelectorsWorkWithDifferentOptions.cs | 2 +- .../Enumerators/FillForwardEnumerator.cs | 34 +++++++++++-- .../Enumerators/FillForwardEnumeratorTests.cs | 49 +++++++++++++++++++ 3 files changed, 79 insertions(+), 6 deletions(-) diff --git a/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs b/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs index f8f1b1075065..95c949c52b57 100644 --- a/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs +++ b/Algorithm.CSharp/IndicatorSelectorsWorkWithDifferentOptions.cs @@ -186,7 +186,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 455431; + public long DataPoints => 455371; /// /// Data Points count of the algorithm history diff --git a/Engine/DataFeeds/Enumerators/FillForwardEnumerator.cs b/Engine/DataFeeds/Enumerators/FillForwardEnumerator.cs index 830a6c01a8a6..381180dc9d64 100644 --- a/Engine/DataFeeds/Enumerators/FillForwardEnumerator.cs +++ b/Engine/DataFeeds/Enumerators/FillForwardEnumerator.cs @@ -18,6 +18,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Runtime.CompilerServices; using NodaTime; using QuantConnect.Data; using QuantConnect.Data.Consolidators; @@ -338,16 +339,29 @@ protected virtual bool RequiresFillForwardData(TimeSpan fillForwardResolution, B } // check to see if the gap between previous and next warrants fill forward behavior - var nextPreviousTimeUtcDelta = nextTimeUtc - previousTimeUtc; - if (nextPreviousTimeUtcDelta <= fillForwardResolution && - nextPreviousTimeUtcDelta <= _dataResolution && - // even if there is no gap between the two data points, we still fill forward to ensure a FF bar is emitted at strict end time - !_strictEndTimeIntraDayFillForward) + if (!ShouldFillForward(previousTimeUtc, nextTimeUtc, fillForwardResolution)) { fillForward = null; return false; } + // Double check! + // This might be the last FF bar before the next data point, and it might not be to be + // emitted because it will overlap with the next point. + // If the previous point was fill forwarded, its time might have been rounded down, + // we need to compare apples to apples. + // (e.g. daily bars with times != midnight and without strict end times) + var nextPeriod = nextEndTimeUtc - nextTimeUtc; + if (previous.IsFillForward && (!UseStrictEndTime || nextPeriod <= Time.OneHour)) + { + var roundedNextTimeUtc = RoundDown(next.Time, nextPeriod).ConvertToUtc(Exchange.TimeZone); + if (!ShouldFillForward(previousTimeUtc, roundedNextTimeUtc, fillForwardResolution)) + { + fillForward = null; + return false; + } + } + var period = _dataResolution; if (UseStrictEndTime) { @@ -467,6 +481,16 @@ protected virtual bool RequiresFillForwardData(TimeSpan fillForwardResolution, B return false; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private bool ShouldFillForward(DateTime previousTimeUtc, DateTime nextTimeUtc, TimeSpan fillForwardResolution) + { + var nextPreviousTimeUtcDelta = nextTimeUtc - previousTimeUtc; + return nextPreviousTimeUtcDelta > fillForwardResolution || + nextPreviousTimeUtcDelta > _dataResolution || + // even if there is no gap between the two data points, we still fill forward to ensure a FF bar is emitted at strict end time + _strictEndTimeIntraDayFillForward; + } + private IEnumerable GetSortedReferenceDateIntervals(BaseData previous, TimeSpan fillForwardResolution, TimeSpan dataResolution) { if (fillForwardResolution < dataResolution) diff --git a/Tests/Engine/DataFeeds/Enumerators/FillForwardEnumeratorTests.cs b/Tests/Engine/DataFeeds/Enumerators/FillForwardEnumeratorTests.cs index 5cde411c3351..097389dcc907 100644 --- a/Tests/Engine/DataFeeds/Enumerators/FillForwardEnumeratorTests.cs +++ b/Tests/Engine/DataFeeds/Enumerators/FillForwardEnumeratorTests.cs @@ -2427,6 +2427,55 @@ public void FillForwardsFromLastTrackedPoint() Assert.AreEqual(7, dataCount); } + [Test] + public void DoesNotEmitFillForwardBarOverlappingNextAvailableBar() + { + var dataResolution = Time.OneDay; + var fillForwardResolution = Time.OneDay; + + var subscriptionStartTime = new DateTime(2024, 11, 1); + var subscriptionEndTime = subscriptionStartTime.AddDays(3); + + var bar1 = new TradeBar { Time = subscriptionStartTime.AddHours(-12), Value = 1, Period = dataResolution }; + var bar2 = new TradeBar { Time = subscriptionEndTime.AddHours(-12), Value = 2, Period = dataResolution }; + using var enumerator = new List { bar1, bar2 }.GetEnumerator(); + + var exchange = new SecurityExchange(SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork)); + using var fillForwardEnumerator = new FillForwardEnumerator(enumerator, exchange, + Ref.Create(fillForwardResolution), false, subscriptionStartTime, subscriptionEndTime, + dataResolution, exchange.TimeZone, false); + + var ffBar1 = bar1.Clone(fillForward: true); + ffBar1.Time = subscriptionStartTime; + + var ffbar2 = bar1.Clone(fillForward: true); + ffbar2.Time = subscriptionStartTime.AddDays(1); + + var expectedData = new List + { + bar1, + ffBar1, + ffbar2, + // This test reproduces GH issue #9092: + // An additional FF bar would be emitted here overlapping bar2 + bar2 + }; + + var i = 0; + while (fillForwardEnumerator.MoveNext()) + { + var current = fillForwardEnumerator.Current; + var expectedCurrent = expectedData[i++]; + + Assert.AreEqual(expectedCurrent.Time, current.Time, $"Failed on index {i - 1}"); + Assert.AreEqual(expectedCurrent.EndTime, current.EndTime, $"Failed on index {i - 1}"); + Assert.AreEqual(expectedCurrent.Value, current.Value, $"Failed on index {i - 1}"); + Assert.AreEqual(expectedCurrent.IsFillForward, current.IsFillForward, $"Failed on index {i - 1}"); + } + + Assert.AreEqual(expectedData.Count, i); + } + private static SecurityExchangeHours CreateCustomFutureExchangeHours(DateTime earlyClose, DateTime lateOpen) { var sunday = new LocalMarketHours( From 14427129c71b39bc3cc90f9f0b4f96832aa13ec3 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Mon, 8 Dec 2025 17:41:28 -0300 Subject: [PATCH 027/103] Minor fix to handle all tick security updates (#9117) --- .../EquityTickQuoteAdjustedModeRegressionAlgorithm.cs | 2 +- .../FillOutsideHoursTickResolutionAlgorithm.cs | 2 +- ...oseOrderFillsOnCloseTradeWithTickResolutionAlgorithm.cs | 2 +- ...OpenOrderFillsOnOpenTradeWithTickResolutionAlgorithm.cs | 2 +- Algorithm.CSharp/OpenInterestFuturesRegressionAlgorithm.cs | 2 +- Common/Securities/SecurityCache.cs | 7 ++++--- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Algorithm.CSharp/EquityTickQuoteAdjustedModeRegressionAlgorithm.cs b/Algorithm.CSharp/EquityTickQuoteAdjustedModeRegressionAlgorithm.cs index 07060346811c..0d7c0dfc6e59 100644 --- a/Algorithm.CSharp/EquityTickQuoteAdjustedModeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/EquityTickQuoteAdjustedModeRegressionAlgorithm.cs @@ -125,7 +125,7 @@ public override void OnData(Slice slice) {"Lowest Capacity Asset", "IBM R735QTJ8XC9X"}, {"Portfolio Turnover", "39.89%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "32f56b0f4e9300ef1a34464e8083c7e7"} + {"OrderListHash", "d2af4746a4d01ca4d0ce0b0c44f30451"} }; } } diff --git a/Algorithm.CSharp/FillOutsideHoursTickResolutionAlgorithm.cs b/Algorithm.CSharp/FillOutsideHoursTickResolutionAlgorithm.cs index d5a7a5135e76..98c5dc69db51 100644 --- a/Algorithm.CSharp/FillOutsideHoursTickResolutionAlgorithm.cs +++ b/Algorithm.CSharp/FillOutsideHoursTickResolutionAlgorithm.cs @@ -85,7 +85,7 @@ public class FillOutsideHoursTickResolutionAlgorithm : FillOutsideHoursMinuteRes {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "0.07%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "098dfba7feaa7389ceb7630aa7da2cfa"} + {"OrderListHash", "baab871855df123de17fb010951f55da"} }; } } diff --git a/Algorithm.CSharp/MarketOnCloseOrderFillsOnCloseTradeWithTickResolutionAlgorithm.cs b/Algorithm.CSharp/MarketOnCloseOrderFillsOnCloseTradeWithTickResolutionAlgorithm.cs index e75ca4ace10c..18d1309c5780 100644 --- a/Algorithm.CSharp/MarketOnCloseOrderFillsOnCloseTradeWithTickResolutionAlgorithm.cs +++ b/Algorithm.CSharp/MarketOnCloseOrderFillsOnCloseTradeWithTickResolutionAlgorithm.cs @@ -143,7 +143,7 @@ public override void OnEndOfAlgorithm() {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "0.02%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "dafe02af29d6a320da2e5dad28411559"} + {"OrderListHash", "9d53c0501981b8d3aa922bbc45b6e80f"} }; } } diff --git a/Algorithm.CSharp/MarketOnOpenOrderFillsOnOpenTradeWithTickResolutionAlgorithm.cs b/Algorithm.CSharp/MarketOnOpenOrderFillsOnOpenTradeWithTickResolutionAlgorithm.cs index d0dd0a8679dd..507bd4c794cb 100644 --- a/Algorithm.CSharp/MarketOnOpenOrderFillsOnOpenTradeWithTickResolutionAlgorithm.cs +++ b/Algorithm.CSharp/MarketOnOpenOrderFillsOnOpenTradeWithTickResolutionAlgorithm.cs @@ -143,7 +143,7 @@ public override void OnEndOfAlgorithm() {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, {"Portfolio Turnover", "0.02%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "8940204f430a8040b372cc22d80f1399"} + {"OrderListHash", "e1d37155b945867337ae64a1807bf0ce"} }; } } diff --git a/Algorithm.CSharp/OpenInterestFuturesRegressionAlgorithm.cs b/Algorithm.CSharp/OpenInterestFuturesRegressionAlgorithm.cs index 06d674473dee..263ccb37a919 100644 --- a/Algorithm.CSharp/OpenInterestFuturesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OpenInterestFuturesRegressionAlgorithm.cs @@ -136,7 +136,7 @@ public override void OnData(Slice slice) {"Lowest Capacity Asset", "GC VOFJUCDY9XNH"}, {"Portfolio Turnover", "1.32%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "d57e121407fdce1b84a2bbe92be78e02"} + {"OrderListHash", "4a7e699024771890b97c4ab74365e4b7"} }; } } diff --git a/Common/Securities/SecurityCache.cs b/Common/Securities/SecurityCache.cs index fb8a61df68c8..bdad5adbae61 100644 --- a/Common/Securities/SecurityCache.cs +++ b/Common/Securities/SecurityCache.cs @@ -165,9 +165,10 @@ public void AddDataList(IReadOnlyList data, Type dataType, bool? conta } } - var last = data[data.Count - 1]; - - ProcessDataPoint(last, cacheByType: false); + for (var i = 0; i < data.Count; i++) + { + ProcessDataPoint(data[i], cacheByType: false); + } } /// From 888752fa0a9f5d38db2a82f7e6511cad2d91f2a0 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Mon, 8 Dec 2025 16:01:31 -0500 Subject: [PATCH 028/103] Avoid unnecessary Python wrapper creation for pure C# models (#9106) * Centralize Python/C# model detection logic * Improve helper method * Remove unnecessary conditionals * Fix unit tests * Refactor QCAlgorithm.python.cs to use the new helper method for models * Solve review comments * Clean up Python wrapper exception * Update XML comments to better describe T and TWrapper in CreateModelOrWrapper * Join unit tests in TestCases * Solve review comments * Replace manual TryConvert checks with CreateInstanceOrWrapper helper --- Algorithm/Alphas/CompositeAlphaModel.cs | 9 +- Algorithm/QCAlgorithm.Framework.Python.cs | 95 +++++--------- Algorithm/QCAlgorithm.Python.cs | 25 ++-- .../Risk/CompositeRiskManagementModel.cs | 11 +- .../Alphas/Analysis/InsightManager.cs | 14 +-- .../SignalExports/SignalExportManager.cs | 10 +- Common/Data/SubscriptionManager.cs | 9 +- .../Python/DividendYieldModelPythonWrapper.cs | 10 +- .../RiskFreeInterestRateModelPythonWrapper.cs | 10 +- Common/Securities/Option/Option.cs | 44 ++----- Common/Securities/Security.cs | 79 ++++++------ Common/Util/PythonUtil.cs | 23 +++- Tests/Algorithm/AlgorithmAddSecurityTests.cs | 9 +- Tests/Common/Util/PythonUtilTests.cs | 117 +++++++++++++++++- 14 files changed, 268 insertions(+), 197 deletions(-) diff --git a/Algorithm/Alphas/CompositeAlphaModel.cs b/Algorithm/Alphas/CompositeAlphaModel.cs index b203805307b0..068b6d2b5503 100644 --- a/Algorithm/Alphas/CompositeAlphaModel.cs +++ b/Algorithm/Alphas/CompositeAlphaModel.cs @@ -116,11 +116,10 @@ public void AddAlpha(IAlphaModel alphaModel) /// The alpha model to add public void AddAlpha(PyObject pyAlphaModel) { - IAlphaModel alphaModel; - if (!pyAlphaModel.TryConvert(out alphaModel)) - { - alphaModel = new AlphaModelPythonWrapper(pyAlphaModel); - } + var alphaModel = PythonUtil.CreateInstanceOrWrapper( + pyAlphaModel, + py => new AlphaModelPythonWrapper(py) + ); _alphaModels.Add(alphaModel); } } diff --git a/Algorithm/QCAlgorithm.Framework.Python.cs b/Algorithm/QCAlgorithm.Framework.Python.cs index bb21eaccf23f..2848b5ce32dc 100644 --- a/Algorithm/QCAlgorithm.Framework.Python.cs +++ b/Algorithm/QCAlgorithm.Framework.Python.cs @@ -19,6 +19,7 @@ using QuantConnect.Algorithm.Framework.Portfolio; using QuantConnect.Algorithm.Framework.Risk; using QuantConnect.Algorithm.Framework.Selection; +using QuantConnect.Util; namespace QuantConnect.Algorithm { @@ -31,15 +32,10 @@ public partial class QCAlgorithm [DocumentationAttribute(AlgorithmFramework)] public void SetAlpha(PyObject alpha) { - IAlphaModel model; - if (alpha.TryConvert(out model)) - { - SetAlpha(model); - } - else - { - Alpha = new AlphaModelPythonWrapper(alpha); - } + Alpha = PythonUtil.CreateInstanceOrWrapper( + alpha, + py => new AlphaModelPythonWrapper(py) + ); } /// @@ -49,15 +45,11 @@ public void SetAlpha(PyObject alpha) [DocumentationAttribute(AlgorithmFramework)] public void AddAlpha(PyObject alpha) { - IAlphaModel model; - if (alpha.TryConvert(out model)) - { - AddAlpha(model); - } - else - { - AddAlpha(new AlphaModelPythonWrapper(alpha)); - } + var model = PythonUtil.CreateInstanceOrWrapper( + alpha, + py => new AlphaModelPythonWrapper(py) + ); + AddAlpha(model); } /// @@ -68,15 +60,10 @@ public void AddAlpha(PyObject alpha) [DocumentationAttribute(TradingAndOrders)] public void SetExecution(PyObject execution) { - IExecutionModel model; - if (execution.TryConvert(out model)) - { - SetExecution(model); - } - else - { - Execution = new ExecutionModelPythonWrapper(execution); - } + Execution = PythonUtil.CreateInstanceOrWrapper( + execution, + py => new ExecutionModelPythonWrapper(py) + ); } /// @@ -87,15 +74,10 @@ public void SetExecution(PyObject execution) [DocumentationAttribute(TradingAndOrders)] public void SetPortfolioConstruction(PyObject portfolioConstruction) { - IPortfolioConstructionModel model; - if (portfolioConstruction.TryConvert(out model)) - { - SetPortfolioConstruction(model); - } - else - { - PortfolioConstruction = new PortfolioConstructionModelPythonWrapper(portfolioConstruction); - } + PortfolioConstruction = PythonUtil.CreateInstanceOrWrapper( + portfolioConstruction, + py => new PortfolioConstructionModelPythonWrapper(py) + ); } /// @@ -106,12 +88,10 @@ public void SetPortfolioConstruction(PyObject portfolioConstruction) [DocumentationAttribute(Universes)] public void SetUniverseSelection(PyObject universeSelection) { - IUniverseSelectionModel model; - if (!universeSelection.TryConvert(out model)) - { - model = new UniverseSelectionModelPythonWrapper(universeSelection); - } - SetUniverseSelection(model); + UniverseSelection = PythonUtil.CreateInstanceOrWrapper( + universeSelection, + py => new UniverseSelectionModelPythonWrapper(py) + ); } /// @@ -122,11 +102,10 @@ public void SetUniverseSelection(PyObject universeSelection) [DocumentationAttribute(Universes)] public void AddUniverseSelection(PyObject universeSelection) { - IUniverseSelectionModel model; - if (!universeSelection.TryConvert(out model)) - { - model = new UniverseSelectionModelPythonWrapper(universeSelection); - } + var model = PythonUtil.CreateInstanceOrWrapper( + universeSelection, + py => new UniverseSelectionModelPythonWrapper(py) + ); AddUniverseSelection(model); } @@ -138,15 +117,10 @@ public void AddUniverseSelection(PyObject universeSelection) [DocumentationAttribute(TradingAndOrders)] public void SetRiskManagement(PyObject riskManagement) { - IRiskManagementModel model; - if (riskManagement.TryConvert(out model)) - { - SetRiskManagement(model); - } - else - { - RiskManagement = new RiskManagementModelPythonWrapper(riskManagement); - } + RiskManagement = PythonUtil.CreateInstanceOrWrapper( + riskManagement, + py => new RiskManagementModelPythonWrapper(py) + ); } /// @@ -157,11 +131,10 @@ public void SetRiskManagement(PyObject riskManagement) [DocumentationAttribute(TradingAndOrders)] public void AddRiskManagement(PyObject riskManagement) { - IRiskManagementModel model; - if (!riskManagement.TryConvert(out model)) - { - model = new RiskManagementModelPythonWrapper(riskManagement); - } + var model = PythonUtil.CreateInstanceOrWrapper( + riskManagement, + py => new RiskManagementModelPythonWrapper(py) + ); AddRiskManagement(model); } } diff --git a/Algorithm/QCAlgorithm.Python.cs b/Algorithm/QCAlgorithm.Python.cs index 8d1fbb94e678..a2af01ea34fc 100644 --- a/Algorithm/QCAlgorithm.Python.cs +++ b/Algorithm/QCAlgorithm.Python.cs @@ -1372,12 +1372,10 @@ public void SetBenchmark(PyObject benchmark) [DocumentationAttribute(Modeling)] public void SetBrokerageModel(PyObject model) { - IBrokerageModel brokerageModel; - if (!model.TryConvert(out brokerageModel)) - { - brokerageModel = new BrokerageModelPythonWrapper(model); - } - + var brokerageModel = PythonUtil.CreateInstanceOrWrapper( + model, + py => new BrokerageModelPythonWrapper(py) + ); SetBrokerageModel(brokerageModel); } @@ -1392,11 +1390,10 @@ public void SetBrokerageModel(PyObject model) [DocumentationAttribute(Logging)] public void SetBrokerageMessageHandler(PyObject handler) { - if (!handler.TryConvert(out IBrokerageMessageHandler brokerageMessageHandler)) - { - brokerageMessageHandler = new BrokerageMessageHandlerPythonWrapper(handler); - } - + var brokerageMessageHandler = PythonUtil.CreateInstanceOrWrapper( + handler, + py => new BrokerageMessageHandlerPythonWrapper(py) + ); SetBrokerageMessageHandler(brokerageMessageHandler); } @@ -1407,7 +1404,11 @@ public void SetBrokerageMessageHandler(PyObject handler) [DocumentationAttribute(Modeling)] public void SetRiskFreeInterestRateModel(PyObject model) { - SetRiskFreeInterestRateModel(RiskFreeInterestRateModelPythonWrapper.FromPyObject(model)); + var riskFreeInterestRateModel = PythonUtil.CreateInstanceOrWrapper( + model, + py => new RiskFreeInterestRateModelPythonWrapper(py) + ); + SetRiskFreeInterestRateModel(riskFreeInterestRateModel); } /// diff --git a/Algorithm/Risk/CompositeRiskManagementModel.cs b/Algorithm/Risk/CompositeRiskManagementModel.cs index ae60e5836219..3f57989116d7 100644 --- a/Algorithm/Risk/CompositeRiskManagementModel.cs +++ b/Algorithm/Risk/CompositeRiskManagementModel.cs @@ -49,7 +49,7 @@ public CompositeRiskManagementModel(params IRiskManagementModel[] riskManagement /// Initializes a new instance of the class /// /// The individual risk management models defining this composite model - public CompositeRiskManagementModel(IEnumerableriskManagementModels) + public CompositeRiskManagementModel(IEnumerable riskManagementModels) { foreach (var riskManagementModel in riskManagementModels) { @@ -129,11 +129,10 @@ public void AddRiskManagement(IRiskManagementModel riskManagementModel) /// The risk management model to add public void AddRiskManagement(PyObject pyRiskManagementModel) { - IRiskManagementModel riskManagementModel; - if (!pyRiskManagementModel.TryConvert(out riskManagementModel)) - { - riskManagementModel = new RiskManagementModelPythonWrapper(pyRiskManagementModel); - } + var riskManagementModel = PythonUtil.CreateInstanceOrWrapper( + pyRiskManagementModel, + py => new RiskManagementModelPythonWrapper(py) + ); _riskManagementModels.Add(riskManagementModel); } } diff --git a/Common/Algorithm/Framework/Alphas/Analysis/InsightManager.cs b/Common/Algorithm/Framework/Alphas/Analysis/InsightManager.cs index 6a7909e01ac2..2c6da8a21c5b 100644 --- a/Common/Algorithm/Framework/Alphas/Analysis/InsightManager.cs +++ b/Common/Algorithm/Framework/Alphas/Analysis/InsightManager.cs @@ -17,6 +17,7 @@ using Python.Runtime; using QuantConnect.Interfaces; using System.Collections.Generic; +using QuantConnect.Util; namespace QuantConnect.Algorithm.Framework.Alphas.Analysis { @@ -61,15 +62,10 @@ public void SetInsightScoreFunction(IInsightScoreFunction insightScoreFunction) /// Model that scores insights public void SetInsightScoreFunction(PyObject insightScoreFunction) { - IInsightScoreFunction model; - if (insightScoreFunction.TryConvert(out model)) - { - SetInsightScoreFunction(model); - } - else - { - _insightScoreFunction = new InsightScoreFunctionPythonWrapper(insightScoreFunction); - } + _insightScoreFunction = PythonUtil.CreateInstanceOrWrapper( + insightScoreFunction, + py => new InsightScoreFunctionPythonWrapper(py) + ); } /// diff --git a/Common/Algorithm/Framework/Portfolio/SignalExports/SignalExportManager.cs b/Common/Algorithm/Framework/Portfolio/SignalExports/SignalExportManager.cs index 017d6f097977..65d74d9c96e3 100644 --- a/Common/Algorithm/Framework/Portfolio/SignalExports/SignalExportManager.cs +++ b/Common/Algorithm/Framework/Portfolio/SignalExports/SignalExportManager.cs @@ -84,10 +84,10 @@ public void AddSignalExportProvider(ISignalExportTarget signalExport) /// Signal export provider public void AddSignalExportProvider(PyObject signalExport) { - if (!signalExport.TryConvert(out var managedSignalExport)) - { - managedSignalExport = new SignalExportTargetPythonWrapper(signalExport); - } + var managedSignalExport = PythonUtil.CreateInstanceOrWrapper( + signalExport, + py => new SignalExportTargetPythonWrapper(py) + ); AddSignalExportProvider(managedSignalExport); } @@ -172,7 +172,7 @@ public bool SetTargetPortfolio(params PortfolioTarget[] portfolioTargets) } if (_signalExports.IsNullOrEmpty()) - { + { return false; } diff --git a/Common/Data/SubscriptionManager.cs b/Common/Data/SubscriptionManager.cs index eb27871e039e..682f79be85ac 100644 --- a/Common/Data/SubscriptionManager.cs +++ b/Common/Data/SubscriptionManager.cs @@ -216,11 +216,10 @@ public void AddConsolidator(Symbol symbol, IDataConsolidator consolidator, TickT /// The custom python consolidator public void AddConsolidator(Symbol symbol, PyObject pyConsolidator) { - if (!pyConsolidator.TryConvert(out IDataConsolidator consolidator)) - { - consolidator = new DataConsolidatorPythonWrapper(pyConsolidator); - } - + var consolidator = PythonUtil.CreateInstanceOrWrapper( + pyConsolidator, + py => new DataConsolidatorPythonWrapper(py) + ); AddConsolidator(symbol, consolidator); } diff --git a/Common/Python/DividendYieldModelPythonWrapper.cs b/Common/Python/DividendYieldModelPythonWrapper.cs index 513058857ee6..25a300392ff4 100644 --- a/Common/Python/DividendYieldModelPythonWrapper.cs +++ b/Common/Python/DividendYieldModelPythonWrapper.cs @@ -16,6 +16,7 @@ using System; using Python.Runtime; using QuantConnect.Data; +using QuantConnect.Util; namespace QuantConnect.Python { @@ -62,11 +63,10 @@ public decimal GetDividendYield(DateTime date, decimal securityPrice) /// The converted instance public static IDividendYieldModel FromPyObject(PyObject model) { - if (!model.TryConvert(out IDividendYieldModel dividendYieldModel)) - { - dividendYieldModel = new DividendYieldModelPythonWrapper(model); - } - + var dividendYieldModel = PythonUtil.CreateInstanceOrWrapper( + model, + py => new DividendYieldModelPythonWrapper(py) + ); return dividendYieldModel; } } diff --git a/Common/Python/RiskFreeInterestRateModelPythonWrapper.cs b/Common/Python/RiskFreeInterestRateModelPythonWrapper.cs index 1eb58a97fa3a..f104007ca255 100644 --- a/Common/Python/RiskFreeInterestRateModelPythonWrapper.cs +++ b/Common/Python/RiskFreeInterestRateModelPythonWrapper.cs @@ -16,6 +16,7 @@ using System; using Python.Runtime; using QuantConnect.Data; +using QuantConnect.Util; namespace QuantConnect.Python { @@ -50,11 +51,10 @@ public decimal GetInterestRate(DateTime date) /// The converted instance public static IRiskFreeInterestRateModel FromPyObject(PyObject model) { - if (!model.TryConvert(out IRiskFreeInterestRateModel riskFreeInterestRateModel)) - { - riskFreeInterestRateModel = new RiskFreeInterestRateModelPythonWrapper(model); - } - + var riskFreeInterestRateModel = PythonUtil.CreateInstanceOrWrapper( + model, + py => new RiskFreeInterestRateModelPythonWrapper(py) + ); return riskFreeInterestRateModel; } } diff --git a/Common/Securities/Option/Option.cs b/Common/Securities/Option/Option.cs index eee3861b74e8..75b74b13d828 100644 --- a/Common/Securities/Option/Option.cs +++ b/Common/Securities/Option/Option.cs @@ -45,7 +45,7 @@ public class Option : Security, IDerivativeSecurity, IOptionPrice /// /// The default time of day for settlement /// - public static readonly TimeSpan DefaultSettlementTime = new (6, 0, 0); + public static readonly TimeSpan DefaultSettlementTime = new(6, 0, 0); /// /// Constructor for the option security @@ -443,7 +443,7 @@ public bool EnableGreekApproximation var model = PriceModel as QLOptionPriceModel; if (model != null) { - model.EnableGreekApproximation = value; + model.EnableGreekApproximation = value; } } } @@ -462,22 +462,10 @@ public IDerivativeSecurityFilter ContractFilter /// The option assignment model to use public void SetOptionAssignmentModel(PyObject pyObject) { - if (pyObject.TryConvert(out var optionAssignmentModel)) - { - // pure C# implementation - SetOptionAssignmentModel(optionAssignmentModel); - } - else if (Extensions.TryConvert(pyObject, out _, allowPythonDerivative: true)) - { - SetOptionAssignmentModel(new OptionAssignmentModelPythonWrapper(pyObject)); - } - else - { - using(Py.GIL()) - { - throw new ArgumentException($"SetOptionAssignmentModel: {pyObject.Repr()} is not a valid argument."); - } - } + OptionAssignmentModel = PythonUtil.CreateInstanceOrWrapper( + pyObject, + py => new OptionAssignmentModelPythonWrapper(py) + ); } /// @@ -495,22 +483,10 @@ public void SetOptionAssignmentModel(IOptionAssignmentModel optionAssignmentMode /// The option exercise model to use public void SetOptionExerciseModel(PyObject pyObject) { - if (pyObject.TryConvert(out var optionExerciseModel)) - { - // pure C# implementation - SetOptionExerciseModel(optionExerciseModel); - } - else if (Extensions.TryConvert(pyObject, out _, allowPythonDerivative: true)) - { - SetOptionExerciseModel(new OptionExerciseModelPythonWrapper(pyObject)); - } - else - { - using (Py.GIL()) - { - throw new ArgumentException($"SetOptionExerciseModel: {pyObject.Repr()} is not a valid argument."); - } - } + OptionExerciseModel = PythonUtil.CreateInstanceOrWrapper( + pyObject, + py => new OptionExerciseModelPythonWrapper(py) + ); } /// diff --git a/Common/Securities/Security.cs b/Common/Securities/Security.cs index 67e4e7a3406b..b3a2106dc692 100644 --- a/Common/Securities/Security.cs +++ b/Common/Securities/Security.cs @@ -33,6 +33,7 @@ using QuantConnect.Data.Fundamental; using QuantConnect.Interfaces; using QuantConnect.Data.Shortable; +using QuantConnect.Util; namespace QuantConnect.Securities { @@ -725,7 +726,10 @@ public void SetFeeModel(IFeeModel feelModel) /// Model that represents a fee model public void SetFeeModel(PyObject feelModel) { - FeeModel = new FeeModelPythonWrapper(feelModel); + FeeModel = PythonUtil.CreateInstanceOrWrapper( + feelModel, + py => new FeeModelPythonWrapper(py) + ); } /// @@ -743,7 +747,10 @@ public void SetFillModel(IFillModel fillModel) /// Model that represents a fill model public void SetFillModel(PyObject fillModel) { - FillModel = new FillModelPythonWrapper(fillModel); + FillModel = PythonUtil.CreateInstanceOrWrapper( + fillModel, + py => new FillModelPythonWrapper(py) + ); } /// @@ -761,7 +768,10 @@ public void SetSettlementModel(ISettlementModel settlementModel) /// Model that represents a settlement model public void SetSettlementModel(PyObject settlementModel) { - SettlementModel = new SettlementModelPythonWrapper(settlementModel); + SettlementModel = PythonUtil.CreateInstanceOrWrapper( + settlementModel, + py => new SettlementModelPythonWrapper(py) + ); } /// @@ -779,7 +789,10 @@ public void SetSlippageModel(ISlippageModel slippageModel) /// Model that represents a slippage model public void SetSlippageModel(PyObject slippageModel) { - SlippageModel = new SlippageModelPythonWrapper(slippageModel); + SlippageModel = PythonUtil.CreateInstanceOrWrapper( + slippageModel, + py => new SlippageModelPythonWrapper(py) + ); } /// @@ -797,7 +810,10 @@ public void SetVolatilityModel(IVolatilityModel volatilityModel) /// Model that represents a volatility model public void SetVolatilityModel(PyObject volatilityModel) { - VolatilityModel = new VolatilityModelPythonWrapper(volatilityModel); + VolatilityModel = PythonUtil.CreateInstanceOrWrapper( + volatilityModel, + py => new VolatilityModelPythonWrapper(py) + ); } /// @@ -815,7 +831,10 @@ public void SetBuyingPowerModel(IBuyingPowerModel buyingPowerModel) /// Model that represents a security's model of buying power public void SetBuyingPowerModel(PyObject pyObject) { - SetBuyingPowerModel(new BuyingPowerModelPythonWrapper(pyObject)); + BuyingPowerModel = PythonUtil.CreateInstanceOrWrapper( + pyObject, + py => new BuyingPowerModelPythonWrapper(py) + ); } /// @@ -833,7 +852,10 @@ public void SetMarginInterestRateModel(IMarginInterestRateModel marginInterestRa /// Model that represents a security's model of margin interest rate public void SetMarginInterestRateModel(PyObject pyObject) { - SetMarginInterestRateModel(new MarginInterestRateModelPythonWrapper(pyObject)); + MarginInterestRateModel = PythonUtil.CreateInstanceOrWrapper( + pyObject, + py => new MarginInterestRateModelPythonWrapper(py) + ); } /// @@ -851,7 +873,10 @@ public void SetMarginModel(IBuyingPowerModel marginModel) /// Model that represents a security's model of buying power public void SetMarginModel(PyObject pyObject) { - SetMarginModel(new BuyingPowerModelPythonWrapper(pyObject)); + MarginModel = PythonUtil.CreateInstanceOrWrapper( + pyObject, + py => new BuyingPowerModelPythonWrapper(py) + ); } /// @@ -860,21 +885,10 @@ public void SetMarginModel(PyObject pyObject) /// Python class that represents a custom shortable provider public void SetShortableProvider(PyObject pyObject) { - if (pyObject.TryConvert(out var shortableProvider)) - { - SetShortableProvider(shortableProvider); - } - else if (Extensions.TryConvert(pyObject, out _, allowPythonDerivative: true)) - { - SetShortableProvider(new ShortableProviderPythonWrapper(pyObject)); - } - else - { - using (Py.GIL()) - { - throw new Exception($"SetShortableProvider: {pyObject.Repr()} is not a valid argument"); - } - } + ShortableProvider = PythonUtil.CreateInstanceOrWrapper( + pyObject, + py => new ShortableProviderPythonWrapper(py) + ); } /// @@ -893,21 +907,10 @@ public void SetShortableProvider(IShortableProvider shortableProvider) /// public void SetDataFilter(PyObject pyObject) { - if (pyObject.TryConvert(out var dataFilter)) - { - SetDataFilter(dataFilter); - } - else if (Extensions.TryConvert(pyObject, out _, allowPythonDerivative: true)) - { - SetDataFilter(new SecurityDataFilterPythonWrapper(pyObject)); - } - else - { - using (Py.GIL()) - { - throw new ArgumentException($"SetDataFilter: {pyObject.Repr()} is not a valid argument"); - } - } + DataFilter = PythonUtil.CreateInstanceOrWrapper( + pyObject, + py => new SecurityDataFilterPythonWrapper(py) + ); } /// diff --git a/Common/Util/PythonUtil.cs b/Common/Util/PythonUtil.cs index 1f9f31c3c3f9..80a5934e82ff 100644 --- a/Common/Util/PythonUtil.cs +++ b/Common/Util/PythonUtil.cs @@ -21,7 +21,6 @@ using QuantConnect.Data.Fundamental; using System.Text.RegularExpressions; using QuantConnect.Data.UniverseSelection; -using System.IO; using System.Globalization; namespace QuantConnect.Util @@ -361,5 +360,27 @@ public static IEnumerable ConvertToSymbols(PyObject input) } return symbolsList; } + + /// + /// Attempts to convert a PyObject into a pure C# instance of . + /// If conversion fails, a wrapper instance is created/>. + /// + /// The C# type expected, which may be an interface or a concrete class + /// The Python object to convert. + /// Factory function used to create a wrapper around the Python object + /// + /// A pure C# instance if conversion is possible, otherwise a wrapper instance. + /// + public static T CreateInstanceOrWrapper(PyObject pyObject, Func createWrapper) + { + if (pyObject.TryConvert(out var instance)) + { + // Successfully converted to pure C# + return instance; + } + + // Fallback to wrapper + return createWrapper(pyObject); + } } } diff --git a/Tests/Algorithm/AlgorithmAddSecurityTests.cs b/Tests/Algorithm/AlgorithmAddSecurityTests.cs index 6067db2fe72b..331945e0444e 100644 --- a/Tests/Algorithm/AlgorithmAddSecurityTests.cs +++ b/Tests/Algorithm/AlgorithmAddSecurityTests.cs @@ -576,14 +576,7 @@ def set_brokerage_model(algorithm): // All models should've been set my the TestBrokerageModel, except the fill model, // which should have been set by the TestCustomSecurityInitializer, because user defined // initializer should run after the brokerage model initializer - if (language == Language.CSharp) - { - Assert.IsInstanceOf(security.FillModel); - } - else - { - Assert.IsInstanceOf(security.FillModel); - } + Assert.IsInstanceOf(security.FillModel); } public class TestCustomSecurityInitializer : ISecurityInitializer diff --git a/Tests/Common/Util/PythonUtilTests.cs b/Tests/Common/Util/PythonUtilTests.cs index 6639fc9da53f..8d2fe6fb3471 100644 --- a/Tests/Common/Util/PythonUtilTests.cs +++ b/Tests/Common/Util/PythonUtilTests.cs @@ -13,11 +13,14 @@ * limitations under the License. */ -using System.Linq; -using Python.Runtime; using NUnit.Framework; +using Python.Runtime; +using QuantConnect.Python; +using QuantConnect.Securities; using QuantConnect.Util; +using System; using System.Collections.Generic; +using System.Linq; namespace QuantConnect.Tests.Common.Util { @@ -88,7 +91,7 @@ public void ConvertToSymbolsTest() Assert.AreEqual(expected.FirstOrDefault(), test1.FirstOrDefault()); // Test Python List of Strings - var list = (new List {"AIG", "BAC", "IBM", "GOOG"}).ToPyList(); + var list = (new List { "AIG", "BAC", "IBM", "GOOG" }).ToPyList(); var test2 = PythonUtil.ConvertToSymbols(list); Assert.IsTrue(typeof(List) == test2.GetType()); Assert.IsTrue(test2.SequenceEqual(expected)); @@ -231,5 +234,113 @@ public void ParsesPythonExceptionStackTrace(string expected, string original, in PythonUtil.ExceptionLineShift = originalShiftValue; Assert.AreEqual(expected, result); } + + [TestCase(true)] + [TestCase(false)] + public void BothInheritedAndNonInheritedClassesWork(bool inherited) + { + using (Py.GIL()) + { + string pythonCode = @" +from AlgorithmImports import * + +class PurePythonBuyingPowerModel: + def GetMaximumOrderQuantityForTargetBuyingPower(self, parameters): + return GetMaximumOrderQuantityResult(100) + + def GetMaximumOrderQuantityForDeltaBuyingPower(self, parameters): + return GetMaximumOrderQuantityResult(200) + + def HasSufficientBuyingPowerForOrder(self, parameters): + return HasSufficientBuyingPowerForOrderResult(True) + + def GetReservedBuyingPowerForPosition(self, parameters): + return ReservedBuyingPowerForPosition(0) + + def GetLeverage(self, security): + return 1.0 + + def GetBuyingPower(self, parameters): + return BuyingPower(1000) + + def SetLeverage(self, security, leverage): + pass + + def GetMaintenanceMargin(self, parameters): + return None + + def GetInitialMarginRequirement(self, parameters): + return None + + def GetInitialMarginRequiredForOrder(self, parameters): + return None + +class InheritedBuyingPowerModel(SecurityMarginModel): + def GetMaximumOrderQuantityForTargetBuyingPower(self, parameters): + return GetMaximumOrderQuantityResult(200) +"; + var module = PyModule.FromString("TestModels", pythonCode); + PyObject pyObject = null; + if (inherited) + { + pyObject = module.GetAttr("InheritedBuyingPowerModel").Invoke(); + } + else + { + pyObject = module.GetAttr("PurePythonBuyingPowerModel").Invoke(); + } + + var result = PythonUtil.CreateInstanceOrWrapper( + pyObject, + py => new BuyingPowerModelPythonWrapper(py) + ); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + } + } + + [Test] + public void MissingRequiredMethodThrowsException() + { + using (Py.GIL()) + { + string pythonCode = @" +class IncompleteBuyingPowerModel: + def GetMaximumOrderQuantityForTargetBuyingPower(self, parameters): + return GetMaximumOrderQuantityResult(100) + + def HasSufficientBuyingPowerForOrder(self, parameters): + return HasSufficientBuyingPowerForOrderResult(True) +"; + var module = PyModule.FromString("TestModels", pythonCode); + var purePython = module.GetAttr("IncompleteBuyingPowerModel").Invoke(); + + Assert.Throws(() => + PythonUtil.CreateInstanceOrWrapper(purePython, py => new BuyingPowerModelPythonWrapper(py))); + } + } + + [Test] + public void PureCSharpClassReturnsDirectInstanceWithoutWrapper() + { + using (Py.GIL()) + { + // Create pure C# instance + var csharpObject = new BuyingPowerModel(); + var pyObject = csharpObject.ToPython(); + + // Should return the same C# instance, not a wrapper + var result = PythonUtil.CreateInstanceOrWrapper( + pyObject, + py => new BuyingPowerModelPythonWrapper(py) + ); + + Assert.IsNotNull(result); + Assert.AreSame(csharpObject, result); + Assert.IsNotInstanceOf(result); + Assert.IsInstanceOf(result); + } + } } } From 857a950e239bdd20631c69234cd0160fefa81c89 Mon Sep 17 00:00:00 2001 From: Adalyat Nazirov Date: Tue, 9 Dec 2025 12:58:06 +0000 Subject: [PATCH 029/103] dYdX Brokerage Essentials (#9116) * add dYdX market constant * Add dYdX market constant and update symbol properties database * get Gaz limit from order properties or default value * wip * add symbol properties * add more dydx order props * update symbol properties * Add dYdX brokerage and fee model * Update dYdX configuration fields * undone meta files * minor tweaks * fix file ending * Add dYdX brokerage support to BrokerageName and IBrokerageModel * Refine dYdX fee model integration and update configuration defaults * Replace custom order size validation in dYdXBrokerageModel with DefaultBrokerageModel implementation * undone changes * Add market hours for dYdX CryptoFuture --- Common/Brokerages/BrokerageName.cs | 9 +- Common/Brokerages/IBrokerageModel.cs | 3 + Common/Brokerages/dYdXBrokerageModel.cs | 148 +++++++++++ Common/Market.cs | 8 +- Common/Orders/Fees/dYdXFeeModel.cs | 93 +++++++ Common/Orders/dYdXOrderProperties.cs | 57 ++++ Data/market-hours/market-hours-database.json | 54 ++++ .../symbol-properties-database.csv | 246 ++++++++++++++++++ Launcher/config.json | 12 + 9 files changed, 627 insertions(+), 3 deletions(-) create mode 100644 Common/Brokerages/dYdXBrokerageModel.cs create mode 100644 Common/Orders/Fees/dYdXFeeModel.cs create mode 100644 Common/Orders/dYdXOrderProperties.cs diff --git a/Common/Brokerages/BrokerageName.cs b/Common/Brokerages/BrokerageName.cs index 5cfc19b3ee19..58d238626917 100644 --- a/Common/Brokerages/BrokerageName.cs +++ b/Common/Brokerages/BrokerageName.cs @@ -163,7 +163,7 @@ public enum BrokerageName /// Transaction and submit/execution rules will use Axos models /// Axos, - + /// /// Transaction and submit/execution rules will use Coinbase broker's model /// @@ -192,6 +192,11 @@ public enum BrokerageName /// /// Transaction and submit/execution rules will use interactive brokers Fix models /// - InteractiveBrokersFix + InteractiveBrokersFix, + + /// + /// Transaction and submit/execution rules will use dYdX models + /// + dYdX } } diff --git a/Common/Brokerages/IBrokerageModel.cs b/Common/Brokerages/IBrokerageModel.cs index a79294ed7ed2..7657998d67a6 100644 --- a/Common/Brokerages/IBrokerageModel.cs +++ b/Common/Brokerages/IBrokerageModel.cs @@ -288,6 +288,9 @@ public static IBrokerageModel Create(IOrderProvider orderProvider, BrokerageName case BrokerageName.Tastytrade: return new TastytradeBrokerageModel(accountType); + case BrokerageName.dYdX: + return new dYdXBrokerageModel(accountType); + default: throw new ArgumentOutOfRangeException(nameof(brokerage), brokerage, null); } diff --git a/Common/Brokerages/dYdXBrokerageModel.cs b/Common/Brokerages/dYdXBrokerageModel.cs new file mode 100644 index 000000000000..157dcbdea330 --- /dev/null +++ b/Common/Brokerages/dYdXBrokerageModel.cs @@ -0,0 +1,148 @@ +/* + * 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 System.Linq; +using QuantConnect.Benchmarks; +using QuantConnect.Orders; +using QuantConnect.Orders.Fees; +using QuantConnect.Securities; +using QuantConnect.Util; + +namespace QuantConnect.Brokerages; + +public class dYdXBrokerageModel : DefaultBrokerageModel +{ + /// + /// Gets a map of the default markets to be used for each security type + /// + public override IReadOnlyDictionary DefaultMarkets { get; } = GetDefaultMarkets(Market.dYdX); + + /// + /// Initializes a new instance of the class + /// + /// The type of account to be modeled, defaults to + public dYdXBrokerageModel(AccountType accountType = AccountType.Margin) : base(accountType) + { + if (accountType != AccountType.Margin) + { + throw new ArgumentException("dYdXBrokerageModel only supports margin accounts", nameof(accountType)); + } + } + + /// + /// Provides dYdX fee model + /// + /// + /// + public override IFeeModel GetFeeModel(Security security) + { + return security.Type switch + { + SecurityType.CryptoFuture => new dYdXFeeModel(), + _ => base.GetFeeModel(security) + }; + } + + /// + /// Gets a new margin interest rate model for the security + /// + /// The security to get a margin interest rate model for + /// The margin interest rate model for this brokerage + public override IMarginInterestRateModel GetMarginInterestRateModel(Security security) + { + // TODO: Implement dYdX margin interest rate model + return MarginInterestRateModel.Null; + } + + /// + /// Get the benchmark for this model + /// + /// SecurityService to create the security with if needed + /// The benchmark for this brokerage + public override IBenchmark GetBenchmark(SecurityManager securities) + { + var symbol = Symbol.Create("BTCUSD", SecurityType.CryptoFuture, Market.dYdX); + return SecurityBenchmark.CreateInstance(securities, symbol); + //todo default conversion? + } + + /// + /// Returns true if the brokerage could accept this order update. This takes into account + /// order type, security type, and order size limits. dYdX can only update inverse, linear, and option orders + /// + /// The security of the order + /// The order to be updated + /// The requested update to be made to the order + /// If this function returns false, a brokerage message detailing why the order may not be updated + /// True if the brokerage could update the order, false otherwise + public override bool CanUpdateOrder(Security security, Order order, UpdateOrderRequest request, + out BrokerageMessageEvent message) + { + message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported", + Messages.DefaultBrokerageModel.OrderUpdateNotSupported); + return false; + } + + /// + /// Returns true if the brokerage could accept this order. This takes into account + /// order type, security type, and order size limits. + /// + /// + /// For example, a brokerage may have no connectivity at certain times, or an order rate/size limit + /// + /// The security of the order + /// The order to be processed + /// If this function returns false, a brokerage message detailing why the order may not be submitted + /// True if the brokerage could process the order, false otherwise + public override bool CanSubmitOrder(Security security, Order order, out BrokerageMessageEvent message) + { + if (security.Type != SecurityType.CryptoFuture) + { + message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported", + Messages.DefaultBrokerageModel.UnsupportedSecurityType(this, security)); + + return false; + } + + message = null; + bool quantityIsValid; + + switch (order) + { + case StopLimitOrder: + case StopMarketOrder: + case LimitOrder: + case MarketOrder: + quantityIsValid = IsValidOrderSize(security, Math.Abs(order.Quantity), out message); + break; + default: + message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported", + Messages.DefaultBrokerageModel.UnsupportedOrderType(this, order, + [OrderType.StopMarket, OrderType.StopLimit, OrderType.Market, OrderType.Limit])); + return false; + } + + return quantityIsValid; + } + + private static IReadOnlyDictionary GetDefaultMarkets(string marketName) + { + var map = DefaultMarketMap.ToDictionary(); + map[SecurityType.CryptoFuture] = marketName; + return map.ToReadOnlyDictionary(); + } +} diff --git a/Common/Market.cs b/Common/Market.cs index b2a1692cbd68..8256cbd47648 100644 --- a/Common/Market.cs +++ b/Common/Market.cs @@ -70,7 +70,8 @@ public static class Market Tuple.Create(Coinbase, 38), Tuple.Create(InteractiveBrokers, 39), Tuple.Create(EUREX, 40), - Tuple.Create(OSE, 41) + Tuple.Create(OSE, 41), + Tuple.Create(dYdX, 42) }; static Market() @@ -261,6 +262,11 @@ static Market() /// public const string InteractiveBrokers = "interactivebrokers"; + /// + /// dYdX market + /// + public const string dYdX = "dydx"; + /// /// Adds the specified market to the map of available markets with the specified identifier. /// diff --git a/Common/Orders/Fees/dYdXFeeModel.cs b/Common/Orders/Fees/dYdXFeeModel.cs new file mode 100644 index 000000000000..4a9163c5aa74 --- /dev/null +++ b/Common/Orders/Fees/dYdXFeeModel.cs @@ -0,0 +1,93 @@ +/* + * 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.Securities; +using QuantConnect.Util; + +namespace QuantConnect.Orders.Fees; + +/// +/// dYdX fee model implementation +/// +public class dYdXFeeModel : FeeModel +{ + /// + /// Tier 1 maker fees + /// https://dydx.trade/portfolio/fees + /// + private const decimal MakerTier1Fee = 0.0001m; + + /// + /// Tier 1 taker fees + /// https://dydx.trade/portfolio/fees + /// + private const decimal TakerTier1Fee = 0.0005m; + + private readonly decimal _makerFee; + private readonly decimal _takerFee; + + /// + /// Creates Binance fee model setting fees values + /// + /// Maker fee value + /// Taker fee value + public dYdXFeeModel(decimal mFee = MakerTier1Fee, decimal tFee = TakerTier1Fee) + { + _makerFee = mFee; + _takerFee = tFee; + } + + /// + /// Gets the order fee associated with the specified order. + /// + /// A object + /// containing the security and order + /// The cost of the order in a instance + public override OrderFee GetOrderFee(OrderFeeParameters parameters) + { + var security = parameters.Security; + var order = parameters.Order; + + var fee = GetFee(order); + var positionValue = security.Holdings.GetQuantityValue(order.AbsoluteQuantity, security.Price); + + return new OrderFee(new CashAmount(positionValue.Amount * fee, positionValue.Cash.Symbol)); + } + + /// + /// Gets the fee factor for the given order + /// + /// The order to get the fee factor for + /// The fee factor for the given order + protected virtual decimal GetFee(Order order) + { + return GetFee(order, _makerFee, _takerFee); + } + + private static decimal GetFee(Order order, decimal makerFee, decimal takerFee) + { + // apply fee factor, currently we do not model 30-day volume, so we use the first tier + var fee = takerFee; + var props = order.Properties as dYdXOrderProperties; + + if (order.Type == OrderType.Limit && (props is { PostOnly: true } || !order.IsMarketable)) + { + // limit order posted to the order book + fee = makerFee; + } + + return fee; + } +} diff --git a/Common/Orders/dYdXOrderProperties.cs b/Common/Orders/dYdXOrderProperties.cs new file mode 100644 index 000000000000..b7f72a31be32 --- /dev/null +++ b/Common/Orders/dYdXOrderProperties.cs @@ -0,0 +1,57 @@ +/* + * 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.Data.Custom.Intrinio; +using QuantConnect.Interfaces; + +namespace QuantConnect.Orders +{ + /// + /// Contains additional properties and settings for an order submitted to Binance brokerage + /// + public class dYdXOrderProperties : OrderProperties + { + /// + /// This flag will ensure the order executes only as a maker (no fee) order. + /// If part of the order results in taking liquidity rather than providing, + /// it will be rejected and no part of the order will execute. + /// Note: this flag is only applied to Limit orders. + /// + public bool PostOnly { get; set; } = true; + + /// + /// The maximum amount of gas to use for the order. + /// + public ulong GasLimit { get; set; } = 1_000_000; + + /// + /// If you send a reduce-only order, it will only trade if it decreases your position size. + /// + public bool ReduceOnly { get; set; } + + /// + /// The block height at which the order expires. + /// + public uint GoodTilBlockOffset { get; set; } = 20; + + /// + /// Returns a new instance clone of this object + /// + public override IOrderProperties Clone() + { + return (dYdXOrderProperties)MemberwiseClone(); + } + } +} diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index ee09d4372c95..6cf9ff9e4f14 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -153430,6 +153430,60 @@ ], "holidays": [] }, + "CryptoFuture-dydx-[*]": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "saturday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "holidays": [] + }, "Index-eurex-[*]": { "dataTimeZone": "Europe/Berlin", "exchangeTimeZone": "Europe/Berlin", diff --git a/Data/symbol-properties/symbol-properties-database.csv b/Data/symbol-properties/symbol-properties-database.csv index b995ef9dfa17..08175396faa9 100644 --- a/Data/symbol-properties/symbol-properties-database.csv +++ b/Data/symbol-properties/symbol-properties-database.csv @@ -10162,3 +10162,249 @@ bybit,ZORAUSDT,cryptofuture,ZORAUSDT,USDT,1,0.00001,10,ZORAUSDT,10 bybit,ZRCUSDT,cryptofuture,ZRCUSDT,USDT,1,0.00001,1,ZRCUSDT,1 bybit,ZROUSDT,cryptofuture,ZROUSDT,USDT,1,0.0001,0.1,ZROUSDT,0.1 bybit,ZRXUSDT,cryptofuture,ZRXUSDT,USDT,1,0.0001,1,ZRXUSDT,1 + + +dydx,1INCHUSD,cryptofuture,1INCH-USD,USD,1,0.0001,10,1INCH-USD,10.00000,10000000000,100000 +dydx,2ZUSD,cryptofuture,2Z-USD,USD,1,0.0001,10,2Z-USD,10.00000,10000000000,100000 +dydx,AAVEUSD,cryptofuture,AAVE-USD,USD,1,0.01,0.1,AAVE-USD,0.1000000,100000000,10000000 +dydx,ACXUSD,cryptofuture,ACX-USD,USD,1,0.0001,10,ACX-USD,10.00000,10000000000,100000 +dydx,ADAUSD,cryptofuture,ADA-USD,USD,1,0.0001,10,ADA-USD,10.00000,10000000000,100000 +dydx,AERGOUSD,cryptofuture,AERGO-USD,USD,1,0.00001,100,AERGO-USD,100.0000,100000000000,10000 +dydx,AEROUSD,cryptofuture,AERO-USD,USD,1,0.001,1,AERO-USD,1.000000,1000000000,1000000 +dydx,AEVOUSD,cryptofuture,AEVO-USD,USD,1,0.001,1,AEVO-USD,1.000000,1000000000,1000000 +dydx,AITECHUSD,cryptofuture,AITECH-USD,USD,1,0.00001,100,AITECH-USD,100.0000,100000000000,10000 +dydx,AIXBTUSD,cryptofuture,AIXBT-USD,USD,1,0.0001,10,AIXBT-USD,10.00000,10000000000,100000 +dydx,AKTUSD,cryptofuture,AKT-USD,USD,1,0.001,1,AKT-USD,1.000000,1000000000,1000000 +dydx,ALGOUSD,cryptofuture,ALGO-USD,USD,1,0.0001,10,ALGO-USD,10.00000,10000000000,100000 +dydx,ALPACAUSD,cryptofuture,ALPACA-USD,USD,1,0.00001,100,ALPACA-USD,100.0000,100000000000,10000 +dydx,ALTUSD,cryptofuture,ALT-USD,USD,1,0.0001,10,ALT-USD,10.00000,10000000000,100000 +dydx,APEUSD,cryptofuture,APE-USD,USD,1,0.001,1,APE-USD,1.000000,1000000000,1000000 +dydx,API3USD,cryptofuture,API3-USD,USD,1,0.0001,10,API3-USD,10.00000,10000000000,100000 +dydx,APTUSD,cryptofuture,APT-USD,USD,1,0.001,1,APT-USD,1.000000,1000000000,1000000 +dydx,ARBUSD,cryptofuture,ARB-USD,USD,1,0.001,1,ARB-USD,1.000000,1000000000,1000000 +dydx,ARKMUSD,cryptofuture,ARKM-USD,USD,1,0.001,1,ARKM-USD,1.000000,1000000000,1000000 +dydx,ARUSD,cryptofuture,AR-USD,USD,1,0.01,0.1,AR-USD,0.1000000,100000000,10000000 +dydx,ASTERUSD,cryptofuture,ASTER-USD,USD,1,0.001,1,ASTER-USD,1.000000,1000000000,1000000 +dydx,ASTRUSD,cryptofuture,ASTR-USD,USD,1,0.0001,10,ASTR-USD,10.00000,10000000000,100000 +dydx,ATHUSD,cryptofuture,ATH-USD,USD,1,0.00001,100,ATH-USD,100.0000,100000000000,10000 +dydx,ATOMUSD,cryptofuture,ATOM-USD,USD,1,0.001,1,ATOM-USD,1.000000,1000000000,1000000 +dydx,AVAXUSD,cryptofuture,AVAX-USD,USD,1,0.01,0.1,AVAX-USD,0.1000000,100000000,10000000 +dydx,AVNTUSD,cryptofuture,AVNT-USD,USD,1,0.00001,100,AVNT-USD,100.0000,100000000000,10000 +dydx,AXLUSD,cryptofuture,AXL-USD,USD,1,0.001,1,AXL-USD,1.000000,1000000000,1000000 +dydx,AXSUSD,cryptofuture,AXS-USD,USD,1,0.001,1,AXS-USD,1.000000,1000000000,1000000 +dydx,B3USD,cryptofuture,B3-USD,USD,1,0.000001,1000,B3-USD,1000.000,1000000000000,1000 +dydx,BABYDOGEUSD,cryptofuture,BABYDOGE-USD,USD,1,0.000000000001,1000000000,BABYDOGE-USD,1000000000,1000000000000000000,0.001 +dydx,BABYUSD,cryptofuture,BABY-USD,USD,1,0.00001,100,BABY-USD,100.0000,100000000000,10000 +dydx,BADGERUSD,cryptofuture,BADGER-USD,USD,1,0.001,1,BADGER-USD,1.000000,1000000000,1000000 +dydx,BANANAUSD,cryptofuture,BANANA-USD,USD,1,0.01,0.1,BANANA-USD,0.1000000,100000000,10000000 +dydx,BCHUSD,cryptofuture,BCH-USD,USD,1,0.1,0.01,BCH-USD,0.01000000,10000000,100000000 +dydx,BEAMUSD,cryptofuture,BEAM-USD,USD,1,0.00001,100,BEAM-USD,100.0000,100000000000,10000 +dydx,BERAUSD,cryptofuture,BERA-USD,USD,1,0.01,0.1,BERA-USD,0.1000000,100000000,10000000 +dydx,BICOUSD,cryptofuture,BICO-USD,USD,1,0.0001,10,BICO-USD,10.00000,10000000000,100000 +dydx,BLASTUSD,cryptofuture,BLAST-USD,USD,1,0.00001,100,BLAST-USD,100.0000,100000000000,10000 +dydx,BLURUSD,cryptofuture,BLUR-USD,USD,1,0.0001,10,BLUR-USD,10.00000,10000000000,100000 +dydx,BNBUSD,cryptofuture,BNB-USD,USD,1,0.1,0.01,BNB-USD,0.01000000,10000000,100000000 +dydx,BOMEUSD,cryptofuture,BOME-USD,USD,1,0.000001,1000,BOME-USD,1000.000,1000000000000,1000 +dydx,BONKUSD,cryptofuture,BONK-USD,USD,1,0.00000001,100000,BONK-USD,100000.0,100000000000000,10 +dydx,BRETTUSD,cryptofuture,BRETT-USD,USD,1,0.0001,10,BRETT-USD,10.00000,10000000000,100000 +dydx,BTCUSD,cryptofuture,BTC-USD,USD,1,1,0.0001,BTC-USD,0.0001000000,100000,10000000000 +dydx,CAKEUSD,cryptofuture,CAKE-USD,USD,1,0.001,1,CAKE-USD,1.000000,1000000000,1000000 +dydx,CETUSUSD,cryptofuture,CETUS-USD,USD,1,0.00001,100,CETUS-USD,100.0000,100000000000,10000 +dydx,CHZUSD,cryptofuture,CHZ-USD,USD,1,0.0001,10,CHZ-USD,10.00000,10000000000,100000 +dydx,CLVUSD,cryptofuture,CLV-USD,USD,1,0.00001,100,CLV-USD,100.0000,100000000000,10000 +dydx,COMPUSD,cryptofuture,COMP-USD,USD,1,0.01,0.1,COMP-USD,0.1000000,100000000,10000000 +dydx,COOKIEUSD,cryptofuture,COOKIE-USD,USD,1,0.00001,100,COOKIE-USD,100.0000,100000000000,10000 +dydx,COREUSD,cryptofuture,CORE-USD,USD,1,0.001,1,CORE-USD,1.000000,1000000000,1000000 +dydx,CROUSD,cryptofuture,CRO-USD,USD,1,0.00001,100,CRO-USD,100.0000,100000000000,10000 +dydx,CRVUSD,cryptofuture,CRV-USD,USD,1,0.0001,10,CRV-USD,10.00000,10000000000,100000 +dydx,CVXUSD,cryptofuture,CVX-USD,USD,1,0.001,1,CVX-USD,1.000000,1000000000,1000000 +dydx,DAIUSD,cryptofuture,DAI-USD,USD,1,0.0001,10,DAI-USD,10.00000,10000000000,100000 +dydx,DEGENUSD,cryptofuture,DEGEN-USD,USD,1,0.000001,1000,DEGEN-USD,1000.000,1000000000000,1000 +dydx,DOGEUSD,cryptofuture,DOGE-USD,USD,1,0.00001,100,DOGE-USD,100.0000,100000000000,10000 +dydx,DOTUSD,cryptofuture,DOT-USD,USD,1,0.001,1,DOT-USD,1.000000,1000000000,1000000 +dydx,DRIFTUSD,cryptofuture,DRIFT-USD,USD,1,0.0001,10,DRIFT-USD,10.00000,10000000000,100000 +dydx,DYDXUSD,cryptofuture,DYDX-USD,USD,1,0.001,1,DYDX-USD,1.000000,1000000000,1000000 +dydx,DYMUSD,cryptofuture,DYM-USD,USD,1,0.001,1,DYM-USD,1.000000,1000000000,1000000 +dydx,EGLDUSD,cryptofuture,EGLD-USD,USD,1,0.01,0.1,EGLD-USD,0.1000000,100000000,10000000 +dydx,EIGENUSD,cryptofuture,EIGEN-USD,USD,1,0.001,1,EIGEN-USD,1.000000,1000000000,1000000 +dydx,ELXUSD,cryptofuture,ELX-USD,USD,1,0.0001,10,ELX-USD,10.00000,10000000000,100000 +dydx,ENAUSD,cryptofuture,ENA-USD,USD,1,0.0001,10,ENA-USD,10.00000,10000000000,100000 +dydx,ENJUSD,cryptofuture,ENJ-USD,USD,1,0.0001,10,ENJ-USD,10.00000,10000000000,100000 +dydx,ENSUSD,cryptofuture,ENS-USD,USD,1,0.01,0.1,ENS-USD,0.1000000,100000000,10000000 +dydx,ERAUSD,cryptofuture,ERA-USD,USD,1,0.001,1,ERA-USD,1.000000,1000000000,1000000 +dydx,ESUSD,cryptofuture,ES-USD,USD,1,0.0001,10,ES-USD,10.00000,10000000000,100000 +dydx,ETCUSD,cryptofuture,ETC-USD,USD,1,0.01,0.1,ETC-USD,0.1000000,100000000,10000000 +dydx,ETHFIUSD,cryptofuture,ETHFI-USD,USD,1,0.001,1,ETHFI-USD,1.000000,1000000000,1000000 +dydx,ETHUSD,cryptofuture,ETH-USD,USD,1,0.1,0.001,ETH-USD,0.001000000,1000000,1000000000 +dydx,EURUSD,cryptofuture,EUR-USD,USD,1,0.001,1,EUR-USD,1.000000,1000000000,1000000 +dydx,FILUSD,cryptofuture,FIL-USD,USD,1,0.001,1,FIL-USD,1.000000,1000000000,1000000 +dydx,FLOKIUSD,cryptofuture,FLOKI-USD,USD,1,0.0000001,10000,FLOKI-USD,10000.00,10000000000000,100 +dydx,FLRUSD,cryptofuture,FLR-USD,USD,1,0.00001,100,FLR-USD,100.0000,100000000000,10000 +dydx,FORTHUSD,cryptofuture,FORTH-USD,USD,1,0.001,1,FORTH-USD,1.000000,1000000000,1000000 +dydx,GALAUSD,cryptofuture,GALA-USD,USD,1,0.00001,100,GALA-USD,100.0000,100000000000,10000 +dydx,GASUSD,cryptofuture,GAS-USD,USD,1,0.001,1,GAS-USD,1.000000,1000000000,1000000 +dydx,GLMRUSD,cryptofuture,GLMR-USD,USD,1,0.0001,10,GLMR-USD,10.00000,10000000000,100000 +dydx,GMXUSD,cryptofuture,GMX-USD,USD,1,0.01,0.1,GMX-USD,0.1000000,100000000,10000000 +dydx,GNOUSD,cryptofuture,GNO-USD,USD,1,0.1,0.01,GNO-USD,0.01000000,10000000,100000000 +dydx,GOATUSD,cryptofuture,GOAT-USD,USD,1,0.0001,10,GOAT-USD,10.00000,10000000000,100000 +dydx,GRASSUSD,cryptofuture,GRASS-USD,USD,1,0.0001,10,GRASS-USD,10.00000,10000000000,100000 +dydx,GRTUSD,cryptofuture,GRT-USD,USD,1,0.0001,10,GRT-USD,10.00000,10000000000,100000 +dydx,GUSD,cryptofuture,G-USD,USD,1,0.00001,100,G-USD,100.0000,100000000000,10000 +dydx,HBARUSD,cryptofuture,HBAR-USD,USD,1,0.0001,10,HBAR-USD,10.00000,10000000000,100000 +dydx,HNTUSD,cryptofuture,HNT-USD,USD,1,0.001,1,HNT-USD,1.000000,1000000000,1000000 +dydx,HOLOUSD,cryptofuture,HOLO-USD,USD,1,0.0001,10,HOLO-USD,10.00000,10000000000,100000 +dydx,HUMAUSD,cryptofuture,HUMA-USD,USD,1,0.00001,100,HUMA-USD,100.0000,100000000000,10000 +dydx,HYPEUSD,cryptofuture,HYPE-USD,USD,1,0.01,0.1,HYPE-USD,0.1000000,100000000,10000000 +dydx,ICPUSD,cryptofuture,ICP-USD,USD,1,0.01,0.1,ICP-USD,0.1000000,100000000,10000000 +dydx,IDUSD,cryptofuture,ID-USD,USD,1,0.0001,10,ID-USD,10.00000,10000000000,100000 +dydx,IMXUSD,cryptofuture,IMX-USD,USD,1,0.001,1,IMX-USD,1.000000,1000000000,1000000 +dydx,INJUSD,cryptofuture,INJ-USD,USD,1,0.01,0.1,INJ-USD,0.1000000,100000000,10000000 +dydx,IOTAUSD,cryptofuture,IOTA-USD,USD,1,0.0001,10,IOTA-USD,10.00000,10000000000,100000 +dydx,IOTXUSD,cryptofuture,IOTX-USD,USD,1,0.00001,100,IOTX-USD,100.0000,100000000000,10000 +dydx,IOUSD,cryptofuture,IO-USD,USD,1,0.001,1,IO-USD,1.000000,1000000000,1000000 +dydx,IPUSD,cryptofuture,IP-USD,USD,1,0.001,1,IP-USD,1.000000,1000000000,1000000 +dydx,JASMYUSD,cryptofuture,JASMY-USD,USD,1,0.00001,100,JASMY-USD,100.0000,100000000000,10000 +dydx,JTOUSD,cryptofuture,JTO-USD,USD,1,0.001,1,JTO-USD,1.000000,1000000000,1000000 +dydx,JUPUSD,cryptofuture,JUP-USD,USD,1,0.0001,10,JUP-USD,10.00000,10000000000,100000 +dydx,KAITOUSD,cryptofuture,KAITO-USD,USD,1,0.0001,10,KAITO-USD,10.00000,10000000000,100000 +dydx,KASUSD,cryptofuture,KAS-USD,USD,1,0.0001,10,KAS-USD,10.00000,10000000000,100000 +dydx,KDAUSD,cryptofuture,KDA-USD,USD,1,0.0001,10,KDA-USD,10.00000,10000000000,100000 +dydx,KERNELUSD,cryptofuture,KERNEL-USD,USD,1,0.0001,10,KERNEL-USD,10.00000,10000000000,100000 +dydx,KOMAUSD,cryptofuture,KOMA-USD,USD,1,0.00001,100,KOMA-USD,100.0000,100000000000,10000 +dydx,KRLUSD,cryptofuture,KRL-USD,USD,1,0.0001,10,KRL-USD,10.00000,10000000000,100000 +dydx,KSMUSD,cryptofuture,KSM-USD,USD,1,0.01,0.1,KSM-USD,0.1000000,100000000,10000000 +dydx,LAUSD,cryptofuture,LA-USD,USD,1,0.0001,10,LA-USD,10.00000,10000000000,100000 +dydx,LAYERUSD,cryptofuture,LAYER-USD,USD,1,0.0001,10,LAYER-USD,10.00000,10000000000,100000 +dydx,LDOUSD,cryptofuture,LDO-USD,USD,1,0.001,1,LDO-USD,1.000000,1000000000,1000000 +dydx,LINEAUSD,cryptofuture,LINEA-USD,USD,1,0.00001,100,LINEA-USD,100.0000,100000000000,10000 +dydx,LINKUSD,cryptofuture,LINK-USD,USD,1,0.001,1,LINK-USD,1.000000,1000000000,1000000 +dydx,LPTUSD,cryptofuture,LPT-USD,USD,1,0.01,0.1,LPT-USD,0.1000000,100000000,10000000 +dydx,LTCUSD,cryptofuture,LTC-USD,USD,1,0.01,0.1,LTC-USD,0.1000000,100000000,10000000 +dydx,MAGICUSD,cryptofuture,MAGIC-USD,USD,1,0.0001,10,MAGIC-USD,10.00000,10000000000,100000 +dydx,MAJORUSD,cryptofuture,MAJOR-USD,USD,1,0.0001,10,MAJOR-USD,10.00000,10000000000,100000 +dydx,MANAUSD,cryptofuture,MANA-USD,USD,1,0.0001,10,MANA-USD,10.00000,10000000000,100000 +dydx,MASKUSD,cryptofuture,MASK-USD,USD,1,0.001,1,MASK-USD,1.000000,1000000000,1000000 +dydx,MELANIAUSD,cryptofuture,MELANIA-USD,USD,1,0.0001,10,MELANIA-USD,10.00000,10000000000,100000 +dydx,METUSD,cryptofuture,MET-USD,USD,1,0.0001,10,MET-USD,10.00000,10000000000,100000 +dydx,MEUSD,cryptofuture,ME-USD,USD,1,0.001,1,ME-USD,1.000000,1000000000,1000000 +dydx,MEWUSD,cryptofuture,MEW-USD,USD,1,0.000001,1000,MEW-USD,1000.000,1000000000000,1000 +dydx,MICHIUSD,cryptofuture,MICHI-USD,USD,1,0.0001,10,MICHI-USD,10.00000,10000000000,100000 +dydx,MNRYUSD,cryptofuture,MNRY-USD,USD,1,0.00001,100,MNRY-USD,100.0000,100000000000,10000 +dydx,MNTUSD,cryptofuture,MNT-USD,USD,1,0.0001,10,MNT-USD,10.00000,10000000000,100000 +dydx,MOCAUSD,cryptofuture,MOCA-USD,USD,1,0.00001,100,MOCA-USD,100.0000,100000000000,10000 +dydx,MOGUSD,cryptofuture,MOG-USD,USD,1,0.0000000001,10000000,MOG-USD,10000000,10000000000000000,0.1 +dydx,MONUSD,cryptofuture,MON-USD,USD,1,0.00001,100,MON-USD,100.0000,100000000000,10000 +dydx,MOODENGUSD,cryptofuture,MOODENG-USD,USD,1,0.0001,10,MOODENG-USD,10.00000,10000000000,100000 +dydx,MORPHOUSD,cryptofuture,MORPHO-USD,USD,1,0.001,1,MORPHO-USD,1.000000,1000000000,1000000 +dydx,MOVEUSD,cryptofuture,MOVE-USD,USD,1,0.0001,10,MOVE-USD,10.00000,10000000000,100000 +dydx,NCUSD,cryptofuture,NC-USD,USD,1,0.00001,100,NC-USD,100.0000,100000000000,10000 +dydx,NEARUSD,cryptofuture,NEAR-USD,USD,1,0.001,1,NEAR-USD,1.000000,1000000000,1000000 +dydx,NEIROUSD,cryptofuture,NEIRO-USD,USD,1,0.00001,100,NEIRO-USD,100.0000,100000000000,10000 +dydx,NEOUSD,cryptofuture,NEO-USD,USD,1,0.01,0.1,NEO-USD,0.1000000,100000000,10000000 +dydx,NEWTUSD,cryptofuture,NEWT-USD,USD,1,0.0001,10,NEWT-USD,10.00000,10000000000,100000 +dydx,NFTUSD,cryptofuture,NFT-USD,USD,1,0.0000000001,10000000,NFT-USD,10000000,10000000000000000,0.1 +dydx,NILUSD,cryptofuture,NIL-USD,USD,1,0.0001,10,NIL-USD,10.00000,10000000000,100000 +dydx,NMRUSD,cryptofuture,NMR-USD,USD,1,0.01,0.1,NMR-USD,0.1000000,100000000,10000000 +dydx,NOTUSD,cryptofuture,NOT-USD,USD,1,0.00001,100,NOT-USD,100.0000,100000000000,10000 +dydx,OMUSD,cryptofuture,OM-USD,USD,1,0.0001,10,OM-USD,10.00000,10000000000,100000 +dydx,ONDOUSD,cryptofuture,ONDO-USD,USD,1,0.001,1,ONDO-USD,1.000000,1000000000,1000000 +dydx,ONTUSD,cryptofuture,ONT-USD,USD,1,0.0001,10,ONT-USD,10.00000,10000000000,100000 +dydx,OPUSD,cryptofuture,OP-USD,USD,1,0.001,1,OP-USD,1.000000,1000000000,1000000 +dydx,ORCAUSD,cryptofuture,ORCA-USD,USD,1,0.001,1,ORCA-USD,1.000000,1000000000,1000000 +dydx,ORDERUSD,cryptofuture,ORDER-USD,USD,1,0.0001,10,ORDER-USD,10.00000,10000000000,100000 +dydx,ORDIUSD,cryptofuture,ORDI-USD,USD,1,0.01,0.1,ORDI-USD,0.1000000,100000000,10000000 +dydx,OSMOUSD,cryptofuture,OSMO-USD,USD,1,0.0001,10,OSMO-USD,10.00000,10000000000,100000 +dydx,PAXGUSD,cryptofuture,PAXG-USD,USD,1,1,0.001,PAXG-USD,0.001000000,1000000,1000000000 +dydx,PEAQUSD,cryptofuture,PEAQ-USD,USD,1,0.0001,10,PEAQ-USD,10.00000,10000000000,100000 +dydx,PENDLEUSD,cryptofuture,PENDLE-USD,USD,1,0.001,1,PENDLE-USD,1.000000,1000000000,1000000 +dydx,PENGUUSD,cryptofuture,PENGU-USD,USD,1,0.00001,100,PENGU-USD,100.0000,100000000000,10000 +dydx,PEOPLEUSD,cryptofuture,PEOPLE-USD,USD,1,0.00001,100,PEOPLE-USD,100.0000,100000000000,10000 +dydx,PEPEUSD,cryptofuture,PEPE-USD,USD,1,0.0000000001,10000000,PEPE-USD,10000000,10000000000000000,0.1 +dydx,PERPUSD,cryptofuture,PERP-USD,USD,1,0.0001,10,PERP-USD,10.00000,10000000000,100000 +dydx,PIRATEUSD,cryptofuture,PIRATE-USD,USD,1,0.0001,10,PIRATE-USD,10.00000,10000000000,100000 +dydx,PIUSD,cryptofuture,PI-USD,USD,1,0.0001,10,PI-USD,10.00000,10000000000,100000 +dydx,PIXELUSD,cryptofuture,PIXEL-USD,USD,1,0.0001,10,PIXEL-USD,10.00000,10000000000,100000 +dydx,PNUTUSD,cryptofuture,PNUT-USD,USD,1,0.001,1,PNUT-USD,1.000000,1000000000,1000000 +dydx,POLUSD,cryptofuture,POL-USD,USD,1,0.0001,10,POL-USD,10.00000,10000000000,100000 +dydx,POPCATUSD,cryptofuture,POPCAT-USD,USD,1,0.0001,10,POPCAT-USD,10.00000,10000000000,100000 +dydx,PRIMEUSD,cryptofuture,PRIME-USD,USD,1,0.001,1,PRIME-USD,1.000000,1000000000,1000000 +dydx,PROMPTUSD,cryptofuture,PROMPT-USD,USD,1,0.00001,100,PROMPT-USD,100.0000,100000000000,10000 +dydx,PROVEUSD,cryptofuture,PROVE-USD,USD,1,0.0001,10,PROVE-USD,10.00000,10000000000,100000 +dydx,PUMPUSD,cryptofuture,PUMP-USD,USD,1,0.000001,1000,PUMP-USD,1000.000,1000000000000,1000 +dydx,PYTHUSD,cryptofuture,PYTH-USD,USD,1,0.0001,10,PYTH-USD,10.00000,10000000000,100000 +dydx,QNTUSD,cryptofuture,QNT-USD,USD,1,0.01,0.1,QNT-USD,0.1000000,100000000,10000000 +dydx,QTUMUSD,cryptofuture,QTUM-USD,USD,1,0.001,1,QTUM-USD,1.000000,1000000000,1000000 +dydx,RAYUSD,cryptofuture,RAY-USD,USD,1,0.001,1,RAY-USD,1.000000,1000000000,1000000 +dydx,RENDERUSD,cryptofuture,RENDER-USD,USD,1,0.001,1,RENDER-USD,1.000000,1000000000,1000000 +dydx,REZUSD,cryptofuture,REZ-USD,USD,1,0.00001,100,REZ-USD,100.0000,100000000000,10000 +dydx,RUNEUSD,cryptofuture,RUNE-USD,USD,1,0.001,1,RUNE-USD,1.000000,1000000000,1000000 +dydx,SAFEUSD,cryptofuture,SAFE-USD,USD,1,0.001,1,SAFE-USD,1.000000,1000000000,1000000 +dydx,SAGAUSD,cryptofuture,SAGA-USD,USD,1,0.001,1,SAGA-USD,1.000000,1000000000,1000000 +dydx,SATSUSD,cryptofuture,SATS-USD,USD,1,0.0000000001,10000000,SATS-USD,10000000,10000000000000000,0.1 +dydx,SDMUSD,cryptofuture,SDM-USD,USD,1,0.00001,100,SDM-USD,100.0000,100000000000,10000 +dydx,SEIUSD,cryptofuture,SEI-USD,USD,1,0.0001,10,SEI-USD,10.00000,10000000000,100000 +dydx,SHIBUSD,cryptofuture,SHIB-USD,USD,1,0.000000001,1000000,SHIB-USD,1000000,1000000000000000,1 +dydx,SIGNUSD,cryptofuture,SIGN-USD,USD,1,0.00001,100,SIGN-USD,100.0000,100000000000,10000 +dydx,SKLUSD,cryptofuture,SKL-USD,USD,1,0.00001,100,SKL-USD,100.0000,100000000000,10000 +dydx,SKYUSD,cryptofuture,SKY-USD,USD,1,0.00001,100,SKY-USD,100.0000,100000000000,10000 +dydx,SNXUSD,cryptofuture,SNX-USD,USD,1,0.001,1,SNX-USD,1.000000,1000000000,1000000 +dydx,SOLUSD,cryptofuture,SOL-USD,USD,1,0.01,0.1,SOL-USD,0.1000000,100000000,10000000 +dydx,SOPHUSD,cryptofuture,SOPH-USD,USD,1,0.00001,100,SOPH-USD,100.0000,100000000000,10000 +dydx,SPXUSD,cryptofuture,SPX-USD,USD,1,0.0001,10,SPX-USD,10.00000,10000000000,100000 +dydx,SSVUSD,cryptofuture,SSV-USD,USD,1,0.01,0.1,SSV-USD,0.1000000,100000000,10000000 +dydx,STEEMUSD,cryptofuture,STEEM-USD,USD,1,0.0001,10,STEEM-USD,10.00000,10000000000,100000 +dydx,STRKUSD,cryptofuture,STRK-USD,USD,1,0.001,1,STRK-USD,1.000000,1000000000,1000000 +dydx,STXUSD,cryptofuture,STX-USD,USD,1,0.001,1,STX-USD,1.000000,1000000000,1000000 +dydx,SUIUSD,cryptofuture,SUI-USD,USD,1,0.0001,10,SUI-USD,10.00000,10000000000,100000 +dydx,SUNDOGUSD,cryptofuture,SUNDOG-USD,USD,1,0.0001,10,SUNDOG-USD,10.00000,10000000000,100000 +dydx,SUSD,cryptofuture,S-USD,USD,1,0.0001,10,S-USD,10.00000,10000000000,100000 +dydx,SUSHIUSD,cryptofuture,SUSHI-USD,USD,1,0.0001,10,SUSHI-USD,10.00000,10000000000,100000 +dydx,SYRUPUSD,cryptofuture,SYRUP-USD,USD,1,0.0001,10,SYRUP-USD,10.00000,10000000000,100000 +dydx,TAIKOUSD,cryptofuture,TAIKO-USD,USD,1,0.001,1,TAIKO-USD,1.000000,1000000000,1000000 +dydx,TAOUSD,cryptofuture,TAO-USD,USD,1,0.1,0.01,TAO-USD,0.01000000,10000000,100000000 +dydx,THETAUSD,cryptofuture,THETA-USD,USD,1,0.001,1,THETA-USD,1.000000,1000000000,1000000 +dydx,THEUSD,cryptofuture,THE-USD,USD,1,0.001,1,THE-USD,1.000000,1000000000,1000000 +dydx,TIAUSD,cryptofuture,TIA-USD,USD,1,0.01,0.1,TIA-USD,0.1000000,100000000,10000000 +dydx,TLOSUSD,cryptofuture,TLOS-USD,USD,1,0.0001,10,TLOS-USD,10.00000,10000000000,100000 +dydx,TONUSD,cryptofuture,TON-USD,USD,1,0.001,1,TON-USD,1.000000,1000000000,1000000 +dydx,TRBUSD,cryptofuture,TRB-USD,USD,1,0.1,0.01,TRB-USD,0.01000000,10000000,100000000 +dydx,TREEUSD,cryptofuture,TREE-USD,USD,1,0.0001,10,TREE-USD,10.00000,10000000000,100000 +dydx,TROYUSD,cryptofuture,TROY-USD,USD,1,0.0000001,10000,TROY-USD,10000.00,10000000000000,100 +dydx,TRUMPUSD,cryptofuture,TRUMP-USD,USD,1,0.01,0.1,TRUMP-USD,0.1000000,100000000,10000000 +dydx,TRXUSD,cryptofuture,TRX-USD,USD,1,0.00001,100,TRX-USD,100.0000,100000000000,10000 +dydx,TRYUSD,cryptofuture,TRY-USD,USD,1,0.00001,100,TRY-USD,100.0000,100000000000,10000 +dydx,TSLAXUSD,cryptofuture,TSLAX-USD,USD,1,0.1,0.01,TSLAX-USD,0.01000000,10000000,100000000 +dydx,TURBOUSD,cryptofuture,TURBO-USD,USD,1,0.000001,1000,TURBO-USD,1000.000,1000000000000,1000 +dydx,UMAUSD,cryptofuture,UMA-USD,USD,1,0.001,1,UMA-USD,1.000000,1000000000,1000000 +dydx,UNIUSD,cryptofuture,UNI-USD,USD,1,0.001,1,UNI-USD,1.000000,1000000000,1000000 +dydx,USDEUSD,cryptofuture,USDE-USD,USD,1,0.0001,10,USDE-USD,10.00000,10000000000,100000 +dydx,USELESSUSD,cryptofuture,USELESS-USD,USD,1,0.0001,10,USELESS-USD,10.00000,10000000000,100000 +dydx,USUALUSD,cryptofuture,USUAL-USD,USD,1,0.001,1,USUAL-USD,1.000000,1000000000,1000000 +dydx,VETUSD,cryptofuture,VET-USD,USD,1,0.00001,100,VET-USD,100.0000,100000000000,10000 +dydx,VINEUSD,cryptofuture,VINE-USD,USD,1,0.0001,10,VINE-USD,10.00000,10000000000,100000 +dydx,VIRTUALUSD,cryptofuture,VIRTUAL-USD,USD,1,0.001,1,VIRTUAL-USD,1.000000,1000000000,1000000 +dydx,VOXELUSD,cryptofuture,VOXEL-USD,USD,1,0.00001,100,VOXEL-USD,100.0000,100000000000,10000 +dydx,VVVUSD,cryptofuture,VVV-USD,USD,1,0.001,1,VVV-USD,1.000000,1000000000,1000000 +dydx,WCTUSD,cryptofuture,WCT-USD,USD,1,0.0001,10,WCT-USD,10.00000,10000000000,100000 +dydx,WIFUSD,cryptofuture,WIF-USD,USD,1,0.001,1,WIF-USD,1.000000,1000000000,1000000 +dydx,WLDUSD,cryptofuture,WLD-USD,USD,1,0.001,1,WLD-USD,1.000000,1000000000,1000000 +dydx,WLFIUSD,cryptofuture,WLFI-USD,USD,1,0.0001,10,WLFI-USD,10.00000,10000000000,100000 +dydx,WOOUSD,cryptofuture,WOO-USD,USD,1,0.0001,10,WOO-USD,10.00000,10000000000,100000 +dydx,WSTETHUSD,cryptofuture,WSTETH-USD,USD,1,1,0.001,WSTETH-USD,0.001000000,1000000,1000000000 +dydx,WUSD,cryptofuture,W-USD,USD,1,0.0001,10,W-USD,10.00000,10000000000,100000 +dydx,XAIUSD,cryptofuture,XAI-USD,USD,1,0.0001,10,XAI-USD,10.00000,10000000000,100000 +dydx,XLMUSD,cryptofuture,XLM-USD,USD,1,0.0001,10,XLM-USD,10.00000,10000000000,100000 +dydx,XMRUSD,cryptofuture,XMR-USD,USD,1,0.1,0.01,XMR-USD,0.01000000,10000000,100000000 +dydx,XPLUSD,cryptofuture,XPL-USD,USD,1,0.0001,10,XPL-USD,10.00000,10000000000,100000 +dydx,XRPUSD,cryptofuture,XRP-USD,USD,1,0.0001,10,XRP-USD,10.00000,10000000000,100000 +dydx,XTZUSD,cryptofuture,XTZ-USD,USD,1,0.0001,10,XTZ-USD,10.00000,10000000000,100000 +dydx,XYOUSD,cryptofuture,XYO-USD,USD,1,0.000001,1000,XYO-USD,1000.000,1000000000000,1000 +dydx,YFIUSD,cryptofuture,YFI-USD,USD,1,1,0.001,YFI-USD,0.001000000,1000000,1000000000 +dydx,ZECUSD,cryptofuture,ZEC-USD,USD,1,0.01,0.1,ZEC-USD,0.1000000,100000000,10000000 +dydx,ZENUSD,cryptofuture,ZEN-USD,USD,1,0.001,1,ZEN-USD,1.000000,1000000000,1000000 +dydx,ZEREBROUSD,cryptofuture,ZEREBRO-USD,USD,1,0.0001,10,ZEREBRO-USD,10.00000,10000000000,100000 +dydx,ZETAUSD,cryptofuture,ZETA-USD,USD,1,0.0001,10,ZETA-USD,10.00000,10000000000,100000 +dydx,ZKUSD,cryptofuture,ZK-USD,USD,1,0.0001,10,ZK-USD,10.00000,10000000000,100000 +dydx,ZORAUSD,cryptofuture,ZORA-USD,USD,1,0.00001,100,ZORA-USD,100.0000,100000000000,10000 +dydx,ZROUSD,cryptofuture,ZRO-USD,USD,1,0.001,1,ZRO-USD,1.000000,1000000000,1000000 +dydx,ZRXUSD,cryptofuture,ZRX-USD,USD,1,0.0001,10,ZRX-USD,10.00000,10000000000,100000 \ No newline at end of file diff --git a/Launcher/config.json b/Launcher/config.json index fbe48f9ee6e7..84a99bdbd6bd 100644 --- a/Launcher/config.json +++ b/Launcher/config.json @@ -166,6 +166,18 @@ "bybit-api-url": "https://api.bybit.com", "bybit-websocket-url": "wss://stream.bybit.com", + // dydx configuration + //"dydx-mnemonic": "", + "dydx-private-key-hex": "", + "dydx-address": "", + "dydx-subaccount-number": 0, + + "dydx-node-api-rest": "https://dydx-ops-rest.kingnodes.com", + "dydx-node-api-grpc": "https://dydx-ops-grpc.kingnodes.com:443", + "dydx-indexer-api-rest": "https://indexer.dydx.trade/v4", + "dydx-indexer-api-wss": "wss://indexer.dydx.trade/v4/ws", + "dydx-chain-id": "dydx-mainnet-1", + // Eze configuration "eze-api-address-url": "", "eze-port": "", From bc646c974a0e718893d054b2a48f9bf27bc7b25f Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Tue, 9 Dec 2025 12:01:29 -0400 Subject: [PATCH 030/103] Use proper extended dictionary types for public properties (#9119) --- Algorithm/QCAlgorithm.cs | 5 +++-- AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs | 2 +- Common/Interfaces/IAlgorithm.cs | 2 +- Common/Securities/UniverseManager.cs | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Algorithm/QCAlgorithm.cs b/Algorithm/QCAlgorithm.cs index d8d27b126e96..6f42e9fa61d4 100644 --- a/Algorithm/QCAlgorithm.cs +++ b/Algorithm/QCAlgorithm.cs @@ -58,6 +58,7 @@ using Newtonsoft.Json; using QuantConnect.Securities.Index; using QuantConnect.Api; +using Common.Util; namespace QuantConnect.Algorithm { @@ -271,7 +272,7 @@ public SecurityManager Securities /// a security that is currently selected by the universe or has holdings or open orders. /// [DocumentationAttribute(SecuritiesAndPortfolio)] - public IReadOnlyDictionary ActiveSecurities => UniverseManager.ActiveSecurities; + public ReadOnlyExtendedDictionary ActiveSecurities => UniverseManager.ActiveSecurities; /// /// Portfolio object provieds easy access to the underlying security-holding properties; summed together in a way to make them useful. @@ -914,7 +915,7 @@ public decimal GetParameter(string name, decimal defaultValue) /// Gets a read-only dictionary with all current parameters /// [DocumentationAttribute(ParameterAndOptimization)] - public IReadOnlyDictionary GetParameters() + public ReadOnlyExtendedDictionary GetParameters() { return _parameters.ToReadOnlyExtendedDictionary(); } diff --git a/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs b/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs index cdaf900ffbbb..7b9ff0cd4916 100644 --- a/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs +++ b/AlgorithmFactory/Python/Wrappers/AlgorithmPythonWrapper.cs @@ -682,7 +682,7 @@ public void OnEndOfTimeStep() /// /// Gets a read-only dictionary with all current parameters /// - public IReadOnlyDictionary GetParameters() => _baseAlgorithm.GetParameters(); + public ReadOnlyExtendedDictionary GetParameters() => _baseAlgorithm.GetParameters(); /// /// Gets the parameter with the specified name. If a parameter with the specified name does not exist, diff --git a/Common/Interfaces/IAlgorithm.cs b/Common/Interfaces/IAlgorithm.cs index e9ff46f42904..4534c2fd6eed 100644 --- a/Common/Interfaces/IAlgorithm.cs +++ b/Common/Interfaces/IAlgorithm.cs @@ -430,7 +430,7 @@ InsightManager Insights /// /// Gets a read-only dictionary with all current parameters /// - IReadOnlyDictionary GetParameters(); + ReadOnlyExtendedDictionary GetParameters(); /// /// Gets the parameter with the specified name. If a parameter with the specified name does not exist, diff --git a/Common/Securities/UniverseManager.cs b/Common/Securities/UniverseManager.cs index 77df29396155..793db584179b 100644 --- a/Common/Securities/UniverseManager.cs +++ b/Common/Securities/UniverseManager.cs @@ -41,7 +41,7 @@ public class UniverseManager : BaseExtendedDictionary - public IReadOnlyDictionary ActiveSecurities => this + public ReadOnlyExtendedDictionary ActiveSecurities => this .SelectMany(ukvp => ukvp.Value.Members.Select(mkvp => mkvp.Value)) .DistinctBy(s => s.Symbol) .ToReadOnlyExtendedDictionary(s => s.Symbol); @@ -153,4 +153,4 @@ protected virtual void OnCollectionChanged(UniverseManagerChanged e) CollectionChanged?.Invoke(this, e); } } -} \ No newline at end of file +} From b4401db512101c5eabc438bafb84389adba9b95a Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Wed, 10 Dec 2025 15:40:46 -0400 Subject: [PATCH 031/103] Refactor ApiClient to use HttpClient (#9114) * Refactor ApiClient to use HttpClient * Minor fix * Refactor and cleanup in ApiConnection * Add normalized extension methods for string and stream json serialization * Minor fixes * Address peer review * Minor fixes * Minor fixes and peer review * Race condition fix * Minor changes * Cleanup * Minor fixes * Minor fix --- Algorithm.Python/ScheduledQueuingAlgorithm.py | 22 +- Algorithm/QCAlgorithm.cs | 8 +- Api/ApiConnection.cs | 195 ++++++++++++++++-- Common/Extensions.cs | 73 +++++++ Tests/Common/Util/ExtensionsTests.cs | 46 +++++ 5 files changed, 308 insertions(+), 36 deletions(-) diff --git a/Algorithm.Python/ScheduledQueuingAlgorithm.py b/Algorithm.Python/ScheduledQueuingAlgorithm.py index fc826a7dfe98..dc1866d847ab 100644 --- a/Algorithm.Python/ScheduledQueuingAlgorithm.py +++ b/Algorithm.Python/ScheduledQueuingAlgorithm.py @@ -20,18 +20,18 @@ def initialize(self) -> None: self.set_start_date(2020, 9, 1) self.set_end_date(2020, 9, 2) self.set_cash(100000) - + self.__number_of_symbols = 2000 self.__number_of_symbols_fine = 1000 self.set_universe_selection(FineFundamentalUniverseSelectionModel(self.coarse_selection_function, self.fine_selection_function, None)) - + self.set_portfolio_construction(EqualWeightingPortfolioConstructionModel()) - + self.set_execution(ImmediateExecutionModel()) - + self._queue = Queue() self._dequeue_size = 100 - + self.add_equity("SPY", Resolution.MINUTE) self.schedule.on(self.date_rules.every_day("SPY"), self.time_rules.at(0, 0), self.fill_queue) self.schedule.on(self.date_rules.every_day("SPY"), self.time_rules.every(timedelta(minutes=60)), self.take_from_queue) @@ -40,22 +40,22 @@ def coarse_selection_function(self, coarse: list[CoarseFundamental]) -> list[Sym has_fundamentals = [security for security in coarse if security.has_fundamental_data] sorted_by_dollar_volume = sorted(has_fundamentals, key=lambda x: x.dollar_volume, reverse=True) return [ x.symbol for x in sorted_by_dollar_volume[:self.__number_of_symbols] ] - + def fine_selection_function(self, fine: list[FineFundamental]) -> list[Symbol]: sorted_by_pe_ratio = sorted(fine, key=lambda x: x.valuation_ratios.pe_ratio, reverse=True) return [ x.symbol for x in sorted_by_pe_ratio[:self.__number_of_symbols_fine] ] - + def fill_queue(self) -> None: - securities = [security for security in self.active_securities.values if security.fundamentals] - + securities = [security for security in self.active_securities.values() if security.fundamentals] + # Fill queue with symbols sorted by PE ratio (decreasing order) self._queue.queue.clear() sorted_by_pe_ratio = sorted(securities, key=lambda x: x.fundamentals.valuation_ratios.pe_ratio, reverse=True) for security in sorted_by_pe_ratio: self._queue.put(security.symbol) - + def take_from_queue(self) -> None: symbols = [self._queue.get() for _ in range(min(self._dequeue_size, self._queue.qsize()))] self.history(symbols, 10, Resolution.DAILY) - + self.log(f"Symbols at {self.time}: {[str(symbol) for symbol in symbols]}") diff --git a/Algorithm/QCAlgorithm.cs b/Algorithm/QCAlgorithm.cs index 6f42e9fa61d4..5831a3db84a1 100644 --- a/Algorithm/QCAlgorithm.cs +++ b/Algorithm/QCAlgorithm.cs @@ -2484,7 +2484,7 @@ public Option AddOptionContract(Symbol symbol, Resolution? resolution = null, bo /// /// The currency pair /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The foreign exchange trading market, . Default value is null and looked up using in + /// The foreign exchange trading market, . Default value is null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true /// The requested leverage for this forex security. Default is set by /// The new security @@ -2499,7 +2499,7 @@ public Forex AddForex(string ticker, Resolution? resolution = null, string marke /// /// The CFD ticker symbol /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The cfd trading market, . Default value is null and looked up using in + /// The cfd trading market, . Default value is null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true /// The requested leverage for this CFD. Default is set by /// The new security @@ -2530,7 +2530,7 @@ public Index AddIndex(string ticker, Resolution? resolution = null, string marke /// /// The crypto ticker symbol/param> /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The The crypto trading market, . Default value is null and looked up using in + /// The The crypto trading market, . Default value is null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true /// The requested leverage for this crypto. Default is set by /// The new security @@ -2545,7 +2545,7 @@ public Crypto AddCrypto(string ticker, Resolution? resolution = null, string mar /// /// The crypto future ticker symbol /// The of market data, Tick, Second, Minute, Hour, or Daily. Default is - /// The The crypto future trading market, . Default value is null and looked up using in + /// The The crypto future trading market, . Default value is null and looked up using in /// If true, returns the last available data even if none in that timeslice. Default is true /// The requested leverage for this crypto future. Default is set by /// The new security diff --git a/Api/ApiConnection.cs b/Api/ApiConnection.cs index b3e9afa5ab91..1554c01a9781 100644 --- a/Api/ApiConnection.cs +++ b/Api/ApiConnection.cs @@ -15,11 +15,15 @@ using System; using RestSharp; -using Newtonsoft.Json; -using QuantConnect.Orders; using QuantConnect.Logging; using System.Threading.Tasks; -using RestSharp.Authenticators; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Collections.Generic; +using QuantConnect.Util; +using System.IO; +using System.Threading; namespace QuantConnect.Api { @@ -28,11 +32,15 @@ namespace QuantConnect.Api /// public class ApiConnection { - private readonly static JsonSerializerSettings _jsonSettings = new() { Converters = { new LiveAlgorithmResultsJsonConverter(), new OrderJsonConverter() } }; + /// + /// Authorized client to use for requests. + /// + private HttpClient _httpClient; /// /// Authorized client to use for requests. /// + [Obsolete("RestSharp is deprecated and will be removed in a future release. Please use the SetClient method or the request methods that take an HttpRequestMessage")] public RestClient Client { get; set; } // Authorization Credentials @@ -46,11 +54,14 @@ public class ApiConnection /// /// User Id number from QuantConnect.com account. Found at www.quantconnect.com/account /// Access token for the QuantConnect account. Found at www.quantconnect.com/account - public ApiConnection(int userId, string token) + /// The client's base address + /// Default headers for the client + /// The client timeout in seconds + public ApiConnection(int userId, string token, string baseUrl = null, Dictionary defaultHeaders = null, int timeout = 0) { _token = token; _userId = userId.ToStringInvariant(); - Client = new RestClient(Globals.Api); + SetClient(!string.IsNullOrEmpty(baseUrl) ? baseUrl : Globals.Api, defaultHeaders, timeout); } /// @@ -60,13 +71,40 @@ public bool Connected { get { - var request = new RestRequest("authenticate", Method.GET); - AuthenticationResponse response; - if (TryRequest(request, out response)) + using var request = new HttpRequestMessage(HttpMethod.Get, "authenticate"); + return TryRequest(request, out AuthenticationResponse response) && response.Success; + } + } + + /// + /// Overrides the current client + /// + /// The client's base address + /// Default headers for the client + /// The client timeout in seconds + public void SetClient(string baseUrl, Dictionary defaultHeaders = null, int timeout = 0) + { + if (_httpClient != null) + { + _httpClient.DisposeSafely(); + } + + _httpClient = new HttpClient() { BaseAddress = new Uri($"{baseUrl.TrimEnd('/')}/") }; + Client = new RestClient(baseUrl); + + if (defaultHeaders != null) + { + foreach (var header in defaultHeaders) { - return response.Success; + _httpClient.DefaultRequestHeaders.Add(header.Key, header.Value); } - return false; + Client.AddDefaultHeaders(defaultHeaders); + } + + if (timeout > 0) + { + _httpClient.Timeout = TimeSpan.FromSeconds(timeout); + Client.Timeout = timeout * 1000; } } @@ -77,6 +115,7 @@ public bool Connected /// /// Result object from the /// T typed object response + [Obsolete("RestSharp is deprecated and will be removed in a future release. Please use the TryRequest(HttpRequestMessage)")] public bool TryRequest(RestRequest request, out T result) where T : RestResponse { @@ -90,7 +129,24 @@ public bool TryRequest(RestRequest request, out T result) /// /// /// + /// Result object from the + /// Timeout for the request /// T typed object response + public bool TryRequest(HttpRequestMessage request, out T result, TimeSpan? timeout = null) + where T : RestResponse + { + var resultTuple = TryRequestAsync(request).SynchronouslyAwaitTaskResult(); + result = resultTuple.Item2; + return resultTuple.Item1; + } + + /// + /// Place a secure request and get back an object of type T. + /// + /// + /// + /// T typed object response + [Obsolete("RestSharp is deprecated and will be removed in a future release. Please use the TryRequestAsync(HttpRequestMessage)")] public async Task> TryRequestAsync(RestRequest request) where T : RestResponse { @@ -116,7 +172,7 @@ public async Task> TryRequestAsync(RestRequest request) } responseContent = restsharpResponse.Content; - result = JsonConvert.DeserializeObject(responseContent, _jsonSettings); + result = responseContent.DeserializeJson(); if (result == null || !result.Success) { @@ -133,10 +189,107 @@ public async Task> TryRequestAsync(RestRequest request) return new Tuple(true, result); } + /// + /// Place a secure request and get back an object of type T. + /// + /// + /// + /// Timeout for the request + /// T typed object response + public async Task> TryRequestAsync(HttpRequestMessage request, TimeSpan? timeout = null) + where T : RestResponse + { + HttpResponseMessage response = null; + Stream responseContentStream = null; + T result = null; + try + { + if (request.RequestUri.OriginalString.StartsWith('/')) + { + request.RequestUri = new Uri(request.RequestUri.ToString().TrimStart('/'), UriKind.Relative); + } + + SetAuthenticator(request); + + // Execute the authenticated REST API Call + if (timeout.HasValue) + { + using var cancellationTokenSource = new CancellationTokenSource(timeout.Value); + response = await _httpClient.SendAsync(request, cancellationTokenSource.Token).ConfigureAwait(false); + responseContentStream = await response.Content.ReadAsStreamAsync(cancellationTokenSource.Token).ConfigureAwait(false); + } + else + { + response = await _httpClient.SendAsync(request).ConfigureAwait(false); + responseContentStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); + } + + result = responseContentStream.DeserializeJson(leaveOpen: true); + + if (!response.IsSuccessStatusCode) + { + Log.Error($"ApiConnect.TryRequest({request.RequestUri}): HTTP Error: {(int)response.StatusCode} {response.ReasonPhrase}. " + + $"Content: {GetRawResponseContent(responseContentStream)}"); + } + if (result == null || !result.Success) + { + if (Log.DebuggingEnabled) + { + Log.Debug($"ApiConnection.TryRequest({request.RequestUri}): Raw response: '{GetRawResponseContent(responseContentStream)}'"); + } + return new Tuple(false, result); + } + } + catch (Exception err) + { + Log.Error($"ApiConnection.TryRequest({request.RequestUri}): Error: {err.Message}, Response content: {GetRawResponseContent(responseContentStream)}"); + return new Tuple(false, null); + } + finally + { + response?.DisposeSafely(); + responseContentStream?.DisposeSafely(); + } + + return new Tuple(true, result); + } + + private static string GetRawResponseContent(Stream stream) + { + if (stream == null) + { + return string.Empty; + } + + try + { + stream.Position = 0; + using var reader = new StreamReader(stream, leaveOpen: true); + return reader.ReadToEnd(); + } + catch (Exception) + { + return string.Empty; + } + } + private void SetAuthenticator(RestRequest request) { - var newTimeStamp = (int)Time.TimeStamp(); + var base64EncodedAuthenticationString = GetAuthenticatorHeader(out var timeStamp); + request.AddHeader("Authorization", $"Basic {base64EncodedAuthenticationString}"); + request.AddHeader("Timestamp", timeStamp); + } + private void SetAuthenticator(HttpRequestMessage request) + { + var base64EncodedAuthenticationString = GetAuthenticatorHeader(out var timeStamp); + _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", base64EncodedAuthenticationString); + request.Headers.Add("Timestamp", timeStamp); + } + + private string GetAuthenticatorHeader(out string timeStamp) + { + var newTimeStamp = (int)Time.TimeStamp(); var currentAuth = _authenticator; if (currentAuth == null || newTimeStamp - currentAuth.TimeStamp > 7000) { @@ -144,25 +297,25 @@ private void SetAuthenticator(RestRequest request) // Add the UTC timestamp to the request header. // Timestamps older than 7200 seconds will not work. var hash = Api.CreateSecureHash(newTimeStamp, _token); - var authenticator = new HttpBasicAuthenticator(_userId, hash); - _authenticator = currentAuth = new LeanAuthenticator(authenticator, newTimeStamp); - - Client.Authenticator = currentAuth.Authenticator; + var authenticationString = $"{_userId}:{hash}"; + var base64EncodedAuthenticationString = Convert.ToBase64String(Encoding.UTF8.GetBytes(authenticationString)); + _authenticator = currentAuth = new LeanAuthenticator(newTimeStamp, base64EncodedAuthenticationString); } - request.AddHeader("Timestamp", currentAuth.TimeStampStr); + timeStamp = currentAuth.TimeStampStr; + return currentAuth.Base64EncodedAuthenticationString; } private class LeanAuthenticator { public int TimeStamp { get; } public string TimeStampStr { get; } - public HttpBasicAuthenticator Authenticator { get; } - public LeanAuthenticator(HttpBasicAuthenticator authenticator, int timeStamp) + public string Base64EncodedAuthenticationString { get; } + public LeanAuthenticator(int timeStamp, string base64EncodedAuthenticationString) { TimeStamp = timeStamp; - Authenticator = authenticator; TimeStampStr = timeStamp.ToStringInvariant(); + Base64EncodedAuthenticationString = base64EncodedAuthenticationString; } } } diff --git a/Common/Extensions.cs b/Common/Extensions.cs index 5d528f236c2e..8b9271273836 100644 --- a/Common/Extensions.cs +++ b/Common/Extensions.cs @@ -60,6 +60,8 @@ using QuantConnect.Statistics; using Newtonsoft.Json.Linq; using QuantConnect.Orders.Fees; +using Newtonsoft.Json.Serialization; +using QuantConnect.Api; namespace QuantConnect { @@ -87,6 +89,22 @@ private static readonly Dictionary PythonActivators /// private static readonly ZoneLocalMappingResolver _mappingResolver = Resolvers.CreateMappingResolver(Resolvers.ReturnLater, Resolvers.ReturnStartOfIntervalAfter); + /// + /// Json converter deserializer for streams + /// + private static readonly JsonSerializer JsonSerializer = new() + { + Converters = { new LiveAlgorithmResultsJsonConverter(), new OrderJsonConverter() }, + ContractResolver = new DefaultContractResolver + { + NamingStrategy = new CamelCaseNamingStrategy + { + ProcessDictionaryKeys = false, + OverrideSpecifiedNames = true + } + } + }; + /// /// The offset span from the market close to liquidate or exercise a security on the delisting date /// @@ -924,6 +942,61 @@ public static byte[] GetBytes(this Stream stream) return memoryStream.ToArray(); } + /// + /// Deserialize a json stream into an object of type T + /// + /// The stream to deserialize + /// The json serializer to use + /// Whether to leave the source stream open + /// The deserialized object + public static T DeserializeJson(this Stream stream, JsonSerializer serializer = null, bool leaveOpen = true) + { + using var streamReader = new StreamReader(stream, leaveOpen: leaveOpen); + using var jsonReader = new JsonTextReader(streamReader); + return (serializer ?? JsonSerializer).Deserialize(jsonReader); + } + + /// + /// Deserialize a json stream into an object of type T + /// + /// The string to deserialize + /// The json serializer to use + /// The deserialized object + public static T DeserializeJson(this string content, JsonSerializer serializer = null) + { + using var stringReader = new StringReader(content); + using var jsonReader = new JsonTextReader(stringReader); + return (serializer ?? JsonSerializer).Deserialize(jsonReader); + } + + /// + /// Serialize an object of type T into a json stream + /// + /// The object to serialize + /// The stream to serialize the object to + /// The json serializer to use + public static void SerializeJsonToStream(this T value, Stream target, JsonSerializer serializer = null) + { + using var writer = new StreamWriter(target, leaveOpen: true); + using var jsonWriter = new JsonTextWriter(writer); + (serializer ?? JsonSerializer).Serialize(jsonWriter, value); + target.Position = 0; + } + + /// + /// Serialize an object of type T into a json stream + /// + /// The object to serialize + /// The json serializer to use + /// The serialized string + public static string SerializeJsonToString(this T value, JsonSerializer serializer = null) + { + using var stringWriter = new StringWriter(); + using var jsonWriter = new JsonTextWriter(stringWriter); + (serializer ?? JsonSerializer).Serialize(jsonWriter, value); + return stringWriter.ToString(); + } + /// /// Extentsion method to clear all items from a thread safe queue /// diff --git a/Tests/Common/Util/ExtensionsTests.cs b/Tests/Common/Util/ExtensionsTests.cs index a4894e46d403..6dce18d7b32d 100644 --- a/Tests/Common/Util/ExtensionsTests.cs +++ b/Tests/Common/Util/ExtensionsTests.cs @@ -2113,6 +2113,52 @@ def get_enum_string(value): } } + private class TestDto + { + public string Name { get; set; } + public DateTime Date { get; set; } + public decimal Amount { get; set; } + } + + [Test] + public void JsonStreamSerializationRoundTrip() + { + var original = new TestDto() + { + Name = "Test", + Date = new DateTime(2024, 1, 1), + Amount = 123.45m + }; + + using var stream = new MemoryStream(); + original.SerializeJsonToStream(stream); + + stream.Seek(0, SeekOrigin.Begin); + var deserialized = stream.DeserializeJson(); + + Assert.AreEqual(original.Name, deserialized.Name); + Assert.AreEqual(original.Date, deserialized.Date); + Assert.AreEqual(original.Amount, deserialized.Amount); + } + + [Test] + public void JsonStringSerializationRoundTrip() + { + var original = new TestDto() + { + Name = "Test", + Date = new DateTime(2024, 1, 1), + Amount = 123.45m + }; + + var jsonString = original.SerializeJsonToString(); + var deserialized = jsonString.DeserializeJson(); + + Assert.AreEqual(original.Name, deserialized.Name); + Assert.AreEqual(original.Date, deserialized.Date); + Assert.AreEqual(original.Amount, deserialized.Amount); + } + private PyObject ConvertToPyObject(object value) { using (Py.GIL()) From 67d19d88d7d1c36e80f095718430a01baf449bb5 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Wed, 10 Dec 2025 16:16:38 -0400 Subject: [PATCH 032/103] Add ApiConnection constructor for backwards compatibility (#9121) --- Api/ApiConnection.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Api/ApiConnection.cs b/Api/ApiConnection.cs index 1554c01a9781..c4319ccdd4a6 100644 --- a/Api/ApiConnection.cs +++ b/Api/ApiConnection.cs @@ -49,6 +49,16 @@ public class ApiConnection private LeanAuthenticator _authenticator; + /// + /// Create a new Api Connection Class. + /// + /// User Id number from QuantConnect.com account. Found at www.quantconnect.com/account + /// Access token for the QuantConnect account. Found at www.quantconnect.com/account + public ApiConnection(int userId, string token) + : this(userId, token, null) + { + } + /// /// Create a new Api Connection Class. /// From 2f23c89307913a21643b58698fc1aa27ef7a6cac Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Wed, 10 Dec 2025 18:18:08 -0300 Subject: [PATCH 033/103] Avoid FF enumerator error warning (#9122) --- .../Enumerators/FillForwardEnumerator.cs | 8 +- Engine/DataFeeds/SubscriptionDataReader.cs | 9 +- .../DataFeeds/SubscriptionDataReaderTests.cs | 99 ++++++++++++------- 3 files changed, 77 insertions(+), 39 deletions(-) diff --git a/Engine/DataFeeds/Enumerators/FillForwardEnumerator.cs b/Engine/DataFeeds/Enumerators/FillForwardEnumerator.cs index 381180dc9d64..c3adc23019d0 100644 --- a/Engine/DataFeeds/Enumerators/FillForwardEnumerator.cs +++ b/Engine/DataFeeds/Enumerators/FillForwardEnumerator.cs @@ -333,7 +333,13 @@ protected virtual bool RequiresFillForwardData(TimeSpan fillForwardResolution, B if (nextEndTimeUtc < previousTimeUtc) { - Log.Error("FillForwardEnumerator received data out of order. Symbol: " + previous.Symbol.ID); + if (_lastPointTracker == null || next.EndTime > _subscriptionStartTime) + { + // in some cases we might emit auxiliary data even before our actual start time, which can happen in some cases during warmup + // where previous was initialized through the last point tracker, this point will be filtered out + // but in any other case though let's log it, shouldn't happen + Log.Error("FillForwardEnumerator received data out of order. Symbol: " + previous.Symbol.ID); + } fillForward = null; return false; } diff --git a/Engine/DataFeeds/SubscriptionDataReader.cs b/Engine/DataFeeds/SubscriptionDataReader.cs index e2e8328324c0..6c84ac875e93 100644 --- a/Engine/DataFeeds/SubscriptionDataReader.cs +++ b/Engine/DataFeeds/SubscriptionDataReader.cs @@ -256,8 +256,13 @@ public void Initialize() _timeKeeper = new DateChangeTimeKeeper(_tradableDatesInDataTimeZone, _config, _exchangeHours, _delistingDate); _timeKeeper.NewExchangeDate += HandleNewTradableDate; - UpdateDataEnumerator(true); - + // we now have the map file associated and the delisting date. In some cases during warm up, + // the non warmup enumerator does not make sense cause the asset got delisted already + _endOfStream = _periodStart.Date > _delistingDate; + if (!_endOfStream) + { + UpdateDataEnumerator(true); + } _initialized = true; } diff --git a/Tests/Engine/DataFeeds/SubscriptionDataReaderTests.cs b/Tests/Engine/DataFeeds/SubscriptionDataReaderTests.cs index e5006459f329..7474292070f5 100644 --- a/Tests/Engine/DataFeeds/SubscriptionDataReaderTests.cs +++ b/Tests/Engine/DataFeeds/SubscriptionDataReaderTests.cs @@ -14,10 +14,6 @@ * */ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; using NUnit.Framework; using QuantConnect.Data; using QuantConnect.Data.Market; @@ -25,6 +21,9 @@ using QuantConnect.Lean.Engine.DataFeeds; using QuantConnect.Securities; using QuantConnect.Util; +using System; +using System.Collections.Generic; +using System.IO; namespace QuantConnect.Tests.Engine.DataFeeds { @@ -48,19 +47,10 @@ public void DoesNotEmitDataBeyondTradableDate(string data, bool shouldEmitSecond var start = new DateTime(2019, 12, 9); var end = new DateTime(2019, 12, 12); - var symbol = Symbols.SPY; - var entry = MarketHoursDatabase.FromDataFolder().GetEntry(symbol.ID.Market, symbol, symbol.SecurityType); - var config = new SubscriptionDataConfig(typeof(TradeBar), - symbol, - dataResolution, - TimeZones.NewYork, - TimeZones.NewYork, - false, - false, - false); - using var testDataCacheProvider = new TestDataCacheProvider() { Data = data}; + var request = GetRequest(typeof(TradeBar), start, end, dataResolution, out var config); + using var testDataCacheProvider = new TestDataCacheProvider() { Data = data }; using var dataReader = new SubscriptionDataReader(config, - new HistoryRequest(config, entry.ExchangeHours, start, end), + request, TestGlobals.MapFileProvider, TestGlobals.FactorFileProvider, testDataCacheProvider, @@ -80,27 +70,8 @@ public void EmitsNewTradableDateWhenDateAfterDelistingIsNonTradable(Type dataTyp var start = new DateTime(2023, 06, 30); var end = new DateTime(2023, 08, 01); - var symbol = Symbol.CreateOption( - Symbols.SPX, - "SPXW", - Market.USA, - OptionStyle.European, - OptionRight.Call, - 4445m, - // Next day is a holiday - new DateTime(2023, 7, 3)); - - var entry = MarketHoursDatabase.FromDataFolder().GetEntry(symbol.ID.Market, symbol, symbol.SecurityType); - var config = new SubscriptionDataConfig(dataType, - symbol, - Resolution.Minute, - entry.DataTimeZone, - entry.ExchangeHours.TimeZone, - false, - false, - false); + var request = GetRequest(dataType, start, end, Resolution.Minute, out var config); using var testDataCacheProvider = new TestDataCacheProvider(); - var request = new HistoryRequest(config, entry.ExchangeHours, start, end); using var dataReader = new SubscriptionDataReader(config, request, TestGlobals.MapFileProvider, @@ -124,6 +95,62 @@ public void EmitsNewTradableDateWhenDateAfterDelistingIsNonTradable(Type dataTyp Assert.AreEqual(expectedLastTradableDate, lastTradableDate); } + [Test] + public void DoesNotYieldDataWhenDelisted() + { + var start = new DateTime(2023, 8, 1); + var end = new DateTime(2023, 08, 10); + + var request = GetRequest(typeof(TradeBar), start, end, Resolution.Minute, out var config); + using var testDataCacheProvider = new TestDataCacheProvider(); + using var dataReader = new SubscriptionDataReader(config, + request, + TestGlobals.MapFileProvider, + TestGlobals.FactorFileProvider, + testDataCacheProvider, + TestGlobals.DataProvider, + null); + + var dataYielded = false; + var newTradableDateCalled = false; + dataReader.NewTradableDate += (sender, args) => + { + newTradableDateCalled = true; + }; + + while (dataReader.MoveNext()) + { + dataYielded = true; + } + + Assert.IsFalse(dataYielded); + Assert.IsFalse(newTradableDateCalled); + } + + private static BaseDataRequest GetRequest(Type dataType, DateTime start, DateTime end, Resolution resolution, out SubscriptionDataConfig config) + { + var symbol = Symbol.CreateOption( + Symbols.SPX, + "SPXW", + Market.USA, + OptionStyle.European, + OptionRight.Call, + 4445m, + // Next day is a holiday + new DateTime(2023, 7, 3)); + + var entry = MarketHoursDatabase.FromDataFolder().GetEntry(symbol.ID.Market, symbol, symbol.SecurityType); + config = new SubscriptionDataConfig(dataType, + symbol, + resolution, + entry.DataTimeZone, + entry.ExchangeHours.TimeZone, + false, + false, + false); + return new HistoryRequest(config, entry.ExchangeHours, start, end); + } + private class TestDataCacheProvider : IDataCacheProvider { private StreamWriter _writer; From c7e96b837d6bcd4621ae7d107f8ebdde86623ad7 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Wed, 10 Dec 2025 18:29:57 -0400 Subject: [PATCH 034/103] Minor fix for json to stream serialization extension (#9123) --- Common/Extensions.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Common/Extensions.cs b/Common/Extensions.cs index 8b9271273836..d896d189acd4 100644 --- a/Common/Extensions.cs +++ b/Common/Extensions.cs @@ -980,6 +980,7 @@ public static void SerializeJsonToStream(this T value, Stream target, JsonSer using var writer = new StreamWriter(target, leaveOpen: true); using var jsonWriter = new JsonTextWriter(writer); (serializer ?? JsonSerializer).Serialize(jsonWriter, value); + jsonWriter.Flush(); target.Position = 0; } From 046df38be84aeb9e6ea2e8f1ed6f3da98be20dfb Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Thu, 11 Dec 2025 13:44:30 -0300 Subject: [PATCH 035/103] Fix log timestamp & minor cleanup (#9124) --- Algorithm/QCAlgorithm.cs | 16 +++++----- Engine/Results/BacktestingResultHandler.cs | 31 ------------------- Engine/Results/BaseResultsHandler.cs | 1 + Engine/Results/LiveTradingResultHandler.cs | 11 ------- Engine/Setup/BrokerageSetupHandler.cs | 2 +- .../Portfolio/SignalExportTargetTests.cs | 10 +++--- .../Securities/Options/OptionSecurityTests.cs | 2 +- 7 files changed, 17 insertions(+), 56 deletions(-) diff --git a/Algorithm/QCAlgorithm.cs b/Algorithm/QCAlgorithm.cs index 5831a3db84a1..4168a94988dc 100644 --- a/Algorithm/QCAlgorithm.cs +++ b/Algorithm/QCAlgorithm.cs @@ -2791,7 +2791,7 @@ public Security AddData(string ticker, SymbolProperties properties, SecurityE public void Debug(string message) { if (!_liveMode && (string.IsNullOrEmpty(message) || _previousDebugMessage == message)) return; - _debugMessages.Enqueue(message); + _debugMessages.Enqueue(FormatLog(message)); _previousDebugMessage = message; } @@ -2841,7 +2841,7 @@ public void Debug(decimal message) public void Log(string message) { if (!_liveMode && string.IsNullOrEmpty(message)) return; - _logMessages.Enqueue(message); + _logMessages.Enqueue(FormatLog(message)); } /// @@ -2890,7 +2890,7 @@ public void Log(decimal message) public void Error(string message) { if (!_liveMode && (string.IsNullOrEmpty(message) || _previousErrorMessage == message)) return; - _errorMessages.Enqueue(message); + _errorMessages.Enqueue(FormatLog(message)); _previousErrorMessage = message; } @@ -2939,10 +2939,7 @@ public void Error(decimal message) [DocumentationAttribute(Logging)] public void Error(Exception error) { - var message = error.Message; - if (!_liveMode && (string.IsNullOrEmpty(message) || _previousErrorMessage == message)) return; - _errorMessages.Enqueue(message); - _previousErrorMessage = message; + Error(error.Message); } /// @@ -3820,5 +3817,10 @@ private DateTime GetTimeInExchangeTimeZone(Symbol symbol) var exchange = MarketHoursDatabase.GetExchangeHours(symbol.ID.Market, symbol, symbol.SecurityType); return UtcTime.ConvertFromUtc(exchange.TimeZone); } + + private string FormatLog(string message) + { + return $"{Time.ToStringInvariant(DateFormat.UI)} {message}"; + } } } diff --git a/Engine/Results/BacktestingResultHandler.cs b/Engine/Results/BacktestingResultHandler.cs index 7d6367682c20..0fedbcde5402 100644 --- a/Engine/Results/BacktestingResultHandler.cs +++ b/Engine/Results/BacktestingResultHandler.cs @@ -417,24 +417,6 @@ public override void SetAlgorithm(IAlgorithm algorithm, decimal startingPortfoli ConfigureConsoleTextWriter(algorithm); } - /// - /// Handles updates to the algorithm's name - /// - /// The new name - public virtual void AlgorithmNameUpdated(string name) - { - Messages.Enqueue(new AlgorithmNameUpdatePacket(AlgorithmId, name)); - } - - /// - /// Sends a packet communicating an update to the algorithm's tags - /// - /// The new tags - public virtual void AlgorithmTagsUpdated(HashSet tags) - { - Messages.Enqueue(new AlgorithmTagsUpdatePacket(AlgorithmId, tags)); - } - /// /// Send a debug message back to the browser console. /// @@ -465,19 +447,6 @@ public virtual void LogMessage(string message) AddToLogStore(message); } - /// - /// Add message to LogStore - /// - /// Message to add - protected override void AddToLogStore(string message) - { - var messageToLog = Algorithm != null - ? Algorithm.Time.ToStringInvariant(DateFormat.UI) + " " + message - : "Algorithm Initialization: " + message; - - base.AddToLogStore(messageToLog); - } - /// /// Send an error message back to the browser highlighted in red with a stacktrace. /// diff --git a/Engine/Results/BaseResultsHandler.cs b/Engine/Results/BaseResultsHandler.cs index dc774d2ab1c0..9073484947b8 100644 --- a/Engine/Results/BaseResultsHandler.cs +++ b/Engine/Results/BaseResultsHandler.cs @@ -1030,6 +1030,7 @@ protected StatisticsResults GenerateStatisticsResults(CapacityEstimate estimated /// String message to store protected virtual void AddToLogStore(string message) { + message = Algorithm != null ? message : $"Algorithm Initialization: {message}"; lock (LogStore) { LogStore.Add(new LogEntry(message)); diff --git a/Engine/Results/LiveTradingResultHandler.cs b/Engine/Results/LiveTradingResultHandler.cs index 71be6dd23c15..39076274e95f 100644 --- a/Engine/Results/LiveTradingResultHandler.cs +++ b/Engine/Results/LiveTradingResultHandler.cs @@ -561,17 +561,6 @@ public void LogMessage(string message) AddToLogStore(message); } - /// - /// Save an algorithm message to the log store. Uses a different timestamped method of adding messaging to interweve debug and logging messages. - /// - /// String message to send to browser. - protected override void AddToLogStore(string message) - { - Log.Debug("LiveTradingResultHandler.AddToLogStore(): Adding"); - base.AddToLogStore(DateTime.Now.ToStringInvariant(DateFormat.UI) + " " + message); - Log.Debug("LiveTradingResultHandler.AddToLogStore(): Finished adding"); - } - /// /// Send an error message back to the browser console and highlight it read. /// diff --git a/Engine/Setup/BrokerageSetupHandler.cs b/Engine/Setup/BrokerageSetupHandler.cs index 7f3db9b91f93..d642c48d459d 100644 --- a/Engine/Setup/BrokerageSetupHandler.cs +++ b/Engine/Setup/BrokerageSetupHandler.cs @@ -218,7 +218,7 @@ public bool Setup(SetupHandlerParameters parameters) Log.Trace($"BrokerageSetupHandler.Setup(): {message}"); - algorithm.Debug(message); + parameters.ResultHandler.DebugMessage(message); if (accountCurrency != null && accountCurrency != algorithm.AccountCurrency) { algorithm.SetAccountCurrency(accountCurrency); diff --git a/Tests/Algorithm/Framework/Portfolio/SignalExportTargetTests.cs b/Tests/Algorithm/Framework/Portfolio/SignalExportTargetTests.cs index 14f7c729cfaf..181ff7f3ab02 100644 --- a/Tests/Algorithm/Framework/Portfolio/SignalExportTargetTests.cs +++ b/Tests/Algorithm/Framework/Portfolio/SignalExportTargetTests.cs @@ -84,9 +84,9 @@ public void Collective2SignalExportManagerDoesNotLogMoreThanOnceWhenUnknownMarke Assert.AreEqual(3, algorithm.DebugMessages.Count); var debugMessages = algorithm.DebugMessages.ToList(); - Assert.AreEqual($"The market of the symbol {Symbols.EURUSD.Value} was unexpected: {Symbols.EURUSD.ID.Market}. Using 'DEFAULT' as market", debugMessages[0]); - Assert.AreEqual($"Warning: Collective2 failed to calculate target quantity for {targetList[0]}. The smallest quantity C2 trades is \"1\" which is a mini-lot (10,000 currency units), and the target quantity is 498. Will return 0 for all similar cases.", debugMessages[1]); - Assert.AreEqual($"The market of the symbol {Symbols.GBPUSD.Value} was unexpected: {Symbols.GBPUSD.ID.Market}. Using 'DEFAULT' as market", debugMessages[2]); + Assert.IsTrue(debugMessages[0].Contains($"The market of the symbol {Symbols.EURUSD.Value} was unexpected: {Symbols.EURUSD.ID.Market}. Using 'DEFAULT' as market", StringComparison.InvariantCultureIgnoreCase)); + Assert.IsTrue(debugMessages[1].Contains($"Warning: Collective2 failed to calculate target quantity for {targetList[0]}. The smallest quantity C2 trades is \"1\" which is a mini-lot (10,000 currency units), and the target quantity is 498. Will return 0 for all similar cases.", StringComparison.InvariantCultureIgnoreCase)); + Assert.IsTrue(debugMessages[2].Contains($"The market of the symbol {Symbols.GBPUSD.Value} was unexpected: {Symbols.GBPUSD.ID.Market}. Using 'DEFAULT' as market", StringComparison.InvariantCultureIgnoreCase)); } [Test] @@ -113,8 +113,8 @@ public void Collective2SignalExportManagerDoesNotLogMoreThanOnceWhenUnknownSecur Assert.AreEqual(2, algorithm.DebugMessages.Count); var debugMessages = algorithm.DebugMessages.ToList(); - Assert.AreEqual($"Unexpected security type found: {security.Symbol.SecurityType}. Collective2 just accepts: Equity, Future, Option, Index Option and Stock", debugMessages[0]); - Assert.AreEqual($"Unexpected security type found: {security2.Symbol.SecurityType}. Collective2 just accepts: Equity, Future, Option, Index Option and Stock", debugMessages[1]); + Assert.IsTrue(debugMessages[0].Contains($"Unexpected security type found: {security.Symbol.SecurityType}. Collective2 just accepts: Equity, Future, Option, Index Option and Stock", StringComparison.InvariantCultureIgnoreCase)); + Assert.IsTrue(debugMessages[1].Contains($"Unexpected security type found: {security2.Symbol.SecurityType}. Collective2 just accepts: Equity, Future, Option, Index Option and Stock", StringComparison.InvariantCultureIgnoreCase)); } [Test] diff --git a/Tests/Common/Securities/Options/OptionSecurityTests.cs b/Tests/Common/Securities/Options/OptionSecurityTests.cs index 7974acf0f915..1df74213315d 100644 --- a/Tests/Common/Securities/Options/OptionSecurityTests.cs +++ b/Tests/Common/Securities/Options/OptionSecurityTests.cs @@ -118,7 +118,7 @@ public void AlgorithmSendsOneTimeWarningAboutOptionModelsConsistency( parameter.ExpectedFinalStatus, returnLogs: true); - Assert.IsTrue(result.Logs.Any(message => message.Contains("Debug: Warning: Security ") && + Assert.IsTrue(result.Logs.Any(message => message.Contains("Warning: Security ") && message.EndsWith("To avoid this, consider using a security initializer to set the right models to each security type according to your algorithm's requirements."))); } } From 6cba915950ec56b62467b87b2c878ed6bd46181c Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Thu, 11 Dec 2025 14:13:37 -0400 Subject: [PATCH 036/103] Fix minor bug with restsharp auth header (#9125) * Fix minor bug with restsharp auth header * Minor fix --- Api/ApiConnection.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Api/ApiConnection.cs b/Api/ApiConnection.cs index c4319ccdd4a6..a02c025f2c4e 100644 --- a/Api/ApiConnection.cs +++ b/Api/ApiConnection.cs @@ -286,12 +286,15 @@ private static string GetRawResponseContent(Stream stream) private void SetAuthenticator(RestRequest request) { var base64EncodedAuthenticationString = GetAuthenticatorHeader(out var timeStamp); - request.AddHeader("Authorization", $"Basic {base64EncodedAuthenticationString}"); - request.AddHeader("Timestamp", timeStamp); + request.AddOrUpdateHeader("Authorization", $"Basic {base64EncodedAuthenticationString}"); + request.AddOrUpdateHeader("Timestamp", timeStamp); } private void SetAuthenticator(HttpRequestMessage request) { + request.Headers.Remove("Authorization"); + request.Headers.Remove("Timestamp"); + var base64EncodedAuthenticationString = GetAuthenticatorHeader(out var timeStamp); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", base64EncodedAuthenticationString); request.Headers.Add("Timestamp", timeStamp); From 3483fee766a498afe8a3675ee11714ed816e6031 Mon Sep 17 00:00:00 2001 From: Jared Date: Thu, 11 Dec 2025 13:14:22 -0500 Subject: [PATCH 037/103] Remove debug message for daily precise end time (#9126) Removed debug message regarding daily precise end times. --- Algorithm/QCAlgorithm.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Algorithm/QCAlgorithm.cs b/Algorithm/QCAlgorithm.cs index 4168a94988dc..7c383f0c072d 100644 --- a/Algorithm/QCAlgorithm.cs +++ b/Algorithm/QCAlgorithm.cs @@ -840,11 +840,6 @@ public virtual void PostInitialize() SetFinishedWarmingUp(); } - if (Settings.DailyPreciseEndTime) - { - Debug("Accurate daily end-times now enabled by default. See more at https://qnt.co/3YHaWHL. To disable it and use legacy daily bars set self.settings.daily_precise_end_time = False."); - } - // perform end of time step checks, such as enforcing underlying securities are in raw data mode OnEndOfTimeStep(); } From e395892b8e0305112313e45d0072dfd53215ce7b Mon Sep 17 00:00:00 2001 From: Derek Melchin <38889814+DerekMelchin@users.noreply.github.com> Date: Thu, 11 Dec 2025 11:15:17 -0700 Subject: [PATCH 038/103] Fix camelCase constructor args (#9127) --- .../Selection/FundamentalUniverseSelectionModel.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Algorithm.Framework/Selection/FundamentalUniverseSelectionModel.py b/Algorithm.Framework/Selection/FundamentalUniverseSelectionModel.py index daa9ac734346..47ba76f32071 100644 --- a/Algorithm.Framework/Selection/FundamentalUniverseSelectionModel.py +++ b/Algorithm.Framework/Selection/FundamentalUniverseSelectionModel.py @@ -17,19 +17,19 @@ class FundamentalUniverseSelectionModel: '''Provides a base class for defining equity coarse/fine fundamental selection models''' def __init__(self, - filterFineData = None, - universeSettings = None): + filter_fine_data = None, + universe_settings = None): '''Initializes a new instance of the FundamentalUniverseSelectionModel class Args: - filterFineData: [Obsolete] Fine and Coarse selection are merged - universeSettings: The settings used when adding symbols to the algorithm, specify null to use algorithm.UniverseSettings''' - self.filter_fine_data = filterFineData + filter_fine_data: [Obsolete] Fine and Coarse selection are merged + universeSettings: The settings used when adding symbols to the algorithm, specify null to use algorithm.universe_settings''' + self.filter_fine_data = filter_fine_data if self.filter_fine_data == None: self.fundamental_data = True else: self.fundamental_data = False self.market = Market.USA - self.universe_settings = universeSettings + self.universe_settings = universe_settings def create_universes(self, algorithm: QCAlgorithm) -> list[Universe]: From e568162bffe317311440dfa2748f3c23195b78bd Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Mon, 15 Dec 2025 10:25:00 -0300 Subject: [PATCH 039/103] Minor slice.AllData api change (#9130) --- Common/Data/Slice.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Common/Data/Slice.cs b/Common/Data/Slice.cs index d7009e3342f4..18c5a3ade2fb 100644 --- a/Common/Data/Slice.cs +++ b/Common/Data/Slice.cs @@ -54,7 +54,7 @@ public class Slice : ExtendedDictionary, IEnumerable /// All the data hold in this slice /// - public List AllData { get; private set; } + public IEnumerable AllData { get; private set; } /// /// Gets the timestamp for this slice of data @@ -571,19 +571,21 @@ public void MergeSlice(Slice inputSlice) _symbolChangedEvents = (SymbolChangedEvents)UpdateCollection(_symbolChangedEvents, inputSlice.SymbolChangedEvents); _marginInterestRates = (MarginInterestRates)UpdateCollection(_marginInterestRates, inputSlice.MarginInterestRates); - if (inputSlice.AllData.Count != 0) + var ourDataList = (List)AllData; + var othersDataList = (List)inputSlice.AllData; + if (othersDataList.Count != 0) { - if (AllData.Count == 0) + if (ourDataList.Count == 0) { - AllData = inputSlice.AllData; + AllData = othersDataList; _data = inputSlice._data; } else { // Should keep this._rawDataList last so that selected data points are not overriden // while creating _data - inputSlice.AllData.AddRange(AllData); - AllData = inputSlice.AllData; + othersDataList.AddRange(ourDataList); + AllData = othersDataList; _data = new Lazy>(() => CreateDynamicDataDictionary(AllData)); } } From 03be232f31ac897addd54f739c61305e3e413c8d Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Mon, 15 Dec 2025 16:24:11 -0500 Subject: [PATCH 040/103] Fix issues with IgnoresInsightsWithInvalidMagnitudeValue tests (#9131) --- ...manOptimizationPortfolioConstructionModelTests.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Tests/Algorithm/Framework/Portfolio/BlackLittermanOptimizationPortfolioConstructionModelTests.cs b/Tests/Algorithm/Framework/Portfolio/BlackLittermanOptimizationPortfolioConstructionModelTests.cs index 960313b7a025..e90c01dc53da 100644 --- a/Tests/Algorithm/Framework/Portfolio/BlackLittermanOptimizationPortfolioConstructionModelTests.cs +++ b/Tests/Algorithm/Framework/Portfolio/BlackLittermanOptimizationPortfolioConstructionModelTests.cs @@ -155,7 +155,7 @@ public void TwoViewsTest(Language language) outdatedInsight.GeneratedTimeUtc -= TimeSpan.FromHours(1); outdatedInsight.CloseTimeUtc -= TimeSpan.FromHours(1); - var insights = _view1Insights.Concat(_view2Insights).Concat(new[] {outdatedInsight}); + var insights = _view1Insights.Concat(_view2Insights).Concat(new[] { outdatedInsight }); var actualTargets = _algorithm.PortfolioConstruction.CreateTargets(_algorithm, insights.ToArray()); Assert.AreEqual(expectedTargets.Length, actualTargets.Count()); @@ -187,7 +187,7 @@ public void OneViewDimensionTest(Language language) return; } - + using (Py.GIL()) { var name = nameof(BLOPCM); @@ -221,7 +221,7 @@ public void TwoViewsDimensionTest(Language language) return; } - + using (Py.GIL()) { var name = nameof(BLOPCM); @@ -269,7 +269,7 @@ public void IgnoresInsightsWithInvalidMagnitudeValue(Language language, double m GetInsight("View 1", "UK" , magnitude), GetInsight("View 1", "USA", magnitude) }; - + var actualTargets = _algorithm.PortfolioConstruction.CreateTargets(_algorithm, insights); if (expectZero) @@ -466,7 +466,7 @@ def GetSymbol(ticker): class BLOPCM(BlackLittermanOptimizationPortfolioConstructionModel): def __init__(self, portfolioBias): - super().__init__(portfolioBias = portfolioBias, optimizer = UnconstrainedMeanVariancePortfolioOptimizer()) + super().__init__(portfolio_bias = portfolioBias, optimizer = UnconstrainedMeanVariancePortfolioOptimizer()) def get_equilibrium_return(self, returns): @@ -489,7 +489,7 @@ def get_equilibrium_return(self, returns): return weq.dot(V * delta), pd.DataFrame(V, columns=assets, index=assets) - def OnSecuritiesChanged(self, algorithm, changes): + def on_securities_changed(self, algorithm, changes): pass"; } From 84ee81b35b5def5e51e35c3c9d319ab266969d04 Mon Sep 17 00:00:00 2001 From: Aibek Minbaev <71759007+AibekMinbaev@users.noreply.github.com> Date: Wed, 17 Dec 2025 01:42:23 +0900 Subject: [PATCH 041/103] Feat 8909 add python env support in report generation (#9128) * Added python-venv to ReportArgumentParser, getting python-venv in Program class * Added venv activation and python initialization to Report class * Resolve review comments. Move python init and env addition to Report/Program.cs --- Configuration/ReportArgumentParser.cs | 1 + Report/Program.cs | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/Configuration/ReportArgumentParser.cs b/Configuration/ReportArgumentParser.cs index 5d4622344baf..7ec477d2e6ee 100644 --- a/Configuration/ReportArgumentParser.cs +++ b/Configuration/ReportArgumentParser.cs @@ -42,6 +42,7 @@ public static class ReportArgumentParser new CommandLineOption("report-destination", CommandOptionType.SingleValue, "Destination of processed report file"), new CommandLineOption("report-css-override-file", CommandOptionType.SingleValue, "CSS override source file"), new CommandLineOption("report-html-custom-file", CommandOptionType.SingleValue, "Custom HTML source file"), + new CommandLineOption("python-venv", CommandOptionType.SingleValue, "Python virtual environment path"), }; /// diff --git a/Report/Program.cs b/Report/Program.cs index 25c67096d802..613078cfb2ba 100644 --- a/Report/Program.cs +++ b/Report/Program.cs @@ -23,6 +23,7 @@ using QuantConnect.Lean.Engine; using System.Collections.Generic; using QuantConnect.Configuration; +using QuantConnect.Python; namespace QuantConnect.Report { @@ -50,6 +51,13 @@ static void Main(string[] args) var reportFormat = Config.Get("report-format"); var cssOverrideFile = Config.Get("report-css-override-file", "css/report_override.css"); var htmlCustomFile = Config.Get("report-html-custom-file", "template.html"); + var pythonVirtualEnvironment = Config.Get("python-venv"); + + // Activate virtual environment if defined + PythonInitializer.ActivatePythonVirtualEnvironment(pythonVirtualEnvironment); + + // Initialize and add our Paths + PythonInitializer.Initialize(); // Parse content from source files into result objects Log.Trace($"QuantConnect.Report.Main(): Parsing source files...{backtestDataFile}, {liveDataFile}"); From ead8335c84e304cd865b3cc944f97cb6d0745b04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Nem=C4=8Dek?= Date: Tue, 16 Dec 2025 18:24:00 +0100 Subject: [PATCH 042/103] #8356 Implemention of NHNL indicators (#9109) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * #8356 Implemented NHNL indicators * #8356 Formatting cleanup * #8356 Review changes * #8356 use of var * #8356 Refactoring of tests classes --------- Co-authored-by: Martin Nemček --- Algorithm/QCAlgorithm.Indicators.cs | 46 +- Indicators/NewHighsNewLows.cs | 340 ++++++++ Indicators/NewHighsNewLowsVolume.cs | 76 ++ .../NewHighsNewLowsDifferenceTests.cs | 245 ++++++ Tests/Indicators/NewHighsNewLowsRatioTests.cs | 246 ++++++ Tests/Indicators/NewHighsNewLowsTestsBase.cs | 166 ++++ .../NewHighsNewLowsVolumeRatioTests.cs | 255 ++++++ Tests/QuantConnect.Tests.csproj | 3 + Tests/TestData/nhnl_data.csv | 757 ++++++++++++++++++ 9 files changed, 2133 insertions(+), 1 deletion(-) create mode 100644 Indicators/NewHighsNewLows.cs create mode 100644 Indicators/NewHighsNewLowsVolume.cs create mode 100644 Tests/Indicators/NewHighsNewLowsDifferenceTests.cs create mode 100644 Tests/Indicators/NewHighsNewLowsRatioTests.cs create mode 100644 Tests/Indicators/NewHighsNewLowsTestsBase.cs create mode 100644 Tests/Indicators/NewHighsNewLowsVolumeRatioTests.cs create mode 100644 Tests/TestData/nhnl_data.csv diff --git a/Algorithm/QCAlgorithm.Indicators.cs b/Algorithm/QCAlgorithm.Indicators.cs index cb822fede225..a00526d5bf45 100644 --- a/Algorithm/QCAlgorithm.Indicators.cs +++ b/Algorithm/QCAlgorithm.Indicators.cs @@ -1691,6 +1691,50 @@ public NormalizedAverageTrueRange NATR(Symbol symbol, int period, Resolution? re return normalizedAverageTrueRange; } + /// + /// Creates a new New Highs - New Lows indicator + /// + /// The symbols whose NHNL we want + /// The period over which to compute the NHNL + /// The resolution + /// Selects a value from the BaseData to send into the indicator, if null defaults to casting the input value to a IBaseDataBar + /// The NewHighsNewLows indicator for the requested symbols over the specified period + [DocumentationAttribute(Indicators)] + public NewHighsNewLows NHNL(IEnumerable symbols, int period, Resolution? resolution = null, Func selector = null) + { + var name = CreateIndicatorName(QuantConnect.Symbol.None, $"NH/NL({period})", resolution ?? GetSubscription(symbols.First()).Resolution); + var nhnlDifference = new NewHighsNewLows(name, period); + foreach (var symbol in symbols) + { + nhnlDifference.Add(symbol); + } + InitializeIndicator(nhnlDifference, resolution, selector, symbols.ToArray()); + + return nhnlDifference; + } + + /// + /// Creates a new New Highs - New Lows Volume indicator + /// + /// The symbols whose NHNLV we want + /// The period over which to compute the NHNLV + /// The resolution + /// Selects a value from the BaseData to send into the indicator, if null defaults to casting the input value to a TradeBar + /// The NewHighsNewLowsVolume indicator for the requested symbols over the specified period + [DocumentationAttribute(Indicators)] + public NewHighsNewLowsVolume NHNLV(IEnumerable symbols, int period, Resolution? resolution = null, Func selector = null) + { + var name = CreateIndicatorName(QuantConnect.Symbol.None, $"NH/NL Volume({period})", resolution ?? GetSubscription(symbols.First()).Resolution); + var nhnlVolume = new NewHighsNewLowsVolume(name, period); + foreach (var symbol in symbols) + { + nhnlVolume.Add(symbol); + } + InitializeIndicator(nhnlVolume, resolution, selector, symbols.ToArray()); + + return nhnlVolume; + } + /// /// Creates a new On Balance Volume indicator. This will compute the cumulative total volume /// based on whether the close price being higher or lower than the previous period. @@ -2215,7 +2259,7 @@ public TargetDownsideDeviation TDD(Symbol symbol, int period, double minimumAcce return targetDownsideDeviation; } - + /// /// Creates a new TomDemark Sequential candlestick indicator for the symbol. The indicator will be automatically /// updated on the symbol's subscription resolution. diff --git a/Indicators/NewHighsNewLows.cs b/Indicators/NewHighsNewLows.cs new file mode 100644 index 000000000000..5c69fc4e182c --- /dev/null +++ b/Indicators/NewHighsNewLows.cs @@ -0,0 +1,340 @@ +/* + * 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.Data.Market; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace QuantConnect.Indicators +{ + /// + /// The NewHighsNewLows is a New Highs / New Lows indicator that accepts IBaseDataBar data as its input. + /// + /// This type is more of a shim/typedef to reduce the need to refer to things as NewHighsNewLows<IBaseDataBar> + /// + public class NewHighsNewLows : NewHighsNewLows + { + /// + /// Initializes a new instance of the class + /// + public NewHighsNewLows(string name, int period) : base(name, period) + { + } + } + + /// + /// The New Highs - New Lows indicator displays the daily difference or ratio between + /// the number of assets reaching new highs and the number of stocks reaching new lows + /// in defined time period. + /// + public abstract class NewHighsNewLows : IndicatorBase, IIndicatorWarmUpPeriodProvider + where T : class, IBaseDataBar + { + private readonly TrackedAssets _trackedAssets; + private readonly int _period; + + private DateTime? _currentPeriodTime; + + /// + /// Difference between the number of assets reaching new highs and the number of assets + /// reaching new lows in defined time period. + /// + public IndicatorBase Difference { get; } + + /// + /// Ratio between the number of assets reaching new highs and the number of assets + /// reaching new lows in defined time period. + /// + public IndicatorBase Ratio { get; } + + /// + /// List of assets that reached new high + /// + protected ICollection NewHighs { get; private set; } = []; + + /// + /// List of assets that reached new high + /// + protected ICollection NewLows { get; private set; } = []; + + /// + /// Initializes a new instance of the class + /// + protected NewHighsNewLows(string name, int period) : base(name) + { + _period = period; + _trackedAssets = new TrackedAssets(period); + + Difference = new FunctionalIndicator( + $"{name}_Difference", + (input) => + { + return NewHighs.Count - NewLows.Count; + }, + _ => IsReady); + + Ratio = new FunctionalIndicator( + $"{name}_Ratio", + (input) => + { + return NewLows.Count == 0m ? NewHighs.Count : (decimal)NewHighs.Count / NewLows.Count; + }, + _ => IsReady); + } + + /// + /// Add tracking asset issue + /// + /// tracking asset issue + public virtual void Add(Symbol asset) + { + _trackedAssets.Add(asset); + } + + /// + /// Remove tracking asset issue + /// + /// tracking asset issue + public virtual void Remove(Symbol asset) + { + _trackedAssets.Remove(asset); + } + + /// + /// Gets a flag indicating when this indicator is ready and fully initialized + /// + public override bool IsReady => HasSufficientPreviousDataForComputation(); + + /// + /// Resets this indicator to its initial state + /// + public override void Reset() + { + _trackedAssets.Reset(); + + _currentPeriodTime = null; + + Difference.Reset(); + Ratio.Reset(); + + base.Reset(); + } + + /// + /// Required period, in data points, for the indicator to be ready and fully initialized. + /// + public int WarmUpPeriod => _period + 1; + + /// + /// Computes the next value of this indicator from the given state + /// + /// The input given to the indicator + /// A new value for this indicator + protected override decimal ComputeNextValue(T input) + { + NewHighs.Clear(); + NewLows.Clear(); + + foreach (TrackedAsset asset in _trackedAssets) + { + if (asset.CurrentPeriodValue.High > asset.RollingPreviousHigh.Current.Value) + { + NewHighs.Add(asset.CurrentPeriodValue); + } + + if (asset.CurrentPeriodValue.Low < asset.RollingPreviousLow.Current.Value) + { + NewLows.Add(asset.CurrentPeriodValue); + } + } + + Difference.Update(input); + Ratio.Update(input); + + return Difference.Current.Value; + } + + /// + /// Computes the next value of this indicator from the given state + /// + /// The input given to the indicator + /// A new value for this indicator + protected override IndicatorResult ValidateAndComputeNextValue(T input) + { + Enqueue(input); + + if (HasMissingCurrentPeriodValue() || !HasSufficientPreviousDataForComputation()) + { + return new IndicatorResult(0, IndicatorStatus.ValueNotReady); + } + + var vNext = ComputeNextValue(input); + return new IndicatorResult(vNext); + } + + private void Enqueue(T input) + { + TrackedAsset trackedAsset; + + // In case of unordered input + if (input.EndTime == _currentPeriodTime) + { + // Update the previous values in rolling window + if (_trackedAssets.TryGetAsset(input.Symbol, out trackedAsset)) + { + UpdatePreviousValues(trackedAsset, input); + } + return; + } + + // In case of new period + if (input.Time > _currentPeriodTime) + { + foreach (TrackedAsset asset in _trackedAssets) + { + // We got new period and therefore we need to update + // the previous value in rolling window so we can use them for calculation + UpdatePreviousValues(asset, asset.CurrentPeriodValue); + asset.CurrentPeriodValue = default; + } + _currentPeriodTime = input.Time; + } + + if (_trackedAssets.TryGetAsset(input.Symbol, out trackedAsset) + && (!_currentPeriodTime.HasValue || input.Time == _currentPeriodTime)) + { + trackedAsset.CurrentPeriodValue = input; + + if (!_currentPeriodTime.HasValue) + { + _currentPeriodTime = input.Time; + } + } + } + + private bool HasMissingCurrentPeriodValue() + { + return _trackedAssets.Any(x => x.CurrentPeriodValue == null); + } + + private bool HasSufficientPreviousDataForComputation() + { + return _trackedAssets.All(asset => + asset.RollingPreviousHigh.IsReady + && asset.RollingPreviousLow.IsReady); + } + + private void UpdatePreviousValues(TrackedAsset asset, IBaseDataBar bar) + { + if (bar == null) + { + return; + } + + asset.RollingPreviousHigh.Update(_currentPeriodTime.Value, bar.High); + asset.RollingPreviousLow.Update(_currentPeriodTime.Value, bar.Low); + } + + /// + /// Assets tracked by NewHighsNewLows indicator + /// + private class TrackedAssets : IEnumerable + { + private readonly int _period; + + private readonly IDictionary _assets = new Dictionary(); + + public TrackedAssets(int period) + { + _period = period; + } + + /// + /// Add tracking asset issue + /// + /// tracking asset issue + public void Add(Symbol asset) + { + if (!_assets.ContainsKey(asset.ID)) + { + _assets.Add(asset.ID, new TrackedAsset(_period)); + } + } + + /// + /// Remove tracking asset issue + /// + /// tracking asset issue + public void Remove(Symbol asset) + { + _assets.Remove(asset.ID); + } + + /// + /// Resets tracked assets to its initial state + /// + public void Reset() + { + foreach (TrackedAsset asset in this) + { + asset.Reset(); + } + } + + public bool TryGetAsset(Symbol asset, out TrackedAsset trackedAsset) + { + return _assets.TryGetValue(asset.ID, out trackedAsset); + } + + public IEnumerator GetEnumerator() + { + return _assets.Values.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } + + /// + /// Asset tracked by NewHighsNewLows indicator + /// + private class TrackedAsset + { + public T CurrentPeriodValue { get; set; } + public Maximum RollingPreviousHigh { get; init; } + public Minimum RollingPreviousLow { get; init; } + + public TrackedAsset(int period) + { + CurrentPeriodValue = default; + RollingPreviousHigh = new Maximum(period); + RollingPreviousLow = new Minimum(period); + } + /// + /// Resets tracked asset to its initial state + /// + public void Reset() + { + CurrentPeriodValue = default; + RollingPreviousHigh.Reset(); + RollingPreviousLow.Reset(); + } + } + } +} diff --git a/Indicators/NewHighsNewLowsVolume.cs b/Indicators/NewHighsNewLowsVolume.cs new file mode 100644 index 000000000000..f3ade71e16d8 --- /dev/null +++ b/Indicators/NewHighsNewLowsVolume.cs @@ -0,0 +1,76 @@ +/* + * 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.Data.Market; +using System.Linq; + +namespace QuantConnect.Indicators +{ + /// + /// The New Highs - New Lows Volume Ratio is a Breadth indicator calculated as ratio of + /// summary volume of stocks reaching new high to summary volume of stocks reaching new + /// low compared to high and low values in defined time period. + /// + public class NewHighsNewLowsVolume : NewHighsNewLows + { + /// + /// Volume ratio between the number of assets reaching new highs and the number of assets + /// reaching new lows in defined time period. + /// + public IndicatorBase VolumeRatio { get; } + + /// + /// Initializes a new instance of the class + /// + public NewHighsNewLowsVolume(string name, int period) + : base(name, period) + { + VolumeRatio = new FunctionalIndicator( + $"{name}_VolumeRatio", + (input) => + { + decimal newHighsVolume = NewHighs.Sum(x => x.Volume); + decimal newLowsVolume = NewLows.Sum(x => x.Volume); + + return newLowsVolume == 0m ? newHighsVolume : newHighsVolume / newLowsVolume; + }, + _ => IsReady); + } + + /// + /// Computes the next value of this indicator from the given state + /// + /// The input given to the indicator + /// A new value for this indicator + protected override decimal ComputeNextValue(TradeBar input) + { + var nextValue = base.ComputeNextValue(input); + + VolumeRatio.Update(input); + + return VolumeRatio.Current.Value; + } + + /// + /// Resets tracked assets to its initial state + /// + public override void Reset() + { + VolumeRatio.Reset(); + + base.Reset(); + } + } +} diff --git a/Tests/Indicators/NewHighsNewLowsDifferenceTests.cs b/Tests/Indicators/NewHighsNewLowsDifferenceTests.cs new file mode 100644 index 000000000000..1fc40a4fc100 --- /dev/null +++ b/Tests/Indicators/NewHighsNewLowsDifferenceTests.cs @@ -0,0 +1,245 @@ +/* + * 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 NUnit.Framework; +using QuantConnect.Data.Market; +using QuantConnect.Indicators; +using System; + +namespace QuantConnect.Tests.Indicators +{ + [TestFixture] + public class NewHighsNewLowsDifferenceTests : NewHighsNewLowsTestsBase + { + protected override NewHighsNewLows CreateNewHighsNewLowsIndicator() + { + // For test purposes we use period of two + return new NewHighsNewLows("test_name", 2); + } + + protected override IndicatorBase GetSubIndicator(IndicatorBase mainIndicator) + { + return (mainIndicator as NewHighsNewLows).Difference; + } + + [Test] + public virtual void ShouldIgnoreRemovedStocks() + { + var indicator = CreateIndicator() as NewHighsNewLows; + var reference = DateTime.Today; + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + + // value is not ready yet + Assert.AreEqual(0m, indicator.Difference.Current.Value); + + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 0.5m, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.3m, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.2m, Time = reference.AddMinutes(3) }); + + Assert.AreEqual(-3m, indicator.Difference.Current.Value); + + indicator.Reset(); + indicator.Remove(Symbols.GOOG); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + + // value is not ready yet + Assert.AreEqual(0m, indicator.Difference.Current.Value); + + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 0.5m, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.3m, Time = reference.AddMinutes(3) }); + // new low (ignored) + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.2m, Time = reference.AddMinutes(3) }); + + Assert.AreEqual(-2m, indicator.Difference.Current.Value); + } + + [Test] + public virtual void IgnorePeriodIfAnyStockMissed() + { + var indicator = CreateIndicator() as NewHighsNewLows; + indicator.Add(Symbols.MSFT); + var reference = DateTime.Today; + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + + // value is not ready yet + Assert.AreEqual(0m, indicator.Difference.Current.Value); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.5m, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, Close = 3, Low = 1, Time = reference.AddMinutes(3) }); + + Assert.AreEqual(0m, indicator.Difference.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 4, Low = 1, Time = reference.AddMinutes(4) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.3m, Time = reference.AddMinutes(4) }); + // no change + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Time = reference.AddMinutes(4) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 4, Low = 1, Time = reference.AddMinutes(4) }); + + Assert.AreEqual(1m, indicator.Difference.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 5, Low = 1, Time = reference.AddMinutes(5) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.2m, Time = reference.AddMinutes(5) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 4, Low = 1, Time = reference.AddMinutes(5) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 5, Low = 1, Time = reference.AddMinutes(5) }); + + Assert.AreEqual(2m, indicator.Difference.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 6, Low = 1, Time = reference.AddMinutes(6) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 3, Low = 1, Time = reference.AddMinutes(6) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 6, Low = 1, Time = reference.AddMinutes(6) }); + + Assert.AreEqual(2m, indicator.Difference.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 7, Low = 1, Time = reference.AddMinutes(7) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 5, Low = 1, Time = reference.AddMinutes(7) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 7, Low = 1, Time = reference.AddMinutes(7) }); + + Assert.AreEqual(2m, indicator.Difference.Current.Value); + } + + [Test] + public override void WarmsUpProperly() + { + var indicator = CreateIndicator() as NewHighsNewLows; + var reference = DateTime.Today; + + // setup period (unordered) + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 0.5m, Low = 0.2m, Time = reference.AddMinutes(2) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Time = reference.AddMinutes(2) }); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 0.75m, Low = 0.1m, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 5, Low = 2, Time = reference.AddMinutes(3) }); + + Assert.IsTrue(indicator.IsReady); + Assert.AreEqual(1m, indicator.Difference.Current.Value); + Assert.AreEqual(9, indicator.Samples); + Assert.AreEqual(1, indicator.Difference.Samples); + } + + [Test] + public virtual void WarmsUpOrdered() + { + var indicator = CreateIndicator() as NewHighsNewLows; + var reference = DateTime.Today; + + // setup period (ordered) + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 0.5m, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Time = reference.AddMinutes(2) }); + + // indicator is not ready yet + Assert.IsFalse(indicator.IsReady); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 4, Low = 1, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 5, Low = 1, Time = reference.AddMinutes(3) }); + + Assert.IsTrue(indicator.IsReady); + Assert.AreEqual(3m, indicator.Difference.Current.Value); + } + + [Test] + public override void IndicatorShouldHaveSymbolAfterUpdates() + { + var indicator = CreateIndicator() as NewHighsNewLows; + var reference = DateTime.Today; + + for (int i = 0; i < 10; i++) + { + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Volume = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Volume = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Volume = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Volume = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.5m, Volume = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Volume = 1, Time = reference.AddMinutes(2) }); + + // indicator is not ready yet + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Volume = 1, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.3m, Volume = 1, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 4, Low = 1, Volume = 1, Time = reference.AddMinutes(3) }); + + // indicator is ready + + // The last update used Symbol.GOOG, so the indicator's current Symbol should be GOOG + Assert.AreEqual(Symbols.GOOG, indicator.Difference.Current.Symbol); + } + } + + protected override string TestFileName => "nhnl_data.csv"; + + protected override string TestColumnName => "NH/NL Difference"; + } +} diff --git a/Tests/Indicators/NewHighsNewLowsRatioTests.cs b/Tests/Indicators/NewHighsNewLowsRatioTests.cs new file mode 100644 index 000000000000..7d1816d8dcb2 --- /dev/null +++ b/Tests/Indicators/NewHighsNewLowsRatioTests.cs @@ -0,0 +1,246 @@ +/* + * 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 NUnit.Framework; +using QuantConnect.Data.Market; +using QuantConnect.Indicators; +using System; + +namespace QuantConnect.Tests.Indicators +{ + [TestFixture] + public class NewHighsNewLowsRatioTests : NewHighsNewLowsTestsBase + { + protected override NewHighsNewLows CreateNewHighsNewLowsIndicator() + { + // For test purposes we use period of two + return new NewHighsNewLows("test_name", 2); + } + + protected override IndicatorBase GetSubIndicator(IndicatorBase mainIndicator) + { + // we need to use the Ratio sub-indicator + return (mainIndicator as NewHighsNewLows).Ratio; + } + + [Test] + public void ShouldIgnoreRemovedStocks() + { + var indicator = (NewHighsNewLows)CreateIndicator(); + var reference = DateTime.Today; + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + + // value is not ready yet + Assert.AreEqual(0m, indicator.Ratio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 0.9m, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.3m, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.2m, Time = reference.AddMinutes(3) }); + + Assert.AreEqual(0.5m, indicator.Ratio.Current.Value); + + indicator.Reset(); + indicator.Remove(Symbols.GOOG); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.9m, Time = reference.AddMinutes(2) }); + + // value is not ready yet + Assert.AreEqual(0m, indicator.Ratio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 0.9m, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.9m, Time = reference.AddMinutes(3) }); + // new low (ignored) + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.2m, Time = reference.AddMinutes(3) }); + + Assert.AreEqual(2m, indicator.Ratio.Current.Value); + } + + [Test] + public void IgnorePeriodIfAnyStockMissed() + { + var indicator = (NewHighsNewLows)CreateIndicator(); + indicator.Add(Symbols.MSFT); + var reference = DateTime.Today; + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + + // value is not ready yet + Assert.AreEqual(0m, indicator.Ratio.Current.Value); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.5m, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, Close = 3, Low = 1, Time = reference.AddMinutes(3) }); + + Assert.AreEqual(0m, indicator.Ratio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 4, Low = 1, Time = reference.AddMinutes(4) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.3m, Time = reference.AddMinutes(4) }); + // no change + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Time = reference.AddMinutes(4) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 4, Low = 1, Time = reference.AddMinutes(4) }); + + Assert.AreEqual(2m, indicator.Ratio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 5, Low = 1, Time = reference.AddMinutes(5) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.2m, Time = reference.AddMinutes(5) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 4, Low = 1, Time = reference.AddMinutes(5) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 5, Low = 1, Time = reference.AddMinutes(5) }); + + Assert.AreEqual(3m, indicator.Ratio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 6, Low = 1, Time = reference.AddMinutes(6) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 3, Low = 1, Time = reference.AddMinutes(6) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 6, Low = 1, Time = reference.AddMinutes(6) }); + + Assert.AreEqual(3m, indicator.Ratio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 7, Low = 1, Time = reference.AddMinutes(7) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 5, Low = 1, Time = reference.AddMinutes(7) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 7, Low = 1, Time = reference.AddMinutes(7) }); + + Assert.AreEqual(3m, indicator.Ratio.Current.Value); + } + + [Test] + public override void WarmsUpProperly() + { + var indicator = (NewHighsNewLows)CreateIndicator(); + var reference = DateTime.Today; + + // setup period (unordered) + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 0.5m, Low = 0.2m, Time = reference.AddMinutes(2) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Time = reference.AddMinutes(2) }); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 0.75m, Low = 0.1m, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 5, Low = 2, Time = reference.AddMinutes(3) }); + + Assert.IsTrue(indicator.Ratio.IsReady); + Assert.AreEqual(2m, indicator.Ratio.Current.Value); + Assert.AreEqual(9, indicator.Samples); + Assert.AreEqual(1, indicator.Ratio.Samples); + } + + [Test] + public void WarmsUpOrdered() + { + var indicator = (NewHighsNewLows)CreateIndicator(); + var reference = DateTime.Today; + + // setup period (ordered) + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 0.5m, Low = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Time = reference.AddMinutes(2) }); + + // indicator is not ready yet + Assert.IsFalse(indicator.Ratio.IsReady); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 4, Low = 1, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 5, Low = 1, Time = reference.AddMinutes(3) }); + + Assert.IsTrue(indicator.Ratio.IsReady); + Assert.AreEqual(3m, indicator.Ratio.Current.Value); + } + + [Test] + public override void IndicatorShouldHaveSymbolAfterUpdates() + { + var indicator = CreateIndicator() as NewHighsNewLows; + var reference = DateTime.Today; + + for (int i = 0; i < 10; i++) + { + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Volume = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Volume = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Volume = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Volume = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.5m, Volume = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Volume = 1, Time = reference.AddMinutes(2) }); + + // indicator is not ready yet + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Volume = 1, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.3m, Volume = 1, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 4, Low = 1, Volume = 1, Time = reference.AddMinutes(3) }); + + // indicator is ready + + // The last update used Symbol.GOOG, so the indicator's current Symbol should be GOOG + Assert.AreEqual(Symbols.GOOG, indicator.Ratio.Current.Symbol); + } + } + + protected override string TestFileName => "nhnl_data.csv"; + + protected override string TestColumnName => "NH/NL Ratio"; + } +} diff --git a/Tests/Indicators/NewHighsNewLowsTestsBase.cs b/Tests/Indicators/NewHighsNewLowsTestsBase.cs new file mode 100644 index 000000000000..b6a85a05f636 --- /dev/null +++ b/Tests/Indicators/NewHighsNewLowsTestsBase.cs @@ -0,0 +1,166 @@ +/* + * 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 NUnit.Framework; +using QuantConnect.Data.Consolidators; +using QuantConnect.Data.Market; +using QuantConnect.Indicators; +using System; +using System.Collections.Generic; +using System.Linq; +using static QuantConnect.Tests.Indicators.TestHelper; + +namespace QuantConnect.Tests.Indicators +{ + public abstract class NewHighsNewLowsTestsBase : CommonIndicatorTests + where T : class, IBaseDataBar + { + protected override IndicatorBase CreateIndicator() + { + var nhnlRatio = CreateNewHighsNewLowsIndicator(); + if (SymbolList.Count > 2) + { + SymbolList.Take(3).ToList().ForEach(nhnlRatio.Add); + } + else + { + nhnlRatio.Add(Symbols.AAPL); + nhnlRatio.Add(Symbols.IBM); + nhnlRatio.Add(Symbols.GOOG); + RenkoBarSize = 5000000; + } + + // Even if the indicator is ready, there may be zero values + ValueCanBeZero = true; + + return nhnlRatio; + } + + protected override List GetSymbols() + { + return [Symbols.SPY, Symbols.AAPL, Symbols.IBM]; + } + + protected override Action, double> Assertion => (indicator, expected) => + { + // we need to use the Ratio sub-indicator + base.Assertion(GetSubIndicator(indicator), expected); + }; + + protected abstract NewHighsNewLows CreateNewHighsNewLowsIndicator(); + + protected abstract IndicatorBase GetSubIndicator(IndicatorBase mainIndicator); + + [Test] + public override void AcceptsRenkoBarsAsInput() + { + var indicator = CreateIndicator(); + if (indicator is IndicatorBase) + { + var aaplRenkoConsolidator = new RenkoConsolidator(10000m); + aaplRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + var googRenkoConsolidator = new RenkoConsolidator(100000m); + googRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + var ibmRenkoConsolidator = new RenkoConsolidator(10000m); + ibmRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + foreach (var parts in GetCsvFileStream(TestFileName)) + { + var tradebar = parts.GetTradeBar(); + if (tradebar.Symbol.Value == "AAPL") + { + aaplRenkoConsolidator.Update(tradebar); + } + else if (tradebar.Symbol.Value == "GOOG") + { + googRenkoConsolidator.Update(tradebar); + } + else + { + ibmRenkoConsolidator.Update(tradebar); + } + } + + Assert.IsTrue(indicator.IsReady); + Assert.AreNotEqual(0, indicator.Samples); + IndicatorValueIsNotZeroAfterReceiveRenkoBars(indicator); + aaplRenkoConsolidator.Dispose(); + googRenkoConsolidator.Dispose(); + ibmRenkoConsolidator.Dispose(); + } + } + + [Test] + public override void AcceptsVolumeRenkoBarsAsInput() + { + var indicator = CreateIndicator(); + if (indicator is IndicatorBase) + { + var aaplRenkoConsolidator = new VolumeRenkoConsolidator(10000000m); + aaplRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + var googRenkoConsolidator = new VolumeRenkoConsolidator(500000m); + googRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + var ibmRenkoConsolidator = new VolumeRenkoConsolidator(500000m); + ibmRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + foreach (var parts in GetCsvFileStream(TestFileName)) + { + var tradebar = parts.GetTradeBar(); + if (tradebar.Symbol.Value == "AAPL") + { + aaplRenkoConsolidator.Update(tradebar); + } + else if (tradebar.Symbol.Value == "GOOG") + { + googRenkoConsolidator.Update(tradebar); + } + else + { + ibmRenkoConsolidator.Update(tradebar); + } + } + + Assert.IsTrue(indicator.IsReady); + Assert.AreNotEqual(0, indicator.Samples); + IndicatorValueIsNotZeroAfterReceiveVolumeRenkoBars(indicator); + aaplRenkoConsolidator.Dispose(); + googRenkoConsolidator.Dispose(); + ibmRenkoConsolidator.Dispose(); + } + } + } +} diff --git a/Tests/Indicators/NewHighsNewLowsVolumeRatioTests.cs b/Tests/Indicators/NewHighsNewLowsVolumeRatioTests.cs new file mode 100644 index 000000000000..2245d3ef1492 --- /dev/null +++ b/Tests/Indicators/NewHighsNewLowsVolumeRatioTests.cs @@ -0,0 +1,255 @@ +/* + * 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 NUnit.Framework; +using QuantConnect.Data.Market; +using QuantConnect.Indicators; +using System; + +namespace QuantConnect.Tests.Indicators +{ + [TestFixture] + internal class NewHighsNewLowsVolumeRatioTests : NewHighsNewLowsTestsBase + { + protected override NewHighsNewLows CreateNewHighsNewLowsIndicator() + { + // For test purposes we use period of two + return new NewHighsNewLowsVolume("test_name", 2); + } + + protected override IndicatorBase GetSubIndicator(IndicatorBase mainIndicator) + { + return (mainIndicator as NewHighsNewLowsVolume).VolumeRatio; + } + + [Test] + public void ShouldIgnoreRemovedStocks() + { + var indicator = (NewHighsNewLowsVolume)CreateIndicator(); + var reference = DateTime.Today; + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 0.9m, Volume = 100, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.9m, Volume = 100, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.9m, Volume = 100, Time = reference.AddMinutes(2) }); + + // value is not ready yet + Assert.AreEqual(0m, indicator.VolumeRatio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 0.9m, Volume = 100, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.3m, Volume = 100, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.2m, Volume = 100, Time = reference.AddMinutes(3) }); + + Assert.AreEqual(0.5m, indicator.VolumeRatio.Current.Value); + + indicator.Reset(); + indicator.Remove(Symbols.GOOG); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 0.9m, Volume = 100, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.9m, Volume = 100, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.9m, Volume = 100, Time = reference.AddMinutes(2) }); + + // value is not ready yet + Assert.AreEqual(0m, indicator.VolumeRatio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 0.9m, Volume = 100, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.9m, Volume = 100, Time = reference.AddMinutes(3) }); + // new low (ignored) + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 0.2m, Volume = 100, Time = reference.AddMinutes(3) }); + + Assert.AreEqual(200m, indicator.VolumeRatio.Current.Value); + } + + [Test] + public void IgnorePeriodIfAnyStockMissed() + { + var indicator = (NewHighsNewLowsVolume)CreateIndicator(); + indicator.Add(Symbols.MSFT); + var reference = DateTime.Today; + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Volume = 100, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 1, Volume = 100, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 2, Low = 1, Volume = 100, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 2, Low = 1, Volume = 100, Time = reference.AddMinutes(2) }); + + // value is not ready yet + Assert.AreEqual(0m, indicator.VolumeRatio.Current.Value); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Volume = 100, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.5m, Volume = 100, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, Close = 3, Low = 1, Volume = 100, Time = reference.AddMinutes(3) }); + + Assert.AreEqual(0m, indicator.VolumeRatio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 4, Low = 1, Volume = 100, Time = reference.AddMinutes(4) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.3m, Volume = 100, Time = reference.AddMinutes(4) }); + // no change + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Volume = 100, Time = reference.AddMinutes(4) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 4, Low = 1, Volume = 100, Time = reference.AddMinutes(4) }); + + Assert.AreEqual(2m, indicator.VolumeRatio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 5, Low = 1, Volume = 100, Time = reference.AddMinutes(5) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 2, Low = 0.2m, Volume = 100, Time = reference.AddMinutes(5) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 4, Low = 1, Volume = 100, Time = reference.AddMinutes(5) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 5, Low = 1, Volume = 100, Time = reference.AddMinutes(5) }); + + Assert.AreEqual(3m, indicator.VolumeRatio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 6, Low = 1, Volume = 100, Time = reference.AddMinutes(6) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 3, Low = 1, Volume = 100, Time = reference.AddMinutes(6) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 6, Low = 1, Volume = 100, Time = reference.AddMinutes(6) }); + + Assert.AreEqual(3m, indicator.VolumeRatio.Current.Value); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 7, Low = 1, Volume = 100, Time = reference.AddMinutes(7) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 5, Low = 1, Volume = 100, Time = reference.AddMinutes(7) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.MSFT, High = 7, Low = 1, Volume = 100, Time = reference.AddMinutes(7) }); + + Assert.AreEqual(3m, indicator.VolumeRatio.Current.Value); + } + + [Test] + public override void WarmsUpProperly() + { + var indicator = CreateIndicator() as NewHighsNewLowsVolume; + var reference = DateTime.Today; + + // setup period (unordered) + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Volume = 100, Time = reference.AddMinutes(2) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 0.5m, Low = 0.2m, Volume = 100, Time = reference.AddMinutes(2) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Volume = 100, Time = reference.AddMinutes(2) }); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Volume = 100, Time = reference.AddMinutes(3) }); + // new low + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 0.75m, Low = 0.1m, Volume = 100, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 5, Low = 2, Volume = 100, Time = reference.AddMinutes(3) }); + + Assert.IsTrue(indicator.IsReady); + Assert.AreEqual(2m, indicator.VolumeRatio.Current.Value); + Assert.AreEqual(9, indicator.Samples); + Assert.AreEqual(1, indicator.VolumeRatio.Samples); + } + + [Test] + public void WarmsUpOrdered() + { + var indicator = CreateIndicator() as NewHighsNewLowsVolume; + var reference = DateTime.Today; + + // setup period (ordered) + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Volume = 100, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Volume = 100, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 0.5m, Low = 1, Volume = 100, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Volume = 100, Time = reference.AddMinutes(2) }); + + // indicator is not ready yet + Assert.IsFalse(indicator.IsReady); + + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Volume = 100, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 4, Low = 1, Volume = 100, Time = reference.AddMinutes(3) }); + // new high + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 5, Low = 1, Volume = 100, Time = reference.AddMinutes(3) }); + + Assert.IsTrue(indicator.IsReady); + Assert.AreEqual(300m, indicator.VolumeRatio.Current.Value); + } + + [Test] + public override void IndicatorShouldHaveSymbolAfterUpdates() + { + var indicator = CreateIndicator() as NewHighsNewLowsVolume; + var reference = DateTime.Today; + + for (int i = 0; i < 10; i++) + { + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 1, Low = 1, Volume = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 1, Volume = 1, Time = reference.AddMinutes(1) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 1, Low = 1, Volume = 1, Time = reference.AddMinutes(1) }); + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 2, Low = 1, Volume = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.5m, Volume = 1, Time = reference.AddMinutes(2) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 3, Low = 1, Volume = 1, Time = reference.AddMinutes(2) }); + + // indicator is not ready yet + + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, High = 3, Low = 1, Volume = 1, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, High = 1, Low = 0.3m, Volume = 1, Time = reference.AddMinutes(3) }); + indicator.Update(new TradeBar() { Symbol = Symbols.GOOG, High = 4, Low = 1, Volume = 1, Time = reference.AddMinutes(3) }); + + // indicator is ready + + // The last update used Symbol.GOOG, so the indicator's current Symbol should be GOOG + Assert.AreEqual(Symbols.GOOG, indicator.VolumeRatio.Current.Symbol); + } + } + + protected override string TestFileName => "nhnl_data.csv"; + + protected override string TestColumnName => "NH/NL Volume Ratio"; + + /// + /// The final value of this indicator is zero because it uses the Volume of the bars it receives. + /// Since RenkoBar's don't always have Volume, the final current value is zero. Therefore we + /// skip this test + /// + /// + protected override void IndicatorValueIsNotZeroAfterReceiveRenkoBars(IndicatorBase indicator) + { + } + } +} diff --git a/Tests/QuantConnect.Tests.csproj b/Tests/QuantConnect.Tests.csproj index e2cc8706ea9d..f8ced114d264 100644 --- a/Tests/QuantConnect.Tests.csproj +++ b/Tests/QuantConnect.Tests.csproj @@ -344,6 +344,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/Tests/TestData/nhnl_data.csv b/Tests/TestData/nhnl_data.csv new file mode 100644 index 000000000000..2b48e39a38c1 --- /dev/null +++ b/Tests/TestData/nhnl_data.csv @@ -0,0 +1,757 @@ +Date,Symbol,Open,High,Low,Close,Volume,NH/NL Difference,NH/NL Ratio,NH/NL Volume Ratio +20190102,AAPL,1548900,1588500,1542400,1579200,28370261,0.0,0.0,0.0 +20190102,GOOG,10171300,10524000,10141300,10458600,1219740,0.0,0.0,0.0 +20190102,IBM,1120000,1159800,1116900,1151900,3244233,0.0,0.0,0.0 +20190103,AAPL,1439500,1457500,1420000,1420900,83238505,0.0,0.0,0.0 +20190103,GOOG,10410000,10567700,10140300,10151900,1468159,0.0,0.0,0.0 +20190103,IBM,1145300,1148500,1126900,1129300,3401399,0.0,0.0,0.0 +20190104,AAPL,1445800,1485400,1438000,1482600,52261612,0.0,0.0,0.0 +20190104,GOOG,10330000,10708600,10275600,10707100,1722662,0.0,0.0,0.0 +20190104,IBM,1149100,1174900,1144800,1172900,3814850,2.0,2.0,5537512.0 +20190107,AAPL,1486300,1488300,1459000,1478900,50933385,2.0,2.0,5537512.0 +20190107,GOOG,10715000,10740000,10539600,10683900,1709957,2.0,2.0,5537512.0 +20190107,IBM,1175000,1188300,1167100,1181000,3247405,3.0,3.0,55890747.0 +20190108,AAPL,1493400,1518200,1485200,1507700,37363174,3.0,3.0,55890747.0 +20190108,GOOG,10761100,10847800,10603000,10765300,1332941,3.0,3.0,55890747.0 +20190108,IBM,1196600,1205400,1189800,1198600,3942624,3.0,3.0,42638739.0 +20190109,AAPL,1511600,1545300,1496300,1533100,41636996,3.0,3.0,42638739.0 +20190109,GOOG,10813400,10826400,10664000,10745400,1027741,3.0,3.0,42638739.0 +20190109,IBM,1209100,1213900,1198800,1206400,3083182,2.0,2.0,44720178.0 +20190110,AAPL,1524500,1539700,1508600,1538000,33478211,2.0,2.0,44720178.0 +20190110,GOOG,10699900,10711500,10576800,10692200,1110320,2.0,2.0,44720178.0 +20190110,IBM,1201600,1218600,1199500,1217400,3176528,0.0,1.0,2.8609121694646586 +20190111,AAPL,1528100,1537000,1515100,1523000,23450358,0.0,1.0,2.8609121694646586 +20190111,GOOG,10619100,10647300,10484800,10571700,1321465,0.0,1.0,2.8609121694646586 +20190111,IBM,1215800,1215800,1202200,1214300,2901424,-1.0,0.0,0.0 +20190114,AAPL,1508700,1512700,1492200,1499900,27532102,-1.0,0.0,0.0 +20190114,GOOG,10469200,10515300,10413000,10444800,966733,-1.0,0.0,0.0 +20190114,IBM,1205100,1206400,1198000,1203400,4254599,-3.0,0.0,0.0 +20190115,AAPL,1502700,1533900,1500500,1530500,26284167,-3.0,0.0,0.0 +20190115,GOOG,10509100,10800500,10470500,10768600,1231237,-3.0,0.0,0.0 +20190115,IBM,1209600,1219300,1208200,1217000,3088304,2.0,2.0,4319541.0 +20190116,AAPL,1530000,1558800,1530000,1549200,27673320,2.0,2.0,4319541.0 +20190116,GOOG,10787800,10920900,10787800,10807700,1112963,2.0,2.0,4319541.0 +20190116,IBM,1215800,1220000,1208300,1215700,3235296,3.0,3.0,32021579.0 +20190117,AAPL,1542200,1576500,1532600,1558600,27463983,3.0,3.0,32021579.0 +20190117,GOOG,10794700,10918000,10741800,10912900,852114,3.0,3.0,32021579.0 +20190117,IBM,1205600,1224000,1205500,1221800,3936493,1.0,2.0,7.976764089254065 +20190118,AAPL,1575200,1578800,1559900,1568200,28994344,1.0,2.0,7.976764089254065 +20190118,GOOG,10983300,11086000,10906900,10982500,1571248,1.0,2.0,7.976764089254065 +20190118,IBM,1232700,1247000,1227200,1238300,5079604,3.0,3.0,35645196.0 +20190122,AAPL,1564000,1567300,1526200,1536900,25079137,3.0,3.0,35645196.0 +20190122,GOOG,10887700,10913200,10634700,10710800,1113354,3.0,3.0,35645196.0 +20190122,IBM,1232200,1238000,1215400,1223700,6851547,-2.0,0.0,0.0 +20190123,AAPL,1541200,1551400,1517000,1539700,20692626,-2.0,0.0,0.0 +20190123,GOOG,10786700,10849300,10593100,10758500,866412,-2.0,0.0,0.0 +20190123,IBM,1312500,1350000,1303200,1328900,20736688,-1.0,0.5,0.9618559047022414 +20190124,AAPL,1539400,1544800,1517400,1527100,21201995,-1.0,0.5,0.9618559047022414 +20190124,GOOG,10741100,10791700,10606500,10743300,896027,-1.0,0.5,0.9618559047022414 +20190124,IBM,1326100,1332000,1314500,1325100,5563047,0.0,0.0,0.0 +20190125,AAPL,1552800,1581400,1543200,1577200,30695002,0.0,0.0,0.0 +20190125,GOOG,10844400,10940000,10813900,10909900,949640,0.0,0.0,0.0 +20190125,IBM,1328700,1344400,1324300,1339900,5155390,2.0,2.0,31644642.0 +20190128,AAPL,1555300,1563300,1536700,1563000,22548976,2.0,2.0,31644642.0 +20190128,GOOG,10801100,10830500,10634700,10702500,1082572,2.0,2.0,31644642.0 +20190128,IBM,1331000,1348100,1326000,1343100,4265756,1.0,1.0,4265756.0 +20190129,AAPL,1562000,1581300,1541100,1546600,31507605,1.0,1.0,4265756.0 +20190129,GOOG,10722300,10751500,10556600,10602300,834511,1.0,1.0,4265756.0 +20190129,IBM,1342900,1354100,1336000,1343400,4141354,0.0,1.0,4.962611637234261 +20190130,AAPL,1632800,1661500,1602300,1652400,55940805,0.0,1.0,4.962611637234261 +20190130,GOOG,10672400,10911900,10668500,10894200,1072214,0.0,1.0,4.962611637234261 +20190130,IBM,1340000,1350300,1332500,1344100,3939387,2.0,2.0,57013019.0 +20190131,AAPL,1661100,1690000,1645600,1663400,32499436,2.0,2.0,57013019.0 +20190131,GOOG,11044700,11173400,10950000,11161800,1260420,2.0,2.0,57013019.0 +20190131,IBM,1344500,1346500,1337400,1344000,3337118,2.0,2.0,33759856.0 +20190201,AAPL,1669300,1689800,1659300,1665400,26100838,2.0,2.0,33759856.0 +20190201,GOOG,11125600,11250000,11045600,11102300,1143535,2.0,2.0,33759856.0 +20190201,IBM,1349700,1351900,1333500,1340800,3312237,2.0,2.0,4455772.0 +20190204,AAPL,1674800,1716600,1672800,1712700,27747804,2.0,2.0,4455772.0 +20190204,GOOG,11120000,11325000,11090000,11325000,1878894,2.0,2.0,4455772.0 +20190204,IBM,1340200,1351800,1329900,1351800,3316380,1.0,2.0,8.933444900765291 +20190205,AAPL,1728600,1750800,1723500,1741000,32540764,1.0,2.0,8.933444900765291 +20190205,GOOG,11235900,11469200,11170300,11460000,3104755,1.0,2.0,8.933444900765291 +20190205,IBM,1352800,1358100,1349300,1355300,3190321,3.0,3.0,38835840.0 +20190206,AAPL,1747000,1755700,1728600,1742800,26390527,3.0,3.0,38835840.0 +20190206,GOOG,11415000,11470000,11127600,11152300,1845545,3.0,3.0,38835840.0 +20190206,IBM,1352200,1366500,1351700,1363300,4333342,3.0,3.0,32569414.0 +20190207,AAPL,1723900,1739400,1703400,1709900,29006527,3.0,3.0,32569414.0 +20190207,GOOG,11048400,11049300,10860000,10987100,1766403,3.0,3.0,32569414.0 +20190207,IBM,1336200,1344600,1321200,1332000,3937685,-3.0,0.0,0.0 +20190208,AAPL,1688800,1706600,1684200,1705000,21210282,-3.0,0.0,0.0 +20190208,GOOG,10868700,10990000,10864400,10950800,871200,-3.0,0.0,0.0 +20190208,IBM,1325500,1337000,1321900,1337000,2394720,-1.0,0.0,0.0 +20190211,AAPL,1710500,1712100,1692500,1694500,18366473,-1.0,0.0,0.0 +20190211,GOOG,10968000,11060000,10928300,10950100,785879,-1.0,0.0,0.0 +20190211,IBM,1342900,1351200,1340000,1340100,2449210,2.0,2.0,3235089.0 +20190212,AAPL,1701300,1710000,1697000,1708900,19540639,2.0,2.0,3235089.0 +20190212,GOOG,11056000,11253500,11052600,11212200,1471781,2.0,2.0,3235089.0 +20190212,IBM,1351500,1361900,1348700,1360300,2894463,2.0,2.0,4366244.0 +20190213,AAPL,1714300,1724800,1699200,1701700,20022816,2.0,2.0,4366244.0 +20190213,GOOG,11248600,11348000,11185000,11205800,939841,2.0,2.0,4366244.0 +20190213,IBM,1369400,1379100,1365100,1375100,3675941,3.0,3.0,24638598.0 +20190214,AAPL,1697600,1712700,1693900,1707900,18491122,3.0,3.0,24638598.0 +20190214,GOOG,11180500,11283500,11100000,11216300,855272,3.0,3.0,24638598.0 +20190214,IBM,1372300,1375900,1362100,1364800,2394993,-1.0,0.0,0.0 +20190215,AAPL,1712200,1717000,1697500,1703800,21513915,-1.0,0.0,0.0 +20190215,GOOG,11297700,11316700,11105800,11135800,1222931,-1.0,0.0,0.0 +20190215,IBM,1377000,1381900,1373900,1380300,3078927,1.0,1.0,3078927.0 +20190219,AAPL,1697200,1714400,1694300,1709400,16853497,1.0,1.0,3078927.0 +20190219,GOOG,11104400,11218600,11099600,11188100,878344,1.0,1.0,3078927.0 +20190219,IBM,1378100,1387000,1373600,1387000,2740525,0.0,1.0,3.120104423779294 +20190220,AAPL,1711900,1733200,1709900,1720900,22718221,0.0,1.0,3.120104423779294 +20190220,GOOG,11199900,11233600,11053000,11144300,912517,0.0,1.0,3.120104423779294 +20190220,IBM,1387600,1392200,1372300,1380300,2989005,0.0,1.0,6.589025001012425 +20190221,AAPL,1718000,1723700,1703100,1711400,15778960,0.0,1.0,6.589025001012425 +20190221,GOOG,11111100,11119800,10923500,10971200,1103655,0.0,1.0,6.589025001012425 +20190221,IBM,1378200,1383300,1373800,1378400,2378211,-1.0,0.0,0.0 +20190222,AAPL,1716000,1730000,1713800,1729700,15409727,-1.0,0.0,0.0 +20190222,GOOG,11024600,11112500,10950000,11106300,886859,-1.0,0.0,0.0 +20190222,IBM,1387300,1393600,1384500,1392600,2550451,1.0,1.0,2550451.0 +20190225,AAPL,1739900,1758700,1739400,1742500,19691132,1.0,1.0,2550451.0 +20190225,GOOG,11170400,11187700,11072300,11089700,1243148,1.0,1.0,2550451.0 +20190225,IBM,1400000,1404500,1393200,1394300,2577238,3.0,3.0,23511518.0 +20190226,AAPL,1737100,1753000,1731600,1743500,14731642,3.0,3.0,23511518.0 +20190226,GOOG,11057500,11196000,10995800,11149300,1068777,3.0,3.0,23511518.0 +20190226,IBM,1396700,1404600,1394800,1397300,2503496,2.0,2.0,3572273.0 +20190227,AAPL,1732500,1750000,1727300,1748800,23019795,2.0,2.0,3572273.0 +20190227,GOOG,11093100,11179900,11010000,11162500,864775,2.0,2.0,3572273.0 +20190227,IBM,1392500,1395600,1384300,1391500,2069284,-2.0,0.0,0.0 +20190228,AAPL,1743200,1749100,1729100,1732000,19986497,-2.0,0.0,0.0 +20190228,GOOG,11118400,11276800,11108300,11206500,1121226,-2.0,0.0,0.0 +20190228,IBM,1387500,1390000,1377300,1381200,2490995,0.0,1.0,0.4501117023518714 +20190301,AAPL,1742800,1751500,1728900,1749700,21191283,0.0,1.0,0.4501117023518714 +20190301,GOOG,11257300,11429900,11243500,11414700,1283817,0.0,1.0,0.4501117023518714 +20190301,IBM,1393100,1400400,1386400,1391700,2598921,3.0,3.0,25074021.0 +20190304,AAPL,1756800,1777500,1739700,1758600,24418623,3.0,3.0,25074021.0 +20190304,GOOG,11461000,11582500,11306200,11478000,1261341,3.0,3.0,25074021.0 +20190304,IBM,1399900,1400800,1371700,1385000,2661368,2.0,3.0,10.64915937968744 +20190305,AAPL,1759200,1760000,1745400,1755100,15511056,2.0,3.0,10.64915937968744 +20190305,GOOG,11515000,11695200,11460500,11616200,1318441,2.0,3.0,10.64915937968744 +20190305,IBM,1383700,1387200,1375600,1379300,2294783,1.0,1.0,1318441.0 +20190306,AAPL,1747600,1754900,1739400,1745100,17521402,1.0,1.0,1318441.0 +20190306,GOOG,11647800,11672400,11554900,11579600,912091,1.0,1.0,1318441.0 +20190306,IBM,1380600,1383600,1367200,1369800,2351144,-2.0,0.0,0.0 +20190307,AAPL,1739100,1744400,1720200,1724700,20419582,-2.0,0.0,0.0 +20190307,GOOG,11539100,11568600,11347500,11435300,1013586,-2.0,0.0,0.0 +20190307,IBM,1366100,1368900,1346500,1353600,3620161,-3.0,0.0,0.0 +20190308,AAPL,1702800,1730800,1695000,1729200,19651510,-3.0,0.0,0.0 +20190308,GOOG,11259800,11471900,11231500,11427400,1018262,-3.0,0.0,0.0 +20190308,IBM,1342500,1352400,1336100,1350400,3403914,-3.0,0.0,0.0 +20190311,AAPL,1754900,1791300,1753500,1789800,26548756,-3.0,0.0,0.0 +20190311,GOOG,11457500,11761900,11441400,11757600,1384014,-3.0,0.0,0.0 +20190311,IBM,1360300,1377300,1358400,1377200,3259429,3.0,3.0,31192199.0 +20190312,AAPL,1799300,1826700,1793700,1809400,27622968,3.0,3.0,31192199.0 +20190312,GOOG,11782400,12000000,11782400,11927700,1869564,3.0,3.0,31192199.0 +20190312,IBM,1385700,1396900,1378600,1382800,3129203,3.0,3.0,32621735.0 +20190313,AAPL,1822900,1832900,1809200,1817200,24264018,3.0,3.0,32621735.0 +20190313,GOOG,11999900,12019900,11919400,11933100,1313900,3.0,3.0,32621735.0 +20190313,IBM,1382800,1393200,1378600,1385400,2527701,2.0,2.0,25577918.0 +20190314,AAPL,1839100,1841000,1825600,1837300,19549079,2.0,2.0,25577918.0 +20190314,GOOG,11945100,11979600,11844800,11858000,994417,2.0,2.0,25577918.0 +20190314,IBM,1385100,1389300,1380700,1388000,2128787,1.0,1.0,19549079.0 +20190315,AAPL,1847800,1873300,1837400,1862100,32967677,1.0,1.0,19549079.0 +20190315,GOOG,11921900,11966200,11825500,11852400,1784155,1.0,1.0,19549079.0 +20190315,IBM,1395800,1403300,1392500,1394300,3635412,1.0,2.0,20.515644100428496 +20190318,AAPL,1858100,1883900,1857900,1880200,22763260,1.0,2.0,20.515644100428496 +20190318,GOOG,11830100,11901900,11773700,11844500,981951,1.0,2.0,20.515644100428496 +20190318,IBM,1398300,1403700,1387200,1402500,2710158,1.0,2.0,25.941638635736407 +20190319,AAPL,1882400,1889900,1859200,1865400,27185557,1.0,2.0,25.941638635736407 +20190319,GOOG,11873100,12004500,11858000,11995500,1034017,1.0,2.0,25.941638635736407 +20190319,IBM,1409600,1417000,1400100,1405300,2654092,3.0,3.0,30873666.0 +20190320,AAPL,1862800,1894900,1847300,1881700,27274230,3.0,3.0,30873666.0 +20190320,GOOG,11976500,12272500,11960400,12240100,1692662,3.0,3.0,30873666.0 +20190320,IBM,1405300,1407000,1389900,1396200,2813292,1.0,2.0,1.06206085378029 +20190321,AAPL,1900200,1963200,1898100,1950500,43361081,1.0,2.0,1.06206085378029 +20190321,GOOG,12169400,12318200,12136700,12317900,919910,1.0,2.0,1.06206085378029 +20190321,IBM,1390000,1421200,1390000,1414500,2821095,3.0,3.0,47102086.0 +20190322,AAPL,1953400,1976900,1907700,1910600,38667194,3.0,3.0,47102086.0 +20190322,GOOG,12263200,12305300,12026500,12059200,1486536,3.0,3.0,47102086.0 +20190322,IBM,1409700,1414400,1389100,1394600,3148502,0.0,1.0,12.28114004691755 +20190325,AAPL,1917100,1919800,1866000,1887700,40970851,0.0,1.0,12.28114004691755 +20190325,GOOG,11976400,12065400,11869800,11924100,1185757,0.0,1.0,12.28114004691755 +20190325,IBM,1390600,1399000,1383600,1392000,2328678,-3.0,0.0,0.0 +20190326,AAPL,1914900,1928800,1845900,1867900,43987220,-3.0,0.0,0.0 +20190326,GOOG,11996100,12029700,11768000,11848500,1784154,-3.0,0.0,0.0 +20190326,IBM,1399300,1410200,1394200,1402200,2009766,-2.0,0.0,0.0 +20190327,AAPL,1888400,1897600,1865400,1885000,26785493,-2.0,0.0,0.0 +20190327,GOOG,11876300,11876300,11591400,11730600,1251820,-2.0,0.0,0.0 +20190327,IBM,1402600,1404800,1384100,1392400,2381589,-1.0,0.0,0.0 +20190328,AAPL,1889300,1895600,1875300,1887100,19466097,-1.0,0.0,0.0 +20190328,GOOG,11698300,11717000,11595000,11684900,878223,-1.0,0.0,0.0 +20190328,IBM,1399100,1404400,1391100,1399500,1901090,0.0,0.0,0.0 +20190329,AAPL,1899500,1900800,1885400,1899400,18639099,0.0,0.0,0.0 +20190329,GOOG,11756900,11794200,11628000,11731100,971516,0.0,0.0,0.0 +20190329,IBM,1405000,1412100,1401500,1411100,2086371,2.0,2.0,20725470.0 +20190401,AAPL,1916400,1916800,1883800,1912400,23096523,2.0,2.0,20725470.0 +20190401,GOOG,11840700,11968000,11818400,11941500,1030256,2.0,2.0,20725470.0 +20190401,IBM,1415100,1433900,1415100,1432400,3079888,3.0,3.0,27206667.0 +20190402,AAPL,1910500,1944600,1910500,1940400,20026095,3.0,3.0,27206667.0 +20190402,GOOG,11957500,12013500,11858100,12004200,616071,3.0,3.0,27206667.0 +20190402,IBM,1431300,1439500,1426000,1430100,2058194,3.0,3.0,22700360.0 +20190403,AAPL,1932500,1965000,1931500,1953500,20033154,3.0,3.0,22700360.0 +20190403,GOOG,12078400,12163300,12005000,12053300,861858,3.0,3.0,22700360.0 +20190403,IBM,1436500,1442200,1430200,1436000,2321998,3.0,3.0,23217010.0 +20190404,AAPL,1948900,1963700,1931400,1957200,17224373,3.0,3.0,23217010.0 +20190404,GOOG,12060000,12160900,12041300,12146800,786602,3.0,3.0,23217010.0 +20190404,IBM,1436200,1441400,1425500,1427600,2466019,-1.0,0.0,0.0 +20190405,AAPL,1964100,1971000,1959300,1969700,16026098,-1.0,0.0,0.0 +20190405,GOOG,12147000,12162200,12050000,12071400,760551,-1.0,0.0,0.0 +20190405,IBM,1432900,1435000,1424600,1433100,2353774,0.0,1.0,6.80868171710623 +20190408,AAPL,1964200,2002300,1963300,2000800,23831141,0.0,1.0,6.80868171710623 +20190408,GOOG,12071500,12085000,11997800,12038400,730048,0.0,1.0,6.80868171710623 +20190408,IBM,1430200,1434200,1428800,1433700,1804889,0.0,1.0,32.643252224511265 +20190409,AAPL,2003400,2028500,1992300,1995000,33104131,0.0,1.0,32.643252224511265 +20190409,GOOG,11960000,12022900,11935000,11981300,696431,0.0,1.0,32.643252224511265 +20190409,IBM,1427600,1429500,1418400,1422100,2473930,-1.0,0.5,10.44175442481156 +20190410,AAPL,1987400,2007400,1981800,2006600,20023619,-1.0,0.5,10.44175442481156 +20190410,GOOG,12002600,12039200,11962800,12021600,614098,-1.0,0.5,10.44175442481156 +20190410,IBM,1422000,1435000,1420100,1430400,2008464,1.0,1.0,2008464.0 +20190411,AAPL,2008500,2010000,1984500,1989400,18037895,1.0,1.0,2008464.0 +20190411,GOOG,12047100,12079800,12002300,12046200,530110,1.0,1.0,2008464.0 +20190411,IBM,1438000,1441100,1430900,1438100,2467900,2.0,2.0,2998010.0 +20190412,AAPL,1992300,2001400,1962100,1988900,25108070,2.0,2.0,2998010.0 +20190412,GOOG,12093000,12184200,12081200,12178600,822510,2.0,2.0,2998010.0 +20190412,IBM,1442600,1444400,1437000,1443600,2271167,1.0,2.0,0.12321444858167115 +20190415,AAPL,1985700,1998400,1980100,1992300,14628164,1.0,2.0,0.12321444858167115 +20190415,GOOG,12177400,12242500,12091100,12216300,992028,1.0,2.0,0.12321444858167115 +20190415,IBM,1444700,1444700,1432700,1439200,2729623,2.0,2.0,3721651.0 +20190416,AAPL,1994600,2013700,1985600,1992500,24268015,2.0,2.0,3721651.0 +20190416,GOOG,12250000,12304200,12201200,12274600,774879,2.0,2.0,3721651.0 +20190416,IBM,1444000,1453900,1440500,1451400,5459515,3.0,3.0,30502409.0 +20190417,AAPL,1995800,2034600,1986100,2031200,27999611,3.0,3.0,30502409.0 +20190417,GOOG,12320300,12405600,12278600,12365200,1049803,3.0,3.0,30502409.0 +20190417,IBM,1373700,1419600,1362800,1390800,11627349,1.0,2.0,2.4983694907583835 +20190418,AAPL,2031200,2041500,2025200,2038600,20443680,1.0,2.0,2.4983694907583835 +20190418,GOOG,12390800,12420800,12346100,12368100,1018437,1.0,2.0,2.4983694907583835 +20190418,IBM,1390000,1404900,1387800,1403300,3958106,2.0,2.0,21462117.0 +20190422,AAPL,2026600,2049400,2023300,2046400,13775526,2.0,2.0,21462117.0 +20190422,GOOG,12329000,12494300,12283000,12490900,662517,2.0,2.0,21462117.0 +20190422,IBM,1394200,1405500,1384800,1388700,3350803,2.0,2.0,14438043.0 +20190423,AAPL,2044300,2077500,2039000,2075100,19810816,2.0,2.0,14438043.0 +20190423,GOOG,12506900,12691500,12462700,12645000,1114144,2.0,2.0,14438043.0 +20190423,IBM,1391500,1409200,1389500,1404100,3072805,3.0,3.0,23997765.0 +20190424,AAPL,2074400,2084800,2070500,2071200,14932007,3.0,3.0,23997765.0 +20190424,GOOG,12652500,12680300,12549500,12550500,700959,3.0,3.0,23997765.0 +20190424,IBM,1406000,1412900,1398500,1399700,2019400,2.0,2.0,16951407.0 +20190425,AAPL,2068400,2077600,2051200,2052400,15970808,2.0,2.0,16951407.0 +20190425,GOOG,12652600,12676500,12520000,12629800,956135,2.0,2.0,16951407.0 +20190425,IBM,1397000,1397000,1377300,1386500,2373830,-1.0,0.0,0.0 +20190426,AAPL,2048300,2050000,2021200,2042900,16420146,-1.0,0.0,0.0 +20190426,GOOG,12665500,12736800,12602800,12718000,1083643,-1.0,0.0,0.0 +20190426,IBM,1392800,1398900,1388200,1394300,1940500,0.0,1.0,0.06599472379843638 +20190429,AAPL,2044000,2059700,2038600,2046100,19605618,0.0,1.0,0.06599472379843638 +20190429,GOOG,12730100,12892800,12663800,12874300,1717098,0.0,1.0,0.06599472379843638 +20190429,IBM,1391500,1396200,1388200,1390800,1946116,1.0,1.0,1717098.0 +20190430,AAPL,2030600,2033900,1991100,2005100,35906353,1.0,1.0,1717098.0 +20190430,GOOG,11850500,11930000,11748700,11894700,5795501,1.0,1.0,1717098.0 +20190430,IBM,1394200,1404400,1386800,1402600,2712449,-2.0,0.3333333333333333,0.061071520136204774 +20190501,AAPL,2099700,2153100,2092300,2105200,58431082,-2.0,0.3333333333333333,0.061071520136204774 +20190501,GOOG,11880100,11884900,11671500,11676500,2457471,-2.0,0.3333333333333333,0.061071520136204774 +20190501,IBM,1406400,1418000,1401900,1405700,2599938,1.0,2.0,24.83488920113401 +20190502,AAPL,2099500,2126500,2081300,2091700,28925386,1.0,2.0,24.83488920113401 +20190502,GOOG,11676600,11737900,11550100,11623600,1797876,1.0,2.0,24.83488920113401 +20190502,IBM,1404900,1412700,1394100,1396400,2728959,-1.0,0.0,0.0 +20190503,AAPL,2107600,2118400,2102300,2117800,18034291,-1.0,0.0,0.0 +20190503,GOOG,11726700,11868800,11689800,11855600,1770247,-1.0,0.0,0.0 +20190503,IBM,1397000,1410000,1397000,1402800,1967201,0.0,0.0,0.0 +20190506,AAPL,2042900,2088400,2035000,2086000,28839202,0.0,0.0,0.0 +20190506,GOOG,11678200,11908500,11662600,11894900,1420016,0.0,0.0,0.0 +20190506,IBM,1382900,1406900,1379000,1404000,2198109,-1.0,0.5,0.04575190163864389 +20190507,AAPL,2059300,2074000,2008300,2028600,34855750,-1.0,0.5,0.04575190163864389 +20190507,GOOG,11804700,11905400,11610500,11746200,1350758,-1.0,0.5,0.04575190163864389 +20190507,IBM,1391800,1394800,1362000,1376200,4062939,-3.0,0.0,0.0 +20190508,AAPL,2020200,2053400,2017600,2029000,22876206,-3.0,0.0,0.0 +20190508,GOOG,11715200,11805300,11656600,11657400,1150107,-3.0,0.0,0.0 +20190508,IBM,1377700,1386700,1371300,1380000,2823027,0.0,0.0,0.0 +20190509,AAPL,2004600,2016800,1966700,2007200,32813078,0.0,0.0,0.0 +20190509,GOOG,11589000,11697700,11508500,11626100,1076230,0.0,0.0,0.0 +20190509,IBM,1348900,1355700,1330300,1353400,3234443,-3.0,0.0,0.0 +20190510,AAPL,1974300,1988500,1927600,1972500,36509516,-3.0,0.0,0.0 +20190510,GOOG,11603000,11726000,11424900,11644900,1196664,-3.0,0.0,0.0 +20190510,IBM,1348800,1357500,1324400,1353200,3404127,-3.0,0.0,0.0 +20190513,AAPL,1876900,1894800,1828500,1857200,50683171,-3.0,0.0,0.0 +20190513,GOOG,11415000,11480000,11220000,11326100,1634334,-3.0,0.0,0.0 +20190513,IBM,1332800,1335500,1309600,1314100,3593331,-3.0,0.0,0.0 +20190514,AAPL,1864100,1897100,1854100,1886600,31680942,-3.0,0.0,0.0 +20190514,GOOG,11371100,11410000,11195200,11203300,1641019,-3.0,0.0,0.0 +20190514,IBM,1318200,1343200,1318100,1333400,2780832,-1.0,0.0,0.0 +20190515,AAPL,1863000,1917500,1860100,1909200,23820574,-1.0,0.0,0.0 +20190515,GOOG,11178700,11714200,11167500,11640600,2011343,-1.0,0.0,0.0 +20190515,IBM,1325900,1345900,1323700,1344000,2134015,2.0,3.0,13.904108846676076 +20190516,AAPL,1899100,1924800,1888400,1901400,28935602,2.0,3.0,13.904108846676076 +20190516,GOOG,11657800,11883600,11626400,11789800,1375292,2.0,3.0,13.904108846676076 +20190516,IBM,1347400,1361000,1346400,1358700,2367170,3.0,3.0,32678064.0 +20190517,AAPL,1870600,1909000,1867600,1889800,28930584,3.0,3.0,32678064.0 +20190517,GOOG,11699500,11802500,11599900,11623000,1054944,3.0,3.0,32678064.0 +20190517,IBM,1346800,1354000,1339400,1342900,2138590,0.0,0.0,0.0 +20190520,AAPL,1836300,1843400,1802900,1830900,33467674,0.0,0.0,0.0 +20190520,GOOG,11445000,11470900,11313500,11383300,1174301,0.0,0.0,0.0 +20190520,IBM,1335300,1354300,1329400,1351200,2969086,-3.0,0.0,0.0 +20190521,AAPL,1852200,1880000,1847000,1865900,24078878,-3.0,0.0,0.0 +20190521,GOOG,11480400,11527800,11379400,11496300,885148,-3.0,0.0,0.0 +20190521,IBM,1360100,1370400,1358300,1364600,1969099,1.0,1.0,1969099.0 +20190522,AAPL,1848600,1857100,1825500,1827900,26908150,1.0,1.0,1969099.0 +20190522,GOOG,11460000,11587500,11453700,11514200,783717,1.0,1.0,1969099.0 +20190522,IBM,1360000,1367500,1357200,1363600,1460512,1.0,1.0,783717.0 +20190523,AAPL,1798500,1805400,1778100,1796700,31309823,1.0,1.0,783717.0 +20190523,GOOG,11425400,11458900,11294200,11405500,1038778,1.0,1.0,783717.0 +20190523,IBM,1351300,1351300,1304500,1323900,4606839,-3.0,0.0,0.0 +20190524,AAPL,1802900,1821400,1786200,1790300,21640795,-3.0,0.0,0.0 +20190524,GOOG,11479700,11499100,11317300,11340000,1023769,-3.0,0.0,0.0 +20190524,IBM,1335300,1342000,1315900,1323000,2291630,0.0,0.0,0.0 +20190528,AAPL,1788900,1805900,1779200,1781700,22752739,0.0,0.0,0.0 +20190528,GOOG,11352400,11517700,11331200,11331800,1075412,0.0,0.0,0.0 +20190528,IBM,1320100,1326400,1302700,1304600,2419010,0.0,1.0,0.4445669922819666 +20190529,AAPL,1764800,1793500,1760000,1773500,26364270,0.0,1.0,0.4445669922819666 +20190529,GOOG,11290000,11294500,11082500,11163600,1425120,0.0,1.0,0.4445669922819666 +20190529,IBM,1300000,1302600,1283300,1296800,3201934,-3.0,0.0,0.0 +20190530,AAPL,1779900,1792300,1766700,1782500,19994104,-3.0,0.0,0.0 +20190530,GOOG,11180000,11231500,11121200,11177900,865165,-3.0,0.0,0.0 +20190530,IBM,1297400,1299700,1289300,1295600,2351813,0.0,0.0,0.0 +20190531,AAPL,1762200,1779900,1749900,1750000,23031208,0.0,0.0,0.0 +20190531,GOOG,11034100,11096000,11001000,11038500,1272882,0.0,0.0,0.0 +20190531,IBM,1284400,1284400,1268600,1270200,2523395,-3.0,0.0,0.0 +20190603,AAPL,1755800,1779200,1702700,1732800,36949732,-3.0,0.0,0.0 +20190603,GOOG,10660200,10670000,10250100,10363100,4745310,-3.0,0.0,0.0 +20190603,IBM,1270000,1285600,1270000,1282600,3463489,-2.0,0.0,0.0 +20190604,AAPL,1754500,1798400,1745200,1796700,27402677,-2.0,0.0,0.0 +20190604,GOOG,10420100,10562100,10337600,10530600,2550546,-2.0,0.0,0.0 +20190604,IBM,1295600,1327400,1290900,1326900,3074020,2.0,2.0,30476697.0 +20190605,AAPL,1842500,1849900,1811400,1825400,26229032,2.0,2.0,30476697.0 +20190605,GOOG,10522000,10535600,10304300,10429500,1991132,2.0,2.0,30476697.0 +20190605,IBM,1332200,1336100,1304700,1314500,2770367,2.0,2.0,28999399.0 +20190606,AAPL,1830900,1854700,1821500,1852300,18722674,2.0,2.0,28999399.0 +20190606,GOOG,10449900,10474700,10334300,10446000,1392091,2.0,2.0,28999399.0 +20190606,IBM,1321900,1326400,1309200,1322000,1962106,1.0,1.0,18722674.0 +20190607,AAPL,1866000,1919200,1857700,1901400,27840129,1.0,1.0,18722674.0 +20190607,GOOG,10504100,10717000,10482700,10660300,1544742,1.0,1.0,18722674.0 +20190607,IBM,1320800,1347200,1320800,1332900,2144277,3.0,3.0,31529148.0 +20190610,AAPL,1923300,1953700,1916100,1925200,23916792,3.0,3.0,31529148.0 +20190610,GOOG,10733900,10928400,10726600,10803800,1308312,3.0,3.0,31529148.0 +20190610,IBM,1343800,1353400,1339100,1347000,2479503,3.0,3.0,27704607.0 +20190611,AAPL,1948400,1960000,1936000,1948100,22798624,3.0,3.0,27704607.0 +20190611,GOOG,10946900,11019900,10775200,10788100,1285869,3.0,3.0,27704607.0 +20190611,IBM,1353200,1364400,1350500,1359700,2771962,3.0,3.0,26856455.0 +20190612,AAPL,1939900,1959700,1933700,1941900,16452770,3.0,3.0,26856455.0 +20190612,GOOG,10780000,10805900,10676100,10773300,962420,3.0,3.0,26856455.0 +20190612,IBM,1354900,1359400,1344100,1348700,1729989,-1.0,0.0,0.0 +20190613,AAPL,1947200,1968000,1936000,1947400,18162145,-1.0,0.0,0.0 +20190613,GOOG,10830000,10942200,10804400,10887900,885444,-1.0,0.0,0.0 +20190613,IBM,1351300,1362700,1350900,1357700,1920879,1.0,1.0,18162145.0 +20190614,AAPL,1916200,1935800,1903000,1927400,15883266,1.0,1.0,18162145.0 +20190614,GOOG,10860200,10925800,10800000,10853500,994158,1.0,1.0,18162145.0 +20190614,IBM,1353500,1356500,1344300,1351900,1527445,-1.0,0.0,0.0 +20190617,AAPL,1929000,1949600,1921700,1939500,12890733,-1.0,0.0,0.0 +20190617,GOOG,10867400,10993700,10860100,10925000,809378,-1.0,0.0,0.0 +20190617,IBM,1353900,1360300,1347000,1349500,1814647,1.0,1.0,809378.0 +20190618,AAPL,1960200,2002900,1952100,1985000,23830038,1.0,1.0,809378.0 +20190618,GOOG,11087000,11165200,10986700,11034700,1208540,1.0,1.0,809378.0 +20190618,IBM,1352000,1371900,1352000,1364200,2276060,3.0,3.0,27314638.0 +20190619,AAPL,1996800,1998900,1973100,1978200,17677106,3.0,3.0,27314638.0 +20190619,GOOG,11050000,11070000,10934200,11025800,1014357,3.0,3.0,27314638.0 +20190619,IBM,1364300,1376700,1362400,1371000,1893849,1.0,1.0,1893849.0 +20190620,AAPL,2003700,2006000,1980300,1994000,18629038,1.0,1.0,1893849.0 +20190620,GOOG,11179900,11201800,11050000,11109500,1003009,1.0,1.0,1893849.0 +20190620,IBM,1389300,1395200,1382100,1388500,2216468,3.0,3.0,21848515.0 +20190621,AAPL,1984400,2008500,1981400,1988000,26177066,3.0,3.0,21848515.0 +20190621,GOOG,11075800,11249000,11071300,11224400,1469439,3.0,3.0,21848515.0 +20190621,IBM,1386900,1395400,1384000,1391800,3222090,3.0,3.0,30868595.0 +20190624,AAPL,1985600,2001600,1981700,1985500,14854581,3.0,3.0,30868595.0 +20190624,GOOG,11191800,11221600,11110000,11158300,1264074,3.0,3.0,30868595.0 +20190624,IBM,1392000,1401400,1390500,1393600,1762740,1.0,1.0,1762740.0 +20190625,AAPL,1984800,1992900,1952900,1955700,19610359,1.0,1.0,1762740.0 +20190625,GOOG,11129300,11154600,10838000,10863400,1352189,1.0,1.0,1762740.0 +20190625,IBM,1394600,1395000,1381300,1383700,2251465,-3.0,0.0,0.0 +20190626,AAPL,1978500,2009900,1973400,1998000,22885387,-3.0,0.0,0.0 +20190626,GOOG,10876900,10933000,10722900,10798000,1591139,-3.0,0.0,0.0 +20190626,IBM,1388700,1396800,1384200,1385300,1612064,0.0,1.0,14.383021847871241 +20190627,AAPL,2004000,2015700,1995700,1997300,15632774,0.0,1.0,14.383021847871241 +20190627,GOOG,10848400,10870000,10751800,10759300,870095,0.0,1.0,14.383021847871241 +20190627,IBM,1387200,1393000,1379600,1385200,1675796,0.0,1.0,9.328566245533466 +20190628,AAPL,1987200,1994900,1970500,1979200,19956663,0.0,1.0,9.328566245533466 +20190628,GOOG,10763600,10810000,10732500,10806200,1252274,0.0,1.0,9.328566245533466 +20190628,IBM,1385700,1391400,1378600,1379200,2567968,-2.0,0.0,0.0 +20190701,AAPL,2032800,2044900,2006500,2016800,24264641,-2.0,0.0,0.0 +20190701,GOOG,10994600,11075800,10937200,10979500,1288236,-2.0,0.0,0.0 +20190701,IBM,1396000,1414900,1392900,1399200,2717318,3.0,3.0,28270195.0 +20190702,AAPL,2014300,2031300,2013600,2027100,15965830,3.0,3.0,28270195.0 +20190702,GOOG,11013900,11117700,10989000,11117700,871863,3.0,3.0,28270195.0 +20190702,IBM,1396700,1404200,1394800,1402000,2091296,1.0,1.0,871863.0 +20190703,AAPL,2032100,2044400,2027000,2044100,9430155,1.0,1.0,871863.0 +20190703,GOOG,11160500,11267700,11138100,11219200,669181,1.0,1.0,871863.0 +20190703,IBM,1407200,1418100,1404900,1414900,1479573,2.0,2.0,2148754.0 +20190705,AAPL,2033500,2050800,2029000,2042500,15239601,2.0,2.0,2148754.0 +20190705,GOOG,11177900,11329200,11150000,11320300,1000689,2.0,2.0,2148754.0 +20190705,IBM,1408700,1414900,1399100,1413700,1819874,2.0,2.0,16240290.0 +20190708,AAPL,2009400,2014000,1984100,2000200,22281039,2.0,2.0,16240290.0 +20190708,GOOG,11259200,11270000,11113200,11163500,1031603,2.0,2.0,16240290.0 +20190708,IBM,1411000,1412800,1402800,1405800,1963230,-2.0,0.0,0.0 +20190709,AAPL,1992000,2015100,1988100,2012200,17873539,-2.0,0.0,0.0 +20190709,GOOG,11122300,11281000,11070000,11245800,1153922,-2.0,0.0,0.0 +20190709,IBM,1406100,1409900,1391300,1393400,2873887,-2.0,0.0,0.0 +20190710,AAPL,2019000,2037300,2015600,2032100,15735306,-2.0,0.0,0.0 +20190710,GOOG,11310000,11421000,11308800,11404800,1089447,-2.0,0.0,0.0 +20190710,IBM,1400000,1419000,1399300,1404600,2178813,3.0,3.0,19003566.0 +20190711,AAPL,2033500,2043900,2017100,2017400,16252329,3.0,3.0,19003566.0 +20190711,GOOG,11429500,11532200,11393000,11442100,1106386,3.0,3.0,19003566.0 +20190711,IBM,1407900,1415400,1403000,1412400,1873952,2.0,2.0,17358715.0 +20190712,AAPL,2025300,2040000,2022000,2032400,15652854,2.0,2.0,17358715.0 +20190712,GOOG,11439900,11472700,11386500,11445600,766543,2.0,2.0,17358715.0 +20190712,IBM,1419200,1429100,1417300,1426900,2255321,1.0,1.0,2255321.0 +20190715,AAPL,2040500,2058700,2040000,2052000,14611018,1.0,1.0,2255321.0 +20190715,GOOG,11455300,11508800,11396200,11505600,809028,1.0,1.0,2255321.0 +20190715,IBM,1428900,1435000,1421400,1433100,2100010,2.0,2.0,16711028.0 +20190716,AAPL,2047400,2061100,2035000,2044900,14612121,2.0,2.0,16711028.0 +20190716,GOOG,11458000,11585800,11450000,11536000,1156894,2.0,2.0,16711028.0 +20190716,IBM,1431600,1440300,1430600,1435200,2924182,3.0,3.0,18693197.0 +20190717,AAPL,2043100,2050900,2032700,2032800,11705771,3.0,3.0,18693197.0 +20190717,GOOG,11524900,11583200,11457100,11464900,1001430,3.0,3.0,18693197.0 +20190717,IBM,1436800,1438000,1419500,1431000,4677082,-2.0,0.0,0.0 +20190718,AAPL,2040000,2058800,2037000,2056600,15514507,-2.0,0.0,0.0 +20190718,GOOG,11410000,11476900,11327300,11468000,959692,-2.0,0.0,0.0 +20190718,IBM,1424500,1503000,1424100,1496300,11889986,0.0,1.0,12.38937700845688 +20190719,AAPL,2057800,2065000,2023600,2025700,18324264,0.0,1.0,12.38937700845688 +20190719,GOOG,11497700,11512700,11296200,11300100,1227100,0.0,1.0,12.38937700845688 +20190719,IBM,1499600,1515800,1495600,1498100,6056454,0.0,1.0,1.2470085463090963 +20190722,AAPL,2037800,2072300,2036100,2072300,19154085,0.0,1.0,1.2470085463090963 +20190722,GOOG,11340700,11392700,11242400,11382800,1075273,0.0,1.0,1.2470085463090963 +20190722,IBM,1501600,1519400,1497000,1497500,3660075,1.0,2.0,21.217086265534427 +20190723,AAPL,2083700,2089100,2073000,2088300,16514267,1.0,2.0,21.217086265534427 +20190723,GOOG,11434700,11469100,11317700,11465600,988570,1.0,2.0,21.217086265534427 +20190723,IBM,1505700,1507200,1483900,1503800,2908133,0.0,1.0,5.678649153941722 +20190724,AAPL,2076700,2091500,2071800,2086700,13148873,0.0,1.0,5.678649153941722 +20190724,GOOG,11311500,11439800,11270000,11381800,1292101,0.0,1.0,5.678649153941722 +20190724,IBM,1501200,1514500,1492000,1500400,2661472,1.0,1.0,13148873.0 +20190725,AAPL,2087200,2092400,2067300,2070500,11966186,1.0,1.0,13148873.0 +20190725,GOOG,11370100,11419000,11210000,11348600,1579386,1.0,1.0,13148873.0 +20190725,IBM,1498000,1506200,1486100,1504100,2388821,-1.0,0.5,0.8834020445943516 +20190726,AAPL,2074000,2097300,2071400,2077500,15726362,-1.0,0.5,0.8834020445943516 +20190726,GOOG,12240400,12656300,12232400,12477400,4327585,-1.0,0.5,0.8834020445943516 +20190726,IBM,1509200,1514000,1501000,1513400,1955575,2.0,2.0,20053947.0 +20190729,AAPL,2084700,2106400,2084100,2096700,19204268,2.0,2.0,20053947.0 +20190729,GOOG,12410000,12472300,12282700,12387500,2056580,2.0,2.0,20053947.0 +20190729,IBM,1511100,1514600,1503300,1509300,1617308,2.0,2.0,20821576.0 +20190730,AAPL,2088300,2106600,2073100,2088800,24740263,2.0,2.0,20821576.0 +20190730,GOOG,12265800,12348700,12232600,12251400,1360406,2.0,2.0,20821576.0 +20190730,IBM,1500000,1503900,1492400,1497700,2278632,0.0,1.0,10.857507048088502 +20190731,AAPL,2164000,2213700,2113000,2127800,63857734,0.0,1.0,10.857507048088502 +20190731,GOOG,12233300,12512300,12071100,12166800,1526178,0.0,1.0,10.857507048088502 +20190731,IBM,1497000,1501800,1463900,1482400,2748127,0.0,1.0,15.296969214878208 +20190801,AAPL,2140100,2180300,2067300,2084500,51934597,0.0,1.0,15.296969214878208 +20190801,GOOG,12143600,12343300,12055100,12094800,1804644,0.0,1.0,15.296969214878208 +20190801,IBM,1489000,1528100,1485000,1503000,5835516,-1.0,0.5,0.10858947561243003 +20190802,AAPL,2051500,2064300,2016300,2040900,36037467,-1.0,0.5,0.10858947561243003 +20190802,GOOG,12007400,12071000,11889200,11936300,1455908,-1.0,0.5,0.10858947561243003 +20190802,IBM,1490300,1528900,1455900,1472800,7643491,-2.0,0.3333333333333333,0.1693403126393401 +20190805,AAPL,1978800,1986500,1925800,1932200,45466995,-2.0,0.3333333333333333,0.1693403126393401 +20190805,GOOG,11706000,11752400,11401800,11523200,2267696,-2.0,0.3333333333333333,0.1693403126393401 +20190805,IBM,1449800,1451000,1391700,1407500,6186074,-3.0,0.0,0.0 +20190806,AAPL,1964300,1980700,1940400,1969800,32111414,-3.0,0.0,0.0 +20190806,GOOG,11628500,11800000,11598900,11693600,1363456,-3.0,0.0,0.0 +20190806,IBM,1420000,1424700,1393100,1407300,4294639,0.0,0.0,0.0 +20190807,AAPL,1954900,1995600,1938200,1991400,29406192,0.0,0.0,0.0 +20190807,GOOG,11567500,11784400,11491600,11738200,1214158,0.0,0.0,0.0 +20190807,IBM,1390000,1395800,1364800,1391300,5028053,0.0,1.0,5.848425225430201 +20190808,AAPL,2003100,2035300,1993900,2034500,23463801,0.0,1.0,5.848425225430201 +20190808,GOOG,11832200,12050100,11733800,12045100,1254711,0.0,1.0,5.848425225430201 +20190808,IBM,1384500,1404200,1377800,1401300,4344213,2.0,2.0,24718512.0 +20190809,AAPL,2013000,2027600,1992900,2009900,21848205,2.0,2.0,24718512.0 +20190809,GOOG,11980000,12039700,11835200,11881400,917903,2.0,2.0,24718512.0 +20190809,IBM,1393000,1393000,1353500,1361200,4720674,-1.0,0.0,0.0 +20190812,AAPL,1994600,2020600,1991500,2005000,19913300,-1.0,0.0,0.0 +20190812,GOOG,11792300,11848600,11675000,11742300,865880,-1.0,0.0,0.0 +20190812,IBM,1356600,1358700,1331800,1340900,3390677,-3.0,0.0,0.0 +20190813,AAPL,2010000,2121400,2008300,2089800,43883110,-3.0,0.0,0.0 +20190813,GOOG,11714600,12049300,11714600,11972600,1117326,-3.0,0.0,0.0 +20190813,IBM,1338100,1365700,1328500,1357800,3939008,1.0,2.0,11.424306830552261 +20190814,AAPL,2032800,2064400,2025000,2027500,31227195,1.0,2.0,11.424306830552261 +20190814,GOOG,11763700,11823600,11607900,11641300,1330650,1.0,2.0,11.424306830552261 +20190814,IBM,1339100,1341600,1309800,1312400,3912510,-2.0,0.0,0.0 +20190815,AAPL,2034600,2051500,1996700,2016800,24652850,-2.0,0.0,0.0 +20190815,GOOG,11684000,11759200,11620800,11675700,1095137,-2.0,0.0,0.0 +20190815,IBM,1314200,1323600,1302500,1318800,3303365,-2.0,0.0,0.0 +20190816,AAPL,2041700,2071600,2038500,2064400,24842738,-2.0,0.0,0.0 +20190816,GOOG,11795500,11826800,11715800,11776000,1161671,-2.0,0.0,0.0 +20190816,IBM,1330400,1345900,1329800,1337400,2406250,3.0,3.0,28410659.0 +20190819,AAPL,2106900,2127300,2100400,2103400,21632067,3.0,3.0,28410659.0 +20190819,GOOG,11906000,12069900,11900900,11985300,1003576,3.0,3.0,28410659.0 +20190819,IBM,1348800,1363200,1348800,1350300,2773650,3.0,3.0,25409293.0 +20190820,AAPL,2107800,2133500,2103200,2103500,21348212,3.0,3.0,25409293.0 +20190820,GOOG,11953900,11961100,11820000,11826900,682728,3.0,3.0,25409293.0 +20190820,IBM,1351100,1352700,1328200,1331000,2504433,0.0,1.0,8.524169742213108 +20190821,AAPL,2129700,2136500,2116100,2126700,18922195,0.0,1.0,8.524169742213108 +20190821,GOOG,11920600,11990000,11871100,11912400,646709,0.0,1.0,8.524169742213108 +20190821,IBM,1347100,1359000,1338000,1342800,2467302,1.0,1.0,18922195.0 +20190822,AAPL,2131900,2144300,2107500,2124500,19534453,1.0,1.0,18922195.0 +20190822,GOOG,11940700,11980500,11784500,11895000,784498,1.0,1.0,18922195.0 +20190822,IBM,1349900,1356400,1338500,1343400,2191473,0.0,1.0,24.900577184390528 +20190823,AAPL,2093900,2120500,2010000,2026300,41268018,0.0,1.0,24.900577184390528 +20190823,GOOG,11820500,11940800,11476000,11517200,1399418,0.0,1.0,24.900577184390528 +20190823,IBM,1336000,1342000,1288300,1295700,3740545,-3.0,0.0,0.0 +20190826,AAPL,2058900,2071900,2050600,2066000,23135836,-3.0,0.0,0.0 +20190826,GOOG,11605000,11694700,11528000,11694700,1029694,-3.0,0.0,0.0 +20190826,IBM,1310100,1313000,1291800,1299900,2342907,0.0,0.0,0.0 +20190827,AAPL,2078100,2085500,2035400,2041300,19567155,0.0,0.0,0.0 +20190827,GOOG,11805300,11829500,11615600,11682700,884564,0.0,0.0,0.0 +20190827,IBM,1310800,1316900,1303300,1311700,3754502,0.0,0.0,0.0 +20190828,AAPL,2041000,2057200,2033300,2055200,14183557,0.0,0.0,0.0 +20190828,GOOG,11626900,11762100,11572000,11710200,625006,0.0,0.0,0.0 +20190828,IBM,1303300,1328800,1300600,1327200,2210239,0.0,1.0,0.15583107960859183 +20190829,AAPL,2086900,2093200,2066500,2091000,18608188,0.0,1.0,0.15583107960859183 +20190829,GOOG,11820700,11964100,11811200,11930400,978995,0.0,1.0,0.15583107960859183 +20190829,IBM,1341300,1356900,1340400,1349300,2518503,3.0,3.0,22105686.0 +20190830,AAPL,2101500,2104500,2072000,2087400,17065976,3.0,3.0,22105686.0 +20190830,GOOG,11985000,11995000,11838100,11884200,846644,3.0,3.0,22105686.0 +20190830,IBM,1356800,1360600,1343800,1354600,2001659,3.0,3.0,19914279.0 +20190903,AAPL,2064200,2069800,2042200,2056900,17995638,3.0,3.0,19914279.0 +20190903,GOOG,11784700,11867500,11632000,11682400,1293007,3.0,3.0,19914279.0 +20190903,IBM,1346700,1349000,1333600,1341500,2033141,-3.0,0.0,0.0 +20190904,AAPL,2083900,2094800,2073100,2092500,17133945,-3.0,0.0,0.0 +20190904,GOOG,11784500,11834800,11707600,11814100,967215,-3.0,0.0,0.0 +20190904,IBM,1358500,1364300,1351500,1363100,1561819,1.0,1.0,1561819.0 +20190905,AAPL,2118500,2139600,2115100,2132800,20682004,1.0,1.0,1561819.0 +20190905,GOOG,11923200,12130400,11915300,12112300,1284567,1.0,1.0,1561819.0 +20190905,IBM,1383500,1417000,1380500,1409700,4210893,3.0,3.0,26177464.0 +20190906,AAPL,2139800,2144200,2125100,2132700,17454572,3.0,3.0,26177464.0 +20190906,GOOG,12073900,12121000,12026000,12049300,916327,3.0,3.0,26177464.0 +20190906,IBM,1415200,1415200,1404600,1405500,2228125,1.0,1.0,17454572.0 +20190909,AAPL,2148600,2164400,2110700,2141500,23787972,1.0,1.0,17454572.0 +20190909,GOOG,12076600,12200000,11927200,12049200,1345648,1.0,1.0,17454572.0 +20190909,IBM,1405900,1430100,1404600,1426200,3474580,2.0,3.0,1.2026329945234508 +20190910,AAPL,2138100,2167800,2117100,2167700,28051341,2.0,3.0,1.2026329945234508 +20190910,GOOG,11955400,12100000,11944700,12074500,1131329,2.0,3.0,1.2026329945234508 +20190910,IBM,1430000,1454600,1429600,1450200,4363217,2.0,2.0,32414558.0 +20190911,AAPL,2181200,2236400,2177300,2235700,40687303,2.0,2.0,32414558.0 +20190911,GOOG,12041800,12225900,12022000,12201700,1150453,2.0,2.0,32414558.0 +20190911,IBM,1448500,1450800,1427200,1436000,3087123,2.0,2.0,41837756.0 +20190912,AAPL,2248000,2264200,2228600,2230900,27809109,2.0,2.0,41837756.0 +20190912,GOOG,12249800,12416800,12230000,12340000,1554159,2.0,2.0,41837756.0 +20190912,IBM,1440300,1440700,1418800,1436100,1985446,1.0,2.0,14.789255411630435 +20190913,AAPL,2200100,2207900,2170200,2188000,36334641,1.0,2.0,14.789255411630435 +20190913,GOOG,12313500,12408800,12270100,12392200,1136449,1.0,2.0,14.789255411630435 +20190913,IBM,1440000,1446500,1432600,1436400,1660207,-1.0,0.0,0.0 +20190916,AAPL,2177400,2201300,2175600,2199000,18858994,-1.0,0.0,0.0 +20190916,GOOG,12304700,12395600,12256000,12313000,938240,-1.0,0.0,0.0 +20190916,IBM,1425000,1435900,1422700,1424300,1473455,0.0,0.0,0.0 +20190917,AAPL,2198700,2208200,2191200,2206500,15950731,0.0,0.0,0.0 +20190917,GOOG,12316800,12350500,12236700,12291600,801300,0.0,0.0,0.0 +20190917,IBM,1424700,1424800,1406900,1421800,1965391,-1.0,0.5,5.765273751206767 +20190918,AAPL,2211300,2228500,2194500,2227700,22852282,-1.0,0.5,5.765273751206767 +20190918,GOOG,12282800,12356100,12163100,12326500,957556,-1.0,0.5,5.765273751206767 +20190918,IBM,1420000,1422900,1405300,1422100,1732555,-1.0,0.5,8.494921585020098 +20190919,AAPL,2221200,2237600,2203700,2209500,19957797,-1.0,0.5,8.494921585020098 +20190919,GOOG,12320200,12444900,12320200,12386400,898159,-1.0,0.5,8.494921585020098 +20190919,IBM,1425300,1450100,1424600,1429400,2760621,3.0,3.0,23616577.0 +20190920,AAPL,2213900,2225500,2174800,2176900,31800687,3.0,3.0,23616577.0 +20190920,GOOG,12347500,12433200,12228100,12296800,1527184,3.0,3.0,23616577.0 +20190920,IBM,1435100,1438300,1418300,1418300,3679511,-1.0,0.0,0.0 +20190923,AAPL,2189100,2198400,2176500,2186800,16559468,-1.0,0.0,0.0 +20190923,GOOG,12271200,12392300,12240000,12340900,924827,-1.0,0.0,0.0 +20190923,IBM,1411900,1422100,1405600,1420300,1450872,-1.0,0.0,0.0 +20190924,AAPL,2211400,2224800,2171900,2176800,27421294,-1.0,0.0,0.0 +20190924,GOOG,12400000,12467800,12110200,12190900,1369997,-1.0,0.0,0.0 +20190924,IBM,1422800,1428900,1410700,1417800,2612966,-1.0,0.5,0.047583729399282584 +20190925,AAPL,2187500,2215000,2171500,2209900,19455919,-1.0,0.5,0.047583729399282584 +20190925,GOOG,12164300,12484000,12100000,12463100,1342641,-1.0,0.5,0.047583729399282584 +20190925,IBM,1418700,1436000,1408600,1432000,1927961,0.0,1.0,0.15725136740235862 +20190926,AAPL,2198800,2209400,2188300,2198900,16281412,0.0,1.0,0.15725136740235862 +20190926,GOOG,12419900,12459800,12324500,12420000,1336283,0.0,1.0,0.15725136740235862 +20190926,IBM,1431100,1438400,1414100,1436000,1821053,1.0,1.0,1821053.0 +20190927,AAPL,2204300,2209600,2172800,2188500,23029276,1.0,1.0,1821053.0 +20190927,GOOG,12425000,12444600,12144600,12250800,1168550,1.0,1.0,1821053.0 +20190927,IBM,1441100,1450700,1423800,1433100,1905797,1.0,1.0,1905797.0 +20190930,AAPL,2209300,2245800,2208000,2239800,22658210,1.0,1.0,1905797.0 +20190930,GOOG,12214100,12260000,12123400,12186300,1184162,1.0,1.0,1905797.0 +20190930,IBM,1437400,1465700,1437400,1454100,3060246,1.0,2.0,21.718697272839357 +20191001,AAPL,2251300,2282000,2241900,2245800,32509565,1.0,2.0,21.718697272839357 +20191001,GOOG,12207900,12312500,12035800,12051700,1130161,1.0,2.0,21.718697272839357 +20191001,IBM,1456000,1473500,1435400,1436200,2484575,1.0,2.0,30.963853822596956 +20191002,AAPL,2230900,2235900,2179300,2189600,31739723,1.0,2.0,30.963853822596956 +20191002,GOOG,11969300,11969800,11717600,11771900,1373217,1.0,2.0,30.963853822596956 +20191002,IBM,1421000,1422700,1405900,1417700,2622675,-3.0,0.0,0.0 +20191003,AAPL,2185300,2209600,2151500,2208100,26301723,-3.0,0.0,0.0 +20191003,GOOG,11822500,11894900,11620600,11873100,1506514,-3.0,0.0,0.0 +20191003,IBM,1415000,1420600,1391900,1419800,2531777,-3.0,0.0,0.0 +20191004,AAPL,2257100,2274900,2239000,2270100,31236611,-3.0,0.0,0.0 +20191004,GOOG,11924100,12115400,11890400,12088400,1012930,-3.0,0.0,0.0 +20191004,IBM,1421300,1430500,1410300,1429900,1697755,3.0,3.0,33947296.0 +20191007,AAPL,2263100,2299300,2258600,2270600,28675249,3.0,3.0,33947296.0 +20191007,GOOG,12050400,12184000,12040000,12072500,762527,3.0,3.0,33947296.0 +20191007,IBM,1423700,1427000,1412200,1412600,1672475,2.0,2.0,29437776.0 +20191008,AAPL,2258800,2280600,2243300,2243900,25163243,2.0,2.0,29437776.0 +20191008,GOOG,11964300,12060800,11890100,11892400,922604,2.0,2.0,29437776.0 +20191008,IBM,1401500,1404700,1382500,1383800,2699773,-2.0,0.0,0.0 +20191009,AAPL,2270800,2277900,2256500,2270000,17033593,-2.0,0.0,0.0 +20191009,GOOG,12001100,12083500,11974300,12019300,768220,-2.0,0.0,0.0 +20191009,IBM,1397800,1403300,1388000,1396300,2215673,0.0,0.0,0.0 +20191010,AAPL,2279000,2304400,2273000,2300900,26646576,0.0,0.0,0.0 +20191010,GOOG,12002600,12150000,11973400,12089500,725405,0.0,0.0,0.0 +20191010,IBM,1398400,1417800,1395700,1411300,2221612,3.0,3.0,29593593.0 +20191011,AAPL,2329500,2376400,2323000,2362200,38743375,3.0,3.0,29593593.0 +20191011,GOOG,12220100,12285500,12137000,12145700,1141581,3.0,3.0,29593593.0 +20191011,IBM,1427500,1445000,1426100,1426700,2578804,3.0,3.0,42463760.0 +20191014,AAPL,2351000,2381400,2346700,2358900,22169934,3.0,3.0,42463760.0 +20191014,GOOG,12137800,12263300,12119700,12171300,786716,3.0,3.0,42463760.0 +20191014,IBM,1423100,1424300,1413200,1419900,1938501,1.0,1.0,22169934.0 +20191015,AAPL,2363900,2376500,2348800,2353200,18817360,1.0,1.0,22169934.0 +20191015,GOOG,12216800,12472000,12202900,12425100,1267548,1.0,1.0,22169934.0 +20191015,IBM,1425400,1437200,1418100,1429300,2580404,1.0,1.0,1267548.0 +20191016,AAPL,2333700,2352400,2332000,2343900,16250144,1.0,1.0,1267548.0 +20191016,GOOG,12408300,12547400,12382000,12436500,975593,1.0,1.0,1267548.0 +20191016,IBM,1424500,1429500,1414000,1420400,4356894,0.0,1.0,0.060035960296721064 +20191017,AAPL,2350900,2361500,2335300,2352900,15525663,0.0,1.0,0.060035960296721064 +20191017,GOOG,12509400,12634600,12498600,12530600,853693,0.0,1.0,0.060035960296721064 +20191017,IBM,1350000,1360000,1329200,1342500,14363555,0.0,1.0,0.05943465945582413 +20191018,AAPL,2343600,2375800,2342900,2362800,21645988,0.0,1.0,0.05943465945582413 +20191018,GOOG,12542200,12590600,12410700,12454900,1218185,0.0,1.0,0.05943465945582413 +20191018,IBM,1343900,1344900,1322700,1340900,6279388,0.0,1.0,3.4471493081809883 +20191021,AAPL,2376500,2409900,2373200,2405300,19185571,0.0,1.0,3.4471493081809883 +20191021,GOOG,12517900,12549300,12405700,12460400,871520,0.0,1.0,3.4471493081809883 +20191021,IBM,1325400,1330900,1309000,1325800,5444353,-1.0,0.5,3.0376752350783494 +20191022,AAPL,2411700,2422000,2396200,2399700,19151854,-1.0,0.5,3.0376752350783494 +20191022,GOOG,12489900,12506200,12413900,12429400,960662,-1.0,0.5,3.0376752350783494 +20191022,IBM,1325300,1340500,1316100,1339400,3711584,1.0,1.0,19151854.0 +20191023,AAPL,2421000,2432400,2412200,2431400,17279116,1.0,1.0,19151854.0 +20191023,GOOG,12414700,12598900,12414700,12592400,830273,1.0,1.0,19151854.0 +20191023,IBM,1335200,1345600,1327300,1343900,3112861,3.0,3.0,21222250.0 +20191024,AAPL,2445100,2448000,2418100,2436000,15751993,3.0,3.0,21222250.0 +20191024,GOOG,12614500,12640000,12539300,12604600,908331,3.0,3.0,21222250.0 +20191024,IBM,1347900,1350700,1333100,1340800,2249594,3.0,3.0,18909918.0 +20191025,AAPL,2431700,2467300,2428800,2465800,15719212,3.0,3.0,18909918.0 +20191025,GOOG,12531100,12695400,12500000,12650700,1085974,3.0,3.0,18909918.0 +20191025,IBM,1341000,1359200,1341000,1354100,2267458,3.0,3.0,19072644.0 +20191028,AAPL,2475000,2492500,2467300,2490400,21869429,3.0,3.0,19072644.0 +20191028,GOOG,12760000,12993300,12725400,12901800,2032974,3.0,3.0,19072644.0 +20191028,IBM,1360000,1366100,1354500,1359700,2629152,3.0,3.0,26531555.0 +20191029,AAPL,2490100,2497400,2425700,2432900,32432237,3.0,3.0,26531555.0 +20191029,GOOG,12765900,12815900,12571000,12628200,1703363,3.0,3.0,26531555.0 +20191029,IBM,1354400,1355700,1334400,1338200,3793673,-1.0,0.5,0.8952773581119149 +20191030,AAPL,2449000,2453000,2412100,2433000,25182163,-1.0,0.5,0.8952773581119149 +20191030,GOOG,12564400,12693600,12518500,12612000,1257190,-1.0,0.5,0.8952773581119149 +20191030,IBM,1338200,1352800,1332600,1352500,1995841,-3.0,0.0,0.0 +20191031,AAPL,2472000,2491800,2423700,2488400,29358225,-3.0,0.0,0.0 +20191031,GOOG,12612800,12675500,12507900,12602000,1125543,-3.0,0.0,0.0 +20191031,IBM,1351000,1351100,1332300,1337500,2406865,-2.0,0.0,0.0 +20191101,AAPL,2495400,2559300,2491700,2558300,34738822,-2.0,0.0,0.0 +20191101,GOOG,12649200,12746200,12602900,12745000,1437033,-2.0,0.0,0.0 +20191101,IBM,1345000,1355600,1340900,1355300,2494236,3.0,3.0,38670091.0 +20191104,AAPL,2573700,2578500,2553800,2574800,23068018,3.0,3.0,38670091.0 +20191104,GOOG,12771000,12941000,12762700,12909600,1330494,3.0,3.0,38670091.0 +20191104,IBM,1364100,1377400,1362300,1376800,2675125,3.0,3.0,27073637.0 +20191105,AAPL,2570600,2581900,2563200,2571500,17418674,3.0,3.0,27073637.0 +20191105,GOOG,12934500,12989300,12913100,12918200,1092319,3.0,3.0,27073637.0 +20191105,IBM,1378000,1387600,1376500,1378900,2148099,3.0,3.0,20659092.0 +20191106,AAPL,2568700,2574900,2553600,2572400,15127808,3.0,3.0,20659092.0 +20191106,GOOG,12894600,12934200,12827400,12913400,925635,3.0,3.0,20659092.0 +20191106,IBM,1379300,1387700,1375500,1387700,2968964,0.0,1.0,0.19625870449968694 +20191107,AAPL,2587400,2603500,2581100,2594900,21971865,0.0,1.0,0.19625870449968694 +20191107,GOOG,12947300,13238000,12941200,13088600,1894197,0.0,1.0,0.19625870449968694 +20191107,IBM,1378700,1391400,1375900,1376900,2563423,3.0,3.0,26429485.0 +20191108,AAPL,2587000,2604400,2568500,2601400,15707487,3.0,3.0,26429485.0 +20191108,GOOG,13054800,13181900,13035300,13113100,1161270,3.0,3.0,26429485.0 +20191108,IBM,1375800,1376100,1362200,1376000,1881670,0.0,1.0,8.347631093656167 +20191111,AAPL,2583000,2624700,2582700,2622000,19212474,0.0,1.0,8.347631093656167 +20191111,GOOG,13033700,13070000,12974600,12989200,902335,0.0,1.0,8.347631093656167 +20191111,IBM,1371400,1371400,1350000,1354500,2089368,0.0,1.0,9.195351895884306 +20191112,AAPL,2615600,2627900,2609200,2619800,19134367,0.0,1.0,9.195351895884306 +20191112,GOOG,13008900,13100000,12955000,12987900,851300,0.0,1.0,9.195351895884306 +20191112,IBM,1357000,1366400,1350200,1356000,2343046,0.0,1.0,22.476643956302127 +20191113,AAPL,2611300,2647800,2610500,2644700,23793564,0.0,1.0,22.476643956302127 +20191113,GOOG,12940700,13040000,12935100,12974400,739932,0.0,1.0,22.476643956302127 +20191113,IBM,1352800,1355800,1338500,1344700,2444171,-1.0,0.5,7.472611281733035 +20191114,AAPL,2638800,2648800,2620900,2626900,19914659,-1.0,0.5,7.472611281733035 +20191114,GOOG,12968900,13170500,12956200,13115800,1053847,-1.0,0.5,7.472611281733035 +20191114,IBM,1341300,1343300,1333400,1339900,3652342,1.0,2.0,5.741112414992901 +20191115,AAPL,2637000,2657800,2630100,2657500,22034209,1.0,2.0,5.741112414992901 +20191115,GOOG,13162100,13348800,13142200,13348600,1385295,1.0,2.0,5.741112414992901 +20191115,IBM,1343900,1351200,1340300,1343600,2726635,2.0,2.0,23419504.0 +20191118,AAPL,2657900,2674300,2642300,2671200,17721094,2.0,2.0,23419504.0 +20191118,GOOG,13336400,13359400,13175000,13206500,1209170,2.0,2.0,23419504.0 +20191118,IBM,1343000,1344700,1332300,1342600,2344828,1.0,2.0,8.073199398847166 +20191119,AAPL,2678600,2680000,2654000,2662900,14461687,1.0,2.0,8.073199398847166 +20191119,GOOG,13273900,13278700,13128500,13151300,978451,1.0,2.0,8.073199398847166 +20191119,IBM,1348800,1353800,1344600,1345000,2113812,1.0,2.0,16.94055093203441 +20191120,AAPL,2655500,2660800,2604000,2632200,21910862,1.0,2.0,16.94055093203441 +20191120,GOOG,13117400,13152200,12910000,13028600,1045769,1.0,2.0,16.94055093203441 +20191120,IBM,1343300,1344600,1327600,1331700,2656759,-3.0,0.0,0.0 +20191121,AAPL,2639800,2640100,2611800,2620100,25496077,-3.0,0.0,0.0 +20191121,GOOG,13016400,13125900,12927800,13011200,823543,-3.0,0.0,0.0 +20191121,IBM,1334000,1341700,1330000,1338200,1922589,0.0,0.0,0.0 +20191122,AAPL,2625500,2631800,2608400,2618400,14050291,0.0,0.0,0.0 +20191122,GOOG,13050000,13085700,12913200,12953500,1129508,0.0,0.0,0.0 +20191122,IBM,1341900,1346500,1335900,1342800,1854309,1.0,1.0,1854309.0 +20191125,AAPL,2626400,2664400,2625200,2664200,14952237,1.0,1.0,1854309.0 +20191125,GOOG,12993600,13114600,12977200,13069500,824157,1.0,1.0,1854309.0 +20191125,IBM,1345800,1360000,1343500,1359600,1951649,2.0,2.0,16903886.0 +20191126,AAPL,2669300,2672100,2625000,2641000,14612190,2.0,2.0,16903886.0 +20191126,GOOG,13093300,13150000,13052200,13135400,808707,2.0,2.0,16903886.0 +20191126,IBM,1360800,1360800,1347700,1350600,2161558,3.0,3.0,17582455.0 +20191127,AAPL,2656300,2679800,2653100,2679400,14257370,3.0,3.0,17582455.0 +20191127,GOOG,13149200,13183600,13099400,13135000,839355,3.0,3.0,17582455.0 +20191127,IBM,1354200,1357100,1336200,1337400,2736584,1.0,2.0,5.516631318461264 +20191129,AAPL,2666000,2680000,2659000,2671800,8740858,1.0,2.0,5.516631318461264 +20191129,GOOG,13071100,13103600,13039700,13044800,443442,1.0,2.0,5.516631318461264 +20191129,IBM,1335000,1344900,1330300,1344600,1258007,-1.0,0.5,5.137302381675854 +20191202,AAPL,2675900,2682500,2634500,2640900,19883796,-1.0,0.5,5.137302381675854 +20191202,GOOG,13034900,13058300,12810000,12897700,1228578,-1.0,0.5,5.137302381675854 +20191202,IBM,1345000,1345000,1324800,1329500,2379052,-2.0,0.3333333333333333,0.8464277988062539 +20191203,AAPL,2582500,2595300,2562900,2595200,25349659,-2.0,0.3333333333333333,0.8464277988062539 +20191203,GOOG,12798700,12986400,12786700,12952700,1020330,-2.0,0.3333333333333333,0.8464277988062539 +20191203,IBM,1318400,1324400,1307000,1320900,2988726,-3.0,0.0,0.0 +20191204,AAPL,2610700,2633100,2606900,2617400,14277781,-3.0,0.0,0.0 +20191204,GOOG,13071100,13258300,13047000,13203000,1375828,-3.0,0.0,0.0 +20191204,IBM,1328100,1336600,1319600,1320000,2572145,1.0,1.0,1375828.0 +20191205,AAPL,2637500,2658900,2627300,2655800,15167492,1.0,1.0,1375828.0 +20191205,GOOG,13293300,13296000,13163100,13287200,1000657,1.0,1.0,1375828.0 +20191205,IBM,1329500,1332400,1316300,1319000,3036627,2.0,2.0,16168149.0 +20191206,AAPL,2675000,2710000,2673000,2707000,22748535,2.0,2.0,16168149.0 +20191206,GOOG,13338700,13444200,13331200,13406200,1105070,2.0,2.0,16168149.0 +20191206,IBM,1328500,1338900,1327000,1332000,2927403,3.0,3.0,26781008.0 +20191209,AAPL,2700700,2707900,2649100,2669200,27578946,3.0,3.0,26781008.0 +20191209,GOOG,13382400,13595600,13370200,13435500,1182862,3.0,3.0,26781008.0 +20191209,IBM,1334000,1345600,1332600,1339400,2232481,2.0,2.0,3415343.0 +20191210,AAPL,2686000,2700700,2658600,2686200,20123240,2.0,2.0,3415343.0 +20191210,GOOG,13424900,13499500,13355200,13449500,929248,2.0,2.0,3415343.0 +20191210,IBM,1340700,1348400,1335600,1339000,2724122,1.0,1.0,2724122.0 +20191211,AAPL,2688000,2711000,2685000,2707400,16804424,1.0,1.0,2724122.0 +20191211,GOOG,13473400,13517500,13427000,13450200,704154,1.0,1.0,2724122.0 +20191211,IBM,1341000,1345000,1336800,1337600,2712692,1.0,1.0,16804424.0 +20191212,AAPL,2678200,2725500,2673200,2714600,30574418,1.0,1.0,16804424.0 +20191212,GOOG,13459400,13554200,13403500,13499300,1095676,1.0,1.0,16804424.0 +20191212,IBM,1337400,1356600,1336600,1353200,2732737,3.0,3.0,34402831.0 +20191213,AAPL,2714400,2753000,2709300,2752500,29562777,3.0,3.0,34402831.0 +20191213,GOOG,13497800,13531400,13437700,13478300,1184357,3.0,3.0,34402831.0 +20191213,IBM,1345800,1355000,1340100,1342300,2059243,1.0,1.0,29562777.0 +20191216,AAPL,2769900,2807900,2769500,2798600,26440928,1.0,1.0,29562777.0 +20191216,GOOG,13560000,13647500,13521000,13614400,1139317,1.0,1.0,29562777.0 +20191216,IBM,1347000,1354500,1338600,1341200,2164923,2.0,2.0,27580245.0 +20191217,AAPL,2796600,2817700,2788000,2804400,24199828,2.0,2.0,27580245.0 +20191217,GOOG,13635600,13650000,13514300,13548400,1499801,2.0,2.0,27580245.0 +20191217,IBM,1343300,1346900,1334600,1342300,2260885,1.0,2.0,11.367065994068694 +20191218,AAPL,2797100,2819000,2791200,2797100,22958590,1.0,2.0,11.367065994068694 +20191218,GOOG,13574500,13605200,13511400,13519400,1012765,1.0,2.0,11.367065994068694 +20191218,IBM,1345100,1350000,1341700,1344500,2112294,0.0,1.0,22.669217439386234 +20191219,AAPL,2795100,2811800,2789500,2800300,17549156,0.0,1.0,22.669217439386234 +20191219,GOOG,13518200,13584500,13488900,13562000,1083615,0.0,1.0,22.669217439386234 +20191219,IBM,1344600,1347100,1341900,1344800,2381597,-1.0,0.0,0.0 +20191220,AAPL,2821700,2826500,2785600,2792800,28653733,-1.0,0.0,0.0 +20191220,GOOG,13633500,13637000,13490000,13492900,1666550,-1.0,0.0,0.0 +20191220,IBM,1357400,1364100,1350300,1356200,4239216,2.0,3.0,1.206108083718097 +20191223,AAPL,2805800,2842500,2803700,2839700,18669478,2.0,3.0,1.206108083718097 +20191223,GOOG,13574300,13598000,13465900,13483400,710157,2.0,3.0,1.206108083718097 +20191223,IBM,1357000,1361200,1350100,1355600,1898481,0.0,1.0,26.28922618519567 +20191224,AAPL,2845200,2848900,2829300,2842700,9434609,0.0,1.0,26.28922618519567 +20191224,GOOG,13485000,13504800,13428200,13434800,273972,0.0,1.0,26.28922618519567 +20191224,IBM,1356200,1356200,1346100,1349600,1012044,-1.0,0.5,7.336307635363791 +20191226,AAPL,2848200,2899800,2847000,2899100,20594335,-1.0,0.5,7.336307635363791 +20191226,GOOG,13468600,13613800,13444300,13604000,575477,-1.0,0.5,7.336307635363791 +20191226,IBM,1349700,1353000,1346600,1349000,1481367,2.0,2.0,21169812.0 +20191227,AAPL,2910600,2939700,2881100,2898200,32582221,2.0,2.0,21169812.0 +20191227,GOOG,13625800,13647500,13493100,13513400,907153,2.0,2.0,21169812.0 +20191227,IBM,1350000,1357500,1348800,1352800,2180289,3.0,3.0,35669663.0 +20191230,AAPL,2895700,2926900,2852300,2917000,33654017,3.0,3.0,35669663.0 +20191230,GOOG,13516700,13527900,13339900,13363700,922092,3.0,3.0,35669663.0 +20191230,IBM,1352500,1353000,1325000,1327600,3309507,-2.0,0.0,0.0 +20191231,AAPL,2899300,2936800,2895200,2933700,21171424,-2.0,0.0,0.0 +20191231,GOOG,13330900,13383100,13292100,13368700,708707,-2.0,0.0,0.0 +20191231,IBM,1325500,1341200,1324000,1340200,2844027,-2.0,0.0,0.0 From 58ce899b5d25d74c2d1b5b9a960f67bfc6ae11a9 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Tue, 16 Dec 2025 18:08:28 -0400 Subject: [PATCH 043/103] Add Api helper methods for POST requests (#9134) * Add Api helper methods for POST requests * Support json serializer setting for json requests * Minor changes and cleanup * Make ApiConnection disposable --- Api/Api.cs | 25 +++++++ Api/ApiConnection.cs | 10 ++- Api/ApiUtils.cs | 65 +++++++++++++++++++ .../Authentication/OAuthTokenHandler.cs | 17 +++++ Tests/Api/ApiTests.cs | 4 +- 5 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 Api/ApiUtils.cs diff --git a/Api/Api.cs b/Api/Api.cs index 72fc0e3175e5..4dc2815eb3dc 100644 --- a/Api/Api.cs +++ b/Api/Api.cs @@ -207,6 +207,30 @@ public RestResponse AddProjectFile(int projectId, string name, string content) return result; } + /// + /// Makes a simple POST request to the specified endpoint with the given payload + /// + protected bool TryPost(string endpoint, IEnumerable> payload, out T result, + ApiConnection apiConnection = null, TimeSpan? timeout = null) + where T : RestResponse + { + using var request = ApiUtils.CreatePostRequest(endpoint, payload); + + return (apiConnection ?? ApiConnection).TryRequest(request, out result, timeout); + } + + /// + /// Makes a simple POST request to the specified endpoint with the given payload + /// + protected bool TryJsonPost(string endpoint, object payload, out T result, + ApiConnection apiConnection = null, JsonSerializerSettings jsonSerializerSettings = null, TimeSpan? timeout = null) + where T : RestResponse + { + using var request = ApiUtils.CreateJsonPostRequest(endpoint, payload, jsonSerializerSettings); + + return (apiConnection ?? ApiConnection).TryRequest(request, out result, timeout); + } + /// /// Update the name of a file @@ -1487,6 +1511,7 @@ public virtual void Dispose() } } _clientPool.DisposeSafely(); + ApiConnection?.DisposeSafely(); } /// diff --git a/Api/ApiConnection.cs b/Api/ApiConnection.cs index a02c025f2c4e..ef92850be6c4 100644 --- a/Api/ApiConnection.cs +++ b/Api/ApiConnection.cs @@ -30,7 +30,7 @@ namespace QuantConnect.Api /// /// API Connection and Hash Manager /// - public class ApiConnection + public class ApiConnection : IDisposable { /// /// Authorized client to use for requests. @@ -118,6 +118,14 @@ public void SetClient(string baseUrl, Dictionary defaultHeaders } } + /// + /// Disposes of the HTTP client + /// + public void Dispose() + { + _httpClient.Dispose(); + } + /// /// Place a secure request and get back an object of type T. /// diff --git a/Api/ApiUtils.cs b/Api/ApiUtils.cs new file mode 100644 index 000000000000..2b878129c327 --- /dev/null +++ b/Api/ApiUtils.cs @@ -0,0 +1,65 @@ +/* + * 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.Net.Http; +using System.Collections.Generic; +using Newtonsoft.Json; +using System.Net.Http.Headers; +using System.Net.Mime; + +namespace QuantConnect.Api +{ + /// + /// API utility methods + /// + public static class ApiUtils + { + /// + /// Creates a POST with the specified endpoint and payload as form url encoded content. + /// + /// The request endpoint + /// The request payload + /// The POST request + public static HttpRequestMessage CreatePostRequest(string endpoint, IEnumerable> payload = null) + { + var request = new HttpRequestMessage(HttpMethod.Post, endpoint); + if (payload != null) + { + request.Content = new FormUrlEncodedContent(payload); + } + + return request; + } + + /// + /// Creates a POST with the specified endpoint and payload as json body + /// + /// The request endpoint + /// The request payload + /// Settings for the json serializer + /// The POST request + public static HttpRequestMessage CreateJsonPostRequest(string endpoint, object payload = null, JsonSerializerSettings jsonSerializerSettings = null) + { + var request = new HttpRequestMessage(HttpMethod.Post, endpoint); + if (payload != null) + { + request.Content = new StringContent(JsonConvert.SerializeObject(payload, jsonSerializerSettings), + new MediaTypeHeaderValue(MediaTypeNames.Application.Json)); + } + + return request; + } + } +} diff --git a/Brokerages/Authentication/OAuthTokenHandler.cs b/Brokerages/Authentication/OAuthTokenHandler.cs index d82ed48e175b..26efc668bfb5 100644 --- a/Brokerages/Authentication/OAuthTokenHandler.cs +++ b/Brokerages/Authentication/OAuthTokenHandler.cs @@ -17,6 +17,7 @@ using RestSharp; using QuantConnect.Api; using System.Threading; +using QuantConnect.Util; namespace QuantConnect.Brokerages.Authentication { @@ -50,6 +51,8 @@ public sealed class OAuthTokenHandler : TokenHandler /// private TokenCredentials _tokenCredentials; + private bool _disposed; + /// /// Initializes a new instance of the class. /// @@ -96,5 +99,19 @@ public override TokenCredentials GetAccessToken(CancellationToken cancellationTo throw new InvalidOperationException($"{nameof(OAuthTokenHandler)}.{nameof(GetAccessToken)}: {ex.Message}"); } } + + /// + /// Disposes of resources + /// + protected override void Dispose(bool disposing) + { + if (disposing && !_disposed) + { + _disposed = true; + _apiClient?.DisposeSafely(); + } + + base.Dispose(disposing); + } } } diff --git a/Tests/Api/ApiTests.cs b/Tests/Api/ApiTests.cs index 5f7ff134eac6..3fa96ee57cce 100644 --- a/Tests/Api/ApiTests.cs +++ b/Tests/Api/ApiTests.cs @@ -34,7 +34,7 @@ public class ApiTest : ApiTestBase [Test, Explicit("Requires configured api access")] public void ApiConnectionWillAuthenticate_ValidCredentials_Successfully() { - var connection = new ApiConnection(TestAccount, TestToken); + using var connection = new ApiConnection(TestAccount, TestToken); Assert.IsTrue(connection.Connected); } @@ -55,7 +55,7 @@ public void ApiWillAuthenticate_ValidCredentials_Successfully() [Test] public void ApiConnectionWillAuthenticate_InvalidCredentials_Unsuccessfully() { - var connection = new ApiConnection(TestAccount, ""); + using var connection = new ApiConnection(TestAccount, ""); Assert.IsFalse(connection.Connected); } From 340b40c6ce9e6a5307b27ad9f18b62a4961f9e93 Mon Sep 17 00:00:00 2001 From: Roman Yavnikov <45608740+Romazes@users.noreply.github.com> Date: Fri, 19 Dec 2025 15:52:06 +0200 Subject: [PATCH 044/103] Fix: AUD(6A) FOP expiration (#9139) * fix: AUD(6A) FOP expiration * feat: add 6A to FOP expiry delta refactor: rename variable to project pattern naming * remove: AUD fop expiry delta test:fix: use flexible reference data in FutureAndOptionMapping * test:fix: AUD in GetUnderlyingSymbolFromFutureOption --- Common/Securities/Future/FuturesListings.cs | 4 +++- .../FutureOption/FuturesOptionsUnderlyingMapper.cs | 5 ++++- .../FutureOption/FuturesOptionsExpiryFunctionsTests.cs | 8 +++++++- .../FutureOption/FuturesOptionsUnderlyingMapperTests.cs | 6 ++++-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Common/Securities/Future/FuturesListings.cs b/Common/Securities/Future/FuturesListings.cs index 3e3a9007309b..53f0e80e9674 100644 --- a/Common/Securities/Future/FuturesListings.cs +++ b/Common/Securities/Future/FuturesListings.cs @@ -36,6 +36,7 @@ public static class FuturesListings private static readonly Symbol _zl = Symbol.Create("ZL", SecurityType.Future, Market.CBOT); private static readonly Symbol _zw = Symbol.Create("ZW", SecurityType.Future, Market.CBOT); private static readonly Symbol _tn = Symbol.Create("TN", SecurityType.Future, Market.CBOT); + private static readonly Symbol _aud = Symbol.Create("6A", SecurityType.Future, Market.CME); private static Dictionary>> _futuresListingRules = new Dictionary>> { @@ -71,7 +72,8 @@ public static class FuturesListings _zw, t, 7, - new FuturesListingCycles(new[] { 3, 5, 7, 9, 12 }, 15)) } + new FuturesListingCycles(new[] { 3, 5, 7, 9, 12 }, 15)) }, + { "6A", t => QuarterlyContracts(_aud, t, 8) } }; /// diff --git a/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapper.cs b/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapper.cs index 3aa254e63b38..4b9bf7992dfd 100644 --- a/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapper.cs +++ b/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapper.cs @@ -60,7 +60,10 @@ public static class FuturesOptionsUnderlyingMapper // COMEX { "HG", (d, _) => ContractMonthYearStartThreeMonthsThenEvenOddMonthsSkipRule(d, true) }, { "SI", (d, _) => ContractMonthYearStartThreeMonthsThenEvenOddMonthsSkipRule(d, true) }, - { "GC", (d, _) => ContractMonthEvenOddMonth(d, false) } + { "GC", (d, _) => ContractMonthEvenOddMonth(d, false) }, + + // CME + { "6A", (d, ld) => ContractMonthSerialLookupRule(Symbol.Create("6A", SecurityType.Future, Market.CME), d, ld.Value) } }; /// diff --git a/Tests/Common/Securities/FutureOption/FuturesOptionsExpiryFunctionsTests.cs b/Tests/Common/Securities/FutureOption/FuturesOptionsExpiryFunctionsTests.cs index 920c0af603f4..9e0129622c53 100644 --- a/Tests/Common/Securities/FutureOption/FuturesOptionsExpiryFunctionsTests.cs +++ b/Tests/Common/Securities/FutureOption/FuturesOptionsExpiryFunctionsTests.cs @@ -107,12 +107,18 @@ public void ExpiryFunctionsReturnExpectedResults(string futureTicker, string mar [TestCase("6N", Market.CME, "202511", "20251107", "20251215")] [TestCase("6N", Market.CME, "202512", "20251205", "20251215")] [TestCase("6N", Market.CME, "202601", "20260109", "20260316")] + [TestCase("6A", Market.CME, "202601", "20260109", "20260316", Description = "Quarterly contract : Mar")] + [TestCase("6A", Market.CME, "202602", "20260206", "20260316", Description = "Quarterly contract : Mar")] + [TestCase("6A", Market.CME, "202603", "20260306", "20260316", Description = "Quarterly contract : Mar")] + [TestCase("6A", Market.CME, "202604", "20260403", "20260615", Description = "Quarterly contract : Jun")] + [TestCase("6A", Market.CME, "202605", "20260508", "20260615", Description = "Quarterly contract : Jun")] + [TestCase("6A", Market.CME, "202606", "20260605", "20260615", Description = "Quarterly contract : Jun")] public void FutureAndOptionMapping(string futureTicker, string market, string fopContractMonthYear, string expectedFop, string expectedFuture) { var contractMonth = DateTime.ParseExact(fopContractMonthYear, DateFormat.YearMonth, CultureInfo.InvariantCulture); var fopExpiry = Time.ParseDate(expectedFop); - var referenceDate = new DateTime(fopExpiry.Year, 9, 1); + var referenceDate = new DateTime(fopExpiry.Year, fopExpiry.Month, 1); var canonicalFuture = Symbol.Create(futureTicker, SecurityType.Future, market); var canonicalFutureOption = Symbol.CreateOption( canonicalFuture, diff --git a/Tests/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapperTests.cs b/Tests/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapperTests.cs index ec36649689c3..b0cae7124110 100644 --- a/Tests/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapperTests.cs +++ b/Tests/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapperTests.cs @@ -35,8 +35,10 @@ public class FuturesOptionsUnderlyingMapperTests [TestCase("ZN", Market.CBOT, 2021, 2, 19, 2021, 3, 22, false)] [TestCase("ZS", Market.CBOT, 2021, 2, 19, 2021, 3, 12, false)] [TestCase("ZW", Market.CBOT, 2021, 2, 19, 2021, 3, 12, false)] - [TestCase("6A", Market.CME, 2025, 09, 05, 2025, 09, 15, false)] - [TestCase("6A", Market.CME, 2025, 12, 05, 2025, 12, 15, false)] + [TestCase("6A", Market.CME, 2021, 09, 05, 2021, 09, 13, false)] + [TestCase("6A", Market.CME, 2021, 10, 05, 2021, 12, 13, false)] + [TestCase("6A", Market.CME, 2021, 11, 05, 2021, 12, 13, false)] + [TestCase("6A", Market.CME, 2021, 12, 05, 2021, 12, 13, false)] [TestCase("6B", Market.CME, 2025, 09, 05, 2025, 09, 15, false)] [TestCase("6B", Market.CME, 2025, 12, 05, 2025, 12, 15, false)] [TestCase("6C", Market.CME, 2025, 09, 05, 2025, 09, 16, false)] From 781897984e5ac302ceaf9a8384c835a05552a955 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Fri, 19 Dec 2025 11:24:03 -0400 Subject: [PATCH 045/103] Detect serialized json payload in CreateJsonPostRequest (#9145) --- Api/ApiUtils.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Api/ApiUtils.cs b/Api/ApiUtils.cs index 2b878129c327..1fcebdcf4dee 100644 --- a/Api/ApiUtils.cs +++ b/Api/ApiUtils.cs @@ -55,7 +55,7 @@ public static HttpRequestMessage CreateJsonPostRequest(string endpoint, object p var request = new HttpRequestMessage(HttpMethod.Post, endpoint); if (payload != null) { - request.Content = new StringContent(JsonConvert.SerializeObject(payload, jsonSerializerSettings), + request.Content = new StringContent(payload as string ?? JsonConvert.SerializeObject(payload, jsonSerializerSettings), new MediaTypeHeaderValue(MediaTypeNames.Application.Json)); } From 8f0224feb67fcb811c6f1f1a6f2891bb6c71f732 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Fri, 19 Dec 2025 10:35:19 -0500 Subject: [PATCH 046/103] Fix StopLimit validation bug (#9142) --- .../TradingTechnologiesBrokerageModel.cs | 2 +- .../Common/Brokerages/BrokerageModelTests.cs | 63 ++++++++++++------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/Common/Brokerages/TradingTechnologiesBrokerageModel.cs b/Common/Brokerages/TradingTechnologiesBrokerageModel.cs index 28f580039cb2..82912eb470d8 100644 --- a/Common/Brokerages/TradingTechnologiesBrokerageModel.cs +++ b/Common/Brokerages/TradingTechnologiesBrokerageModel.cs @@ -140,7 +140,7 @@ public override bool CanSubmitOrder(Security security, Order order, out Brokerag var stopLimit = order as StopLimitOrder; if (stopLimit != null) { - return IsValidOrderPrices(security, OrderType.StopMarket, stopLimit.Direction, stopLimit.StopPrice, stopLimit.LimitPrice, ref message); + return IsValidOrderPrices(security, OrderType.StopLimit, stopLimit.Direction, stopLimit.StopPrice, stopLimit.LimitPrice, ref message); } return true; diff --git a/Tests/Common/Brokerages/BrokerageModelTests.cs b/Tests/Common/Brokerages/BrokerageModelTests.cs index 780ebe0033bd..1ebc4fac69ee 100644 --- a/Tests/Common/Brokerages/BrokerageModelTests.cs +++ b/Tests/Common/Brokerages/BrokerageModelTests.cs @@ -276,10 +276,10 @@ def GetFillModel(self, security): Assert.AreEqual(typeof(ImmediateFillModel), fillModel.GetType()); var order = new Mock(); var subscriptionDataConfigProvider = new Mock(); - var securitiesForOrders = new Dictionary() { { order.Object, security} }; + var securitiesForOrders = new Dictionary() { { order.Object, security } }; var fillModelParameters = new FillModelParameters(security, order.Object, subscriptionDataConfigProvider.Object, TimeSpan.Zero, securitiesForOrders); var result = fillModel.Fill(fillModelParameters); - foreach( var entry in result) + foreach (var entry in result) { Assert.AreEqual(OrderStatus.Filled, entry.Status); } @@ -664,6 +664,27 @@ def GetMarginInterestRateModel(self, security): } } + [Test] + public void TradingTechnologiesBrokerageModelValidatesStopLimitOrders() + { + var model = new TradingTechnologiesBrokerageModel(); + var symbol = Symbols.Future_CLF19_Jan2019; + var security = GetSecurity(symbol); + security.SetMarketPrice(new Tick(DateTime.UtcNow, symbol, 4500m, 4500m)); + + var invalidStopLimit = new StopLimitOrder + { + Symbol = symbol, + Quantity = 1, + StopPrice = 4510m, + LimitPrice = 4505m + }; + + var canSubmit = model.CanSubmitOrder(security, invalidStopLimit, out var message); + Assert.IsFalse(canSubmit); + StringAssert.Contains("StopLimit Buy limit price must be greater than or equal to stop price", message.Message); + } + [TestCase(BrokerageName.Alpaca, OrderType.MarketOnOpen, 10, -15, false)] [TestCase(BrokerageName.Alpaca, OrderType.MarketOnOpen, 10, -10, true)] [TestCase(BrokerageName.Alpaca, OrderType.MarketOnClose, 10, -15, false)] @@ -847,25 +868,25 @@ private static TestCaseData[] GetBrokerageNameTestCases() }; } - private class CustomInteractiveBrokersBrokerageModel : InteractiveBrokersBrokerageModel {} - private class CustomTradierBrokerageModel : TradierBrokerageModel {} - private class CustomOandaBrokerageModel : OandaBrokerageModel {} - private class CustomFxcmBrokerageModel : FxcmBrokerageModel {} - private class CustomBitfinexBrokerageModel : BitfinexBrokerageModel {} - private class CustomBinanceUSBrokerageModel : BinanceUSBrokerageModel {} - private class CustomBinanceBrokerageModel : BinanceBrokerageModel {} - private class CustomCoinbaseBrokerageModel : CoinbaseBrokerageModel {} - private class CustomAlphaStreamsBrokerageModel : AlphaStreamsBrokerageModel {} - private class CustomZerodhaBrokerageModel : ZerodhaBrokerageModel {} - private class CustomAxosBrokerageModel : AxosClearingBrokerageModel {} - private class CustomTradingTechnologiesBrokerageModel : TradingTechnologiesBrokerageModel {} - private class CustomSamcoBrokerageModel : SamcoBrokerageModel {} - private class CustomKrakenBrokerageModel : KrakenBrokerageModel {} - private class CustomExanteBrokerageModel : ExanteBrokerageModel {} - private class CustomFTXUSBrokerageModel : FTXUSBrokerageModel {} - private class CustomFTXBrokerageModel : FTXBrokerageModel {} - private class CustomBybitBrokerageModel : BybitBrokerageModel { } - private class CustomDefaultBrokerageModel : DefaultBrokerageModel {} + private class CustomInteractiveBrokersBrokerageModel : InteractiveBrokersBrokerageModel { } + private class CustomTradierBrokerageModel : TradierBrokerageModel { } + private class CustomOandaBrokerageModel : OandaBrokerageModel { } + private class CustomFxcmBrokerageModel : FxcmBrokerageModel { } + private class CustomBitfinexBrokerageModel : BitfinexBrokerageModel { } + private class CustomBinanceUSBrokerageModel : BinanceUSBrokerageModel { } + private class CustomBinanceBrokerageModel : BinanceBrokerageModel { } + private class CustomCoinbaseBrokerageModel : CoinbaseBrokerageModel { } + private class CustomAlphaStreamsBrokerageModel : AlphaStreamsBrokerageModel { } + private class CustomZerodhaBrokerageModel : ZerodhaBrokerageModel { } + private class CustomAxosBrokerageModel : AxosClearingBrokerageModel { } + private class CustomTradingTechnologiesBrokerageModel : TradingTechnologiesBrokerageModel { } + private class CustomSamcoBrokerageModel : SamcoBrokerageModel { } + private class CustomKrakenBrokerageModel : KrakenBrokerageModel { } + private class CustomExanteBrokerageModel : ExanteBrokerageModel { } + private class CustomFTXUSBrokerageModel : FTXUSBrokerageModel { } + private class CustomFTXBrokerageModel : FTXBrokerageModel { } + private class CustomBybitBrokerageModel : BybitBrokerageModel { } + private class CustomDefaultBrokerageModel : DefaultBrokerageModel { } private static TestCaseData[] GetCustomBrokerageNameTestCases() { From 0622f43a0f8d40ab049ae0a83422a8e14a7c8813 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Fri, 19 Dec 2025 10:48:49 -0500 Subject: [PATCH 047/103] Fix issues with the IchimokuKinkoHyo indicator (#9135) * Fix issues with IchimokuKinkoHyo indicator * Use indicator extension methods for automatic updates --- Indicators/IchimokuKinkoHyo.cs | 63 ++++------------------- Tests/Indicators/IchimokuKinkoHyoTests.cs | 26 ++++++++-- 2 files changed, 32 insertions(+), 57 deletions(-) diff --git a/Indicators/IchimokuKinkoHyo.cs b/Indicators/IchimokuKinkoHyo.cs index 6f7cbdadaba2..5c366ce678d8 100644 --- a/Indicators/IchimokuKinkoHyo.cs +++ b/Indicators/IchimokuKinkoHyo.cs @@ -147,51 +147,18 @@ public IchimokuKinkoHyo(string name, int tenkanPeriod = 9, int kijunPeriod = 26, KijunMinimum = new Minimum(name + "_KijunMin", kijunPeriod); SenkouBMaximum = new Maximum(name + "_SenkouBMaximum", senkouBPeriod); SenkouBMinimum = new Minimum(name + "_SenkouBMinimum", senkouBPeriod); - DelayedTenkanSenkouA = new Delay(name + "DelayedTenkan", senkouADelayPeriod); - DelayedKijunSenkouA = new Delay(name + "DelayedKijun", senkouADelayPeriod); - DelayedMaximumSenkouB = new Delay(name + "DelayedMax", senkouBDelayPeriod); - DelayedMinimumSenkouB = new Delay(name + "DelayedMin", senkouBDelayPeriod); - Chikou = new Delay(name + "_Chikou", senkouADelayPeriod); - - SenkouA = new FunctionalIndicator( - name + "_SenkouA", - input => SenkouA.IsReady ? (DelayedTenkanSenkouA.Current.Value + DelayedKijunSenkouA.Current.Value) / 2 : decimal.Zero, - senkouA => DelayedTenkanSenkouA.IsReady && DelayedKijunSenkouA.IsReady, - () => - { - Tenkan.Reset(); - Kijun.Reset(); - }); + DelayedMaximumSenkouB = new Delay(name + "DelayedMax", senkouBDelayPeriod).Of(SenkouBMaximum); + DelayedMinimumSenkouB = new Delay(name + "DelayedMin", senkouBDelayPeriod).Of(SenkouBMinimum); - SenkouB = new FunctionalIndicator( - name + "_SenkouB", - input => SenkouB.IsReady ? (DelayedMaximumSenkouB.Current.Value + DelayedMinimumSenkouB.Current.Value) / 2 : decimal.Zero, - senkouA => DelayedMaximumSenkouB.IsReady && DelayedMinimumSenkouB.IsReady, - () => - { - Tenkan.Reset(); - Kijun.Reset(); - }); + Tenkan = TenkanMaximum.Plus(TenkanMinimum).Over(2m); + DelayedTenkanSenkouA = new Delay(name + "DelayedTenkan", senkouADelayPeriod).Of(Tenkan); - Tenkan = new FunctionalIndicator( - name + "_Tenkan", - input => Tenkan.IsReady ? (TenkanMaximum.Current.Value + TenkanMinimum.Current.Value) / 2 : decimal.Zero, - tenkan => TenkanMaximum.IsReady && TenkanMinimum.IsReady, - () => - { - TenkanMaximum.Reset(); - TenkanMinimum.Reset(); - }); + Kijun = KijunMaximum.Plus(KijunMinimum).Over(2m); + DelayedKijunSenkouA = new Delay(name + "DelayedKijun", senkouADelayPeriod).Of(Kijun); - Kijun = new FunctionalIndicator( - name + "_Kijun", - input => Kijun.IsReady ? (KijunMaximum.Current.Value + KijunMinimum.Current.Value) / 2 : decimal.Zero, - kijun => KijunMaximum.IsReady && KijunMinimum.IsReady, - () => - { - KijunMaximum.Reset(); - KijunMinimum.Reset(); - }); + SenkouA = DelayedTenkanSenkouA.Plus(DelayedKijunSenkouA).Over(2m); + SenkouB = DelayedMaximumSenkouB.Plus(DelayedMinimumSenkouB).Over(2m); + Chikou = new Delay(name + "_Chikou", senkouADelayPeriod); } /// @@ -212,22 +179,10 @@ protected override decimal ComputeNextValue(IBaseDataBar input) { TenkanMaximum.Update(input.EndTime, input.High); TenkanMinimum.Update(input.EndTime, input.Low); - Tenkan.Update(input.EndTime, input.Close); - if (Tenkan.IsReady) DelayedTenkanSenkouA.Update(input.EndTime, Tenkan.Current.Value); - KijunMaximum.Update(input.EndTime, input.High); KijunMinimum.Update(input.EndTime, input.Low); - Kijun.Update(input.EndTime, input.Close); - if (Kijun.IsReady) DelayedKijunSenkouA.Update(input.EndTime, Kijun.Current.Value); - - SenkouA.Update(input.EndTime, input.Close); - - SenkouB.Update(input.EndTime, input.Close); SenkouBMaximum.Update(input.EndTime, input.High); - if (SenkouBMaximum.IsReady) DelayedMaximumSenkouB.Update(input.EndTime, SenkouBMaximum.Current.Value); SenkouBMinimum.Update(input.EndTime, input.Low); - if (SenkouBMinimum.IsReady) DelayedMinimumSenkouB.Update(input.EndTime, SenkouBMinimum.Current.Value); - Chikou.Update(input.EndTime, input.Close); return input.Close; diff --git a/Tests/Indicators/IchimokuKinkoHyoTests.cs b/Tests/Indicators/IchimokuKinkoHyoTests.cs index 68feaf0078eb..ef19b5ce846e 100644 --- a/Tests/Indicators/IchimokuKinkoHyoTests.cs +++ b/Tests/Indicators/IchimokuKinkoHyoTests.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -36,7 +36,7 @@ protected override IndicatorBase CreateIndicator() protected override Action, double> Assertion => (indicator, expected) => - Assert.AreEqual(expected, (double) ((IchimokuKinkoHyo) indicator).Tenkan.Current.Value, 1e-3); + Assert.AreEqual(expected, (double)((IchimokuKinkoHyo)indicator).Tenkan.Current.Value, 1e-3); [Test] public void ComparesWithExternalDataTenkanMaximum() @@ -166,5 +166,25 @@ public void ComparesWithExternalDataDelayedMinimumSenkouB() (ind, expected) => Assert.AreEqual(expected, (double)((IchimokuKinkoHyo)ind).DelayedMinimumSenkouB.Current.Value) ); } + + [Test] + public void ComponentsAreNonZeroWhenIndicatorIsReady() + { + var indicator = new IchimokuKinkoHyo(2, 3, 2, 4, 2, 2); + var date = new DateTime(2017, 1, 1); + + for (int i = 1; i <= indicator.WarmUpPeriod; i++) + { + var tradeBar = new TradeBar(date + TimeSpan.FromDays(i), Symbols.SPY, + 100 * i, 200 * i, 100 * i, 200 * i, 500 * i); + indicator.Update(tradeBar); + } + + Assert.IsTrue(indicator.IsReady); + Assert.AreNotEqual(0m, indicator.Tenkan.Current.Value); + Assert.AreNotEqual(0m, indicator.Kijun.Current.Value); + Assert.AreNotEqual(0m, indicator.SenkouA.Current.Value); + Assert.AreNotEqual(0m, indicator.SenkouB.Current.Value); + } } -} \ No newline at end of file +} From 0f80591f51a2f8f06d7c634d70ef30544e48659d Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Fri, 19 Dec 2025 13:51:45 -0300 Subject: [PATCH 048/103] Fix null reference un future contract. Adding tests (#9147) --- Common/Data/Market/FuturesContract.cs | 25 +++- .../Data/Market/FuturesContractTests.cs | 109 ++++++++++++++++++ 2 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 Tests/Common/Data/Market/FuturesContractTests.cs diff --git a/Common/Data/Market/FuturesContract.cs b/Common/Data/Market/FuturesContract.cs index 8bf0e11bfbaa..56918c97f530 100644 --- a/Common/Data/Market/FuturesContract.cs +++ b/Common/Data/Market/FuturesContract.cs @@ -80,7 +80,16 @@ public override long Volume { return (long)_universeData.Volume; } - return (long)(_tradeBar?.Volume ?? 0); + + if (_tradeBar == null && _tradeTick == null) + { + return 0L; + } + if (_tradeBar != null) + { + return (long)(_tradeTick != null && _tradeTick.EndTime > _tradeBar.EndTime ? _tradeTick.Quantity : _tradeBar.Volume); + } + return (long)_tradeTick.Quantity; } } @@ -101,7 +110,12 @@ public override decimal BidPrice } if (_quoteBar != null) { - return _quoteTick != null && _quoteTick.EndTime > _quoteBar.EndTime ? _quoteTick.BidPrice : _quoteBar.Bid.Close; + var quoteBarPrice = _quoteBar.Bid?.Close ?? decimal.Zero; + if (_quoteTick != null) + { + return _quoteTick.EndTime > _quoteBar.EndTime ? _quoteTick.BidPrice : quoteBarPrice; + } + return quoteBarPrice; } return _quoteTick.BidPrice; } @@ -143,7 +157,12 @@ public override decimal AskPrice } if (_quoteBar != null) { - return _quoteTick != null && _quoteTick.EndTime > _quoteBar.EndTime ? _quoteTick.AskPrice : _quoteBar.Ask.Close; + var quoteBarPrice = _quoteBar.Ask?.Close ?? decimal.Zero; + if (_quoteTick != null) + { + return _quoteTick.EndTime > _quoteBar.EndTime ? _quoteTick.AskPrice : quoteBarPrice; + } + return quoteBarPrice; } return _quoteTick.AskPrice; } diff --git a/Tests/Common/Data/Market/FuturesContractTests.cs b/Tests/Common/Data/Market/FuturesContractTests.cs new file mode 100644 index 000000000000..6a59e71b3bd5 --- /dev/null +++ b/Tests/Common/Data/Market/FuturesContractTests.cs @@ -0,0 +1,109 @@ +/* + * 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 NUnit.Framework; +using QuantConnect.Data.Market; + +namespace QuantConnect.Tests.Common.Data.Market +{ + [TestFixture] + public class FuturesContractTests + { + [TestCase(true, true)] + [TestCase(true, false)] + [TestCase(false, true)] + [TestCase(false, false)] + public void QuoteBarNullBidAsk(bool hasBid, bool hasAsk) + { + var futureContract = new FuturesContract(Symbols.Future_CLF19_Jan2019); + + Bar bid = hasBid ? new Bar(1, 1, 1, 1) : null; + Bar ask = hasAsk ? new Bar(2, 2, 2, 2) : null; + var quoteBar = new QuoteBar(new DateTime(2025, 12, 10), Symbols.Future_CLF19_Jan2019, bid, 10, ask, 20); + futureContract.Update(quoteBar); + Assert.AreEqual(hasBid ? bid.Close : 0, futureContract.BidPrice); + Assert.AreEqual(hasAsk ? ask.Close : 0, futureContract.AskPrice); + Assert.AreEqual(hasAsk ? 20 : 0, futureContract.AskSize); + Assert.AreEqual(hasBid ? 10 : 0, futureContract.BidSize); + Assert.AreEqual(0, futureContract.Volume); + Assert.AreEqual(0, futureContract.LastPrice); + Assert.AreEqual(0, futureContract.OpenInterest); + } + + [Test] + public void QuoteTickUpdate() + { + var futureContract = new FuturesContract(Symbols.Future_CLF19_Jan2019); + + var tick = new Tick(new DateTime(2025, 12, 10), Symbols.Future_CLF19_Jan2019, 1, 2, 3, 4); + futureContract.Update(tick); + Assert.AreEqual(1, futureContract.BidSize); + Assert.AreEqual(2, futureContract.BidPrice); + Assert.AreEqual(3, futureContract.AskSize); + Assert.AreEqual(4, futureContract.AskPrice); + Assert.AreEqual(0, futureContract.Volume); + Assert.AreEqual(0, futureContract.LastPrice); + Assert.AreEqual(0, futureContract.OpenInterest); + } + + [Test] + public void TradeTickUpdate() + { + var futureContract = new FuturesContract(Symbols.Future_CLF19_Jan2019); + + var tick = new Tick(new DateTime(2025, 12, 10), Symbols.Future_CLF19_Jan2019, string.Empty, Exchange.UNKNOWN, 1, 2); + futureContract.Update(tick); + Assert.AreEqual(1, futureContract.Volume); + Assert.AreEqual(2, futureContract.LastPrice); + Assert.AreEqual(0, futureContract.BidSize); + Assert.AreEqual(0, futureContract.BidPrice); + Assert.AreEqual(0, futureContract.AskSize); + Assert.AreEqual(0, futureContract.AskPrice); + Assert.AreEqual(0, futureContract.OpenInterest); + } + + [Test] + public void TradeBarUpdate() + { + var futureContract = new FuturesContract(Symbols.Future_CLF19_Jan2019); + + var tick = new TradeBar(new DateTime(2025, 12, 10), Symbols.Future_CLF19_Jan2019, 1, 2, 3, 4, 5); + futureContract.Update(tick); + Assert.AreEqual(5, futureContract.Volume); + Assert.AreEqual(4, futureContract.LastPrice); + Assert.AreEqual(0, futureContract.BidSize); + Assert.AreEqual(0, futureContract.BidPrice); + Assert.AreEqual(0, futureContract.AskSize); + Assert.AreEqual(0, futureContract.AskPrice); + Assert.AreEqual(0, futureContract.OpenInterest); + } + + [Test] + public void OpenInterest() + { + var futureContract = new FuturesContract(Symbols.Future_CLF19_Jan2019); + var tick = new OpenInterest(new DateTime(2025, 12, 10), Symbols.Future_CLF19_Jan2019, 10); + futureContract.Update(tick); + Assert.AreEqual(10, futureContract.OpenInterest); + Assert.AreEqual(0, futureContract.Volume); + Assert.AreEqual(0, futureContract.LastPrice); + Assert.AreEqual(0, futureContract.BidSize); + Assert.AreEqual(0, futureContract.BidPrice); + Assert.AreEqual(0, futureContract.AskSize); + Assert.AreEqual(0, futureContract.AskPrice); + } + } +} From 5842f50b039cebaa5fbd5e87655a4b44f67816ce Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Fri, 19 Dec 2025 16:45:37 -0300 Subject: [PATCH 049/103] Trigger initial selection for a yearly schedule (#9149) - Trigger initial selection for a yearly scheduled universe. Adding regression algorithm. --- ...rseSelectionScheduleRegressionAlgorithm.cs | 135 ++++++++++++++++++ Engine/DataFeeds/DataManager.cs | 2 +- 2 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 Algorithm.CSharp/YearlyUniverseSelectionScheduleRegressionAlgorithm.cs diff --git a/Algorithm.CSharp/YearlyUniverseSelectionScheduleRegressionAlgorithm.cs b/Algorithm.CSharp/YearlyUniverseSelectionScheduleRegressionAlgorithm.cs new file mode 100644 index 000000000000..0570b76fda4f --- /dev/null +++ b/Algorithm.CSharp/YearlyUniverseSelectionScheduleRegressionAlgorithm.cs @@ -0,0 +1,135 @@ +/* + * 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.Data; +using QuantConnect.Interfaces; +using System.Collections.Generic; +using QuantConnect.Data.Fundamental; +using QuantConnect.Data.UniverseSelection; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Regression test algorithm for scheduled universe selection GH 3890 + /// + public class YearlyUniverseSelectionScheduleRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition + { + private int _yearlyDateSelection; + private readonly Symbol _symbol = QuantConnect.Symbol.Create("SPY", SecurityType.Equity, Market.USA); + + /// + /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized. + /// + public override void Initialize() + { + SetStartDate(2014, 03, 25); + SetEndDate(2014, 05, 10); + UniverseSettings.Resolution = Resolution.Daily; + + AddUniverse(DateRules.YearStart(), SelectionFunction); + } + + public IEnumerable SelectionFunction(IEnumerable coarse) + { + _yearlyDateSelection++; + if (Time != StartDate) + { + throw new RegressionTestException($"SelectionFunction_SpecificDate unexpected selection: {Time}"); + } + return new[] { _symbol }; + } + + /// + /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. + /// + /// Slice object keyed by symbol containing the stock data + public override void OnData(Slice slice) + { + if (!Portfolio.Invested) + { + SetHoldings(_symbol, 1); + Debug($"Purchased Stock {_symbol}"); + } + } + + public override void OnEndOfAlgorithm() + { + if (_yearlyDateSelection != 1) + { + throw new RegressionTestException($"Initial yearly selection didn't happen!"); + } + } + + /// + /// Data Points count of all timeslices of algorithm + /// + public long DataPoints => 271; + + /// + /// Data Points count of the algorithm history + /// + public int AlgorithmHistoryDataPoints => 0; + + /// + /// Final status of the algorithm + /// + public AlgorithmStatus AlgorithmStatus => AlgorithmStatus.Completed; + + /// + /// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm. + /// + public bool CanRunLocally { get; } = true; + + /// + /// This is used by the regression test system to indicate which languages this algorithm is written in. + /// + public List Languages { get; } = new() { Language.CSharp }; + + /// + /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm + /// + public Dictionary ExpectedStatistics => new Dictionary + { + {"Total Orders", "1"}, + {"Average Win", "0%"}, + {"Average Loss", "0%"}, + {"Compounding Annual Return", "4.334%"}, + {"Drawdown", "3.900%"}, + {"Expectancy", "0"}, + {"Start Equity", "100000"}, + {"End Equity", "100532.22"}, + {"Net Profit", "0.532%"}, + {"Sharpe Ratio", "0.28"}, + {"Sortino Ratio", "0.283"}, + {"Probabilistic Sharpe Ratio", "39.422%"}, + {"Loss Rate", "0%"}, + {"Win Rate", "0%"}, + {"Profit-Loss Ratio", "0"}, + {"Alpha", "-0.022"}, + {"Beta", "1.018"}, + {"Annual Standard Deviation", "0.099"}, + {"Annual Variance", "0.01"}, + {"Information Ratio", "-2.462"}, + {"Tracking Error", "0.009"}, + {"Treynor Ratio", "0.027"}, + {"Total Fees", "$3.07"}, + {"Estimated Strategy Capacity", "$920000000.00"}, + {"Lowest Capacity Asset", "SPY R735QTJ8XC9X"}, + {"Portfolio Turnover", "2.20%"}, + {"Drawdown Recovery", "5"}, + {"OrderListHash", "87438e51988f37757a2d7f97389483ea"} + }; + } +} diff --git a/Engine/DataFeeds/DataManager.cs b/Engine/DataFeeds/DataManager.cs index b57580ab31f1..4f21d859231e 100644 --- a/Engine/DataFeeds/DataManager.cs +++ b/Engine/DataFeeds/DataManager.cs @@ -130,7 +130,7 @@ public DataManager( // making the selection to be triggered at the first algorithm time, which would be the exact StartDate. universeType != typeof(ScheduledUniverse)) { - const int maximumLookback = 60; + const int maximumLookback = 365; var loopCount = 0; var startLocalTime = start.ConvertFromUtc(security.Exchange.TimeZone); if (universe.UniverseSettings.Schedule.Initialized) From 661356e33e7d7a5de7e5105e2430f32152dca5cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Fri, 19 Dec 2025 17:18:42 -0300 Subject: [PATCH 050/103] Add missing USA equity holidays and early closes (#9148) * Add 2025-2027 USA equity holidays * Address reviews --- Data/market-hours/market-hours-database.json | 29 ++++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 6cf9ff9e4f14..a2de9a6fb29f 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -117,9 +117,10 @@ "1/1/2024", "1/2/2023", "1/1/2025", + "1/1/2026", + "1/1/2027", "1/2/2007", "1/9/2025", - "1/20/2025", "1/19/1998", "1/18/1999", "1/17/2000", @@ -147,6 +148,9 @@ "1/17/2022", "1/16/2023", "1/15/2024", + "1/20/2025", + "1/19/2026", + "1/18/2027", "2/16/1998", "2/15/1999", "2/21/2000", @@ -175,6 +179,8 @@ "2/20/2023", "2/19/2024", "2/17/2025", + "2/16/2026", + "2/15/2027", "4/10/1998", "4/2/1999", "4/21/2000", @@ -203,6 +209,8 @@ "4/7/2023", "3/29/2024", "4/18/2025", + "4/3/2026", + "3/26/2027", "5/25/1998", "5/31/1999", "5/29/2000", @@ -231,11 +239,15 @@ "5/29/2023", "5/27/2024", "5/26/2025", + "5/25/2026", + "5/31/2027", "6/11/2004", "6/20/2022", "6/19/2023", "6/19/2024", "6/19/2025", + "6/19/2026", + "6/18/2027", "7/3/1998", "7/5/1999", "7/4/2000", @@ -264,6 +276,8 @@ "7/4/2023", "7/4/2024", "7/4/2025", + "7/3/2026", + "7/5/2027", "9/7/1998", "9/6/1999", "9/4/2000", @@ -292,6 +306,8 @@ "9/4/2023", "9/2/2024", "9/1/2025", + "9/7/2026", + "9/6/2027", "9/11/2001", "9/12/2001", "9/13/2001", @@ -326,6 +342,8 @@ "11/23/2023", "11/28/2024", "11/27/2025", + "11/26/2026", + "11/25/2027", "12/05/2018", "12/25/1998", "12/24/1999", @@ -354,7 +372,9 @@ "12/26/2022", "12/25/2023", "12/25/2024", - "12/25/2025" + "12/25/2025", + "12/25/2026", + "12/24/2027" ], "earlyCloses": { "7/3/2000": "13:00:00", @@ -400,6 +420,8 @@ "11/24/2023": "13:00:00", "11/29/2024": "13:00:00", "11/28/2025": "13:00:00", + "11/27/2026": "13:00:00", + "11/26/2027": "13:00:00", "12/24/2001": "13:00:00", "12/24/2002": "13:00:00", "12/24/2003": "13:00:00", @@ -416,7 +438,8 @@ "12/24/2019": "13:00:00", "12/24/2020": "13:00:00", "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" + "12/24/2025": "13:00:00", + "12/24/2026": "13:00:00" } }, "Future-cme-[*]": { From ef1cf8e4df5721a4707b9886c8b4e1cb2edbe495 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Mon, 22 Dec 2025 09:50:25 -0400 Subject: [PATCH 051/103] Replace RestShap with HttpClient (#9143) * Replace RestShap with HttpClient * Address peer review * Minor fixes --- ...SameUnderlyingFutureRegressionAlgorithm.py | 6 +- Algorithm.Python/HistoryAlgorithm.py | 4 +- Api/Api.cs | 909 ++++-------------- Api/ApiConnection.cs | 24 +- .../Authentication/OAuthTokenHandler.cs | 21 +- Brokerages/BaseWebsocketsBrokerage.cs | 70 +- Common/Api/Organization.cs | 3 +- Common/Extensions.cs | 2 +- .../Transport/RestSubscriptionStreamReader.cs | 31 +- Engine/QuantConnect.Lean.Engine.csproj | 1 - Messaging/QuantConnect.Messaging.csproj | 1 - Tests/Api/ObjectStoreTests.cs | 23 +- Tests/Api/ProjectTests.cs | 4 + 13 files changed, 311 insertions(+), 788 deletions(-) diff --git a/Algorithm.Python/FutureOptionMultipleContractsInDifferentContractMonthsWithSameUnderlyingFutureRegressionAlgorithm.py b/Algorithm.Python/FutureOptionMultipleContractsInDifferentContractMonthsWithSameUnderlyingFutureRegressionAlgorithm.py index 3c03d01ea882..9fef1513b7f2 100644 --- a/Algorithm.Python/FutureOptionMultipleContractsInDifferentContractMonthsWithSameUnderlyingFutureRegressionAlgorithm.py +++ b/Algorithm.Python/FutureOptionMultipleContractsInDifferentContractMonthsWithSameUnderlyingFutureRegressionAlgorithm.py @@ -26,7 +26,7 @@ def initialize(self): self._create_option(datetime(2020, 2, 25), OptionRight.CALL, 1600.0): False, self._create_option(datetime(2020, 2, 25), OptionRight.PUT, 1545.0): False } - + # Required for FOPs to use extended hours, until GH #6491 is addressed self.universe_settings.extended_market_hours = True @@ -34,9 +34,9 @@ def initialize(self): self.set_end_date(2020, 1, 6) gold_futures = self.add_future("GC", Resolution.MINUTE, Market.COMEX, extended_market_hours=True) - gold_futures.SetFilter(0, 365) + gold_futures.set_filter(0, 365) - self.add_future_option(gold_futures.Symbol) + self.add_future_option(gold_futures.symbol) def on_data(self, data: Slice): for symbol in data.quote_bars.keys(): diff --git a/Algorithm.Python/HistoryAlgorithm.py b/Algorithm.Python/HistoryAlgorithm.py index 999341caa90a..988dc35c96ef 100644 --- a/Algorithm.Python/HistoryAlgorithm.py +++ b/Algorithm.Python/HistoryAlgorithm.py @@ -32,7 +32,7 @@ def initialize(self): self.add_equity("SPY", Resolution.DAILY) IBM = self.add_data(CustomDataEquity, "IBM", Resolution.DAILY) # specifying the exchange will allow the history methods that accept a number of bars to return to work properly - IBM.Exchange = EquityExchange() + IBM.exchange = EquityExchange() # we can get history in initialize to set up indicators and such self.daily_sma = SimpleMovingAverage(14) @@ -96,7 +96,7 @@ def initialize(self): self.assert_history_count("History(CustomDataEquity, self.securities.keys(), 14)", all_custom_data, 14 * 2) # NOTE: Using different resolutions require that they are properly implemented in your data type. If your - # custom data source has different resolutions, it would need to be implemented in the GetSource and + # custom data source has different resolutions, it would need to be implemented in the GetSource and # Reader methods properly. #custom_data_history = self.history(CustomDataEquity, "IBM", timedelta(7), Resolution.MINUTE) #custom_data_history = self.history(CustomDataEquity, "IBM", 14, Resolution.MINUTE) diff --git a/Api/Api.cs b/Api/Api.cs index 4dc2815eb3dc..b49229f1fa88 100644 --- a/Api/Api.cs +++ b/Api/Api.cs @@ -20,9 +20,6 @@ using System.Net; using System.Net.Http; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using RestSharp; -using RestSharp.Extensions; using QuantConnect.Interfaces; using QuantConnect.Logging; using QuantConnect.Optimizer.Objectives; @@ -111,34 +108,11 @@ public virtual void Initialize(int userId, string token, string dataFolder) public ProjectResponse CreateProject(string name, Language language, string organizationId = null) { - var request = new RestRequest("projects/create", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - // Only include organization Id if its not null or empty - string jsonParams; - if (string.IsNullOrEmpty(organizationId)) - { - jsonParams = JsonConvert.SerializeObject(new - { - name, - language - }); - } - else - { - jsonParams = JsonConvert.SerializeObject(new - { - name, - language, - organizationId - }); - } - - request.AddParameter("application/json", jsonParams, ParameterType.RequestBody); + object payload = string.IsNullOrEmpty(organizationId) + ? new { name, language } + : new { name, language, organizationId }; + TryJsonPost("projects/create", out ProjectResponse result, payload); - ApiConnection.TryRequest(request, out ProjectResponse result); return result; } @@ -150,17 +124,7 @@ public ProjectResponse CreateProject(string name, Language language, string orga public ProjectResponse ReadProject(int projectId) { - var request = new RestRequest("projects/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out ProjectResponse result); + TryJsonPost("projects/read", out ProjectResponse result, new { projectId }); return result; } @@ -171,12 +135,7 @@ public ProjectResponse ReadProject(int projectId) public ProjectResponse ListProjects() { - var request = new RestRequest("projects/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - ApiConnection.TryRequest(request, out ProjectResponse result); + TryJsonPost("projects/read", out ProjectResponse result); return result; } @@ -191,47 +150,10 @@ public ProjectResponse ListProjects() public RestResponse AddProjectFile(int projectId, string name, string content) { - var request = new RestRequest("files/create", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - name, - content - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("files/create", out RestResponse result, new { projectId, name, content }); return result; } - /// - /// Makes a simple POST request to the specified endpoint with the given payload - /// - protected bool TryPost(string endpoint, IEnumerable> payload, out T result, - ApiConnection apiConnection = null, TimeSpan? timeout = null) - where T : RestResponse - { - using var request = ApiUtils.CreatePostRequest(endpoint, payload); - - return (apiConnection ?? ApiConnection).TryRequest(request, out result, timeout); - } - - /// - /// Makes a simple POST request to the specified endpoint with the given payload - /// - protected bool TryJsonPost(string endpoint, object payload, out T result, - ApiConnection apiConnection = null, JsonSerializerSettings jsonSerializerSettings = null, TimeSpan? timeout = null) - where T : RestResponse - { - using var request = ApiUtils.CreateJsonPostRequest(endpoint, payload, jsonSerializerSettings); - - return (apiConnection ?? ApiConnection).TryRequest(request, out result, timeout); - } - - /// /// Update the name of a file /// @@ -242,19 +164,13 @@ protected bool TryJsonPost(string endpoint, object payload, out T result, public RestResponse UpdateProjectFileName(int projectId, string oldFileName, string newFileName) { - var request = new RestRequest("files/update", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new + var payload = new { projectId, name = oldFileName, newName = newFileName - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + }; + TryJsonPost("files/update", out RestResponse result, payload); return result; } @@ -269,19 +185,13 @@ public RestResponse UpdateProjectFileName(int projectId, string oldFileName, str public RestResponse UpdateProjectFileContent(int projectId, string fileName, string newFileContents) { - var request = new RestRequest("files/update", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new + var payload = new { projectId, name = fileName, content = newFileContents - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + }; + TryJsonPost("files/update", out RestResponse result, payload); return result; } @@ -294,17 +204,7 @@ public RestResponse UpdateProjectFileContent(int projectId, string fileName, str public ProjectFilesResponse ReadProjectFiles(int projectId) { - var request = new RestRequest("files/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out ProjectFilesResponse result); + TryJsonPost("files/read", out ProjectFilesResponse result, new { projectId }); return result; } @@ -315,17 +215,7 @@ public ProjectFilesResponse ReadProjectFiles(int projectId) /// that includes the information about all nodes in the project public ProjectNodesResponse ReadProjectNodes(int projectId) { - var request = new RestRequest("projects/nodes/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out ProjectNodesResponse result); + TryJsonPost("projects/nodes/read", out ProjectNodesResponse result, new { projectId }); return result; } @@ -338,18 +228,7 @@ public ProjectNodesResponse ReadProjectNodes(int projectId) /// that includes the information about all nodes in the project public ProjectNodesResponse UpdateProjectNodes(int projectId, string[] nodes) { - var request = new RestRequest("projects/nodes/update", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - nodes - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out ProjectNodesResponse result); + TryJsonPost("projects/nodes/update", out ProjectNodesResponse result, new { projectId, nodes }); return result; } @@ -362,18 +241,7 @@ public ProjectNodesResponse UpdateProjectNodes(int projectId, string[] nodes) public ProjectFilesResponse ReadProjectFile(int projectId, string fileName) { - var request = new RestRequest("files/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - name = fileName - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out ProjectFilesResponse result); + TryJsonPost("files/read", out ProjectFilesResponse result, new { projectId, name = fileName }); return result; } @@ -382,12 +250,7 @@ public ProjectFilesResponse ReadProjectFile(int projectId, string fileName) /// public VersionsResponse ReadLeanVersions() { - var request = new RestRequest("lean/versions/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - ApiConnection.TryRequest(request, out VersionsResponse result); + TryPost("lean/versions/read", out VersionsResponse result); return result; } @@ -400,18 +263,7 @@ public VersionsResponse ReadLeanVersions() public RestResponse DeleteProjectFile(int projectId, string name) { - var request = new RestRequest("files/delete", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - name, - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("files/delete", out RestResponse result, new { projectId, name }); return result; } @@ -423,17 +275,7 @@ public RestResponse DeleteProjectFile(int projectId, string name) public RestResponse DeleteProject(int projectId) { - var request = new RestRequest("projects/delete", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("projects/delete", out RestResponse result, new { projectId }); return result; } @@ -445,17 +287,7 @@ public RestResponse DeleteProject(int projectId) public Compile CreateCompile(int projectId) { - var request = new RestRequest("compile/create", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out Compile result); + TryJsonPost("compile/create", out Compile result, new { projectId }); return result; } @@ -468,18 +300,7 @@ public Compile CreateCompile(int projectId) public Compile ReadCompile(int projectId, string compileId) { - var request = new RestRequest("compile/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - compileId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out Compile result); + TryJsonPost("compile/read", out Compile result, new { projectId, compileId }); return result; } @@ -504,19 +325,14 @@ public virtual RestResponse SendNotification(Notification notification, int proj public Backtest CreateBacktest(int projectId, string compileId, string backtestName) { - var request = new RestRequest("backtests/create", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - compileId, - backtestName - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out BacktestResponseWrapper result); + TryJsonPost("backtests/create", + out BacktestResponseWrapper result, + new + { + projectId, + compileId, + backtestName + }); // Use API Response values for Backtest Values result.Backtest.Success = result.Success; @@ -536,18 +352,7 @@ public Backtest CreateBacktest(int projectId, string compileId, string backtestN public Backtest ReadBacktest(int projectId, string backtestId, bool getCharts = true) { - var request = new RestRequest("backtests/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - backtestId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out BacktestResponseWrapper result); + TryJsonPost("backtests/read", out BacktestResponseWrapper result, new { projectId, backtestId }); if (result == null) { @@ -574,21 +379,14 @@ public Backtest ReadBacktest(int projectId, string backtestId, bool getCharts = continue; } - var chartRequest = new RestRequest("backtests/chart/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - chartRequest.AddParameter("application/json", JsonConvert.SerializeObject(new + var payload = new { projectId, backtestId, name = chart.Key, count = 100 - }), ParameterType.RequestBody); - - // Add this chart to our updated collection - if (ApiConnection.TryRequest(chartRequest, out ReadChartResponse chartResponse) && chartResponse.Success) + }; + if (TryJsonPost("backtests/chart/read", out ReadChartResponse chartResponse, payload) && chartResponse.Success) { updatedCharts.Add(chart.Key, chartResponse.Chart); } @@ -621,18 +419,13 @@ public Backtest ReadBacktest(int projectId, string backtestId, bool getCharts = public List ReadBacktestOrders(int projectId, string backtestId, int start = 0, int end = 100) { - var request = new RestRequest("backtests/orders/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new + using var request = ApiUtils.CreateJsonPostRequest("backtests/orders/read", new { start, end, projectId, backtestId - }), ParameterType.RequestBody); + }); return MakeRequestOrThrow(request, nameof(ReadBacktestOrders)).Orders; } @@ -649,12 +442,9 @@ public List ReadBacktestOrders(int projectId, string backtestI /// The chart public ReadChartResponse ReadBacktestChart(int projectId, string name, int start, int end, uint count, string backtestId) { - var request = new RestRequest("backtests/chart/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new + const string resource = "backtests/chart/read"; + // Serialize just once + var payloadStr = JsonConvert.SerializeObject(new { projectId, name, @@ -662,16 +452,17 @@ public ReadChartResponse ReadBacktestChart(int projectId, string name, int start end, count, backtestId, - }), ParameterType.RequestBody); - - ReadChartResponse result; - ApiConnection.TryRequest(request, out result); + }); + TryJsonPost(resource, out ReadChartResponse result, payloadStr); - var finish = DateTime.UtcNow.AddMinutes(1); - while (DateTime.UtcNow < finish && result.Chart == null) + if (result.Chart == null) { - Thread.Sleep(5000); - ApiConnection.TryRequest(request, out result); + var finish = DateTime.UtcNow.AddMinutes(1); + while (DateTime.UtcNow < finish && result.Chart == null) + { + Thread.Sleep(5000); + TryJsonPost(resource, out result, payloadStr); + } } return result; @@ -688,23 +479,10 @@ public ReadChartResponse ReadBacktestChart(int projectId, string name, int start public RestResponse UpdateBacktest(int projectId, string backtestId, string name = null, string note = "") { - var request = new RestRequest("backtests/update", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - string payload; - if (string.IsNullOrEmpty(name)) - { - payload = JsonConvert.SerializeObject(new { projectId, backtestId, note }); - } - else - { - payload = JsonConvert.SerializeObject(new { projectId, backtestId, note, name }); - } - request.AddParameter("application/json", payload, ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + object payload = string.IsNullOrEmpty(name) + ? new { projectId, backtestId, note } + : new { projectId, backtestId, note, name }; + TryJsonPost("backtests/update", out RestResponse result, payload); return result; } @@ -717,20 +495,7 @@ public RestResponse UpdateBacktest(int projectId, string backtestId, string name public BacktestSummaryList ListBacktests(int projectId, bool includeStatistics = true) { - var request = new RestRequest("backtests/list", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - var obj = new Dictionary() - { - { "projectId", projectId }, - { "includeStatistics", includeStatistics } - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(obj), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out BacktestSummaryList result); + TryJsonPost("backtests/list", out BacktestSummaryList result, new { projectId, includeStatistics }); return result; } @@ -743,18 +508,7 @@ public BacktestSummaryList ListBacktests(int projectId, bool includeStatistics = public RestResponse DeleteBacktest(int projectId, string backtestId) { - var request = new RestRequest("backtests/delete", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - backtestId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("backtests/delete", out RestResponse result, new { projectId, backtestId }); return result; } @@ -767,19 +521,7 @@ public RestResponse DeleteBacktest(int projectId, string backtestId) /// public RestResponse UpdateBacktestTags(int projectId, string backtestId, IReadOnlyCollection tags) { - var request = new RestRequest("backtests/tags/update", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - backtestId, - tags - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("backtests/tags/update", out RestResponse result, new { projectId, backtestId, tags }); return result; } @@ -794,11 +536,7 @@ public RestResponse UpdateBacktestTags(int projectId, string backtestId, IReadOn /// public InsightResponse ReadBacktestInsights(int projectId, string backtestId, int start = 0, int end = 0) { - var request = new RestRequest("backtests/insights/read", Method.POST) - { - RequestFormat = DataFormat.Json, - }; - + //var reque var diff = end - start; if (diff > 100) { @@ -809,17 +547,7 @@ public InsightResponse ReadBacktestInsights(int projectId, string backtestId, in end = start + 100; } - JObject obj = new() - { - { "projectId", projectId }, - { "backtestId", backtestId }, - { "start", start }, - { "end", end }, - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(obj), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out InsightResponse result); + TryJsonPost("backtests/insights/read", out InsightResponse result, new { projectId, backtestId, start, end }); return result; } @@ -851,23 +579,14 @@ public CreateLiveAlgorithmResponse CreateLiveAlgorithm(int projectId, string versionId = "-1", Dictionary dataProviders = null) { - var request = new RestRequest("live/create", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject( - new LiveAlgorithmApiSettingsWrapper - (projectId, + var payload = new LiveAlgorithmApiSettingsWrapper( + projectId, compileId, nodeId, brokerageSettings, versionId, - dataProviders - ) - ), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out CreateLiveAlgorithmResponse result); + dataProviders); + TryJsonPost("live/create", out CreateLiveAlgorithmResponse result, payload); return result; } @@ -929,21 +648,10 @@ public LiveList ListLiveAlgorithms(AlgorithmStatus? status = null) "The Api only supports Algorithm Statuses of Running, Stopped, RuntimeError and Liquidated"); } - var request = new RestRequest("live/list", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - var obj = new JObject(); - - if (status.HasValue) - { - obj["status"] = status.ToString(); - } - - request.AddParameter("application/json", JsonConvert.SerializeObject(obj), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out LiveList result); + var payload = status.HasValue + ? new { status = status.ToString() } + : null; + TryJsonPost("live/list", out LiveList result, payload); return result; } @@ -956,18 +664,7 @@ public LiveList ListLiveAlgorithms(AlgorithmStatus? status = null) public LiveAlgorithmResults ReadLiveAlgorithm(int projectId, string deployId) { - var request = new RestRequest("live/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - deployId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out LiveAlgorithmResults result); + TryJsonPost("live/read", out LiveAlgorithmResults result, new { projectId, deployId }); return result; } @@ -978,17 +675,7 @@ public LiveAlgorithmResults ReadLiveAlgorithm(int projectId, string deployId) /// public PortfolioResponse ReadLivePortfolio(int projectId) { - var request = new RestRequest("live/portfolio/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out PortfolioResponse result); + TryJsonPost("live/portfolio/read", out PortfolioResponse result, new { projectId }); return result; } @@ -1003,17 +690,12 @@ public PortfolioResponse ReadLivePortfolio(int projectId) public List ReadLiveOrders(int projectId, int start = 0, int end = 100) { - var request = new RestRequest("live/orders/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new + using var request = ApiUtils.CreateJsonPostRequest("live/orders/read", new { start, end, projectId - }), ParameterType.RequestBody); + }); return MakeRequestOrThrow(request, nameof(ReadLiveOrders)).Orders; } @@ -1026,17 +708,7 @@ public List ReadLiveOrders(int projectId, int start = 0, int e public RestResponse LiquidateLiveAlgorithm(int projectId) { - var request = new RestRequest("live/update/liquidate", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("live/update/liquidate", out RestResponse result, new { projectId }); return result; } @@ -1047,17 +719,7 @@ public RestResponse LiquidateLiveAlgorithm(int projectId) /// public RestResponse StopLiveAlgorithm(int projectId) { - var request = new RestRequest("live/update/stop", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("live/update/stop", out RestResponse result, new { projectId }); return result; } @@ -1069,18 +731,7 @@ public RestResponse StopLiveAlgorithm(int projectId) /// public RestResponse CreateLiveCommand(int projectId, object command) { - var request = new RestRequest("live/commands/create", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - command - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("live/commands/create", out RestResponse result, new { projectId, command }); return result; } @@ -1093,19 +744,7 @@ public RestResponse CreateLiveCommand(int projectId, object command) /// public RestResponse BroadcastLiveCommand(string organizationId, int? excludeProjectId, object command) { - var request = new RestRequest("live/commands/broadcast", Method.POST) - { - RequestFormat = DataFormat.Json, - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - organizationId, - excludeProjectId, - command - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("live/commands/broadcast", out RestResponse result, new { organizationId, excludeProjectId, command }); return result; } @@ -1125,21 +764,16 @@ public LiveLog ReadLiveLogs(int projectId, string algorithmId, int startLine, in throw new ArgumentException($"The maximum number of log lines allowed is 250. But the number of log lines was {logLinesNumber}."); } - var request = new RestRequest("live/logs/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - format = "json", - projectId, - algorithmId, - startLine, - endLine, - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out LiveLog result); + TryJsonPost("live/logs/read", + out LiveLog result, + new + { + format = "json", + projectId, + algorithmId, + startLine, + endLine, + }); return result; } @@ -1154,29 +788,27 @@ public LiveLog ReadLiveLogs(int projectId, string algorithmId, int startLine, in /// The chart public ReadChartResponse ReadLiveChart(int projectId, string name, int start, int end, uint count) { - var request = new RestRequest("live/chart/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new + const string resource = "live/chart/read"; + var payloadStr = JsonConvert.SerializeObject(new { projectId, name, start, end, count - }), ParameterType.RequestBody); - - ReadChartResponse result = default; - ApiConnection.TryRequest(request, out result); + }); + TryJsonPost(resource, out ReadChartResponse result, payloadStr); - var finish = DateTime.UtcNow.AddMinutes(1); - while (DateTime.UtcNow < finish && result.Chart == null) + if (result.Chart == null) { - Thread.Sleep(5000); - ApiConnection.TryRequest(request, out result); + var finish = DateTime.UtcNow.AddMinutes(1); + while (DateTime.UtcNow < finish && result.Chart == null) + { + Thread.Sleep(5000); + TryJsonPost(resource, out result, payloadStr); + } } + return result; } @@ -1190,11 +822,6 @@ public ReadChartResponse ReadLiveChart(int projectId, string name, int start, in /// public InsightResponse ReadLiveInsights(int projectId, int start = 0, int end = 0) { - var request = new RestRequest("live/insights/read", Method.POST) - { - RequestFormat = DataFormat.Json, - }; - var diff = end - start; if (diff > 100) { @@ -1205,16 +832,7 @@ public InsightResponse ReadLiveInsights(int projectId, int start = 0, int end = end = start + 100; } - JObject obj = new JObject - { - { "projectId", projectId }, - { "start", start }, - { "end", end }, - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(obj), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out InsightResponse result); + TryJsonPost("live/insights/read", out InsightResponse result, new { projectId, start, end }); return result; } @@ -1234,19 +852,14 @@ public DataLink ReadDataLink(string filePath, string organizationId) // Prepare filePath for request filePath = FormatPathForDataRequest(filePath); - var request = new RestRequest("data/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - format = "link", - filePath, - organizationId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out DataLink result); + TryJsonPost("data/read", + out DataLink result, + new + { + format = "link", + filePath, + organizationId + }); return result; } @@ -1272,17 +885,7 @@ public DataList ReadDataDirectory(string filePath) $" three directories deep. FilePath: {filePath}"); } - var request = new RestRequest("data/list", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - filePath - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out DataList result); + TryJsonPost("data/list", out DataList result, new { filePath }); return result; } @@ -1291,17 +894,7 @@ public DataList ReadDataDirectory(string filePath) /// public DataPricesList ReadDataPrices(string organizationId) { - var request = new RestRequest("data/prices", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - organizationId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out DataPricesList result); + TryJsonPost("data/prices", out DataPricesList result, new { organizationId }); return result; } @@ -1313,22 +906,13 @@ public DataPricesList ReadDataPrices(string organizationId) /// public BacktestReport ReadBacktestReport(int projectId, string backtestId) { - var request = new RestRequest("backtests/read/report", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - backtestId, - projectId - }), ParameterType.RequestBody); - - BacktestReport report = new BacktestReport(); + var payloadStr = JsonConvert.SerializeObject(new { backtestId, projectId }); + var report = new BacktestReport(); var finish = DateTime.UtcNow.AddMinutes(1); while (DateTime.UtcNow < finish && !report.Success) { Thread.Sleep(10000); + using var request = ApiUtils.CreateJsonPostRequest("backtests/read/report", payloadStr); ApiConnection.TryRequest(request, out report); } return report; @@ -1532,17 +1116,7 @@ public static string CreateSecureHash(int timestamp, string token) /// The target organization id, if null will return default organization public Account ReadAccount(string organizationId = null) { - var request = new RestRequest("account/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - if (organizationId != null) - { - request.AddParameter("application/json", JsonConvert.SerializeObject(new { organizationId }), ParameterType.RequestBody); - } - - ApiConnection.TryRequest(request, out Account account); + TryJsonPost("account/read", out Account account, organizationId != null ? new { organizationId } : null); return account; } @@ -1553,17 +1127,7 @@ public Account ReadAccount(string organizationId = null) /// public Organization ReadOrganization(string organizationId = null) { - var request = new RestRequest("organizations/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - if (organizationId != null) - { - request.AddParameter("application/json", JsonConvert.SerializeObject(new { organizationId }), ParameterType.RequestBody); - } - - ApiConnection.TryRequest(request, out OrganizationResponse response); + TryJsonPost("organizations/read", out OrganizationResponse response, organizationId != null ? new { organizationId } : null); return response.Organization; } @@ -1591,25 +1155,21 @@ public Estimate EstimateOptimization( HashSet parameters, IReadOnlyList constraints) { - var request = new RestRequest("optimizations/estimate", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - name, - target, - targetTo, - targetValue, - strategy, - compileId, - parameters, - constraints - }, SerializerSettings), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out EstimateResponseWrapper response); + TryJsonPost("optimizations/estimate", + out EstimateResponseWrapper response, + new + { + projectId, + name, + target, + targetTo, + targetValue, + strategy, + compileId, + parameters, + constraints + }, + jsonSerializerSettings: SerializerSettings); return response.Estimate; } @@ -1643,28 +1203,24 @@ public OptimizationSummary CreateOptimization( string nodeType, int parallelNodes) { - var request = new RestRequest("optimizations/create", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - name, - target, - targetTo, - targetValue, - strategy, - compileId, - parameters, - constraints, - estimatedCost, - nodeType, - parallelNodes - }, SerializerSettings), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out OptimizationList result); + TryJsonPost("optimizations/create", + out OptimizationList result, + new + { + projectId, + name, + target, + targetTo, + targetValue, + strategy, + compileId, + parameters, + constraints, + estimatedCost, + nodeType, + parallelNodes + }, + jsonSerializerSettings: SerializerSettings); return result.Optimizations.FirstOrDefault(); } @@ -1675,17 +1231,7 @@ public OptimizationSummary CreateOptimization( /// A list of BaseOptimization objects, public List ListOptimizations(int projectId) { - var request = new RestRequest("optimizations/list", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - projectId, - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out OptimizationList result); + TryJsonPost("optimizations/list", out OptimizationList result, new { projectId }); return result.Optimizations; } @@ -1696,17 +1242,7 @@ public List ListOptimizations(int projectId) /// public Optimization ReadOptimization(string optimizationId) { - var request = new RestRequest("optimizations/read", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - optimizationId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out OptimizationResponseWrapper response); + TryJsonPost("optimizations/read", out OptimizationResponseWrapper response, new { optimizationId }); return response.Optimization; } @@ -1717,17 +1253,7 @@ public Optimization ReadOptimization(string optimizationId) /// public RestResponse AbortOptimization(string optimizationId) { - var request = new RestRequest("optimizations/abort", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - optimizationId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("optimizations/abort", out RestResponse result, new { optimizationId }); return result; } @@ -1739,24 +1265,10 @@ public RestResponse AbortOptimization(string optimizationId) /// public RestResponse UpdateOptimization(string optimizationId, string name = null) { - var request = new RestRequest("optimizations/update", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - var obj = new JObject - { - { "optimizationId", optimizationId } - }; - - if (name.HasValue()) - { - obj.Add("name", name); - } - - request.AddParameter("application/json", JsonConvert.SerializeObject(obj), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + object paylaod = !string.IsNullOrEmpty(name) + ? new { optimizationId, name } + : new { optimizationId }; + TryJsonPost("optimizations/update", out RestResponse result, paylaod); return result; } @@ -1767,17 +1279,7 @@ public RestResponse UpdateOptimization(string optimizationId, string name = null /// public RestResponse DeleteOptimization(string optimizationId) { - var request = new RestRequest("optimizations/delete", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - optimizationId - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("optimizations/delete", out RestResponse result, new { optimizationId }); return result; } @@ -1790,18 +1292,7 @@ public RestResponse DeleteOptimization(string optimizationId) /// True if the object store files were retrieved correctly, false otherwise public bool GetObjectStore(string organizationId, List keys, string destinationFolder = null) { - var request = new RestRequest("object/get", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(new - { - organizationId, - keys - }), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out GetObjectStoreResponse result); + TryJsonPost("object/get", out GetObjectStoreResponse result, new { organizationId, keys }); if (result == null || !result.Success) { @@ -1811,21 +1302,17 @@ public bool GetObjectStore(string organizationId, List keys, string dest } var jobId = result.JobId; - var getUrlRequest = new RestRequest("object/get", Method.POST) - { - RequestFormat = DataFormat.Json - }; - getUrlRequest.AddParameter("application/json", JsonConvert.SerializeObject(new + var getUrlPayloadStr = JsonConvert.SerializeObject(new { organizationId, jobId - }), ParameterType.RequestBody); + }); var frontier = DateTime.UtcNow + TimeSpan.FromMinutes(5); while (string.IsNullOrEmpty(result?.Url) && (DateTime.UtcNow < frontier)) { Thread.Sleep(3000); - ApiConnection.TryRequest(getUrlRequest, out result); + TryJsonPost("object/get", out result, getUrlPayloadStr); } if (result == null || string.IsNullOrEmpty(result.Url)) @@ -1873,15 +1360,7 @@ public bool GetObjectStore(string organizationId, List keys, string dest /// It does not work when the object store is a directory public PropertiesObjectStoreResponse GetObjectStoreProperties(string organizationId, string key) { - var request = new RestRequest("object/properties", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - request.AddParameter("organizationId", organizationId); - request.AddParameter("key", key); - - ApiConnection.TryRequest(request, out PropertiesObjectStoreResponse result); + TryJsonPost("object/properties", out PropertiesObjectStoreResponse result, new { organizationId, key }); if (result == null || !result.Success) { @@ -1899,16 +1378,18 @@ public PropertiesObjectStoreResponse GetObjectStoreProperties(string organizatio /// public RestResponse SetObjectStore(string organizationId, string key, byte[] objectData) { - var request = new RestRequest("object/set", Method.POST) + // HttpRequestMessage will dispose of the content and MultipartFormDataContent will dispose of its children +#pragma warning disable CA2000 // Dispose objects before losing scope + using var request = new HttpRequestMessage(HttpMethod.Post, "object/set") { - RequestFormat = DataFormat.Json + Content = new MultipartFormDataContent() + { + { new StringContent(organizationId), "organizationId" }, + { new StringContent(key), "key" }, + { new ByteArrayContent(objectData), "objectData", "objectData" } + } }; - - request.AddParameter("organizationId", organizationId); - request.AddParameter("key", key); - request.AddFileBytes("objectData", objectData, "objectData"); - request.AlwaysMultipartFormData = true; - +#pragma warning restore CA2000 // Dispose objects before losing scope ApiConnection.TryRequest(request, out RestResponse result); return result; } @@ -1921,20 +1402,7 @@ public RestResponse SetObjectStore(string organizationId, string key, byte[] obj /// public RestResponse DeleteObjectStore(string organizationId, string key) { - var request = new RestRequest("object/delete", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - var obj = new Dictionary - { - { "organizationId", organizationId }, - { "key", key } - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(obj), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out RestResponse result); + TryJsonPost("object/delete", out RestResponse result, new { organizationId, key }); return result; } @@ -1946,20 +1414,7 @@ public RestResponse DeleteObjectStore(string organizationId, string key) /// public ListObjectStoreResponse ListObjectStore(string organizationId, string path) { - var request = new RestRequest("object/list", Method.POST) - { - RequestFormat = DataFormat.Json - }; - - var obj = new Dictionary - { - { "organizationId", organizationId }, - { "path", path } - }; - - request.AddParameter("application/json", JsonConvert.SerializeObject(obj), ParameterType.RequestBody); - - ApiConnection.TryRequest(request, out ListObjectStoreResponse result); + TryJsonPost("object/list", out ListObjectStoreResponse result, new { organizationId, path }); return result; } @@ -1993,10 +1448,34 @@ public static string FormatPathForDataRequest(string filePath, string dataFolder return filePath; } + /// + /// Makes a simple POST request to the specified endpoint with the given payload + /// + protected bool TryPost(string endpoint, out T result, IEnumerable> payload = null, + ApiConnection apiConnection = null, TimeSpan? timeout = null) + where T : RestResponse + { + using var request = ApiUtils.CreatePostRequest(endpoint, payload); + + return (apiConnection ?? ApiConnection).TryRequest(request, out result, timeout); + } + + /// + /// Makes a simple POST request to the specified endpoint with the given payload + /// + protected bool TryJsonPost(string endpoint, out T result, object payload = null, + ApiConnection apiConnection = null, JsonSerializerSettings jsonSerializerSettings = null, TimeSpan? timeout = null) + where T : RestResponse + { + using var request = ApiUtils.CreateJsonPostRequest(endpoint, payload, jsonSerializerSettings); + + return (apiConnection ?? ApiConnection).TryRequest(request, out result, timeout); + } + /// /// Helper method that will execute the given api request and throw an exception if it fails /// - private T MakeRequestOrThrow(RestRequest request, string callerName) + private T MakeRequestOrThrow(HttpRequestMessage request, string callerName) where T : RestResponse { if (!ApiConnection.TryRequest(request, out T result)) diff --git a/Api/ApiConnection.cs b/Api/ApiConnection.cs index ef92850be6c4..3152751d312a 100644 --- a/Api/ApiConnection.cs +++ b/Api/ApiConnection.cs @@ -116,6 +116,10 @@ public void SetClient(string baseUrl, Dictionary defaultHeaders _httpClient.Timeout = TimeSpan.FromSeconds(timeout); Client.Timeout = timeout * 1000; } + else + { + _httpClient.Timeout = Timeout.InfiniteTimeSpan; + } } /// @@ -153,7 +157,7 @@ public bool TryRequest(RestRequest request, out T result) public bool TryRequest(HttpRequestMessage request, out T result, TimeSpan? timeout = null) where T : RestResponse { - var resultTuple = TryRequestAsync(request).SynchronouslyAwaitTaskResult(); + var resultTuple = TryRequestAsync(request, timeout).SynchronouslyAwaitTaskResult(); result = resultTuple.Item2; return resultTuple.Item1; } @@ -220,6 +224,10 @@ public async Task> TryRequestAsync(HttpRequestMessage request, HttpResponseMessage response = null; Stream responseContentStream = null; T result = null; + + // Default to 100 seconds (since we disabled the default client timeout) + timeout ??= TimeSpan.FromSeconds(100); + try { if (request.RequestUri.OriginalString.StartsWith('/')) @@ -230,17 +238,9 @@ public async Task> TryRequestAsync(HttpRequestMessage request, SetAuthenticator(request); // Execute the authenticated REST API Call - if (timeout.HasValue) - { - using var cancellationTokenSource = new CancellationTokenSource(timeout.Value); - response = await _httpClient.SendAsync(request, cancellationTokenSource.Token).ConfigureAwait(false); - responseContentStream = await response.Content.ReadAsStreamAsync(cancellationTokenSource.Token).ConfigureAwait(false); - } - else - { - response = await _httpClient.SendAsync(request).ConfigureAwait(false); - responseContentStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); - } + using var cancellationTokenSource = new CancellationTokenSource(timeout.Value); + response = await _httpClient.SendAsync(request, cancellationTokenSource.Token).ConfigureAwait(false); + responseContentStream = await response.Content.ReadAsStreamAsync(cancellationTokenSource.Token).ConfigureAwait(false); result = responseContentStream.DeserializeJson(leaveOpen: true); diff --git a/Brokerages/Authentication/OAuthTokenHandler.cs b/Brokerages/Authentication/OAuthTokenHandler.cs index 26efc668bfb5..f3bac7279ddb 100644 --- a/Brokerages/Authentication/OAuthTokenHandler.cs +++ b/Brokerages/Authentication/OAuthTokenHandler.cs @@ -14,10 +14,8 @@ */ using System; -using RestSharp; using QuantConnect.Api; using System.Threading; -using QuantConnect.Util; namespace QuantConnect.Brokerages.Authentication { @@ -51,8 +49,6 @@ public sealed class OAuthTokenHandler : TokenHandler /// private TokenCredentials _tokenCredentials; - private bool _disposed; - /// /// Initializes a new instance of the class. /// @@ -79,8 +75,7 @@ public override TokenCredentials GetAccessToken(CancellationToken cancellationTo try { - var request = new RestRequest("live/auth0/refresh", Method.POST); - request.AddJsonBody(_jsonBodyRequest); + using var request = ApiUtils.CreateJsonPostRequest("live/auth0/refresh", _jsonBodyRequest); if (_apiClient.TryRequest(request, out var response)) { @@ -99,19 +94,5 @@ public override TokenCredentials GetAccessToken(CancellationToken cancellationTo throw new InvalidOperationException($"{nameof(OAuthTokenHandler)}.{nameof(GetAccessToken)}: {ex.Message}"); } } - - /// - /// Disposes of resources - /// - protected override void Dispose(bool disposing) - { - if (disposing && !_disposed) - { - _disposed = true; - _apiClient?.DisposeSafely(); - } - - base.Dispose(disposing); - } } } diff --git a/Brokerages/BaseWebsocketsBrokerage.cs b/Brokerages/BaseWebsocketsBrokerage.cs index 2385abaa1f42..12f932e7ed23 100644 --- a/Brokerages/BaseWebsocketsBrokerage.cs +++ b/Brokerages/BaseWebsocketsBrokerage.cs @@ -21,6 +21,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; +using System.Net.Http; using System.Threading; namespace QuantConnect.Brokerages @@ -33,6 +34,9 @@ public abstract class BaseWebsocketsBrokerage : Brokerage { private const int ConnectionTimeout = 30000; + private IRestClient _restClient; + private HttpClient _httpClient; + /// /// True if the current brokerage is already initialized /// @@ -46,7 +50,41 @@ public abstract class BaseWebsocketsBrokerage : Brokerage /// /// The rest client instance /// - protected IRestClient RestClient { get; set; } + [Obsolete("RestClient is deprecated. Use HttpClient property instead")] + protected IRestClient RestClient + { + get + { + if (_restClient == null) + { + throw new InvalidOperationException("RestClient not initialized"); + } + return _restClient; + } + set + { + _restClient = value; + } + } + + /// + /// The HTTP client instance + /// + protected HttpClient HttpClient + { + get + { + if (_httpClient == null) + { + throw new InvalidOperationException("HttpClient not initialized"); + } + return _httpClient; + } + set + { + _httpClient = value; + } + } /// /// standard json parsing settings @@ -81,11 +119,36 @@ public abstract class BaseWebsocketsBrokerage : Brokerage /// instance of rest client /// api key /// api secret + [Obsolete("This Initialize method is deprecated. Use the overload that takes an HttpClient instance instead.")] protected void Initialize(string wssUrl, IWebSocket websocket, IRestClient restClient, string apiKey, string apiSecret) + { + if (TryInitialize(wssUrl, websocket, apiKey, apiSecret)) + { + RestClient = restClient; + } + } + + /// + /// Initialize the instance of this class + /// + /// The web socket base url + /// Instance of websockets client + /// Instance of HTTP client + /// Api key + /// Api secret + protected void Initialize(string wssUrl, IWebSocket websocket, HttpClient httpClient, string apiKey, string apiSecret) + { + if (TryInitialize(wssUrl, websocket, apiKey, apiSecret)) + { + HttpClient = httpClient; + } + } + + private bool TryInitialize(string wssUrl, IWebSocket websocket, string apiKey, string apiSecret) { if (IsInitialized) { - return; + return false; } IsInitialized = true; JsonSettings = new JsonSerializerSettings { FloatParseHandling = FloatParseHandling.Decimal }; @@ -101,9 +164,10 @@ protected void Initialize(string wssUrl, IWebSocket websocket, IRestClient restC Subscribe(GetSubscribed()); }; - RestClient = restClient; ApiSecret = apiSecret; ApiKey = apiKey; + + return true; } /// diff --git a/Common/Api/Organization.cs b/Common/Api/Organization.cs index 5244ab90d642..a3fcfaa32fcf 100644 --- a/Common/Api/Organization.cs +++ b/Common/Api/Organization.cs @@ -69,6 +69,7 @@ public class DataAgreement /// DateTime the agreement was signed. /// Uses EpochSignedTime converted to a standard datetime. /// + [JsonIgnore] public DateTime? SignedTime => EpochSignedTime.HasValue ? DateTimeOffset.FromUnixTimeSeconds(EpochSignedTime.Value).DateTime : null; /// @@ -108,7 +109,7 @@ public class Product } /// - /// QuantConnect ProductItem + /// QuantConnect ProductItem /// public class ProductItem { diff --git a/Common/Extensions.cs b/Common/Extensions.cs index d896d189acd4..0c45efb93aa1 100644 --- a/Common/Extensions.cs +++ b/Common/Extensions.cs @@ -292,7 +292,7 @@ public static bool TryDownloadData(this HttpClient client, string url, out strin { foreach (var kvp in headers) { - request.Headers.Add(kvp.Key, kvp.Value); + request.Headers.TryAddWithoutValidation(kvp.Key, kvp.Value); } } try diff --git a/Engine/DataFeeds/Transport/RestSubscriptionStreamReader.cs b/Engine/DataFeeds/Transport/RestSubscriptionStreamReader.cs index fd2e64e80896..23668cf155e8 100644 --- a/Engine/DataFeeds/Transport/RestSubscriptionStreamReader.cs +++ b/Engine/DataFeeds/Transport/RestSubscriptionStreamReader.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -17,9 +17,9 @@ using System; using System.Collections.Generic; using System.IO; +using System.Net.Http; using QuantConnect.Interfaces; using QuantConnect.Logging; -using RestSharp; namespace QuantConnect.Lean.Engine.DataFeeds.Transport { @@ -28,8 +28,10 @@ namespace QuantConnect.Lean.Engine.DataFeeds.Transport /// public class RestSubscriptionStreamReader : IStreamReader { - private readonly RestClient _client; - private readonly RestRequest _request; + private static readonly HttpClient _client = new HttpClient(); + + private readonly string _baseUrl; + private readonly Dictionary _headers; private readonly bool _isLiveMode; private bool _delivered; @@ -51,18 +53,13 @@ public class RestSubscriptionStreamReader : IStreamReader /// True for live mode, false otherwise public RestSubscriptionStreamReader(string source, IEnumerable> headers, bool isLiveMode) { - _client = new RestClient(source); - _request = new RestRequest(Method.GET); - _isLiveMode = isLiveMode; - _delivered = false; - + _baseUrl = source; if (headers != null) { - foreach (var header in headers) - { - _request.AddHeader(header.Key, header.Value); - } + _headers = new Dictionary(headers); } + _isLiveMode = isLiveMode; + _delivered = false; } /// @@ -88,11 +85,10 @@ public string ReadLine() { try { - var response = _client.Execute(_request); - if (response != null) + if (_client.TryDownloadData(_baseUrl, out string data, out _, _headers)) { _delivered = true; - return response.Content; + return data; } } catch (Exception err) @@ -108,6 +104,7 @@ public string ReadLine() /// public void Dispose() { + _client.Dispose(); } } -} \ No newline at end of file +} diff --git a/Engine/QuantConnect.Lean.Engine.csproj b/Engine/QuantConnect.Lean.Engine.csproj index 9501da0dab81..b611e65edc61 100644 --- a/Engine/QuantConnect.Lean.Engine.csproj +++ b/Engine/QuantConnect.Lean.Engine.csproj @@ -46,7 +46,6 @@ - diff --git a/Messaging/QuantConnect.Messaging.csproj b/Messaging/QuantConnect.Messaging.csproj index 80db8f6c7e4d..40b05ca6666b 100644 --- a/Messaging/QuantConnect.Messaging.csproj +++ b/Messaging/QuantConnect.Messaging.csproj @@ -31,7 +31,6 @@ - diff --git a/Tests/Api/ObjectStoreTests.cs b/Tests/Api/ObjectStoreTests.cs index fb6276c38705..a0aabf35632b 100644 --- a/Tests/Api/ObjectStoreTests.cs +++ b/Tests/Api/ObjectStoreTests.cs @@ -14,7 +14,6 @@ */ using NUnit.Framework; -using QuantConnect.Configuration; using System.Collections.Generic; using System; using System.IO; @@ -30,7 +29,7 @@ public class ObjectStoreTests: ApiTestBase private readonly byte[] _data = new byte[3] { 1, 2, 3 }; [TestCaseSource(nameof(GetObjectStoreWorksAsExpectedTestCases))] - public void GetObjectStoreWorksAsExpected(List keys, bool isSuccessExpected) + public void GetObjectStoreWorksAsExpected(string testName, List keys, bool isSuccessExpected) { var path = Directory.GetCurrentDirectory() + "/StoreObjectFolder/"; var result = ApiClient.GetObjectStore(TestOrganization, keys, path); @@ -122,20 +121,20 @@ public void ListObjectStoreWorksAsExpected() private static object[] GetObjectStoreWorksAsExpectedTestCases = { - new object[] { new List { "/trades_test.json", "/profile_results.json" }, true}, // Two keys present - new object[] { new List {}, false}, // No key is given - new object[] { new List { "/trades_test.json", "/orats_2024-02-32.json" }, true}, // One key is present and the other one not - new object[] { new List { "/orats_2024-02-32.json" }, false}, // The key is not present - new object[] { new List { "/CustomData" }, true}, // The type of the object store file is directory - new object[] { new List { "/log.txt" }, true}, // The type of the object store file is text/plain - new object[] { new List { "/model" }, true}, // The type of the object store file is application/octet-stream - new object[] { new List { "/l1_model.p" }, true}, // The type of the object store file is P - new object[] { new List { + new object[] { "Two keys present", new List { "/trades_test.json", "/profile_results.json" }, true}, + new object[] { "No key is given", new List {}, false}, + new object[] { "One key is present and the other one not", new List { "/trades_test.json", "/orats_2024-02-32.json" }, true}, + new object[] { "The key is not present", new List { "/orats_2024-02-32.json" }, false}, + new object[] { "The type of the object store file is directory", new List { "/CustomData" }, true}, + new object[] { "The type of the object store file is text/plain", new List { "/log.txt" }, true}, + new object[] { "The type of the object store file is application/octet-stream", new List { "/model" }, true}, + new object[] { "The type of the object store file is P", new List { "/l1_model.p" }, true}, + new object[] { "Heavy object store files", new List { "/latency_1_False.txt", "/portfolio-targets2.csv", "/Regressor", "/example_data_2.zip" - }, true} // Heavy object store files + }, true} }; } } diff --git a/Tests/Api/ProjectTests.cs b/Tests/Api/ProjectTests.cs index bacf628c9f1f..cb3e4b3cf7f2 100644 --- a/Tests/Api/ProjectTests.cs +++ b/Tests/Api/ProjectTests.cs @@ -285,7 +285,11 @@ private void Perform_CreateCompileBackTest_Tests(string projectName, Language la // Now read the backtest and wait for it to complete var backtestRead = WaitForBacktestCompletion(ApiClient, project.Projects.First().ProjectId, backtest.BacktestId, secondsTimeout: 600, returnFailedBacktest: true); Assert.IsTrue(backtestRead.Success); + + // Backtest completed, let's wait a second to allow status update + backtestRead = ApiClient.ReadBacktest(project.Projects.First().ProjectId, backtestRead.BacktestId); Assert.AreEqual(expectedStatus, backtestRead.Status); + if (expectedStatus == "Runtime Error") { Assert.IsTrue(backtestRead.Error.Contains("Intentional Failure", StringComparison.InvariantCulture) || backtestRead.HasInitializeError); From f804b8f0ca5162d6a8c7f3310f3180d4b61833fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Mon, 22 Dec 2025 14:42:25 -0500 Subject: [PATCH 052/103] Add 2026 Index holidays to MHDB (#9152) * Add index-usa-[*] holidays and early closes * Add Index-spx 2026-2027 holidays & early closes * Add 2026 Index-ndx holidays & early closes * Add 2026 Index-VIX holidays and early closes * Add EUREX Index holidays 2026-2030 * Add index HKFE 2026 holidays and early closes * Add 2026 Index-OSE holidays and early closes * Add missing 2026 Index-India NSE holidays * Address suggested changes --- Data/market-hours/market-hours-database.json | 451 ++++++++++++------- 1 file changed, 295 insertions(+), 156 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index a2de9a6fb29f..1db7d086da9b 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -129897,6 +129897,8 @@ "1/1/2022", "1/1/2024", "1/1/2025", + "1/1/2026", + "1/1/2027", "1/2/2023", "1/2/2007", "1/9/2025", @@ -129928,6 +129930,8 @@ "1/16/2023", "1/15/2024", "1/20/2025", + "1/19/2026", + "1/18/2027", "2/16/1998", "2/15/1999", "2/21/2000", @@ -129956,6 +129960,8 @@ "2/20/2023", "2/19/2024", "2/17/2025", + "2/16/2026", + "2/15/2027", "4/10/1998", "4/2/1999", "4/21/2000", @@ -129984,6 +129990,8 @@ "4/7/2023", "3/29/2024", "4/18/2025", + "4/3/2026", + "3/26/2027", "5/25/1998", "5/31/1999", "5/29/2000", @@ -130012,11 +130020,15 @@ "5/29/2023", "5/27/2024", "5/26/2025", + "5/25/2026", + "5/31/2027", "6/11/2004", "6/20/2022", "6/19/2023", "6/19/2024", "6/19/2025", + "6/19/2026", + "6/18/2027", "7/3/1998", "7/5/1999", "7/4/2000", @@ -130045,6 +130057,8 @@ "7/4/2023", "7/4/2024", "7/4/2025", + "7/3/2026", + "7/5/2027", "9/7/1998", "9/6/1999", "9/4/2000", @@ -130073,6 +130087,8 @@ "9/4/2023", "9/2/2024", "9/1/2025", + "9/7/2026", + "9/6/2027", "9/11/2001", "9/12/2001", "9/13/2001", @@ -130107,6 +130123,8 @@ "11/23/2023", "11/28/2024", "11/27/2025", + "11/26/2026", + "11/25/2027", "12/05/2018", "12/25/1998", "12/24/1999", @@ -130135,7 +130153,9 @@ "12/26/2022", "12/25/2023", "12/25/2024", - "12/25/2025" + "12/25/2025", + "12/25/2026", + "12/24/2027" ], "earlyCloses": { "7/3/2000": "12:00:00", @@ -130181,6 +130201,8 @@ "11/24/2023": "12:00:00", "11/29/2024": "12:00:00", "11/28/2025": "12:00:00", + "11/27/2026": "12:00:00", + "11/26/2027": "12:00:00", "12/24/2001": "12:00:00", "12/24/2002": "12:00:00", "12/24/2003": "12:00:00", @@ -130197,7 +130219,8 @@ "12/24/2019": "12:00:00", "12/24/2020": "12:00:00", "12/24/2024": "12:00:00", - "12/24/2025": "12:00:00" + "12/24/2025": "12:00:00", + "12/24/2026": "12:00:00" } }, "Index-eurex-DAX": { @@ -130403,6 +130426,7 @@ "1/1/2025", "1/2/2007", "1/9/2025", + "1/1/2026", "9/11/2001", "9/12/2001", "9/13/2001", @@ -130438,6 +130462,7 @@ "1/16/2023", "1/15/2024", "1/20/2025", + "1/19/2026", "2/16/1998", "2/15/1999", "2/21/2000", @@ -130466,6 +130491,7 @@ "2/20/2023", "2/19/2024", "2/17/2025", + "2/16/2026", "4/10/1998", "4/2/1999", "4/21/2000", @@ -130494,6 +130520,7 @@ "4/7/2023", "3/29/2024", "4/18/2025", + "4/3/2026", "5/25/1998", "5/31/1999", "5/29/2000", @@ -130522,10 +130549,12 @@ "5/29/2023", "5/27/2024", "5/26/2025", + "5/25/2026", "6/20/2022", "6/19/2023", "6/19/2024", "6/19/2025", + "6/19/2026", "7/3/1998", "7/5/1999", "7/4/2000", @@ -130554,6 +130583,7 @@ "7/4/2023", "7/4/2024", "7/4/2025", + "7/3/2026", "9/7/1998", "9/6/1999", "9/4/2000", @@ -130582,6 +130612,7 @@ "9/4/2023", "9/2/2024", "9/1/2025", + "9/7/2026", "11/26/1998", "11/25/1999", "11/23/2000", @@ -130610,6 +130641,7 @@ "11/23/2023", "11/28/2024", "11/27/2025", + "11/26/2026", "12/05/2018", "12/25/1998", "12/24/1999", @@ -130638,7 +130670,8 @@ "12/26/2022", "12/25/2023", "12/25/2024", - "12/25/2025" + "12/25/2025", + "12/25/2026" ], "earlyCloses": { "7/3/2000": "12:15:00", @@ -130683,6 +130716,7 @@ "11/24/2023": "12:15:00", "11/29/2024": "12:00:00", "11/28/2025": "12:00:00", + "11/27/2026": "12:00:00", "12/24/2001": "12:15:00", "12/24/2002": "12:15:00", "12/24/2003": "12:15:00", @@ -130699,7 +130733,8 @@ "12/24/2019": "12:15:00", "12/24/2020": "12:15:00", "12/24/2024": "12:00:00", - "12/24/2025": "12:00:00" + "12/24/2025": "12:00:00", + "12/24/2026": "12:00:00" } }, "Index-usa-NDX": { @@ -130769,6 +130804,7 @@ "1/2/2023", "1/1/2024", "1/1/2025", + "1/1/2026", "1/2/2007", "1/9/2025", "9/11/2001", @@ -130806,6 +130842,7 @@ "1/16/2023", "1/15/2024", "1/20/2025", + "1/19/2026", "2/16/1998", "2/15/1999", "2/21/2000", @@ -130834,6 +130871,7 @@ "2/20/2023", "2/19/2024", "2/17/2025", + "2/16/2026", "4/10/1998", "4/2/1999", "4/21/2000", @@ -130862,6 +130900,7 @@ "4/7/2023", "3/29/2024", "4/18/2025", + "4/3/2026", "5/25/1998", "5/31/1999", "5/29/2000", @@ -130890,10 +130929,12 @@ "5/29/2023", "5/27/2024", "5/26/2025", + "5/25/2026", "6/20/2022", "6/19/2023", "6/19/2024", "6/19/2025", + "6/19/2026", "7/3/1998", "7/5/1999", "7/4/2000", @@ -130922,6 +130963,7 @@ "7/4/2023", "7/4/2024", "7/4/2025", + "7/3/2026", "9/7/1998", "9/6/1999", "9/4/2000", @@ -130950,6 +130992,7 @@ "9/4/2023", "9/2/2024", "9/1/2025", + "9/7/2026", "11/26/1998", "11/25/1999", "11/23/2000", @@ -130978,6 +131021,7 @@ "11/23/2023", "11/28/2024", "11/27/2025", + "11/26/2026", "12/05/2018", "12/25/1998", "12/24/1999", @@ -131006,7 +131050,8 @@ "12/26/2022", "12/25/2023", "12/25/2024", - "12/25/2025" + "12/25/2025", + "12/25/2026" ], "earlyCloses": { "7/3/2000": "13:00:00", @@ -131052,6 +131097,7 @@ "11/24/2023": "13:00:00", "11/29/2024": "13:00:00", "11/28/2025": "13:00:00", + "11/27/2026": "13:00:00", "12/24/2001": "13:00:00", "12/24/2002": "13:00:00", "12/24/2003": "13:00:00", @@ -131068,7 +131114,8 @@ "12/24/2019": "13:00:00", "12/24/2020": "13:00:00", "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" + "12/24/2025": "13:00:00", + "12/24/2026": "13:00:00" } }, "Index-usa-SPX": { @@ -131138,6 +131185,8 @@ "1/2/2023", "1/1/2024", "1/1/2025", + "1/1/2026", + "1/1/2027", "1/2/2007", "1/9/2025", "9/11/2001", @@ -131175,6 +131224,8 @@ "1/16/2023", "1/15/2024", "1/20/2025", + "1/19/2026", + "1/18/2027", "2/16/1998", "2/15/1999", "2/21/2000", @@ -131203,6 +131254,8 @@ "2/20/2023", "2/19/2024", "2/17/2025", + "2/16/2026", + "2/15/2027", "4/10/1998", "4/2/1999", "4/21/2000", @@ -131231,6 +131284,8 @@ "4/7/2023", "3/29/2024", "4/18/2025", + "4/3/2026", + "3/26/2027", "5/25/1998", "5/31/1999", "5/29/2000", @@ -131259,10 +131314,14 @@ "5/29/2023", "5/27/2024", "5/26/2025", + "5/25/2026", + "5/31/2027", "6/20/2022", "6/19/2023", "6/19/2024", "6/19/2025", + "6/19/2026", + "6/18/2027", "7/3/1998", "7/5/1999", "7/4/2000", @@ -131291,6 +131350,8 @@ "7/4/2023", "7/4/2024", "7/4/2025", + "7/3/2026", + "7/5/2027", "9/7/1998", "9/6/1999", "9/4/2000", @@ -131319,6 +131380,8 @@ "9/4/2023", "9/2/2024", "9/1/2025", + "9/7/2026", + "9/6/2027", "11/26/1998", "11/25/1999", "11/23/2000", @@ -131347,6 +131410,8 @@ "11/23/2023", "11/28/2024", "11/27/2025", + "11/26/2026", + "11/25/2027", "12/05/2018", "12/25/1998", "12/24/1999", @@ -131375,7 +131440,9 @@ "12/26/2022", "12/25/2023", "12/25/2024", - "12/25/2025" + "12/25/2025", + "12/25/2026", + "12/24/2027" ], "earlyCloses": { "7/3/2000": "12:00:00", @@ -131421,6 +131488,8 @@ "11/24/2023": "12:00:00", "11/29/2024": "12:00:00", "11/28/2025": "12:00:00", + "11/27/2026": "12:00:00", + "11/26/2027": "12:00:00", "12/24/2001": "12:00:00", "12/24/2002": "12:00:00", "12/24/2003": "12:00:00", @@ -131437,7 +131506,8 @@ "12/24/2019": "12:00:00", "12/24/2020": "12:00:00", "12/24/2024": "12:00:00", - "12/24/2025": "12:00:00" + "12/24/2025": "12:00:00", + "12/24/2026": "12:00:00" } }, "Index-usa-RUT": { @@ -153577,11 +153647,9 @@ "4/12/2004", "5/1/2004", "12/24/2004", - "12/24/2004", "12/25/2004", "12/26/2004", "12/31/2004", - "12/31/2004", "3/25/2005", "3/28/2005", "12/26/2005", @@ -153713,7 +153781,40 @@ "12/24/2025", "12/25/2025", "12/26/2025", - "12/31/2025" + "12/31/2025", + "1/1/2026", + "4/3/2026", + "4/6/2026", + "5/1/2026", + "12/24/2026", + "12/25/2026", + "12/31/2026", + "1/1/2027", + "3/26/2027", + "3/29/2027", + "12/24/2027", + "12/31/2027", + "4/14/2028", + "4/17/2028", + "5/1/2028", + "12/25/2028", + "12/26/2028", + "1/1/2029", + "3/30/2029", + "4/2/2029", + "5/1/2029", + "12/24/2029", + "12/25/2029", + "12/26/2029", + "12/31/2029", + "1/1/2030", + "4/19/2030", + "4/22/2030", + "5/1/2030", + "12/24/2030", + "12/25/2030", + "12/26/2030", + "12/31/2030" ] }, "Future-eurex-[*]": { @@ -154117,7 +154218,21 @@ "10/7/2025", "10/29/2025", "12/25/2025", - "12/26/2025" + "12/26/2025", + "1/1/2026", + "2/17/2026", + "2/18/2026", + "2/19/2026", + "4/3/2026", + "4/6/2026", + "4/7/2026", + "5/1/2026", + "5/25/2026", + "6/19/2026", + "7/1/2026", + "10/1/2026", + "10/19/2026", + "12/25/2026" ], "earlyCloses": { "2/15/2018": "12:00:00", @@ -154138,7 +154253,10 @@ "12/31/2024": "12:00:00", "1/28/2025": "12:00:00", "12/24/2025": "12:00:00", - "12/31/2025": "12:00:00" + "12/31/2025": "12:00:00", + "2/16/2026": "12:00:00", + "12/24/2026": "12:00:00", + "12/31/2026": "12:00:00" }, "lateOpens": {} }, @@ -154913,171 +155031,192 @@ ], "saturday": [], "holidays": [ - "01/01/2016", - "01/11/2016", - "02/11/2016", - "03/21/2016", - "04/29/2016", - "05/03/2016", - "05/04/2016", - "05/05/2016", - "07/18/2016", - "08/11/2016", - "09/19/2016", - "09/22/2016", + "1/1/2016", + "1/11/2016", + "2/11/2016", + "3/21/2016", + "4/29/2016", + "5/3/2016", + "5/4/2016", + "5/5/2016", + "7/18/2016", + "8/11/2016", + "9/19/2016", + "9/22/2016", "10/10/2016", - "11/03/2016", + "11/3/2016", "11/23/2016", "12/23/2016", "12/31/2016", - "01/02/2017", - "01/03/2017", - "01/09/2017", - "03/20/2017", - "05/03/2017", - "05/04/2017", - "05/05/2017", - "07/17/2017", - "08/11/2017", - "09/18/2017", - "10/09/2017", - "11/03/2017", + "1/2/2017", + "1/3/2017", + "1/9/2017", + "3/20/2017", + "5/3/2017", + "5/4/2017", + "5/5/2017", + "7/17/2017", + "8/11/2017", + "9/18/2017", + "10/9/2017", + "11/3/2017", "11/23/2017", - "01/01/2018", - "01/02/2018", - "01/03/2018", - "01/08/2018", - "02/12/2018", - "03/21/2018", - "04/30/2018", - "05/03/2018", - "05/04/2018", - "07/16/2018", - "09/17/2018", - "09/24/2018", - "10/08/2018", + "1/1/2018", + "1/2/2018", + "1/3/2018", + "1/8/2018", + "2/12/2018", + "3/21/2018", + "4/30/2018", + "5/3/2018", + "5/4/2018", + "7/16/2018", + "9/17/2018", + "9/24/2018", + "10/8/2018", "11/23/2018", "12/24/2018", "12/31/2018", - "01/01/2019", - "01/02/2019", - "01/03/2019", - "01/14/2019", - "02/11/2019", - "03/21/2019", - "04/29/2019", - "04/30/2019", - "05/01/2019", - "05/02/2019", - "05/03/2019", - "05/06/2019", - "07/15/2019", - "08/12/2019", - "09/16/2019", - "09/23/2019", + "1/1/2019", + "1/2/2019", + "1/3/2019", + "1/14/2019", + "2/11/2019", + "3/21/2019", + "4/29/2019", + "4/30/2019", + "5/1/2019", + "5/2/2019", + "5/3/2019", + "5/6/2019", + "7/15/2019", + "8/12/2019", + "9/16/2019", + "9/23/2019", "10/14/2019", "10/22/2019", - "11/04/2019", + "11/4/2019", "12/31/2019", - "01/01/2020", - "01/02/2020", - "01/03/2020", - "01/13/2020", - "02/11/2020", - "02/24/2020", - "03/20/2020", - "04/29/2020", - "05/04/2020", - "05/05/2020", - "05/06/2020", - "07/23/2020", - "07/24/2020", - "08/10/2020", - "09/21/2020", - "09/22/2020", - "11/03/2020", + "1/1/2020", + "1/2/2020", + "1/3/2020", + "1/13/2020", + "2/11/2020", + "2/24/2020", + "3/20/2020", + "4/29/2020", + "5/4/2020", + "5/5/2020", + "5/6/2020", + "7/23/2020", + "7/24/2020", + "8/10/2020", + "9/21/2020", + "9/22/2020", + "11/3/2020", "11/23/2020", "12/31/2020", - "01/01/2021", - "01/11/2021", - "02/11/2021", - "02/23/2021", - "04/29/2021", - "05/03/2021", - "05/04/2021", - "05/05/2021", - "07/22/2021", - "07/23/2021", - "08/09/2021", - "09/20/2021", - "09/23/2021", - "11/03/2021", + "1/1/2021", + "1/11/2021", + "2/11/2021", + "2/23/2021", + "4/29/2021", + "5/3/2021", + "5/4/2021", + "5/5/2021", + "7/22/2021", + "7/23/2021", + "8/9/2021", + "9/20/2021", + "9/23/2021", + "11/3/2021", "11/23/2021", "12/31/2021", - "01/03/2022", - "01/10/2022", - "02/11/2022", - "02/23/2022", - "03/21/2022", - "04/29/2022", - "05/03/2022", - "05/04/2022", - "05/05/2022", - "07/18/2022", - "08/11/2022", - "09/19/2022", + "1/3/2022", + "1/10/2022", + "2/11/2022", + "2/23/2022", + "3/21/2022", + "4/29/2022", + "5/3/2022", + "5/4/2022", + "5/5/2022", + "7/18/2022", + "8/11/2022", + "9/19/2022", "10/10/2022", - "11/03/2022", + "11/3/2022", "11/23/2022", - "01/02/2023", - "01/03/2023", - "01/09/2023", - "02/23/2023", - "03/21/2023", - "05/03/2023", - "05/04/2023", - "05/05/2023", - "07/17/2023", - "08/11/2023", - "09/18/2023", - "10/09/2023", - "11/03/2023", + "1/2/2023", + "1/3/2023", + "1/9/2023", + "2/23/2023", + "3/21/2023", + "5/3/2023", + "5/4/2023", + "5/5/2023", + "7/17/2023", + "8/11/2023", + "9/18/2023", + "10/9/2023", + "11/3/2023", "11/23/2023", - "01/01/2024", - "01/02/2024", - "01/03/2024", - "01/08/2024", - "02/12/2024", - "02/23/2024", - "03/20/2024", - "04/29/2024", - "05/03/2024", - "05/06/2024", - "07/15/2024", - "08/12/2024", - "09/16/2024", - "09/23/2024", + "1/1/2024", + "1/2/2024", + "1/3/2024", + "1/8/2024", + "2/12/2024", + "2/23/2024", + "3/20/2024", + "4/29/2024", + "5/3/2024", + "5/6/2024", + "7/15/2024", + "8/12/2024", + "9/16/2024", + "9/23/2024", "10/14/2024", - "11/04/2024", + "11/4/2024", "12/31/2024", - "01/01/2025", - "01/02/2025", - "01/03/2025", - "01/13/2025", - "02/11/2025", - "02/24/2025", - "03/20/2025", - "04/29/2025", - "05/05/2025", - "05/06/2025", - "07/21/2025", - "08/11/2025", - "09/15/2025", - "09/23/2025", + "1/1/2025", + "1/2/2025", + "1/3/2025", + "1/13/2025", + "2/11/2025", + "2/24/2025", + "3/20/2025", + "4/29/2025", + "5/5/2025", + "5/6/2025", + "7/21/2025", + "8/11/2025", + "9/15/2025", + "9/23/2025", "10/13/2025", - "11/03/2025", + "11/3/2025", "11/24/2025", - "12/31/2025" + "12/31/2025", + "1/1/2026", + "1/2/2026", + "1/3/2026", + "1/12/2026", + "2/11/2026", + "2/23/2026", + "3/20/2026", + "4/29/2026", + "5/3/2026", + "5/4/2026", + "5/5/2026", + "5/6/2026", + "7/20/2026", + "8/11/2026", + "9/21/2026", + "9/22/2026", + "9/23/2026", + "10/12/2026", + "11/3/2026", + "11/23/2026", + "12/31/2026" ], "earlyCloses": {}, "lateOpens": {} From c565f4cfd0af59d5d47669d432a583aad6f8e5ca Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Mon, 22 Dec 2025 17:08:24 -0400 Subject: [PATCH 053/103] Refactor optimization statistics serialization (#8984) * Refactor optimization result stats serialization * Handle custom optimization statistics serialization * Support custom statistics * Support newest Lean statistics Address peer review * Add more tests * Make indices reserved statistic names * Minor fixes and cleanup --- Algorithm/QCAlgorithm.Plotting.cs | 12 +- .../Api/OptimizationBacktestJsonConverter.cs | 114 +++++++++++------- Tests/Algorithm/AlgorithmPlottingTests.cs | 11 ++ .../OptimizationBacktestJsonConverterTests.cs | 110 +++++++++++++++-- 4 files changed, 196 insertions(+), 51 deletions(-) diff --git a/Algorithm/QCAlgorithm.Plotting.cs b/Algorithm/QCAlgorithm.Plotting.cs index 23abbae02a4f..a8c68999dd4b 100644 --- a/Algorithm/QCAlgorithm.Plotting.cs +++ b/Algorithm/QCAlgorithm.Plotting.cs @@ -497,6 +497,12 @@ public void SetRuntimeStatistic(string name, double value) [DocumentationAttribute(StatisticsTag)] public void SetSummaryStatistic(string name, string value) { + if (int.TryParse(name, NumberStyles.Integer, CultureInfo.InvariantCulture, out var intName) && + intName >= 0 && intName <= 100) + { + throw new ArgumentException($"'{name}' is a reserved statistic name."); + } + _statisticsService.SetSummaryStatistic(name, value); } @@ -508,7 +514,7 @@ public void SetSummaryStatistic(string name, string value) [DocumentationAttribute(StatisticsTag)] public void SetSummaryStatistic(string name, int value) { - _statisticsService.SetSummaryStatistic(name, value.ToStringInvariant()); + SetSummaryStatistic(name, value.ToStringInvariant()); } /// @@ -519,7 +525,7 @@ public void SetSummaryStatistic(string name, int value) [DocumentationAttribute(StatisticsTag)] public void SetSummaryStatistic(string name, double value) { - _statisticsService.SetSummaryStatistic(name, value.ToStringInvariant()); + SetSummaryStatistic(name, value.ToStringInvariant()); } /// @@ -530,7 +536,7 @@ public void SetSummaryStatistic(string name, double value) [DocumentationAttribute(StatisticsTag)] public void SetSummaryStatistic(string name, decimal value) { - _statisticsService.SetSummaryStatistic(name, value.ToStringInvariant()); + SetSummaryStatistic(name, value.ToStringInvariant()); } /// diff --git a/Common/Api/OptimizationBacktestJsonConverter.cs b/Common/Api/OptimizationBacktestJsonConverter.cs index a2fea19201a8..5308cbce835a 100644 --- a/Common/Api/OptimizationBacktestJsonConverter.cs +++ b/Common/Api/OptimizationBacktestJsonConverter.cs @@ -15,8 +15,8 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Linq; +using System.Runtime.CompilerServices; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using QuantConnect.Optimizer.Parameters; @@ -30,6 +30,43 @@ namespace QuantConnect.Api /// public class OptimizationBacktestJsonConverter : JsonConverter { + private static Dictionary StatisticsIndices = new() + { + { PerformanceMetrics.Alpha, 0 }, + { PerformanceMetrics.AnnualStandardDeviation, 1 }, + { PerformanceMetrics.AnnualVariance, 2 }, + { PerformanceMetrics.AverageLoss, 3 }, + { PerformanceMetrics.AverageWin, 4 }, + { PerformanceMetrics.Beta, 5 }, + { PerformanceMetrics.CompoundingAnnualReturn, 6 }, + { PerformanceMetrics.Drawdown, 7 }, + { PerformanceMetrics.EstimatedStrategyCapacity, 8 }, + { PerformanceMetrics.Expectancy, 9 }, + { PerformanceMetrics.InformationRatio, 10 }, + { PerformanceMetrics.LossRate, 11 }, + { PerformanceMetrics.NetProfit, 12 }, + { PerformanceMetrics.ProbabilisticSharpeRatio, 13 }, + { PerformanceMetrics.ProfitLossRatio, 14 }, + { PerformanceMetrics.SharpeRatio, 15 }, + { PerformanceMetrics.TotalFees, 16 }, + { PerformanceMetrics.TotalOrders, 17 }, + { PerformanceMetrics.TrackingError, 18 }, + { PerformanceMetrics.TreynorRatio, 19 }, + { PerformanceMetrics.WinRate, 20 }, + { PerformanceMetrics.SortinoRatio, 21 }, + { PerformanceMetrics.StartEquity, 22 }, + { PerformanceMetrics.EndEquity, 23 }, + { PerformanceMetrics.DrawdownRecovery, 24 }, + }; + + private static string[] StatisticNames { get; } = StatisticsIndices + .OrderBy(kvp => kvp.Value) + .Select(kvp => kvp.Key) + .ToArray(); + + // Only 21 Lean statistics where supported when the serialized statistics where a json array + private static int ArrayStatisticsCount = 21; + /// /// Determines whether this instance can convert the specified object type. /// @@ -97,25 +134,23 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s if (!optimizationBacktest.Statistics.IsNullOrEmpty()) { writer.WritePropertyName("statistics"); - writer.WriteStartArray(); - foreach (var keyValuePair in optimizationBacktest.Statistics.OrderBy(pair => pair.Key)) + writer.WriteStartObject(); + + var customStatisticsNames = new HashSet(); + + foreach (var (name, statisticValue, index) in optimizationBacktest.Statistics + .Select(kvp => (Name: kvp.Key, kvp.Value, Index: StatisticsIndices.TryGetValue(kvp.Key, out var index) ? index : int.MaxValue)) + .OrderBy(t => t.Index) + .ThenByDescending(t => t.Name)) { - switch (keyValuePair.Key) - { - case PerformanceMetrics.PortfolioTurnover: - case PerformanceMetrics.SortinoRatio: - case PerformanceMetrics.StartEquity: - case PerformanceMetrics.EndEquity: - case PerformanceMetrics.DrawdownRecovery: - continue; - } - var statistic = keyValuePair.Value.Replace("%", string.Empty); + var statistic = statisticValue.Replace("%", string.Empty, StringComparison.InvariantCulture); if (Currencies.TryParse(statistic, out var result)) { + writer.WritePropertyName(index < StatisticsIndices.Count ? index.ToStringInvariant() : name); writer.WriteValue(result); } } - writer.WriteEndArray(); + writer.WriteEndObject(); } if (optimizationBacktest.ParameterSet != null) @@ -164,34 +199,25 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist Dictionary statistics = default; if (jStatistics != null) { - statistics = new Dictionary + if (jStatistics.Type == JTokenType.Array) { - { PerformanceMetrics.Alpha, jStatistics[0].Value() }, - { PerformanceMetrics.AnnualStandardDeviation, jStatistics[1].Value() }, - { PerformanceMetrics.AnnualVariance, jStatistics[2].Value() }, - { PerformanceMetrics.AverageLoss, jStatistics[3].Value() }, - { PerformanceMetrics.AverageWin, jStatistics[4].Value() }, - { PerformanceMetrics.Beta, jStatistics[5].Value() }, - { PerformanceMetrics.CompoundingAnnualReturn, jStatistics[6].Value() }, - { PerformanceMetrics.Drawdown, jStatistics[7].Value() }, - { PerformanceMetrics.EstimatedStrategyCapacity, jStatistics[8].Value() }, - { PerformanceMetrics.Expectancy, jStatistics[9].Value() }, - { PerformanceMetrics.InformationRatio, jStatistics[10].Value() }, - { PerformanceMetrics.LossRate, jStatistics[11].Value() }, - { PerformanceMetrics.NetProfit, jStatistics[12].Value() }, - { PerformanceMetrics.ProbabilisticSharpeRatio, jStatistics[13].Value() }, - { PerformanceMetrics.ProfitLossRatio, jStatistics[14].Value() }, - { PerformanceMetrics.SharpeRatio, jStatistics[15].Value() }, - // TODO: Add SortinoRatio - // TODO: Add StartingEquity - // TODO: Add EndingEquity - // TODO: Add DrawdownRecovery - { PerformanceMetrics.TotalFees, jStatistics[16].Value() }, - { PerformanceMetrics.TotalOrders, jStatistics[17].Value() }, - { PerformanceMetrics.TrackingError, jStatistics[18].Value() }, - { PerformanceMetrics.TreynorRatio, jStatistics[19].Value() }, - { PerformanceMetrics.WinRate, jStatistics[20].Value() }, - }; + var statsCount = Math.Min(ArrayStatisticsCount, (jStatistics as JArray).Count); + statistics = new Dictionary(StatisticsIndices + .Where(kvp => kvp.Value < statsCount) + .Select(kvp => KeyValuePair.Create(kvp.Key, jStatistics[kvp.Value].Value())) + .Where(kvp => kvp.Value != null)); + } + else + { + statistics = new(); + foreach (var statistic in jStatistics.Children()) + { + var statisticName = TryConvertToLeanStatisticIndex(statistic.Name, out var index) + ? StatisticNames[index] + : statistic.Name; + statistics[statisticName] = statistic.Value.Value(); + } + } } var parameterSet = serializer.Deserialize(jObject["parameterSet"].CreateReader()); @@ -220,5 +246,11 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist return optimizationBacktest; } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static bool TryConvertToLeanStatisticIndex(string statistic, out int index) + { + return int.TryParse(statistic, out index) && index >= 0 && index < StatisticsIndices.Count; + } } } diff --git a/Tests/Algorithm/AlgorithmPlottingTests.cs b/Tests/Algorithm/AlgorithmPlottingTests.cs index 34ed1b646277..648e05e39d1c 100644 --- a/Tests/Algorithm/AlgorithmPlottingTests.cs +++ b/Tests/Algorithm/AlgorithmPlottingTests.cs @@ -220,5 +220,16 @@ public void PlotIndicatorPlotsBaseIndicator() Assert.AreEqual("PlotTest", chart.Name); Assert.AreEqual(sma1.Current.Value / sma2.Current.Value, chart.Series[ratio.Name].GetValues().First().y); } + + private static string[] ReservedSummaryStatisticNames => Enumerable.Range(0, 101).Select(i => i.ToStringInvariant()).ToArray(); + + [TestCaseSource(nameof(ReservedSummaryStatisticNames))] + public void ThrowsOnReservedSummaryStatisticName(string statisticName) + { + Assert.Throws(() => _algorithm.SetSummaryStatistic(statisticName, 0.1m)); + Assert.Throws(() => _algorithm.SetSummaryStatistic(statisticName, 0.1)); + Assert.Throws(() => _algorithm.SetSummaryStatistic(statisticName, 1)); + Assert.Throws(() => _algorithm.SetSummaryStatistic(statisticName, "0.1")); + } } } diff --git a/Tests/Api/OptimizationBacktestJsonConverterTests.cs b/Tests/Api/OptimizationBacktestJsonConverterTests.cs index 1854d4db9f61..30b2268eaa8e 100644 --- a/Tests/Api/OptimizationBacktestJsonConverterTests.cs +++ b/Tests/Api/OptimizationBacktestJsonConverterTests.cs @@ -27,14 +27,34 @@ namespace QuantConnect.Tests.API public class OptimizationBacktestJsonConverterTests { private const string _validSerialization = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," + - "\"startDate\":\"2023-01-01T00:00:00Z\",\"endDate\":\"2024-01-01T00:00:00Z\",\"outOfSampleMaxEndDate\":\"2024-01-01T00:00:00Z\",\"outOfSampleDays\":10,\"statistics\":[0.374,0.217,0.047,-4.51,2.86,-0.664,52.602,17.800,6300000.00,0.196,1.571,27.0,123.888,77.188,0.63,1.707,1390.49,180.0,0.233,-0.558,73.0]," + + "\"startDate\":\"2023-01-01T00:00:00Z\",\"endDate\":\"2024-01-01T00:00:00Z\",\"outOfSampleMaxEndDate\":\"2024-01-01T00:00:00Z\",\"outOfSampleDays\":10,\"statistics\":{\"0\":0.374,\"1\":0.217,\"2\":0.047,\"3\":-4.51,\"4\":2.86,\"5\":-0.664,\"6\":52.602,\"7\":17.800,\"8\":6300000.00,\"9\":0.196,\"10\":1.571,\"11\":27.0,\"12\":123.888,\"13\":77.188,\"14\":0.63,\"15\":1.707,\"16\":1390.49,\"17\":180.0,\"18\":0.233,\"19\":-0.558,\"20\":73.0,\"21\":0.1,\"22\":100000.0,\"23\":200000.0,\"24\":3.0}," + "\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0,1.0,1.0,1.0],[2,2.0,2.0,2.0,2.0],[3,3.0,3.0,3.0,3.0]]}"; private const string _oldValidSerialization = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," + - "\"statistics\":[0.374,0.217,0.047,-4.51,2.86,-0.664,52.602,17.800,6300000.00,0.196,1.571,27.0,123.888,77.188,0.63,1.707,1390.49,180.0,0.233,-0.558,73.0]," + + "\"statistics\":{\"0\":0.374,\"1\":0.217,\"2\":0.047,\"3\":-4.51,\"4\":2.86,\"5\":-0.664,\"6\":52.602,\"7\":17.800,\"8\":6300000.00,\"9\":0.196,\"10\":1.571,\"11\":27.0,\"12\":123.888,\"13\":77.188,\"14\":0.63,\"15\":1.707,\"16\":1390.49,\"17\":180.0,\"18\":0.233,\"19\":-0.558,\"20\":73.0,\"21\":0.1,\"22\":100000.0,\"23\":200000.0,\"24\":3.0}," + "\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0,1.0,1.0,1.0],[2,2.0,2.0,2.0,2.0],[3,3.0,3.0,3.0,3.0]]}"; private const string _oldValid2Serialization = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," + + "\"statistics\":{\"0\":0.374,\"1\":0.217,\"2\":0.047,\"3\":-4.51,\"4\":2.86,\"5\":-0.664,\"6\":52.602,\"7\":17.800,\"8\":6300000.00,\"9\":0.196,\"10\":1.571,\"11\":27.0,\"12\":123.888,\"13\":77.188,\"14\":0.63,\"15\":1.707,\"16\":1390.49,\"17\":180.0,\"18\":0.233,\"19\":-0.558,\"20\":73.0,\"21\":0.1,\"22\":100000.0,\"23\":200000.0,\"24\":3.0}," + + "\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0],[2,2.0],[3,3.0]]}"; + private const string _oldValid3Serialization = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," + + "\"statistics\":{\"0\":0.374,\"1\":0.217,\"2\":0.047,\"3\":-4.51,\"4\":2.86,\"5\":-0.664,\"6\":52.602,\"7\":17.800,\"8\":6300000.00,\"9\":0.196,\"10\":1.571,\"11\":27.0,\"12\":123.888,\"13\":77.188,\"14\":0.63,\"15\":1.707,\"16\":1390.49,\"17\":180.0,\"18\":0.233,\"19\":-0.558,\"20\":73.0}," + + "\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0],[2,2.0],[3,3.0]]}"; + + private const string _validSerializationWithCustomStats = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," + + "\"startDate\":\"2023-01-01T00:00:00Z\",\"endDate\":\"2024-01-01T00:00:00Z\",\"outOfSampleMaxEndDate\":\"2024-01-01T00:00:00Z\",\"outOfSampleDays\":10,\"statistics\":{\"0\":0.374,\"1\":0.217,\"2\":0.047,\"3\":-4.51,\"4\":2.86,\"5\":-0.664,\"6\":52.602,\"7\":17.800,\"8\":6300000.00,\"9\":0.196,\"10\":1.571,\"11\":27.0,\"12\":123.888,\"13\":77.188,\"14\":0.63,\"15\":1.707,\"16\":1390.49,\"17\":180.0,\"18\":0.233,\"19\":-0.558,\"20\":73.0,\"21\":0.1,\"22\":100000.0,\"23\":200000.0,\"24\":3.0,\"customstat2\":5.4321,\"customstat1\":1.2345}," + + "\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0,1.0,1.0,1.0],[2,2.0,2.0,2.0,2.0],[3,3.0,3.0,3.0,3.0]]}"; + + private const string _validOldStatsDeserialization = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," + + "\"startDate\":\"2023-01-01T00:00:00Z\",\"endDate\":\"2024-01-01T00:00:00Z\",\"outOfSampleMaxEndDate\":\"2024-01-01T00:00:00Z\",\"outOfSampleDays\":10,\"statistics\":[0.374,0.217,0.047,-4.51,2.86,-0.664,52.602,17.800,6300000.00,0.196,1.571,27.0,123.888,77.188,0.63,1.707,1390.49,180.0,0.233,-0.558,73.0]," + + "\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0,1.0,1.0,1.0],[2,2.0,2.0,2.0,2.0],[3,3.0,3.0,3.0,3.0]]}"; + private const string _validOldStatsDeserialization2 = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," + + "\"statistics\":[0.374,0.217,0.047,-4.51,2.86,-0.664,52.602,17.800,6300000.00,0.196,1.571,27.0,123.888,77.188,0.63,1.707,1390.49,180.0,0.233,-0.558,73.0]," + + "\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0,1.0,1.0,1.0],[2,2.0,2.0,2.0,2.0],[3,3.0,3.0,3.0,3.0]]}"; + private const string _validOldStatsDeserialization3 = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," + "\"statistics\":[0.374,0.217,0.047,-4.51,2.86,-0.664,52.602,17.800,6300000.00,0.196,1.571,27.0,123.888,77.188,0.63,1.707,1390.49,180.0,0.233,-0.558,73.0]," + "\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0],[2,2.0],[3,3.0]]}"; + private const string _validOldStatsDeserializationWithLessStats = "{\"name\":\"ImABacktestName\",\"id\":\"backtestId\",\"progress\":0.0,\"exitCode\":0," + + "\"statistics\":[0.374,0.217,0.047,-4.51,2.86,-0.664,52.602,17.800,6300000.00,0.196,1.571,27.0,123.888,77.188,0.63]," + + "\"parameterSet\":{\"pinocho\":\"19\",\"pepe\":\"-1\"},\"equity\":[[1,1.0],[2,2.0],[3,3.0]]}"; [Test] public void SerializationNulls() @@ -58,7 +78,7 @@ public void Serialization(int version) optimizationBacktest.Statistics = new Dictionary { - { "Total Trades", "180" }, + { "Total Orders", "180" }, { "Average Win", "2.86%" }, { "Average Loss", "-4.51%" }, { "Compounding Annual Return", "52.602%" }, @@ -68,6 +88,7 @@ public void Serialization(int version) { "End Equity", "200000" }, { "Net Profit", "123.888%" }, { "Sharpe Ratio", "1.707" }, + { "Sortino Ratio", "0.1" }, { "Probabilistic Sharpe Ratio", "77.188%" }, { "Loss Rate", "27%" }, { "Win Rate", "73%" }, @@ -106,10 +127,72 @@ public void Serialization(int version) Assert.AreEqual(expected, serialized); } - [TestCase(_validSerialization)] - [TestCase(_oldValidSerialization)] - [TestCase(_oldValid2Serialization)] - public void Deserialization(string serialization) + [Test] + public void SerializationWithCustomStatistics() + { + var optimizationBacktest = new OptimizationBacktest(new ParameterSet(18, + new Dictionary + { + { "pinocho", "19" }, + { "pepe", "-1" } + }), "backtestId", "ImABacktestName"); + + optimizationBacktest.Statistics = new Dictionary + { + { "customstat2", "5.4321" }, + { "customstat1", "1.2345" }, + { "Total Orders", "180" }, + { "Average Win", "2.86%" }, + { "Average Loss", "-4.51%" }, + { "Compounding Annual Return", "52.602%" }, + { "Drawdown", "17.800%" }, + { "Expectancy", "0.196" }, + { "Start Equity", "100000" }, + { "End Equity", "200000" }, + { "Net Profit", "123.888%" }, + { "Sharpe Ratio", "1.707" }, + { "Sortino Ratio", "0.1" }, + { "Probabilistic Sharpe Ratio", "77.188%" }, + { "Loss Rate", "27%" }, + { "Win Rate", "73%" }, + { "Profit-Loss Ratio", "0.63" }, + { "Alpha", "0.374" }, + { "Beta", "-0.664" }, + { "Annual Standard Deviation", "0.217" }, + { "Annual Variance", "0.047" }, + { "Information Ratio", "1.571" }, + { "Tracking Error", "0.233" }, + { "Treynor Ratio", "-0.558" }, + { "Total Fees", "$1390.49" }, + { "Estimated Strategy Capacity", "ZRX6300000.00" }, + { "Drawdown Recovery", "3" } + }; + + optimizationBacktest.Equity = new CandlestickSeries + { + Values = new List { new Candlestick(1, 1, 1, 1, 1), new Candlestick(2, 2, 2, 2, 2), new Candlestick(3, 3, 3, 3, 3) } + }; + optimizationBacktest.StartDate = new DateTime(2023, 01, 01); + optimizationBacktest.EndDate = new DateTime(2024, 01, 01); + optimizationBacktest.OutOfSampleMaxEndDate = new DateTime(2024, 01, 01); + optimizationBacktest.OutOfSampleDays = 10; + + var serialized = JsonConvert.SerializeObject(optimizationBacktest); + + Assert.AreEqual(_validSerializationWithCustomStats, serialized); + } + + [TestCase(_validSerialization, false, 25)] + [TestCase(_oldValidSerialization, false, 25)] + [TestCase(_oldValid2Serialization, false, 25)] + // This case has only 21 stats because Sortino Ratio, Start Equity, End Equity and Drawdown Recovery were not supported + [TestCase(_oldValid3Serialization, false, 21)] + [TestCase(_validOldStatsDeserialization, false, 21)] + [TestCase(_validOldStatsDeserialization2, false, 21)] + [TestCase(_validOldStatsDeserialization3, false, 21)] + [TestCase(_validOldStatsDeserializationWithLessStats, false, 15)] + [TestCase(_validSerializationWithCustomStats, true, 25)] + public void Deserialization(string serialization, bool hasCustomStats, int expectedLeanStats) { var deserialized = JsonConvert.DeserializeObject(serialization); Assert.IsNotNull(deserialized); @@ -133,6 +216,19 @@ public void Deserialization(string serialization) Assert.IsTrue(((Candlestick)deserialized.Equity.Values[i]).Close == expected); } Assert.AreEqual("77.188", deserialized.Statistics[PerformanceMetrics.ProbabilisticSharpeRatio]); + + if (!hasCustomStats) + { + Assert.AreEqual(expectedLeanStats, deserialized.Statistics.Count); + } + else + { + // There are 2 custom stats + Assert.AreEqual(expectedLeanStats + 2, deserialized.Statistics.Count); + + Assert.AreEqual("1.2345", deserialized.Statistics["customstat1"]); + Assert.AreEqual("5.4321", deserialized.Statistics["customstat2"]); + } } } } From 0ab0abd1ca2bd3ee6b24be27d69b4f610298496e Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Tue, 23 Dec 2025 12:45:31 -0400 Subject: [PATCH 054/103] Clean up after removing RestSharp (#9153) --- Tests/QuantConnect.Tests.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/Tests/QuantConnect.Tests.csproj b/Tests/QuantConnect.Tests.csproj index f8ced114d264..25c10651b0c1 100644 --- a/Tests/QuantConnect.Tests.csproj +++ b/Tests/QuantConnect.Tests.csproj @@ -48,7 +48,6 @@ all - From 37ccee49378209155c1ba3a7f50cd88a16cf4ff2 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Wed, 24 Dec 2025 11:17:50 -0300 Subject: [PATCH 055/103] Update foundation image (#9154) --- DockerfileLeanFoundation | 222 ++++++++++++++++------------ DockerfileLeanFoundationARM | 134 ++++++++--------- Tests/Python/PythonPackagesTests.cs | 24 +-- 3 files changed, 207 insertions(+), 173 deletions(-) diff --git a/DockerfileLeanFoundation b/DockerfileLeanFoundation index dbf73c5898df..9f5f9f5a5dea 100644 --- a/DockerfileLeanFoundation +++ b/DockerfileLeanFoundation @@ -23,10 +23,6 @@ RUN apt-get update && apt-get -y install wget curl unzip \ && apt-get clean && apt-get autoclean && apt-get autoremove --purge -y \ && rm -rf /var/lib/apt/lists/* -# Install dotnet sdk & runtime -RUN add-apt-repository ppa:dotnet/backports && apt-get update && apt-get install -y dotnet-sdk-9.0 && \ - apt-get clean && apt-get autoclean && apt-get autoremove --purge -y && rm -rf /var/lib/apt/lists/* - # Set PythonDLL variable for PythonNet ENV PYTHONNET_PYDLL="/opt/miniconda3/lib/libpython3.11.so" @@ -49,33 +45,33 @@ ENV PIP_DEFAULT_TIMEOUT=120 # Install all packages RUN pip install --no-cache-dir \ - cython==3.1.4 \ + cython==3.2.3 \ pandas==2.3.3 \ scipy==1.13.1 \ numpy==1.26.4 \ wrapt==1.17.3 \ - astropy==7.1.0 \ - beautifulsoup4==4.14.2 \ - dill==0.3.8 \ + astropy==7.2.0 \ + beautifulsoup4==4.14.3 \ + dill==0.4.0 \ jsonschema==4.25.1 \ lxml==6.0.2 \ - msgpack==1.1.1 \ + msgpack==1.1.2 \ numba-cuda[cu12]==0.14.1 \ numba==0.61.2 \ - xarray==2025.9.1 \ + xarray==2025.12.0 \ plotly==5.24.1 \ - jupyterlab==4.4.9 \ - ipywidgets==8.1.7 \ - jupyterlab-widgets==3.0.15 \ + jupyterlab==4.5.1 \ + ipywidgets==8.1.8 \ + jupyterlab-widgets==3.0.16 \ tensorflow==2.19.1 \ - docutils==0.22.2 \ + docutils==0.22.4 \ cvxopt==1.3.2 \ - gensim==4.3.3 \ - keras==3.11.3 \ + gensim==4.4.0 \ + keras==3.13.0 \ lightgbm==4.6.0 \ nltk==3.9.2 \ graphviz==0.21 \ - cmdstanpy==1.2.5 \ + cmdstanpy==1.3.0 \ copulae==0.7.9 \ featuretools==1.31.0 \ PuLP==3.3.0 \ @@ -84,26 +80,26 @@ RUN pip install --no-cache-dir \ scikit-learn==1.6.1 \ scikit-optimize==0.10.2 \ tsfresh==0.20.2 \ - tslearn==0.6.4 \ + tslearn==0.7.0 \ tweepy==4.16.0 \ PyWavelets==1.9.0 \ umap-learn==0.5.9.post2 \ - fastai==2.8.4 \ - arch==7.2.0 \ + fastai==2.8.6 \ + arch==8.0.0 \ copulas==0.12.3 \ creme==0.6.1 \ cufflinks==0.17.3 \ gym==0.26.2 \ deap==1.4.3 \ - pykalman==0.10.2 \ - cvxpy==1.7.3 \ + pykalman==0.11.0 \ + cvxpy==1.7.5 \ pyportfolioopt==1.5.6 \ - pmdarima==2.0.4 \ + pmdarima==2.1.1 \ pyro-ppl==1.9.1 \ riskparityportfolio==0.6.0 \ sklearn-json==0.1.0 \ - statsmodels==0.14.5 \ - QuantLib==1.39 \ + statsmodels==0.14.6 \ + QuantLib==1.40 \ xgboost==3.0.5 \ dtw-python==1.5.3 \ gluonts==0.16.2 \ @@ -111,10 +107,10 @@ RUN pip install --no-cache-dir \ jaxlib==0.7.1 \ tf2jax==0.3.7 \ keras-rl==0.4.2 \ - pennylane==0.42.3 \ - PennyLane-Lightning==0.42.0 \ - git+https://github.com/PennyLaneAI/pennylane-qiskit.git@12dacf9a867f17b05b26b6d78ef8f9c7987713cb \ - autoray==0.7.2 \ + pennylane==0.43.1 \ + PennyLane-Lightning==0.43.0 \ + PennyLane-qiskit==0.43.0 \ + autoray==0.8.0 \ qiskit==2.1.2 \ mplfinance==0.12.10b0 \ hmmlearn==0.3.3 \ @@ -123,40 +119,40 @@ RUN pip install --no-cache-dir \ scikit-tda==1.1.1 \ ta==0.11.0 \ seaborn==0.13.2 \ - optuna==4.5.0 \ - findiff==0.12.1 \ - sktime==0.39.0 \ + optuna==4.6.0 \ + findiff==0.12.2 \ + sktime==0.40.1 \ hyperopt==0.2.7 \ bayesian-optimization==3.1.0 \ pingouin==0.5.5 \ quantecon==0.10.1 \ matplotlib==3.8.4 \ sdeint==0.3.0 \ - pandas_market_calendars==5.1.1 \ + pandas_market_calendars==5.2.2 \ dgl==2.1.0 \ ruptures==1.1.10 \ simpy==4.1.1 \ scikit-learn-extra==0.3.0 \ - ray==2.49.2 \ - "ray[tune]"==2.49.2 \ - "ray[rllib]"==2.49.2 \ - "ray[data]"==2.49.2 \ - "ray[train]"==2.49.2 \ + ray==2.53.0 \ + "ray[tune]"==2.53.0 \ + "ray[rllib]"==2.53.0 \ + "ray[data]"==2.53.0 \ + "ray[train]"==2.53.0 \ fastText==0.9.3 \ - h2o==3.46.0.7 \ - prophet==1.1.7 \ + h2o==3.46.0.9 \ + prophet==1.2.1 \ torch==2.8.0 \ torchvision==0.23.0 \ - ax-platform==1.1.2 \ + ax-platform==1.2.1 \ alphalens-reloaded==0.4.6 \ pyfolio-reloaded==0.9.9 \ - altair==5.5.0 \ + altair==6.0.0 \ modin==0.37.1 \ persim==0.3.8 \ - ripser==0.6.12 \ + ripser==0.6.14 \ pydmd==2025.8.1 \ - spacy==3.8.7 \ - pytorch-ignite==0.5.2 \ + spacy==3.8.11 \ + pytorch-ignite==0.5.3 \ tensorly==0.9.0 \ mlxtend==0.23.4 \ shap==0.48.0 \ @@ -164,30 +160,30 @@ RUN pip install --no-cache-dir \ tensorflow-probability==0.25.0 \ mpmath==1.3.0 \ tensortrade==1.0.3 \ - polars==1.34.0 \ + polars==1.36.1 \ stockstats==0.6.5 \ - autokeras==2.0.0 \ + autokeras==3.0.0 \ QuantStats==0.0.77 \ hurst==0.0.5 \ - numerapi==2.20.8 \ + numerapi==2.21.0 \ pymdptoolbox==4.0-b3 \ - panel==1.7.5 \ - hvplot==0.12.1 \ + panel==1.8.4 \ + hvplot==0.12.2 \ line-profiler==5.0.0 \ py-heat==0.0.6 \ py-heat-magic==0.0.2 \ - bokeh==3.6.3 \ + bokeh==3.8.1 \ river==0.21.0 \ stumpy==1.13.0 \ pyvinecopulib==0.6.5 \ - ijson==3.4.0 \ + ijson==3.4.0.post0 \ jupyter-resource-usage==1.2.0 \ - injector==0.22.0 \ + injector==0.23.0 \ openpyxl==3.1.5 \ xlrd==2.0.2 \ mljar-supervised==1.1.18 \ dm-tree==0.1.9 \ - lz4==4.4.4 \ + lz4==4.4.5 \ ortools==9.12.4544 \ py_vollib==1.0.1 \ thundergbm==0.3.17 \ @@ -197,102 +193,136 @@ RUN pip install --no-cache-dir \ interpret==0.7.2 \ DoubleML==0.10.1 \ jupyter-bokeh==4.0.5 \ - imbalanced-learn==0.14.0 \ - openai==1.109.1 \ + imbalanced-learn==0.14.1 \ + openai==2.14.0 \ lazypredict==0.2.16 \ - darts==0.38.0 \ - fastparquet==2024.11.0 \ + darts==0.39.0 \ + fastparquet==2025.12.0 \ tables==3.10.2 \ dimod==0.12.21 \ - dwave-samplers==1.6.0 \ + dwave-samplers==1.7.0 \ python-statemachine==2.5.0 \ pymannkendall==1.4.3 \ - Pyomo==6.9.4 \ + Pyomo==6.9.5 \ gpflow==2.10.0 \ - pyarrow==19.0.1 \ - dwave-ocean-sdk==9.0.0 \ + pyarrow==21.0.0 \ + dwave-ocean-sdk==9.2.0 \ chardet==5.2.0 \ - stable-baselines3==2.7.0 \ - sb3-contrib==2.7.0 \ + stable-baselines3==2.7.1 \ + sb3-contrib==2.7.1 \ Shimmy==2.0.0 \ pystan==3.10.0 \ FixedEffectModel==0.0.5 \ - transformers==4.57.0 \ + transformers==4.57.3 \ Rbeast==0.1.23 \ langchain==0.3.27 \ pomegranate==1.1.2 \ - MAPIE==1.1.0 \ + MAPIE==1.2.0 \ mlforecast==1.0.2 \ - tensorrt==10.13.3.9 \ - x-transformers==2.8.2 \ - Werkzeug==3.1.3 \ + tensorrt==10.14.1.48.post1 \ + x-transformers==2.11.24 \ + Werkzeug==3.1.4 \ TPOT==0.12.2 \ - llama-index==0.12.42 \ mlflow==3.4.0 \ ngboost==0.5.6 \ control==0.10.2 \ pgmpy==1.0.0 \ mgarch==0.3.0 \ - jupyter-ai==2.31.6 \ + jupyter-ai==2.31.7 \ keras-tcn==3.5.6 \ neuralprophet[live]==0.9.0 \ Riskfolio-Lib==7.0.1 \ fuzzy-c-means==1.7.2 \ - EMD-signal==1.6.4 \ - dask[complete]==2025.7.0 \ + EMD-signal==1.9.0 \ + dask[complete]==2025.12.0 \ nolds==0.6.2 \ feature-engine==1.9.3 \ pytorch-tabnet==4.1.0 \ opencv-contrib-python-headless==4.11.0.86 \ POT==0.9.6.post1 \ - datasets==3.6.0 \ + datasets==4.4.2 \ scikeras==0.13.0 \ - accelerate==1.10.1 \ - peft==0.17.1 \ + accelerate==1.12.0 \ + peft==0.18.0 \ FlagEmbedding==1.3.5 \ contourpy==1.3.3 \ tensorboardX==2.6.4 \ scikit-image==0.22.0 \ - scs==3.2.8 \ + scs==3.2.9 \ thinc==8.3.4 \ cesium==0.12.1 \ cvxportfolio==1.5.1 \ tsfel==0.2.0 \ - ipympl==0.9.7 \ + ipympl==0.9.8 \ PyQt6==6.9.1 \ - nixtla==0.7.0 \ - tigramite==5.2.8.2 \ - pytorch-forecasting==1.4.0 \ - chronos-forecasting[training]==1.5.3 \ - setuptools==73.0.1 \ + nixtla==0.7.2 \ + tigramite==5.2.9.4 \ + pytorch-forecasting==1.5.0 \ + chronos-forecasting==2.2.2 \ + setuptools==80.9.0 \ tinygrad==0.11.0 \ DESlib==0.3.7 \ - torchrl==0.10.0 \ + torchrl==0.10.1 \ tensordict==0.10.0 \ + onnx==1.20.0 \ onnxmltools==1.14.0 \ - onnxruntime==1.23.0 \ + onnxruntime==1.23.2 \ skl2onnx==1.19.1 \ sweetviz==2.3.1 \ filterpy==1.4.5 \ skfolio==0.7.0 \ lightweight-charts==2.1 \ KDEpy==1.1.12 \ - lightning==2.5.5 \ - google-genai==1.41.0 \ + lightning==2.6.0 \ + google-genai==1.56.0 \ neuralforecast==3.1.2 \ - lingam==1.11.0 \ + lingam==1.12.1 \ econml==0.16.0 \ - networkx==3.5 \ + networkx==3.6.1 \ causalml==0.15.5 \ transitions==0.9.3 \ - sismic==1.6.10 \ + sismic==1.6.11 \ cmaes==0.12.0 \ - cuda-python==12.9.2 \ + cuda-python==12.9.5 \ click==8.2.1 \ ydf==0.13.0 \ wurlitzer==3.1.1 \ - statsforecast==2.0.2 \ - holoviews==1.20.2 + statsforecast==2.0.3 \ + holoviews==1.22.1 \ + faiss-cpu==1.13.1 \ + ImageIO==2.37.2 \ + lifelines==0.30.0 \ + h5py==3.15.1 \ + exchange_calendars==4.11.1 \ + formulaic==1.2.1 \ + arviz==0.23.0 \ + deprecated==1.2.18 \ + pyod==2.0.6 + +# llama-index-readers-file has a pandas build contraint, see https://github.com/run-llama/llama_index/pull/20387/files +RUN pip install --no-cache-dir --no-deps \ + aiosqlite==0.22.0 \ + banks==2.2.0 \ + deprecated==1.2.18 \ + dirtyjson==1.0.8 \ + filetype==1.2.0 \ + griffe==1.15.0 \ + llama-parse==0.6.54 \ + llama-cloud==0.1.35 \ + llama-index==0.14.10 \ + llama-index-cli==0.5.3 \ + llama-index-core==0.14.10 \ + llama-cloud-services==0.6.54 \ + llama-index-workflows==2.11.5 \ + llama-index-llms-openai==0.6.12 \ + llama-index-readers-file==0.5.5 \ + llama-index-instrumentation==0.4.2 \ + llama-index-embeddings-openai==0.5.1 \ + llama-index-readers-llama-parse==0.5.1 \ + llama-index-indices-managed-llama-cloud==0.9.4 \ + pypdf==6.5.0 \ + striprtf==0.0.26 \ + tiktoken==0.12.0 # they have older dependency versions that can be ignored # https://github.com/onnx/tensorflow-onnx/issues/2328#issuecomment-2682046428 @@ -313,7 +343,7 @@ RUN ln -s /opt/miniconda3/lib/python3.11/site-packages/nvidia/cuda_nvrtc/lib/lib # iisignature requires numpy to be already installed. cupy requires cuda installed # https://github.com/omadson/fuzzy-c-means/issues/109 requires older tabulate but pandas requires 0.9.0, forcing version -RUN pip install --no-cache-dir tabulate==0.9.0 iisignature==0.24 cupy-cuda12x==13.6.0 https://github.com/state-spaces/mamba/releases/download/v2.2.5/mamba_ssm-2.2.5+cu12torch2.8cxx11abiTRUE-cp311-cp311-linux_x86_64.whl mamba-ssm[causal-conv1d]==2.2.5 +RUN pip install --no-cache-dir tabulate==0.9.0 iisignature==0.24 cupy-cuda12x==13.6.0 https://github.com/state-spaces/mamba/releases/download/v2.2.5/mamba_ssm-2.2.5+cu12torch2.8cxx11abiTRUE-cp311-cp311-linux_x86_64.whl https://github.com/Dao-AILab/causal-conv1d/releases/download/v1.5.4/causal_conv1d-1.5.4+cu12torch2.8cxx11abiTRUE-cp311-cp311-linux_x86_64.whl # Install dwave tool RUN dwave install --all -y @@ -379,6 +409,10 @@ RUN apt-get update && apt-get -y install libasound2 libnss3 libnspr4 && apt-get ./ibgateway-latest-standalone-linux-x64.v10.39.1f.sh -q -dir /root/ibgateway && \ rm ibgateway-latest-standalone-linux-x64.v10.39.1f.sh +# Install dotnet sdk & runtime +RUN add-apt-repository ppa:dotnet/backports && apt-get update && apt-get install -y dotnet-sdk-10.0 dotnet-sdk-9.0 && \ + apt-get clean && apt-get autoclean && apt-get autoremove --purge -y && rm -rf /var/lib/apt/lists/* && dotnet new globaljson --sdk-version 9.0.112 + # label definitions LABEL strict_python_version=3.11.11 LABEL python_version=3.11 diff --git a/DockerfileLeanFoundationARM b/DockerfileLeanFoundationARM index 4293086f70bc..1ccb568e1da9 100644 --- a/DockerfileLeanFoundationARM +++ b/DockerfileLeanFoundationARM @@ -19,15 +19,6 @@ RUN add-apt-repository ppa:ubuntu-toolchain-r/test && apt-get update \ && apt-get clean && apt-get autoclean && apt-get autoremove --purge -y \ && rm -rf /var/lib/apt/lists/* -# Install dotnet 9 sdk & runtime -# The .deb packages don't support ARM, the install script does -ENV PATH="/root/.dotnet:${PATH}" -RUN wget https://dot.net/v1/dotnet-install.sh && \ - chmod 777 dotnet-install.sh && \ - ./dotnet-install.sh -c 9.0 && \ - rm dotnet-install.sh -ENV DOTNET_ROOT="/root/.dotnet" - # Set PythonDLL variable for PythonNet ENV PYTHONNET_PYDLL="/opt/miniconda3/lib/libpython3.11.so" @@ -55,31 +46,31 @@ RUN conda install -c conda-forge cmake==3.28.4 && conda clean -y --all # The list of packages in this image is shorter than the list in the AMD images # This list only includes packages that can be installed within 2 minutes on ARM RUN pip install --no-cache-dir \ - cython==3.1.4 \ + cython==3.2.3 \ pandas==2.3.3 \ scipy==1.13.1 \ numpy==1.26.4 \ wrapt==1.17.3 \ - astropy==7.1.0 \ - beautifulsoup4==4.14.2 \ - dill==0.3.8 \ + astropy==7.2.0 \ + beautifulsoup4==4.14.3 \ + dill==0.4.0 \ jsonschema==4.25.1 \ lxml==6.0.2 \ - msgpack==1.1.1 \ + msgpack==1.1.2 \ numba==0.61.2 \ - xarray==2025.9.1 \ + xarray==2025.12.0 \ plotly==5.24.1 \ - jupyterlab==4.4.9 \ - ipywidgets==8.1.7 \ - jupyterlab-widgets==3.0.15 \ + jupyterlab==4.5.1 \ + ipywidgets==8.1.8 \ + jupyterlab-widgets==3.0.16 \ tensorflow==2.19.1 \ - docutils==0.22.2 \ - gensim==4.3.3 \ - keras==3.11.3 \ + docutils==0.22.4 \ + gensim==4.4.0 \ + keras==3.13.0 \ lightgbm==4.6.0 \ nltk==3.9.2 \ graphviz==0.21 \ - cmdstanpy==1.2.5 \ + cmdstanpy==1.3.0 \ copulae==0.7.9 \ featuretools==1.31.0 \ PuLP==3.3.0 \ @@ -88,83 +79,83 @@ RUN pip install --no-cache-dir \ scikit-learn==1.6.1 \ scikit-optimize==0.10.2 \ tsfresh==0.20.2 \ - tslearn==0.6.4 \ + tslearn==0.7.0 \ tweepy==4.16.0 \ PyWavelets==1.9.0 \ umap-learn==0.5.9.post2 \ - fastai==2.8.4 \ - arch==7.2.0 \ + fastai==2.8.6 \ + arch==8.0.0 \ copulas==0.12.3 \ cufflinks==0.17.3 \ gym==0.26.2 \ deap==1.4.3 \ - pykalman==0.10.2 \ - cvxpy==1.7.3 \ + pykalman==0.11.0 \ + cvxpy==1.7.5 \ pyro-ppl==1.9.1 \ sklearn-json==0.1.0 \ dtw-python==1.5.3 \ gluonts==0.16.2 \ jax==0.7.1 \ - pennylane==0.42.3 \ - PennyLane-Lightning==0.42.0 \ - git+https://github.com/PennyLaneAI/pennylane-qiskit.git@12dacf9a867f17b05b26b6d78ef8f9c7987713cb \ + pennylane==0.43.1 \ + PennyLane-Lightning==0.43.0 \ + PennyLane-qiskit==0.43.0 \ mplfinance==0.12.10b0 \ hmmlearn==0.3.3 \ ta==0.11.0 \ seaborn==0.13.2 \ - optuna==4.5.0 \ - findiff==0.12.1 \ - sktime==0.39.0 \ + optuna==4.6.0 \ + findiff==0.12.2 \ + sktime==0.40.1 \ hyperopt==0.2.7 \ bayesian-optimization==3.1.0 \ matplotlib==3.8.4 \ sdeint==0.3.0 \ - pandas_market_calendars==5.1.1 \ + pandas_market_calendars==5.2.2 \ ruptures==1.1.10 \ simpy==4.1.1 \ scikit-learn-extra==0.3.0 \ - ray==2.49.2 \ - "ray[tune]"==2.49.2 \ - "ray[rllib]"==2.49.2 \ - "ray[data]"==2.49.2 \ - "ray[train]"==2.49.2 \ + ray==2.53.0 \ + "ray[tune]"==2.53.0 \ + "ray[rllib]"==2.53.0 \ + "ray[data]"==2.53.0 \ + "ray[train]"==2.53.0 \ fastText==0.9.3 \ - h2o==3.46.0.7 \ - prophet==1.1.7 \ + h2o==3.46.0.9 \ + prophet==1.2.1 \ Riskfolio-Lib==7.0.1 \ torch==2.8.0 \ torchvision==0.23.0 \ - ax-platform==1.1.2 \ + ax-platform==1.2.1 \ alphalens-reloaded==0.4.6 \ pyfolio-reloaded==0.9.9 \ - altair==5.5.0 \ + altair==6.0.0 \ modin==0.37.1 \ persim==0.3.8 \ - ripser==0.6.12 \ + ripser==0.6.14 \ pydmd==2025.8.1 \ EMD-signal==1.6.4 \ - spacy==3.8.7 \ - pytorch-ignite==0.5.2 \ + spacy==3.8.11 \ + pytorch-ignite==0.5.3 \ tensorly==0.9.0 \ mlxtend==0.23.4 \ shap==0.48.0 \ lime==0.2.0.1 \ mpmath==1.3.0 \ - polars==1.34.0 \ + polars==1.36.1 \ stockstats==0.6.5 \ QuantStats==0.0.77 \ hurst==0.0.5 \ - numerapi==2.20.8 \ + numerapi==2.21.0 \ pymdptoolbox==4.0-b3 \ - panel==1.7.5 \ - hvplot==0.12.1 \ + panel==1.8.4 \ + hvplot==0.12.2 \ py-heat==0.0.6 \ py-heat-magic==0.0.2 \ - bokeh==3.6.3 \ + bokeh==3.8.1 \ river==0.21.0 \ stumpy==1.13.0 \ pyvinecopulib==0.6.5 \ - ijson==3.4.0 \ + ijson==3.4.0.post0 \ jupyter-resource-usage==1.2.0 \ injector==0.22.0 \ openpyxl==3.1.5 \ @@ -181,38 +172,38 @@ RUN pip install --no-cache-dir \ interpret==0.7.2 \ DoubleML==0.10.1 \ jupyter-bokeh==4.0.5 \ - imbalanced-learn==0.14.0 \ - openai==1.109.1 \ + imbalanced-learn==0.14.1 \ + openai==2.14.0 \ lazypredict==0.2.16 \ - darts==0.38.0 \ - fastparquet==2024.11.0 \ + darts==0.39.0 \ + fastparquet==2025.12.0 \ tables==3.10.2 \ dimod==0.12.21 \ - dwave-samplers==1.6.0 \ + dwave-samplers==1.7.0 \ python-statemachine==2.5.0 \ pymannkendall==1.4.3 \ - Pyomo==6.9.4 \ + Pyomo==6.9.5 \ gpflow==2.10.0 \ - pyarrow==19.0.1 \ - dwave-ocean-sdk==9.0.0 \ + pyarrow==21.0.0 \ + dwave-ocean-sdk==9.2.0 \ chardet==5.2.0 \ - stable-baselines3==2.7.0 \ - sb3-contrib==2.7.0 \ + stable-baselines3==2.7.1 \ + sb3-contrib==2.7.1 \ Shimmy==2.0.0 \ FixedEffectModel==0.0.5 \ - transformers==4.57.0 \ + transformers==4.57.3 \ langchain==0.3.27 \ pomegranate==1.1.2 \ - MAPIE==1.1.0 \ + MAPIE==1.2.0 \ mlforecast==1.0.2 \ - x-transformers==2.8.2 \ - Werkzeug==3.1.3 \ + x-transformers==2.11.24 \ + Werkzeug==3.1.4 \ nolds==0.6.2 \ feature-engine==1.9.3 \ pytorch-tabnet==4.1.0 \ opencv-contrib-python-headless==4.11.0.86 \ POT==0.9.6.post1 \ - datasets==3.6.0 \ + datasets==4.4.2 \ scikeras==0.13.0 \ contourpy==1.3.3 \ click==8.2.1 @@ -271,6 +262,15 @@ RUN apt-get update && apt install -y xvfb wkhtmltopdf && \ RUN wget -q https://cdn.quantconnect.com/fonts/foundation.zip && unzip -q foundation.zip && rm foundation.zip \ && mv "lean fonts/"* /usr/share/fonts/truetype/ && rm -rf "lean fonts/" "__MACOSX/" +# Install dotnet 9 sdk & runtime +# The .deb packages don't support ARM, the install script does +ENV PATH="/root/.dotnet:${PATH}" +RUN wget https://dot.net/v1/dotnet-install.sh && \ + chmod 777 dotnet-install.sh && \ + ./dotnet-install.sh -c 10.0 && ./dotnet-install.sh -c 9.0 && \ + rm dotnet-install.sh && dotnet new globaljson --sdk-version 9.0.308 +ENV DOTNET_ROOT="/root/.dotnet" + # label definitions LABEL strict_python_version=3.11.11 LABEL python_version=3.11 diff --git a/Tests/Python/PythonPackagesTests.cs b/Tests/Python/PythonPackagesTests.cs index 0f492a1ea4a9..aab382994586 100644 --- a/Tests/Python/PythonPackagesTests.cs +++ b/Tests/Python/PythonPackagesTests.cs @@ -1393,7 +1393,7 @@ from google import genai from google.genai import types def RunTest(): - assert(genai.__version__ == '1.41.0')" + assert(genai.__version__ == '1.56.0')" ); } @@ -1405,7 +1405,7 @@ public void IgniteTest() import ignite def RunTest(): - assert(ignite.__version__ == '0.5.2')" + assert(ignite.__version__ == '0.5.3')" ); } @@ -2952,37 +2952,37 @@ public void ModuleVersionTestExplicit(string module, string value, string attrib [TestCase("pymc", "5.25.1", "__version__")] [TestCase("pypfopt", "pypfopt", "__name__")] [TestCase("wrapt", "1.17.3", "__version__")] - [TestCase("tslearn", "0.6.4", "__version__")] + [TestCase("tslearn", "0.7.0", "__version__")] [TestCase("tweepy", "4.16.0", "__version__")] [TestCase("pywt", "1.8.0", "__version__")] [TestCase("umap", "0.5.9.post2", "__version__")] [TestCase("dtw", "1.5.3", "__version__")] [TestCase("mplfinance", "0.12.10b0", "__version__")] [TestCase("cufflinks", "0.17.3", "__version__")] - [TestCase("ipywidgets", "8.1.7", "__version__")] - [TestCase("astropy", "7.1.0", "__version__")] + [TestCase("ipywidgets", "8.1.8", "__version__")] + [TestCase("astropy", "7.2.0", "__version__")] [TestCase("gluonts", "0.16.2", "__version__")] [TestCase("featuretools", "1.31.0", "__version__")] - [TestCase("pennylane", "0.42.3", "version()")] + [TestCase("pennylane", "0.43.1", "version()")] [TestCase("pyfolio", "0.9.9", "__version__")] - [TestCase("altair", "5.5.0", "__version__")] + [TestCase("altair", "6.0.0", "__version__")] [TestCase("modin", "0.37.1", "__version__")] [TestCase("persim", "0.3.8", "__version__")] [TestCase("pydmd", "pydmd", "__name__")] [TestCase("pandas_ta", "0.3.14b0", "__version__")] [TestCase("tensortrade", "1.0.3", "__version__")] [TestCase("quantstats", "0.0.77", "__version__")] - [TestCase("panel", "1.7.5", "__version__")] + [TestCase("panel", "1.8.4", "__version__")] [TestCase("pyheat", "pyheat", "__name__")] [TestCase("tensorflow_decision_forests", "1.12.0", "__version__")] [TestCase("pomegranate", "1.1.2", "__version__")] [TestCase("cv2", "4.11.0", "__version__")] [TestCase("ot", "0.9.6.post1", "__version__")] - [TestCase("datasets", "3.6.0", "__version__")] - [TestCase("ipympl", "0.9.7", "__version__")] + [TestCase("datasets", "4.4.2", "__version__")] + [TestCase("ipympl", "0.9.8", "__version__")] [TestCase("PyQt6", "PyQt6", "__name__")] - [TestCase("pytorch_forecasting", "1.4.0", "__version__")] - [TestCase("sismic", "1.6.10", "__version__")] + [TestCase("pytorch_forecasting", "1.5.0", "__version__")] + [TestCase("sismic", "1.6.11", "__version__")] [TestCase("chronos", "chronos", "__name__")] public void ModuleVersionTest(string module, string value, string attribute) { From 725737610a1fcf2d45eb8c09c50724b2765f2882 Mon Sep 17 00:00:00 2001 From: Roman Yavnikov <45608740+Romazes@users.noreply.github.com> Date: Wed, 24 Dec 2025 17:39:50 +0200 Subject: [PATCH 056/103] fix: several Futures Currencies: 6B, 6M, 6J, 6E, 6C (#9155) --- Common/Securities/Future/FuturesListings.cs | 12 ++++++++- .../FuturesOptionsExpiryFunctions.cs | 2 ++ .../FuturesOptionsUnderlyingMapper.cs | 7 ++++- .../FuturesOptionsExpiryFunctionsTests.cs | 21 +++++++++++++++ .../FuturesOptionsUnderlyingMapperTests.cs | 27 ++++++++++++------- 5 files changed, 57 insertions(+), 12 deletions(-) diff --git a/Common/Securities/Future/FuturesListings.cs b/Common/Securities/Future/FuturesListings.cs index 53f0e80e9674..dad4e6d430a5 100644 --- a/Common/Securities/Future/FuturesListings.cs +++ b/Common/Securities/Future/FuturesListings.cs @@ -37,6 +37,11 @@ public static class FuturesListings private static readonly Symbol _zw = Symbol.Create("ZW", SecurityType.Future, Market.CBOT); private static readonly Symbol _tn = Symbol.Create("TN", SecurityType.Future, Market.CBOT); private static readonly Symbol _aud = Symbol.Create("6A", SecurityType.Future, Market.CME); + private static readonly Symbol _gbp = Symbol.Create("6B", SecurityType.Future, Market.CME); + private static readonly Symbol _mxn = Symbol.Create("6M", SecurityType.Future, Market.CME); + private static readonly Symbol _jpy = Symbol.Create("6J", SecurityType.Future, Market.CME); + private static readonly Symbol _eur = Symbol.Create("6E", SecurityType.Future, Market.CME); + private static readonly Symbol _cad = Symbol.Create("6C", SecurityType.Future, Market.CME); private static Dictionary>> _futuresListingRules = new Dictionary>> { @@ -73,7 +78,12 @@ public static class FuturesListings t, 7, new FuturesListingCycles(new[] { 3, 5, 7, 9, 12 }, 15)) }, - { "6A", t => QuarterlyContracts(_aud, t, 8) } + { "6A", t => QuarterlyContracts(_aud, t, 8) }, + { "6B", t => QuarterlyContracts(_gbp, t, 8) }, + { "6M", t => QuarterlyContracts(_mxn, t, 8) }, + { "6J", t => QuarterlyContracts(_jpy, t, 8) }, + { "6E", t => QuarterlyContracts(_eur, t, 8) }, + { "6C", t => QuarterlyContracts(_cad, t, 8) }, }; /// diff --git a/Common/Securities/FutureOption/FuturesOptionsExpiryFunctions.cs b/Common/Securities/FutureOption/FuturesOptionsExpiryFunctions.cs index e46ebea1c952..a6695fdb0a7a 100644 --- a/Common/Securities/FutureOption/FuturesOptionsExpiryFunctions.cs +++ b/Common/Securities/FutureOption/FuturesOptionsExpiryFunctions.cs @@ -50,6 +50,7 @@ public static class FuturesOptionsExpiryFunctions private static readonly Symbol _jpu = Symbol.CreateCanonicalOption(Symbol.Create("6J", SecurityType.Future, Market.CME)); private static readonly Symbol _chu = Symbol.CreateCanonicalOption(Symbol.Create("6S", SecurityType.Future, Market.CME)); private static readonly Symbol _nzd = Symbol.CreateCanonicalOption(Symbol.Create("6N", SecurityType.Future, Market.CME)); + private static readonly Symbol _mxn = Symbol.CreateCanonicalOption(Symbol.Create("6M", SecurityType.Future, Market.CME)); private static readonly Symbol _le = Symbol.CreateCanonicalOption(Symbol.Create("LE", SecurityType.Future, Market.CME)); private static readonly Symbol _he = Symbol.CreateCanonicalOption(Symbol.Create("HE", SecurityType.Future, Market.CME)); private static readonly Symbol _lbr = Symbol.CreateCanonicalOption(Symbol.Create("LBR", SecurityType.Future, Market.CME)); @@ -97,6 +98,7 @@ public static class FuturesOptionsExpiryFunctions { _jpu, expiryMonth => SecondFridayBeforeThirdWednesdayOfContractMonth(_jpu.Underlying, expiryMonth) }, { _chu, expiryMonth => SecondFridayBeforeThirdWednesdayOfContractMonth(_chu.Underlying, expiryMonth) }, { _nzd, expiryMonth => SecondFridayBeforeThirdWednesdayOfContractMonth(_nzd.Underlying, expiryMonth) }, + { _mxn, expiryMonth => SecondFridayBeforeThirdWednesdayOfContractMonth(_mxn.Underlying, expiryMonth) }, { _le, expiryMonth => FirstFridayOfContractMonth(_le.Underlying, expiryMonth) }, { _he, expiryMonth => TenthBusinessDayOfContractMonth(_he.Underlying, expiryMonth) }, { _lbr, expiryMonth => LastBusinessDayInPrecedingMonthFromContractMonth(_lbr.Underlying, expiryMonth) }, diff --git a/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapper.cs b/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapper.cs index 4b9bf7992dfd..17ef2ba373af 100644 --- a/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapper.cs +++ b/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapper.cs @@ -63,7 +63,12 @@ public static class FuturesOptionsUnderlyingMapper { "GC", (d, _) => ContractMonthEvenOddMonth(d, false) }, // CME - { "6A", (d, ld) => ContractMonthSerialLookupRule(Symbol.Create("6A", SecurityType.Future, Market.CME), d, ld.Value) } + { "6A", (d, ld) => ContractMonthSerialLookupRule(Symbol.Create("6A", SecurityType.Future, Market.CME), d, ld.Value) }, + { "6B", (d, ld) => ContractMonthSerialLookupRule(Symbol.Create("6B", SecurityType.Future, Market.CME), d, ld.Value) }, + { "6M", (d, ld) => ContractMonthSerialLookupRule(Symbol.Create("6M", SecurityType.Future, Market.CME), d, ld.Value) }, + { "6J", (d, ld) => ContractMonthSerialLookupRule(Symbol.Create("6J", SecurityType.Future, Market.CME), d, ld.Value) }, + { "6E", (d, ld) => ContractMonthSerialLookupRule(Symbol.Create("6E", SecurityType.Future, Market.CME), d, ld.Value) }, + { "6C", (d, ld) => ContractMonthSerialLookupRule(Symbol.Create("6C", SecurityType.Future, Market.CME), d, ld.Value) }, }; /// diff --git a/Tests/Common/Securities/FutureOption/FuturesOptionsExpiryFunctionsTests.cs b/Tests/Common/Securities/FutureOption/FuturesOptionsExpiryFunctionsTests.cs index 9e0129622c53..4ba76662e9b2 100644 --- a/Tests/Common/Securities/FutureOption/FuturesOptionsExpiryFunctionsTests.cs +++ b/Tests/Common/Securities/FutureOption/FuturesOptionsExpiryFunctionsTests.cs @@ -107,6 +107,27 @@ public void ExpiryFunctionsReturnExpectedResults(string futureTicker, string mar [TestCase("6N", Market.CME, "202511", "20251107", "20251215")] [TestCase("6N", Market.CME, "202512", "20251205", "20251215")] [TestCase("6N", Market.CME, "202601", "20260109", "20260316")] + [TestCase("6N", Market.CME, "202601", "20260109", "20260316")] + [TestCase("6N", Market.CME, "202602", "20260206", "20260316")] + [TestCase("6N", Market.CME, "202604", "20260403", "20260615")] + [TestCase("6B", Market.CME, "202601", "20260109", "20260316")] + [TestCase("6B", Market.CME, "202602", "20260206", "20260316")] + [TestCase("6B", Market.CME, "202603", "20260306", "20260316")] + [TestCase("6C", Market.CME, "202601", "20260109", "20260317")] + [TestCase("6C", Market.CME, "202602", "20260206", "20260317")] + [TestCase("6C", Market.CME, "202603", "20260306", "20260317")] + [TestCase("6J", Market.CME, "202601", "20260109", "20260316")] + [TestCase("6J", Market.CME, "202602", "20260206", "20260316")] + [TestCase("6J", Market.CME, "202603", "20260306", "20260316")] + [TestCase("6S", Market.CME, "202601", "20260109", "20260316")] + [TestCase("6S", Market.CME, "202602", "20260206", "20260316")] + [TestCase("6S", Market.CME, "202603", "20260306", "20260316")] + [TestCase("6E", Market.CME, "202601", "20260109", "20260316")] + [TestCase("6E", Market.CME, "202602", "20260206", "20260316")] + [TestCase("6E", Market.CME, "202603", "20260306", "20260316")] + [TestCase("6M", Market.CME, "202604", "20260403", "20260615")] + [TestCase("6M", Market.CME, "202605", "20260508", "20260615")] + [TestCase("6M", Market.CME, "202606", "20260605", "20260615")] [TestCase("6A", Market.CME, "202601", "20260109", "20260316", Description = "Quarterly contract : Mar")] [TestCase("6A", Market.CME, "202602", "20260206", "20260316", Description = "Quarterly contract : Mar")] [TestCase("6A", Market.CME, "202603", "20260306", "20260316", Description = "Quarterly contract : Mar")] diff --git a/Tests/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapperTests.cs b/Tests/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapperTests.cs index b0cae7124110..d96ae7f6b6db 100644 --- a/Tests/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapperTests.cs +++ b/Tests/Common/Securities/FutureOption/FuturesOptionsUnderlyingMapperTests.cs @@ -39,16 +39,23 @@ public class FuturesOptionsUnderlyingMapperTests [TestCase("6A", Market.CME, 2021, 10, 05, 2021, 12, 13, false)] [TestCase("6A", Market.CME, 2021, 11, 05, 2021, 12, 13, false)] [TestCase("6A", Market.CME, 2021, 12, 05, 2021, 12, 13, false)] - [TestCase("6B", Market.CME, 2025, 09, 05, 2025, 09, 15, false)] - [TestCase("6B", Market.CME, 2025, 12, 05, 2025, 12, 15, false)] - [TestCase("6C", Market.CME, 2025, 09, 05, 2025, 09, 16, false)] - [TestCase("6C", Market.CME, 2025, 12, 05, 2025, 12, 16, false)] - [TestCase("6E", Market.CME, 2025, 09, 05, 2025, 09, 15, false)] - [TestCase("6E", Market.CME, 2025, 12, 05, 2025, 12, 15, false)] - [TestCase("6J", Market.CME, 2025, 09, 05, 2025, 09, 15, false)] - [TestCase("6J", Market.CME, 2025, 12, 05, 2025, 12, 15, false)] - [TestCase("6S", Market.CME, 2025, 09, 05, 2025, 09, 15, false)] - [TestCase("6S", Market.CME, 2025, 12, 05, 2025, 12, 15, false)] + [TestCase("6N", Market.CME, 2021, 01, 09, 2021, 03, 15, false)] + [TestCase("6B", Market.CME, 2021, 02, 06, 2021, 03, 15, false)] + [TestCase("6B", Market.CME, 2021, 09, 05, 2021, 09, 13, false)] + [TestCase("6B", Market.CME, 2021, 12, 05, 2021, 12, 13, false)] + [TestCase("6C", Market.CME, 2021, 01, 09, 2021, 03, 16, false)] + [TestCase("6C", Market.CME, 2021, 09, 05, 2021, 09, 14, false)] + [TestCase("6C", Market.CME, 2021, 12, 05, 2021, 12, 14, false)] + [TestCase("6E", Market.CME, 2021, 09, 05, 2021, 09, 13, false)] + [TestCase("6E", Market.CME, 2021, 12, 05, 2021, 12, 13, false)] + [TestCase("6E", Market.CME, 2021, 01, 09, 2021, 03, 15, false)] + [TestCase("6M", Market.CME, 2021, 04, 03, 2021, 06, 14, false)] + [TestCase("6J", Market.CME, 2021, 09, 05, 2021, 09, 13, false)] + [TestCase("6J", Market.CME, 2021, 12, 05, 2021, 12, 13, false)] + [TestCase("6J", Market.CME, 2021, 02, 06, 2021, 03, 15, false)] + [TestCase("6S", Market.CME, 2021, 09, 05, 2021, 09, 13, false)] + [TestCase("6S", Market.CME, 2021, 12, 05, 2021, 12, 13, false)] + [TestCase("6S", Market.CME, 2021, 02, 06, 2021, 03, 15, false)] [TestCase("ZC", Market.CBOT, 2031, 12, 26, 2031, 12, 26, true)] [TestCase("ZS", Market.CBOT, 2034, 12, 22, 2034, 12, 22, true)] [TestCase("ZW", Market.CBOT, 2036, 12, 26, 2036, 12, 26, true)] From b040518d52e892e5015d2eda45d5889e0342d6f8 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Wed, 24 Dec 2025 17:02:49 -0300 Subject: [PATCH 057/103] Minor foundation update reverts (#9156) --- DockerfileLeanFoundation | 14 +++++++------- DockerfileLeanFoundationARM | 10 +++++----- Tests/Python/PythonPackagesTests.cs | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/DockerfileLeanFoundation b/DockerfileLeanFoundation index 9f5f9f5a5dea..f5818a6359ba 100644 --- a/DockerfileLeanFoundation +++ b/DockerfileLeanFoundation @@ -52,7 +52,7 @@ RUN pip install --no-cache-dir \ wrapt==1.17.3 \ astropy==7.2.0 \ beautifulsoup4==4.14.3 \ - dill==0.4.0 \ + dill==0.3.8 \ jsonschema==4.25.1 \ lxml==6.0.2 \ msgpack==1.1.2 \ @@ -167,12 +167,12 @@ RUN pip install --no-cache-dir \ hurst==0.0.5 \ numerapi==2.21.0 \ pymdptoolbox==4.0-b3 \ - panel==1.8.4 \ + panel==1.7.5 \ hvplot==0.12.2 \ line-profiler==5.0.0 \ py-heat==0.0.6 \ py-heat-magic==0.0.2 \ - bokeh==3.8.1 \ + bokeh==3.6.3 \ river==0.21.0 \ stumpy==1.13.0 \ pyvinecopulib==0.6.5 \ @@ -205,7 +205,7 @@ RUN pip install --no-cache-dir \ pymannkendall==1.4.3 \ Pyomo==6.9.5 \ gpflow==2.10.0 \ - pyarrow==21.0.0 \ + pyarrow==19.0.1 \ dwave-ocean-sdk==9.2.0 \ chardet==5.2.0 \ stable-baselines3==2.7.1 \ @@ -234,13 +234,13 @@ RUN pip install --no-cache-dir \ Riskfolio-Lib==7.0.1 \ fuzzy-c-means==1.7.2 \ EMD-signal==1.9.0 \ - dask[complete]==2025.12.0 \ + dask[complete]==2025.7.0 \ nolds==0.6.2 \ feature-engine==1.9.3 \ pytorch-tabnet==4.1.0 \ opencv-contrib-python-headless==4.11.0.86 \ POT==0.9.6.post1 \ - datasets==4.4.2 \ + datasets==3.6.0 \ scikeras==0.13.0 \ accelerate==1.12.0 \ peft==0.18.0 \ @@ -288,7 +288,7 @@ RUN pip install --no-cache-dir \ ydf==0.13.0 \ wurlitzer==3.1.1 \ statsforecast==2.0.3 \ - holoviews==1.22.1 \ + holoviews==1.20.2 \ faiss-cpu==1.13.1 \ ImageIO==2.37.2 \ lifelines==0.30.0 \ diff --git a/DockerfileLeanFoundationARM b/DockerfileLeanFoundationARM index 1ccb568e1da9..c6dca13cd7b0 100644 --- a/DockerfileLeanFoundationARM +++ b/DockerfileLeanFoundationARM @@ -53,7 +53,7 @@ RUN pip install --no-cache-dir \ wrapt==1.17.3 \ astropy==7.2.0 \ beautifulsoup4==4.14.3 \ - dill==0.4.0 \ + dill==0.3.8 \ jsonschema==4.25.1 \ lxml==6.0.2 \ msgpack==1.1.2 \ @@ -147,11 +147,11 @@ RUN pip install --no-cache-dir \ hurst==0.0.5 \ numerapi==2.21.0 \ pymdptoolbox==4.0-b3 \ - panel==1.8.4 \ + panel==1.7.5 \ hvplot==0.12.2 \ py-heat==0.0.6 \ py-heat-magic==0.0.2 \ - bokeh==3.8.1 \ + bokeh==3.6.3 \ river==0.21.0 \ stumpy==1.13.0 \ pyvinecopulib==0.6.5 \ @@ -184,7 +184,7 @@ RUN pip install --no-cache-dir \ pymannkendall==1.4.3 \ Pyomo==6.9.5 \ gpflow==2.10.0 \ - pyarrow==21.0.0 \ + pyarrow==19.0.1 \ dwave-ocean-sdk==9.2.0 \ chardet==5.2.0 \ stable-baselines3==2.7.1 \ @@ -203,7 +203,7 @@ RUN pip install --no-cache-dir \ pytorch-tabnet==4.1.0 \ opencv-contrib-python-headless==4.11.0.86 \ POT==0.9.6.post1 \ - datasets==4.4.2 \ + datasets==3.6.0 \ scikeras==0.13.0 \ contourpy==1.3.3 \ click==8.2.1 diff --git a/Tests/Python/PythonPackagesTests.cs b/Tests/Python/PythonPackagesTests.cs index aab382994586..dfe58e0c1b0f 100644 --- a/Tests/Python/PythonPackagesTests.cs +++ b/Tests/Python/PythonPackagesTests.cs @@ -2972,13 +2972,13 @@ public void ModuleVersionTestExplicit(string module, string value, string attrib [TestCase("pandas_ta", "0.3.14b0", "__version__")] [TestCase("tensortrade", "1.0.3", "__version__")] [TestCase("quantstats", "0.0.77", "__version__")] - [TestCase("panel", "1.8.4", "__version__")] + [TestCase("panel", "1.7.5", "__version__")] [TestCase("pyheat", "pyheat", "__name__")] [TestCase("tensorflow_decision_forests", "1.12.0", "__version__")] [TestCase("pomegranate", "1.1.2", "__version__")] [TestCase("cv2", "4.11.0", "__version__")] [TestCase("ot", "0.9.6.post1", "__version__")] - [TestCase("datasets", "4.4.2", "__version__")] + [TestCase("datasets", "3.6.0", "__version__")] [TestCase("ipympl", "0.9.8", "__version__")] [TestCase("PyQt6", "PyQt6", "__name__")] [TestCase("pytorch_forecasting", "1.5.0", "__version__")] From d9c71e3d34e0b40bdf7d54fe5b8c989da9da7686 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Fri, 26 Dec 2025 12:10:19 -0300 Subject: [PATCH 058/103] Adding Forex-Oanda & Cfd-IB 2026 new years holiday. Removing duplication (#9159) --- Data/market-hours/market-hours-database.json | 7050 +++--------------- 1 file changed, 866 insertions(+), 6184 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 1db7d086da9b..562964af219d 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -76356,6 +76356,7 @@ "1/2/2023", "1/1/2024", "1/1/2025", + "1/1/2026", "12/25/2010", "12/25/2012", "12/25/2015", @@ -76366,7 +76367,8 @@ "12/24/2023", "12/31/2023", "12/25/2024", - "12/25/2025" + "12/25/2025", + "12/25/2026" ], "earlyCloses": { "12/30/2005": "17:00:00", @@ -76392,7 +76394,9 @@ "12/24/2024": "17:00:00", "12/31/2024": "17:00:00", "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "12/24/2026": "17:00:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "12/25/2018": "17:00:00", @@ -76497,67 +76501,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-EURNZD": { "dataTimeZone": "UTC", @@ -76650,67 +76596,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDCAD": { "dataTimeZone": "UTC", @@ -76803,67 +76691,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDCHF": { "dataTimeZone": "UTC", @@ -76956,67 +76786,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDHKD": { "dataTimeZone": "UTC", @@ -77109,67 +76881,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDJPY": { "dataTimeZone": "UTC", @@ -77262,67 +76976,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDSGD": { "dataTimeZone": "UTC", @@ -77415,67 +77071,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDUSD": { "dataTimeZone": "UTC", @@ -77568,67 +77166,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Cfd-fxcm-[*]": { "dataTimeZone": "UTC-05", @@ -86228,6 +85768,7 @@ "1/1/2024", "1/2/2023", "1/1/2025", + "1/1/2026", "1/2/2007", "1/19/1998", "1/18/1999", @@ -86257,6 +85798,7 @@ "1/16/2023", "1/15/2024", "1/20/2025", + "1/19/2026", "2/16/1998", "2/15/1999", "2/21/2000", @@ -86594,5701 +86136,841 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBUS30": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBUST100": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBGB100": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBEU50": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBDE40": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBFR40": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBES35": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBNL25": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBCH20": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBJP225": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - }, - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - }, - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - }, - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - }, - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBHK50": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBAU200": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-XAUUSD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-XAGUSD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBUS30": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBUST100": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBGB100": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBEU50": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBDE40": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBFR40": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBES35": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBNL25": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBCH20": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBJP225": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + }, + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + }, + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + }, + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + }, + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBHK50": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBAU200": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "wednesday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-XAUUSD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-XAGUSD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Crypto-coinbase-[*]": { "dataTimeZone": "UTC", From 7ea0f60905e8031e27048b8d3ac6dd70b985c232 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Fri, 26 Dec 2025 15:24:55 -0300 Subject: [PATCH 059/103] Add SGX futures holidays (#9160) --- Data/market-hours/market-hours-database.json | 272 +------------------ 1 file changed, 12 insertions(+), 260 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 562964af219d..bcc964d8d296 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -75552,7 +75552,9 @@ "12/26/2022", "12/31/2022", "1/1/2025", - "4/18/2025" + "4/18/2025", + "12/25/2025", + "1/1/2026" ], "earlyCloses": { "2/15/2018": "12:00:00", @@ -75567,7 +75569,9 @@ "2/11/2021": "12:00:00", "12/24/2021": "12:00:00", "12/31/2021": "12:00:00", - "1/31/2022": "12:00:00" + "1/31/2022": "12:00:00", + "12/24/2025": "12:00:00", + "1/31/2025": "12:00:00" }, "lateOpens": {} }, @@ -75662,92 +75666,8 @@ "state": "market" } ], - "holidays": [ - "1/1/2016", - "2/8/2016", - "2/9/2016", - "3/25/2016", - "5/1/2016", - "5/21/2016", - "7/6/2016", - "8/9/2016", - "9/12/2016", - "10/29/2016", - "12/25/2016", - "1/1/2017", - "1/28/2017", - "1/29/2017", - "4/14/2017", - "5/1/2017", - "5/10/2017", - "6/25/2017", - "8/9/2017", - "9/1/2017", - "10/18/2017", - "12/25/2017", - "1/1/2018", - "2/16/2018", - "2/17/2018", - "3/30/2018", - "5/1/2018", - "5/29/2018", - "6/15/2018", - "8/9/2018", - "8/22/2018", - "11/6/2018", - "12/25/2018", - "1/1/2019", - "2/5/2019", - "2/6/2019", - "4/19/2019", - "5/1/2019", - "5/20/2019", - "6/5/2019", - "8/9/2019", - "8/12/2019", - "10/28/2019", - "12/25/2019", - "1/1/2020", - "1/27/2020", - "4/10/2020", - "5/1/2020", - "5/7/2020", - "5/25/2020", - "7/31/2020", - "8/10/2020", - "11/14/2020", - "12/25/2020", - "1/1/2021", - "2/12/2021", - "4/2/2021", - "5/1/2021", - "8/9/2021", - "12/25/2021", - "1/3/2022", - "1/31/2022", - "2/1/2022", - "2/2/2022", - "4/15/2022", - "5/2/2022", - "8/9/2022", - "12/26/2022", - "12/31/2022" - ], - "earlyCloses": { - "2/15/2018": "12:00:00", - "12/24/2018": "12:00:00", - "12/31/2018": "12:00:00", - "4/02/2019": "12:00:00", - "12/24/2019": "12:00:00", - "12/31/2019": "12:00:00", - "1/24/2020": "12:00:00", - "12/24/2020": "12:00:00", - "12/31/2020": "12:00:00", - "2/11/2021": "12:00:00", - "12/24/2021": "12:00:00", - "12/31/2021": "12:00:00", - "1/31/2022": "12:00:00" - }, + "holidays": [], + "earlyCloses": {}, "lateOpens": {} }, "Future-sgx-TW": { @@ -75841,92 +75761,8 @@ "state": "market" } ], - "holidays": [ - "1/1/2016", - "2/8/2016", - "2/9/2016", - "3/25/2016", - "5/1/2016", - "5/21/2016", - "7/6/2016", - "8/9/2016", - "9/12/2016", - "10/29/2016", - "12/25/2016", - "1/1/2017", - "1/28/2017", - "1/29/2017", - "4/14/2017", - "5/1/2017", - "5/10/2017", - "6/25/2017", - "8/9/2017", - "9/1/2017", - "10/18/2017", - "12/25/2017", - "1/1/2018", - "2/16/2018", - "2/17/2018", - "3/30/2018", - "5/1/2018", - "5/29/2018", - "6/15/2018", - "8/9/2018", - "8/22/2018", - "11/6/2018", - "12/25/2018", - "1/1/2019", - "2/5/2019", - "2/6/2019", - "4/19/2019", - "5/1/2019", - "5/20/2019", - "6/5/2019", - "8/9/2019", - "8/12/2019", - "10/28/2019", - "12/25/2019", - "1/1/2020", - "1/27/2020", - "4/10/2020", - "5/1/2020", - "5/7/2020", - "5/25/2020", - "7/31/2020", - "8/10/2020", - "11/14/2020", - "12/25/2020", - "1/1/2021", - "2/12/2021", - "4/2/2021", - "5/1/2021", - "8/9/2021", - "12/25/2021", - "1/3/2022", - "1/31/2022", - "2/1/2022", - "2/2/2022", - "4/15/2022", - "5/2/2022", - "8/9/2022", - "12/26/2022", - "12/31/2022" - ], - "earlyCloses": { - "2/15/2018": "12:00:00", - "12/24/2018": "12:00:00", - "12/31/2018": "12:00:00", - "4/02/2019": "12:00:00", - "12/24/2019": "12:00:00", - "12/31/2019": "12:00:00", - "1/24/2020": "12:00:00", - "12/24/2020": "12:00:00", - "12/31/2020": "12:00:00", - "2/11/2021": "12:00:00", - "12/24/2021": "12:00:00", - "12/31/2021": "12:00:00", - "1/31/2022": "12:00:00" - }, + "holidays": [], + "earlyCloses": {}, "lateOpens": {} }, "Future-sgx-IN": { @@ -76020,92 +75856,8 @@ "state": "market" } ], - "holidays": [ - "1/1/2016", - "2/8/2016", - "2/9/2016", - "3/25/2016", - "5/1/2016", - "5/21/2016", - "7/6/2016", - "8/9/2016", - "9/12/2016", - "10/29/2016", - "12/25/2016", - "1/1/2017", - "1/28/2017", - "1/29/2017", - "4/14/2017", - "5/1/2017", - "5/10/2017", - "6/25/2017", - "8/9/2017", - "9/1/2017", - "10/18/2017", - "12/25/2017", - "1/1/2018", - "2/16/2018", - "2/17/2018", - "3/30/2018", - "5/1/2018", - "5/29/2018", - "6/15/2018", - "8/9/2018", - "8/22/2018", - "11/6/2018", - "12/25/2018", - "1/1/2019", - "2/5/2019", - "2/6/2019", - "4/19/2019", - "5/1/2019", - "5/20/2019", - "6/5/2019", - "8/9/2019", - "8/12/2019", - "10/28/2019", - "12/25/2019", - "1/1/2020", - "1/27/2020", - "4/10/2020", - "5/1/2020", - "5/7/2020", - "5/25/2020", - "7/31/2020", - "8/10/2020", - "11/14/2020", - "12/25/2020", - "1/1/2021", - "2/12/2021", - "4/2/2021", - "5/1/2021", - "8/9/2021", - "12/25/2021", - "1/3/2022", - "1/31/2022", - "2/1/2022", - "2/2/2022", - "4/15/2022", - "5/2/2022", - "8/9/2022", - "12/26/2022", - "12/31/2022" - ], - "earlyCloses": { - "2/15/2018": "12:00:00", - "12/24/2018": "12:00:00", - "12/31/2018": "12:00:00", - "4/02/2019": "12:00:00", - "12/24/2019": "12:00:00", - "12/31/2019": "12:00:00", - "1/24/2020": "12:00:00", - "12/24/2020": "12:00:00", - "12/31/2020": "12:00:00", - "2/11/2021": "12:00:00", - "12/24/2021": "12:00:00", - "12/31/2021": "12:00:00", - "1/31/2022": "12:00:00" - }, + "holidays": [], + "earlyCloses": {}, "lateOpens": {} }, "Option-usa-[*]": { From 7adf27aa6196713496e36b5d01985f74054a72ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Sat, 27 Dec 2025 08:52:23 -0500 Subject: [PATCH 060/103] Add 2026 CME Future Holidays, EC, LP, BH (#9163) - Add 2026 CME Future Holidays, Early closes, Late opens and bank holidays - Exclude MIR, CNH, MNH as they expire rules don't follow US holidays --- Data/market-hours/market-hours-database.json | 1017 ++++++++++++------ 1 file changed, 680 insertions(+), 337 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index bcc964d8d296..158b50072e28 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -2568,7 +2568,8 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -2671,7 +2672,8 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:05:00" + "12/24/2025": "12:05:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -3069,7 +3071,8 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -3172,7 +3175,8 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:05:00" + "12/24/2025": "12:05:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -3696,7 +3700,8 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -3799,7 +3804,8 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:05:00" + "12/24/2025": "12:05:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -4089,8 +4095,12 @@ "saturday": [], "holidays": [ "4/7/2023", - "1/9/2025" - ] + "1/9/2025", + "1/1/2026" + ], + "earlyCloses": { + "12/31/2025": "16:00:00" + } }, "Future-cbot-ZM": { "dataTimeZone": "UTC", @@ -4281,8 +4291,12 @@ "saturday": [], "holidays": [ "4/7/2023", - "1/9/2025" - ] + "1/9/2025", + "1/1/2026" + ], + "earlyCloses": { + "12/31/2025": "16:00:00" + } }, "Future-cbot-ZO": { "dataTimeZone": "UTC", @@ -4399,7 +4413,8 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -4502,7 +4517,8 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:05:00" + "12/24/2025": "12:05:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -5185,7 +5201,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -5293,7 +5310,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -5727,7 +5745,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -5835,7 +5854,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -6269,7 +6289,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -6377,7 +6398,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -6811,7 +6833,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -6919,7 +6942,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -7353,7 +7377,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -7461,7 +7486,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -7895,7 +7921,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -8003,7 +8030,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -8437,7 +8465,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -8545,7 +8574,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -8953,7 +8983,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -9062,7 +9093,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -9476,7 +9508,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -9585,7 +9618,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -10025,7 +10059,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -10133,7 +10168,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -10567,7 +10603,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -10675,7 +10712,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -11109,7 +11147,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -11217,7 +11256,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -11651,7 +11691,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -11759,7 +11800,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -12167,7 +12209,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -12276,7 +12319,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -12690,7 +12734,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -12799,7 +12844,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -13213,7 +13259,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -13322,7 +13369,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -13736,7 +13784,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -13845,7 +13894,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -14259,7 +14309,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -14368,7 +14419,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -14782,7 +14834,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -14891,7 +14944,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -15305,7 +15359,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -15414,7 +15469,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -15828,7 +15884,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -15937,7 +15994,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -16351,7 +16409,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -16460,7 +16519,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -16874,7 +16934,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -16983,7 +17044,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -17397,7 +17459,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -17506,7 +17569,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -17920,7 +17984,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -18029,7 +18094,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -18443,7 +18509,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -18552,7 +18619,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -18966,7 +19034,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -19075,7 +19144,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -19489,7 +19559,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -19598,7 +19669,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -20012,7 +20084,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -20121,7 +20194,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -20535,7 +20609,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -20644,7 +20719,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -21058,7 +21134,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -21167,7 +21244,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -21581,7 +21659,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -21690,7 +21769,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -22104,7 +22184,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -22213,7 +22294,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -22653,7 +22735,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -22761,7 +22844,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -23169,7 +23253,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -23278,7 +23363,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -23692,7 +23778,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -23801,7 +23888,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -24215,7 +24303,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -24324,7 +24413,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -24738,7 +24828,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -24847,7 +24938,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -25261,7 +25353,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -25370,7 +25463,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -25784,7 +25878,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -25893,7 +25988,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -26333,7 +26429,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -26441,7 +26538,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -26849,7 +26947,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -26958,7 +27057,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -27372,7 +27472,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -27481,7 +27582,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -27921,7 +28023,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -28029,7 +28132,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -28437,7 +28541,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -28546,7 +28651,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -28960,7 +29066,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -29069,7 +29176,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -29483,7 +29591,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -29592,7 +29701,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -30005,7 +30115,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -30114,7 +30225,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -30528,7 +30640,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -30637,7 +30750,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -30850,7 +30964,8 @@ "saturday": [], "holidays": [ "4/7/2023", - "1/9/2025" + "1/9/2025", + "1/1/2026" ], "earlyCloses": { "11/27/2009": "12:00:00", @@ -31122,7 +31237,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -31231,7 +31347,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -31645,7 +31762,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -31754,7 +31872,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -32168,7 +32287,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -32277,7 +32397,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -32691,7 +32812,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -32800,7 +32922,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -33214,7 +33337,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -33323,7 +33447,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -33609,7 +33734,8 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -33712,7 +33838,8 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:05:00" + "12/24/2025": "12:05:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -34150,7 +34277,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -34259,7 +34387,8 @@ "7/3/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -34667,7 +34796,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -34776,7 +34906,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -35190,7 +35321,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -35299,7 +35431,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -35713,7 +35846,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -35822,7 +35956,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -36157,7 +36292,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:45:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/15/2018": "17:00:00", @@ -36213,7 +36349,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "12/25/2017", @@ -36415,7 +36552,8 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -36518,7 +36656,8 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:05:00" + "12/24/2025": "12:05:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -36958,7 +37097,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -37067,7 +37207,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -37450,7 +37591,8 @@ "7/3/2025": "12:00:00", "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", - "12/24/2025": "12:00:00" + "12/24/2025": "12:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -37537,7 +37679,8 @@ "5/26/2025": "17:00:00", "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -37948,7 +38091,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -38056,7 +38200,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -38464,7 +38609,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -38573,7 +38719,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -39013,7 +39160,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -39121,7 +39269,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [] }, @@ -39368,7 +39517,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -39477,7 +39627,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -39860,7 +40011,8 @@ "7/3/2025": "12:00:00", "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", - "12/24/2025": "12:00:00" + "12/24/2025": "12:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -39947,7 +40099,8 @@ "5/26/2025": "17:00:00", "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -40524,7 +40677,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -40633,7 +40787,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -41047,7 +41202,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -41156,7 +41312,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -41570,7 +41727,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -41679,7 +41837,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -42062,7 +42221,8 @@ "7/3/2025": "12:00:00", "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", - "12/24/2025": "12:00:00" + "12/24/2025": "12:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -42149,7 +42309,8 @@ "5/26/2025": "17:00:00", "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -42534,7 +42695,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -42643,7 +42805,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -43026,7 +43189,8 @@ "7/3/2025": "12:00:00", "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", - "12/24/2025": "12:00:00" + "12/24/2025": "12:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -43113,7 +43277,8 @@ "5/26/2025": "17:00:00", "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -43498,7 +43663,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -43607,7 +43773,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -44047,7 +44214,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -44155,7 +44323,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -44589,7 +44758,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -44697,7 +44867,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -45131,7 +45302,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -45239,7 +45411,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -45647,7 +45820,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -45756,7 +45930,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -46685,7 +46860,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -46794,7 +46970,8 @@ "7/3/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -47200,7 +47377,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -47309,7 +47487,8 @@ "7/3/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -47717,7 +47896,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -47826,7 +48006,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -48240,7 +48421,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -48349,7 +48531,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -48789,7 +48972,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -48897,7 +49081,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -49200,7 +49385,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:45:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/15/2018": "17:00:00", @@ -49257,7 +49443,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "12/25/2017", @@ -49587,7 +49774,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -49696,7 +49884,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -50110,7 +50299,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -50219,7 +50409,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -50633,7 +50824,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -50742,7 +50934,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -51156,7 +51349,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -51265,7 +51459,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -51732,7 +51927,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -51910,7 +52106,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -52277,7 +52474,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -52455,7 +52653,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -52863,7 +53062,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -52972,7 +53172,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -53386,7 +53587,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -53495,7 +53697,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -53909,7 +54112,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -54018,7 +54222,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -54432,7 +54637,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -54541,7 +54747,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -54923,8 +55130,12 @@ "7/4/2022": "12:00:00", "9/5/2022": "12:00:00", "11/24/2022": "12:00:00", - "11/25/2022": "12:15:00" - } + "11/25/2022": "12:15:00", + "12/31/2025": "16:00:00" + }, + "lateOpens": { + "1/1/2026": "17:00:00" + } }, "Future-cme-GDK": { "dataTimeZone": "UTC", @@ -55138,7 +55349,8 @@ "7/3/2025": "12:00:00", "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", - "12/24/2025": "12:00:00" + "12/24/2025": "12:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -55225,7 +55437,8 @@ "5/26/2025": "17:00:00", "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -55554,7 +55767,8 @@ "7/3/2025": "12:00:00", "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", - "12/24/2025": "12:00:00" + "12/24/2025": "12:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -55641,7 +55855,8 @@ "5/26/2025": "17:00:00", "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -56187,7 +56402,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -56206,7 +56422,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -56620,7 +56837,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -56729,7 +56947,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -57143,7 +57362,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -57252,7 +57472,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -57666,7 +57887,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -57775,7 +57997,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -58381,7 +58604,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -58490,7 +58714,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -58902,7 +59127,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -59011,7 +59237,8 @@ "7/3/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -60447,7 +60674,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -60556,7 +60784,8 @@ "7/3/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -60990,7 +61219,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -61098,7 +61328,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -61506,7 +61737,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -61615,7 +61847,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -62029,7 +62262,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -62138,7 +62372,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -62580,7 +62815,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -62689,7 +62925,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -63125,7 +63362,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -63234,7 +63472,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -63670,7 +63909,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -63779,7 +64019,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -64215,7 +64456,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -64324,7 +64566,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -64981,7 +65224,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -65090,7 +65334,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -65496,7 +65741,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -65605,7 +65851,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -66011,7 +66258,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -66120,7 +66368,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -66526,7 +66775,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -66635,7 +66885,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -67041,7 +67292,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -67150,7 +67402,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -67556,7 +67809,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -67665,7 +67919,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -68072,7 +68327,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -68182,7 +68438,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -68706,7 +68963,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -68815,7 +69073,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -69221,7 +69480,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -69330,7 +69590,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -69736,7 +69997,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -69845,7 +70107,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -70251,7 +70514,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -70360,7 +70624,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -70633,7 +70898,8 @@ "7/4/2025", "9/1/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "lateOpens": { "11/24/2011": "17:00:00", @@ -70914,7 +71180,8 @@ "7/4/2025", "9/1/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "lateOpens": { "11/24/2011": "17:00:00", @@ -71195,7 +71462,8 @@ "7/4/2025", "9/1/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "lateOpens": { "11/24/2011": "17:00:00", @@ -71481,7 +71749,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -71500,7 +71769,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -71786,7 +72056,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -71805,7 +72076,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -72217,7 +72489,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -72326,7 +72599,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -72732,7 +73006,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -72841,7 +73116,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -73432,7 +73708,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -73451,7 +73728,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -73736,7 +74014,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -73755,7 +74034,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -74512,7 +74792,8 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:05:00" + "12/24/2025": "12:05:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "11/24/2011": "17:00:00", @@ -74594,7 +74875,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -74870,7 +75152,8 @@ "7/4/2025", "9/1/2025", "11/27/2025", - "12/25/2025" + "12/25/2025", + "1/1/2026" ], "earlyCloses": { "12/31/2010": "12:15:00", @@ -131366,7 +131649,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -131475,7 +131759,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -131881,7 +132166,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -131990,7 +132276,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -132424,7 +132711,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -132532,7 +132820,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -132938,7 +133227,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -133047,7 +133337,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -133454,7 +133745,8 @@ "11/27/2025": "13:00:00", "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -133564,7 +133856,8 @@ "7/3/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -133972,7 +134265,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -134081,7 +134375,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -134383,7 +134678,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:45:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/15/2018": "17:00:00", @@ -134440,7 +134736,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "12/25/2017", @@ -134663,7 +134960,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:45:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/15/2018": "17:00:00", @@ -134720,7 +135018,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "12/25/2017", @@ -135050,7 +135349,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -135159,7 +135459,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -135599,7 +135900,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -135707,7 +136009,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -136115,7 +136418,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -136224,7 +136528,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -136638,7 +136943,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -136747,7 +137053,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -137187,7 +137494,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -137295,7 +137603,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -137729,7 +138038,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -137837,7 +138147,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -138245,7 +138556,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -138354,7 +138666,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -138768,7 +139081,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -138877,7 +139191,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -139250,7 +139565,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -139428,7 +139744,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -139860,7 +140177,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/1/2024": "17:00:00", @@ -139879,7 +140197,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -140313,7 +140632,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -140421,7 +140741,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -140788,7 +141109,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -140966,7 +141288,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -141374,7 +141697,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -141483,7 +141807,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -141897,7 +142222,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -142006,7 +142332,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -142379,7 +142706,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -142557,7 +142885,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -143352,7 +143681,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -143460,7 +143790,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [] }, @@ -144388,7 +144719,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -144566,7 +144898,8 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -145000,7 +145333,8 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "12/31/2025": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -145108,7 +145442,8 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00" }, "bankHolidays": [] }, @@ -145570,7 +145905,8 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -145679,7 +146015,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -146346,7 +146683,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -146455,7 +146793,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -146874,7 +147213,8 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -146893,7 +147233,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "12/25/2017", @@ -147223,7 +147564,8 @@ "9/1/2025": "14:30:00", "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", - "12/24/2025": "13:45:00" + "12/24/2025": "13:45:00", + "12/31/2025": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -147332,7 +147674,8 @@ "6/19/2025": "18:00:00", "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", - "12/25/2025": "18:00:00" + "12/25/2025": "18:00:00", + "1/1/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", From 2e67b9ad4f81708bbf278d4e2f5faa5043255398 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Mon, 29 Dec 2025 09:53:37 -0300 Subject: [PATCH 061/103] Feature net10 update (#9161) * Feature update to net10 * Update to net10 * Update pythonnet to 2.0.51 * Remove dotnet config * Remove net9 * Minor cleanup --- .github/workflows/research-regression-tests.yml | 2 +- Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj | 4 ++-- Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj | 4 ++-- Algorithm.Python/QuantConnect.Algorithm.Python.csproj | 4 ++-- Algorithm/QuantConnect.Algorithm.csproj | 4 ++-- AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj | 4 ++-- Api/QuantConnect.Api.csproj | 2 +- Brokerages/QuantConnect.Brokerages.csproj | 2 +- Common/QuantConnect.csproj | 4 ++-- Common/Util/Composer.cs | 5 ++++- Compression/QuantConnect.Compression.csproj | 2 +- Configuration/QuantConnect.Configuration.csproj | 2 +- DockerfileJupyter | 2 +- DockerfileLeanFoundation | 6 +++--- DockerfileLeanFoundationARM | 6 +++--- .../QuantConnect.DownloaderDataProvider.Launcher.csproj | 2 +- Engine/QuantConnect.Lean.Engine.csproj | 4 ++-- Indicators/QuantConnect.Indicators.csproj | 4 ++-- Launcher/QuantConnect.Lean.Launcher.csproj | 2 +- Logging/QuantConnect.Logging.csproj | 2 +- Messaging/QuantConnect.Messaging.csproj | 2 +- Optimizer.Launcher/QuantConnect.Optimizer.Launcher.csproj | 2 +- Optimizer/QuantConnect.Optimizer.csproj | 2 +- Queues/QuantConnect.Queues.csproj | 2 +- Report/QuantConnect.Report.csproj | 6 +++--- Research/QuantConnect.Research.csproj | 6 +++--- Tests/QuantConnect.Tests.csproj | 4 ++-- ToolBox/QuantConnect.ToolBox.csproj | 2 +- 28 files changed, 48 insertions(+), 45 deletions(-) diff --git a/.github/workflows/research-regression-tests.yml b/.github/workflows/research-regression-tests.yml index e4cf0f7497db..e29da3dc1e1c 100644 --- a/.github/workflows/research-regression-tests.yml +++ b/.github/workflows/research-regression-tests.yml @@ -30,7 +30,7 @@ jobs: # install dependencies pip3 install papermill==2.4.0 clr-loader==0.1.6 # install kernel - dotnet tool install --global Microsoft.dotnet-interactive --version 1.0.607001 + dotnet tool install -g --no-cache --version 1.0.661703 --add-source "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" Microsoft.dotnet-interactive # Add dotnet tools to Path export PATH="$HOME/.dotnet/tools:$PATH" # activate kernel for jupyter diff --git a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj index 688414008d10..36f9246b19b5 100644 --- a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj +++ b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Algorithm.CSharp QuantConnect.Algorithm.CSharp - net9.0 + net10.0 false bin\$(Configuration)\ AllEnabledByDefault @@ -32,7 +32,7 @@ portable - + diff --git a/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj b/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj index 81697dda1300..ef5067a50d71 100644 --- a/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj +++ b/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Algorithm.Framework QuantConnect.Algorithm.Framework - net9.0 + net10.0 false bin\$(Configuration)\ AllEnabledByDefault @@ -29,7 +29,7 @@ LICENSE - + diff --git a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj index 246af65ed265..b0b10f566590 100644 --- a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj +++ b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Algorithm.Python QuantConnect.Algorithm.Python - net9.0 + net10.0 AllEnabledByDefault bin\$(Configuration)\ false @@ -37,7 +37,7 @@ - + diff --git a/Algorithm/QuantConnect.Algorithm.csproj b/Algorithm/QuantConnect.Algorithm.csproj index 24ece5b173b6..ba5c1994ac66 100644 --- a/Algorithm/QuantConnect.Algorithm.csproj +++ b/Algorithm/QuantConnect.Algorithm.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Algorithm QuantConnect.Algorithm - net9.0 + net10.0 ..\ false AllEnabledByDefault @@ -29,7 +29,7 @@ LICENSE - + diff --git a/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj b/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj index f67eb2becc41..3e8cc352b228 100644 --- a/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj +++ b/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.AlgorithmFactory QuantConnect.AlgorithmFactory - net9.0 + net10.0 false bin\$(Configuration)\ AllEnabledByDefault @@ -28,7 +28,7 @@ LICENSE - + diff --git a/Api/QuantConnect.Api.csproj b/Api/QuantConnect.Api.csproj index 20fb363b8669..4c06a2e5213e 100644 --- a/Api/QuantConnect.Api.csproj +++ b/Api/QuantConnect.Api.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Api QuantConnect.Api - net9.0 + net10.0 ..\ true AllEnabledByDefault diff --git a/Brokerages/QuantConnect.Brokerages.csproj b/Brokerages/QuantConnect.Brokerages.csproj index 96f6221d4106..e44042df0a51 100644 --- a/Brokerages/QuantConnect.Brokerages.csproj +++ b/Brokerages/QuantConnect.Brokerages.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Brokerages QuantConnect.Brokerages - net9.0 + net10.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Common/QuantConnect.csproj b/Common/QuantConnect.csproj index 4bdfd41aa6ce..16d2e44dd16d 100644 --- a/Common/QuantConnect.csproj +++ b/Common/QuantConnect.csproj @@ -2,7 +2,7 @@ Debug AnyCPU - net9.0 + net10.0 QuantConnect.Common ..\ true @@ -35,7 +35,7 @@ - + diff --git a/Common/Util/Composer.cs b/Common/Util/Composer.cs index c8a8597937d9..24051e4d4978 100644 --- a/Common/Util/Composer.cs +++ b/Common/Util/Composer.cs @@ -386,7 +386,10 @@ private void LoadPartsSafely(IEnumerable files) } catch (Exception ex) { - Log.Trace($"Composer.LoadPartsSafely({file}): Skipping {ex.GetType().Name}: {ex.Message}"); + if (!file.Contains("quickfix.fix", StringComparison.InvariantCultureIgnoreCase)) + { + Log.Trace($"Composer.LoadPartsSafely({file}): Skipping {ex.GetType().Name}: {ex.Message}"); + } } }); diff --git a/Compression/QuantConnect.Compression.csproj b/Compression/QuantConnect.Compression.csproj index 1f626d954416..66a19b888f51 100644 --- a/Compression/QuantConnect.Compression.csproj +++ b/Compression/QuantConnect.Compression.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Compression QuantConnect.Compression - net9.0 + net10.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Configuration/QuantConnect.Configuration.csproj b/Configuration/QuantConnect.Configuration.csproj index f222de092f40..e2b797aee2b4 100644 --- a/Configuration/QuantConnect.Configuration.csproj +++ b/Configuration/QuantConnect.Configuration.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Configuration QuantConnect.Configuration - net9.0 + net10.0 ..\ true AllEnabledByDefault diff --git a/DockerfileJupyter b/DockerfileJupyter index ca4fb7ceeb61..b5beb720a728 100644 --- a/DockerfileJupyter +++ b/DockerfileJupyter @@ -26,7 +26,7 @@ RUN pip install --no-cache-dir clr-loader==0.1.6 # Install .NET Interactive to support C# in Jupyter notebooks ENV PATH="${PATH}:/root/.dotnet/tools" -RUN dotnet tool install -g --no-cache --version 1.0.607001 --add-source "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" Microsoft.dotnet-interactive && \ +RUN dotnet tool install -g --no-cache --version 1.0.661703 --add-source "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" Microsoft.dotnet-interactive && \ dotnet interactive jupyter install # Setting some environment variables diff --git a/DockerfileLeanFoundation b/DockerfileLeanFoundation index f5818a6359ba..64c6209db3cf 100644 --- a/DockerfileLeanFoundation +++ b/DockerfileLeanFoundation @@ -410,10 +410,10 @@ RUN apt-get update && apt-get -y install libasound2 libnss3 libnspr4 && apt-get rm ibgateway-latest-standalone-linux-x64.v10.39.1f.sh # Install dotnet sdk & runtime -RUN add-apt-repository ppa:dotnet/backports && apt-get update && apt-get install -y dotnet-sdk-10.0 dotnet-sdk-9.0 && \ - apt-get clean && apt-get autoclean && apt-get autoremove --purge -y && rm -rf /var/lib/apt/lists/* && dotnet new globaljson --sdk-version 9.0.112 +RUN add-apt-repository ppa:dotnet/backports && apt-get update && apt-get install -y dotnet-sdk-10.0 && \ + apt-get clean && apt-get autoclean && apt-get autoremove --purge -y && rm -rf /var/lib/apt/lists/* # label definitions LABEL strict_python_version=3.11.11 LABEL python_version=3.11 -LABEL target_framework=net9.0 \ No newline at end of file +LABEL target_framework=net10.0 \ No newline at end of file diff --git a/DockerfileLeanFoundationARM b/DockerfileLeanFoundationARM index c6dca13cd7b0..2ed78793e2dc 100644 --- a/DockerfileLeanFoundationARM +++ b/DockerfileLeanFoundationARM @@ -267,11 +267,11 @@ RUN wget -q https://cdn.quantconnect.com/fonts/foundation.zip && unzip -q founda ENV PATH="/root/.dotnet:${PATH}" RUN wget https://dot.net/v1/dotnet-install.sh && \ chmod 777 dotnet-install.sh && \ - ./dotnet-install.sh -c 10.0 && ./dotnet-install.sh -c 9.0 && \ - rm dotnet-install.sh && dotnet new globaljson --sdk-version 9.0.308 + ./dotnet-install.sh -c 10.0 && \ + rm dotnet-install.sh ENV DOTNET_ROOT="/root/.dotnet" # label definitions LABEL strict_python_version=3.11.11 LABEL python_version=3.11 -LABEL target_framework=net9.0 \ No newline at end of file +LABEL target_framework=net10.0 \ No newline at end of file diff --git a/DownloaderDataProvider/QuantConnect.DownloaderDataProvider.Launcher.csproj b/DownloaderDataProvider/QuantConnect.DownloaderDataProvider.Launcher.csproj index 3409754162db..7e8ae152ec8a 100644 --- a/DownloaderDataProvider/QuantConnect.DownloaderDataProvider.Launcher.csproj +++ b/DownloaderDataProvider/QuantConnect.DownloaderDataProvider.Launcher.csproj @@ -6,7 +6,7 @@ Exe QuantConnect.DownloaderDataProvider.Launcher QuantConnect.DownloaderDataProvider.Launcher - net9.0 + net10.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Engine/QuantConnect.Lean.Engine.csproj b/Engine/QuantConnect.Lean.Engine.csproj index b611e65edc61..ec5a2398f4a1 100644 --- a/Engine/QuantConnect.Lean.Engine.csproj +++ b/Engine/QuantConnect.Lean.Engine.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Lean.Engine QuantConnect.Lean.Engine - net9.0 + net10.0 ..\ true publish\ @@ -41,7 +41,7 @@ - + diff --git a/Indicators/QuantConnect.Indicators.csproj b/Indicators/QuantConnect.Indicators.csproj index 92e3c6ee59f9..601541805577 100644 --- a/Indicators/QuantConnect.Indicators.csproj +++ b/Indicators/QuantConnect.Indicators.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Indicators QuantConnect.Indicators - net9.0 + net10.0 AllEnabledByDefault false bin\$(Configuration)\ @@ -31,7 +31,7 @@ - + diff --git a/Launcher/QuantConnect.Lean.Launcher.csproj b/Launcher/QuantConnect.Lean.Launcher.csproj index 299780332618..dfea79a8e24c 100644 --- a/Launcher/QuantConnect.Lean.Launcher.csproj +++ b/Launcher/QuantConnect.Lean.Launcher.csproj @@ -5,7 +5,7 @@ Exe QuantConnect.Lean.Launcher QuantConnect.Lean.Launcher - net9.0 + net10.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Logging/QuantConnect.Logging.csproj b/Logging/QuantConnect.Logging.csproj index c603d354cdce..4040ff227d09 100644 --- a/Logging/QuantConnect.Logging.csproj +++ b/Logging/QuantConnect.Logging.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Logging QuantConnect.Logging - net9.0 + net10.0 ..\ true AllEnabledByDefault diff --git a/Messaging/QuantConnect.Messaging.csproj b/Messaging/QuantConnect.Messaging.csproj index 40b05ca6666b..5a4cee268b08 100644 --- a/Messaging/QuantConnect.Messaging.csproj +++ b/Messaging/QuantConnect.Messaging.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Messaging QuantConnect.Messaging - net9.0 + net10.0 AllEnabledByDefault false bin\$(Configuration)\ diff --git a/Optimizer.Launcher/QuantConnect.Optimizer.Launcher.csproj b/Optimizer.Launcher/QuantConnect.Optimizer.Launcher.csproj index 7c9555446fc7..e9661b733e81 100644 --- a/Optimizer.Launcher/QuantConnect.Optimizer.Launcher.csproj +++ b/Optimizer.Launcher/QuantConnect.Optimizer.Launcher.csproj @@ -5,7 +5,7 @@ Exe QuantConnect.Optimizer.Launcher QuantConnect.Optimizer.Launcher - net9.0 + net10.0 false bin\$(Configuration)\ AllEnabledByDefault diff --git a/Optimizer/QuantConnect.Optimizer.csproj b/Optimizer/QuantConnect.Optimizer.csproj index 2154ba7021e8..552252fde267 100644 --- a/Optimizer/QuantConnect.Optimizer.csproj +++ b/Optimizer/QuantConnect.Optimizer.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Optimizer QuantConnect.Optimizer - net9.0 + net10.0 false bin\$(Configuration)\ AllEnabledByDefault diff --git a/Queues/QuantConnect.Queues.csproj b/Queues/QuantConnect.Queues.csproj index c59e858512fa..7a24256fe9d7 100644 --- a/Queues/QuantConnect.Queues.csproj +++ b/Queues/QuantConnect.Queues.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Queues QuantConnect.Queues - net9.0 + net10.0 false bin\$(Configuration)\ bin\$(Configuration)\QuantConnect.Queues.xml diff --git a/Report/QuantConnect.Report.csproj b/Report/QuantConnect.Report.csproj index 0edb390d8356..097c8000a8b0 100644 --- a/Report/QuantConnect.Report.csproj +++ b/Report/QuantConnect.Report.csproj @@ -1,11 +1,11 @@ - + Debug AnyCPU Exe QuantConnect.Report QuantConnect.Report - net9.0 + net10.0 false bin\$(Configuration)\ bin\$(Configuration)\QuantConnect.Report.xml @@ -39,7 +39,7 @@ LICENSE - + diff --git a/Research/QuantConnect.Research.csproj b/Research/QuantConnect.Research.csproj index 381c3ef07a4b..70a4fa23cdc2 100644 --- a/Research/QuantConnect.Research.csproj +++ b/Research/QuantConnect.Research.csproj @@ -1,10 +1,10 @@ - + Debug AnyCPU QuantConnect.Research QuantConnect.Research - net9.0 + net10.0 AllEnabledByDefault bin\$(Configuration)\ false @@ -34,7 +34,7 @@ - + diff --git a/Tests/QuantConnect.Tests.csproj b/Tests/QuantConnect.Tests.csproj index 25c10651b0c1..3e6c842e9c8e 100644 --- a/Tests/QuantConnect.Tests.csproj +++ b/Tests/QuantConnect.Tests.csproj @@ -4,7 +4,7 @@ AnyCPU QuantConnect.Tests QuantConnect.Tests - net9.0 + net10.0 ..\ AllEnabledByDefault false @@ -31,7 +31,7 @@ - + diff --git a/ToolBox/QuantConnect.ToolBox.csproj b/ToolBox/QuantConnect.ToolBox.csproj index 52fd576aee02..196fe98c86f9 100644 --- a/ToolBox/QuantConnect.ToolBox.csproj +++ b/ToolBox/QuantConnect.ToolBox.csproj @@ -5,7 +5,7 @@ Exe QuantConnect.ToolBox QuantConnect.ToolBox - net9.0 + net10.0 AllEnabledByDefault false bin\$(Configuration)\ From 10902f95dd7d7f9d46e0716aef5f1ee1b1c0dc10 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Mon, 29 Dec 2025 19:07:35 -0300 Subject: [PATCH 062/103] net10 fix: Update clr-loader (#9166) --- .github/workflows/research-regression-tests.yml | 2 +- Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj | 2 +- Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj | 2 +- Algorithm.Python/QuantConnect.Algorithm.Python.csproj | 2 +- Algorithm/QuantConnect.Algorithm.csproj | 2 +- AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj | 2 +- Common/QuantConnect.csproj | 2 +- DockerfileJupyter | 2 +- Engine/QuantConnect.Lean.Engine.csproj | 2 +- Indicators/QuantConnect.Indicators.csproj | 2 +- Report/QuantConnect.Report.csproj | 2 +- Research/QuantConnect.Research.csproj | 2 +- Research/start.py | 2 +- Tests/QuantConnect.Tests.csproj | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/research-regression-tests.yml b/.github/workflows/research-regression-tests.yml index e29da3dc1e1c..b13d6e6065b6 100644 --- a/.github/workflows/research-regression-tests.yml +++ b/.github/workflows/research-regression-tests.yml @@ -28,7 +28,7 @@ jobs: shell: bash run: | # install dependencies - pip3 install papermill==2.4.0 clr-loader==0.1.6 + pip3 install papermill==2.4.0 clr-loader==0.2.9 # install kernel dotnet tool install -g --no-cache --version 1.0.661703 --add-source "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" Microsoft.dotnet-interactive # Add dotnet tools to Path diff --git a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj index 36f9246b19b5..318f77c54be4 100644 --- a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj +++ b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj @@ -32,7 +32,7 @@ portable - + diff --git a/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj b/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj index ef5067a50d71..1cd1d678d750 100644 --- a/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj +++ b/Algorithm.Framework/QuantConnect.Algorithm.Framework.csproj @@ -29,7 +29,7 @@ LICENSE - + diff --git a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj index b0b10f566590..28a7eb1304fc 100644 --- a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj +++ b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj @@ -37,7 +37,7 @@ - + diff --git a/Algorithm/QuantConnect.Algorithm.csproj b/Algorithm/QuantConnect.Algorithm.csproj index ba5c1994ac66..2408b10fbce1 100644 --- a/Algorithm/QuantConnect.Algorithm.csproj +++ b/Algorithm/QuantConnect.Algorithm.csproj @@ -29,7 +29,7 @@ LICENSE - + diff --git a/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj b/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj index 3e8cc352b228..ac91612d6dba 100644 --- a/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj +++ b/AlgorithmFactory/QuantConnect.AlgorithmFactory.csproj @@ -28,7 +28,7 @@ LICENSE - + diff --git a/Common/QuantConnect.csproj b/Common/QuantConnect.csproj index 16d2e44dd16d..e39b3a918c5f 100644 --- a/Common/QuantConnect.csproj +++ b/Common/QuantConnect.csproj @@ -35,7 +35,7 @@ - + diff --git a/DockerfileJupyter b/DockerfileJupyter index b5beb720a728..cf35a12f8a2e 100644 --- a/DockerfileJupyter +++ b/DockerfileJupyter @@ -22,7 +22,7 @@ RUN if [ "$(uname -m)" = "aarch64" ]; then \ chmod +x /usr/local/bin/tini # Install clr-loader for PythonNet -RUN pip install --no-cache-dir clr-loader==0.1.6 +RUN pip install --no-cache-dir clr-loader==0.2.9 # Install .NET Interactive to support C# in Jupyter notebooks ENV PATH="${PATH}:/root/.dotnet/tools" diff --git a/Engine/QuantConnect.Lean.Engine.csproj b/Engine/QuantConnect.Lean.Engine.csproj index ec5a2398f4a1..5163599312dc 100644 --- a/Engine/QuantConnect.Lean.Engine.csproj +++ b/Engine/QuantConnect.Lean.Engine.csproj @@ -41,7 +41,7 @@ - + diff --git a/Indicators/QuantConnect.Indicators.csproj b/Indicators/QuantConnect.Indicators.csproj index 601541805577..6ad6bc016291 100644 --- a/Indicators/QuantConnect.Indicators.csproj +++ b/Indicators/QuantConnect.Indicators.csproj @@ -31,7 +31,7 @@ - + diff --git a/Report/QuantConnect.Report.csproj b/Report/QuantConnect.Report.csproj index 097c8000a8b0..706e7866e6fe 100644 --- a/Report/QuantConnect.Report.csproj +++ b/Report/QuantConnect.Report.csproj @@ -39,7 +39,7 @@ LICENSE - + diff --git a/Research/QuantConnect.Research.csproj b/Research/QuantConnect.Research.csproj index 70a4fa23cdc2..08eea2a55bdb 100644 --- a/Research/QuantConnect.Research.csproj +++ b/Research/QuantConnect.Research.csproj @@ -34,7 +34,7 @@ - + diff --git a/Research/start.py b/Research/start.py index fbbcd4b7eaf6..55e6f3c91c95 100644 --- a/Research/start.py +++ b/Research/start.py @@ -25,7 +25,7 @@ # symlink and the directory start.py is stored in is not necessarily the # current working directory. We therefore construct the absolute path to the # start.py file, and find the runtimeconfig.json relative to that. -set_runtime(clr_loader.get_coreclr(os.path.join(os.path.dirname(os.path.realpath(__file__)), "QuantConnect.Lean.Launcher.runtimeconfig.json"))) +set_runtime(clr_loader.get_coreclr(runtime_config=os.path.join(os.path.dirname(os.path.realpath(__file__)), "QuantConnect.Lean.Launcher.runtimeconfig.json"))) from AlgorithmImports import * diff --git a/Tests/QuantConnect.Tests.csproj b/Tests/QuantConnect.Tests.csproj index 3e6c842e9c8e..3e60ba77b040 100644 --- a/Tests/QuantConnect.Tests.csproj +++ b/Tests/QuantConnect.Tests.csproj @@ -31,7 +31,7 @@ - + From 914d0810af06ce110dbbb375e39fdddef3dd62cb Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Tue, 30 Dec 2025 13:40:22 -0500 Subject: [PATCH 063/103] Make Collaborator.Uid nullable to fix JSON deserialization error (#9170) --- Common/Api/Project.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Common/Api/Project.cs b/Common/Api/Project.cs index c9f437410abf..7a7cb74e22d4 100644 --- a/Common/Api/Project.cs +++ b/Common/Api/Project.cs @@ -27,7 +27,7 @@ public class Collaborator /// User ID /// [JsonProperty(PropertyName = "uid")] - public int Uid { get; set; } + public int? Uid { get; set; } /// /// Indicate if the user have live control @@ -46,7 +46,7 @@ public class Collaborator /// The user public ID /// [JsonProperty(PropertyName = "publicId")] - public string PublicId { get; set; } + public string PublicId { get; set; } /// /// The url of the user profile image @@ -119,7 +119,7 @@ public class GridChart /// The chart name /// [JsonProperty(PropertyName = "chartName")] - public string ChartName { get; set;} + public string ChartName { get; set; } /// /// Width of the chart @@ -328,7 +328,7 @@ public class Project : RestResponse /// /// Configuration of the backtest view grid /// - [JsonProperty(PropertyName = "grid" )] + [JsonProperty(PropertyName = "grid")] public Grid Grid { get; set; } /// @@ -365,7 +365,7 @@ public class Project : RestResponse /// Indicates if the project is running or not /// [JsonProperty(PropertyName = "codeRunning")] - public bool CodeRunning { get; set; } + public bool CodeRunning { get; set; } /// /// LEAN environment of the project running on From 090ffebd03f33eb2e1409ec75fb15bffcaa01b10 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Tue, 30 Dec 2025 18:48:27 -0300 Subject: [PATCH 064/103] Minor ApiConnection improvement (#9173) --- Api/Api.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Api/Api.cs b/Api/Api.cs index b49229f1fa88..37fc246a1a3e 100644 --- a/Api/Api.cs +++ b/Api/Api.cs @@ -82,7 +82,7 @@ public Api() /// public virtual void Initialize(int userId, string token, string dataFolder) { - ApiConnection = new ApiConnection(userId, token); + ApiConnection = CreateApiConnection(userId, token); _dataFolder = dataFolder?.Replace("\\", "/", StringComparison.InvariantCulture); //Allow proper decoding of orders from the API. @@ -1472,6 +1472,14 @@ protected bool TryJsonPost(string endpoint, out T result, object payload = nu return (apiConnection ?? ApiConnection).TryRequest(request, out result, timeout); } + /// + /// Create the api connection instance to use + /// + protected virtual ApiConnection CreateApiConnection(int userId, string token) + { + return new ApiConnection(userId, token); + } + /// /// Helper method that will execute the given api request and throw an exception if it fails /// From 32fcd94abca90b06f2f673f858ee9ae142df684e Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Wed, 31 Dec 2025 08:08:37 -0500 Subject: [PATCH 065/103] Exclude Period property from WindowIndicator (#9172) --- Algorithm/QCAlgorithm.Indicators.cs | 3 ++- Tests/Research/QuantBookHistoryTests.cs | 26 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Algorithm/QCAlgorithm.Indicators.cs b/Algorithm/QCAlgorithm.Indicators.cs index a00526d5bf45..f17ea893390a 100644 --- a/Algorithm/QCAlgorithm.Indicators.cs +++ b/Algorithm/QCAlgorithm.Indicators.cs @@ -53,7 +53,8 @@ public partial class QCAlgorithm "IsReady", "Window", "Item", - "WarmUpPeriod" + "WarmUpPeriod", + "Period" }; /// diff --git a/Tests/Research/QuantBookHistoryTests.cs b/Tests/Research/QuantBookHistoryTests.cs index e4feb70ef72a..5f66ce9c50af 100644 --- a/Tests/Research/QuantBookHistoryTests.cs +++ b/Tests/Research/QuantBookHistoryTests.cs @@ -813,6 +813,32 @@ def get_history(): } } + [Test] + public void IndicatorHistoryDoesNotReturnPeriodColumn() + { + using (Py.GIL()) + { + var testModule = PyModule.FromString("testModule", + @" +from AlgorithmImports import * + +def get_indicator_history(): + qb = QuantBook() + qb.set_start_date(2014, 4, 8) + symbol = qb.add_equity(""AAPL"", Resolution.DAILY).symbol + history = qb.indicator(ValueAtRisk(252, 0.95), symbol, 365, Resolution.DAILY) + return history +"); + dynamic getHistory = testModule.GetAttr("get_indicator_history"); + var pyHistory = getHistory() as PyObject; + var columns = pyHistory.GetAttr("columns") + .InvokeMethod("tolist") + .AsManagedObject(typeof(List)) as List; + Assert.IsFalse(columns.Contains("period")); + Assert.AreEqual(1, columns.Count); + } + } + private class TestHistoryProvider : HistoryProviderBase { private IHistoryProvider _provider; From 2c0390fde38a3110b5aedd595439d781d6b0171d Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Wed, 31 Dec 2025 08:09:37 -0500 Subject: [PATCH 066/103] Change Config.Get logging from Trace to Debug level (#9171) * Change Config.Get logs from Trace to Debug level to reduce noise * Wrap Config.Get logs with DebuggingEnabled check --- Configuration/Config.cs | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/Configuration/Config.cs b/Configuration/Config.cs index c6aaa3ff108e..0e07fdb4080e 100644 --- a/Configuration/Config.cs +++ b/Configuration/Config.cs @@ -146,7 +146,10 @@ public static string Get(string key, string defaultValue = "") var token = GetToken(Settings.Value, key); if (token == null) { - Log.Trace(Invariant($"Config.Get(): Configuration key not found. Key: {key} - Using default value: {defaultValue}")); + if (Log.DebuggingEnabled) + { + Log.Debug(Invariant($"Config.Get(): Configuration key not found. Key: {key} - Using default value: {defaultValue}")); + } return defaultValue; } return token.ToString(); @@ -227,18 +230,21 @@ public static double GetDouble(string key, double defaultValue = 0.0) public static T GetValue(string key, T defaultValue = default(T)) { // special case environment requests - if (key == "environment" && typeof (T) == typeof (string)) return (T) (object) GetEnvironment(); + if (key == "environment" && typeof(T) == typeof(string)) return (T)(object)GetEnvironment(); var token = GetToken(Settings.Value, key); if (token == null) { var defaultValueString = defaultValue is IConvertible - ? ((IConvertible) defaultValue).ToString(CultureInfo.InvariantCulture) + ? ((IConvertible)defaultValue).ToString(CultureInfo.InvariantCulture) : defaultValue is IFormattable - ? ((IFormattable) defaultValue).ToString(null, CultureInfo.InvariantCulture) + ? ((IFormattable)defaultValue).ToString(null, CultureInfo.InvariantCulture) : Invariant($"{defaultValue}"); - Log.Trace(Invariant($"Config.GetValue(): {key} - Using default value: {defaultValueString}")); + if (Log.DebuggingEnabled) + { + Log.Debug(Invariant($"Config.GetValue(): {key} - Using default value: {defaultValueString}")); + } return defaultValue; } @@ -255,22 +261,22 @@ public static double GetDouble(string key, double defaultValue = 0.0) if (type.IsEnum) { - return (T) Enum.Parse(type, value, true); + return (T)Enum.Parse(type, value, true); } if (typeof(IConvertible).IsAssignableFrom(type)) { - return (T) Convert.ChangeType(value, type, CultureInfo.InvariantCulture); + return (T)Convert.ChangeType(value, type, CultureInfo.InvariantCulture); } // try and find a static parse method try { - var parse = type.GetMethod("Parse", new[]{typeof(string)}); + var parse = type.GetMethod("Parse", new[] { typeof(string) }); if (parse != null) { - var result = parse.Invoke(null, new object[] {value}); - return (T) result; + var result = parse.Invoke(null, new object[] { value }); + return (T)result; } } catch (Exception err) @@ -381,7 +387,7 @@ public static JObject Flatten(JObject config, string overrideEnvironment) var environments = config["environments"]; if (!(environments is JObject)) continue; - var settings = ((JObject) environments).SelectToken(env); + var settings = ((JObject)environments).SelectToken(env); if (settings == null) continue; // copy values for the selected environment to the root @@ -395,7 +401,7 @@ public static JObject Flatten(JObject config, string overrideEnvironment) var jProperty = clone.Property(path); if (jProperty != null) jProperty.Remove(); - var value = (token is JProperty ? ((JProperty) token).Value : token).ToString(); + var value = (token is JProperty ? ((JProperty)token).Value : token).ToString(); clone.Add(path, value); } } From 0854ab82da07a074eba8d49d918eef63be771059 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Wed, 31 Dec 2025 08:11:46 -0500 Subject: [PATCH 067/103] Default option filter now includes weeklies to prevent empty chains (#9162) * Return weekly contracts if no standard contracts exist * Fix unit and regression tests * Centralize default expiration type flags * Add ExcludeWeeklys() method * Mark IncludeWeeklys() as obsolete since weeklies are now default --- ...iverseSelectionModelRegressionAlgorithm.cs | 2 +- ...icTemplateOptionEquityStrategyAlgorithm.cs | 4 +- .../BasicTemplateOptionStrategyAlgorithm.cs | 7 +- .../BasicTemplateOptionsAlgorithm.cs | 5 +- .../BasicTemplateOptionsHourlyAlgorithm.cs | 2 +- Algorithm.CSharp/ComboOrderAlgorithm.cs | 2 +- .../ComboOrderTicketDemoAlgorithm.cs | 8 +- .../CoveredCallComboLimitOrderAlgorithm.cs | 4 +- ...hStrictDailyEndTimesRegressionAlgorithm.cs | 2 +- .../LargeQuantityOptionStrategyAlgorithm.cs | 2 +- ...ipleOptionStrategiesRegressionAlgorithm.cs | 2 +- ...dShortOptionStrategyOverMarginAlgorithm.cs | 2 +- ...DynamicOptionsFilterRegressionAlgorithm.cs | 2 +- ...uyingPowerOptionBullCallSpreadAlgorithm.cs | 2 +- ...MarginMultipleOrdersRegressionAlgorithm.cs | 6 +- ...ludeWeeklysByDefaultRegressionAlgorithm.cs | 143 ++++++++++++++++++ ...nSubscriptionRemovalRegressionAlgorithm.cs | 2 +- ...AndUniverseSelectionRegressionAlgorithm.cs | 4 +- ...iverseSelectionModelRegressionAlgorithm.cs | 4 +- ...onEquityBaseStrategyRegressionAlgorithm.cs | 4 +- ...tionNoTimeInUniverseRegressionAlgorithm.cs | 2 +- .../OptionOrdersOnSplitRegressionAlgorithm.cs | 2 +- ...portedAmericanOptionRegressionAlgorithm.cs | 2 + ...portedAmericanOptionRegressionAlgorithm.cs | 2 + .../OptionResolutionRegressionAlgorithm.cs | 2 +- ...ptionShortCallMarginCallEventsAlgorithm.cs | 2 +- .../OptionSplitWarmupRegressionAlgorithm.cs | 1 + ...tionStrategyFactoryMethodsBaseAlgorithm.cs | 9 +- ...OptionsAutomaticSeedRegressionAlgorithm.cs | 2 +- .../OptionsExpiredContractRegression.cs | 2 +- .../RevertComboOrderPositionsAlgorithm.cs | 9 +- ...nUsingCalendarSpreadRegressionAlgorithm.cs | 2 +- ...roupBuyingPowerModelRegressionAlgorithm.cs | 8 +- .../SwitchDataModeRegressionAlgorithm.cs | 3 +- ...icTemplateOptionEquityStrategyAlgorithm.py | 2 +- .../BasicTemplateOptionStrategyAlgorithm.py | 3 +- .../BasicTemplateOptionsAlgorithm.py | 2 +- .../BasicTemplateOptionsHourlyAlgorithm.py | 2 +- .../ComboOrderTicketDemoAlgorithm.py | 2 +- ...uyingPowerOptionBullCallSpreadAlgorithm.py | 2 +- ...MarginMultipleOrdersRegressionAlgorithm.py | 2 +- ...ludeWeeklysByDefaultRegressionAlgorithm.py | 46 ++++++ ...iverseSelectionModelRegressionAlgorithm.py | 2 +- ...portedAmericanOptionRegressionAlgorithm.py | 2 + ...portedAmericanOptionRegressionAlgorithm.py | 2 + ...tionStrategyFactoryMethodsBaseAlgorithm.py | 2 +- .../ContractSecurityFilterUniverse.cs | 35 +++-- .../Securities/Option/OptionFilterUniverse.cs | 1 + Tests/Common/Securities/FutureFilterTests.cs | 40 +++-- Tests/Common/Securities/OptionFilterTests.cs | 4 +- .../DataFeeds/LiveTradingDataFeedTests.cs | 2 +- 51 files changed, 311 insertions(+), 97 deletions(-) create mode 100644 Algorithm.CSharp/OptionChainIncludeWeeklysByDefaultRegressionAlgorithm.cs create mode 100644 Algorithm.Python/OptionChainIncludeWeeklysByDefaultRegressionAlgorithm.py diff --git a/Algorithm.CSharp/AddOptionUniverseSelectionModelRegressionAlgorithm.cs b/Algorithm.CSharp/AddOptionUniverseSelectionModelRegressionAlgorithm.cs index 849ff5030f2a..06dedcaa057a 100644 --- a/Algorithm.CSharp/AddOptionUniverseSelectionModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/AddOptionUniverseSelectionModelRegressionAlgorithm.cs @@ -96,7 +96,7 @@ public override void OnEndOfAlgorithm() /// /// Data Points count of all timeslices of algorithm /// - public long DataPoints => 1658168; + public long DataPoints => 2349547; /// /// Data Points count of the algorithm history diff --git a/Algorithm.CSharp/BasicTemplateOptionEquityStrategyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionEquityStrategyAlgorithm.cs index d929845bcc40..fb6107525c59 100644 --- a/Algorithm.CSharp/BasicTemplateOptionEquityStrategyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionEquityStrategyAlgorithm.cs @@ -44,7 +44,7 @@ public override void Initialize() _optionSymbol = option.Symbol; // set our strike/expiry filter for this option chain - option.SetFilter(u => u.Strikes(-2, +2) + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2) // Expiration method accepts TimeSpan objects or integer for days. // The following statements yield the same filtering criteria .Expiration(0, 180)); @@ -73,7 +73,7 @@ public override void OnData(Slice slice) var higherStrike = callContracts[2].Strike; var optionStrategy = OptionStrategies.CallButterfly(_optionSymbol, higherStrike, middleStrike, lowerStrike, expiry); - + Order(optionStrategy, 10); } } diff --git a/Algorithm.CSharp/BasicTemplateOptionStrategyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionStrategyAlgorithm.cs index 8705658fd2fb..56e35003743d 100644 --- a/Algorithm.CSharp/BasicTemplateOptionStrategyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionStrategyAlgorithm.cs @@ -50,8 +50,9 @@ public override void Initialize() // set our strike/expiry filter for this option chain // SetFilter method accepts TimeSpan objects or integer for days. // The following statements yield the same filtering criteria - option.SetFilter(-2, +2, 0, 180); - // option.SetFilter(-2, +2, TimeSpan.Zero, TimeSpan.FromDays(180)); + option.SetFilter(u => u.StandardsOnly() + .Strikes(-2, +2) + .Expiration(0, 180)); // Adding this to reproduce GH issue #2314 SetWarmup(TimeSpan.FromMinutes(1)); @@ -83,7 +84,7 @@ public override void OnData(Slice slice) Liquidate(); } - foreach(var kpv in slice.Bars) + foreach (var kpv in slice.Bars) { Log($"---> OnData: {Time}, {kpv.Key.Value}, {kpv.Value.Close:0.00}"); } diff --git a/Algorithm.CSharp/BasicTemplateOptionsAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionsAlgorithm.cs index f852e532e3e3..c5b8950f617b 100644 --- a/Algorithm.CSharp/BasicTemplateOptionsAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionsAlgorithm.cs @@ -48,11 +48,10 @@ public override void Initialize() _optionSymbol = option.Symbol; // set our strike/expiry filter for this option chain - option.SetFilter(u => u.Strikes(-2, +2) + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2) // Expiration method accepts TimeSpan objects or integer for days. // The following statements yield the same filtering criteria - .Expiration(0, 180)); - // .Expiration(TimeSpan.Zero, TimeSpan.FromDays(180))); + .Expiration(0, 180)); // .Expiration(TimeSpan.Zero, TimeSpan.FromDays(180))); // use the underlying equity as the benchmark SetBenchmark(equity.Symbol); diff --git a/Algorithm.CSharp/BasicTemplateOptionsHourlyAlgorithm.cs b/Algorithm.CSharp/BasicTemplateOptionsHourlyAlgorithm.cs index 139595b4a951..5a16c668ae43 100644 --- a/Algorithm.CSharp/BasicTemplateOptionsHourlyAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateOptionsHourlyAlgorithm.cs @@ -48,7 +48,7 @@ public override void Initialize() _optionSymbol = option.Symbol; // set our strike/expiry filter for this option chain - option.SetFilter(u => u.Strikes(-2, +2) + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2) // Expiration method accepts TimeSpan objects or integer for days. // The following statements yield the same filtering criteria .Expiration(0, 180)); diff --git a/Algorithm.CSharp/ComboOrderAlgorithm.cs b/Algorithm.CSharp/ComboOrderAlgorithm.cs index b1a0b0f45155..6afde59ed769 100644 --- a/Algorithm.CSharp/ComboOrderAlgorithm.cs +++ b/Algorithm.CSharp/ComboOrderAlgorithm.cs @@ -58,7 +58,7 @@ public override void Initialize() var option = AddOption(equity.Symbol, fillForward: true); _optionSymbol = option.Symbol; - option.SetFilter(u => u.Strikes(-2, +2) + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2) .Expiration(0, 180)); } diff --git a/Algorithm.CSharp/ComboOrderTicketDemoAlgorithm.cs b/Algorithm.CSharp/ComboOrderTicketDemoAlgorithm.cs index ab0881afa21e..9403614e436c 100644 --- a/Algorithm.CSharp/ComboOrderTicketDemoAlgorithm.cs +++ b/Algorithm.CSharp/ComboOrderTicketDemoAlgorithm.cs @@ -47,7 +47,7 @@ public override void Initialize() var option = AddOption(equity.Symbol, fillForward: true); _optionSymbol = option.Symbol; - option.SetFilter(u => u.Strikes(-2, +2) + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2) .Expiration(0, 180)); } @@ -243,8 +243,7 @@ public override void OnOrderEvent(OrderEvent orderEvent) } if (orderEvent.Quantity != order.Quantity) { - throw new RegressionTestException($@"OrderEvent quantity should hold the current order Quantity. Got {orderEvent.Quantity - }, expected {order.Quantity}"); + throw new RegressionTestException($@"OrderEvent quantity should hold the current order Quantity. Got {orderEvent.Quantity}, expected {order.Quantity}"); } if (order is ComboLegLimitOrder && orderEvent.LimitPrice == 0) { @@ -303,8 +302,7 @@ public override void OnEndOfAlgorithm() { throw new RegressionTestException( "There were expected 6 filled market orders, 3 filled combo limit orders and 6 filled combo leg limit orders, " + - $@"but there were {filledComboMarketOrders.Count} filled market orders, {filledComboLimitOrders.Count - } filled combo limit orders and {filledComboLegLimitOrders.Count} filled combo leg limit orders"); + $@"but there were {filledComboMarketOrders.Count} filled market orders, {filledComboLimitOrders.Count} filled combo limit orders and {filledComboLegLimitOrders.Count} filled combo leg limit orders"); } if (openOrders.Count != 0 || openOrderTickets.Count != 0) diff --git a/Algorithm.CSharp/CoveredCallComboLimitOrderAlgorithm.cs b/Algorithm.CSharp/CoveredCallComboLimitOrderAlgorithm.cs index 9e0b86d701ca..bb36e456b12a 100644 --- a/Algorithm.CSharp/CoveredCallComboLimitOrderAlgorithm.cs +++ b/Algorithm.CSharp/CoveredCallComboLimitOrderAlgorithm.cs @@ -43,7 +43,7 @@ public override void Initialize() var option = AddOption(equity.Symbol); _optionSymbol = option.Symbol; - option.SetFilter(u => u.Strikes(-1, +1).Expiration(0, 30)); + option.SetFilter(u => u.StandardsOnly().Strikes(-1, +1).Expiration(0, 30)); } /// /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. @@ -70,7 +70,7 @@ public override void OnData(Slice slice) var legs = new List { Leg.Create(atmContract.Symbol, -1), Leg.Create(atmContract.Symbol.Underlying, 100) }; var comboPrice = underlyingPrice - optionPrice; - if(comboPrice < 734m) + if (comboPrice < 734m) { // just to make sure the price makes sense throw new RegressionTestException($"Unexpected combo price {comboPrice}"); diff --git a/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithStrictDailyEndTimesRegressionAlgorithm.cs b/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithStrictDailyEndTimesRegressionAlgorithm.cs index 2d3981a1a5a7..999fb1e70620 100644 --- a/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithStrictDailyEndTimesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/DailyOptionChainOpenInterestDataWithStrictDailyEndTimesRegressionAlgorithm.cs @@ -40,7 +40,7 @@ public override void Initialize() SetEndDate(2014, 07, 06); var option = AddOption("AAPL", Resolution.Daily); - option.SetFilter(-5, +5, 0, 365); + option.SetFilter(u => u.StandardsOnly().Strikes(-5, +5).Expiration(0, 365)); _symbol = option.Symbol; } diff --git a/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs b/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs index f63e125c7d1c..6223d99983e0 100644 --- a/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs +++ b/Algorithm.CSharp/LargeQuantityOptionStrategyAlgorithm.cs @@ -44,7 +44,7 @@ public override void Initialize() var option = AddOption("GOOG"); _optionSymbol = option.Symbol; - option.SetFilter(-2, +2, 0, 180); + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2).Expiration(0, 180)); } public override void OnData(Slice slice) diff --git a/Algorithm.CSharp/LiquidatingMultipleOptionStrategiesRegressionAlgorithm.cs b/Algorithm.CSharp/LiquidatingMultipleOptionStrategiesRegressionAlgorithm.cs index b3faa601537b..fe45a4c7fa5f 100644 --- a/Algorithm.CSharp/LiquidatingMultipleOptionStrategiesRegressionAlgorithm.cs +++ b/Algorithm.CSharp/LiquidatingMultipleOptionStrategiesRegressionAlgorithm.cs @@ -50,7 +50,7 @@ public override void Initialize() SetCash(500000); var option = AddOption("GOOG"); - option.SetFilter(universe => universe.Strikes(-3, 3).Expiration(0, 180)); + option.SetFilter(universe => universe.StandardsOnly().Strikes(-3, 3).Expiration(0, 180)); _symbol = option.Symbol; } diff --git a/Algorithm.CSharp/NakedShortOptionStrategyOverMarginAlgorithm.cs b/Algorithm.CSharp/NakedShortOptionStrategyOverMarginAlgorithm.cs index 936b03de55c3..68aa60f75bf5 100644 --- a/Algorithm.CSharp/NakedShortOptionStrategyOverMarginAlgorithm.cs +++ b/Algorithm.CSharp/NakedShortOptionStrategyOverMarginAlgorithm.cs @@ -49,7 +49,7 @@ public override void Initialize() var option = AddOption("GOOG"); _optionSymbol = option.Symbol; - option.SetFilter(-2, +2, 0, 180); + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2).Expiration(0, 180)); SetBenchmark("GOOG"); } diff --git a/Algorithm.CSharp/NonDynamicOptionsFilterRegressionAlgorithm.cs b/Algorithm.CSharp/NonDynamicOptionsFilterRegressionAlgorithm.cs index 48d0c1a0ad65..c48a8f0f48c0 100644 --- a/Algorithm.CSharp/NonDynamicOptionsFilterRegressionAlgorithm.cs +++ b/Algorithm.CSharp/NonDynamicOptionsFilterRegressionAlgorithm.cs @@ -44,7 +44,7 @@ public override void Initialize() var option = AddOption(UnderlyingTicker); _optionSymbol = option.Symbol; - option.SetFilter(u => u.Strikes(-2, +2).Expiration(0, 180 * 3)); + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2).Expiration(0, 180 * 3)); SetBenchmark(equity.Symbol); } diff --git a/Algorithm.CSharp/NullBuyingPowerOptionBullCallSpreadAlgorithm.cs b/Algorithm.CSharp/NullBuyingPowerOptionBullCallSpreadAlgorithm.cs index a99678e79451..9d841ec95051 100644 --- a/Algorithm.CSharp/NullBuyingPowerOptionBullCallSpreadAlgorithm.cs +++ b/Algorithm.CSharp/NullBuyingPowerOptionBullCallSpreadAlgorithm.cs @@ -47,7 +47,7 @@ public override void Initialize() var option = AddOption(equity.Symbol); _optionSymbol = option.Symbol; - option.SetFilter(-2, +2, 0, 180); + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2).Expiration(0, 180)); } public override void OnData(Slice slice) diff --git a/Algorithm.CSharp/NullMarginMultipleOrdersRegressionAlgorithm.cs b/Algorithm.CSharp/NullMarginMultipleOrdersRegressionAlgorithm.cs index a3f550be7314..8dba36b6308e 100644 --- a/Algorithm.CSharp/NullMarginMultipleOrdersRegressionAlgorithm.cs +++ b/Algorithm.CSharp/NullMarginMultipleOrdersRegressionAlgorithm.cs @@ -45,7 +45,7 @@ public override void Initialize() var option = AddOption(equity.Symbol); OptionSymbol = option.Symbol; - option.SetFilter(u => u.Strikes(-2, +2).Expiration(0, 180)); + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2).Expiration(0, 180)); } protected virtual void OverrideMarginModels() @@ -75,7 +75,7 @@ public override void OnData(Slice slice) .ThenBy(x => x.Strike) .First(); - if(!_placedTrades) + if (!_placedTrades) { _placedTrades = true; PlaceTrades(atmContracts); @@ -100,7 +100,7 @@ protected virtual void AssertState(OrderTicket ticket, int expectedGroupCount, i { throw new RegressionTestException($"Unexpected position group count {Portfolio.Positions.Groups.Count} for symbol {ticket.Symbol} and quantity {ticket.Quantity}"); } - if(Portfolio.TotalMarginUsed != expectedMarginUsed) + if (Portfolio.TotalMarginUsed != expectedMarginUsed) { throw new RegressionTestException($"Unexpected margin used {expectedMarginUsed}"); } diff --git a/Algorithm.CSharp/OptionChainIncludeWeeklysByDefaultRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainIncludeWeeklysByDefaultRegressionAlgorithm.cs new file mode 100644 index 000000000000..e5e83a2d686b --- /dev/null +++ b/Algorithm.CSharp/OptionChainIncludeWeeklysByDefaultRegressionAlgorithm.cs @@ -0,0 +1,143 @@ +/* + * 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.Data; +using QuantConnect.Data.Market; +using QuantConnect.Interfaces; +using QuantConnect.Securities.Option; +using System.Collections.Generic; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Verifies that weekly option contracts are included when no standard contracts are available. + /// + public class OptionChainIncludeWeeklysByDefaultRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition + { + private Option _option; + private Symbol _optionSymbol; + private int _weeklyCount; + private int _totalCount; + + /// + /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized. + /// + public override void Initialize() + { + SetStartDate(2015, 12, 24); + SetEndDate(2015, 12, 24); + + _option = AddOption("GOOG"); + _optionSymbol = _option.Symbol; + + _option.SetFilter((optionFilter) => + { + return optionFilter.Strikes(-8, +8).Expiration(0, 0); + }); + } + + /// + /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. + /// + /// Slice object keyed by symbol containing the stock data + public override void OnData(Slice slice) + { + OptionChain chain; + if (slice.OptionChains.TryGetValue(_optionSymbol, out chain)) + { + _totalCount += chain.Contracts.Count; + foreach (var contract in chain.Contracts.Values) + { + if (!OptionSymbol.IsStandard(contract.Symbol)) + { + _weeklyCount++; + } + } + } + } + + public override void OnEndOfAlgorithm() + { + if (_weeklyCount == 0) + { + throw new RegressionTestException("No weekly contracts found"); + } + if (_totalCount != _weeklyCount) + { + throw new RegressionTestException("When no standard option expirations are available, the option chain must fall back to weekly contracts only"); + } + } + + /// + /// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm. + /// + public bool CanRunLocally { get; } = true; + + /// + /// This is used by the regression test system to indicate which languages this algorithm is written in. + /// + public List Languages { get; } = new() { Language.CSharp, Language.Python }; + + /// + /// Data Points count of all timeslices of algorithm + /// + public long DataPoints => 22702; + + /// + /// Data Points count of the algorithm history + /// + public int AlgorithmHistoryDataPoints => 0; + + /// + /// Final status of the algorithm + /// + public AlgorithmStatus AlgorithmStatus => AlgorithmStatus.Completed; + + /// + /// This is used by the regression test system to indicate what the expected statistics are from running the algorithm + /// + public Dictionary ExpectedStatistics => new Dictionary + { + {"Total Orders", "0"}, + {"Average Win", "0%"}, + {"Average Loss", "0%"}, + {"Compounding Annual Return", "0%"}, + {"Drawdown", "0%"}, + {"Expectancy", "0"}, + {"Start Equity", "100000"}, + {"End Equity", "100000"}, + {"Net Profit", "0%"}, + {"Sharpe Ratio", "0"}, + {"Sortino Ratio", "0"}, + {"Probabilistic Sharpe Ratio", "0%"}, + {"Loss Rate", "0%"}, + {"Win Rate", "0%"}, + {"Profit-Loss Ratio", "0"}, + {"Alpha", "0"}, + {"Beta", "0"}, + {"Annual Standard Deviation", "0"}, + {"Annual Variance", "0"}, + {"Information Ratio", "0"}, + {"Tracking Error", "0"}, + {"Treynor Ratio", "0"}, + {"Total Fees", "$0.00"}, + {"Estimated Strategy Capacity", "$0"}, + {"Lowest Capacity Asset", ""}, + {"Portfolio Turnover", "0%"}, + {"Drawdown Recovery", "0"}, + {"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"} + }; + } +} diff --git a/Algorithm.CSharp/OptionChainSubscriptionRemovalRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainSubscriptionRemovalRegressionAlgorithm.cs index c4d104c38179..3751c49da7fc 100644 --- a/Algorithm.CSharp/OptionChainSubscriptionRemovalRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainSubscriptionRemovalRegressionAlgorithm.cs @@ -96,7 +96,7 @@ public TestOptionUniverseSelectionModel(Func> opti protected override OptionFilterUniverse Filter(OptionFilterUniverse filter) { - return filter.BackMonth().Contracts(contracts => contracts.Take(15)); + return filter.StandardsOnly().BackMonth().Contracts(contracts => contracts.Take(15)); } } diff --git a/Algorithm.CSharp/OptionChainedAndUniverseSelectionRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainedAndUniverseSelectionRegressionAlgorithm.cs index 76fd1c30a248..bca3c938ae18 100644 --- a/Algorithm.CSharp/OptionChainedAndUniverseSelectionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainedAndUniverseSelectionRegressionAlgorithm.cs @@ -36,7 +36,9 @@ public override void Initialize() SetStartDate(2014, 06, 05); SetEndDate(2014, 06, 09); - _aaplOption = AddOption("AAPL").Symbol; + var option = AddOption("AAPL"); + option.SetFilter(u => u.StandardsOnly().Strikes(-1, 1).Expiration(0, 35)); + _aaplOption = option.Symbol; AddUniverseSelection(new DailyUniverseSelectionModel("MyCustomSelectionModel", time => new[] { "AAPL" }, this)); } diff --git a/Algorithm.CSharp/OptionChainedUniverseSelectionModelRegressionAlgorithm.cs b/Algorithm.CSharp/OptionChainedUniverseSelectionModelRegressionAlgorithm.cs index 24476faf6fbb..77178fc1190d 100644 --- a/Algorithm.CSharp/OptionChainedUniverseSelectionModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionChainedUniverseSelectionModelRegressionAlgorithm.cs @@ -28,7 +28,7 @@ namespace QuantConnect.Algorithm.CSharp /// /// Regression algorithm to test the OptionChainedUniverseSelectionModel class /// - public class OptionChainedUniverseSelectionModelRegressionAlgorithm: QCAlgorithm, IRegressionAlgorithmDefinition + public class OptionChainedUniverseSelectionModelRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition { public override void Initialize() { @@ -39,7 +39,7 @@ public override void Initialize() var universe = AddUniverse("my-minute-universe-name", time => new List { "AAPL", "TWX" }); - AddUniverseSelection(new OptionChainedUniverseSelectionModel(universe, u => u.Strikes(-2, +2) + AddUniverseSelection(new OptionChainedUniverseSelectionModel(universe, u => u.StandardsOnly().Strikes(-2, +2) // Expiration method accepts TimeSpan objects or integer for days. // The following statements yield the same filtering criteria .Expiration(0, 180))); diff --git a/Algorithm.CSharp/OptionEquityBaseStrategyRegressionAlgorithm.cs b/Algorithm.CSharp/OptionEquityBaseStrategyRegressionAlgorithm.cs index e0d16846d3f7..c118b97bb3fb 100644 --- a/Algorithm.CSharp/OptionEquityBaseStrategyRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionEquityBaseStrategyRegressionAlgorithm.cs @@ -43,7 +43,7 @@ public override void Initialize() _optionSymbol = option.Symbol; // set our strike/expiry filter for this option chain - option.SetFilter(u => u.Strikes(-2, +2) + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2) // Expiration method accepts TimeSpan objects or integer for days. // The following statements yield the same filtering criteria .Expiration(0, 180)); @@ -83,7 +83,7 @@ protected decimal GetPriceSpreadDifference(params Symbol[] symbols) spread = security.Price - security.Holdings.AveragePrice; } } - else if(security.BidPrice != 0) + else if (security.BidPrice != 0) { spread = security.Holdings.AveragePrice - security.Price; } diff --git a/Algorithm.CSharp/OptionNoTimeInUniverseRegressionAlgorithm.cs b/Algorithm.CSharp/OptionNoTimeInUniverseRegressionAlgorithm.cs index 2bd1976119d9..a4bdc47104d0 100644 --- a/Algorithm.CSharp/OptionNoTimeInUniverseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionNoTimeInUniverseRegressionAlgorithm.cs @@ -42,7 +42,7 @@ public override void Initialize() _optionSymbol = option.Symbol; // set our strike/expiry filter for this option chain - option.SetFilter(u => u.Strikes(-1, +1) + option.SetFilter(u => u.StandardsOnly().Strikes(-1, +1) // Expiration method accepts TimeSpan objects or integer for days. // The following statements yield the same filtering criteria .Expiration(0, 60)); diff --git a/Algorithm.CSharp/OptionOrdersOnSplitRegressionAlgorithm.cs b/Algorithm.CSharp/OptionOrdersOnSplitRegressionAlgorithm.cs index b0e5b6f31dcd..7f09fba8d76b 100644 --- a/Algorithm.CSharp/OptionOrdersOnSplitRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionOrdersOnSplitRegressionAlgorithm.cs @@ -42,7 +42,7 @@ public override void Initialize() _aapl = AddEquity("AAPL", Resolution.Minute, extendedMarketHours: true, dataNormalizationMode: DataNormalizationMode.Raw).Symbol; var option = AddOption(_aapl, Resolution.Minute); - option.SetFilter(-1, +1, 0, 365); + option.SetFilter(u => u.StandardsOnly().Strikes(-1, +1).Expiration(0, 365)); } public override void OnData(Slice slice) diff --git a/Algorithm.CSharp/OptionPriceModelForSupportedAmericanOptionRegressionAlgorithm.cs b/Algorithm.CSharp/OptionPriceModelForSupportedAmericanOptionRegressionAlgorithm.cs index 71649af269ac..dbf8825d462f 100644 --- a/Algorithm.CSharp/OptionPriceModelForSupportedAmericanOptionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionPriceModelForSupportedAmericanOptionRegressionAlgorithm.cs @@ -30,6 +30,8 @@ public override void Initialize() SetEndDate(2014, 6, 9); var option = AddOption("AAPL", Resolution.Minute); + option.SetFilter(u => u.StandardsOnly().Strikes(-1, 1).Expiration(0, 35)); + // BaroneAdesiWhaley model supports American style options option.PriceModel = OptionPriceModels.BaroneAdesiWhaley(); diff --git a/Algorithm.CSharp/OptionPriceModelForUnsupportedAmericanOptionRegressionAlgorithm.cs b/Algorithm.CSharp/OptionPriceModelForUnsupportedAmericanOptionRegressionAlgorithm.cs index d5873252e3f6..ca1764623e9c 100644 --- a/Algorithm.CSharp/OptionPriceModelForUnsupportedAmericanOptionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionPriceModelForUnsupportedAmericanOptionRegressionAlgorithm.cs @@ -29,6 +29,8 @@ public override void Initialize() SetEndDate(2014, 6, 9); var option = AddOption("AAPL", Resolution.Minute); + option.SetFilter(u => u.StandardsOnly().Strikes(-1, 1).Expiration(0, 35)); + // BlackSholes model does not support American style options option.PriceModel = OptionPriceModels.BlackScholes(); diff --git a/Algorithm.CSharp/OptionResolutionRegressionAlgorithm.cs b/Algorithm.CSharp/OptionResolutionRegressionAlgorithm.cs index c5cd4d2fa5b7..0631ad5f606b 100644 --- a/Algorithm.CSharp/OptionResolutionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionResolutionRegressionAlgorithm.cs @@ -38,7 +38,7 @@ public override void Initialize() UniverseSettings.Resolution = Resolution.Daily; var option = AddOption("GOOG"); - option.SetFilter(u => u.Strikes(-2, +2).Expiration(0, 180)); + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2).Expiration(0, 180)); _optionSymbol = option.Symbol; if (UniverseManager.TryGetValue(option.Symbol, out var universe) diff --git a/Algorithm.CSharp/OptionShortCallMarginCallEventsAlgorithm.cs b/Algorithm.CSharp/OptionShortCallMarginCallEventsAlgorithm.cs index aec7cc3ce60d..6192dc406e60 100644 --- a/Algorithm.CSharp/OptionShortCallMarginCallEventsAlgorithm.cs +++ b/Algorithm.CSharp/OptionShortCallMarginCallEventsAlgorithm.cs @@ -42,7 +42,7 @@ public override void Initialize() var option = AddOption(equitySymbol); _optionSymbol = option.Symbol; - option.SetFilter(u => u.Strikes(-2, +2) + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2) .Expiration(0, 180)); Portfolio.MarginCallModel = new CustomMarginCallModel(Portfolio, DefaultOrderProperties); diff --git a/Algorithm.CSharp/OptionSplitWarmupRegressionAlgorithm.cs b/Algorithm.CSharp/OptionSplitWarmupRegressionAlgorithm.cs index 92bc551ea1a2..98ffa66a4c14 100644 --- a/Algorithm.CSharp/OptionSplitWarmupRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionSplitWarmupRegressionAlgorithm.cs @@ -39,6 +39,7 @@ public override void Initialize() SetEndDate(2014, 06, 09); var option = AddOption("AAPL"); + option.SetFilter(u => u.StandardsOnly().Strikes(-1, 1).Expiration(0, 35)); _optionSymbol = option.Symbol; var optionContractSymbol = OptionChain(_optionSymbol) diff --git a/Algorithm.CSharp/OptionStrategyFactoryMethodsBaseAlgorithm.cs b/Algorithm.CSharp/OptionStrategyFactoryMethodsBaseAlgorithm.cs index d7e486765ee1..7f61a98a815f 100644 --- a/Algorithm.CSharp/OptionStrategyFactoryMethodsBaseAlgorithm.cs +++ b/Algorithm.CSharp/OptionStrategyFactoryMethodsBaseAlgorithm.cs @@ -45,7 +45,7 @@ public override void Initialize() var option = AddOption("GOOG"); _optionSymbol = option.Symbol; - option.SetFilter(-2, +2, 0, 180); + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2).Expiration(0, 180)); SetBenchmark("GOOG"); } @@ -67,8 +67,7 @@ public override void OnData(Slice slice) var buyingPowerModel = positionGroup.BuyingPowerModel as OptionStrategyPositionGroupBuyingPowerModel; if (buyingPowerModel == null) { - throw new RegressionTestException($@"Expected position group buying power model type: {nameof(OptionStrategyPositionGroupBuyingPowerModel) - }. Actual: {positionGroup.BuyingPowerModel.GetType()}"); + throw new RegressionTestException($@"Expected position group buying power model type: {nameof(OptionStrategyPositionGroupBuyingPowerModel)}. Actual: {positionGroup.BuyingPowerModel.GetType()}"); } AssertStrategyPositionGroup(positionGroup); @@ -91,9 +90,7 @@ public override void OnEndOfAlgorithm() var ordersCount = Transactions.GetOrders((order) => order.Status == OrderStatus.Filled).Count(); if (ordersCount != ExpectedOrdersCount) { - throw new RegressionTestException($@"Expected {ExpectedOrdersCount - } orders to have been submitted and filled, half for buying the strategy and the other half for the liquidation. Actual { - ordersCount}"); + throw new RegressionTestException($@"Expected {ExpectedOrdersCount} orders to have been submitted and filled, half for buying the strategy and the other half for the liquidation. Actual {ordersCount}"); } } diff --git a/Algorithm.CSharp/OptionsAutomaticSeedRegressionAlgorithm.cs b/Algorithm.CSharp/OptionsAutomaticSeedRegressionAlgorithm.cs index 4e123af087ba..b864cf8823a0 100644 --- a/Algorithm.CSharp/OptionsAutomaticSeedRegressionAlgorithm.cs +++ b/Algorithm.CSharp/OptionsAutomaticSeedRegressionAlgorithm.cs @@ -49,7 +49,7 @@ public override void Initialize() var option = AddOption(equity.Symbol); - option.SetFilter(u => u.Strikes(-2, +2).Expiration(0, 180)); + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2).Expiration(0, 180)); } public override void OnData(Slice slice) diff --git a/Algorithm.CSharp/OptionsExpiredContractRegression.cs b/Algorithm.CSharp/OptionsExpiredContractRegression.cs index fbe53061f5b9..6ce621e6bdfb 100644 --- a/Algorithm.CSharp/OptionsExpiredContractRegression.cs +++ b/Algorithm.CSharp/OptionsExpiredContractRegression.cs @@ -40,7 +40,7 @@ public override void Initialize() // Subscribe to GOOG Options var option = AddOption("GOOG"); - option.SetFilter(x => x.CallsOnly().Strikes(0, 1).Expiration(0, 30)); + option.SetFilter(x => x.StandardsOnly().CallsOnly().Strikes(0, 1).Expiration(0, 30)); } public override void OnData(Slice slice) diff --git a/Algorithm.CSharp/RevertComboOrderPositionsAlgorithm.cs b/Algorithm.CSharp/RevertComboOrderPositionsAlgorithm.cs index 5b89eea17645..ecbae4c6a7ad 100644 --- a/Algorithm.CSharp/RevertComboOrderPositionsAlgorithm.cs +++ b/Algorithm.CSharp/RevertComboOrderPositionsAlgorithm.cs @@ -49,6 +49,7 @@ public override void Initialize() var equitySymbol = AddEquity("GOOG", leverage: 4, fillForward: true).Symbol; _option = AddOption(equitySymbol, fillForward: true); _option.SetFilter(optionFilterUniverse => optionFilterUniverse + .StandardsOnly() .Strikes(-2, 2) .Expiration(0, 180)); } @@ -136,17 +137,13 @@ public override void OnEndOfAlgorithm() var expectedEntryQuantity = leg.Quantity * _comboQuantity; if (entryOrderTicket.Quantity != expectedEntryQuantity || entryOrderTicket.QuantityFilled != expectedEntryQuantity) { - throw new RegressionTestException($@"Entry order ticket quantity and filled quantity do not match expected quantity for leg {i - }. Expected: {expectedEntryQuantity}. Actual quantity: {entryOrderTicket.Quantity}. Actual filled quantity: { - entryOrderTicket.QuantityFilled}"); + throw new RegressionTestException($@"Entry order ticket quantity and filled quantity do not match expected quantity for leg {i}. Expected: {expectedEntryQuantity}. Actual quantity: {entryOrderTicket.Quantity}. Actual filled quantity: {entryOrderTicket.QuantityFilled}"); } var expectedExitQuantity = -expectedEntryQuantity; if (exitOrderTicket.Quantity != expectedExitQuantity || exitOrderTicket.QuantityFilled != expectedExitQuantity) { - throw new RegressionTestException($@"Exit order ticket quantity and filled quantity do not match expected quantity for leg {i - }. Expected: {expectedExitQuantity}. Actual quantity: {exitOrderTicket.Quantity}. Actual filled quantity: { - exitOrderTicket.QuantityFilled}"); + throw new RegressionTestException($@"Exit order ticket quantity and filled quantity do not match expected quantity for leg {i}. Expected: {expectedExitQuantity}. Actual quantity: {exitOrderTicket.Quantity}. Actual filled quantity: {exitOrderTicket.QuantityFilled}"); } } } diff --git a/Algorithm.CSharp/RollOutFrontMonthToBackMonthOptionUsingCalendarSpreadRegressionAlgorithm.cs b/Algorithm.CSharp/RollOutFrontMonthToBackMonthOptionUsingCalendarSpreadRegressionAlgorithm.cs index 2563a071035a..ac4631d37454 100644 --- a/Algorithm.CSharp/RollOutFrontMonthToBackMonthOptionUsingCalendarSpreadRegressionAlgorithm.cs +++ b/Algorithm.CSharp/RollOutFrontMonthToBackMonthOptionUsingCalendarSpreadRegressionAlgorithm.cs @@ -47,7 +47,7 @@ public override void Initialize() SetCash(500000); var option = AddOption("GOOG", Resolution.Minute); - option.SetFilter(universe => universe.Strikes(-1, 1).Expiration(0, 62)); + option.SetFilter(universe => universe.StandardsOnly().Strikes(-1, 1).Expiration(0, 62)); _symbol = option.Symbol; } diff --git a/Algorithm.CSharp/SingleOptionPositionGroupBuyingPowerModelRegressionAlgorithm.cs b/Algorithm.CSharp/SingleOptionPositionGroupBuyingPowerModelRegressionAlgorithm.cs index b91c5757f287..9a58bcf25e16 100644 --- a/Algorithm.CSharp/SingleOptionPositionGroupBuyingPowerModelRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SingleOptionPositionGroupBuyingPowerModelRegressionAlgorithm.cs @@ -44,7 +44,7 @@ public override void Initialize() var option = AddOption(equitySymbol); _optionSymbol = option.Symbol; - option.SetFilter(u => u.Strikes(-2, +2).Expiration(0, 180)); + option.SetFilter(u => u.StandardsOnly().Strikes(-2, +2).Expiration(0, 180)); } public override void OnData(Slice slice) @@ -124,8 +124,7 @@ private void PerfomQuantityCalculations(IPositionGroup positionGroup, Security s if (positionQuantityForDeltaWithPositionGroupBuyingPowerModel != expectedQuantity) { - throw new RegressionTestException($@"Expected position quantity for delta buying power to be {expectedQuantity} but was { - positionQuantityForDeltaWithPositionGroupBuyingPowerModel}"); + throw new RegressionTestException($@"Expected position quantity for delta buying power to be {expectedQuantity} but was {positionQuantityForDeltaWithPositionGroupBuyingPowerModel}"); } var position = positionGroup.Positions.Single(); @@ -144,8 +143,7 @@ private void PerfomQuantityCalculations(IPositionGroup positionGroup, Security s if (positionQuantityForDeltaWithSecurityPositionGroupBuyingPowerModel != expectedSingleSecurityModelsQuantity || positionQuantityForDeltaWithSecurityBuyingPowerModel != expectedSingleSecurityModelsQuantity) { - throw new RegressionTestException($@"Expected order quantity for delta buying power calls from default buying power models to return { - expectedSingleSecurityModelsQuantity}. Results were:" + + throw new RegressionTestException($@"Expected order quantity for delta buying power calls from default buying power models to return {expectedSingleSecurityModelsQuantity}. Results were:" + $" \nSecurityPositionGroupBuyingPowerModel: {positionQuantityForDeltaWithSecurityPositionGroupBuyingPowerModel}" + $" \nBuyingPowerModel: {positionQuantityForDeltaWithSecurityBuyingPowerModel}\n"); } diff --git a/Algorithm.CSharp/SwitchDataModeRegressionAlgorithm.cs b/Algorithm.CSharp/SwitchDataModeRegressionAlgorithm.cs index f609455b1441..8028d79d1642 100644 --- a/Algorithm.CSharp/SwitchDataModeRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SwitchDataModeRegressionAlgorithm.cs @@ -54,7 +54,8 @@ public override void OnData(Slice slice) { if (Time.Hour == 9 && Time.Minute == 58) { - AddOption(UnderlyingTicker); + var option = AddOption(UnderlyingTicker); + option.SetFilter(u => u.StandardsOnly().Strikes(-1, 1).Expiration(0, 35)); } AssertValue(slice); diff --git a/Algorithm.Python/BasicTemplateOptionEquityStrategyAlgorithm.py b/Algorithm.Python/BasicTemplateOptionEquityStrategyAlgorithm.py index 3fb20107fa2e..baf9ab4d59b0 100644 --- a/Algorithm.Python/BasicTemplateOptionEquityStrategyAlgorithm.py +++ b/Algorithm.Python/BasicTemplateOptionEquityStrategyAlgorithm.py @@ -33,7 +33,7 @@ def initialize(self) -> None: self._option_symbol = option.symbol # set our strike/expiry filter for this option chain - option.set_filter(lambda u: (u.strikes(-2, +2) + option.set_filter(lambda u: (u.standards_only().strikes(-2, +2) # Expiration method accepts TimeSpan objects or integer for days. # The following statements yield the same filtering criteria .expiration(0, 180))) diff --git a/Algorithm.Python/BasicTemplateOptionStrategyAlgorithm.py b/Algorithm.Python/BasicTemplateOptionStrategyAlgorithm.py index f4414a3f0f9e..f4fefbbb4fc9 100644 --- a/Algorithm.Python/BasicTemplateOptionStrategyAlgorithm.py +++ b/Algorithm.Python/BasicTemplateOptionStrategyAlgorithm.py @@ -39,8 +39,7 @@ def initialize(self): # set our strike/expiry filter for this option chain # SetFilter method accepts timedelta objects or integer for days. # The following statements yield the same filtering criteria - option.set_filter(-2, +2, 0, 180) - # option.set_filter(-2,2, timedelta(0), timedelta(180)) + option.set_filter(lambda u: (u.standards_only().strikes(-2, +2).expiration(0, 180))) # use the underlying equity as the benchmark self.set_benchmark("GOOG") diff --git a/Algorithm.Python/BasicTemplateOptionsAlgorithm.py b/Algorithm.Python/BasicTemplateOptionsAlgorithm.py index 3a319c65038e..93272b8f1f5c 100644 --- a/Algorithm.Python/BasicTemplateOptionsAlgorithm.py +++ b/Algorithm.Python/BasicTemplateOptionsAlgorithm.py @@ -34,7 +34,7 @@ def initialize(self): self.option_symbol = option.symbol # set our strike/expiry filter for this option chain - option.set_filter(lambda u: (u.strikes(-2, +2) + option.set_filter(lambda u: (u.standards_only().strikes(-2, +2) # Expiration method accepts TimeSpan objects or integer for days. # The following statements yield the same filtering criteria .expiration(0, 180))) diff --git a/Algorithm.Python/BasicTemplateOptionsHourlyAlgorithm.py b/Algorithm.Python/BasicTemplateOptionsHourlyAlgorithm.py index 18c9e127ac18..836838c49c69 100644 --- a/Algorithm.Python/BasicTemplateOptionsHourlyAlgorithm.py +++ b/Algorithm.Python/BasicTemplateOptionsHourlyAlgorithm.py @@ -34,7 +34,7 @@ def initialize(self): self.option_symbol = option.symbol # set our strike/expiry filter for this option chain - option.set_filter(lambda u: (u.strikes(-2, +2) + option.set_filter(lambda u: (u.standards_only().strikes(-2, +2) # Expiration method accepts TimeSpan objects or integer for days. # The following statements yield the same filtering criteria .expiration(0, 180))) diff --git a/Algorithm.Python/ComboOrderTicketDemoAlgorithm.py b/Algorithm.Python/ComboOrderTicketDemoAlgorithm.py index 41b6516bca4c..350d6d409719 100644 --- a/Algorithm.Python/ComboOrderTicketDemoAlgorithm.py +++ b/Algorithm.Python/ComboOrderTicketDemoAlgorithm.py @@ -28,7 +28,7 @@ def initialize(self) -> None: option = self.add_option(equity.symbol, fill_forward=True) self._option_symbol = option.symbol - option.set_filter(lambda u: u.strikes(-2, +2).expiration(0, 180)) + option.set_filter(lambda u: u.standards_only().strikes(-2, +2).expiration(0, 180)) self._open_market_orders = [] self._open_leg_limit_orders = [] diff --git a/Algorithm.Python/NullBuyingPowerOptionBullCallSpreadAlgorithm.py b/Algorithm.Python/NullBuyingPowerOptionBullCallSpreadAlgorithm.py index f11f467b7458..65774782a1d8 100644 --- a/Algorithm.Python/NullBuyingPowerOptionBullCallSpreadAlgorithm.py +++ b/Algorithm.Python/NullBuyingPowerOptionBullCallSpreadAlgorithm.py @@ -33,7 +33,7 @@ def initialize(self): option = self.add_option(equity.symbol) self.option_symbol = option.symbol - option.set_filter(-2, 2, 0, 180) + option.set_filter(lambda u: u.standards_only().strikes(-2, +2).expiration(0, 180)) def on_data(self, slice): if self.portfolio.invested or not self.is_market_open(self.option_symbol): diff --git a/Algorithm.Python/NullMarginMultipleOrdersRegressionAlgorithm.py b/Algorithm.Python/NullMarginMultipleOrdersRegressionAlgorithm.py index 6a90364af53d..818b576a14d2 100644 --- a/Algorithm.Python/NullMarginMultipleOrdersRegressionAlgorithm.py +++ b/Algorithm.Python/NullMarginMultipleOrdersRegressionAlgorithm.py @@ -32,7 +32,7 @@ def initialize(self): option = self.add_option(equity.symbol, fill_forward=True) self._option_symbol = option.symbol - option.set_filter(lambda u: u.strikes(-2, +2).expiration(0, 180)) + option.set_filter(lambda u: u.standards_only().strikes(-2, +2).expiration(0, 180)) def on_data(self, data: Slice): if not self.portfolio.invested: diff --git a/Algorithm.Python/OptionChainIncludeWeeklysByDefaultRegressionAlgorithm.py b/Algorithm.Python/OptionChainIncludeWeeklysByDefaultRegressionAlgorithm.py new file mode 100644 index 000000000000..c914d2d62dca --- /dev/null +++ b/Algorithm.Python/OptionChainIncludeWeeklysByDefaultRegressionAlgorithm.py @@ -0,0 +1,46 @@ +# 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. + +from AlgorithmImports import * + +### +### Verifies that weekly option contracts are included when no standard contracts are available. +### +class OptionChainIncludeWeeklysByDefaultRegressionAlgorithm(QCAlgorithm): + + def initialize(self): + self.set_start_date(2015, 12, 24) + self.set_end_date(2015, 12, 24) + + self.option = self.add_option("GOOG") + self.option_symbol = self.option.Symbol + + self.option.set_filter(lambda u: u.strikes(-8, 8).expiration(0, 0)) + + self.weekly_count = 0 + self.total_count = 0 + + def on_data(self, data): + chain = data.option_chains.get(self.option_symbol) + if chain: + self.total_count += len(chain.contracts) + for contract in chain.contracts.values(): + if not OptionSymbol.is_standard(contract.symbol): + self.weekly_count += 1 + + def on_end_of_algorithm(self): + if self.weekly_count == 0: + raise RegressionTestException("No weekly contracts found") + + if self.total_count != self.weekly_count: + raise RegressionTestException("When no standard option expirations are available, the option chain must fall back to weekly contracts only") \ No newline at end of file diff --git a/Algorithm.Python/OptionChainedUniverseSelectionModelRegressionAlgorithm.py b/Algorithm.Python/OptionChainedUniverseSelectionModelRegressionAlgorithm.py index e800f1fa47e6..d42a5a0d7948 100644 --- a/Algorithm.Python/OptionChainedUniverseSelectionModelRegressionAlgorithm.py +++ b/Algorithm.Python/OptionChainedUniverseSelectionModelRegressionAlgorithm.py @@ -28,7 +28,7 @@ def initialize(self): self.add_universe_selection( OptionChainedUniverseSelectionModel( universe, - lambda u: (u.strikes(-2, +2) + lambda u: (u.standards_only().strikes(-2, +2) # Expiration method accepts TimeSpan objects or integer for days. # The following statements yield the same filtering criteria .expiration(0, 180)) diff --git a/Algorithm.Python/OptionPriceModelForSupportedAmericanOptionRegressionAlgorithm.py b/Algorithm.Python/OptionPriceModelForSupportedAmericanOptionRegressionAlgorithm.py index a9b495c4bbaa..a87ff4cbe450 100644 --- a/Algorithm.Python/OptionPriceModelForSupportedAmericanOptionRegressionAlgorithm.py +++ b/Algorithm.Python/OptionPriceModelForSupportedAmericanOptionRegressionAlgorithm.py @@ -24,6 +24,8 @@ def initialize(self): self.set_end_date(2014, 6, 9) option = self.add_option("AAPL", Resolution.MINUTE) + option.set_filter(lambda u: u.standards_only().strikes(-1, 1).expiration(0, 35)) + # BaroneAdesiWhaley model supports American style options option.price_model = OptionPriceModels.barone_adesi_whaley() diff --git a/Algorithm.Python/OptionPriceModelForUnsupportedAmericanOptionRegressionAlgorithm.py b/Algorithm.Python/OptionPriceModelForUnsupportedAmericanOptionRegressionAlgorithm.py index ce78c8e0adb6..072af5b2496b 100644 --- a/Algorithm.Python/OptionPriceModelForUnsupportedAmericanOptionRegressionAlgorithm.py +++ b/Algorithm.Python/OptionPriceModelForUnsupportedAmericanOptionRegressionAlgorithm.py @@ -24,6 +24,8 @@ def initialize(self): self.set_end_date(2014, 6, 9) option = self.add_option("AAPL", Resolution.MINUTE) + option.set_filter(lambda u: u.standards_only().strikes(-1, 1).expiration(0, 35)) + # BlackSholes model does not support American style options option.price_model = OptionPriceModels.black_scholes() diff --git a/Algorithm.Python/OptionStrategyFactoryMethodsBaseAlgorithm.py b/Algorithm.Python/OptionStrategyFactoryMethodsBaseAlgorithm.py index 08bc1ba27175..a2fb5fe8f16f 100644 --- a/Algorithm.Python/OptionStrategyFactoryMethodsBaseAlgorithm.py +++ b/Algorithm.Python/OptionStrategyFactoryMethodsBaseAlgorithm.py @@ -27,7 +27,7 @@ def initialize(self): option = self.add_option("GOOG") self._option_symbol = option.symbol - option.set_filter(-2, +2, 0, 180) + option.set_filter(lambda u: u.standards_only().strikes(-2, +2).expiration(0, 180)) self.set_benchmark("GOOG") diff --git a/Common/Securities/ContractSecurityFilterUniverse.cs b/Common/Securities/ContractSecurityFilterUniverse.cs index 2aed39f428b8..7611150f0d7f 100644 --- a/Common/Securities/ContractSecurityFilterUniverse.cs +++ b/Common/Securities/ContractSecurityFilterUniverse.cs @@ -27,8 +27,8 @@ namespace QuantConnect.Securities /// Used by OptionFilterUniverse and FutureFilterUniverse /// public abstract class ContractSecurityFilterUniverse : IDerivativeSecurityFilterUniverse - where T: ContractSecurityFilterUniverse - where TData: IChainUniverseData + where T : ContractSecurityFilterUniverse + where TData : IChainUniverseData { private bool _alreadyAppliedTypeFilters; @@ -51,11 +51,16 @@ protected enum ContractExpirationType : int Weekly = 2 } + /// + /// The default expiration type filter value + /// + protected static readonly ContractExpirationType DefaultExpirationType = ContractExpirationType.Standard | ContractExpirationType.Weekly; + /// /// Expiration Types allowed through the filter /// Standards only by default /// - protected ContractExpirationType Type { get; set; } = ContractExpirationType.Standard; + protected ContractExpirationType Type { get; set; } = DefaultExpirationType; /// /// The local exchange current time @@ -107,6 +112,7 @@ internal IEnumerable AllSymbols /// protected ContractSecurityFilterUniverse() { + Type = DefaultExpirationType; } /// @@ -116,7 +122,7 @@ protected ContractSecurityFilterUniverse(IEnumerable allData, DateTime lo { Data = allData; LocalTime = localTime; - Type = ContractExpirationType.Standard; + Type = DefaultExpirationType; } /// @@ -139,7 +145,7 @@ internal T ApplyTypesFilter() { if (_alreadyAppliedTypeFilters) { - return (T) this; + return (T)this; } // memoization map for ApplyTypesFilter() @@ -174,7 +180,7 @@ internal T ApplyTypesFilter() }).ToList(); _alreadyAppliedTypeFilters = true; - return (T) this; + return (T)this; } /// @@ -186,7 +192,7 @@ public virtual void Refresh(IEnumerable allData, DateTime localTime) { Data = allData; LocalTime = localTime; - Type = ContractExpirationType.Standard; + Type = DefaultExpirationType; _alreadyAppliedTypeFilters = false; } @@ -211,6 +217,7 @@ public T StandardsOnly() /// Includes universe of non-standard weeklys contracts (if any) into selection /// /// Universe with filter applied + [Obsolete("IncludeWeeklys is obsolete because weekly contracts are now included by default.")] public T IncludeWeeklys() { if (_alreadyAppliedTypeFilters) @@ -241,11 +248,11 @@ public virtual T FrontMonth() { ApplyTypesFilter(); var ordered = Data.OrderBy(x => x.ID.Date).ToList(); - if (ordered.Count == 0) return (T) this; + if (ordered.Count == 0) return (T)this; var frontMonth = ordered.TakeWhile(x => ordered[0].ID.Date == x.ID.Date); Data = frontMonth.ToList(); - return (T) this; + return (T)this; } /// @@ -256,11 +263,11 @@ public virtual T BackMonths() { ApplyTypesFilter(); var ordered = Data.OrderBy(x => x.ID.Date).ToList(); - if (ordered.Count == 0) return (T) this; + if (ordered.Count == 0) return (T)this; var backMonths = ordered.SkipWhile(x => ordered[0].ID.Date == x.ID.Date); Data = backMonths.ToList(); - return (T) this; + return (T)this; } /// @@ -351,7 +358,7 @@ public T Contracts(PyObject contracts) public T Contracts(IEnumerable contracts) { AllSymbols = contracts.ToList(); - return (T) this; + return (T)this; } /// @@ -376,7 +383,7 @@ public T Contracts(Func, IEnumerable> contractSelecto { // force materialization using ToList AllSymbols = contractSelector(Data).ToList(); - return (T) this; + return (T)this; } /// @@ -400,7 +407,7 @@ public T Contracts(Func, IEnumerable> contractSelector [Obsolete("Deprecated as of 2023-12-13. Filters are always non-dynamic as of now, which means they will only bee applied daily.")] public T OnlyApplyFilterAtMarketOpen() { - return (T) this; + return (T)this; } /// diff --git a/Common/Securities/Option/OptionFilterUniverse.cs b/Common/Securities/Option/OptionFilterUniverse.cs index 350a544a5ceb..7f193be0342c 100644 --- a/Common/Securities/Option/OptionFilterUniverse.cs +++ b/Common/Securities/Option/OptionFilterUniverse.cs @@ -58,6 +58,7 @@ public BaseData Underlying /// /// Constructs OptionFilterUniverse + /// By default, the filter includes both standard and weekly contracts. /// /// The canonical option chain security public OptionFilterUniverse(Option.Option option) diff --git a/Tests/Common/Securities/FutureFilterTests.cs b/Tests/Common/Securities/FutureFilterTests.cs index 36489c76dcdc..5ea286e62867 100644 --- a/Tests/Common/Securities/FutureFilterTests.cs +++ b/Tests/Common/Securities/FutureFilterTests.cs @@ -62,12 +62,14 @@ public void FiltersExpiryRange() Assert.AreEqual(symbols[7], filtered[4]); } - [Test] - public void FiltersOutWeeklysByDefault() + [TestCase(false, 6)] + [TestCase(true, 2)] + public void FutureContractFiltering(bool standardsOnly, int expectedCount) { var time = new DateTime(2016, 02, 17, 13, 0, 0); - Func universeFunc = universe => universe; + Func universeFunc = universe => + standardsOnly ? universe.StandardsOnly() : universe; Func, IDerivativeSecurityFilterUniverse> func = universe => universeFunc(universe as FutureFilterUniverse).ApplyTypesFilter(); @@ -75,19 +77,33 @@ public void FiltersOutWeeklysByDefault() var filter = new FuncSecurityDerivativeFilter(func); var symbols = new[] { - Symbol.CreateFuture("VX", Market.CFE, time.AddDays(0)), // 0 Standard!! - Symbol.CreateFuture("VX", Market.CFE, time.AddDays(1)), // 1 - Symbol.CreateFuture("VX", Market.CFE, time.AddDays(2)), // 2 - Symbol.CreateFuture("VX", Market.CFE, time.AddDays(8)), // 8 - Symbol.CreateFuture("VX", Market.CFE, time.AddDays(16)), // 16 - Symbol.CreateFuture("VX", Market.CFE, time.AddDays(28)), // 28 Standard!! + Symbol.CreateFuture("VX", Market.CFE, time.AddDays(0)), // Standard + Symbol.CreateFuture("VX", Market.CFE, time.AddDays(1)), + Symbol.CreateFuture("VX", Market.CFE, time.AddDays(2)), + Symbol.CreateFuture("VX", Market.CFE, time.AddDays(8)), + Symbol.CreateFuture("VX", Market.CFE, time.AddDays(16)), + Symbol.CreateFuture("VX", Market.CFE, time.AddDays(28)), // Standard }; var data = symbols.Select(x => new FutureUniverse() { Symbol = x }); var filtered = filter.Filter(new FutureFilterUniverse(data, time)).Select(x => x.Symbol).ToList(); - Assert.AreEqual(2, filtered.Count); - Assert.AreEqual(symbols[0], filtered[0]); - Assert.AreEqual(symbols[5], filtered[1]); + + Assert.AreEqual(expectedCount, filtered.Count); + + if (standardsOnly) + { + // When StandardsOnly, only Standards should be returned + Assert.AreEqual(symbols[0], filtered[0]); + Assert.AreEqual(symbols[5], filtered[1]); + } + else + { + // By default both Standards and Weeklys are returned + for (int i = 0; i < 6; i++) + { + Assert.AreEqual(symbols[i], filtered[i]); + } + } } [Test] diff --git a/Tests/Common/Securities/OptionFilterTests.cs b/Tests/Common/Securities/OptionFilterTests.cs index c925a027ebb2..a8e2eff009bc 100644 --- a/Tests/Common/Securities/OptionFilterTests.cs +++ b/Tests/Common/Securities/OptionFilterTests.cs @@ -373,7 +373,7 @@ public void FiltersOutWeeklys() var underlying = new Tick { Value = 10m, Time = new DateTime(2016, 12, 29) }; - Func universeFunc = universe => universe; + Func universeFunc = universe => universe.StandardsOnly(); Func, IDerivativeSecurityFilterUniverse> func = universe => universeFunc(universe as OptionFilterUniverse).ApplyTypesFilter(); @@ -418,7 +418,7 @@ public void FiltersOutWeeklysIfFridayHoliday() var underlying = new Tick { Value = 10m, Time = new DateTime(2016, 12, 29) }; - Func universeFunc = universe => universe; + Func universeFunc = universe => universe.StandardsOnly(); Func, IDerivativeSecurityFilterUniverse> func = universe => universeFunc(universe as OptionFilterUniverse).ApplyTypesFilter(); diff --git a/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs b/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs index 1ac29b27d065..94a39684da83 100644 --- a/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs +++ b/Tests/Engine/DataFeeds/LiveTradingDataFeedTests.cs @@ -3819,7 +3819,7 @@ public void HandlesFutureAndOptionChainUniverse(SecurityType securityType, int e { algorithm.AddEquity("GOOG", Resolution.Minute); var option = algorithm.AddOption("GOOG", Resolution.Minute, Market.USA); - option.SetFilter(x => x); + option.SetFilter(x => x.StandardsOnly()); exchangeTimeZone = option.Exchange.TimeZone; canonicalOptionSymbol = option.Symbol; From 773bd5352501554a561e1a1429137bad308bef0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Wed, 31 Dec 2025 09:33:59 -0500 Subject: [PATCH 068/103] Add 2026 CME Future & HKFE Holidays, early closes, late opens and bank holidays (#9174) * Add 2026 HKFE Future holidays & early closes * rebase Add 2026 Future-cme-equity Holidays, Early closes, late opens * Add (again) HKFE 2026 Holidays and early closes * Add Future-cme-interest 2026 holidays * Add 2026 CME Fx 2026 holidays" - Add 2026 CME Fx holidays, early closes, late opens, bank holidays - Exclude CNH, MNH and MIR as they expire rules don't consider US Holidays - Fix wrong early close on 12/24/2025 from 12:15 to 12:45 * Add CME Future crypto 2026 Holidays, EC, LO & BH * Add CME Future Energy 2026 holidays, EC, LO, BH * Add CME Futures metals holidays, ec, lo, bh * Add CME Futures grains 2026 holidays, ec, lo, bh * Add CME Futures Dairy 2026 holidays, ec, lo, bh * Add CME Futures livestock holidays, ec, lo, bh * Add CME Future Lumber holidays, ec, lo, bh * Add CME Futures Softs holidays, ec, lo, bh * Add CME Futures Oilseeds holidays, ec, lo, bh * Add CME Futures AW, GD Holidays, EC, LO and BH * Move repeated bank holidays to generic entries * Nit change * Solve bug Since 11/26/2026 is a bank holiday for CME energy futures, the expiry date is moved to 11/25/2026 as the expiry date for HH is the third last business day of the month prior to the contract month --- Data/market-hours/market-hours-database.json | 11672 ++++++++++++++-- .../FuturesExpiryFunctionsTestData.xml | Bin 1312968 -> 1312968 bytes 2 files changed, 10845 insertions(+), 827 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 158b50072e28..376d41b891b4 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -687,7 +687,11 @@ "4/18/2025" ], "earlyCloses": {}, - "lateOpens": {} + "lateOpens": {}, + "bankHolidays": [ + "10/12/2026", + "11/11/2026" + ] }, "Future-ice-[*]": { "dataTimeZone": "UTC", @@ -1348,7 +1352,11 @@ "4/18/2025" ], "earlyCloses": {}, - "lateOpens": {} + "lateOpens": {}, + "bankHolidays": [ + "10/12/2026", + "11/11/2026" + ] }, "Future-nymex-[*]": { "dataTimeZone": "UTC", @@ -1699,7 +1707,11 @@ "4/18/2025" ], "earlyCloses": {}, - "lateOpens": {} + "lateOpens": {}, + "bankHolidays": [ + "10/12/2026", + "11/11/2026" + ] }, "Future-comex-[*]": { "dataTimeZone": "UTC", @@ -2051,7 +2063,11 @@ "4/18/2025" ], "earlyCloses": {}, - "lateOpens": {} + "lateOpens": {}, + "bankHolidays": [ + "10/12/2026", + "11/11/2026" + ] }, "Future-cfe-[*]": { "dataTimeZone": "UTC", @@ -2569,7 +2585,13 @@ "7/4/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -2673,7 +2695,18 @@ "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", "12/24/2025": "12:05:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:05:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -2750,7 +2783,13 @@ "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", "6/19/2025": "19:00:00", - "9/1/2025": "19:00:00" + "9/1/2025": "19:00:00", + "1/2/2026": "08:30:00", + "1/19/2026": "19:00:00", + "2/16/2026": "19:00:00", + "5/25/2026": "19:00:00", + "9/7/2026": "19:00:00", + "11/27/2026": "08:30:00" }, "bankHolidays": [ "1/19/2009", @@ -2867,7 +2906,11 @@ "6/19/2025", "9/1/2025", "10/13/2025", - "11/11/2025" + "11/11/2025", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-cbot-KE": { @@ -3072,7 +3115,13 @@ "7/4/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -3176,7 +3225,18 @@ "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", "12/24/2025": "12:05:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:05:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -3253,7 +3313,13 @@ "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", "6/19/2025": "19:00:00", - "9/1/2025": "19:00:00" + "9/1/2025": "19:00:00", + "1/2/2026": "08:30:00", + "1/19/2026": "19:00:00", + "2/16/2026": "19:00:00", + "5/25/2026": "19:00:00", + "9/7/2026": "19:00:00", + "11/27/2026": "08:30:00" }, "bankHolidays": [ "1/19/2009", @@ -3370,7 +3436,11 @@ "6/19/2025", "9/1/2025", "10/13/2025", - "11/11/2025" + "11/11/2025", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-cme-LBS": { @@ -3701,7 +3771,13 @@ "7/4/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -3805,7 +3881,18 @@ "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", "12/24/2025": "12:05:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:05:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -3882,7 +3969,13 @@ "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", "6/19/2025": "19:00:00", - "9/1/2025": "19:00:00" + "9/1/2025": "19:00:00", + "1/2/2026": "08:30:00", + "1/19/2026": "19:00:00", + "2/16/2026": "19:00:00", + "5/25/2026": "19:00:00", + "9/7/2026": "19:00:00", + "11/27/2026": "08:30:00" }, "bankHolidays": [ "1/19/2009", @@ -3999,7 +4092,11 @@ "6/19/2025", "9/1/2025", "10/13/2025", - "11/11/2025" + "11/11/2025", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-cbot-ZS": { @@ -4096,11 +4193,42 @@ "holidays": [ "4/7/2023", "1/9/2025", - "1/1/2026" + "1/1/2026", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], - "earlyCloses": { - "12/31/2025": "16:00:00" - } + "earlyCloses": { + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:05:00", + "12/31/2026": "16:00:00" + }, + "lateOpens": { + "1/2/2026": "08:30:00", + "1/19/2026": "19:00:00", + "2/16/2026": "19:00:00", + "5/25/2026": "19:00:00", + "9/7/2026": "19:00:00", + "11/27/2026": "08:30:00" + }, + "bankHolidays": [ + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" + ] }, "Future-cbot-ZM": { "dataTimeZone": "UTC", @@ -4194,8 +4322,43 @@ ], "saturday": [], "holidays": [ + "4/7/2023", "1/9/2025", - "4/7/2023" + "1/1/2026", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" + ], + "earlyCloses": { + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:05:00", + "12/31/2026": "16:00:00" + }, + "lateOpens": { + "1/2/2026": "08:30:00", + "1/19/2026": "19:00:00", + "2/16/2026": "19:00:00", + "5/25/2026": "19:00:00", + "9/7/2026": "19:00:00", + "11/27/2026": "08:30:00" + }, + "bankHolidays": [ + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-cbot-ZL": { @@ -4292,11 +4455,42 @@ "holidays": [ "4/7/2023", "1/9/2025", - "1/1/2026" + "1/1/2026", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], - "earlyCloses": { - "12/31/2025": "16:00:00" - } + "earlyCloses": { + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:05:00", + "12/31/2026": "16:00:00" + }, + "lateOpens": { + "1/2/2026": "08:30:00", + "1/19/2026": "19:00:00", + "2/16/2026": "19:00:00", + "5/25/2026": "19:00:00", + "9/7/2026": "19:00:00", + "11/27/2026": "08:30:00" + }, + "bankHolidays": [ + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" + ] }, "Future-cbot-ZO": { "dataTimeZone": "UTC", @@ -4414,7 +4608,13 @@ "7/4/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -4518,7 +4718,18 @@ "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", "12/24/2025": "12:05:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:05:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -4595,7 +4806,13 @@ "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", "6/19/2025": "19:00:00", - "9/1/2025": "19:00:00" + "9/1/2025": "19:00:00", + "1/2/2026": "08:30:00", + "1/19/2026": "19:00:00", + "2/16/2026": "19:00:00", + "5/25/2026": "19:00:00", + "9/7/2026": "19:00:00", + "11/27/2026": "08:30:00" }, "bankHolidays": [ "1/19/2009", @@ -4712,7 +4929,11 @@ "6/19/2025", "9/1/2025", "10/13/2025", - "11/11/2025" + "11/11/2025", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-ice-DX": { @@ -5024,7 +5245,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -5201,8 +5425,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -5311,7 +5546,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -5473,7 +5713,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6C": { @@ -5568,7 +5815,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -5745,8 +5995,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -5855,7 +6116,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -6017,7 +6283,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6J": { @@ -6112,7 +6385,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -6289,8 +6565,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -6399,7 +6686,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -6561,7 +6853,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6S": { @@ -6656,7 +6955,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -6833,8 +7135,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -6943,7 +7256,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -7105,7 +7423,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6E": { @@ -7200,7 +7525,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -7377,8 +7705,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -7487,7 +7826,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -7649,7 +7993,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6A": { @@ -7744,7 +8095,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -7921,8 +8275,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -8031,7 +8396,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -8193,7 +8563,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6N": { @@ -8288,7 +8665,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -8465,8 +8845,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -8575,7 +8966,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -8737,7 +9133,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-1S": { @@ -8834,7 +9237,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -8984,7 +9390,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -9094,7 +9511,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -9262,7 +9684,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-22": { @@ -9359,7 +9788,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -9509,7 +9941,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -9619,7 +10062,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -9787,7 +10235,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6L": { @@ -9882,7 +10337,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -10059,8 +10517,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -10169,7 +10638,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -10331,7 +10805,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6M": { @@ -10426,7 +10907,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -10603,8 +11087,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -10713,7 +11208,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -10875,7 +11375,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6R": { @@ -10970,7 +11477,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -11147,8 +11657,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -11257,7 +11778,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -11419,7 +11945,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-6Z": { @@ -11514,7 +12047,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -11691,8 +12227,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -11801,7 +12348,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -11963,7 +12515,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A0D": { @@ -12060,7 +12619,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -12210,7 +12772,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -12320,7 +12893,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -12488,7 +13066,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A0F": { @@ -12585,7 +13170,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -12735,7 +13323,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -12845,7 +13444,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -13013,7 +13617,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A1L": { @@ -13110,7 +13721,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -13260,7 +13874,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -13370,7 +13995,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -13538,7 +14168,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A1M": { @@ -13635,7 +14272,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -13785,7 +14425,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -13895,7 +14546,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -14063,7 +14719,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A1R": { @@ -14160,7 +14823,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -14310,7 +14976,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -14420,7 +15097,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -14588,7 +15270,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A32": { @@ -14685,7 +15374,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -14835,7 +15527,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -14945,7 +15648,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -15113,7 +15821,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A3G": { @@ -15210,7 +15925,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -15360,7 +16078,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -15470,7 +16199,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -15638,7 +16372,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A7E": { @@ -15735,7 +16476,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -15885,7 +16629,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -15995,7 +16750,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -16163,7 +16923,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A7I": { @@ -16260,7 +17027,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -16410,7 +17180,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -16520,7 +17301,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -16688,7 +17474,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A7Q": { @@ -16785,7 +17578,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -16935,7 +17731,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -17045,7 +17852,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -17213,7 +18025,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A8J": { @@ -17310,7 +18129,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -17460,7 +18282,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -17570,7 +18403,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -17738,7 +18576,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A8K": { @@ -17835,7 +18680,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -17985,7 +18833,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -18095,7 +18954,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -18263,7 +19127,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A8O": { @@ -18360,7 +19231,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -18510,7 +19384,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -18620,7 +19505,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -18788,7 +19678,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A91": { @@ -18885,7 +19782,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -19035,7 +19935,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -19145,7 +20056,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -19313,7 +20229,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-A9N": { @@ -19410,7 +20333,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -19560,7 +20486,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -19670,7 +20607,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -19838,7 +20780,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AA6": { @@ -19935,7 +20884,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -20085,7 +21037,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -20195,7 +21158,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -20363,7 +21331,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AA8": { @@ -20460,7 +21435,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -20610,7 +21588,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -20720,7 +21709,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -20888,7 +21882,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-ABS": { @@ -20985,7 +21986,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -21135,7 +22139,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -21245,7 +22260,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -21413,7 +22433,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-ABT": { @@ -21510,7 +22537,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -21660,7 +22690,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -21770,7 +22811,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -21938,7 +22984,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AC0": { @@ -22035,7 +23088,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -22185,7 +23241,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -22295,7 +23362,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -22463,7 +23535,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-ACD": { @@ -22558,7 +23637,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -22735,8 +23817,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -22845,7 +23938,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -23007,7 +24105,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AD0": { @@ -23104,7 +24209,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -23254,7 +24362,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -23364,7 +24483,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -23532,7 +24656,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-ADB": { @@ -23629,7 +24760,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -23779,7 +24913,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -23889,7 +25034,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -24057,7 +25207,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AE5": { @@ -24154,7 +25311,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -24304,7 +25464,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -24414,7 +25585,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -24582,7 +25758,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AGA": { @@ -24679,7 +25862,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -24829,7 +26015,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -24939,7 +26136,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -25107,7 +26309,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AJL": { @@ -25204,7 +26413,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -25354,7 +26566,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -25464,7 +26687,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -25632,7 +26860,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AJS": { @@ -25729,7 +26964,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -25879,7 +27117,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -25989,7 +27238,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -26157,7 +27411,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-AJY": { @@ -26252,7 +27513,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -26429,8 +27693,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -26539,7 +27814,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -26701,7 +27981,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AKL": { @@ -26798,7 +28085,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -26948,7 +28238,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -27058,7 +28359,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -27226,7 +28532,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AKZ": { @@ -27323,7 +28636,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -27473,7 +28789,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -27583,7 +28910,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -27751,7 +29083,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-ANE": { @@ -27846,7 +29185,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -28023,8 +29365,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -28133,7 +29486,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -28295,7 +29653,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-APS": { @@ -28392,7 +29757,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -28542,7 +29910,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -28652,7 +30031,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -28820,7 +30204,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AR0": { @@ -28917,7 +30308,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -29067,7 +30461,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -29177,7 +30582,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -29345,7 +30755,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-ARE": { @@ -29442,7 +30859,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -29592,7 +31012,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -29702,7 +31133,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -29870,7 +31306,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-comex-AUP": { @@ -29967,7 +31410,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -30116,7 +31562,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -30226,7 +31683,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -30394,7 +31856,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-nymex-AVZ": { @@ -30491,7 +31959,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -30641,7 +32112,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -30751,7 +32233,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -30919,7 +32406,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-AW": { @@ -30965,7 +32459,17 @@ "holidays": [ "4/7/2023", "1/9/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/27/2009": "12:00:00", @@ -30991,7 +32495,9 @@ "12/24/2018": "12:00:00", "7/3/2019": "12:00:00", "11/29/2019": "12:00:00", - "12/24/2019": "12:00:00" + "12/24/2019": "12:00:00", + "11/27/2026": "12:00:00", + "12/24/2026": "12:00:00" } }, "Future-nymex-AYV": { @@ -31088,7 +32594,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -31238,7 +32747,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -31348,7 +32868,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -31516,7 +33041,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AYX": { @@ -31613,7 +33145,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -31763,7 +33298,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -31873,7 +33419,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -32041,7 +33592,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-AZ1": { @@ -32138,7 +33696,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -32288,7 +33849,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -32398,7 +33970,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -32566,7 +34143,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-B0": { @@ -32663,7 +34247,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -32813,7 +34400,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -32923,7 +34521,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -33091,7 +34694,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-B7H": { @@ -33188,7 +34798,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -33338,7 +34951,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -33448,7 +35072,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -33616,7 +35245,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-BCF": { @@ -33735,7 +35371,13 @@ "7/4/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -33839,7 +35481,18 @@ "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", "12/24/2025": "12:05:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:05:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -33916,7 +35569,13 @@ "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", "6/19/2025": "19:00:00", - "9/1/2025": "19:00:00" + "9/1/2025": "19:00:00", + "1/2/2026": "08:30:00", + "1/19/2026": "19:00:00", + "2/16/2026": "19:00:00", + "5/25/2026": "19:00:00", + "9/7/2026": "19:00:00", + "11/27/2026": "08:30:00" }, "bankHolidays": [ "1/19/2009", @@ -34033,7 +35692,11 @@ "6/19/2025", "9/1/2025", "10/13/2025", - "11/11/2025" + "11/11/2025", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-cme-BIO": { @@ -34128,7 +35791,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -34278,7 +35943,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "08:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -34388,7 +36064,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -34550,7 +36231,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-BK": { @@ -34647,7 +36335,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -34797,7 +36488,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -34907,7 +36609,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -35075,7 +36782,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-BOO": { @@ -35172,7 +36886,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -35322,7 +37039,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -35432,7 +37160,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -35600,7 +37333,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-BR7": { @@ -35697,7 +37437,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -35847,7 +37590,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -35957,7 +37711,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -36125,7 +37884,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-BTC": { @@ -36220,7 +37986,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/15/2018": "12:00:00", @@ -36293,7 +38061,18 @@ "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", "12/24/2025": "12:45:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/15/2018": "17:00:00", @@ -36350,7 +38129,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "12/25/2017", @@ -36434,7 +38218,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-BWF": { @@ -36553,7 +38344,13 @@ "7/4/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2011": "12:00:00", @@ -36657,7 +38454,18 @@ "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", "12/24/2025": "12:05:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:05:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "12/27/2011": "09:30:00", @@ -36734,7 +38542,13 @@ "2/17/2025": "19:00:00", "5/26/2025": "19:00:00", "6/19/2025": "19:00:00", - "9/1/2025": "19:00:00" + "9/1/2025": "19:00:00", + "1/2/2026": "08:30:00", + "1/19/2026": "19:00:00", + "2/16/2026": "19:00:00", + "5/25/2026": "19:00:00", + "9/7/2026": "19:00:00", + "11/27/2026": "08:30:00" }, "bankHolidays": [ "1/19/2009", @@ -36851,7 +38665,11 @@ "6/19/2025", "9/1/2025", "10/13/2025", - "11/11/2025" + "11/11/2025", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-nymex-BZ": { @@ -36948,7 +38766,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -37098,7 +38919,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -37208,7 +39040,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -37376,7 +39213,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-CB": { @@ -37493,7 +39337,14 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "11/28/2025" + "11/28/2025", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "11/27/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2009": "16:00:00", @@ -37592,7 +39443,18 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "12/24/2025": "12:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/2/2026": "13:55:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "13:55:00", + "5/24/2026": "16:00:00", + "6/18/2026": "13:55:00", + "7/2/2026": "13:55:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "12/24/2026": "12:00:00", + "12/31/2026": "13:55:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -37680,7 +39542,11 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -37819,7 +39685,11 @@ "10/13/2025", "11/11/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-cme-CJY": { @@ -37914,7 +39784,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -38091,8 +39964,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -38201,7 +40085,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -38363,7 +40252,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-CL": { @@ -38460,7 +40356,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -38610,7 +40509,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -38720,7 +40630,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -38888,7 +40803,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-CNH": { @@ -38983,7 +40905,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -39160,8 +41085,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -39270,7 +41206,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [] }, @@ -39368,7 +41309,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -39518,7 +41462,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -39628,7 +41583,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -39796,7 +41756,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-CSC": { @@ -39913,7 +41880,14 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "11/28/2025" + "11/28/2025", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "11/27/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2009": "16:00:00", @@ -40012,7 +41986,18 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "12/24/2025": "12:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/2/2026": "13:55:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "13:55:00", + "5/24/2026": "16:00:00", + "6/18/2026": "13:55:00", + "7/2/2026": "13:55:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "12/24/2026": "12:00:00", + "12/31/2026": "13:55:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -40100,7 +42085,11 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -40239,7 +42228,11 @@ "10/13/2025", "11/11/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-nymex-CSW": { @@ -40528,7 +42521,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -40678,7 +42674,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -40788,7 +42795,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -40956,7 +42968,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-CU": { @@ -41053,7 +43072,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -41203,7 +43225,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -41313,7 +43346,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -41481,7 +43519,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-D1N": { @@ -41578,7 +43623,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -41728,7 +43776,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -41838,7 +43897,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -42006,7 +44070,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-DC": { @@ -42123,7 +44194,14 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "11/28/2025" + "11/28/2025", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "11/27/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2009": "16:00:00", @@ -42222,7 +44300,18 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "12/24/2025": "12:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/2/2026": "13:55:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "13:55:00", + "5/24/2026": "16:00:00", + "6/18/2026": "13:55:00", + "7/2/2026": "13:55:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "12/24/2026": "12:00:00", + "12/31/2026": "13:55:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -42310,7 +44399,11 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -42449,7 +44542,11 @@ "10/13/2025", "11/11/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-nymex-DCB": { @@ -42546,7 +44643,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -42696,7 +44796,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -42806,7 +44917,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -42974,7 +45090,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-DY": { @@ -43091,7 +45214,14 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "11/28/2025" + "11/28/2025", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "11/27/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2009": "16:00:00", @@ -43190,7 +45320,18 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "12/24/2025": "12:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/2/2026": "13:55:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "13:55:00", + "5/24/2026": "16:00:00", + "6/18/2026": "13:55:00", + "7/2/2026": "13:55:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "12/24/2026": "12:00:00", + "12/31/2026": "13:55:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -43278,7 +45419,11 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -43417,7 +45562,11 @@ "10/13/2025", "11/11/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-nymex-E6": { @@ -43514,7 +45663,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -43664,7 +45816,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -43774,7 +45937,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -43942,7 +46110,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-E7": { @@ -44037,7 +46212,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -44214,8 +46392,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -44324,7 +46513,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -44486,7 +46680,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-EAD": { @@ -44581,7 +46782,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -44758,8 +46962,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -44868,7 +47083,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -45030,7 +47250,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-ECD": { @@ -45125,7 +47352,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -45302,8 +47532,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -45412,7 +47653,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -45574,7 +47820,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-comex-EDP": { @@ -45671,8 +47924,11 @@ "holidays": [ "4/3/2015", "4/2/2021", + "1/9/2025", "4/18/2025", - "1/9/2025" + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -45821,7 +48077,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -45931,7 +48198,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -46099,7 +48371,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-cbot-EH": { @@ -46711,7 +48989,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -46861,7 +49141,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "08:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -46971,7 +49262,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -47133,7 +49429,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-EMD": { @@ -47228,7 +49531,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -47378,7 +49683,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "08:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -47488,7 +49804,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -47650,7 +49971,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-EN": { @@ -47747,7 +50075,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -47897,7 +50228,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -48007,7 +50349,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -48175,7 +50522,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-EPN": { @@ -48272,7 +50626,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -48422,7 +50779,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -48532,7 +50900,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -48700,7 +51073,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-ESK": { @@ -48795,7 +51175,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -48972,8 +51355,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -49082,7 +51476,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -49244,7 +51643,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-ETH": { @@ -49339,7 +51745,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "2/15/2021": "12:00:00", @@ -49386,7 +51794,18 @@ "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", "12/24/2025": "12:45:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/15/2018": "17:00:00", @@ -49444,7 +51863,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "12/25/2017", @@ -49528,7 +51952,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-EVC": { @@ -49625,7 +52056,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -49775,7 +52209,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -49885,7 +52330,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -50053,7 +52503,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-EWG": { @@ -50150,7 +52607,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -50300,7 +52760,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -50410,7 +52881,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -50578,7 +53054,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-EWN": { @@ -50675,7 +53158,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -50825,7 +53311,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -50935,7 +53432,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -51103,7 +53605,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-EXR": { @@ -51200,7 +53709,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -51350,7 +53862,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -51460,7 +53983,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -51628,7 +54156,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-F1U": { @@ -51818,7 +54353,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "lateOpens": { "1/19/2009": "17:00:00", @@ -51928,7 +54465,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -52107,7 +54649,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -52269,7 +54822,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-TN": { @@ -52365,7 +54925,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "lateOpens": { "1/19/2009": "17:00:00", @@ -52475,7 +55037,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -52654,7 +55221,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -52816,7 +55394,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-FO": { @@ -52913,7 +55498,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -53063,7 +55651,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -53173,7 +55772,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -53341,7 +55945,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-FRC": { @@ -53438,7 +56049,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -53588,7 +56202,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -53698,7 +56323,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -53866,7 +56496,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-FSS": { @@ -53963,7 +56600,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -54113,7 +56753,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -54223,7 +56874,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -54391,7 +57047,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-GCU": { @@ -54488,7 +57151,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -54638,7 +57304,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -54748,7 +57425,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -54916,7 +57598,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-GD": { @@ -55011,7 +57700,12 @@ ], "saturday": [], "holidays": [ - "4/7/2023" + "4/7/2023", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -55131,11 +57825,35 @@ "9/5/2022": "12:00:00", "11/24/2022": "12:00:00", "11/25/2022": "12:15:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/18/2026": "16:00:00", + "7/2/2026": "16:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" + }, + "lateOpens": { + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, - "lateOpens": { - "1/1/2026": "17:00:00" - } + "bankHolidays": [ + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026", + "11/26/2026" + ] }, "Future-cme-GDK": { "dataTimeZone": "UTC", @@ -55251,7 +57969,14 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "11/28/2025" + "11/28/2025", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "11/27/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2009": "16:00:00", @@ -55350,7 +58075,18 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "12/24/2025": "12:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/2/2026": "13:55:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "13:55:00", + "5/24/2026": "16:00:00", + "6/18/2026": "13:55:00", + "7/2/2026": "13:55:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "12/24/2026": "12:00:00", + "12/31/2026": "13:55:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -55438,7 +58174,11 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -55577,7 +58317,11 @@ "10/13/2025", "11/11/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-cme-GNF": { @@ -55669,7 +58413,14 @@ "4/18/2025", "7/4/2025", "11/27/2025", - "11/28/2025" + "11/28/2025", + "4/3/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026", + "11/27/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "11/25/2009": "16:00:00", @@ -55768,7 +58519,18 @@ "8/31/2025": "16:00:00", "11/26/2025": "16:00:00", "12/24/2025": "12:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/2/2026": "13:55:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "13:55:00", + "5/24/2026": "16:00:00", + "6/18/2026": "13:55:00", + "7/2/2026": "13:55:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "12/24/2026": "12:00:00", + "12/31/2026": "13:55:00" }, "lateOpens": { "12/27/2011": "09:05:00", @@ -55856,7 +58618,11 @@ "6/19/2025": "17:00:00", "9/1/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -55995,7 +58761,11 @@ "10/13/2025", "11/11/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "9/7/2026" ] }, "Future-nymex-HCL": { @@ -56283,7 +59053,10 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -56403,7 +59176,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -56423,7 +59207,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -56591,7 +59380,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-nymex-HH": { @@ -56688,7 +59483,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -56838,7 +59636,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -56948,7 +59757,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -57116,7 +59930,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-HO": { @@ -57213,7 +60034,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -57363,7 +60187,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -57473,7 +60308,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -57641,7 +60481,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-HP": { @@ -57738,7 +60585,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -57888,7 +60738,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -57998,7 +60859,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -58166,7 +61032,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-HRC": { @@ -58455,7 +61328,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -58605,7 +61481,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -58715,7 +61602,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -58883,7 +61775,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-IBV": { @@ -58978,7 +61877,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -59128,7 +62029,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "08:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -59238,7 +62150,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -59400,7 +62317,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-FTU": { @@ -59495,7 +62419,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -59644,7 +62570,19 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "08:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -59753,7 +62691,13 @@ "7/3/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -59915,7 +62859,16 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "10/12/2026", + "11/11/2026", + "11/26/2026" ] }, "Future-cme-FT1": { @@ -60010,7 +62963,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -60159,7 +63114,19 @@ "11/27/2025": "12:00:00", "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", - "12/25/2025": "16:00:00" + "12/25/2025": "16:00:00", + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "08:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -60268,7 +63235,13 @@ "7/3/2025": "17:00:00", "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2025": "17:00:00", + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -60430,7 +63403,16 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "10/12/2026", + "11/11/2026", + "11/26/2026" ] }, "Future-cme-FT5": { @@ -60525,7 +63507,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -60675,7 +63659,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "08:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -60785,7 +63780,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -60947,7 +63947,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-J7": { @@ -61042,7 +64049,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -61219,8 +64229,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -61329,7 +64350,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -61491,7 +64517,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-RB": { @@ -61588,7 +64621,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -61738,7 +64774,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -61848,7 +64895,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -62016,7 +65068,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-NG": { @@ -62113,7 +65172,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -62263,7 +65325,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -62373,7 +65446,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -62541,7 +65619,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-ZB": { @@ -62637,7 +65722,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -62816,7 +65903,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -62926,7 +66024,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -63088,7 +66191,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-ZN": { @@ -63184,7 +66294,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -63363,7 +66475,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -63473,7 +66596,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -63635,7 +66763,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-ZF": { @@ -63731,7 +66866,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -63910,7 +67047,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -64020,7 +67168,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -64182,7 +67335,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-ZT": { @@ -64278,7 +67438,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -64457,7 +67619,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -64567,7 +67740,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -64729,7 +67907,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-GE": { @@ -65075,7 +68260,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -65225,7 +68412,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -65335,7 +68533,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -65497,7 +68700,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-ESG": { @@ -65592,7 +68802,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -65742,7 +68954,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -65852,7 +69075,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -66014,7 +69242,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-RS1": { @@ -66109,7 +69344,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -66259,7 +69496,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -66369,7 +69617,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -66531,7 +69784,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-SDA": { @@ -66626,7 +69886,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -66776,7 +70038,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -66886,7 +70159,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -67048,7 +70326,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-NQ": { @@ -67143,7 +70428,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -67293,7 +70580,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -67403,7 +70701,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -67565,7 +70868,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-RTY": { @@ -67660,7 +70970,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -67810,7 +71122,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -67920,7 +71243,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -68082,7 +71410,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-YM": { @@ -68178,7 +71513,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -68328,7 +71665,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -68439,7 +71787,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -68601,7 +71954,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cfe-VX": { @@ -68814,7 +72174,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -68964,7 +72326,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -69074,7 +72447,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -69236,7 +72614,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-ENY": { @@ -69331,7 +72716,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -69481,7 +72868,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -69591,7 +72989,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -69753,7 +73156,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-NIY": { @@ -69848,7 +73258,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -69998,7 +73410,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -70108,7 +73531,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -70270,7 +73698,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-NKD": { @@ -70365,7 +73800,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -70515,7 +73952,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -70625,7 +74073,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -70787,7 +74240,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-LE": { @@ -70899,7 +74359,17 @@ "9/1/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "lateOpens": { "11/24/2011": "17:00:00", @@ -71017,7 +74487,9 @@ "3/28/2024": "16:00:00", "11/27/2024": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:15:00" }, "bankHolidays": [ "1/19/2009", @@ -71181,7 +74653,17 @@ "9/1/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "lateOpens": { "11/24/2011": "17:00:00", @@ -71299,7 +74781,9 @@ "3/28/2024": "16:00:00", "11/27/2024": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:15:00" }, "bankHolidays": [ "1/19/2009", @@ -71463,7 +74947,17 @@ "9/1/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "lateOpens": { "11/24/2011": "17:00:00", @@ -71581,7 +75075,9 @@ "3/28/2024": "16:00:00", "11/27/2024": "16:00:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:15:00" + "12/24/2025": "12:15:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:15:00" }, "bankHolidays": [ "1/19/2009", @@ -71727,7 +75223,10 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/15/2024": "14:30:00", @@ -71750,7 +75249,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -71770,7 +75280,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -71938,7 +75453,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-comex-SI": { @@ -72034,7 +75555,10 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/15/2024": "14:30:00", @@ -72057,7 +75581,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -72077,7 +75612,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -72245,7 +75785,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-cme-TPY": { @@ -72340,7 +75886,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -72490,7 +76038,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -72600,7 +76159,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -72762,7 +76326,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-TPD": { @@ -72857,7 +76428,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -73007,7 +76580,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -73117,7 +76701,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -73279,7 +76868,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-RX": { @@ -73686,7 +77282,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/15/2024": "14:30:00", @@ -73709,7 +77308,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -73729,7 +77339,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -73897,7 +77512,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-nymex-PA": { @@ -73992,7 +77613,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/15/2024": "14:30:00", @@ -74015,7 +77639,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -74035,7 +77670,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -74203,7 +77843,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-ice-CT": { @@ -74735,7 +78381,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "12/31/2010": "12:15:00", @@ -74793,7 +78442,18 @@ "11/26/2025": "16:00:00", "11/28/2025": "12:05:00", "12/24/2025": "12:05:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/18/2026": "16:00:00", + "2/15/2026": "16:00:00", + "4/2/2026": "16:00:00", + "5/24/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/6/2026": "16:00:00", + "11/25/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "11/24/2011": "17:00:00", @@ -74876,7 +78536,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -75044,7 +78709,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-LBR": { @@ -75153,7 +78825,17 @@ "9/1/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "12/31/2010": "12:15:00", @@ -75201,7 +78883,9 @@ "3/28/2024": "15:05:00", "11/27/2024": "15:05:00", "11/28/2025": "12:05:00", - "12/24/2025": "12:05:00" + "12/24/2025": "12:05:00", + "11/27/2026": "12:05:00", + "12/24/2026": "12:15:00" }, "lateOpens": { "11/24/2011": "17:00:00", @@ -75835,9 +79519,7 @@ "12/26/2022", "12/31/2022", "1/1/2025", - "4/18/2025", - "12/25/2025", - "1/1/2026" + "4/18/2025" ], "earlyCloses": { "2/15/2018": "12:00:00", @@ -75852,9 +79534,7 @@ "2/11/2021": "12:00:00", "12/24/2021": "12:00:00", "12/31/2021": "12:00:00", - "1/31/2022": "12:00:00", - "12/24/2025": "12:00:00", - "1/31/2025": "12:00:00" + "1/31/2022": "12:00:00" }, "lateOpens": {} }, @@ -75949,8 +79629,92 @@ "state": "market" } ], - "holidays": [], - "earlyCloses": {}, + "holidays": [ + "1/1/2016", + "2/8/2016", + "2/9/2016", + "3/25/2016", + "5/1/2016", + "5/21/2016", + "7/6/2016", + "8/9/2016", + "9/12/2016", + "10/29/2016", + "12/25/2016", + "1/1/2017", + "1/28/2017", + "1/29/2017", + "4/14/2017", + "5/1/2017", + "5/10/2017", + "6/25/2017", + "8/9/2017", + "9/1/2017", + "10/18/2017", + "12/25/2017", + "1/1/2018", + "2/16/2018", + "2/17/2018", + "3/30/2018", + "5/1/2018", + "5/29/2018", + "6/15/2018", + "8/9/2018", + "8/22/2018", + "11/6/2018", + "12/25/2018", + "1/1/2019", + "2/5/2019", + "2/6/2019", + "4/19/2019", + "5/1/2019", + "5/20/2019", + "6/5/2019", + "8/9/2019", + "8/12/2019", + "10/28/2019", + "12/25/2019", + "1/1/2020", + "1/27/2020", + "4/10/2020", + "5/1/2020", + "5/7/2020", + "5/25/2020", + "7/31/2020", + "8/10/2020", + "11/14/2020", + "12/25/2020", + "1/1/2021", + "2/12/2021", + "4/2/2021", + "5/1/2021", + "8/9/2021", + "12/25/2021", + "1/3/2022", + "1/31/2022", + "2/1/2022", + "2/2/2022", + "4/15/2022", + "5/2/2022", + "8/9/2022", + "12/26/2022", + "12/31/2022" + ], + "earlyCloses": { + "2/15/2018": "12:00:00", + "12/24/2018": "12:00:00", + "12/31/2018": "12:00:00", + "4/02/2019": "12:00:00", + "12/24/2019": "12:00:00", + "12/31/2019": "12:00:00", + "1/24/2020": "12:00:00", + "12/24/2020": "12:00:00", + "12/31/2020": "12:00:00", + "2/11/2021": "12:00:00", + "12/24/2021": "12:00:00", + "12/31/2021": "12:00:00", + "1/31/2022": "12:00:00" + }, "lateOpens": {} }, "Future-sgx-TW": { @@ -76044,8 +79808,92 @@ "state": "market" } ], - "holidays": [], - "earlyCloses": {}, + "holidays": [ + "1/1/2016", + "2/8/2016", + "2/9/2016", + "3/25/2016", + "5/1/2016", + "5/21/2016", + "7/6/2016", + "8/9/2016", + "9/12/2016", + "10/29/2016", + "12/25/2016", + "1/1/2017", + "1/28/2017", + "1/29/2017", + "4/14/2017", + "5/1/2017", + "5/10/2017", + "6/25/2017", + "8/9/2017", + "9/1/2017", + "10/18/2017", + "12/25/2017", + "1/1/2018", + "2/16/2018", + "2/17/2018", + "3/30/2018", + "5/1/2018", + "5/29/2018", + "6/15/2018", + "8/9/2018", + "8/22/2018", + "11/6/2018", + "12/25/2018", + "1/1/2019", + "2/5/2019", + "2/6/2019", + "4/19/2019", + "5/1/2019", + "5/20/2019", + "6/5/2019", + "8/9/2019", + "8/12/2019", + "10/28/2019", + "12/25/2019", + "1/1/2020", + "1/27/2020", + "4/10/2020", + "5/1/2020", + "5/7/2020", + "5/25/2020", + "7/31/2020", + "8/10/2020", + "11/14/2020", + "12/25/2020", + "1/1/2021", + "2/12/2021", + "4/2/2021", + "5/1/2021", + "8/9/2021", + "12/25/2021", + "1/3/2022", + "1/31/2022", + "2/1/2022", + "2/2/2022", + "4/15/2022", + "5/2/2022", + "8/9/2022", + "12/26/2022", + "12/31/2022" + ], + "earlyCloses": { + "2/15/2018": "12:00:00", + "12/24/2018": "12:00:00", + "12/31/2018": "12:00:00", + "4/02/2019": "12:00:00", + "12/24/2019": "12:00:00", + "12/31/2019": "12:00:00", + "1/24/2020": "12:00:00", + "12/24/2020": "12:00:00", + "12/31/2020": "12:00:00", + "2/11/2021": "12:00:00", + "12/24/2021": "12:00:00", + "12/31/2021": "12:00:00", + "1/31/2022": "12:00:00" + }, "lateOpens": {} }, "Future-sgx-IN": { @@ -76139,8 +79987,92 @@ "state": "market" } ], - "holidays": [], - "earlyCloses": {}, + "holidays": [ + "1/1/2016", + "2/8/2016", + "2/9/2016", + "3/25/2016", + "5/1/2016", + "5/21/2016", + "7/6/2016", + "8/9/2016", + "9/12/2016", + "10/29/2016", + "12/25/2016", + "1/1/2017", + "1/28/2017", + "1/29/2017", + "4/14/2017", + "5/1/2017", + "5/10/2017", + "6/25/2017", + "8/9/2017", + "9/1/2017", + "10/18/2017", + "12/25/2017", + "1/1/2018", + "2/16/2018", + "2/17/2018", + "3/30/2018", + "5/1/2018", + "5/29/2018", + "6/15/2018", + "8/9/2018", + "8/22/2018", + "11/6/2018", + "12/25/2018", + "1/1/2019", + "2/5/2019", + "2/6/2019", + "4/19/2019", + "5/1/2019", + "5/20/2019", + "6/5/2019", + "8/9/2019", + "8/12/2019", + "10/28/2019", + "12/25/2019", + "1/1/2020", + "1/27/2020", + "4/10/2020", + "5/1/2020", + "5/7/2020", + "5/25/2020", + "7/31/2020", + "8/10/2020", + "11/14/2020", + "12/25/2020", + "1/1/2021", + "2/12/2021", + "4/2/2021", + "5/1/2021", + "8/9/2021", + "12/25/2021", + "1/3/2022", + "1/31/2022", + "2/1/2022", + "2/2/2022", + "4/15/2022", + "5/2/2022", + "8/9/2022", + "12/26/2022", + "12/31/2022" + ], + "earlyCloses": { + "2/15/2018": "12:00:00", + "12/24/2018": "12:00:00", + "12/31/2018": "12:00:00", + "4/02/2019": "12:00:00", + "12/24/2019": "12:00:00", + "12/31/2019": "12:00:00", + "1/24/2020": "12:00:00", + "12/24/2020": "12:00:00", + "12/31/2020": "12:00:00", + "2/11/2021": "12:00:00", + "12/24/2021": "12:00:00", + "12/31/2021": "12:00:00", + "1/31/2022": "12:00:00" + }, "lateOpens": {} }, "Option-usa-[*]": { @@ -76391,7 +80323,6 @@ "1/2/2023", "1/1/2024", "1/1/2025", - "1/1/2026", "12/25/2010", "12/25/2012", "12/25/2015", @@ -76402,8 +80333,7 @@ "12/24/2023", "12/31/2023", "12/25/2024", - "12/25/2025", - "12/25/2026" + "12/25/2025" ], "earlyCloses": { "12/30/2005": "17:00:00", @@ -76429,9 +80359,7 @@ "12/24/2024": "17:00:00", "12/31/2024": "17:00:00", "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00", - "12/24/2026": "17:00:00", - "12/31/2026": "17:00:00" + "12/31/2025": "17:00:00" }, "lateOpens": { "12/25/2018": "17:00:00", @@ -76536,9 +80464,67 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {}, - "lateOpens": {} + "holidays": [ + "1/1/2005", + "1/1/2010", + "1/1/2011", + "1/1/2013", + "1/1/2016", + "1/1/2017", + "1/1/2021", + "1/1/2023", + "1/2/2023", + "1/1/2024", + "1/1/2025", + "12/25/2010", + "12/25/2012", + "12/25/2015", + "12/25/2016", + "12/25/2020", + "12/25/2022", + "12/26/2022", + "12/24/2023", + "12/31/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "12/30/2005": "17:00:00", + "12/29/2005": "17:00:00", + "12/31/2007": "17:00:00", + "12/31/2008": "17:00:00", + "12/31/2009": "17:00:00", + "12/31/2010": "17:00:00", + "12/30/2011": "17:00:00", + "12/31/2012": "14:00:00", + "12/31/2013": "14:00:00", + "12/31/2014": "14:00:00", + "12/31/2015": "14:00:00", + "12/30/2016": "14:00:00", + "12/29/2017": "17:00:00", + "12/24/2018": "17:00:00", + "12/31/2018": "17:00:00", + "12/24/2019": "17:00:00", + "12/31/2019": "17:00:00", + "12/24/2020": "17:00:00", + "12/31/2020": "17:00:00", + "12/31/2021": "17:00:00", + "12/24/2024": "17:00:00", + "12/31/2024": "17:00:00", + "12/24/2025": "17:00:00", + "12/31/2025": "17:00:00" + }, + "lateOpens": { + "12/25/2018": "17:00:00", + "1/1/2019": "17:00:00", + "12/25/2019": "17:00:00", + "1/1/2020": "17:00:00", + "12/25/2023": "17:00:00", + "1/1/2024": "17:00:00", + "12/25/2024": "17:00:00", + "1/1/2025": "17:00:00", + "12/25/2025": "17:00:00" + } }, "Forex-oanda-EURNZD": { "dataTimeZone": "UTC", @@ -76631,9 +80617,67 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {}, - "lateOpens": {} + "holidays": [ + "1/1/2005", + "1/1/2010", + "1/1/2011", + "1/1/2013", + "1/1/2016", + "1/1/2017", + "1/1/2021", + "1/1/2023", + "1/2/2023", + "1/1/2024", + "1/1/2025", + "12/25/2010", + "12/25/2012", + "12/25/2015", + "12/25/2016", + "12/25/2020", + "12/25/2022", + "12/26/2022", + "12/24/2023", + "12/31/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "12/30/2005": "17:00:00", + "12/29/2005": "17:00:00", + "12/31/2007": "17:00:00", + "12/31/2008": "17:00:00", + "12/31/2009": "17:00:00", + "12/31/2010": "17:00:00", + "12/30/2011": "17:00:00", + "12/31/2012": "14:00:00", + "12/31/2013": "14:00:00", + "12/31/2014": "14:00:00", + "12/31/2015": "14:00:00", + "12/30/2016": "14:00:00", + "12/29/2017": "17:00:00", + "12/24/2018": "17:00:00", + "12/31/2018": "17:00:00", + "12/24/2019": "17:00:00", + "12/31/2019": "17:00:00", + "12/24/2020": "17:00:00", + "12/31/2020": "17:00:00", + "12/31/2021": "17:00:00", + "12/24/2024": "17:00:00", + "12/31/2024": "17:00:00", + "12/24/2025": "17:00:00", + "12/31/2025": "17:00:00" + }, + "lateOpens": { + "12/25/2018": "17:00:00", + "1/1/2019": "17:00:00", + "12/25/2019": "17:00:00", + "1/1/2020": "17:00:00", + "12/25/2023": "17:00:00", + "1/1/2024": "17:00:00", + "12/25/2024": "17:00:00", + "1/1/2025": "17:00:00", + "12/25/2025": "17:00:00" + } }, "Forex-oanda-NZDCAD": { "dataTimeZone": "UTC", @@ -76726,9 +80770,67 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {}, - "lateOpens": {} + "holidays": [ + "1/1/2005", + "1/1/2010", + "1/1/2011", + "1/1/2013", + "1/1/2016", + "1/1/2017", + "1/1/2021", + "1/1/2023", + "1/2/2023", + "1/1/2024", + "1/1/2025", + "12/25/2010", + "12/25/2012", + "12/25/2015", + "12/25/2016", + "12/25/2020", + "12/25/2022", + "12/26/2022", + "12/24/2023", + "12/31/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "12/30/2005": "17:00:00", + "12/29/2005": "17:00:00", + "12/31/2007": "17:00:00", + "12/31/2008": "17:00:00", + "12/31/2009": "17:00:00", + "12/31/2010": "17:00:00", + "12/30/2011": "17:00:00", + "12/31/2012": "14:00:00", + "12/31/2013": "14:00:00", + "12/31/2014": "14:00:00", + "12/31/2015": "14:00:00", + "12/30/2016": "14:00:00", + "12/29/2017": "17:00:00", + "12/24/2018": "17:00:00", + "12/31/2018": "17:00:00", + "12/24/2019": "17:00:00", + "12/31/2019": "17:00:00", + "12/24/2020": "17:00:00", + "12/31/2020": "17:00:00", + "12/31/2021": "17:00:00", + "12/24/2024": "17:00:00", + "12/31/2024": "17:00:00", + "12/24/2025": "17:00:00", + "12/31/2025": "17:00:00" + }, + "lateOpens": { + "12/25/2018": "17:00:00", + "1/1/2019": "17:00:00", + "12/25/2019": "17:00:00", + "1/1/2020": "17:00:00", + "12/25/2023": "17:00:00", + "1/1/2024": "17:00:00", + "12/25/2024": "17:00:00", + "1/1/2025": "17:00:00", + "12/25/2025": "17:00:00" + } }, "Forex-oanda-NZDCHF": { "dataTimeZone": "UTC", @@ -76821,9 +80923,67 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {}, - "lateOpens": {} + "holidays": [ + "1/1/2005", + "1/1/2010", + "1/1/2011", + "1/1/2013", + "1/1/2016", + "1/1/2017", + "1/1/2021", + "1/1/2023", + "1/2/2023", + "1/1/2024", + "1/1/2025", + "12/25/2010", + "12/25/2012", + "12/25/2015", + "12/25/2016", + "12/25/2020", + "12/25/2022", + "12/26/2022", + "12/24/2023", + "12/31/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "12/30/2005": "17:00:00", + "12/29/2005": "17:00:00", + "12/31/2007": "17:00:00", + "12/31/2008": "17:00:00", + "12/31/2009": "17:00:00", + "12/31/2010": "17:00:00", + "12/30/2011": "17:00:00", + "12/31/2012": "14:00:00", + "12/31/2013": "14:00:00", + "12/31/2014": "14:00:00", + "12/31/2015": "14:00:00", + "12/30/2016": "14:00:00", + "12/29/2017": "17:00:00", + "12/24/2018": "17:00:00", + "12/31/2018": "17:00:00", + "12/24/2019": "17:00:00", + "12/31/2019": "17:00:00", + "12/24/2020": "17:00:00", + "12/31/2020": "17:00:00", + "12/31/2021": "17:00:00", + "12/24/2024": "17:00:00", + "12/31/2024": "17:00:00", + "12/24/2025": "17:00:00", + "12/31/2025": "17:00:00" + }, + "lateOpens": { + "12/25/2018": "17:00:00", + "1/1/2019": "17:00:00", + "12/25/2019": "17:00:00", + "1/1/2020": "17:00:00", + "12/25/2023": "17:00:00", + "1/1/2024": "17:00:00", + "12/25/2024": "17:00:00", + "1/1/2025": "17:00:00", + "12/25/2025": "17:00:00" + } }, "Forex-oanda-NZDHKD": { "dataTimeZone": "UTC", @@ -76916,9 +81076,67 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {}, - "lateOpens": {} + "holidays": [ + "1/1/2005", + "1/1/2010", + "1/1/2011", + "1/1/2013", + "1/1/2016", + "1/1/2017", + "1/1/2021", + "1/1/2023", + "1/2/2023", + "1/1/2024", + "1/1/2025", + "12/25/2010", + "12/25/2012", + "12/25/2015", + "12/25/2016", + "12/25/2020", + "12/25/2022", + "12/26/2022", + "12/24/2023", + "12/31/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "12/30/2005": "17:00:00", + "12/29/2005": "17:00:00", + "12/31/2007": "17:00:00", + "12/31/2008": "17:00:00", + "12/31/2009": "17:00:00", + "12/31/2010": "17:00:00", + "12/30/2011": "17:00:00", + "12/31/2012": "14:00:00", + "12/31/2013": "14:00:00", + "12/31/2014": "14:00:00", + "12/31/2015": "14:00:00", + "12/30/2016": "14:00:00", + "12/29/2017": "17:00:00", + "12/24/2018": "17:00:00", + "12/31/2018": "17:00:00", + "12/24/2019": "17:00:00", + "12/31/2019": "17:00:00", + "12/24/2020": "17:00:00", + "12/31/2020": "17:00:00", + "12/31/2021": "17:00:00", + "12/24/2024": "17:00:00", + "12/31/2024": "17:00:00", + "12/24/2025": "17:00:00", + "12/31/2025": "17:00:00" + }, + "lateOpens": { + "12/25/2018": "17:00:00", + "1/1/2019": "17:00:00", + "12/25/2019": "17:00:00", + "1/1/2020": "17:00:00", + "12/25/2023": "17:00:00", + "1/1/2024": "17:00:00", + "12/25/2024": "17:00:00", + "1/1/2025": "17:00:00", + "12/25/2025": "17:00:00" + } }, "Forex-oanda-NZDJPY": { "dataTimeZone": "UTC", @@ -77011,9 +81229,67 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {}, - "lateOpens": {} + "holidays": [ + "1/1/2005", + "1/1/2010", + "1/1/2011", + "1/1/2013", + "1/1/2016", + "1/1/2017", + "1/1/2021", + "1/1/2023", + "1/2/2023", + "1/1/2024", + "1/1/2025", + "12/25/2010", + "12/25/2012", + "12/25/2015", + "12/25/2016", + "12/25/2020", + "12/25/2022", + "12/26/2022", + "12/24/2023", + "12/31/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "12/30/2005": "17:00:00", + "12/29/2005": "17:00:00", + "12/31/2007": "17:00:00", + "12/31/2008": "17:00:00", + "12/31/2009": "17:00:00", + "12/31/2010": "17:00:00", + "12/30/2011": "17:00:00", + "12/31/2012": "14:00:00", + "12/31/2013": "14:00:00", + "12/31/2014": "14:00:00", + "12/31/2015": "14:00:00", + "12/30/2016": "14:00:00", + "12/29/2017": "17:00:00", + "12/24/2018": "17:00:00", + "12/31/2018": "17:00:00", + "12/24/2019": "17:00:00", + "12/31/2019": "17:00:00", + "12/24/2020": "17:00:00", + "12/31/2020": "17:00:00", + "12/31/2021": "17:00:00", + "12/24/2024": "17:00:00", + "12/31/2024": "17:00:00", + "12/24/2025": "17:00:00", + "12/31/2025": "17:00:00" + }, + "lateOpens": { + "12/25/2018": "17:00:00", + "1/1/2019": "17:00:00", + "12/25/2019": "17:00:00", + "1/1/2020": "17:00:00", + "12/25/2023": "17:00:00", + "1/1/2024": "17:00:00", + "12/25/2024": "17:00:00", + "1/1/2025": "17:00:00", + "12/25/2025": "17:00:00" + } }, "Forex-oanda-NZDSGD": { "dataTimeZone": "UTC", @@ -77106,9 +81382,67 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {}, - "lateOpens": {} + "holidays": [ + "1/1/2005", + "1/1/2010", + "1/1/2011", + "1/1/2013", + "1/1/2016", + "1/1/2017", + "1/1/2021", + "1/1/2023", + "1/2/2023", + "1/1/2024", + "1/1/2025", + "12/25/2010", + "12/25/2012", + "12/25/2015", + "12/25/2016", + "12/25/2020", + "12/25/2022", + "12/26/2022", + "12/24/2023", + "12/31/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "12/30/2005": "17:00:00", + "12/29/2005": "17:00:00", + "12/31/2007": "17:00:00", + "12/31/2008": "17:00:00", + "12/31/2009": "17:00:00", + "12/31/2010": "17:00:00", + "12/30/2011": "17:00:00", + "12/31/2012": "14:00:00", + "12/31/2013": "14:00:00", + "12/31/2014": "14:00:00", + "12/31/2015": "14:00:00", + "12/30/2016": "14:00:00", + "12/29/2017": "17:00:00", + "12/24/2018": "17:00:00", + "12/31/2018": "17:00:00", + "12/24/2019": "17:00:00", + "12/31/2019": "17:00:00", + "12/24/2020": "17:00:00", + "12/31/2020": "17:00:00", + "12/31/2021": "17:00:00", + "12/24/2024": "17:00:00", + "12/31/2024": "17:00:00", + "12/24/2025": "17:00:00", + "12/31/2025": "17:00:00" + }, + "lateOpens": { + "12/25/2018": "17:00:00", + "1/1/2019": "17:00:00", + "12/25/2019": "17:00:00", + "1/1/2020": "17:00:00", + "12/25/2023": "17:00:00", + "1/1/2024": "17:00:00", + "12/25/2024": "17:00:00", + "1/1/2025": "17:00:00", + "12/25/2025": "17:00:00" + } }, "Forex-oanda-NZDUSD": { "dataTimeZone": "UTC", @@ -77201,9 +81535,67 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {}, - "lateOpens": {} + "holidays": [ + "1/1/2005", + "1/1/2010", + "1/1/2011", + "1/1/2013", + "1/1/2016", + "1/1/2017", + "1/1/2021", + "1/1/2023", + "1/2/2023", + "1/1/2024", + "1/1/2025", + "12/25/2010", + "12/25/2012", + "12/25/2015", + "12/25/2016", + "12/25/2020", + "12/25/2022", + "12/26/2022", + "12/24/2023", + "12/31/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "12/30/2005": "17:00:00", + "12/29/2005": "17:00:00", + "12/31/2007": "17:00:00", + "12/31/2008": "17:00:00", + "12/31/2009": "17:00:00", + "12/31/2010": "17:00:00", + "12/30/2011": "17:00:00", + "12/31/2012": "14:00:00", + "12/31/2013": "14:00:00", + "12/31/2014": "14:00:00", + "12/31/2015": "14:00:00", + "12/30/2016": "14:00:00", + "12/29/2017": "17:00:00", + "12/24/2018": "17:00:00", + "12/31/2018": "17:00:00", + "12/24/2019": "17:00:00", + "12/31/2019": "17:00:00", + "12/24/2020": "17:00:00", + "12/31/2020": "17:00:00", + "12/31/2021": "17:00:00", + "12/24/2024": "17:00:00", + "12/31/2024": "17:00:00", + "12/24/2025": "17:00:00", + "12/31/2025": "17:00:00" + }, + "lateOpens": { + "12/25/2018": "17:00:00", + "1/1/2019": "17:00:00", + "12/25/2019": "17:00:00", + "1/1/2020": "17:00:00", + "12/25/2023": "17:00:00", + "1/1/2024": "17:00:00", + "12/25/2024": "17:00:00", + "1/1/2025": "17:00:00", + "12/25/2025": "17:00:00" + } }, "Cfd-fxcm-[*]": { "dataTimeZone": "UTC-05", @@ -85803,7 +90195,6 @@ "1/1/2024", "1/2/2023", "1/1/2025", - "1/1/2026", "1/2/2007", "1/19/1998", "1/18/1999", @@ -85833,7 +90224,6 @@ "1/16/2023", "1/15/2024", "1/20/2025", - "1/19/2026", "2/16/1998", "2/15/1999", "2/21/2000", @@ -86171,8 +90561,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBUS30": { "dataTimeZone": "UTC", @@ -86240,8 +90954,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBUST100": { "dataTimeZone": "UTC", @@ -86309,8 +91347,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBGB100": { "dataTimeZone": "UTC", @@ -86352,51 +91714,699 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} - }, - "Cfd-interactivebrokers-IBEU50": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "01:15:00", + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } + }, + "Cfd-interactivebrokers-IBEU50": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "01:15:00", "end": "21:00:00", "state": "market" } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBDE40": { "dataTimeZone": "UTC", @@ -86438,8 +92448,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBFR40": { "dataTimeZone": "UTC", @@ -86481,8 +92815,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBES35": { "dataTimeZone": "UTC", @@ -86523,9 +93181,333 @@ "state": "market" } ], - "saturday": [], - "holidays": [], - "earlyCloses": {} + "saturday": [], + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBNL25": { "dataTimeZone": "UTC", @@ -86567,8 +93549,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBCH20": { "dataTimeZone": "UTC", @@ -86610,8 +93916,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBJP225": { "dataTimeZone": "UTC", @@ -86679,8 +94309,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBHK50": { "dataTimeZone": "UTC", @@ -86772,8 +94726,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-IBAU200": { "dataTimeZone": "UTC", @@ -86866,8 +95144,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-XAUUSD": { "dataTimeZone": "UTC", @@ -86935,8 +95537,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Cfd-interactivebrokers-XAGUSD": { "dataTimeZone": "UTC", @@ -87004,8 +95930,332 @@ } ], "saturday": [], - "holidays": [], - "earlyCloses": {} + "holidays": [ + "1/1/1998", + "1/1/1999", + "1/1/2001", + "1/1/2002", + "1/1/2003", + "1/1/2004", + "1/2/2006", + "1/1/2007", + "1/1/2008", + "1/1/2009", + "1/1/2010", + "1/1/2011", + "1/2/2012", + "1/1/2013", + "1/1/2014", + "1/1/2015", + "1/1/2016", + "1/2/2017", + "1/1/2018", + "1/1/2019", + "1/1/2020", + "1/1/2021", + "1/1/2022", + "1/1/2024", + "1/2/2023", + "1/1/2025", + "1/2/2007", + "1/19/1998", + "1/18/1999", + "1/17/2000", + "1/15/2001", + "1/21/2002", + "1/20/2003", + "1/19/2004", + "1/17/2005", + "1/16/2006", + "1/15/2007", + "1/21/2008", + "1/19/2009", + "1/18/2010", + "1/17/2011", + "1/16/2012", + "1/21/2013", + "1/20/2014", + "1/19/2015", + "1/18/2016", + "1/16/2017", + "1/15/2018", + "1/21/2019", + "1/20/2020", + "1/18/2021", + "1/17/2022", + "1/16/2023", + "1/15/2024", + "1/20/2025", + "2/16/1998", + "2/15/1999", + "2/21/2000", + "2/19/2001", + "2/18/2002", + "2/17/2003", + "2/16/2004", + "2/21/2005", + "2/20/2006", + "2/19/2007", + "2/18/2008", + "2/16/2009", + "2/15/2010", + "2/21/2011", + "2/20/2012", + "2/18/2013", + "2/17/2014", + "2/16/2015", + "2/15/2016", + "2/20/2017", + "2/19/2018", + "2/18/2019", + "2/17/2020", + "2/15/2021", + "2/21/2022", + "2/20/2023", + "2/19/2024", + "2/17/2025", + "4/10/1998", + "4/2/1999", + "4/21/2000", + "4/13/2001", + "3/29/2002", + "4/18/2003", + "4/9/2004", + "3/25/2005", + "4/14/2006", + "4/6/2007", + "3/21/2008", + "4/10/2009", + "4/2/2010", + "4/22/2011", + "4/6/2012", + "3/29/2013", + "4/18/2014", + "4/3/2015", + "3/25/2016", + "4/14/2017", + "3/30/2018", + "4/19/2019", + "4/10/2020", + "4/2/2021", + "4/15/2022", + "4/7/2023", + "3/29/2024", + "4/18/2025", + "5/25/1998", + "5/31/1999", + "5/29/2000", + "5/28/2001", + "5/27/2002", + "5/26/2003", + "5/31/2004", + "5/30/2005", + "5/29/2006", + "5/28/2007", + "5/26/2008", + "5/25/2009", + "5/31/2010", + "5/30/2011", + "5/28/2012", + "5/27/2013", + "5/26/2014", + "5/25/2015", + "5/30/2016", + "5/29/2017", + "5/28/2018", + "5/27/2019", + "5/25/2020", + "5/31/2021", + "5/30/2022", + "5/29/2023", + "5/27/2024", + "6/11/2004", + "6/20/2022", + "6/19/2023", + "6/19/2024", + "6/19/2025", + "7/3/1998", + "7/5/1999", + "7/4/2000", + "7/4/2001", + "7/4/2002", + "7/4/2003", + "7/5/2004", + "7/4/2005", + "7/4/2006", + "7/4/2007", + "7/4/2008", + "7/3/2009", + "7/5/2010", + "7/4/2011", + "7/4/2012", + "7/4/2013", + "7/4/2014", + "7/3/2015", + "7/4/2016", + "7/4/2017", + "7/4/2018", + "7/4/2019", + "7/3/2020", + "7/5/2021", + "7/4/2022", + "7/4/2023", + "7/4/2024", + "7/4/2025", + "9/7/1998", + "9/6/1999", + "9/4/2000", + "9/3/2001", + "9/2/2002", + "9/1/2003", + "9/6/2004", + "9/5/2005", + "9/4/2006", + "9/3/2007", + "9/1/2008", + "9/7/2009", + "9/6/2010", + "9/5/2011", + "9/3/2012", + "9/2/2013", + "9/1/2014", + "9/7/2015", + "9/5/2016", + "9/4/2017", + "9/3/2018", + "9/2/2019", + "9/7/2020", + "9/6/2021", + "9/5/2022", + "9/4/2023", + "9/2/2024", + "9/1/2025", + "9/11/2001", + "9/12/2001", + "9/13/2001", + "9/14/2001", + "10/29/2012", + "10/30/2012", + "11/26/1998", + "11/25/1999", + "11/23/2000", + "11/22/2001", + "11/28/2002", + "11/27/2003", + "11/25/2004", + "11/24/2005", + "11/23/2006", + "11/22/2007", + "11/27/2008", + "11/26/2009", + "11/25/2010", + "11/24/2011", + "11/22/2012", + "11/28/2013", + "11/27/2014", + "11/26/2015", + "11/24/2016", + "11/23/2017", + "11/22/2018", + "11/28/2019", + "11/26/2020", + "11/25/2021", + "11/24/2022", + "11/23/2023", + "11/28/2024", + "11/27/2025", + "12/05/2018", + "12/25/1998", + "12/24/1999", + "12/25/2000", + "12/25/2001", + "12/25/2002", + "12/25/2003", + "12/24/2004", + "12/26/2005", + "12/25/2006", + "12/25/2007", + "12/25/2008", + "12/25/2009", + "12/24/2010", + "12/26/2011", + "12/25/2012", + "12/25/2013", + "12/25/2014", + "12/25/2015", + "12/26/2016", + "12/25/2017", + "12/25/2018", + "12/25/2019", + "12/25/2020", + "12/24/2021", + "12/26/2022", + "12/25/2023", + "12/25/2024", + "12/25/2025" + ], + "earlyCloses": { + "7/3/2000": "13:00:00", + "7/3/2001": "13:00:00", + "7/5/2002": "13:00:00", + "7/3/2003": "13:00:00", + "7/3/2006": "13:00:00", + "7/3/2007": "13:00:00", + "7/3/2008": "13:00:00", + "7/3/2012": "13:00:00", + "7/3/2013": "13:00:00", + "7/3/2014": "13:00:00", + "7/3/2017": "13:00:00", + "7/3/2018": "13:00:00", + "7/3/2019": "13:00:00", + "7/3/2023": "13:00:00", + "7/3/2024": "13:00:00", + "7/3/2025": "13:00:00", + "11/26/1999": "13:00:00", + "11/24/2000": "13:00:00", + "11/23/2001": "13:00:00", + "11/29/2002": "13:00:00", + "11/28/2003": "13:00:00", + "11/26/2004": "13:00:00", + "11/25/2005": "13:00:00", + "11/24/2006": "13:00:00", + "11/23/2007": "13:00:00", + "11/28/2008": "13:00:00", + "11/27/2009": "13:00:00", + "11/26/2010": "13:00:00", + "11/25/2011": "13:00:00", + "11/23/2012": "13:00:00", + "11/29/2013": "13:00:00", + "11/28/2014": "13:00:00", + "11/27/2015": "13:00:00", + "11/25/2016": "13:00:00", + "11/24/2017": "13:00:00", + "11/23/2018": "13:00:00", + "11/29/2019": "13:00:00", + "11/27/2020": "13:00:00", + "11/26/2021": "13:00:00", + "11/25/2022": "13:00:00", + "11/24/2023": "13:00:00", + "11/29/2024": "13:00:00", + "11/28/2025": "13:00:00", + "12/24/2001": "13:00:00", + "12/24/2002": "13:00:00", + "12/24/2003": "13:00:00", + "12/26/2003": "13:00:00", + "12/24/2007": "13:00:00", + "12/24/2008": "13:00:00", + "12/24/2009": "13:00:00", + "12/24/2012": "13:00:00", + "12/24/2013": "13:00:00", + "12/24/2014": "13:00:00", + "12/24/2015": "13:00:00", + "12/24/2017": "13:00:00", + "12/24/2018": "13:00:00", + "12/24/2019": "13:00:00", + "12/24/2020": "13:00:00", + "12/24/2024": "13:00:00", + "12/24/2025": "13:00:00" + } }, "Crypto-coinbase-[*]": { "dataTimeZone": "UTC", @@ -131500,7 +140750,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -131650,7 +140902,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -131760,7 +141023,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -131922,7 +141190,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-MNQ": { @@ -132017,7 +141292,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -132167,7 +141444,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -132277,7 +141565,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -132439,7 +141732,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-M6E": { @@ -132534,7 +141834,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -132711,8 +142014,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -132821,7 +142135,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -132983,7 +142302,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-M2K": { @@ -133078,7 +142404,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -133228,7 +142556,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -133338,7 +142677,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -133500,7 +142844,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-MYM": { @@ -133596,7 +142947,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "11:30:00", @@ -133746,7 +143099,18 @@ "11/28/2025": "13:15:00", "12/24/2025": "13:15:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "13:00:00", + "2/16/2026": "13:00:00", + "4/3/2026": "09:15:00", + "5/25/2026": "13:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "13:00:00", + "11/26/2026": "13:00:00", + "11/27/2026": "13:15:00", + "12/24/2026": "13:15:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -133857,7 +143221,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -134019,7 +143388,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-comex-MGC": { @@ -134117,7 +143493,10 @@ "4/3/2015", "4/2/2021", "1/9/2025", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -134266,7 +143645,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -134376,7 +143766,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -134544,7 +143939,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-cme-MET": { @@ -134639,7 +144040,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/17/2022": "16:00:00", @@ -134679,7 +144082,18 @@ "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", "12/24/2025": "12:45:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/15/2018": "17:00:00", @@ -134737,7 +144151,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "12/25/2017", @@ -134821,7 +144240,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-MBT": { @@ -134916,7 +144342,9 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "5/31/2021": "12:00:00", @@ -134961,7 +144389,18 @@ "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", "12/24/2025": "12:45:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/15/2018": "17:00:00", @@ -135019,7 +144458,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "12/25/2017", @@ -135103,7 +144547,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-MCL": { @@ -135200,7 +144651,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -135350,7 +144804,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -135460,7 +144925,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -135628,7 +145098,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-M6A": { @@ -135723,7 +145200,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -135900,8 +145380,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -136010,7 +145501,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -136172,7 +145668,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-comex-SIL": { @@ -136270,7 +145773,10 @@ "4/3/2015", "4/2/2021", "1/9/2025", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -136419,7 +145925,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -136529,7 +146046,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -136697,7 +146219,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-nymex-S5O": { @@ -136794,7 +146322,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -136944,7 +146475,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -137054,7 +146596,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -137222,7 +146769,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-M6B": { @@ -137317,7 +146871,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -137494,8 +147051,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -137604,7 +147172,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -137766,7 +147339,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-MCD": { @@ -137861,7 +147441,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -138038,8 +147621,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -138148,7 +147742,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -138310,7 +147909,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-M1B": { @@ -138407,7 +148013,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -138557,7 +148166,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -138667,7 +148287,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -138835,7 +148460,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-R5O": { @@ -138932,7 +148564,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -139082,7 +148717,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -139192,7 +148838,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -139360,7 +149011,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-10Y": { @@ -139456,7 +149114,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "lateOpens": { "1/19/2009": "17:00:00", @@ -139566,7 +149226,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -139745,7 +149410,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -139907,7 +149583,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-MJY": { @@ -140002,7 +149685,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -140177,8 +149863,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/1/2024": "17:00:00", @@ -140198,7 +149895,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -140360,7 +150062,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-MSF": { @@ -140455,7 +150164,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -140632,8 +150344,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -140742,7 +150465,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [ "1/19/2009", @@ -140904,7 +150632,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-2YY": { @@ -141000,7 +150735,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "lateOpens": { "1/19/2009": "17:00:00", @@ -141110,7 +150847,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -141289,7 +151031,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -141451,7 +151204,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-MAF": { @@ -141548,7 +151308,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -141698,7 +151461,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -141808,7 +151582,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -141976,7 +151755,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-nymex-MEF": { @@ -142073,7 +151859,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -142223,7 +152012,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -142333,7 +152133,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -142501,7 +152306,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cbot-30Y": { @@ -142597,7 +152409,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "lateOpens": { "1/19/2009": "17:00:00", @@ -142707,7 +152521,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -142886,7 +152705,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -143048,7 +152878,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-M6J": { @@ -143504,7 +153341,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -143681,8 +153521,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -143791,7 +153642,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [] }, @@ -144610,7 +154466,9 @@ "saturday": [], "holidays": [ "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "lateOpens": { "1/19/2009": "17:00:00", @@ -144720,7 +154578,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "earlyCloses": { "1/16/2009": "15:15:00", @@ -144899,7 +154762,18 @@ "11/28/2025": "12:15:00", "12/24/2025": "12:15:00", "12/25/2025": "16:00:00", - "12/31/2025": "16:00:00" + "12/31/2025": "16:00:00", + "1/19/2026": "12:00:00", + "2/16/2026": "12:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "12:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "12:00:00", + "11/26/2026": "12:00:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00", + "12/31/2026": "16:00:00" }, "bankHolidays": [ "1/19/2009", @@ -145061,7 +154935,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-MNH": { @@ -145156,7 +155037,10 @@ ], "saturday": [], "holidays": [ - "4/18/2025" + "4/18/2025", + "7/4/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/16/2009": "15:15:00", @@ -145333,8 +155217,19 @@ "9/1/2025": "16:00:00", "11/27/2025": "16:00:00", "11/28/2025": "13:45:00", - "12/24/2025": "12:15:00", - "12/31/2025": "16:00:00" + "12/24/2025": "12:45:00", + "12/31/2025": "16:00:00", + "1/19/2026": "16:00:00", + "2/16/2026": "16:00:00", + "4/3/2026": "10:15:00", + "5/25/2026": "16:00:00", + "6/19/2026": "12:00:00", + "7/3/2026": "12:00:00", + "9/7/2026": "16:00:00", + "11/26/2026": "16:00:00", + "11/27/2026": "13:45:00", + "12/24/2026": "12:45:00", + "12/31/2026": "16:00:00" }, "lateOpens": { "1/19/2009": "17:00:00", @@ -145443,7 +155338,12 @@ "9/1/2025": "17:00:00", "11/27/2025": "17:00:00", "12/25/2025": "17:00:00", - "1/1/2026": "17:00:00" + "1/1/2026": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "5/25/2026": "17:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00" }, "bankHolidays": [] }, @@ -145756,7 +155656,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -145906,7 +155809,18 @@ "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", "12/25/2025": "17:00:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -146016,7 +155930,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -146184,7 +156103,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-cme-MRB": { @@ -146535,7 +156461,10 @@ "holidays": [ "4/3/2015", "4/2/2021", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -146684,7 +156613,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -146794,7 +156734,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -146962,7 +156907,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-cme-MIB": { @@ -147074,7 +157025,9 @@ "1/1/2023", "1/2/2023", "1/9/2025", - "4/18/2025" + "4/18/2025", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -147214,7 +157167,18 @@ "11/27/2025": "17:00:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "17:00:00", + "2/16/2026": "17:00:00", + "4/3/2026": "11:15:00", + "5/25/2026": "17:00:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "17:00:00", + "11/26/2026": "17:00:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/1/2024": "18:00:00", @@ -147234,7 +157198,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "12/25/2017", @@ -147318,7 +157287,14 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ] }, "Future-comex-MGT": { @@ -147416,7 +157392,10 @@ "4/3/2015", "4/2/2021", "1/9/2025", - "4/18/2025" + "4/18/2025", + "4/3/2026", + "12/25/2026", + "1/1/2027" ], "earlyCloses": { "1/19/2009": "17:15:00", @@ -147565,7 +157544,18 @@ "11/27/2025": "14:30:00", "11/28/2025": "14:45:00", "12/24/2025": "13:45:00", - "12/31/2025": "17:00:00" + "12/31/2025": "17:00:00", + "1/19/2026": "14:30:00", + "2/16/2026": "14:30:00", + "4/2/2026": "17:00:00", + "5/25/2026": "14:30:00", + "6/19/2026": "13:00:00", + "7/3/2026": "13:00:00", + "9/7/2026": "14:30:00", + "11/26/2026": "14:30:00", + "11/27/2026": "14:45:00", + "12/24/2026": "13:45:00", + "12/31/2026": "17:00:00" }, "lateOpens": { "1/19/2009": "18:00:00", @@ -147675,7 +157665,12 @@ "9/1/2025": "18:00:00", "11/27/2025": "18:00:00", "12/25/2025": "18:00:00", - "1/1/2026": "18:00:00" + "1/1/2026": "18:00:00", + "1/19/2026": "18:00:00", + "2/16/2026": "18:00:00", + "5/25/2026": "18:00:00", + "9/7/2026": "18:00:00", + "11/26/2026": "18:00:00" }, "bankHolidays": [ "1/19/2009", @@ -147843,7 +157838,13 @@ "11/11/2025", "11/27/2025", "12/25/2025", - "1/1/2026" + "1/1/2026", + "1/19/2026", + "2/16/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "11/26/2026" ] }, "Future-nyseliffe-[*]": { @@ -149547,7 +159548,21 @@ "10/7/2025", "10/29/2025", "12/25/2025", - "12/26/2025" + "12/26/2025", + "1/1/2026", + "2/17/2026", + "2/18/2026", + "2/19/2026", + "4/3/2026", + "4/6/2026", + "4/7/2026", + "5/1/2026", + "5/25/2026", + "6/19/2026", + "7/1/2026", + "10/1/2026", + "10/19/2026", + "12/25/2026" ], "earlyCloses": { "2/15/2018": "12:00:00", @@ -149568,7 +159583,10 @@ "12/31/2024": "12:00:00", "1/28/2025": "12:00:00", "12/24/2025": "12:00:00", - "12/31/2025": "12:00:00" + "12/31/2025": "12:00:00", + "2/16/2026": "12:00:00", + "12/24/2026": "12:00:00", + "12/31/2026": "12:00:00" }, "lateOpens": {} }, diff --git a/Tests/TestData/FuturesExpiryFunctionsTestData.xml b/Tests/TestData/FuturesExpiryFunctionsTestData.xml index d44a7c2aaed14b95adb98458036591399ecd1a82..2e304b3f875e3d3056ef1285b9ec692e2f1e0fe2 100644 GIT binary patch delta 97 zcmX>xG2q0+fQA;v7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~7QPn#7J)5-D(>6=sR}<} yoxY)-DPnp+3K!e-4}O9ylYLrKrhnMO!!g}OUU&sqyuHCs5Qv4gH~0yA>;eFi6C#)Z delta 102 zcmX>xG2q0+fQA;v7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~7QPn#7J)5-D(=&LUJ5MQ zzCcabj&=HmdZvi!0V!N;(?9qLvP|}AO_}~-4-dz57kS|oVDa__KS3ZC+TP$N?6C^~ DGG` Date: Wed, 31 Dec 2025 10:18:22 -0500 Subject: [PATCH 069/103] Replace external dataset with mock data in sweetviz test (#9176) --- Tests/Python/PythonPackagesTests.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Tests/Python/PythonPackagesTests.cs b/Tests/Python/PythonPackagesTests.cs index dfe58e0c1b0f..3170ee2b1db9 100644 --- a/Tests/Python/PythonPackagesTests.cs +++ b/Tests/Python/PythonPackagesTests.cs @@ -2925,14 +2925,17 @@ def RunTest(): public void Sweetviz() { AssertCode(@" -import sweetviz as sv -from sklearn.datasets import fetch_california_housing -from sklearn.model_selection import train_test_split - def RunTest(): - housing = fetch_california_housing(as_frame = True) - df = housing.frame - report = sv.analyze([df, 'Train'], target_feat='MedHouseVal')"); + import sweetviz as sv + import pandas as pd + + df = pd.DataFrame({ + 'col1': [1, 2, 3], + 'col2': [4, 5, 6], + 'target': [0, 1, 0] + }) + + report = sv.analyze(df, target_feat='target')"); } [TestCase("tf2onnx", "1.16.1", "__version__"), Explicit("These need to be run by themselves")] From 67489eef57272af48f7a58d161addd207ec01f87 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Wed, 31 Dec 2025 11:58:51 -0400 Subject: [PATCH 070/103] Add GetInt64 StreamReader extension method (#9177) * Add GetInt64 StreamReader extension method * Minor change * Cleanup * Add unit tests --- Common/Util/StreamReaderExtensions.cs | 31 ++++++++++++ .../Util/StreamReaderExtensionsTests.cs | 48 +++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/Common/Util/StreamReaderExtensions.cs b/Common/Util/StreamReaderExtensions.cs index af959e4392c7..1606ffc2aa5b 100644 --- a/Common/Util/StreamReaderExtensions.cs +++ b/Common/Util/StreamReaderExtensions.cs @@ -156,6 +156,37 @@ public static int GetInt32(this StreamReader stream, char delimiter = DefaultDel return isNegative ? result * -1 : result; } + /// + /// Gets an integer from a stream reader + /// + /// The data stream + /// The data delimiter character to use, default is ',' + /// The integer instance read + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static long GetInt64(this StreamReader stream, char delimiter = DefaultDelimiter) + { + var result = 0L; + var current = (char)stream.Read(); + + while (current == ' ') + { + current = (char)stream.Read(); + } + + var isNegative = current == '-'; + if (isNegative) + { + current = (char)stream.Read(); + } + + while (!(current == delimiter || current == '\n' || current == '\r' && (stream.Peek() != '\n' || stream.Read() == '\n') || current == NoMoreData || current == ' ')) + { + result = (current - '0') + result * 10L; + current = (char)stream.Read(); + } + return isNegative ? result * -1L : result; + } + private readonly static ConcurrentBag StringBuilders = new(); /// diff --git a/Tests/Common/Util/StreamReaderExtensionsTests.cs b/Tests/Common/Util/StreamReaderExtensionsTests.cs index b3fcf7232f56..e4d46125de6a 100644 --- a/Tests/Common/Util/StreamReaderExtensionsTests.cs +++ b/Tests/Common/Util/StreamReaderExtensionsTests.cs @@ -320,6 +320,54 @@ public void GetIntWithLineFeed() Assert.AreEqual(201900, smartStream.GetInt32()); } + [Test] + public void GetInt64() + { + var stream = $"1588291200426000,0,1588291202486000{Environment.NewLine}1588291205550000{Environment.NewLine}".ToStream(); + using var smartStream = new StreamReader(stream); + + Assert.AreEqual(1588291200426000, smartStream.GetInt64()); + Assert.AreEqual(0L, smartStream.GetInt64()); + Assert.AreEqual(1588291202486000, smartStream.GetInt64()); + Assert.AreEqual(1588291205550000, smartStream.GetInt64()); + } + + [Test] + public void GetNegativeInt64() + { + var stream = $"-1588291200426000,0,-1588291202486000{Environment.NewLine}-1588291205550000{Environment.NewLine}".ToStream(); + using var smartStream = new StreamReader(stream); + + Assert.AreEqual(-1588291200426000, smartStream.GetInt64()); + Assert.AreEqual(0L, smartStream.GetInt64()); + Assert.AreEqual(-1588291202486000, smartStream.GetInt64()); + Assert.AreEqual(-1588291205550000, smartStream.GetInt64()); + } + + [Test] + public void GetInt64WithCarriageReturnAndLineFeed() + { + var stream = "1588291200426000,0,1588291202486000\r\n1588291205550000\r\n".ToStream(); + using var smartStream = new StreamReader(stream); + + Assert.AreEqual(1588291200426000, smartStream.GetInt64()); + Assert.AreEqual(0L, smartStream.GetInt64()); + Assert.AreEqual(1588291202486000, smartStream.GetInt64()); + Assert.AreEqual(1588291205550000, smartStream.GetInt64()); + } + + [Test] + public void GetInt64WithLineFeed() + { + var stream = "1588291200426000,0,1588291202486000\n1588291205550000\n".ToStream(); + using var smartStream = new StreamReader(stream); + + Assert.AreEqual(1588291200426000, smartStream.GetInt64()); + Assert.AreEqual(0L, smartStream.GetInt64()); + Assert.AreEqual(1588291202486000, smartStream.GetInt64()); + Assert.AreEqual(1588291205550000, smartStream.GetInt64()); + } + [Parallelizable(ParallelScope.None)] [TestCase(typeof(TradeBar), typeof(TradeBarTest), TickType.Trade)] [TestCase(typeof(QuoteBar), typeof(QuoteBarTest), TickType.Quote)] From 7735917c8396d6b7c5e5198de46f468ada7975f4 Mon Sep 17 00:00:00 2001 From: Adalyat Nazirov Date: Wed, 31 Dec 2025 16:19:58 +0000 Subject: [PATCH 071/103] Prioritize CryptoFuture data feeds for dYdX (#9178) * Prioritize CryptoFuture data feeds for dYdX * revert changes for existing crypto subscriptions * use Concat instead of adding into list --- Common/Currencies.cs | 15 +++++++++++++- Common/Securities/Cash.cs | 8 +++++++ Launcher/config.json | 17 ++++++++++++++- Tests/Common/Securities/CashTests.cs | 31 ++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 2 deletions(-) diff --git a/Common/Currencies.cs b/Common/Currencies.cs index 81251832ba1b..ad6897897e45 100644 --- a/Common/Currencies.cs +++ b/Common/Currencies.cs @@ -228,7 +228,7 @@ public static class Currencies }; /// - /// Define some StableCoins that don't have direct pairs for base currencies in our SPDB in Binance market + /// Define some StableCoins that don't have direct pairs for base currencies in our SPDB in Bybit market /// This is because some CryptoExchanges do not define direct pairs with the stablecoins they offer. /// /// We use this to allow setting cash amounts for these stablecoins without needing a conversion @@ -246,6 +246,18 @@ public static class Currencies "DAIUSD" }; + /// + /// Define some StableCoins that don't have direct pairs for base currencies in our SPDB in dYdX market + /// This is because some CryptoExchanges do not define direct pairs with the stablecoins they offer. + /// + /// We use this to allow setting cash amounts for these stablecoins without needing a conversion + /// security. + /// + private static readonly HashSet _stableCoinsWithoutPairsdYdX = new HashSet + { + "USDCUSD" + }; + /// /// Dictionary to save StableCoins in different Markets /// @@ -255,6 +267,7 @@ public static class Currencies { Market.Bitfinex , _stableCoinsWithoutPairsBitfinex}, { Market.Coinbase, _stableCoinsWithoutPairsCoinbase}, { Market.Bybit , _stableCoinsWithoutPairsBybit}, + { Market.dYdX , _stableCoinsWithoutPairsdYdX} }; /// diff --git a/Common/Securities/Cash.cs b/Common/Securities/Cash.cs index a561c1f87666..cc1920b687c5 100644 --- a/Common/Securities/Cash.cs +++ b/Common/Securities/Cash.cs @@ -262,6 +262,14 @@ public List EnsureCurrencyDataFeed(SecurityManager secur var cfdEntries = GetAvailableSymbolPropertiesDatabaseEntries(SecurityType.Cfd, marketMap, markets); var cryptoEntries = GetAvailableSymbolPropertiesDatabaseEntries(SecurityType.Crypto, marketMap, markets); + if (marketMap.TryGetValue(SecurityType.CryptoFuture, out var cryptoFutureMarket) && cryptoFutureMarket == Market.dYdX) + { + // Put additional logic for dYdX crypto futures as they don't have Crypto (Spot) market + // Also need to add them first to give the priority + // TODO: remove once dydx SPOT market will be imlemented + cryptoEntries = GetAvailableSymbolPropertiesDatabaseEntries(SecurityType.CryptoFuture, marketMap, markets).Concat(cryptoEntries); + } + var potentialEntries = forexEntries .Concat(cfdEntries) .Concat(cryptoEntries) diff --git a/Launcher/config.json b/Launcher/config.json index 84a99bdbd6bd..4008a5bd9e41 100644 --- a/Launcher/config.json +++ b/Launcher/config.json @@ -755,6 +755,21 @@ "real-time-handler": "QuantConnect.Lean.Engine.RealTime.LiveTradingRealTimeHandler", "transaction-handler": "QuantConnect.Lean.Engine.TransactionHandlers.BrokerageTransactionHandler", "history-provider": [ "BrokerageHistoryProvider", "SubscriptionDataReaderHistoryProvider" ] + }, + + // defines the 'live-dydx' environment + "live-dydx": { + "live-mode": true, + + // real brokerage implementations require the BrokerageTransactionHandler + "live-mode-brokerage": "dYdXBrokerage", + "data-queue-handler": [ "dYdXBrokerage" ], + "setup-handler": "QuantConnect.Lean.Engine.Setup.BrokerageSetupHandler", + "result-handler": "QuantConnect.Lean.Engine.Results.LiveTradingResultHandler", + "data-feed-handler": "QuantConnect.Lean.Engine.DataFeeds.LiveTradingDataFeed", + "real-time-handler": "QuantConnect.Lean.Engine.RealTime.LiveTradingRealTimeHandler", + "transaction-handler": "QuantConnect.Lean.Engine.TransactionHandlers.BrokerageTransactionHandler", + "history-provider": [ "BrokerageHistoryProvider", "SubscriptionDataReaderHistoryProvider" ] } } -} +} \ No newline at end of file diff --git a/Tests/Common/Securities/CashTests.cs b/Tests/Common/Securities/CashTests.cs index 197be37b12e2..db5081c9ab4e 100644 --- a/Tests/Common/Securities/CashTests.cs +++ b/Tests/Common/Securities/CashTests.cs @@ -453,6 +453,37 @@ public void EnsureCurrencyDataFeedForCryptoCurrency() } } + [Test] + public void EnsureCurrencyDataFeedForCryptoCurrency_CryptoFuturesFirst_When_dYdX() + { + var book = new CashBook + { + {Currencies.USD, new Cash(Currencies.USD, 100, 1) }, + {"BTC", new Cash("BTC", 100, 6000) }, + {"ETH", new Cash("ETH", 100, 290) } + }; + + var subscriptions = new SubscriptionManager(NullTimeKeeper.Instance); + var dataManager = new DataManagerStub(TimeKeeper); + subscriptions.SetDataManager(dataManager); + var securities = new SecurityManager(TimeKeeper); + + var marketMapWithdYdX = MarketMap.ToDictionary(); + marketMapWithdYdX[SecurityType.CryptoFuture] = Market.dYdX; + + book.EnsureCurrencyDataFeeds(securities, subscriptions, marketMapWithdYdX, SecurityChanges.None, dataManager.SecurityService); + + var symbols = dataManager.SubscriptionManagerSubscriptions.Select(sdc => sdc.Symbol).ToHashSet(); + + Assert.IsTrue(symbols.Contains(Symbol.Create("BTCUSD", SecurityType.CryptoFuture, Market.dYdX))); + Assert.IsTrue(symbols.Contains(Symbol.Create("ETHUSD", SecurityType.CryptoFuture, Market.dYdX))); + + foreach (var subscription in subscriptions.Subscriptions) + { + Assert.AreEqual(subscription.Symbol.SecurityType, SecurityType.CryptoFuture); + } + } + [Test] public void UpdateModifiesConversionRateAsInvertedValue() { From 3fa700e4506f821ea2237b5cbe9ceadf60d80ed5 Mon Sep 17 00:00:00 2001 From: yyxxddjj <2505553080@qq.com> Date: Thu, 1 Jan 2026 03:02:03 +0800 Subject: [PATCH 072/103] New Feature: Implement Covariance Indicator #6982 (#9144) * Implements Covariance as Lean Indicator * Add COV helper method and fix AcceptsVolumeRenkoBarsAsInput test * Fix AcceptsRenkoBarsAsInput test to use smaller period for faster execution * Fix slow Renko tests by limiting data processed to 50 rows --- Algorithm/QCAlgorithm.Indicators.cs | 20 + Indicators/Covariance.cs | 134 + Tests/Indicators/CovarianceTests.cs | 291 ++ Tests/QuantConnect.Tests.csproj | 3 + Tests/TestData/spy_qqq_cov.csv | 7425 +++++++++++++++++++++++++++ 5 files changed, 7873 insertions(+) create mode 100644 Indicators/Covariance.cs create mode 100644 Tests/Indicators/CovarianceTests.cs create mode 100644 Tests/TestData/spy_qqq_cov.csv diff --git a/Algorithm/QCAlgorithm.Indicators.cs b/Algorithm/QCAlgorithm.Indicators.cs index f17ea893390a..2662f7de3eeb 100644 --- a/Algorithm/QCAlgorithm.Indicators.cs +++ b/Algorithm/QCAlgorithm.Indicators.cs @@ -490,6 +490,26 @@ public Correlation C(Symbol target, Symbol reference, int period, CorrelationTyp return correlation; } + /// + /// Creates a Covariance indicator for the given target symbol in relation with the reference used. + /// The indicator will be automatically updated on the given resolution. + /// + /// The target symbol whose Covariance value we want + /// The reference symbol to compare with the target symbol + /// The period of the Covariance indicator + /// The resolution + /// Selects a value from the BaseData to send into the indicator, if null defaults to casting the input value to a TradeBar + /// The Covariance indicator for the given parameters + [DocumentationAttribute(Indicators)] + public Covariance COV(Symbol target, Symbol reference, int period, Resolution? resolution = null, Func selector = null) + { + var name = CreateIndicatorName(QuantConnect.Symbol.None, $"COV({period})", resolution); + var covariance = new Covariance(name, target, reference, period); + InitializeIndicator(covariance, resolution, selector, target, reference); + + return covariance; + } + /// /// Creates a new CommodityChannelIndex indicator. The indicator will be automatically /// updated on the given resolution. diff --git a/Indicators/Covariance.cs b/Indicators/Covariance.cs new file mode 100644 index 000000000000..ee3a85a003cf --- /dev/null +++ b/Indicators/Covariance.cs @@ -0,0 +1,134 @@ +/* + * 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 QuantConnect.Data.Market; +using MathNet.Numerics.Statistics; + +namespace QuantConnect.Indicators +{ + /// + /// This indicator computes the Covariance of two assets using the given Look-Back period. + /// The Covariance of two assets is a measure of their co-movement. + /// + public class Covariance : DualSymbolIndicator + { + /// + /// RollingWindow of returns of the target symbol in the given period + /// + private readonly RollingWindow _targetReturns; + + /// + /// RollingWindow of returns of the reference symbol in the given period + /// + private readonly RollingWindow _referenceReturns; + + /// + /// Gets a flag indicating when the indicator is ready and fully initialized + /// + public override bool IsReady => _targetReturns.IsReady && _referenceReturns.IsReady; + + /// + /// Creates a new Covariance indicator with the specified name, target, reference, + /// and period values + /// + /// The name of this indicator + /// The target symbol of this indicator + /// The period of this indicator + /// The reference symbol of this indicator + public Covariance(string name, Symbol targetSymbol, Symbol referenceSymbol, int period) + : base(name, targetSymbol, referenceSymbol, 2) + { + // Assert the period is greater than two, otherwise the covariance can not be computed + if (period < 2) + { + throw new ArgumentException($"Period parameter for Covariance indicator must be greater than 2 but was {period}."); + } + + _targetReturns = new RollingWindow(period); + _referenceReturns = new RollingWindow(period); + WarmUpPeriod += (period - 2) + 1; + } + + /// + /// Creates a new Covariance indicator with the specified target, reference, + /// and period values + /// + /// The target symbol of this indicator + /// The period of this indicator + /// The reference symbol of this indicator + public Covariance(Symbol targetSymbol, Symbol referenceSymbol, int period) + : this($"COV({period})", targetSymbol, referenceSymbol, period) + { + } + + /// + /// Creates a new Covariance indicator with the specified name, period, target and + /// reference values + /// + /// The name of this indicator + /// The period of this indicator + /// The target symbol of this indicator + /// The reference symbol of this indicator + /// Constructor overload for backward compatibility. + public Covariance(string name, int period, Symbol targetSymbol, Symbol referenceSymbol) + : this(name, targetSymbol, referenceSymbol, period) + { + } + + /// + /// Computes the returns with the new given data point and the last given data point + /// + /// The collection of data points from which we want + /// to compute the return + /// The returns with the new given data point + private static double GetNewReturn(IReadOnlyWindow rollingWindow) + { + return (double)(rollingWindow[0].Close.SafeDivision(rollingWindow[1].Close) - 1); + } + + /// + /// Computes the covariance value of the target in relation with the reference + /// using the target and reference returns + /// + protected override decimal ComputeIndicator() + { + if (TargetDataPoints.IsReady) + { + _targetReturns.Add(GetNewReturn(TargetDataPoints)); + } + + if (ReferenceDataPoints.IsReady) + { + _referenceReturns.Add(GetNewReturn(ReferenceDataPoints)); + } + + var covarianceComputed = _targetReturns.Covariance(_referenceReturns); + + // Avoid division with NaN or by zero + return (decimal)(!covarianceComputed.IsNaNOrZero() ? covarianceComputed : 0); + } + + /// + /// Resets this indicator to its initial state + /// + public override void Reset() + { + _targetReturns.Reset(); + _referenceReturns.Reset(); + base.Reset(); + } + } +} diff --git a/Tests/Indicators/CovarianceTests.cs b/Tests/Indicators/CovarianceTests.cs new file mode 100644 index 000000000000..32981af7f30a --- /dev/null +++ b/Tests/Indicators/CovarianceTests.cs @@ -0,0 +1,291 @@ +/* + * 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 NUnit.Framework; +using QuantConnect.Data.Consolidators; +using QuantConnect.Data.Market; +using QuantConnect.Indicators; +using System; +using System.Collections.Generic; +using System.Linq; +using MathNet.Numerics.Statistics; +using static QuantConnect.Tests.Indicators.TestHelper; + +namespace QuantConnect.Tests.Indicators +{ + [TestFixture] + public class CovarianceTests : CommonIndicatorTests + { + protected override string TestFileName => "spy_qqq_cov.csv"; + + protected override string TestColumnName => "Covariance"; + + private DateTime _reference = new DateTime(2020, 1, 1); + + protected override IndicatorBase CreateIndicator() + { + Symbol symbolA; + Symbol symbolB; + if (SymbolList.Count > 1) + { + symbolA = SymbolList[0]; + symbolB = SymbolList[1]; + } + else + { + symbolA = Symbol.Create("SPY", SecurityType.Equity, Market.USA); + symbolB = Symbol.Create("QQQ", SecurityType.Equity, Market.USA); + } + var indicator = new Covariance("testCovarianceIndicator", symbolA, symbolB, 252); + return indicator; + } + + protected override List GetSymbols() + { + var QQQ = Symbol.Create("QQQ", SecurityType.Equity, Market.USA); + return [Symbols.SPY, QQQ]; + } + + [Test] + public override void TimeMovesForward() + { + var indicator = new Covariance("testCovarianceIndicator", Symbols.IBM, Symbols.SPY, 5); + + for (var i = 10; i > 0; i--) + { + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, Low = 1, High = 2, Volume = 100, Close = 500, Time = _reference.AddDays(1 + i) }); + indicator.Update(new TradeBar() { Symbol = Symbols.SPY, Low = 1, High = 2, Volume = 100, Close = 500, Time = _reference.AddDays(1 + i) }); + } + + Assert.AreEqual(2, indicator.Samples); + } + + [Test] + public override void WarmsUpProperly() + { + var indicator = new Covariance("testCovarianceIndicator", Symbols.IBM, Symbols.SPY, 5); + var period = (indicator as IIndicatorWarmUpPeriodProvider)?.WarmUpPeriod; + + if (!period.HasValue) + { + Assert.Ignore($"{indicator.Name} is not IIndicatorWarmUpPeriodProvider"); + return; + } + + for (var i = 0; i < period.Value; i++) + { + indicator.Update(new TradeBar() { Symbol = Symbols.IBM, Low = 1, High = 2, Volume = 100, Close = 500, Time = _reference.AddDays(1 + i) }); + indicator.Update(new TradeBar() { Symbol = Symbols.SPY, Low = 1, High = 2, Volume = 100, Close = 500, Time = _reference.AddDays(1 + i) }); + } + + Assert.AreEqual(2 * period.Value, indicator.Samples); + } + + [Test] + public override void WorksWithLowValues() + { + SymbolList = GetSymbols(); + Symbol = SymbolList[1]; + base.WorksWithLowValues(); + } + + [Test] + public override void AcceptsRenkoBarsAsInput() + { + var indicator = new Covariance("testCovarianceIndicator", Symbols.SPY, Symbol.Create("QQQ", SecurityType.Equity, Market.USA), 5); + var firstRenkoConsolidator = new RenkoConsolidator(10m); + var secondRenkoConsolidator = new RenkoConsolidator(10m); + firstRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + secondRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + foreach (var parts in GetCsvFileStream(TestFileName).Take(50)) + { + var tradebar = parts.GetTradeBar(); + if (tradebar.Symbol.Value == "SPY") + { + firstRenkoConsolidator.Update(tradebar); + } + else + { + secondRenkoConsolidator.Update(tradebar); + } + } + + Assert.IsTrue(indicator.IsReady); + Assert.AreNotEqual(0, indicator.Samples); + firstRenkoConsolidator.Dispose(); + secondRenkoConsolidator.Dispose(); + } + + [Test] + public override void AcceptsVolumeRenkoBarsAsInput() + { + var indicator = new Covariance("testCovarianceIndicator", Symbols.SPY, Symbol.Create("QQQ", SecurityType.Equity, Market.USA), 5); + var firstVolumeRenkoConsolidator = new VolumeRenkoConsolidator(1000000); + var secondVolumeRenkoConsolidator = new VolumeRenkoConsolidator(1000000000); + firstVolumeRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + secondVolumeRenkoConsolidator.DataConsolidated += (sender, renkoBar) => + { + Assert.DoesNotThrow(() => indicator.Update(renkoBar)); + }; + + foreach (var parts in GetCsvFileStream(TestFileName).Take(50)) + { + var tradebar = parts.GetTradeBar(); + if (tradebar.Symbol.Value == "SPY") + { + firstVolumeRenkoConsolidator.Update(tradebar); + } + else + { + secondVolumeRenkoConsolidator.Update(tradebar); + } + } + + // With VolumeRenkoConsolidator(1000000000), limited data won't produce enough bars + // The test verifies the indicator accepts the input, not that it becomes ready + Assert.AreNotEqual(0, indicator.Samples); + firstVolumeRenkoConsolidator.Dispose(); + secondVolumeRenkoConsolidator.Dispose(); + } + + + [Test] + public void AcceptsQuoteBarsAsInput() + { + var indicator = new Covariance("testCovarianceIndicator", Symbols.IBM, Symbols.SPY, 5); + + for (var i = 10; i > 0; i--) + { + indicator.Update(new QuoteBar { Symbol = Symbols.IBM, Ask = new Bar(1, 2, 1, 500), Bid = new Bar(1, 2, 1, 500), Time = _reference.AddDays(1 + i) }); + indicator.Update(new QuoteBar { Symbol = Symbols.SPY, Ask = new Bar(1, 2, 1, 500), Time = _reference.AddDays(1 + i) }); + } + + Assert.AreEqual(2, indicator.Samples); + } + + [Test] + public void ValidateCovarianceCalculation() + { + var cov = new Covariance(Symbols.AAPL, Symbols.SPX, 3); + + var values = new List() + { + new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = 10, Time = _reference.AddDays(1), EndTime = _reference.AddDays(2) }, + new TradeBar() { Symbol = Symbols.SPX, Low = 1, High = 2, Volume = 100, Close = 35, Time = _reference.AddDays(1), EndTime = _reference.AddDays(2) }, + new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = 2, Time = _reference.AddDays(2),EndTime = _reference.AddDays(3) }, + new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = 2, Time = _reference.AddDays(2), EndTime = _reference.AddDays(3) }, + new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = 15, Time = _reference.AddDays(3), EndTime = _reference.AddDays(4) }, + new TradeBar() { Symbol = Symbols.SPX, Low = 1, High = 2, Volume = 100, Close = 80, Time = _reference.AddDays(3), EndTime = _reference.AddDays(4) }, + new TradeBar() { Symbol = Symbols.SPX, Low = 1, High = 2, Volume = 100, Close = 4, Time = _reference.AddDays(4), EndTime = _reference.AddDays(5) }, + new TradeBar() { Symbol = Symbols.SPX, Low = 1, High = 2, Volume = 100, Close = 4, Time = _reference.AddDays(4), EndTime = _reference.AddDays(5) }, + new TradeBar() { Symbol = Symbols.SPX, Low = 1, High = 2, Volume = 100, Close = 37, Time = _reference.AddDays(5), EndTime = _reference.AddDays(6) }, + new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = 90, Time = _reference.AddDays(5), EndTime = _reference.AddDays(6) }, + new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = 105, Time = _reference.AddDays(6), EndTime = _reference.AddDays(7) }, + new TradeBar() { Symbol = Symbols.SPX, Low = 1, High = 2, Volume = 100, Close = 302, Time = _reference.AddDays(6), EndTime = _reference.AddDays(7) }, + }; + + // Calculating covariance manually + var closeAAPL = new List() { 10, 15, 90, 105 }; + var closeSPX = new List() { 35, 80, 37, 302 }; + var priceChangesAAPL = new List(); + var priceChangesSPX = new List(); + for (int i = 1; i < 4; i++) + { + priceChangesAAPL.Add((closeAAPL[i] - closeAAPL[i - 1]) / closeAAPL[i - 1]); + priceChangesSPX.Add((closeSPX[i] - closeSPX[i - 1]) / closeSPX[i - 1]); + } + var expectedCovariance = priceChangesAAPL.Covariance(priceChangesSPX); + + // Calculating covariance using the indicator + for (int i = 0; i < values.Count; i++) + { + cov.Update(values[i]); + } + + Assert.AreEqual((decimal)expectedCovariance, cov.Current.Value); + } + + [Test] + public void CovarianceWithDifferentTimeZones() + { + var indicator = new Covariance(Symbols.SPY, Symbols.BTCUSD, 5); + + for (int i = 0; i < 10; i++) + { + var startTime = _reference.AddDays(1 + i); + var endTime = startTime.AddDays(1); + indicator.Update(new TradeBar() { Symbol = Symbols.SPY, Low = 1, High = 2, Volume = 100, Close = i + 1, Time = startTime, EndTime = endTime }); + indicator.Update(new TradeBar() { Symbol = Symbols.BTCUSD, Low = 1, High = 2, Volume = 100, Close = i + 1, Time = startTime, EndTime = endTime }); + } + // All close prices are increasing by constant amount, so returns are decreasing but positive. + // Both assets have same prices, so covariance should be equal to variance of either. + Assert.IsTrue(indicator.Current.Value > 0); + } + + [Test] + public override void TracksPreviousState() + { + var period = 5; + var indicator = new Covariance(Symbols.SPY, Symbols.AAPL, period); + var previousValue = indicator.Current.Value; + + // Update the indicator and verify the previous values + for (var i = 1; i < 2 * period; i++) + { + var startTime = _reference.AddDays(1 + i); + var endTime = startTime.AddDays(1); + indicator.Update(new TradeBar() { Symbol = Symbols.SPY, Low = 1, High = 2, Volume = 100, Close = 1000 + i * 10, Time = startTime, EndTime = endTime }); + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = 1000 + (i * 15), Time = startTime, EndTime = endTime }); + // Verify the previous value matches the indicator's previous value + Assert.AreEqual(previousValue, indicator.Previous.Value); + + // Update previousValue to the current value for the next iteration + previousValue = indicator.Current.Value; + } + } + + [Test] + public override void IndicatorShouldHaveSymbolAfterUpdates() + { + var period = 5; + var indicator = new Covariance(Symbols.SPY, Symbols.AAPL, period); + + for (var i = 0; i < 2 * period; i++) + { + var startTime = _reference.AddDays(1 + i); + var endTime = startTime.AddDays(1); + // Update with the first symbol (SPY) — indicator.Current.Symbol should reflect this update + indicator.Update(new TradeBar() { Symbol = Symbols.SPY, Low = 1, High = 2, Volume = 100, Close = 1000 + i * 10, Time = startTime, EndTime = endTime }); + Assert.AreEqual(Symbols.SPY, indicator.Current.Symbol); + + // Update with the first symbol (AAPL) — indicator.Current.Symbol should reflect this update + indicator.Update(new TradeBar() { Symbol = Symbols.AAPL, Low = 1, High = 2, Volume = 100, Close = 1000 + (i * 15), Time = startTime, EndTime = endTime }); + Assert.AreEqual(Symbols.AAPL, indicator.Current.Symbol); + } + } + } +} diff --git a/Tests/QuantConnect.Tests.csproj b/Tests/QuantConnect.Tests.csproj index 3e60ba77b040..9ec36875f36a 100644 --- a/Tests/QuantConnect.Tests.csproj +++ b/Tests/QuantConnect.Tests.csproj @@ -352,6 +352,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/Tests/TestData/spy_qqq_cov.csv b/Tests/TestData/spy_qqq_cov.csv new file mode 100644 index 000000000000..054163837e96 --- /dev/null +++ b/Tests/TestData/spy_qqq_cov.csv @@ -0,0 +1,7425 @@ +Symbol,Date,Open,High,Low,Close,Volume,Covariance +SPY,20000308 00:00,1364700,1378400,1350300,1370500,11415800,0.0002057897906935883 +QQQ,20000308 00:00,2220000,2240000,2125600,2222300,21500300,0.0002057897906935883 +SPY,20000309 00:00,1372500,1405900,1361300,1405900,5019700,0.00020870426821456632 +QQQ,20000309 00:00,2224400,2335200,2181900,2293800,15018800,0.00020870426821456632 +SPY,20000310 00:00,1401900,1420000,1395300,1400000,7541900,0.0002082728090128403 +QQQ,20000310 00:00,2297500,2328800,2270200,2292500,14530700,0.0002082728090128403 +SPY,20000313 00:00,1366900,1404700,1356900,1388800,10611500,0.00020837676611924576 +QQQ,20000313 00:00,2200000,2282500,2190600,2215000,18525700,0.00020837676611924576 +SPY,20000314 00:00,1392800,1400900,1361600,1365000,7658200,0.00021176204408761376 +QQQ,20000314 00:00,2255000,2267500,2110000,2114400,19050900,0.00021176204408761376 +SPY,20000315 00:00,1368800,1404400,1325000,1395000,9382100,0.00020909281628794096 +QQQ,20000315 00:00,2130000,2140000,2037500,2060000,25181900,0.00020909281628794096 +SPY,20000316 00:00,1416300,1466900,1408800,1463100,22099800,0.00021837867270050937 +QQQ,20000316 00:00,2107500,2185000,2020000,2175000,27753800,0.00021837867270050937 +SPY,20000317 00:00,1458100,1480000,1454400,1466900,9838300,0.0002167905741962602 +QQQ,20000317 00:00,2160000,2219800,2099400,2217300,15175600,0.0002167905741962602 +SPY,20000320 00:00,1468800,1473400,1447800,1459800,12307100,0.00022785280867019037 +QQQ,20000320 00:00,1110000,1130000,1060800,1068100,20882300,0.00022785280867019037 +SPY,20000321 00:00,1455300,1497200,1445000,1497200,12668600,0.000227764178964046 +QQQ,20000321 00:00,1061300,1115000,1035600,1111900,32973700,0.000227764178964046 +SPY,20000322 00:00,1495600,1508400,1486900,1500000,8026500,0.0002275034037793908 +QQQ,20000322 00:00,1135000,1159700,1111300,1146400,24162100,0.0002275034037793908 +SPY,20000323 00:00,1491600,1534700,1491600,1526300,10541800,0.00022622719496916138 +QQQ,20000323 00:00,1144800,1177500,1135600,1165000,18691200,0.00022622719496916138 +SPY,20000324 00:00,1528800,1557500,1517200,1532800,11529700,0.0002260477691249312 +QQQ,20000324 00:00,1174800,1205000,1150200,1172500,21882800,0.0002260477691249312 +SPY,20000327 00:00,1533800,1537800,1520000,1525000,8327400,0.00022297956874618786 +QQQ,20000327 00:00,1180000,1195000,1171300,1176900,11821900,0.00022297956874618786 +SPY,20000328 00:00,1512500,1529800,1507500,1510000,5989100,0.00022382148000659477 +QQQ,20000328 00:00,1169800,1178100,1145300,1149400,18001000,0.00022382148000659477 +SPY,20000329 00:00,1515600,1524800,1496600,1510300,6497400,0.00022299328117500125 +QQQ,20000329 00:00,1153800,1154400,1100000,1100200,27132300,0.00022299328117500125 +SPY,20000330 00:00,1501600,1519400,1471300,1488800,9297700,0.00022459096633241065 +QQQ,20000330 00:00,1072500,1127500,1035000,1064400,42153000,0.00022459096633241065 +SPY,20000331 00:00,1496300,1523100,1484400,1505600,8466800,0.00022280149584581578 +QQQ,20000331 00:00,1081400,1106300,1040000,1099800,31164500,0.00022280149584581578 +SPY,20000403 00:00,1501300,1510300,1486900,1507700,7490200,0.0002225129659515736 +QQQ,20000403 00:00,1077700,1091300,1007500,1021900,30483400,0.0002225129659515736 +SPY,20000404 00:00,1517500,1530000,1413900,1500000,19282600,0.0002231361257456741 +QQQ,20000404 00:00,1036300,1060000,883100,1010600,66719600,0.0002231361257456741 +SPY,20000405 00:00,1478800,1508100,1476300,1488800,8021800,0.00022276374026699593 +QQQ,20000405 00:00,975000,1039400,962500,1001300,36884700,0.00022276374026699593 +SPY,20000406 00:00,1502500,1516900,1490000,1503100,5914800,0.00022333847125507913 +QQQ,20000406 00:00,1023800,1038800,997500,1018100,29610300,0.00022333847125507913 +SPY,20000407 00:00,1515600,1521300,1505000,1517800,5785800,0.00022529248581676248 +QQQ,20000407 00:00,1041300,1070000,1026300,1070000,20359300,0.00022529248581676248 +SPY,20000410 00:00,1517500,1531100,1503100,1507800,9456200,0.00022661727551164342 +QQQ,20000410 00:00,1076300,1076900,1000000,1000000,26572700,0.00022661727551164342 +SPY,20000411 00:00,1500000,1516300,1483800,1500600,13823200,0.0002249537020859923 +QQQ,20000411 00:00,971300,1015000,951300,975000,34431600,0.0002249537020859923 +SPY,20000412 00:00,1503800,1511600,1465600,1466300,9981900,0.00023161984858609077 +QQQ,20000412 00:00,976300,987500,905000,907500,34016500,0.00023161984858609077 +SPY,20000413 00:00,1474700,1481600,1437800,1440000,11909800,0.00023279904119664042 +QQQ,20000413 00:00,928100,965000,883600,888800,46695000,0.00023279904119664042 +SPY,20000414 00:00,1426300,1428100,1335000,1358100,27304000,0.00024973939223846113 +QQQ,20000414 00:00,860600,885000,780000,802500,59724100,0.00024973939223846113 +SPY,20000417 00:00,1351900,1401300,1266900,1400600,23564600,0.00025974128900107797 +QQQ,20000417 00:00,780200,880000,780000,876300,55296400,0.00025974128900107797 +SPY,20000418 00:00,1405600,1442200,1397800,1442200,10593700,0.0002625915022163493 +QQQ,20000418 00:00,894800,926300,873800,925000,36234200,0.0002625915022163493 +SPY,20000419 00:00,1445000,1451300,1425300,1430000,6276600,0.00026125182950232473 +QQQ,20000419 00:00,925000,942500,891900,896900,27710800,0.00026125182950232473 +SPY,20000420 00:00,1435600,1439400,1423800,1433800,8187000,0.0002610742804525401 +QQQ,20000420 00:00,903800,909700,861900,873100,21119200,0.0002610742804525401 +SPY,20000424 00:00,1415000,1432800,1405000,1430000,12621000,0.0002612145777093793 +QQQ,20000424 00:00,834400,850000,798800,843800,30763800,0.0002612145777093793 +SPY,20000425 00:00,1446300,1479700,1444400,1478800,13812600,0.00027070939646440124 +QQQ,20000425 00:00,865000,902500,860000,901900,28058500,0.00027070939646440124 +SPY,20000426 00:00,1479700,1487500,1460000,1463800,7411100,0.0002710511061088578 +QQQ,20000426 00:00,906300,924200,872500,872500,25610400,0.0002710511061088578 +SPY,20000427 00:00,1430000,1473400,1430000,1465000,15325600,0.00027084670162265824 +QQQ,20000427 00:00,835000,975000,822500,922500,36393500,0.00027084670162265824 +SPY,20000428 00:00,1470000,1478600,1450600,1452200,8173500,0.000270137309381801 +QQQ,20000428 00:00,935600,947500,828900,942500,23397200,0.000270137309381801 +SPY,20000501 00:00,1465600,1484800,1436300,1471900,6737100,0.0002707309638195227 +QQQ,20000501 00:00,957500,968800,942500,957500,23529300,0.0002707309638195227 +SPY,20000502 00:00,1455000,1471300,1445000,1446300,8785100,0.0002733279917402526 +QQQ,20000502 00:00,948800,956300,905000,905000,19892700,0.0002733279917402526 +SPY,20000503 00:00,1440000,1440000,1397800,1416300,11442100,0.00027343563280416295 +QQQ,20000503 00:00,895000,902500,855200,889400,26339900,0.00027343563280416295 +SPY,20000504 00:00,1420000,1423600,1407500,1413100,5713300,0.00027184187395379203 +QQQ,20000504 00:00,890000,907500,873800,891300,16999400,0.00027184187395379203 +SPY,20000505 00:00,1410600,1440000,1409400,1433400,7416300,0.0002731565056529293 +QQQ,20000505 00:00,881300,923100,880300,920000,20170400,0.0002731565056529293 +SPY,20000508 00:00,1427500,1433800,1418400,1425300,4530300,0.0002742773782454335 +QQQ,20000508 00:00,905000,907500,880600,880600,13131400,0.0002742773782454335 +SPY,20000509 00:00,1430600,1434100,1402700,1416300,5299000,0.00027399755755408206 +QQQ,20000509 00:00,885000,891300,843100,861600,19798000,0.00027399755755408206 +SPY,20000510 00:00,1405000,1409700,1377500,1385900,9882100,0.0002787090284755059 +QQQ,20000510 00:00,843800,923000,807500,809800,33201800,0.0002787090284755059 +SPY,20000511 00:00,1401300,1415000,1391300,1411100,6838500,0.00028202250771199727 +QQQ,20000511 00:00,827500,845000,808800,845000,24141600,0.00028202250771199727 +SPY,20000512 00:00,1418100,1434700,1415600,1424100,5805300,0.0002803838337035779 +QQQ,20000512 00:00,853800,875600,840000,848100,17512200,0.0002803838337035779 +SPY,20000515 00:00,1427500,1455900,1420000,1453800,4193500,0.00028339696930671605 +QQQ,20000515 00:00,848100,879400,826300,879400,18046800,0.00028339696930671605 +SPY,20000516 00:00,1465600,1477200,1453100,1470000,7907600,0.00028476563206841895 +QQQ,20000516 00:00,900000,915000,880600,911300,23360000,0.00028476563206841895 +SPY,20000517 00:00,1456900,1461900,1444700,1452500,5507300,0.0002856199144820231 +QQQ,20000517 00:00,892500,905000,877500,887500,19724600,0.0002856199144820231 +SPY,20000518 00:00,1456300,1463100,1439400,1440600,4718200,0.0002864173905886634 +QQQ,20000518 00:00,890000,898800,855600,856300,18813400,0.0002864173905886634 +SPY,20000519 00:00,1425600,1432300,1404100,1408800,5731800,0.00029033584080430906 +QQQ,20000519 00:00,837500,850000,813100,815900,27104000,0.00029033584080430906 +SPY,20000522 00:00,1412500,1414700,1370000,1404100,10008900,0.0002884685011059809 +QQQ,20000522 00:00,816300,818800,755800,816300,44383800,0.0002884685011059809 +SPY,20000523 00:00,1404400,1408100,1375600,1375600,7422700,0.0002923202178742487 +QQQ,20000523 00:00,813800,857800,753100,757500,30734700,0.0002923202178742487 +SPY,20000524 00:00,1380000,1406900,1276300,1404100,10710100,0.0002948209213410198 +QQQ,20000524 00:00,750000,800000,722500,794400,49939800,0.0002948209213410198 +SPY,20000525 00:00,1406900,1418100,1377200,1388800,7101900,0.00029580621473988627 +QQQ,20000525 00:00,802500,822500,765000,775600,29384200,0.00029580621473988627 +SPY,20000526 00:00,1388100,1396900,1373300,1383100,4605900,0.0002946350815670895 +QQQ,20000526 00:00,777500,792500,722700,775200,17858000,0.0002946350815670895 +SPY,20000530 00:00,1400000,1426900,1394700,1426300,5037500,0.0003058656993286252 +QQQ,20000530 00:00,800000,852500,790000,850000,31747000,0.0003058656993286252 +SPY,20000531 00:00,1425600,1440000,1420900,1424100,5541700,0.00030617730625650066 +QQQ,20000531 00:00,844700,866700,827500,827500,29489300,0.00030617730625650066 +SPY,20000601 00:00,1436900,1453800,1430000,1451700,8473400,0.00031082005580203325 +QQQ,20000601 00:00,851900,883800,831900,876300,28593900,0.00031082005580203325 +SPY,20000602 00:00,1489400,1490900,1474800,1480900,8538300,0.00031415440365337253 +QQQ,20000602 00:00,926300,1083100,825000,933800,31332700,0.00031415440365337253 +SPY,20000605 00:00,1474700,1482200,1468800,1472500,6629400,0.00031326602370802424 +QQQ,20000605 00:00,922500,953100,918800,930600,23338800,0.00031326602370802424 +SPY,20000606 00:00,1466300,1477800,1459100,1463400,4847700,0.00031242556722713166 +QQQ,20000606 00:00,931900,950000,910000,911300,22103400,0.00031242556722713166 +SPY,20000607 00:00,1466300,1480000,1460000,1475600,4402800,0.000313061687715948 +QQQ,20000607 00:00,915600,931300,895600,929400,22159300,0.000313061687715948 +SPY,20000608 00:00,1475000,1477500,1460600,1465600,5458000,0.00031250838443407905 +QQQ,20000608 00:00,946300,948800,916300,927500,19062800,0.00031250838443407905 +SPY,20000609 00:00,1475000,1479700,1455300,1463400,2865600,0.00031184938566171584 +QQQ,20000609 00:00,947500,949200,925600,936900,16509900,0.00031184938566171584 +SPY,20000612 00:00,1469700,1469700,1451300,1452800,3294200,0.00031272008571610126 +QQQ,20000612 00:00,943100,943100,908800,909800,15911800,0.00031272008571610126 +SPY,20000613 00:00,1448100,1477500,1446300,1474700,6277200,0.00031428458989954795 +QQQ,20000613 00:00,905000,938800,893600,938800,24877300,0.00031428458989954795 +SPY,20000614 00:00,1482500,1488800,1471900,1475000,6227300,0.00030977132471721945 +QQQ,20000614 00:00,948800,948800,913800,917500,19879200,0.00030977132471721945 +SPY,20000615 00:00,1481300,1487500,1468400,1482500,5566200,0.0003098285734813166 +QQQ,20000615 00:00,918800,938100,817700,935600,18513300,0.0003098285734813166 +SPY,20000616 00:00,1483100,1483100,1458800,1468800,5010200,0.00030949151189757474 +QQQ,20000616 00:00,947500,959400,930600,946300,21969800,0.00030949151189757474 +SPY,20000619 00:00,1464700,1491600,1462500,1486600,4748700,0.0003106725258460525 +QQQ,20000619 00:00,940200,989400,926900,981300,19736000,0.0003106725258460525 +SPY,20000620 00:00,1481900,1488800,1470000,1478100,8314200,0.0003095932377397381 +QQQ,20000620 00:00,982500,996900,971900,982500,20659300,0.0003095932377397381 +SPY,20000621 00:00,1469400,1484400,1468900,1479500,2953900,0.0003097810635050923 +QQQ,20000621 00:00,968100,997200,966900,989400,20680400,0.0003097810635050923 +SPY,20000622 00:00,1475600,1476900,1450000,1455300,7127200,0.00031116441726990077 +QQQ,20000622 00:00,986300,996300,950000,952500,21247800,0.00031116441726990077 +SPY,20000623 00:00,1458100,1461300,1438800,1443800,4198700,0.00031238521574299735 +QQQ,20000623 00:00,950000,955000,914400,918100,24185800,0.00031238521574299735 +SPY,20000626 00:00,1453800,1462500,1448800,1457500,4770700,0.00031196219234383584 +QQQ,20000626 00:00,930600,944200,920000,939400,22647600,0.00031196219234383584 +SPY,20000627 00:00,1459800,1467200,1453100,1455600,3585500,0.0003112372841605741 +QQQ,20000627 00:00,937700,950600,921300,926600,14657300,0.0003112372841605741 +SPY,20000628 00:00,1456300,1469800,1452200,1456300,5585500,0.0003107029863154296 +QQQ,20000628 00:00,929800,955000,925000,941300,18793000,0.0003107029863154296 +SPY,20000629 00:00,1447500,1457500,1435200,1444400,6081000,0.00031136641117078046 +QQQ,20000629 00:00,929400,933800,906300,916300,21115000,0.00031136641117078046 +SPY,20000630 00:00,1439400,1455300,1438900,1453800,6673700,0.0003115876536620335 +QQQ,20000630 00:00,918100,939500,913100,937500,14225300,0.0003115876536620335 +SPY,20000703 00:00,1454400,1474400,1451600,1472800,1436600,0.00031225060806887496 +QQQ,20000703 00:00,935000,952500,932500,952500,5219200,0.00031225060806887496 +SPY,20000705 00:00,1463800,1466600,1443800,1450900,2447900,0.00031462192779804 +QQQ,20000705 00:00,936300,939700,908800,912500,15877900,0.00031462192779804 +SPY,20000706 00:00,1449400,1464700,1442200,1458800,5394400,0.00031536458657978057 +QQQ,20000706 00:00,915600,947500,900600,945000,22878900,0.00031536458657978057 +SPY,20000707 00:00,1466900,1487800,1462200,1480900,2796000,0.000316074135626598 +QQQ,20000707 00:00,950000,979700,930000,958800,16126000,0.000316074135626598 +SPY,20000710 00:00,1478800,1489100,1476300,1479700,2468600,0.0003161366658872676 +QQQ,20000710 00:00,946900,958800,921300,941900,12520300,0.0003161366658872676 +SPY,20000711 00:00,1474700,1491300,1471600,1483800,5233700,0.00031595864333202933 +QQQ,20000711 00:00,940600,957500,928100,935000,14307200,0.00031595864333202933 +SPY,20000712 00:00,1492800,1501300,1486900,1495900,5507100,0.0003170304329392114 +QQQ,20000712 00:00,954400,978800,942500,971400,17877700,0.0003170304329392114 +SPY,20000713 00:00,1499800,1503800,1491900,1498800,5108200,0.00031683665732945814 +QQQ,20000713 00:00,979400,999700,943100,987500,19184000,0.00031683665732945814 +SPY,20000714 00:00,1504400,1512500,1496700,1508800,5512500,0.00031712326720155314 +QQQ,20000714 00:00,1002500,1015600,988100,1008600,16775700,0.00031712326720155314 +SPY,20000717 00:00,1509800,1519800,1506900,1510600,3566600,0.00031673804939913035 +QQQ,20000717 00:00,1009400,1020600,916100,1015200,12798100,0.00031673804939913035 +SPY,20000718 00:00,1506300,1506300,1493400,1496900,3678300,0.0003141832558032124 +QQQ,20000718 00:00,1003800,1009700,983600,990000,20309800,0.0003141832558032124 +SPY,20000719 00:00,1494700,1499100,1482500,1484400,8163200,0.00031523056568306284 +QQQ,20000719 00:00,983100,989400,878300,960600,21249600,0.00031523056568306284 +SPY,20000720 00:00,1490000,1505000,1488100,1498100,4139400,0.0003148075322967518 +QQQ,20000720 00:00,978800,998800,873900,995000,19233600,0.0003148075322967518 +SPY,20000721 00:00,1497500,1497500,1478800,1482500,5062300,0.0003157238978881878 +QQQ,20000721 00:00,984400,995200,971400,976900,13855200,0.0003157238978881878 +SPY,20000724 00:00,1481300,1488600,1465600,1466600,5520000,0.0003164847926950686 +QQQ,20000724 00:00,979400,990000,943100,946300,18282200,0.0003164847926950686 +SPY,20000725 00:00,1477500,1478400,1467800,1474400,4247400,0.0003155940595779845 +QQQ,20000725 00:00,956300,967300,938100,962500,19678200,0.0003155940595779845 +SPY,20000726 00:00,1469700,1471600,1456400,1461600,11008600,0.0003158990363293526 +QQQ,20000726 00:00,955000,961300,932500,953100,20265800,0.0003158990363293526 +SPY,20000727 00:00,1459400,1466300,1446900,1455000,7169400,0.00031460778450750063 +QQQ,20000727 00:00,939400,950600,916300,919800,25065100,0.00031460778450750063 +SPY,20000728 00:00,1457200,1459100,1415200,1422500,5674800,0.00031976946956194496 +QQQ,20000728 00:00,921900,928800,860000,867500,36466800,0.00031976946956194496 +SPY,20000731 00:00,1429400,1441300,1420600,1434400,4837700,0.00032097312622650744 +QQQ,20000731 00:00,876300,901300,857200,901300,28653800,0.00032097312622650744 +SPY,20000801 00:00,1436300,1447200,1431300,1440000,3742800,0.00032045257742645473 +QQQ,20000801 00:00,898100,998300,874800,879800,15374700,0.00032045257742645473 +SPY,20000802 00:00,1438800,1454100,1436300,1442700,7275200,0.00031955213181950395 +QQQ,20000802 00:00,878800,903900,868800,870900,22761400,0.00031955213181950395 +SPY,20000803 00:00,1428800,1458100,1426300,1455000,4363300,0.0003204707094310574 +QQQ,20000803 00:00,842500,905000,793100,905000,35322400,0.0003204707094310574 +SPY,20000804 00:00,1463100,1467200,1454100,1465300,3492400,0.0003199178210077373 +QQQ,20000804 00:00,920000,927700,891300,902500,21894100,0.0003199178210077373 +SPY,20000807 00:00,1467200,1484400,1463800,1481300,4067300,0.00032098064309183494 +QQQ,20000807 00:00,908800,930300,902500,927000,14571900,0.00032098064309183494 +SPY,20000808 00:00,1475000,1488100,1475000,1485600,3161200,0.00032030691784076234 +QQQ,20000808 00:00,920600,934400,915000,920600,14047000,0.00032030691784076234 +SPY,20000809 00:00,1491400,1492200,1473800,1476900,5205000,0.0003178886050642728 +QQQ,20000809 00:00,936900,944400,920000,924700,17560500,0.0003178886050642728 +SPY,20000810 00:00,1475300,1478600,1462800,1465600,3987200,0.0003186502603766401 +QQQ,20000810 00:00,918100,922300,896900,897500,15177500,0.0003186502603766401 +SPY,20000811 00:00,1466300,1480000,1455600,1474400,4739000,0.0003147879053185288 +QQQ,20000811 00:00,892500,911100,878800,909400,20686000,0.0003147879053185288 +SPY,20000814 00:00,1477800,1495000,1470600,1493800,2682600,0.00031583530665916474 +QQQ,20000814 00:00,913800,929700,902000,928800,11959600,0.00031583530665916474 +SPY,20000815 00:00,1493400,1498100,1473400,1490200,4731200,0.000315479481310612 +QQQ,20000815 00:00,927500,939800,920000,929800,13981800,0.000315479481310612 +SPY,20000816 00:00,1493100,1499400,1478400,1483800,4843200,0.00031526255868359376 +QQQ,20000816 00:00,934400,946900,920000,928900,15201600,0.00031526255868359376 +SPY,20000817 00:00,1486900,1504400,1483400,1499400,5401400,0.0003159893532169637 +QQQ,20000817 00:00,929400,958800,928800,955600,14138600,0.0003159893532169637 +SPY,20000818 00:00,1503800,1503800,1491600,1496700,4350300,0.0003157236407712105 +QQQ,20000818 00:00,959400,966300,946900,949400,14175900,0.0003157236407712105 +SPY,20000821 00:00,1500300,1507200,1494100,1503600,2058200,0.000313550775567859 +QQQ,20000821 00:00,960000,968600,943800,955200,13089000,0.000313550775567859 +SPY,20000822 00:00,1505600,1513100,1500900,1502300,2831300,0.00031354174751822774 +QQQ,20000822 00:00,960000,973600,954400,955000,14501500,0.00031354174751822774 +SPY,20000823 00:00,1498100,1512800,1491900,1509100,5518000,0.0003125432970776198 +QQQ,20000823 00:00,946900,974400,938100,972200,21260400,0.0003125432970776198 +SPY,20000824 00:00,1511600,1515500,1500900,1514400,4636200,0.0003116986387379019 +QQQ,20000824 00:00,974400,986900,960600,985900,13294500,0.0003116986387379019 +SPY,20000825 00:00,1511600,1516300,1509400,1510900,2700900,0.0003114619360540849 +QQQ,20000825 00:00,984800,999500,968800,981300,11603100,0.0003114619360540849 +SPY,20000828 00:00,1512500,1529100,1512500,1517800,5721600,0.0003100898718769409 +QQQ,20000828 00:00,982500,998400,979400,986900,12159300,0.0003100898718769409 +SPY,20000829 00:00,1514400,1518800,1509100,1515000,3375600,0.0003101953577606443 +QQQ,20000829 00:00,986300,995500,978400,986400,11256200,0.0003101953577606443 +SPY,20000830 00:00,1513100,1517800,1504500,1506300,3854400,0.0003099788755814893 +QQQ,20000830 00:00,983100,995000,977700,991700,9802300,0.0003099788755814893 +SPY,20000831 00:00,1510600,1530900,1508400,1522500,5246300,0.0003108364918112291 +QQQ,20000831 00:00,996300,1018100,988800,1017000,15360900,0.0003108364918112291 +SPY,20000901 00:00,1532500,1535900,1520000,1525600,2983800,0.0003056014900180391 +QQQ,20000901 00:00,1030000,1039700,1011900,1023100,13990200,0.0003056014900180391 +SPY,20000905 00:00,1518800,1522000,1508100,1512500,3202700,0.00030649289093102465 +QQQ,20000905 00:00,1016300,1035600,994200,996100,16152400,0.00030649289093102465 +SPY,20000906 00:00,1511900,1519500,1496900,1496900,3930600,0.00030779647897849526 +QQQ,20000906 00:00,992500,994800,957500,958800,21246800,0.00030779647897849526 +SPY,20000907 00:00,1502500,1510800,1498300,1507500,4187500,0.00030845931050426767 +QQQ,20000907 00:00,968100,994200,965600,986300,16257200,0.00030845931050426767 +SPY,20000908 00:00,1502800,1505000,1493300,1497500,3067500,0.0003093350500505445 +QQQ,20000908 00:00,977700,980000,926300,953100,23168400,0.0003093350500505445 +SPY,20000911 00:00,1497500,1511900,1486900,1494700,3726500,0.0003092379701079838 +QQQ,20000911 00:00,945000,977500,920000,926300,26901000,0.0003092379701079838 +SPY,20000912 00:00,1497500,1502500,1484400,1487500,4628300,0.0003097550623341752 +QQQ,20000912 00:00,935000,946900,908400,915900,33512800,0.0003097550623341752 +SPY,20000913 00:00,1480000,1498400,1476600,1488800,4335400,0.00030859234000278163 +QQQ,20000913 00:00,902500,937500,850000,933100,33216900,0.00030859234000278163 +SPY,20000914 00:00,1498800,1499400,1481600,1485300,3442900,0.0003085980041355626 +QQQ,20000914 00:00,952500,962500,926400,932300,27741100,0.0003085980041355626 +SPY,20000915 00:00,1481900,1482500,1460300,1467500,3880800,0.000308473970021707 +QQQ,20000915 00:00,931300,936300,906900,915800,23981000,0.000308473970021707 +SPY,20000918 00:00,1463800,1469700,1442000,1446900,4960300,0.00030979392283386525 +QQQ,20000918 00:00,918100,942500,880000,895000,28672900,0.00030979392283386525 +SPY,20000919 00:00,1451300,1463100,1447000,1460800,6372400,0.00030936965321997934 +QQQ,20000919 00:00,907500,966300,898800,935600,27215200,0.00030936965321997934 +SPY,20000920 00:00,1456900,1460300,1431600,1452200,6594700,0.0003090531319472296 +QQQ,20000920 00:00,933800,972500,913100,945000,32819400,0.0003090531319472296 +SPY,20000921 00:00,1444700,1455600,1437500,1450300,4911900,0.00030491386408881604 +QQQ,20000921 00:00,937500,949700,920600,926300,23885500,0.00030491386408881604 +SPY,20000922 00:00,1426300,1451600,1421300,1451600,7241600,0.000304908918804894 +QQQ,20000922 00:00,876300,977500,875000,922000,33321300,0.000304908918804894 +SPY,20000925 00:00,1459400,1460600,1437200,1441300,9551700,0.0003054532006671098 +QQQ,20000925 00:00,936300,942500,900600,905000,19947900,0.0003054532006671098 +SPY,20000926 00:00,1443800,1450000,1426300,1428900,4889400,0.0003059389326322272 +QQQ,20000926 00:00,907700,927500,889800,893800,25171000,0.0003059389326322272 +SPY,20000927 00:00,1435600,1439700,1421300,1428100,5471600,0.00030517398434313993 +QQQ,20000927 00:00,906300,911900,880000,891300,28443400,0.00030517398434313993 +SPY,20000928 00:00,1431900,1463300,1428900,1461900,6598400,0.00030872014222630534 +QQQ,20000928 00:00,887200,930000,887200,928100,28626400,0.00030872014222630534 +SPY,20000929 00:00,1454700,1459700,1437500,1437800,7669100,0.0003114228448456501 +QQQ,20000929 00:00,920000,921300,888800,891300,26376000,0.0003114228448456501 +SPY,20001002 00:00,1442800,1449100,1431400,1438100,5182100,0.0003096986028308079 +QQQ,20001002 00:00,902500,902500,860000,863000,24413800,0.0003096986028308079 +SPY,20001003 00:00,1445300,1457500,1425300,1426300,8184100,0.00031082375891676467 +QQQ,20001003 00:00,880600,888100,835000,836300,35169700,0.00031082375891676467 +SPY,20001004 00:00,1428800,1442500,1417500,1435800,5717600,0.0003101711807256474 +QQQ,20001004 00:00,835000,868600,821300,860000,37322200,0.0003101711807256474 +SPY,20001005 00:00,1434100,1448400,1433100,1438800,4038600,0.00031019624573311934 +QQQ,20001005 00:00,852500,871900,845600,855000,23416600,0.00031019624573311934 +SPY,20001006 00:00,1438800,1446400,1397500,1410000,9717900,0.000312332397072015 +QQQ,20001006 00:00,855600,865600,811300,827300,35636600,0.000312332397072015 +SPY,20001009 00:00,1413100,1413100,1393800,1404400,4323000,0.0003122916859638111 +QQQ,20001009 00:00,825600,838100,793800,828100,28668200,0.0003122916859638111 +SPY,20001010 00:00,1400900,1412500,1385600,1388800,5724500,0.00031281833036486185 +QQQ,20001010 00:00,818100,833100,791300,795000,33051500,0.00031281833036486185 +SPY,20001011 00:00,1376300,1386300,1351300,1365600,10570900,0.00031212882679222323 +QQQ,20001011 00:00,768800,804500,731900,774800,48166600,0.00031212882679222323 +SPY,20001012 00:00,1372800,1433800,1327800,1331600,11288200,0.0003154759209394593 +QQQ,20001012 00:00,792500,795600,744100,748800,51753500,0.0003154759209394593 +SPY,20001013 00:00,1329400,1376600,1328800,1375600,10629900,0.000323812406324211 +QQQ,20001013 00:00,746900,815000,746300,814400,40653500,0.000323812406324211 +SPY,20001016 00:00,1374100,1390000,1366900,1374700,5407400,0.0003241644312071269 +QQQ,20001016 00:00,811300,823100,797500,810000,27298100,0.0003241644312071269 +SPY,20001017 00:00,1384400,1385600,1344100,1354800,7302200,0.000325400273349026 +QQQ,20001017 00:00,831300,831700,780000,793100,50132700,0.000325400273349026 +SPY,20001018 00:00,1326300,1361300,1301600,1344100,9962600,0.0003214056790114427 +QQQ,20001018 00:00,767500,811900,745600,784200,64129700,0.0003214056790114427 +SPY,20001019 00:00,1368400,1394500,1364400,1390500,8309100,0.0003327168650481591 +QQQ,20001019 00:00,823900,850000,814400,848300,46974100,0.0003327168650481591 +SPY,20001020 00:00,1383800,1411900,1383800,1398800,6603800,0.00033295597163188526 +QQQ,20001020 00:00,845000,878800,843900,860600,40117600,0.00033295597163188526 +SPY,20001023 00:00,1399400,1410300,1389400,1400000,5066000,0.00033291957062741797 +QQQ,20001023 00:00,861900,875000,841300,855000,28581000,0.00033291957062741797 +SPY,20001024 00:00,1409700,1419400,1390000,1401300,5115800,0.00033266405272788124 +QQQ,20001024 00:00,864400,870000,828900,838100,27862200,0.00033266405272788124 +SPY,20001025 00:00,1387500,1395600,1363900,1369200,7817300,0.0003395318314684742 +QQQ,20001025 00:00,812500,820000,768900,776900,47678700,0.0003395318314684742 +SPY,20001026 00:00,1371300,1376600,1340000,1367500,8644800,0.00033514060958450396 +QQQ,20001026 00:00,781900,800000,736300,790600,67672500,0.00033514060958450396 +SPY,20001027 00:00,1378800,1388400,1366300,1383800,9866200,0.0003329103616024484 +QQQ,20001027 00:00,808600,818600,774800,791300,50978000,0.0003329103616024484 +SPY,20001030 00:00,1384400,1410900,1381600,1402500,8510100,0.00033146810356485555 +QQQ,20001030 00:00,781900,798800,757000,770500,36014700,0.00033146810356485555 +SPY,20001031 00:00,1410200,1436900,1400600,1429700,8131100,0.0003363994975492287 +QQQ,20001031 00:00,780000,825600,778800,819400,44479100,0.0003363994975492287 +SPY,20001101 00:00,1422500,1432500,1412200,1424100,6349600,0.0003361954971807904 +QQQ,20001101 00:00,803100,828100,791900,806300,46031900,0.0003361954971807904 +SPY,20001102 00:00,1431600,1439100,1425200,1430300,4360600,0.00033629164835317855 +QQQ,20001102 00:00,821900,832500,810600,823900,26099400,0.00033629164835317855 +SPY,20001103 00:00,1434700,1437500,1423800,1431100,4853300,0.00033585316209278976 +QQQ,20001103 00:00,828800,839400,816400,830000,29681300,0.00033585316209278976 +SPY,20001106 00:00,1431600,1443000,1430300,1437000,3814400,0.00033549848022711675 +QQQ,20001106 00:00,836300,849400,820000,822300,21860400,0.00033549848022711675 +SPY,20001107 00:00,1431400,1440000,1425600,1436600,5032700,0.0003351727333422488 +QQQ,20001107 00:00,814400,824700,800600,819100,23864100,0.0003351727333422488 +SPY,20001108 00:00,1440600,1440600,1410300,1412500,5889100,0.000339357093848987 +QQQ,20001108 00:00,821300,822500,763100,763100,37279500,0.000339357093848987 +SPY,20001109 00:00,1400000,1412200,1372500,1404100,9700200,0.0003389507484286183 +QQQ,20001109 00:00,747500,769400,730000,763100,64666200,0.0003389507484286183 +SPY,20001110 00:00,1390000,1394700,1368800,1369700,8316000,0.00034375472519840343 +QQQ,20001110 00:00,742500,756900,720000,720000,46913100,0.00034375472519840343 +SPY,20001113 00:00,1356300,1369800,1330200,1353800,16883900,0.00034433233421107465 +QQQ,20001113 00:00,709500,741900,682700,710000,73766200,0.00034433233421107465 +SPY,20001114 00:00,1374700,1396300,1370000,1387500,7432300,0.00034875407164803186 +QQQ,20001114 00:00,730000,760000,727500,757000,44479400,0.00034875407164803186 +SPY,20001115 00:00,1390600,1401100,1377500,1391300,7877100,0.0003485533266025911 +QQQ,20001115 00:00,755600,780600,748000,768100,37421900,0.0003485533266025911 +SPY,20001116 00:00,1385800,1398800,1373100,1377700,6418000,0.000349318519487347 +QQQ,20001116 00:00,753800,770000,723800,731300,32917600,0.000349318519487347 +SPY,20001117 00:00,1373100,1390000,1357500,1374700,6429800,0.00034933722276092876 +QQQ,20001117 00:00,731900,751900,710000,736100,48455800,0.00034933722276092876 +SPY,20001120 00:00,1357500,1363800,1343800,1346900,5017900,0.00035343757020665106 +QQQ,20001120 00:00,709400,720600,690000,697300,46531500,0.00035343757020665106 +SPY,20001121 00:00,1348800,1361900,1335200,1351600,4344600,0.00035281740463828756 +QQQ,20001121 00:00,701900,715000,684400,696600,41578500,0.00035281740463828756 +SPY,20001122 00:00,1343400,1348800,1324400,1325000,5285300,0.0003547182103607752 +QQQ,20001122 00:00,684400,701300,666300,667500,56425200,0.0003547182103607752 +SPY,20001124 00:00,1336300,1349700,1335600,1348400,3412100,0.0003588591375854215 +QQQ,20001124 00:00,683800,706300,681700,704400,23193800,0.0003588591375854215 +SPY,20001127 00:00,1364700,1366900,1353100,1355000,5997600,0.00035837606039722963 +QQQ,20001127 00:00,725600,729400,687500,691400,35971200,0.00035837606039722963 +SPY,20001128 00:00,1351300,1365900,1338100,1338100,4190100,0.00035946288772887805 +QQQ,20001128 00:00,689400,716900,653100,654800,48160300,0.00035946288772887805 +SPY,20001129 00:00,1343800,1359100,1332700,1346400,6534900,0.0003590642602717795 +QQQ,20001129 00:00,658100,667500,625000,650000,61390400,0.0003590642602717795 +SPY,20001130 00:00,1325000,1335000,1297500,1316300,10401100,0.0003612010489744782 +QQQ,20001130 00:00,617500,642500,600600,624700,75005000,0.0003612010489744782 +SPY,20001201 00:00,1331900,1340600,1310000,1318800,7233600,0.0003596289250338233 +QQQ,20001201 00:00,640600,667700,621300,636700,57421900,0.0003596289250338233 +SPY,20001204 00:00,1318800,1338800,1315000,1330000,6328000,0.00036011227425391233 +QQQ,20001204 00:00,641300,654400,617500,640000,46778200,0.00036011227425391233 +SPY,20001205 00:00,1348800,1381900,1344100,1381300,8270800,0.0003772860908053142 +QQQ,20001205 00:00,660600,710000,583100,709400,77330700,0.0003772860908053142 +SPY,20001206 00:00,1377800,1383400,1350300,1355300,12544800,0.00037893613673785625 +QQQ,20001206 00:00,705900,723000,675600,688100,62158200,0.00037893613673785625 +SPY,20001207 00:00,1348800,1358800,1343800,1349800,5966200,0.0003790970770558222 +QQQ,20001207 00:00,670000,689800,661300,678900,38431000,0.0003790970770558222 +SPY,20001208 00:00,1370600,1391300,1360900,1376600,8949000,0.0003835702738111675 +QQQ,20001208 00:00,710900,872500,697000,718900,59582400,0.0003835702738111675 +SPY,20001211 00:00,1373800,1488800,1367200,1386300,5943200,0.00038443474650810437 +QQQ,20001211 00:00,720600,747800,709500,741300,51124900,0.00038443474650810437 +SPY,20001212 00:00,1381900,1392500,1373800,1377500,4619700,0.0003844682163333825 +QQQ,20001212 00:00,735000,738800,708800,715000,29755000,0.0003844682163333825 +SPY,20001213 00:00,1392500,1394100,1362500,1365300,5580800,0.0003851521128627533 +QQQ,20001213 00:00,734400,735000,683100,685200,51205100,0.0003851521128627533 +SPY,20001214 00:00,1358800,1365000,1341900,1341900,7348300,0.0003871274960289701 +QQQ,20001214 00:00,685200,696900,656300,658800,38315600,0.0003871274960289701 +SPY,20001215 00:00,1331300,1332500,1305600,1314500,8490700,0.0003894631231487652 +QQQ,20001215 00:00,642500,656300,605000,638100,57821200,0.0003894631231487652 +SPY,20001218 00:00,1110000,1334700,1110000,1323800,6906100,0.0003895567893193125 +QQQ,20001218 00:00,651600,659700,625600,633800,42454900,0.0003895567893193125 +SPY,20001219 00:00,1324700,1349700,1305000,1305600,9054500,0.0003902897660517478 +QQQ,20001219 00:00,634500,658600,597800,600000,78288100,0.0003902897660517478 +SPY,20001220 00:00,1286300,1289400,1239400,1266900,9490400,0.00039866223461637167 +QQQ,20001220 00:00,573100,583800,547500,554200,78896600,0.00039866223461637167 +SPY,20001221 00:00,1260000,1288600,1255300,1276900,14252300,0.0003984144752682216 +QQQ,20001221 00:00,550200,587500,542500,558100,84496400,0.0003984144752682216 +SPY,20001222 00:00,1290000,1308600,1288400,1308600,8862700,0.00040743911165299767 +QQQ,20001222 00:00,576300,607500,560600,606300,56301600,0.00040743911165299767 +SPY,20001226 00:00,1308400,1319400,1302800,1318900,4395100,0.0004073238824909707 +QQQ,20001226 00:00,605900,619200,580000,601900,35626800,0.0004073238824909707 +SPY,20001227 00:00,1320000,1336600,1312500,1331300,5193500,0.00040790259983325433 +QQQ,20001227 00:00,596900,621900,589400,612500,33769600,0.00040790259983325433 +SPY,20001228 00:00,1328100,1338100,1325900,1336100,7872300,0.0004079198516587795 +QQQ,20001228 00:00,607800,624800,602500,612800,30069700,0.0004079198516587795 +SPY,20001229 00:00,1340600,1342800,1318800,1322500,7564700,0.00040960127744102073 +QQQ,20001229 00:00,615600,622300,580000,584400,46732700,0.00040960127744102073 +SPY,20010102 00:00,1320000,1321600,1275600,1282500,8348100,0.00042092210170041784 +QQQ,20010102 00:00,585600,586900,524400,532300,61819700,0.00042092210170041784 +SPY,20010103 00:00,1283100,1360000,1276600,1350000,17057200,0.00045056658577060065 +QQQ,20010103 00:00,521900,640000,520600,628100,115085400,0.00045056658577060065 +SPY,20010104 00:00,1349400,1354700,1330000,1334100,8331000,0.0004515153796105736 +QQQ,20010104 00:00,616300,636300,602300,614800,56326000,0.0004515153796105736 +SPY,20010105 00:00,1334700,1336300,1292800,1302500,12281600,0.0004586631278628167 +QQQ,20010105 00:00,613100,613100,560000,566900,70772600,0.0004586631278628167 +SPY,20010108 00:00,1298800,1300600,1276300,1297500,6134300,0.00045138206833330577 +QQQ,20010108 00:00,563100,569400,535200,568900,53219400,0.00045138206833330577 +SPY,20010109 00:00,1310500,1315000,1296300,1301300,5161100,0.0004496443900739431 +QQQ,20010109 00:00,577500,591300,566300,574400,52452400,0.0004496443900739431 +SPY,20010110 00:00,1290000,1318100,1288100,1316600,8509500,0.00045014786638251865 +QQQ,20010110 00:00,561300,603800,557500,601900,71989200,0.00045014786638251865 +SPY,20010111 00:00,1310900,1334800,1310900,1327700,6271200,0.0004514590237526186 +QQQ,20010111 00:00,592700,636900,584400,627500,61255400,0.0004514590237526186 +SPY,20010112 00:00,1326900,1337200,1312800,1319100,6402300,0.00044950998847307895 +QQQ,20010112 00:00,627500,646300,605000,624800,59666900,0.00044950998847307895 +SPY,20010116 00:00,1320000,1331900,1315200,1325800,7763000,0.0004481254466687611 +QQQ,20010116 00:00,625600,629200,603800,615600,29908700,0.0004481254466687611 +SPY,20010117 00:00,1348400,1350500,1326400,1329400,7793500,0.00044897085153189305 +QQQ,20010117 00:00,645000,656100,631400,636900,59521200,0.00044897085153189305 +SPY,20010118 00:00,1334400,1357000,1329400,1350500,8764500,0.00045194493916890873 +QQQ,20010118 00:00,641300,669800,621300,665000,53229400,0.00045194493916890873 +SPY,20010119 00:00,1361900,1361900,1338800,1344800,7353300,0.00045237455046152653 +QQQ,20010119 00:00,681400,683100,655600,663600,56472600,0.00045237455046152653 +SPY,20010122 00:00,1342500,1357800,1335600,1346300,7091800,0.00045241059961334377 +QQQ,20010122 00:00,658800,670000,640000,659800,34900100,0.00045241059961334377 +SPY,20010123 00:00,1344700,1366600,1341600,1361300,8381500,0.0004488050240654673 +QQQ,20010123 00:00,659100,689500,653100,678100,48097800,0.0004488050240654673 +SPY,20010124 00:00,1362500,1373100,1358400,1366900,5708800,0.0004482076156987765 +QQQ,20010124 00:00,680600,691300,666300,679400,51456100,0.0004482076156987765 +SPY,20010125 00:00,1362500,1372500,1356600,1360600,10440400,0.00044872760936487 +QQQ,20010125 00:00,668800,679500,642300,647700,56402000,0.00044872760936487 +SPY,20010126 00:00,1351600,1361300,1344500,1357800,7049800,0.00044854793536732124 +QQQ,20010126 00:00,635600,665600,625600,655600,46583400,0.00044854793536732124 +SPY,20010129 00:00,1355000,1369000,1353700,1366500,6346400,0.0004451425474957928 +QQQ,20010129 00:00,647500,672500,638000,671000,31339200,0.0004451425474957928 +SPY,20010130 00:00,1363000,1379200,1357900,1377500,6535400,0.00044201824489543924 +QQQ,20010130 00:00,671500,692100,604000,668600,41285400,0.00044201824489543924 +SPY,20010131 00:00,1374000,1387000,1366000,1370600,9018400,0.0004418213884399852 +QQQ,20010131 00:00,672500,699400,646200,646500,58744000,0.0004418213884399852 +SPY,20010201 00:00,1371000,1375600,1362500,1374800,7899200,0.00044156724572982773 +QQQ,20010201 00:00,645500,688400,632900,650000,45100700,0.00044156724572982773 +SPY,20010202 00:00,1374000,1379900,1350000,1350800,7931800,0.00044328757850159445 +QQQ,20010202 00:00,649400,659000,600000,616800,46227700,0.00044328757850159445 +SPY,20010205 00:00,1348000,1359000,1347500,1358900,3758500,0.00044332551961928776 +QQQ,20010205 00:00,611900,619000,601200,615600,35503900,0.00044332551961928776 +SPY,20010206 00:00,1353000,1367000,1352200,1354200,6830900,0.00044327743935051295 +QQQ,20010206 00:00,614900,631200,611200,617000,41770200,0.00044327743935051295 +SPY,20010207 00:00,1347200,1354200,1336800,1342200,5602500,0.0004424506201012637 +QQQ,20010207 00:00,605100,635000,585800,602000,61065000,0.0004424506201012637 +SPY,20010208 00:00,1348000,1354000,1334800,1334800,5591600,0.0004415988946457542 +QQQ,20010208 00:00,609000,615000,586500,587000,49388600,0.0004415988946457542 +SPY,20010209 00:00,1333500,1333500,1312600,1318300,9406500,0.00044286541977631307 +QQQ,20010209 00:00,582500,593200,559500,564600,53923600,0.00044286541977631307 +SPY,20010212 00:00,1317000,1335000,1317000,1331400,5507600,0.00044154181727461744 +QQQ,20010212 00:00,562500,599600,555000,569900,50717500,0.00044154181727461744 +SPY,20010213 00:00,1337000,1341700,1320000,1321200,5986900,0.0004424110885454244 +QQQ,20010213 00:00,576500,591800,550000,551000,56703000,0.0004424110885454244 +SPY,20010214 00:00,1326500,1326500,1306600,1321500,8150200,0.00044217553317001004 +QQQ,20010214 00:00,554000,576100,541300,575000,63183900,0.00044217553317001004 +SPY,20010215 00:00,1328400,1335200,1319900,1329600,5417200,0.0004430696411570923 +QQQ,20010215 00:00,588000,604900,559900,591000,64075400,0.0004430696411570923 +SPY,20010216 00:00,1310000,1312900,1293000,1304600,10245800,0.0004476583787771918 +QQQ,20010216 00:00,559600,580900,544400,552600,66033400,0.0004476583787771918 +SPY,20010220 00:00,1310400,1311400,1281000,1283200,5457000,0.0004469031927606742 +QQQ,20010220 00:00,557400,558400,523900,524000,54283000,0.0004469031927606742 +SPY,20010221 00:00,1279000,1288400,1255200,1256000,10237700,0.00044817734414693915 +QQQ,20010221 00:00,515500,540700,509200,514000,71588600,0.00044817734414693915 +SPY,20010222 00:00,1263500,1265400,1230200,1255200,21327100,0.00044625587369006095 +QQQ,20010222 00:00,514500,521600,488900,506500,103011300,0.00044625587369006095 +SPY,20010223 00:00,1250800,1255400,1218000,1248900,15540300,0.0004464558859451843 +QQQ,20010223 00:00,500900,551000,478000,512600,92596000,0.0004464558859451843 +SPY,20010226 00:00,1258000,1272100,1245000,1272100,9555900,0.00044752933623553345 +QQQ,20010226 00:00,520800,526000,502500,522500,77513400,0.00044752933623553345 +SPY,20010227 00:00,1268000,1278400,1255100,1263500,10871500,0.0004490853594586669 +QQQ,20010227 00:00,515400,520800,489000,491500,64978600,0.0004490853594586669 +SPY,20010228 00:00,1267500,1268400,1232700,1241500,13986800,0.00044929412071428794 +QQQ,20010228 00:00,494500,502100,467400,475000,103002500,0.00044929412071428794 +SPY,20010301 00:00,1240500,1245000,1217500,1244900,13921800,0.00044915161827197383 +QQQ,20010301 00:00,469700,492000,456300,489500,99562100,0.00044915161827197383 +SPY,20010302 00:00,1225000,1256500,1223000,1237700,12367500,0.00045017962866276425 +QQQ,20010302 00:00,472000,572500,456500,467500,96432700,0.00045017962866276425 +SPY,20010305 00:00,1241500,1247800,1238100,1244000,4718700,0.00044674092311034223 +QQQ,20010305 00:00,475000,483600,470900,477800,42975900,0.00044674092311034223 +SPY,20010306 00:00,1263500,1277500,1254900,1258700,6597400,0.00044899425169086707 +QQQ,20010306 00:00,493000,506600,491000,493200,62538000,0.00044899425169086707 +SPY,20010307 00:00,1269000,1269000,1257600,1266400,6407800,0.0004482192453438068 +QQQ,20010307 00:00,504000,504300,489700,497200,54750000,0.0004482192453438068 +SPY,20010308 00:00,1266000,1272400,1261000,1269000,5554000,0.00044743110257845336 +QQQ,20010308 00:00,493500,498500,481000,482500,48622000,0.00044743110257845336 +SPY,20010309 00:00,1261000,1261000,1231100,1236700,9754500,0.0004494464005044472 +QQQ,20010309 00:00,472500,495600,449000,452000,79218100,0.0004494464005044472 +SPY,20010312 00:00,1223400,1245000,1177000,1184400,11973300,0.0004606451662657776 +QQQ,20010312 00:00,440000,449500,418000,419500,78427100,0.0004606451662657776 +SPY,20010313 00:00,1194000,1204400,1175300,1202000,12711300,0.00046408083139184655 +QQQ,20010313 00:00,427800,447400,421000,446800,79151000,0.00046408083139184655 +SPY,20010314 00:00,1170500,1192900,1157500,1172000,17316500,0.00046347291956795177 +QQQ,20010314 00:00,427000,451900,421000,435100,95895400,0.00046347291956795177 +SPY,20010315 00:00,1184500,1188600,1175100,1177100,8083600,0.00046491594391164735 +QQQ,20010315 00:00,452000,459500,422500,423200,68653700,0.00046491594391164735 +SPY,20010316 00:00,1171300,1185000,1144600,1153100,35979400,0.0004548082571297399 +QQQ,20010316 00:00,418800,442500,400500,411000,76209500,0.0004548082571297399 +SPY,20010319 00:00,1157600,1176900,1148200,1173000,9638200,0.0004584986216972276 +QQQ,20010319 00:00,414400,432500,407500,431900,52692800,0.0004584986216972276 +SPY,20010320 00:00,1179000,1184600,1141500,1142500,13717000,0.0004568275122101604 +QQQ,20010320 00:00,434400,452000,402000,402000,105692400,0.0004568275122101604 +SPY,20010321 00:00,1141800,1152600,1119000,1123400,18086400,0.0004520930941256497 +QQQ,20010321 00:00,405200,442500,388300,401000,93462300,0.0004520930941256497 +SPY,20010322 00:00,1120200,1157000,1080400,1119000,25414600,0.000450973704387341 +QQQ,20010322 00:00,406000,426600,387500,425000,137815500,0.000450973704387341 +SPY,20010323 00:00,1132500,1144800,1115000,1142500,12191600,0.000449858059099574 +QQQ,20010323 00:00,435500,438300,415000,425200,97528100,0.000449858059099574 +SPY,20010326 00:00,1157000,1162700,1147700,1155000,9392300,0.0004491482443098331 +QQQ,20010326 00:00,434700,439000,415500,419300,56139500,0.0004491482443098331 +SPY,20010327 00:00,1156200,1186500,1152500,1185100,12432000,0.0004530101679285527 +QQQ,20010327 00:00,418000,445600,412700,432500,66475700,0.0004530101679285527 +SPY,20010328 00:00,1169000,1175000,1149000,1154500,10194300,0.00045964690541559604 +QQQ,20010328 00:00,419000,422000,399000,399000,77522400,0.00045964690541559604 +SPY,20010329 00:00,1147000,1166000,1093400,1149800,11463600,0.0004600762796600482 +QQQ,20010329 00:00,393800,406100,373300,389700,79643600,0.0004600762796600482 +SPY,20010330 00:00,1155500,1166500,1145000,1161200,8495500,0.00045884890426644144 +QQQ,20010330 00:00,393000,399800,380000,391300,63067100,0.00045884890426644144 +SPY,20010402 00:00,1163000,1173800,1138000,1145400,10040900,0.00045867420739923343 +QQQ,20010402 00:00,391700,399100,366700,377500,69169900,0.00045867420739923343 +SPY,20010403 00:00,1139800,1141500,1101000,1106700,12365600,0.0004688544128744421 +QQQ,20010403 00:00,372000,392500,346200,348600,86663600,0.0004688544128744421 +SPY,20010404 00:00,1105800,1121000,1093000,1103100,14720900,0.00046889020015301647 +QQQ,20010404 00:00,347100,358100,330500,341000,74655900,0.00046889020015301647 +SPY,20010405 00:00,1133000,1154900,1125000,1152200,15035600,0.0004888688843370253 +QQQ,20010405 00:00,360000,379600,357000,377700,89159500,0.0004888688843370253 +SPY,20010406 00:00,1139900,1144000,1120600,1130500,14400500,0.0004908478465609036 +QQQ,20010406 00:00,369000,371000,355000,361500,86475100,0.0004908478465609036 +SPY,20010409 00:00,1140000,1154800,1127800,1140000,8617400,0.0004894655631616832 +QQQ,20010409 00:00,367900,379500,350500,369500,50189400,0.0004894655631616832 +SPY,20010410 00:00,1154500,1177500,1151700,1170900,15812700,0.0004973552932570358 +QQQ,20010410 00:00,379000,404600,377800,399000,97463700,0.0004973552932570358 +SPY,20010411 00:00,1187800,1189900,1161400,1169600,12328300,0.0004969826853274535 +QQQ,20010411 00:00,421600,425000,404500,411000,92204700,0.0004969826853274535 +SPY,20010412 00:00,1163000,1186300,1159600,1185500,8316200,0.0004934933422240683 +QQQ,20010412 00:00,403000,434000,400000,427000,78626700,0.0004934933422240683 +SPY,20010416 00:00,1182900,1188900,1169100,1182300,6587800,0.0004925108303455182 +QQQ,20010416 00:00,419400,424300,406300,411200,61071600,0.0004925108303455182 +SPY,20010417 00:00,1173100,1196600,1170200,1194200,9952300,0.00047182315984081 +QQQ,20010417 00:00,399500,424500,399000,416500,85919400,0.00047182315984081 +SPY,20010418 00:00,1210600,1260000,1206900,1241400,19909300,0.0004753191684935255 +QQQ,20010418 00:00,437200,510000,431200,455900,123366600,0.0004753191684935255 +SPY,20010419 00:00,1242500,1258300,1200000,1257200,13370400,0.00047209841191328154 +QQQ,20010419 00:00,461000,487300,438000,487000,118045800,0.00047209841191328154 +SPY,20010420 00:00,1249000,1254000,1236600,1243600,7779700,0.00047155355842523296 +QQQ,20010420 00:00,481800,495500,430500,481800,78204100,0.00047155355842523296 +SPY,20010423 00:00,1236500,1263000,1219100,1227000,8156500,0.00047501419227917755 +QQQ,20010423 00:00,469900,495000,448900,451300,78734700,0.00047501419227917755 +SPY,20010424 00:00,1225200,1237000,1211000,1211300,9259600,0.00047596563664803216 +QQQ,20010424 00:00,451000,466000,437500,439200,87153500,0.00047596563664803216 +SPY,20010425 00:00,1214200,1236700,1209500,1231000,7959200,0.0004683372497845366 +QQQ,20010425 00:00,439000,462400,430200,452500,66242700,0.0004683372497845366 +SPY,20010426 00:00,1237300,1252200,1235000,1237400,9880700,0.000466566528413921 +QQQ,20010426 00:00,459000,465000,437000,439700,70252600,0.000466566528413921 +SPY,20010427 00:00,1249200,1256800,1242000,1255500,7258700,0.00046793537182079095 +QQQ,20010427 00:00,451500,466300,442400,451100,56644300,0.00046793537182079095 +SPY,20010430 00:00,1264500,1272700,1246700,1252100,8758500,0.0004684791547802268 +QQQ,20010430 00:00,462500,475900,451000,462300,71109700,0.0004684791547802268 +SPY,20010501 00:00,1250700,1269700,1246000,1269500,10205900,0.0004695992458246446 +QQQ,20010501 00:00,462000,479000,451500,478500,53341000,0.0004695992458246446 +SPY,20010502 00:00,1274100,1276900,1260000,1268900,9164600,0.00046602463467678974 +QQQ,20010502 00:00,488000,498000,468200,489000,76506000,0.00046602463467678974 +SPY,20010503 00:00,1261300,1261500,1242200,1251600,9322200,0.00046693036314235137 +QQQ,20010503 00:00,479000,489300,462000,468100,66584000,0.00046693036314235137 +SPY,20010504 00:00,1236500,1272000,1234400,1269500,12084200,0.00046848670291206894 +QQQ,20010504 00:00,453000,481600,451100,479500,72450800,0.00046848670291206894 +SPY,20010507 00:00,1268600,1274700,1255300,1265700,6651400,0.0004666322641962524 +QQQ,20010507 00:00,480000,487500,427900,472100,44587600,0.0004666322641962524 +SPY,20010508 00:00,1268600,1271000,1255600,1265200,6522000,0.00046577133010579705 +QQQ,20010508 00:00,483000,494800,469900,481500,54614100,0.00046577133010579705 +SPY,20010509 00:00,1252500,1266000,1250600,1258700,9240800,0.000465828276040989 +QQQ,20010509 00:00,470500,479600,464200,467300,60699300,0.000465828276040989 +SPY,20010510 00:00,1272600,1275000,1257700,1259900,6503700,0.00046081143204948065 +QQQ,20010510 00:00,479200,481200,450900,458200,59892700,0.00046081143204948065 +SPY,20010511 00:00,1260000,1264900,1244000,1248200,7394500,0.0004577656517792809 +QQQ,20010511 00:00,458400,464200,450000,453800,49665800,0.0004577656517792809 +SPY,20010514 00:00,1249000,1254400,1244600,1252300,7793600,0.00045735925451089197 +QQQ,20010514 00:00,453000,473300,433500,446900,43110100,0.00045735925451089197 +SPY,20010515 00:00,1255500,1265000,1248500,1253000,8986500,0.0004540773354857406 +QQQ,20010515 00:00,449000,463000,442000,447500,69238500,0.0004540773354857406 +SPY,20010516 00:00,1248400,1292000,1246200,1289600,12431300,0.00045916976683985246 +QQQ,20010516 00:00,443100,475200,440600,472600,80099100,0.00045916976683985246 +SPY,20010517 00:00,1290100,1300800,1285600,1293100,11930400,0.000458279531400254 +QQQ,20010517 00:00,474500,487900,470000,480300,73045600,0.000458279531400254 +SPY,20010518 00:00,1290900,1297200,1281000,1296200,6030000,0.0004572661605291532 +QQQ,20010518 00:00,476400,488000,470000,481000,39510500,0.0004572661605291532 +SPY,20010521 00:00,1298400,1318000,1291500,1317700,11722200,0.0004575567898853027 +QQQ,20010521 00:00,481700,511200,476500,511000,85177700,0.0004575567898853027 +SPY,20010522 00:00,1318300,1320900,1310700,1313700,7704800,0.00045760679081773345 +QQQ,20010522 00:00,513100,519600,500200,509100,79936700,0.00045760679081773345 +SPY,20010523 00:00,1310500,1310500,1292900,1292900,11528900,0.00045443539133961864 +QQQ,20010523 00:00,504500,510100,487700,488000,63701400,0.00045443539133961864 +SPY,20010524 00:00,1294700,1300000,1249000,1297000,7410400,0.00045060613311999906 +QQQ,20010524 00:00,489700,499800,458500,499100,61504700,0.00045060613311999906 +SPY,20010525 00:00,1296500,1297000,1280100,1282300,7097400,0.000450493574361902 +QQQ,20010525 00:00,499600,500200,480200,489000,35867000,0.000450493574361902 +SPY,20010529 00:00,1282300,1283500,1269000,1273000,8350400,0.0004517290477088776 +QQQ,20010529 00:00,485000,489500,464500,467000,65791600,0.0004517290477088776 +SPY,20010530 00:00,1265900,1275300,1250000,1252900,9937200,0.00044246063504051886 +QQQ,20010530 00:00,454400,458500,421800,443000,80711900,0.00044246063504051886 +SPY,20010531 00:00,1254300,1267600,1252600,1261000,9468700,0.00044273876565701194 +QQQ,20010531 00:00,445400,459500,441500,448500,69693600,0.00044273876565701194 +SPY,20010601 00:00,1262000,1271000,1251200,1266400,8898100,0.0004384245510397204 +QQQ,20010601 00:00,455400,462300,443300,459200,60100500,0.0004384245510397204 +SPY,20010604 00:00,1268000,1272700,1258900,1271700,5421400,0.0004328473121407668 +QQQ,20010604 00:00,463400,469000,445500,457600,41102300,0.0004328473121407668 +SPY,20010605 00:00,1274900,1292300,1272700,1288700,8082500,0.00043558372147984274 +QQQ,20010605 00:00,463000,483600,462000,479600,66255700,0.00043558372147984274 +SPY,20010606 00:00,1288300,1288300,1273600,1275300,12487900,0.00043551573318596006 +QQQ,20010606 00:00,480800,488900,455500,474300,60944800,0.00043551573318596006 +SPY,20010607 00:00,1270500,1282900,1270000,1282400,6862800,0.00043553803398535984 +QQQ,20010607 00:00,471400,494900,466400,488900,59904000,0.00043553803398535984 +SPY,20010608 00:00,1277000,1278700,1261400,1270000,7278100,0.0004366786133938671 +QQQ,20010608 00:00,487200,489000,469500,472700,56323600,0.0004366786133938671 +SPY,20010611 00:00,1267100,1277500,1254100,1259400,7055200,0.0004374774487356778 +QQQ,20010611 00:00,469000,484700,454900,460400,48320700,0.0004374774487356778 +SPY,20010612 00:00,1248600,1268800,1240400,1261300,9128400,0.00043679358651010274 +QQQ,20010612 00:00,448700,468000,442300,461700,78438100,0.00043679358651010274 +SPY,20010613 00:00,1261700,1265800,1246700,1247400,8230500,0.0004360309443607771 +QQQ,20010613 00:00,462700,467500,445500,445800,68349600,0.0004360309443607771 +SPY,20010614 00:00,1241800,1243000,1222400,1224800,12436500,0.0004389242592217065 +QQQ,20010614 00:00,440300,444000,420700,426700,88936900,0.0004389242592217065 +SPY,20010615 00:00,1209100,1224000,1204000,1216200,16676600,0.0004384806988680103 +QQQ,20010615 00:00,418000,438500,412800,424600,83800700,0.0004384806988680103 +SPY,20010618 00:00,1216500,1224400,1209500,1210800,7895700,0.00043922863412041135 +QQQ,20010618 00:00,426400,431700,410400,415800,59699500,0.00043922863412041135 +SPY,20010619 00:00,1223800,1228900,1208600,1214600,7655100,0.00043732704643998526 +QQQ,20010619 00:00,433200,435600,412600,418000,71801900,0.00043732704643998526 +SPY,20010620 00:00,1211900,1228600,1211000,1226000,8120400,0.0004385857733933702 +QQQ,20010620 00:00,413000,429900,412000,429200,83728600,0.0004385857733933702 +SPY,20010621 00:00,1222200,1274700,1221500,1238600,11993900,0.00043937678729706495 +QQQ,20010621 00:00,426700,442300,423000,436500,65080900,0.00043937678729706495 +SPY,20010622 00:00,1234900,1236000,1221600,1227500,11803800,0.00043752924975131607 +QQQ,20010622 00:00,436200,442000,420700,431000,51549000,0.00043752924975131607 +SPY,20010625 00:00,1232800,1234400,1215000,1221300,8064300,0.00043636204670971003 +QQQ,20010625 00:00,436100,438000,426500,434400,37957000,0.00043636204670971003 +SPY,20010626 00:00,1209000,1229000,1200300,1218400,8014800,0.0004352937305397127 +QQQ,20010626 00:00,425400,454500,424800,436000,60733700,0.0004352937305397127 +SPY,20010627 00:00,1216000,1251500,1209100,1213100,9785600,0.0004351844540449455 +QQQ,20010627 00:00,436800,441500,430000,437300,52390000,0.0004351844540449455 +SPY,20010628 00:00,1220000,1239400,1219300,1228900,9986900,0.0004369181583904715 +QQQ,20010628 00:00,444000,463600,443300,450900,89045500,0.0004369181583904715 +SPY,20010629 00:00,1228000,1240100,1222600,1232000,9113800,0.00043645242908703727 +QQQ,20010629 00:00,450900,465200,425500,460000,58494400,0.00043645242908703727 +SPY,20010702 00:00,1228000,1243200,1226200,1239000,8031000,0.0004355152605410721 +QQQ,20010702 00:00,456500,464800,451900,454800,49351300,0.0004355152605410721 +SPY,20010703 00:00,1239800,1241000,1230500,1240800,3305300,0.0004345467635047392 +QQQ,20010703 00:00,452500,464500,448000,455000,25147800,0.0004345467635047392 +SPY,20010705 00:00,1230700,1236500,1221100,1221300,4818400,0.0004345737833106105 +QQQ,20010705 00:00,448700,451900,408000,436700,41670100,0.0004345737833106105 +SPY,20010706 00:00,1213100,1215800,1190500,1191900,9531300,0.00043774167345173617 +QQQ,20010706 00:00,430100,432200,414900,416500,51795400,0.00043774167345173617 +SPY,20010709 00:00,1194900,1205400,1192000,1201000,8274300,0.0004372209500236892 +QQQ,20010709 00:00,419000,426900,415000,422500,44272300,0.0004372209500236892 +SPY,20010710 00:00,1202900,1206400,1182100,1183500,8339800,0.00043930033379230873 +QQQ,20010710 00:00,427600,429300,404400,405400,57261700,0.00043930033379230873 +SPY,20010711 00:00,1181000,1190400,1170900,1182700,14904100,0.0004393729502466698 +QQQ,20010711 00:00,404200,411000,398700,409000,70997400,0.0004393729502466698 +SPY,20010712 00:00,1195000,1214700,1193100,1211600,11252600,0.0004448326593223587 +QQQ,20010712 00:00,426300,438300,409500,436200,67236900,0.0004448326593223587 +SPY,20010713 00:00,1208400,1223200,1206200,1219000,9992900,0.00044471041495871 +QQQ,20010713 00:00,433800,444300,429000,436400,63548700,0.00044471041495871 +SPY,20010716 00:00,1217700,1222800,1202900,1206000,6321000,0.00044535788995186384 +QQQ,20010716 00:00,433700,441600,419000,420200,52420600,0.00044535788995186384 +SPY,20010717 00:00,1202000,1219400,1198300,1216700,7384300,0.00044634236389161727 +QQQ,20010717 00:00,418300,431200,415400,430600,57271300,0.00044634236389161727 +SPY,20010718 00:00,1205600,1216400,1200600,1211000,6678700,0.00044612043428168856 +QQQ,20010718 00:00,422800,428500,411400,415400,59593600,0.00044612043428168856 +SPY,20010719 00:00,1221800,1229800,1207600,1218300,9143600,0.0004458295013317805 +QQQ,20010719 00:00,424600,433500,410000,422500,72354800,0.0004458295013317805 +SPY,20010720 00:00,1211500,1219400,1209200,1214500,8514700,0.00044437949122389485 +QQQ,20010720 00:00,414900,421500,411000,418100,52048800,0.00044437949122389485 +SPY,20010723 00:00,1218000,1218800,1192200,1193600,7405300,0.00044543897999803757 +QQQ,20010723 00:00,422400,432300,405500,406400,54783500,0.00044543897999803757 +SPY,20010724 00:00,1190000,1192000,1167500,1173900,11894500,0.00044510545839549203 +QQQ,20010724 00:00,403800,409000,393100,400100,68604800,0.00044510545839549203 +SPY,20010725 00:00,1179200,1194800,1174600,1193000,11752400,0.00044570886790218324 +QQQ,20010725 00:00,401400,407500,394000,405400,68750100,0.00044570886790218324 +SPY,20010726 00:00,1190600,1208500,1185600,1207500,12583600,0.00044706063009272224 +QQQ,20010726 00:00,404500,418900,399800,416800,67815000,0.00044706063009272224 +SPY,20010727 00:00,1208300,1216000,1199100,1210000,8333200,0.00044665619006369983 +QQQ,20010727 00:00,416400,428000,409000,419400,46802200,0.00044665619006369983 +SPY,20010730 00:00,1211900,1213500,1203000,1208200,8736400,0.000441949321369961 +QQQ,20010730 00:00,421300,423000,414000,416500,38357700,0.000441949321369961 +SPY,20010731 00:00,1210000,1226800,1201800,1214600,11528000,0.00044070369352232125 +QQQ,20010731 00:00,418400,427800,415000,419500,53883800,0.00044070369352232125 +SPY,20010801 00:00,1219700,1227000,1209000,1219600,11666400,0.00044161536238649307 +QQQ,20010801 00:00,426400,435000,418900,430400,52746700,0.00044161536238649307 +SPY,20010802 00:00,1232300,1233500,1214600,1223800,10605300,0.00044196421623843453 +QQQ,20010802 00:00,438000,440000,423100,436800,50312800,0.00044196421623843453 +SPY,20010803 00:00,1223600,1223700,1202000,1218700,10527700,0.00044063921078852975 +QQQ,20010803 00:00,435300,438000,421000,430500,50402400,0.00044063921078852975 +SPY,20010806 00:00,1213500,1215100,1201000,1204500,7974000,0.0004411336159687087 +QQQ,20010806 00:00,425400,429000,423500,424800,29624300,0.0004411336159687087 +SPY,20010807 00:00,1202700,1215300,1199100,1208300,8373000,0.0004397310529242962 +QQQ,20010807 00:00,421000,428200,419400,422800,36068800,0.0004397310529242962 +SPY,20010808 00:00,1201200,1211600,1184300,1186500,14886400,0.0004425376771867902 +QQQ,20010808 00:00,418500,435700,403000,404900,75797500,0.0004425376771867902 +SPY,20010809 00:00,1187000,1189700,1178600,1187400,13918500,0.0004427094439960914 +QQQ,20010809 00:00,404100,408800,399800,405800,66912200,0.0004427094439960914 +SPY,20010810 00:00,1188000,1198400,1173400,1194400,11299200,0.0004418744606381182 +QQQ,20010810 00:00,404300,407500,392300,403300,70475700,0.0004418744606381182 +SPY,20010813 00:00,1196000,1198500,1188200,1194900,7194100,0.00044156566966765563 +QQQ,20010813 00:00,405900,413400,401100,412300,48215100,0.00044156566966765563 +SPY,20010814 00:00,1201400,1203500,1188000,1191100,13026500,0.00044035861007874936 +QQQ,20010814 00:00,414900,427500,405400,406200,48940300,0.00044035861007874936 +SPY,20010815 00:00,1192300,1196100,1181600,1182800,8303100,0.0004412039942313616 +QQQ,20010815 00:00,406200,415000,387000,391500,57162600,0.0004412039942313616 +SPY,20010816 00:00,1178000,1187500,1170000,1186200,10275800,0.00044135128528647775 +QQQ,20010816 00:00,386500,393900,380400,393700,66777900,0.00044135128528647775 +SPY,20010817 00:00,1176500,1178700,1160100,1166400,10893500,0.0004422567474694791 +QQQ,20010817 00:00,384400,392600,377100,378000,56438200,0.0004422567474694791 +SPY,20010820 00:00,1168000,1176600,1165500,1175600,9717400,0.0004427634366540624 +QQQ,20010820 00:00,378500,388000,372000,382500,48996200,0.0004427634366540624 +SPY,20010821 00:00,1178000,1185400,1080500,1161300,13952900,0.0004439890595654055 +QQQ,20010821 00:00,382900,386500,368900,369200,53873000,0.0004439890595654055 +SPY,20010822 00:00,1167500,1174300,1157800,1170500,11224700,0.0004448299615506219 +QQQ,20010822 00:00,374500,381800,365400,376900,63321700,0.0004448299615506219 +SPY,20010823 00:00,1169600,1175200,1165200,1167000,8169600,0.00044442942093908956 +QQQ,20010823 00:00,376800,393900,371700,373200,52627100,0.00044442942093908956 +SPY,20010824 00:00,1172100,1191000,1166500,1190000,11056100,0.00044886474114881776 +QQQ,20010824 00:00,378600,396000,373500,393600,58194300,0.00044886474114881776 +SPY,20010827 00:00,1189700,1192000,1182600,1184900,6219700,0.00044881817669968236 +QQQ,20010827 00:00,392800,399900,387600,393500,50453200,0.00044881817669968236 +SPY,20010828 00:00,1182800,1184900,1165900,1166400,11146700,0.0004503569233591958 +QQQ,20010828 00:00,393200,399600,380100,380700,64854400,0.0004503569233591958 +SPY,20010829 00:00,1171300,1171800,1151700,1154000,15345700,0.0004509738992337343 +QQQ,20010829 00:00,383700,384500,371300,373500,58143600,0.0004509738992337343 +SPY,20010830 00:00,1148500,1159100,1120100,1132800,16303700,0.0004530421712124343 +QQQ,20010830 00:00,368000,373100,357500,362000,75646400,0.0004530421712124343 +SPY,20010831 00:00,1134000,1147700,1131300,1139200,15875800,0.0004520697362810508 +QQQ,20010831 00:00,360400,370300,359400,366000,54054800,0.0004520697362810508 +SPY,20010904 00:00,1138500,1167900,1134400,1136500,22807100,0.000452094559577712 +QQQ,20010904 00:00,365200,375000,354200,354800,68143200,0.000452094559577712 +SPY,20010905 00:00,1137000,1141900,1119500,1136500,20800000,0.0004513976161876589 +QQQ,20010905 00:00,354900,359100,341500,352800,97184300,0.0004513976161876589 +SPY,20010906 00:00,1126500,1133000,1110900,1111000,20895800,0.00045303819664399336 +QQQ,20010906 00:00,347400,355200,329900,339600,86160800,0.00045303819664399336 +SPY,20010907 00:00,1100200,1112500,1086900,1091300,30316100,0.00045210441358976253 +QQQ,20010907 00:00,336200,351000,333500,337800,94698900,0.00045210441358976253 +SPY,20010910 00:00,1077000,1110700,1075500,1098300,23040200,0.0004517477321198684 +QQQ,20010910 00:00,334900,348800,333400,340000,81278700,0.0004517477321198684 +SPY,20010917 00:00,1010000,1065100,1000000,1043000,32337700,0.0004670001025294412 +QQQ,20010917 00:00,312500,328000,312000,312200,95411900,0.0004670001025294412 +SPY,20010918 00:00,1043300,1053000,1033600,1039000,21762400,0.0004670920034538982 +QQQ,20010918 00:00,315300,325000,303700,304900,65111300,0.0004670920034538982 +SPY,20010919 00:00,1041000,1045000,985600,1020200,43139900,0.00046747444537105373 +QQQ,20010919 00:00,306400,310000,282600,301100,115755400,0.00046747444537105373 +SPY,20010920 00:00,1004000,1018500,985700,989600,37685200,0.00047131401434947465 +QQQ,20010920 00:00,293000,300900,288500,289800,90193400,0.00047131401434947465 +SPY,20010921 00:00,940500,997000,938000,968500,49249900,0.0004726340065272712 +QQQ,20010921 00:00,274100,289700,270000,281700,113189400,0.0004726340065272712 +SPY,20010924 00:00,997300,1011600,990600,1004800,24672600,0.00048020624449092593 +QQQ,20010924 00:00,290800,300000,285900,296100,90878300,0.00048020624449092593 +SPY,20010925 00:00,1007500,1020000,999000,1014000,25190100,0.00047806558200476633 +QQQ,20010925 00:00,297100,304300,288900,295000,82499400,0.00047806558200476633 +SPY,20010926 00:00,1023500,1024000,1004300,1010000,17174200,0.00047862689920019863 +QQQ,20010926 00:00,299500,300000,284100,285100,57647500,0.00047862689920019863 +SPY,20010927 00:00,1012500,1022500,1000000,1020500,19974800,0.0004788139249597349 +QQQ,20010927 00:00,284000,288000,274100,285100,67806600,0.0004788139249597349 +SPY,20010928 00:00,1029800,1099200,1025000,1042500,21208700,0.00048092896897567356 +QQQ,20010928 00:00,288400,299400,280000,290600,83837100,0.00048092896897567356 +SPY,20011001 00:00,1039000,1043200,1024200,1040000,21059700,0.0004806421203127292 +QQQ,20011001 00:00,288500,323600,278500,286100,52781600,0.0004806421203127292 +SPY,20011002 00:00,1040000,1053800,1030700,1053800,18549500,0.0004810688363938562 +QQQ,20011002 00:00,286500,299700,280000,288400,77309500,0.0004810688363938562 +SPY,20011003 00:00,1046000,1078800,1043500,1073400,30475800,0.0004873534871925661 +QQQ,20011003 00:00,284300,316100,283300,310500,133162300,0.0004873534871925661 +SPY,20011004 00:00,1082900,1089700,1043700,1071000,31695300,0.0004828689738910812 +QQQ,20011004 00:00,316500,332000,309400,313900,126378100,0.0004828689738910812 +SPY,20011005 00:00,1072500,1076200,1055200,1072600,28749400,0.00048077240561976767 +QQQ,20011005 00:00,310000,319000,302600,316500,95137800,0.00048077240561976767 +SPY,20011008 00:00,1062800,1073000,1058700,1065300,11713400,0.00048069688301271895 +QQQ,20011008 00:00,311300,323500,309600,318500,66660200,0.00048069688301271895 +SPY,20011009 00:00,1066100,1067500,1056000,1058700,15220700,0.00048040762078846964 +QQQ,20011009 00:00,318600,320200,290000,309700,55918700,0.00048040762078846964 +SPY,20011010 00:00,1058000,1085500,1055200,1084000,18755600,0.0004846014193841847 +QQQ,20011010 00:00,308700,326000,307500,324800,70647400,0.0004846014193841847 +SPY,20011011 00:00,1089500,1103000,1089500,1100100,24722000,0.0004889430543982914 +QQQ,20011011 00:00,331900,363300,331400,346000,113872600,0.0004889430543982914 +SPY,20011012 00:00,1091500,1098900,1073000,1094500,30699900,0.00048659260672448466 +QQQ,20011012 00:00,343300,348000,322000,347100,111213100,0.00048659260672448466 +SPY,20011015 00:00,1086300,1094500,1071900,1093000,25426400,0.00048665440390633497 +QQQ,20011015 00:00,341200,349700,336600,343200,88414300,0.00048665440390633497 +SPY,20011016 00:00,1098000,1106200,1089500,1100600,15043500,0.0004857830832293729 +QQQ,20011016 00:00,346700,350600,340700,349500,81013200,0.0004857830832293729 +SPY,20011017 00:00,1110700,1111500,1079000,1079000,27566600,0.0004887749135963006 +QQQ,20011017 00:00,358700,369500,323000,327900,154599400,0.0004887749135963006 +SPY,20011018 00:00,1078200,1081600,1067400,1072100,16793600,0.00048548463221143544 +QQQ,20011018 00:00,327000,346900,320900,331700,90973000,0.00048548463221143544 +SPY,20011019 00:00,1070000,1079200,1060100,1075500,22435500,0.0004735333326656031 +QQQ,20011019 00:00,328700,345000,320000,335500,69141300,0.0004735333326656031 +SPY,20011022 00:00,1073000,1094900,1072100,1092600,17101100,0.00047548755211614195 +QQQ,20011022 00:00,334400,345000,330400,344400,72150100,0.00047548755211614195 +SPY,20011023 00:00,1099600,1106100,1083800,1088000,21806000,0.0004744098264077112 +QQQ,20011023 00:00,348200,358600,340000,345600,108646000,0.0004744098264077112 +SPY,20011024 00:00,1089800,1099400,1081200,1087700,15508500,0.00047421475805644773 +QQQ,20011024 00:00,346000,356800,342000,354400,88422300,0.00047421475805644773 +SPY,20011025 00:00,1074500,1103300,1067400,1103100,26339700,0.0004647309854919252 +QQQ,20011025 00:00,347100,368200,342300,367600,120707500,0.0004647309854919252 +SPY,20011026 00:00,1099500,1118000,1096400,1107700,18892000,0.00046404928524812765 +QQQ,20011026 00:00,365000,370600,333200,362600,92281300,0.00046404928524812765 +SPY,20011029 00:00,1101600,1105500,1080600,1082300,17805500,0.00046869811742107376 +QQQ,20011029 00:00,360000,369900,342000,342500,90782900,0.00046869811742107376 +SPY,20011030 00:00,1073500,1077000,1055600,1062000,25662200,0.00047037640325714144 +QQQ,20011030 00:00,337100,377100,314500,334000,92425500,0.00047037640325714144 +SPY,20011031 00:00,1069000,1078600,1060100,1062700,27388000,0.0004643552032905345 +QQQ,20011031 00:00,340400,355800,336800,339600,105198200,0.0004643552032905345 +SPY,20011101 00:00,1066000,1090100,1054300,1086700,28591900,0.0004686927662369987 +QQQ,20011101 00:00,344400,355600,337800,354400,92836500,0.0004686927662369987 +SPY,20011102 00:00,1084400,1093800,1078700,1090600,16378300,0.00046859515563703265 +QQQ,20011102 00:00,352700,358500,348900,355000,63444000,0.00046859515563703265 +SPY,20011105 00:00,1101200,1110900,1007400,1105800,15885700,0.0004723244777556113 +QQQ,20011105 00:00,362600,371600,361600,368400,62362700,0.0004723244777556113 +SPY,20011106 00:00,1103500,1124500,1098500,1122900,22531600,0.00046907573654519094 +QQQ,20011106 00:00,366100,379800,357100,379200,110400900,0.00046907573654519094 +SPY,20011107 00:00,1117700,1131200,1115600,1119600,19023300,0.00046888305103373216 +QQQ,20011107 00:00,376100,388400,371000,379500,91493000,0.00046888305103373216 +SPY,20011108 00:00,1128700,1226600,1104500,1123500,21245000,0.0004682856089703235 +QQQ,20011108 00:00,385500,399700,372500,376500,117043400,0.0004682856089703235 +SPY,20011109 00:00,1122500,1129600,1114400,1124400,16170300,0.00046825327579033297 +QQQ,20011109 00:00,376000,387500,344300,376900,71811800,0.00046825327579033297 +SPY,20011112 00:00,1110000,1126500,1100000,1121600,25038200,0.00046831427224035797 +QQQ,20011112 00:00,370000,383500,363000,380400,113516600,0.00046831427224035797 +SPY,20011113 00:00,1134400,1144300,1131800,1143900,14030800,0.00047132826254869353 +QQQ,20011113 00:00,390300,399800,381000,393400,95704000,0.00047132826254869353 +SPY,20011114 00:00,1151700,1154000,1137000,1146200,17418000,0.00046716637164622994 +QQQ,20011114 00:00,399600,402400,387400,395000,87957000,0.00046716637164622994 +SPY,20011115 00:00,1143700,1151800,1139300,1146000,20437200,0.00046720591448131836 +QQQ,20011115 00:00,391600,401100,389500,394100,82087600,0.00046720591448131836 +SPY,20011116 00:00,1150800,1151000,1134000,1143100,17188100,0.00046199304229888207 +QQQ,20011116 00:00,394800,399800,389200,394500,70540600,0.00046199304229888207 +SPY,20011119 00:00,1149200,1155700,1144500,1155300,12517900,0.00046251543125811357 +QQQ,20011119 00:00,397900,403400,387100,403200,71648300,0.00046251543125811357 +SPY,20011120 00:00,1153700,1158000,1111500,1148100,15890300,0.00045651702974612514 +QQQ,20011120 00:00,400800,410700,384000,386300,84262300,0.00045651702974612514 +SPY,20011121 00:00,1145000,1146700,1135100,1141500,10996400,0.00045622353886918247 +QQQ,20011121 00:00,384700,389500,331800,386800,60797400,0.00045622353886918247 +SPY,20011123 00:00,1140400,1186300,1140000,1155200,7265300,0.0004555576969610408 +QQQ,20011123 00:00,387600,394600,382700,393800,27694200,0.0004555576969610408 +SPY,20011126 00:00,1157500,1163400,1150700,1162200,13697200,0.0004562750154760315 +QQQ,20011126 00:00,395800,404000,390100,403000,78656500,0.0004562750154760315 +SPY,20011127 00:00,1156200,1169000,1140900,1154000,18924400,0.0004523359441330308 +QQQ,20011127 00:00,400500,409700,392000,401300,105401900,0.0004523359441330308 +SPY,20011128 00:00,1147400,1151700,1132500,1133400,19443200,0.0004545692549931046 +QQQ,20011128 00:00,397300,403700,369500,387600,107577600,0.0004545692549931046 +SPY,20011129 00:00,1136600,1145600,1130000,1144800,15954000,0.0004527396910233672 +QQQ,20011129 00:00,390400,398600,367400,398400,80035400,0.0004527396910233672 +SPY,20011130 00:00,1144000,1149100,1140200,1143000,12983000,0.0004486331759183731 +QQQ,20011130 00:00,397300,400500,392300,397300,65087100,0.0004486331759183731 +SPY,20011203 00:00,1136500,1140800,1130100,1133600,14533800,0.0004494881051353995 +QQQ,20011203 00:00,392900,398200,380000,390300,59201900,0.0004494881051353995 +SPY,20011204 00:00,1139200,1150000,1133500,1150000,14970000,0.0004496109418535578 +QQQ,20011204 00:00,393400,406800,384400,406500,75291200,0.0004496109418535578 +SPY,20011205 00:00,1156100,1180000,1155600,1176400,23817500,0.00045481591644799373 +QQQ,20011205 00:00,412100,431500,411200,428000,113669600,0.00045481591644799373 +SPY,20011206 00:00,1173500,1179400,1169300,1173000,16930400,0.00045148867885468487 +QQQ,20011206 00:00,427100,444900,423600,427700,75755300,0.00045148867885468487 +SPY,20011207 00:00,1169000,1170900,1157000,1164500,17768300,0.0004519528734583595 +QQQ,20011207 00:00,424900,462000,411400,417200,83031500,0.0004519528734583595 +SPY,20011210 00:00,1158500,1163900,1144600,1144600,13238000,0.0004528204621267344 +QQQ,20011210 00:00,413300,422700,408800,409900,69371400,0.0004528204621267344 +SPY,20011211 00:00,1149000,1157200,1139000,1141900,19660800,0.0004356312822377034 +QQQ,20011211 00:00,414600,429800,411500,413600,64052300,0.0004356312822377034 +SPY,20011212 00:00,1145500,1147800,1131100,1142900,15487100,0.0004335961151897955 +QQQ,20011212 00:00,415000,419400,405000,415700,75318100,0.0004335961151897955 +SPY,20011213 00:00,1134500,1137000,1122800,1123600,17341600,0.00043599262988823354 +QQQ,20011213 00:00,407100,499300,390000,398700,78461000,0.00043599262988823354 +SPY,20011214 00:00,1123300,1134900,1120000,1129000,15363600,0.00043116435162078126 +QQQ,20011214 00:00,398700,404600,395700,400200,81937100,0.00043116435162078126 +SPY,20011217 00:00,1129900,1143600,1129000,1139900,13616800,0.00043104589622513064 +QQQ,20011217 00:00,400200,412400,395800,408200,62613300,0.00043104589622513064 +SPY,20011218 00:00,1146300,1151500,1143400,1149300,12932400,0.00043075269277516895 +QQQ,20011218 00:00,411600,419000,408800,413000,48943000,0.00043075269277516895 +SPY,20011219 00:00,1140900,1159200,1140000,1155000,19767600,0.0004290667822202251 +QQQ,20011219 00:00,405600,413200,403200,405600,78018900,0.0004290667822202251 +SPY,20011220 00:00,1155000,1158000,1146300,1146900,13673400,0.00042769036113119634 +QQQ,20011220 00:00,401000,419600,388000,388100,82299600,0.00042769036113119634 +SPY,20011221 00:00,1150300,1151000,1142000,1146600,12542200,0.00042531754297182883 +QQQ,20011221 00:00,394200,397100,384100,393000,54071800,0.00042531754297182883 +SPY,20011224 00:00,1148300,1150400,1146100,1147300,7822400,0.0004254757834812272 +QQQ,20011224 00:00,395400,396300,391200,392000,13781200,0.0004254757834812272 +SPY,20011226 00:00,1146500,1162100,1146500,1152500,9195600,0.0004229582646453438 +QQQ,20011226 00:00,393700,403000,391600,396500,37810000,0.0004229582646453438 +SPY,20011227 00:00,1153000,1163300,1152600,1159300,8636700,0.00041435268708182513 +QQQ,20011227 00:00,398500,408000,396000,399500,33573400,0.00041435268708182513 +SPY,20011228 00:00,1162900,1167500,1159500,1162100,9602500,0.00041421330319160873 +QQQ,20011228 00:00,402900,408000,400000,403400,38556000,0.00041421330319160873 +SPY,20011231 00:00,1161500,1164000,1148500,1148900,12333600,0.0004066480918560468 +QQQ,20011231 00:00,403100,410800,392100,392100,43090400,0.0004066480918560468 +SPY,20020102 00:00,1151100,1156500,1138100,1155900,16855900,0.0004074169521206717 +QQQ,20020102 00:00,395700,400500,389300,400200,67753000,0.0004074169521206717 +SPY,20020103 00:00,1156500,1168300,1150000,1167600,14579900,0.0004082320477415989 +QQQ,20020103 00:00,403100,419800,402600,414500,84514500,0.0004082320477415989 +SPY,20020104 00:00,1171700,1179800,1133600,1174100,19708000,0.0004083467037470226 +QQQ,20020104 00:00,419500,422900,399700,416500,87549900,0.0004083467037470226 +SPY,20020107 00:00,1177000,1179900,1157100,1167000,11601500,0.0004068594272973965 +QQQ,20020107 00:00,421200,422200,401100,410900,73078100,0.0004068594272973965 +SPY,20020108 00:00,1168000,1170600,1159700,1163600,12006100,0.00039620208619252785 +QQQ,20020108 00:00,411100,417700,408400,415100,67217200,0.00039620208619252785 +SPY,20020109 00:00,1166800,1199100,1153400,1157000,15074900,0.0003581794005214259 +QQQ,20020109 00:00,420400,433700,409000,411300,83691000,0.0003581794005214259 +SPY,20020110 00:00,1157000,1163500,1153000,1159600,13162200,0.0003573244618035195 +QQQ,20020110 00:00,411700,419200,401000,412600,77405400,0.0003573244618035195 +SPY,20020111 00:00,1162100,1162800,1147100,1147700,12628100,0.0003507097947418739 +QQQ,20020111 00:00,413600,418900,404600,406800,60523800,0.0003507097947418739 +SPY,20020114 00:00,1146500,1148400,1141000,1141200,11640600,0.0003511521138494496 +QQQ,20020114 00:00,404900,411000,391000,399000,70789900,0.0003511521138494496 +SPY,20020115 00:00,1145500,1153900,1139000,1148800,16475400,0.0003511992416770228 +QQQ,20020115 00:00,400400,409000,395600,401300,63410600,0.0003511992416770228 +SPY,20020116 00:00,1143000,1144000,1130000,1130500,15926800,0.0003507608104792662 +QQQ,20020116 00:00,395400,399400,387900,388200,97561400,0.0003507608104792662 +SPY,20020117 00:00,1137600,1142400,1134000,1141300,16033000,0.0003503147516540735 +QQQ,20020117 00:00,394800,399800,390100,398500,69688400,0.0003503147516540735 +SPY,20020118 00:00,1130000,1138700,1113600,1130800,15778700,0.00035131735259014135 +QQQ,20020118 00:00,388300,399300,377300,385600,78912100,0.00035131735259014135 +SPY,20020122 00:00,1137500,1139500,1120200,1122500,11249800,0.0003523971228305611 +QQQ,20020122 00:00,390000,399700,373300,373900,81591200,0.0003523971228305611 +SPY,20020123 00:00,1126300,1135600,1120200,1131400,11791000,0.0003530073947415468 +QQQ,20020123 00:00,376500,386900,373500,385300,75346000,0.0003530073947415468 +SPY,20020124 00:00,1136400,1142500,1133200,1135400,11323700,0.0003502223635542887 +QQQ,20020124 00:00,389400,395100,379600,389600,77965900,0.0003502223635542887 +SPY,20020125 00:00,1131200,1141800,1130400,1135900,11634500,0.0003502051348835061 +QQQ,20020125 00:00,384700,399800,383000,388000,58013100,0.0003502051348835061 +SPY,20020128 00:00,1139000,1141900,989200,1136300,9808100,0.0003502535338147755 +QQQ,20020128 00:00,391500,393900,381500,389500,47825500,0.0003502535338147755 +SPY,20020129 00:00,1138500,1144100,1100500,1102800,27316700,0.00035188607601671087 +QQQ,20020129 00:00,391300,394100,375200,378600,82903400,0.00035188607601671087 +SPY,20020130 00:00,1103900,1133900,1084000,1116100,34240300,0.00035247118627057035 +QQQ,20020130 00:00,380000,388500,368500,382800,100341700,0.00035247118627057035 +SPY,20020131 00:00,1121500,1132700,1116200,1132400,17736200,0.0003523136132310617 +QQQ,20020131 00:00,385800,387800,380200,385600,68444300,0.0003523136132310617 +SPY,20020201 00:00,1130900,1137000,1115500,1126000,15398900,0.0003526175389078605 +QQQ,20020201 00:00,384000,389800,377000,380600,60410100,0.0003526175389078605 +SPY,20020204 00:00,1122300,1151800,1094500,1097000,24526300,0.00035510417423979416 +QQQ,20020204 00:00,379600,388300,366100,367700,81961500,0.00035510417423979416 +SPY,20020205 00:00,1094000,1105000,1085300,1092700,35497300,0.00035525793773784293 +QQQ,20020205 00:00,365900,373300,360000,364200,85944600,0.00035525793773784293 +SPY,20020206 00:00,1096500,1097400,1080600,1087000,29039000,0.00035490769388001606 +QQQ,20020206 00:00,368400,398500,335600,360000,96051400,0.00035490769388001606 +SPY,20020207 00:00,1087200,1098600,1081600,1083800,23921700,0.00035496207179294063 +QQQ,20020207 00:00,360000,365500,350000,352100,96616900,0.00035496207179294063 +SPY,20020208 00:00,1086300,1100500,1083000,1099700,17609700,0.0003533558788812532 +QQQ,20020208 00:00,354600,361300,349700,361000,79277700,0.0003533558788812532 +SPY,20020211 00:00,1100500,1116300,1098200,1115900,17618500,0.00035463901983920343 +QQQ,20020211 00:00,361400,391700,352500,367900,57597300,0.00035463901983920343 +SPY,20020212 00:00,1109600,1117100,1106200,1111100,13050700,0.00035476035018862633 +QQQ,20020212 00:00,363100,369800,360400,365300,48355900,0.00035476035018862633 +SPY,20020213 00:00,1114800,1125400,1113500,1122600,16158600,0.00035458584495579997 +QQQ,20020213 00:00,367200,371500,360700,369500,60846400,0.00035458584495579997 +SPY,20020214 00:00,1125100,1129700,1115900,1119800,19646600,0.0003541569322894505 +QQQ,20020214 00:00,371500,378000,360000,367500,75775100,0.0003541569322894505 +SPY,20020215 00:00,1121500,1122400,1107100,1108300,17842600,0.0003533970299853159 +QQQ,20020215 00:00,368400,389000,356400,357800,64923700,0.0003533970299853159 +SPY,20020219 00:00,1101500,1103000,1002000,1087400,14698200,0.0003553122944609597 +QQQ,20020219 00:00,353800,354600,340000,345600,70780900,0.0003553122944609597 +SPY,20020220 00:00,1090500,1103800,1078200,1103200,28524400,0.0003554405290485899 +QQQ,20020220 00:00,349100,360700,339300,350900,105033200,0.0003554405290485899 +SPY,20020221 00:00,1099300,1109900,1084000,1086000,23205400,0.00035772078593671367 +QQQ,20020221 00:00,347900,349500,336000,336000,108215300,0.00035772078593671367 +SPY,20020222 00:00,1083500,1099400,1078700,1093700,26396200,0.0003571190865188668 +QQQ,20020222 00:00,336200,342000,311100,337600,96129700,0.0003571190865188668 +SPY,20020225 00:00,1097500,1118100,1097000,1115000,16472600,0.0003556052114469729 +QQQ,20020225 00:00,340100,352500,339600,350100,87795700,0.0003556052114469729 +SPY,20020226 00:00,1116000,1120400,1101900,1113600,21362600,0.0003524120026917439 +QQQ,20020226 00:00,352300,359000,342500,348800,93980300,0.0003524120026917439 +SPY,20020227 00:00,1119600,1128600,1106500,1115500,26777200,0.0003508041187183793 +QQQ,20020227 00:00,354000,360800,340000,343400,93326900,0.0003508041187183793 +SPY,20020228 00:00,1118300,1127500,1111400,1111900,22479100,0.0003509395020523134 +QQQ,20020228 00:00,345100,349700,337500,338500,96407300,0.0003509395020523134 +SPY,20020301 00:00,1117200,1137300,1115100,1136600,25086800,0.00035618697811886144 +QQQ,20020301 00:00,341500,357300,340000,357000,84833800,0.00035618697811886144 +SPY,20020304 00:00,1139000,1159900,1136500,1159300,26297000,0.0003580861794566755 +QQQ,20020304 00:00,357000,372300,327400,371800,105917300,0.0003580861794566755 +SPY,20020305 00:00,1153300,1164000,1149700,1152100,21551900,0.0003564982931250162 +QQQ,20020305 00:00,369400,378700,344200,372700,93016600,0.0003564982931250162 +SPY,20020306 00:00,1151000,1177100,1150800,1168100,19031000,0.0003550472835167402 +QQQ,20020306 00:00,370800,379500,366000,377900,88847100,0.0003550472835167402 +SPY,20020307 00:00,1173600,1175000,1125300,1163300,18622500,0.0003547966456179047 +QQQ,20020307 00:00,381200,383300,370100,375100,82054500,0.0003547966456179047 +SPY,20020308 00:00,1173800,1273000,1164800,1168900,19918100,0.00035441498962229145 +QQQ,20020308 00:00,382300,390300,381300,386600,85001000,0.00035441498962229145 +SPY,20020311 00:00,1168900,1179000,1164300,1173400,14648900,0.00035395428701673874 +QQQ,20020311 00:00,383500,419100,380600,386600,70091400,0.00035395428701673874 +SPY,20020312 00:00,1161100,1171200,1159400,1171000,16309200,0.00035256073050877156 +QQQ,20020312 00:00,375800,387000,373200,377700,79447200,0.00035256073050877156 +SPY,20020313 00:00,1166300,1167500,1150000,1159000,16205200,0.00035310633064806286 +QQQ,20020313 00:00,374100,376600,344500,370200,72345500,0.00035310633064806286 +SPY,20020314 00:00,1160400,1164300,1156300,1158600,10434100,0.0003533752229792744 +QQQ,20020314 00:00,370700,379100,359100,368100,71020000,0.0003533752229792744 +SPY,20020315 00:00,1159700,1169500,1062200,1167900,21148600,0.00034738091109205255 +QQQ,20020315 00:00,369000,373300,366000,371500,63630600,0.00034738091109205255 +SPY,20020318 00:00,1171000,1175700,1158500,1167600,16975000,0.00033530101051606684 +QQQ,20020318 00:00,376400,379400,370000,374800,78530400,0.00033530101051606684 +SPY,20020319 00:00,1173000,1177400,1168200,1173500,17720100,0.00033141861266748764 +QQQ,20020319 00:00,376100,378800,347000,374300,57919600,0.00033141861266748764 +SPY,20020320 00:00,1165000,1172500,1153900,1154300,16332900,0.00033105341673291547 +QQQ,20020320 00:00,368800,379000,360000,361500,60864800,0.00033105341673291547 +SPY,20020321 00:00,1153000,1159000,1141200,1156000,26674700,0.0003316744570477433 +QQQ,20020321 00:00,361500,371400,359000,370900,91180400,0.0003316744570477433 +SPY,20020322 00:00,1155000,1159400,1147000,1150900,15162300,0.00032955555793184535 +QQQ,20020322 00:00,369400,378800,364700,366200,58163100,0.00032955555793184535 +SPY,20020325 00:00,1150900,1153600,1133800,1134300,16756100,0.00032772028559253653 +QQQ,20020325 00:00,366900,369900,350000,355500,84092000,0.00032772028559253653 +SPY,20020326 00:00,1135200,1150200,1134700,1140800,19121200,0.0003207283248451242 +QQQ,20020326 00:00,354300,367000,350000,358000,93168600,0.0003207283248451242 +SPY,20020327 00:00,1140300,1150100,1130000,1146700,18290300,0.00032054119217387537 +QQQ,20020327 00:00,356400,387000,354000,357600,63829700,0.00032054119217387537 +SPY,20020328 00:00,1149700,1157700,1146800,1149100,16005200,0.00032160277484313837 +QQQ,20020328 00:00,360200,363700,351700,361500,62262900,0.00032160277484313837 +SPY,20020401 00:00,1142300,1151000,1129600,1148300,14408500,0.0003214904711551449 +QQQ,20020401 00:00,358000,377700,350000,367700,68919000,0.0003214904711551449 +SPY,20020402 00:00,1139800,1441200,1137700,1139300,14373500,0.00032349683665428507 +QQQ,20020402 00:00,359900,373500,350000,351100,74779400,0.00032349683665428507 +SPY,20020403 00:00,1140100,1162000,1121500,1127400,24583000,0.00032065359828051677 +QQQ,20020403 00:00,353000,354500,340000,347000,77375600,0.00032065359828051677 +SPY,20020404 00:00,1126000,1155300,1122300,1128900,22450100,0.00031274683649143523 +QQQ,20020404 00:00,345100,358500,340000,347600,89712800,0.00031274683649143523 +SPY,20020405 00:00,1131900,1136700,1121800,1125300,19653800,0.0003125340951442468 +QQQ,20020405 00:00,350100,351800,340000,343100,65961900,0.0003125340951442468 +SPY,20020408 00:00,1113200,1128800,1112300,1128100,15283800,0.0003124800843997344 +QQQ,20020408 00:00,334800,347500,333300,346900,72541700,0.0003124800843997344 +SPY,20020409 00:00,1131900,1131900,1119300,1120500,13036600,0.0003114907748317489 +QQQ,20020409 00:00,347800,349800,332200,335000,77182400,0.0003114907748317489 +SPY,20020410 00:00,1121000,1135400,1120900,1133500,17406700,0.0003017020467904352 +QQQ,20020410 00:00,337600,388500,331300,339100,85289100,0.0003017020467904352 +SPY,20020411 00:00,1128900,1130500,1105000,1107200,24076100,0.00030392530359305686 +QQQ,20020411 00:00,336600,339200,328900,330000,88480400,0.00030392530359305686 +SPY,20020412 00:00,1110300,1119700,1105700,1113300,14083200,0.000285278399682115 +QQQ,20020412 00:00,333300,340300,329500,336300,78926400,0.000285278399682115 +SPY,20020415 00:00,1116200,1119700,1102000,1106300,16132400,0.00028195510238465974 +QQQ,20020415 00:00,338000,339600,332000,337800,66479000,0.00028195510238465974 +SPY,20020416 00:00,1117000,1133200,1116700,1131200,13535800,0.0002848417771215893 +QQQ,20020416 00:00,344300,352200,340000,351500,66046100,0.0002848417771215893 +SPY,20020417 00:00,1133900,1136700,1126000,1130500,12254200,0.00027622964430417746 +QQQ,20020417 00:00,354000,356800,340000,349700,70550300,0.00027622964430417746 +SPY,20020418 00:00,1129000,1134600,1111500,1127600,24116800,0.0002764095680560141 +QQQ,20020418 00:00,347900,355200,336100,347700,87576400,0.0002764095680560141 +SPY,20020419 00:00,1132000,1132400,1125600,1128500,10213300,0.0002742379529333799 +QQQ,20020419 00:00,350600,366500,340000,345000,58349600,0.0002742379529333799 +SPY,20020422 00:00,1123800,1126100,1108400,1111400,13095800,0.0002754677914691709 +QQQ,20020422 00:00,340100,348900,332600,335600,65846400,0.0002754677914691709 +SPY,20020423 00:00,1110900,1119000,1101700,1103800,15862500,0.00027545682038036644 +QQQ,20020423 00:00,336000,337800,320000,328600,72528100,0.00027545682038036644 +SPY,20020424 00:00,1105600,1112400,1095100,1095900,17114100,0.00026066773090739983 +QQQ,20020424 00:00,332100,333100,320000,324000,67272200,0.00026066773090739983 +SPY,20020425 00:00,1092100,1104300,1087200,1094300,25129800,0.000257019037522228 +QQQ,20020425 00:00,323100,354800,320000,324100,101260200,0.000257019037522228 +SPY,20020426 00:00,1097900,1100100,1079000,1079500,17209600,0.0002585362856528215 +QQQ,20020426 00:00,326600,340000,311700,311800,95728900,0.0002585362856528215 +SPY,20020429 00:00,1079300,1082600,1066300,1069200,16865400,0.0002554852949851772 +QQQ,20020429 00:00,312400,315500,305700,310300,83507600,0.0002554852949851772 +SPY,20020430 00:00,1070200,1087500,1066400,1079800,18604700,0.0002552433356682669 +QQQ,20020430 00:00,310300,322000,309400,317700,92557900,0.0002552433356682669 +SPY,20020501 00:00,1079700,1092500,1068000,1089600,23395700,0.00025295352980793097 +QQQ,20020501 00:00,316700,318400,305800,315600,108551800,0.00025295352980793097 +SPY,20020502 00:00,1091000,1099100,1082000,1087700,14990800,0.0002537198814380313 +QQQ,20020502 00:00,314000,319900,300000,305800,87076700,0.0002537198814380313 +SPY,20020503 00:00,1086000,1089500,1072000,1076700,17107800,0.00025320294493530075 +QQQ,20020503 00:00,304700,305100,289800,296500,88511800,0.00025320294493530075 +SPY,20020506 00:00,1076500,1089000,1055100,1056200,20615700,0.0002551566183089811 +QQQ,20020506 00:00,296400,299800,285000,289100,95854400,0.0002551566183089811 +SPY,20020507 00:00,1061100,1063200,1050000,1052300,20654000,0.0002530436531655583 +QQQ,20020507 00:00,292700,338800,284200,288400,94387900,0.0002530436531655583 +SPY,20020508 00:00,1070500,1093600,1067900,1091600,26506300,0.00026909296218636776 +QQQ,20020508 00:00,301300,318700,298400,318600,127606800,0.00026909296218636776 +SPY,20020509 00:00,1086500,1091000,1075800,1076500,15747600,0.0002684741123461011 +QQQ,20020509 00:00,315800,318900,308000,308900,102722900,0.0002684741123461011 +SPY,20020510 00:00,1079700,1080500,1057200,1059800,17174700,0.00026924655298634324 +QQQ,20020510 00:00,310100,311000,287800,296500,108307700,0.00026924655298634324 +SPY,20020513 00:00,1062200,1079500,1057800,1078200,13380700,0.00027216264511906445 +QQQ,20020513 00:00,298700,309800,296800,308700,92038500,0.00027216264511906445 +SPY,20020514 00:00,1096200,1102600,1090000,1100900,18675600,0.0002767999756652984 +QQQ,20020514 00:00,320600,326100,318700,325000,97229800,0.0002767999756652984 +SPY,20020515 00:00,1095000,1109100,1092900,1095500,27642300,0.00027618336168738474 +QQQ,20020515 00:00,320800,337500,318500,326300,148199200,0.00027618336168738474 +SPY,20020516 00:00,1097000,1104300,1093300,1103500,18318500,0.0002764333638984828 +QQQ,20020516 00:00,325400,328600,322100,327500,81522200,0.0002764333638984828 +SPY,20020517 00:00,1106600,1111700,1101000,1111100,26024300,0.0002763774216388105 +QQQ,20020517 00:00,332900,337300,317500,330000,77990100,0.0002763774216388105 +SPY,20020520 00:00,1106400,1106900,1094900,1096400,12980900,0.0002778241720080101 +QQQ,20020520 00:00,326000,329900,318800,321700,72959900,0.0002778241720080101 +SPY,20020521 00:00,1101100,1104900,1082900,1084800,15775700,0.00027886238031332874 +QQQ,20020521 00:00,323700,325900,310000,313000,100485000,0.00027886238031332874 +SPY,20020522 00:00,1082200,1091200,1080000,1090500,14899600,0.0002722122569488034 +QQQ,20020522 00:00,309700,315900,306500,314500,84738700,0.0002722122569488034 +SPY,20020523 00:00,1092600,1102400,1084800,1101600,12756400,0.00027286728541829944 +QQQ,20020523 00:00,316300,327000,308000,320600,91359900,0.00027286728541829944 +SPY,20020524 00:00,1099800,1102100,1086600,1088500,10518500,0.00027394072878888647 +QQQ,20020524 00:00,315900,317000,310100,312300,53973600,0.00027394072878888647 +SPY,20020528 00:00,1090500,1099400,1074500,1079000,22840100,0.00026975734016791616 +QQQ,20020528 00:00,314700,318900,304900,309800,65321800,0.00026975734016791616 +SPY,20020529 00:00,1076300,1080200,1072500,1072500,13926300,0.00027013903712142163 +QQQ,20020529 00:00,306700,309000,303000,303400,69849800,0.00027013903712142163 +SPY,20020530 00:00,1065500,1075100,1059000,1070100,18078000,0.0002676826086285792 +QQQ,20020530 00:00,300100,307200,299000,305700,88733100,0.0002676826086285792 +SPY,20020531 00:00,1074000,1085600,1070800,1072300,17164100,0.0002671513250320653 +QQQ,20020531 00:00,307600,310400,300300,300800,75415100,0.0002671513250320653 +SPY,20020603 00:00,1070900,1088800,1042500,1043000,25052400,0.00027048596573859125 +QQQ,20020603 00:00,300100,302500,287900,288600,73872900,0.00027048596573859125 +SPY,20020604 00:00,1041500,1052000,1032800,1044100,25161300,0.0002694895192865546 +QQQ,20020604 00:00,287500,299900,278000,293400,96760700,0.0002694895192865546 +SPY,20020605 00:00,1049500,1056200,1043500,1055000,18265200,0.00026709432824571533 +QQQ,20020605 00:00,294200,298000,282900,297100,91564300,0.00026709432824571533 +SPY,20020606 00:00,1055400,1246700,1031500,1034200,19173400,0.0002688508868039066 +QQQ,20020606 00:00,295100,299800,280300,288300,86572200,0.0002688508868039066 +SPY,20020607 00:00,1017900,1039200,1017200,1032600,21968400,0.00026839209702970355 +QQQ,20020607 00:00,276300,288700,275200,283700,104499800,0.00026839209702970355 +SPY,20020610 00:00,1032400,1044600,1030200,1035600,18162400,0.0002684012450308122 +QQQ,20020610 00:00,283600,287500,281400,282700,71866600,0.0002684012450308122 +SPY,20020611 00:00,1041300,1045400,1017600,1018900,20164600,0.0002673193382065086 +QQQ,20020611 00:00,286000,286900,273600,274200,84114200,0.0002673193382065086 +SPY,20020612 00:00,1017100,1029700,1007800,1026400,28666100,0.0002676337409967781 +QQQ,20020612 00:00,272500,285000,262000,279300,149489600,0.0002676337409967781 +SPY,20020613 00:00,1021300,1030000,1013400,1015000,20605000,0.0002672841137766227 +QQQ,20020613 00:00,277700,282100,267000,275500,97081400,0.0002672841137766227 +SPY,20020614 00:00,1003100,1015600,985000,1012900,36963600,0.0002661630058021586 +QQQ,20020614 00:00,268600,277200,262000,276200,120081600,0.0002661630058021586 +SPY,20020617 00:00,1019200,1042900,1004700,1041900,16406300,0.0002697770092146038 +QQQ,20020617 00:00,280000,287500,279100,286000,84985700,0.0002697770092146038 +SPY,20020618 00:00,1037400,1047400,1029200,1042400,15992500,0.0002697021863276155 +QQQ,20020618 00:00,283200,295700,274100,283300,79964200,0.0002697021863276155 +SPY,20020619 00:00,1035000,1044800,1022600,1025400,19380200,0.00027046931760034534 +QQQ,20020619 00:00,281000,289500,272500,273200,90029700,0.00027046931760034534 +SPY,20020620 00:00,1022700,1030500,1009600,1012000,23810000,0.0002690248899819719 +QQQ,20020620 00:00,272700,277500,248400,264900,98065700,0.0002690248899819719 +SPY,20020621 00:00,1004700,1012000,986900,991900,27083500,0.00027080653749166745 +QQQ,20020621 00:00,263700,277700,256500,258000,98877900,0.00027080653749166745 +SPY,20020624 00:00,986100,1006900,972500,996900,35515100,0.0002710471487963984 +QQQ,20020624 00:00,254600,268000,252100,263500,138656300,0.0002710471487963984 +SPY,20020625 00:00,1003000,1008900,975400,979000,30054700,0.00027312527605870995 +QQQ,20020625 00:00,265800,267200,244500,254700,132797500,0.00027312527605870995 +SPY,20020626 00:00,952000,981500,952000,976200,35590000,0.000271923303522525 +QQQ,20020626 00:00,244400,294000,243700,255700,146630700,0.000271923303522525 +SPY,20020627 00:00,985000,994500,965700,994500,31061400,0.0002728753240570998 +QQQ,20020627 00:00,260000,261500,205900,261100,115953200,0.0002728753240570998 +SPY,20020628 00:00,992400,1005000,990200,992500,20632900,0.0002725037460265067 +QQQ,20020628 00:00,260500,267500,255000,261500,87711900,0.0002725037460265067 +SPY,20020701 00:00,991900,1015000,969500,970800,18535000,0.0002766904575898173 +QQQ,20020701 00:00,259800,261400,248100,248500,62464800,0.0002766904575898173 +SPY,20020702 00:00,968700,980800,947700,950200,33423400,0.0002794035656068678 +QQQ,20020702 00:00,246100,254200,238900,239800,113618100,0.0002794035656068678 +SPY,20020703 00:00,946200,958400,937300,956900,30051200,0.0002805106053064215 +QQQ,20020703 00:00,238500,259300,227300,247200,103246100,0.0002805106053064215 +SPY,20020705 00:00,967800,995500,966700,993000,19291300,0.0002891032521377101 +QQQ,20020705 00:00,252600,264100,250500,263500,58559700,0.0002891032521377101 +SPY,20020708 00:00,989800,997000,975600,980300,18365500,0.0002907143600154735 +QQQ,20020708 00:00,262000,286800,250800,252500,96044800,0.0002907143600154735 +SPY,20020709 00:00,977300,983400,950100,956100,26169900,0.00029290231231885507 +QQQ,20020709 00:00,252500,259200,241200,246800,88783000,0.00029290231231885507 +SPY,20020710 00:00,960000,960700,922000,922900,47057800,0.00029656217567938423 +QQQ,20020710 00:00,250000,256000,238300,239500,114568600,0.00029656217567938423 +SPY,20020711 00:00,917600,933500,900600,931500,55775500,0.00029587982846370853 +QQQ,20020711 00:00,237700,257800,233000,248000,163549300,0.00029587982846370853 +SPY,20020712 00:00,933300,938900,915200,924600,35065500,0.0002916879930419612 +QQQ,20020712 00:00,252500,259000,241900,248500,127952000,0.0002916879930419612 +SPY,20020715 00:00,916400,1016000,878900,921000,75907900,0.0002908535836622612 +QQQ,20020715 00:00,246900,255100,237400,254100,138627900,0.0002908535836622612 +SPY,20020716 00:00,911300,923800,898700,905800,50090100,0.0002892333702278039 +QQQ,20020716 00:00,252500,260300,241400,251700,140417200,0.0002892333702278039 +SPY,20020717 00:00,924600,933000,897500,910000,45753500,0.0002895926665907517 +QQQ,20020717 00:00,260800,266800,248900,255500,151021200,0.0002895926665907517 +SPY,20020718 00:00,907000,911000,882400,883300,28861700,0.000285863750071708 +QQQ,20020718 00:00,253900,258700,246700,247800,108479000,0.000285863750071708 +SPY,20020719 00:00,867700,884000,843000,848000,64420100,0.0002903421996620104 +QQQ,20020719 00:00,243300,255900,238000,240000,119480300,0.0002903421996620104 +SPY,20020722 00:00,841100,859100,814500,822100,73962000,0.00029181205867333064 +QQQ,20020722 00:00,238600,282800,230900,233800,146379600,0.00029181205867333064 +SPY,20020723 00:00,825500,832400,788500,800000,65162600,0.0002951991452751309 +QQQ,20020723 00:00,234500,238500,222800,222900,147579000,0.0002951991452751309 +SPY,20020724 00:00,781400,849400,776800,847500,98931400,0.00030973453919475844 +QQQ,20020724 00:00,218200,236500,211600,236200,180896400,0.00030973453919475844 +SPY,20020725 00:00,842800,858500,816000,842000,85709600,0.0003103448078237505 +QQQ,20020725 00:00,232600,251300,218000,222200,156626000,0.0003103448078237505 +SPY,20020726 00:00,846500,856900,838000,856000,38022600,0.0003118234836091374 +QQQ,20020726 00:00,225700,245900,220100,226500,93825700,0.0003118234836091374 +SPY,20020729 00:00,875100,903400,845400,902300,49081500,0.000324079407349808 +QQQ,20020729 00:00,232800,241200,222400,240400,94672200,0.000324079407349808 +SPY,20020730 00:00,893200,914000,887000,907000,45504900,0.00032359150127580285 +QQQ,20020730 00:00,237300,246900,229600,243600,115180600,0.00032359150127580285 +SPY,20020731 00:00,905000,914500,889300,913800,44683000,0.00032196210027068484 +QQQ,20020731 00:00,240000,246500,223800,238800,90724800,0.00032196210027068484 +SPY,20020801 00:00,908800,913500,884600,886400,59773800,0.0003258634127577784 +QQQ,20020801 00:00,237400,239000,221300,227000,81369500,0.0003258634127577784 +SPY,20020802 00:00,885000,889200,852900,866600,49173500,0.00032743533298565 +QQQ,20020802 00:00,227800,228400,210000,222000,83653600,0.00032743533298565 +SPY,20020805 00:00,865000,869300,836000,837300,44063900,0.000332221333319006 +QQQ,20020805 00:00,221100,225200,213000,213300,81709800,0.000332221333319006 +SPY,20020806 00:00,852300,879000,848800,864000,58414400,0.0003394550205706426 +QQQ,20020806 00:00,218000,230100,210900,224900,106901800,0.0003394550205706426 +SPY,20020807 00:00,878800,885000,857700,881500,39145700,0.00034037069442050606 +QQQ,20020807 00:00,232000,234000,219600,228400,122890500,0.00034037069442050606 +SPY,20020808 00:00,884200,911000,878000,909800,45784100,0.00034422486852455194 +QQQ,20020808 00:00,227600,240000,217900,235100,109982600,0.00034422486852455194 +SPY,20020809 00:00,901000,919400,893500,912600,40215000,0.00034395180922307174 +QQQ,20020809 00:00,232100,237200,220100,232900,91800100,0.00034395180922307174 +SPY,20020812 00:00,900000,912700,895500,907000,25204200,0.000343401181844799 +QQQ,20020812 00:00,230500,239500,229000,233300,59848600,0.000343401181844799 +SPY,20020813 00:00,901500,916600,886700,887500,46577700,0.00034582545674962414 +QQQ,20020813 00:00,232300,238700,225500,226000,84948300,0.00034582545674962414 +SPY,20020814 00:00,890200,926300,880100,924100,52910500,0.0003542698271563461 +QQQ,20020814 00:00,226700,242000,224700,240600,99407600,0.0003542698271563461 +SPY,20020815 00:00,928500,939900,903000,934000,43290900,0.0003549156217274408 +QQQ,20020815 00:00,242400,249600,233800,243700,120220300,0.0003549156217274408 +SPY,20020816 00:00,928200,940800,920000,932200,35341900,0.00035496835042948084 +QQQ,20020816 00:00,241300,252700,237300,247300,96297400,0.00035496835042948084 +SPY,20020819 00:00,934600,957500,931000,955200,31944500,0.00035804684916809857 +QQQ,20020819 00:00,247700,265000,240600,254700,74446500,0.00035804684916809857 +SPY,20020820 00:00,948200,958000,936200,942700,29017300,0.000358557236064933 +QQQ,20020820 00:00,251900,254300,221800,251000,87549600,0.000358557236064933 +SPY,20020821 00:00,950600,957500,931000,955000,39314900,0.00035909315974832915 +QQQ,20020821 00:00,254000,258500,244900,257000,97853600,0.00035909315974832915 +SPY,20020822 00:00,954900,975000,950700,967600,36382900,0.0003599275210235984 +QQQ,20020822 00:00,257500,262100,244900,261000,77330400,0.0003599275210235984 +SPY,20020823 00:00,960200,961500,922500,945200,26890400,0.00036067888682680645 +QQQ,20020823 00:00,258000,264500,244900,251300,72462100,0.00036067888682680645 +SPY,20020826 00:00,949100,956400,935000,952800,31061600,0.00036043808216586714 +QQQ,20020826 00:00,253000,259500,240000,252500,83014500,0.00036043808216586714 +SPY,20020827 00:00,957000,962500,935100,939000,33956800,0.0003609908280471311 +QQQ,20020827 00:00,254300,258100,241500,242600,89840200,0.0003609908280471311 +SPY,20020828 00:00,932900,951500,918000,923000,38884800,0.00036215922933618543 +QQQ,20020828 00:00,240300,249800,233900,235000,117503400,0.00036215922933618543 +SPY,20020829 00:00,912700,930600,908100,923000,43642300,0.00036214452890336084 +QQQ,20020829 00:00,232000,250600,228500,238800,94443000,0.00036214452890336084 +SPY,20020830 00:00,916900,933900,914000,921000,28912000,0.0003576190293593805 +QQQ,20020830 00:00,236200,240100,233800,234800,57482700,0.0003576190293593805 +SPY,20020903 00:00,907400,913500,881500,882100,47441000,0.0003649795379311473 +QQQ,20020903 00:00,230600,234300,223400,223900,78187800,0.0003649795379311473 +SPY,20020904 00:00,886200,902500,880600,897500,48415200,0.0003648574982299089 +QQQ,20020904 00:00,225000,230200,215200,228600,81576600,0.0003648574982299089 +SPY,20020905 00:00,884900,894300,875000,884700,48908200,0.000366100475330222 +QQQ,20020905 00:00,224000,229700,219300,220000,84877100,0.000366100475330222 +SPY,20020906 00:00,897500,913700,893500,898600,34957300,0.00036686994342238364 +QQQ,20020906 00:00,226600,232200,225000,229000,83713000,0.00036686994342238364 +SPY,20020909 00:00,891000,920200,882700,908000,32916400,0.00036716197186653226 +QQQ,20020909 00:00,226800,233900,222100,231800,70717100,0.00036716197186653226 +SPY,20020910 00:00,911400,916100,905600,915500,36657700,0.00036758062384201906 +QQQ,20020910 00:00,232300,236700,230300,235400,70398600,0.00036758062384201906 +SPY,20020911 00:00,924700,937000,909200,915000,24306100,0.00036759490388753877 +QQQ,20020911 00:00,241200,250800,235000,235500,69184600,0.00036759490388753877 +SPY,20020912 00:00,907500,908400,889900,892600,48311100,0.0003673631567731046 +QQQ,20020912 00:00,232400,241300,227100,228000,68748300,0.0003673631567731046 +SPY,20020913 00:00,887000,899000,882500,895400,42509400,0.0003672090014815383 +QQQ,20020913 00:00,226000,239800,220800,229600,77287500,0.0003672090014815383 +SPY,20020916 00:00,893200,898300,884700,897300,24897000,0.00036681520735754784 +QQQ,20020916 00:00,228700,230100,223700,225700,55021100,0.00036681520735754784 +SPY,20020917 00:00,908900,911900,877500,879700,44418100,0.0003515560124115412 +QQQ,20020917 00:00,230500,239700,222600,223300,85846700,0.0003515560124115412 +SPY,20020918 00:00,870200,885000,861000,874900,49351800,0.0003513239903268079 +QQQ,20020918 00:00,220100,229900,210900,222400,81549700,0.0003513239903268079 +SPY,20020919 00:00,860000,868000,847800,848500,44725900,0.0003538023386945496 +QQQ,20020919 00:00,217000,221300,212000,216000,82665100,0.0003538023386945496 +SPY,20020920 00:00,849200,852000,840500,846600,43886200,0.0003494825706604444 +QQQ,20020920 00:00,218300,219000,214800,216500,74384900,0.0003494825706604444 +SPY,20020923 00:00,836500,840700,826900,835900,44616900,0.00034866596096604275 +QQQ,20020923 00:00,214500,228400,208100,209900,70595300,0.00034866596096604275 +SPY,20020924 00:00,824400,836500,818500,821500,64501200,0.00034074877840100726 +QQQ,20020924 00:00,206900,219500,206500,209800,86963400,0.00034074877840100726 +SPY,20020925 00:00,833700,847700,820400,841100,56135500,0.0003451381270435297 +QQQ,20020925 00:00,213500,220400,211000,218800,96534200,0.0003451381270435297 +SPY,20020926 00:00,850200,859800,844500,858700,52674900,0.0003443335741858094 +QQQ,20020926 00:00,221600,255900,210200,217700,102333100,0.0003443335741858094 +SPY,20020927 00:00,850000,857000,828000,828500,58450400,0.00034679017043892 +QQQ,20020927 00:00,215500,222100,211500,213600,106090000,0.00034679017043892 +SPY,20020930 00:00,820000,828000,800100,816000,69973300,0.0003466513747594014 +QQQ,20020930 00:00,210700,219600,204900,207200,89339200,0.0003466513747594014 +SPY,20021001 00:00,824400,851000,810900,850000,60049200,0.0003540463821522937 +QQQ,20021001 00:00,209100,219000,204500,216200,94488100,0.0003540463821522937 +SPY,20021002 00:00,846900,855300,825800,830500,54398600,0.00035536185569906906 +QQQ,20021002 00:00,215100,219700,206800,211600,91509600,0.00035536185569906906 +SPY,20021003 00:00,831400,848400,819500,820500,54268700,0.0003502493194454431 +QQQ,20021003 00:00,210600,219800,206800,207000,69115500,0.0003502493194454431 +SPY,20021004 00:00,828000,829200,795800,803900,65678900,0.0003517655347507925 +QQQ,20021004 00:00,209400,216500,201100,202800,78358700,0.0003517655347507925 +SPY,20021007 00:00,800700,812000,785500,788200,49064700,0.00035261429471186083 +QQQ,20021007 00:00,202600,205900,198500,199900,76567500,0.00035261429471186083 +SPY,20021008 00:00,798100,813100,782000,801100,73542900,0.0003534843050031572 +QQQ,20021008 00:00,202800,209700,197600,201600,94908000,0.0003534843050031572 +SPY,20021009 00:00,790900,798500,777800,780000,78213900,0.00035315478873943997 +QQQ,20021009 00:00,199400,209300,198400,200900,104403400,0.00035315478873943997 +SPY,20021010 00:00,779400,810700,770700,806600,72425800,0.00035533527060075055 +QQQ,20021010 00:00,201000,219100,199100,210900,106641000,0.00035533527060075055 +SPY,20021011 00:00,821000,847300,801800,839000,74412000,0.0003592081256838934 +QQQ,20021011 00:00,215500,229800,205100,221000,128397800,0.0003592081256838934 +SPY,20021014 00:00,832000,848500,830300,844700,38471500,0.0003597727337393569 +QQQ,20021014 00:00,218700,224800,209800,224200,78089800,0.0003597727337393569 +SPY,20021015 00:00,869900,897500,868600,884200,68613100,0.0003697943240388242 +QQQ,20021015 00:00,234400,235900,222100,235800,105141300,0.0003697943240388242 +SPY,20021016 00:00,874200,882600,859200,863700,57091900,0.00037260140206577224 +QQQ,20021016 00:00,227200,236000,209500,226500,86678000,0.00037260140206577224 +SPY,20021017 00:00,888700,900300,878500,881800,55143700,0.0003713118146230006 +QQQ,20021017 00:00,236000,238100,225800,234800,84511600,0.0003713118146230006 +SPY,20021018 00:00,871500,891100,869300,886500,45093200,0.00037192666869366903 +QQQ,20021018 00:00,232800,238000,226400,237800,84281700,0.00037192666869366903 +SPY,20021021 00:00,881200,905000,875700,902900,42064100,0.0003735398444906931 +QQQ,20021021 00:00,235200,244500,214200,243200,79368900,0.0003735398444906931 +SPY,20021022 00:00,890500,900100,885200,893200,38383100,0.0003723015507576115 +QQQ,20021022 00:00,237400,243400,230900,239500,84516800,0.0003723015507576115 +SPY,20021023 00:00,887700,899900,866500,899700,52322200,0.0003732290924951858 +QQQ,20021023 00:00,238500,246300,230400,245800,85971700,0.0003732290924951858 +SPY,20021024 00:00,907000,909000,881000,885800,51738000,0.000374467697712004 +QQQ,20021024 00:00,246800,248600,226300,240200,88992000,0.000374467697712004 +SPY,20021025 00:00,882200,901600,879400,900400,38908200,0.0003743265361806472 +QQQ,20021025 00:00,239900,247500,239900,247400,67082000,0.0003743265361806472 +SPY,20021028 00:00,911500,912900,888300,894200,38074900,0.0003749351370778852 +QQQ,20021028 00:00,250000,255700,239800,243400,100819700,0.0003749351370778852 +SPY,20021029 00:00,890800,899200,870000,886000,57023000,0.00037068358923734784 +QQQ,20021029 00:00,243100,244700,225000,239100,89420200,0.00037068358923734784 +SPY,20021030 00:00,886800,899600,882300,894500,38636800,0.00037008711470972204 +QQQ,20021030 00:00,240700,247900,231400,245500,103630700,0.00037008711470972204 +SPY,20021031 00:00,896600,903000,881900,888600,35755600,0.00036995958963496504 +QQQ,20021031 00:00,246600,255500,243600,245700,78279800,0.00036995958963496504 +SPY,20021101 00:00,883500,908200,880500,905300,48012400,0.00036821595969242603 +QQQ,20021101 00:00,243800,259200,238500,253000,80262900,0.00036821595969242603 +SPY,20021104 00:00,918000,929400,909000,911500,44177600,0.00036898470917580265 +QQQ,20021104 00:00,260500,268200,248200,259700,107500700,0.00036898470917580265 +SPY,20021105 00:00,908400,920700,908400,919700,30931400,0.000366986803752724 +QQQ,20021105 00:00,257100,261400,247600,261100,76438700,0.000366986803752724 +SPY,20021106 00:00,924800,930700,900400,927700,63379600,0.0003655778482981877 +QQQ,20021106 00:00,262900,265100,256400,264600,112278100,0.0003655778482981877 +SPY,20021107 00:00,920000,922200,902200,905700,45962500,0.0003688548550933966 +QQQ,20021107 00:00,259800,267800,253100,254900,79315500,0.0003688548550933966 +SPY,20021108 00:00,905300,915700,895200,898700,36903700,0.00036934748043359684 +QQQ,20021108 00:00,254900,258700,249600,251100,76464100,0.00036934748043359684 +SPY,20021111 00:00,895200,900300,878000,880500,31852200,0.0003718836690401518 +QQQ,20021111 00:00,249500,250200,241500,242500,73499000,0.0003718836690401518 +SPY,20021112 00:00,886600,899100,883600,887500,36401700,0.00037299619209001973 +QQQ,20021112 00:00,244000,259500,241300,249400,84558000,0.00037299619209001973 +SPY,20021113 00:00,883200,899000,874500,886800,60231700,0.00037006350269960884 +QQQ,20021113 00:00,247400,259200,233500,251600,113670000,0.00037006350269960884 +SPY,20021114 00:00,900700,910000,891900,908700,28761400,0.000374707108640397 +QQQ,20021114 00:00,255800,266900,246900,262900,77875600,0.000374707108640397 +SPY,20021115 00:00,900000,915500,899100,913800,33334000,0.0003748286023806635 +QQQ,20021115 00:00,259000,264500,252200,263800,65146200,0.0003748286023806635 +SPY,20021118 00:00,921500,926100,903500,905000,25907100,0.00037528089944120714 +QQQ,20021118 00:00,267200,267700,236300,260200,72857100,0.00037528089944120714 +SPY,20021119 00:00,900200,911000,897600,902300,30986600,0.0003743678405936507 +QQQ,20021119 00:00,258000,260500,253000,255000,86414500,0.0003743678405936507 +SPY,20021120 00:00,899800,920700,897400,919400,34245800,0.0003771390019679244 +QQQ,20021120 00:00,255800,266700,255200,266500,69602600,0.0003771390019679244 +SPY,20021121 00:00,926000,965800,924300,939000,54281600,0.0003810614808615221 +QQQ,20021121 00:00,269300,297000,266000,278000,104164700,0.0003810614808615221 +SPY,20021122 00:00,934800,942700,930000,936200,39499700,0.00038010826243439056 +QQQ,20021122 00:00,273700,283200,257600,277400,71339800,0.00038010826243439056 +SPY,20021125 00:00,934300,942600,927700,938000,32286500,0.0003795817606356768 +QQQ,20021125 00:00,277600,282100,275400,280600,69442600,0.0003795817606356768 +SPY,20021126 00:00,930700,934500,916200,918500,39862600,0.0003823443093861094 +QQQ,20021126 00:00,277800,279400,269000,270300,77010400,0.0003823443093861094 +SPY,20021127 00:00,925200,946500,915700,943500,33837800,0.00038410864389296225 +QQQ,20021127 00:00,275300,290900,272500,279800,70462800,0.00038410864389296225 +SPY,20021129 00:00,948000,948000,937100,939800,20285500,0.00038296115140577997 +QQQ,20021129 00:00,282100,289100,270100,277800,37214000,0.00038296115140577997 +SPY,20021202 00:00,954700,960500,932200,938900,42283000,0.00038295047490512186 +QQQ,20021202 00:00,284200,287900,270400,278500,86342100,0.00038295047490512186 +SPY,20021203 00:00,932500,934000,923500,925500,31785300,0.00038389312187194706 +QQQ,20021203 00:00,275500,291900,267500,270800,77431000,0.00038389312187194706 +SPY,20021204 00:00,918100,931400,914300,923700,63588800,0.00038139482966722496 +QQQ,20021204 00:00,265600,269500,254900,265900,120174500,0.00038139482966722496 +SPY,20021205 00:00,927000,929500,911000,911600,34786300,0.0003769503990528018 +QQQ,20021205 00:00,269500,270000,255900,261700,77947200,0.0003769503990528018 +SPY,20021206 00:00,901200,921700,899800,918100,47964000,0.00037738471457149077 +QQQ,20021206 00:00,258100,267200,256900,264800,78722300,0.00037738471457149077 +SPY,20021209 00:00,910700,914600,896200,896900,33704600,0.000380705792675544 +QQQ,20021209 00:00,262200,266500,252500,252700,73871100,0.000380705792675544 +SPY,20021210 00:00,900200,911000,897600,909200,31434700,0.00038066076139339045 +QQQ,20021210 00:00,254200,268200,245400,256600,73678300,0.00038066076139339045 +SPY,20021211 00:00,904200,916200,901600,910400,35787600,0.00038077250885981066 +QQQ,20021211 00:00,254400,260700,253200,257600,62319700,0.00038077250885981066 +SPY,20021212 00:00,912000,914900,902000,907500,33138900,0.00038068828207081593 +QQQ,20021212 00:00,260200,266900,249400,258300,61826200,0.00038068828207081593 +SPY,20021213 00:00,899100,910000,893600,895000,34552900,0.00037966594521816725 +QQQ,20021213 00:00,255200,255700,250300,250400,70483400,0.00037966594521816725 +SPY,20021216 00:00,898200,916800,896600,916800,34515200,0.0003830078460057345 +QQQ,20021216 00:00,252200,259600,250700,258700,57796400,0.0003830078460057345 +SPY,20021217 00:00,913700,917400,907400,909300,31189300,0.00038206896578455346 +QQQ,20021217 00:00,258100,262000,255600,258800,58934900,0.00038206896578455346 +SPY,20021218 00:00,903400,909000,846600,896400,33084000,0.0003829087260934408 +QQQ,20021218 00:00,255500,256000,250500,252000,63551600,0.0003829087260934408 +SPY,20021219 00:00,893500,907000,886000,890800,37939400,0.0003834157443183177 +QQQ,20021219 00:00,251700,260800,240300,250100,98159000,0.0003834157443183177 +SPY,20021220 00:00,892000,900200,891000,896900,27739500,0.00038271057449030507 +QQQ,20021220 00:00,253300,255000,250700,252300,56692000,0.00038271057449030507 +SPY,20021223 00:00,895900,906000,893100,899300,20291700,0.00038294145061121054 +QQQ,20021223 00:00,252000,257600,251300,256700,44123800,0.00038294145061121054 +SPY,20021224 00:00,896100,900000,892500,893300,11260600,0.0003831611085883542 +QQQ,20021224 00:00,255000,257300,253000,254000,16811500,0.0003831611085883542 +SPY,20021226 00:00,897700,906100,888400,890300,16532700,0.0003829281456686229 +QQQ,20021226 00:00,255300,259100,251700,252500,32835100,0.0003829281456686229 +SPY,20021227 00:00,889600,899800,875200,876800,21248800,0.0003835629154191878 +QQQ,20021227 00:00,251800,258500,247500,248200,39670200,0.0003835629154191878 +SPY,20021230 00:00,878000,884700,872200,880900,27752900,0.00038325523796733295 +QQQ,20021230 00:00,248400,249700,242600,246100,56237900,0.00038325523796733295 +SPY,20021231 00:00,879900,884300,870800,881800,29418400,0.0003821032467806493 +QQQ,20021231 00:00,245400,247100,235400,244000,43931800,0.0003821032467806493 +SPY,20030102 00:00,888500,911900,885400,911300,40792000,0.00038785602068315637 +QQQ,20030102 00:00,247200,255500,203100,255000,62930000,0.00038785602068315637 +SPY,20030103 00:00,909100,913900,896800,911300,29192500,0.00038625388812344797 +QQQ,20030103 00:00,254600,257000,252800,256300,37309100,0.00038625388812344797 +SPY,20030106 00:00,912400,937000,910900,931300,37793700,0.0003889185209055442 +QQQ,20030106 00:00,257100,266600,252000,263900,59486400,0.0003889185209055442 +SPY,20030107 00:00,929000,933700,922000,925600,37236200,0.0003884828788282322 +QQQ,20030107 00:00,264100,269300,254100,265800,87422200,0.0003884828788282322 +SPY,20030108 00:00,922000,924000,910500,912000,36077300,0.00038989557675118844 +QQQ,20030108 00:00,263900,264900,258400,259100,71480100,0.00038989557675118844 +SPY,20030109 00:00,918200,931800,910900,930000,31914000,0.0003924491465392595 +QQQ,20030109 00:00,262400,269800,259300,267300,72158200,0.0003924491465392595 +SPY,20030110 00:00,919500,936400,918000,929700,39609900,0.0003924174741930708 +QQQ,20030110 00:00,263500,279600,262200,270500,79339000,0.0003924174741930708 +SPY,20030113 00:00,935500,938600,924400,928800,29576600,0.0003919367965554519 +QQQ,20030113 00:00,273300,274700,263000,269000,68663100,0.0003919367965554519 +SPY,20030114 00:00,926900,938300,922000,934400,21777100,0.0003919011557520361 +QQQ,20030114 00:00,269100,277300,268500,271900,40962000,0.0003919011557520361 +SPY,20030115 00:00,935400,935700,915100,921200,32379000,0.00039261555147304385 +QQQ,20030115 00:00,272400,277700,265800,266900,52539700,0.00039261555147304385 +SPY,20030116 00:00,925000,933300,914600,918300,40043700,0.00039080765131870206 +QQQ,20030116 00:00,267700,269800,256300,263900,61663400,0.00039080765131870206 +SPY,20030117 00:00,909900,923000,901500,904800,34847000,0.00039178652369020164 +QQQ,20030117 00:00,259000,267000,244500,253500,74862300,0.00039178652369020164 +SPY,20030121 00:00,908700,909200,878800,890300,37621400,0.00039123914794424343 +QQQ,20030121 00:00,254000,263400,251000,251100,63857100,0.00039123914794424343 +SPY,20030122 00:00,887700,900000,880100,880400,40523500,0.00039051285923985123 +QQQ,20030122 00:00,249700,255400,240600,250600,79003600,0.00039051285923985123 +SPY,20030123 00:00,887500,894300,879500,890600,42524800,0.0003906517820499456 +QQQ,20030123 00:00,254000,258400,251100,256600,73375400,0.0003906517820499456 +SPY,20030124 00:00,885900,887600,861700,863300,61025800,0.0003944317860108485 +QQQ,20030124 00:00,255300,255300,246400,247600,71254900,0.0003944317860108485 +SPY,20030127 00:00,857000,869400,845000,850300,57425600,0.0003948409420214828 +QQQ,20030127 00:00,244500,250300,237000,245500,72478300,0.0003948409420214828 +SPY,20030128 00:00,856900,878500,846500,861200,44568500,0.0003955642017746573 +QQQ,20030128 00:00,247700,250500,244200,248500,61389300,0.0003955642017746573 +SPY,20030129 00:00,854500,871800,847700,867800,48968100,0.0003931906672574871 +QQQ,20030129 00:00,247600,254500,243400,253000,92756700,0.0003931906672574871 +SPY,20030130 00:00,867900,868800,846300,848000,46355700,0.0003951627308095727 +QQQ,20030130 00:00,253200,254200,244500,245100,67206600,0.0003951627308095727 +SPY,20030131 00:00,841500,862200,841500,858400,50426300,0.00039448109858541107 +QQQ,20030131 00:00,240700,251300,240100,244100,86037100,0.00039448109858541107 +SPY,20030203 00:00,861000,886900,858900,862700,37270000,0.0003943951893080431 +QQQ,20030203 00:00,245300,248000,243800,245100,47509700,0.0003943951893080431 +SPY,20030204 00:00,853100,854400,843000,851400,39714400,0.0003918402179680441 +QQQ,20030204 00:00,241800,242900,238200,241400,58999700,0.0003918402179680441 +SPY,20030205 00:00,857500,865400,844200,846400,51490200,0.0003917556735817682 +QQQ,20030205 00:00,243300,257400,240100,240900,79135200,0.0003917556735817682 +SPY,20030206 00:00,843900,852200,836500,841700,52470600,0.0003915080270179315 +QQQ,20030206 00:00,240200,251900,211500,241500,108671100,0.0003915080270179315 +SPY,20030207 00:00,849100,849900,829700,832900,40984200,0.0003918757628338784 +QQQ,20030207 00:00,243600,249800,236500,237800,71679500,0.0003918757628338784 +SPY,20030210 00:00,834700,841300,826500,839400,43562000,0.00039078376739308274 +QQQ,20030210 00:00,239000,249900,236200,241300,66776400,0.00039078376739308274 +SPY,20030211 00:00,843700,848800,828300,832100,45084300,0.0003894927045175183 +QQQ,20030211 00:00,242500,246100,211400,241100,72796800,0.0003894927045175183 +SPY,20030212 00:00,831600,836200,822200,822200,35247100,0.00038986277614301513 +QQQ,20030212 00:00,240700,244100,238000,238300,53702200,0.00038986277614301513 +SPY,20030213 00:00,821500,829500,810000,821000,47069400,0.000389284450357152 +QQQ,20030213 00:00,238500,245900,233200,236700,69510700,0.000389284450357152 +SPY,20030214 00:00,823700,839100,818300,838800,57097600,0.000392176498089178 +QQQ,20030214 00:00,238300,244000,236200,244000,65201400,0.000392176498089178 +SPY,20030218 00:00,845300,857700,844900,855500,36249100,0.0003941612164286122 +QQQ,20030218 00:00,247000,252300,242500,252300,71444500,0.0003941612164286122 +SPY,20030219 00:00,853200,854700,839000,849300,29998000,0.0003919739068489996 +QQQ,20030219 00:00,252000,252400,247100,250200,42341000,0.0003919739068489996 +SPY,20030220 00:00,852200,854200,805000,840900,27850500,0.00039115202968278436 +QQQ,20030220 00:00,251500,252700,248400,248700,57530900,0.00039115202968278436 +SPY,20030221 00:00,843800,857400,834600,853400,63271800,0.00038973047684974423 +QQQ,20030221 00:00,249300,253700,245100,252500,66980700,0.00038973047684974423 +SPY,20030224 00:00,849300,855100,835900,836300,29643900,0.0003910313575686969 +QQQ,20030224 00:00,251300,259000,247100,247400,53999000,0.0003910313575686969 +SPY,20030225 00:00,829500,844900,822200,843200,53471300,0.0003881244802583635 +QQQ,20030225 00:00,244500,254500,240800,248400,70866400,0.0003881244802583635 +SPY,20030226 00:00,840200,845300,830800,831900,37153800,0.00038926353456892205 +QQQ,20030226 00:00,246800,249400,242000,242400,56822500,0.00038926353456892205 +SPY,20030227 00:00,837000,855000,829900,841700,48562900,0.00039054238590318085 +QQQ,20030227 00:00,244200,249200,242700,247500,63839900,0.00039054238590318085 +SPY,20030228 00:00,844700,852300,834500,846200,41091800,0.0003908094960380612 +QQQ,20030228 00:00,248100,252200,240200,251100,49281500,0.0003908094960380612 +SPY,20030303 00:00,852600,857800,837200,839300,41103000,0.0003861571099185432 +QQQ,20030303 00:00,252500,254800,245600,246500,59576800,0.0003861571099185432 +SPY,20030304 00:00,839500,840100,826500,827300,29689500,0.0003829296618981585 +QQQ,20030304 00:00,246600,255300,242600,244500,58553200,0.0003829296618981585 +SPY,20030305 00:00,826100,835400,823600,835000,41109200,0.00038345203269732456 +QQQ,20030305 00:00,244000,247800,243200,246800,65213900,0.00038345203269732456 +SPY,20030306 00:00,828600,835200,824700,827000,40633100,0.0003827868233546101 +QQQ,20030306 00:00,244400,246800,242300,244600,53137500,0.0003827868233546101 +SPY,20030307 00:00,816400,840700,814300,833700,61733800,0.0003829343260545618 +QQQ,20030307 00:00,240700,246900,233500,245700,70092600,0.0003829343260545618 +SPY,20030310 00:00,826300,828600,811000,812300,38552200,0.0003843552996194064 +QQQ,20030310 00:00,243500,244600,239100,239800,53167500,0.0003843552996194064 +SPY,20030311 00:00,814900,820800,805200,805500,47065100,0.00038446599892281714 +QQQ,20030311 00:00,240500,242400,237800,238200,52508000,0.00038446599892281714 +SPY,20030312 00:00,804100,810100,793800,809700,65050000,0.0003848172624209722 +QQQ,20030312 00:00,237600,241800,235400,241600,73786900,0.0003848172624209722 +SPY,20030313 00:00,821900,838300,815300,837800,68351300,0.0003927488284857059 +QQQ,20030313 00:00,246600,256300,241000,255800,117076000,0.0003927488284857059 +SPY,20030314 00:00,841900,847700,833500,839000,62069400,0.00039278669869369134 +QQQ,20030314 00:00,257300,266400,243000,256100,88905300,0.00039278669869369134 +SPY,20030317 00:00,834600,869500,832200,868300,79922400,0.0003990031075019888 +QQQ,20030317 00:00,254500,267800,244800,267600,137851800,0.0003990031075019888 +SPY,20030318 00:00,871500,873200,861000,871900,48600400,0.00039906226689602296 +QQQ,20030318 00:00,267900,269000,256300,268500,93588900,0.00039906226689602296 +SPY,20030319 00:00,873100,881600,866800,879900,46060100,0.0003988991918052405 +QQQ,20030319 00:00,268400,270800,255400,267100,85549100,0.0003988991918052405 +SPY,20030320 00:00,873200,885900,863500,881300,66050700,0.0003969122545092853 +QQQ,20030320 00:00,265400,271400,261700,268300,89296900,0.0003969122545092853 +SPY,20030321 00:00,887900,898800,877900,897400,65617700,0.000397664270541007 +QQQ,20030321 00:00,272200,273800,253500,271600,92263600,0.000397664270541007 +SPY,20030324 00:00,879900,881400,855800,865800,66185400,0.000403055474932855 +QQQ,20030324 00:00,264700,266000,259700,260300,82734600,0.000403055474932855 +SPY,20030325 00:00,867400,886700,855900,876700,59039700,0.000402575887202451 +QQQ,20030325 00:00,261600,274700,260100,265100,90591500,0.000402575887202451 +SPY,20030326 00:00,875600,878500,862300,872000,44220500,0.0004023132955776504 +QQQ,20030326 00:00,264900,267700,255600,265700,65788800,0.0004023132955776504 +SPY,20030327 00:00,864300,885000,859900,871000,51967900,0.00040232519399809535 +QQQ,20030327 00:00,262600,266500,261000,263800,64262200,0.00040232519399809535 +SPY,20030328 00:00,864700,872800,862500,865900,31216600,0.0004024225964373263 +QQQ,20030328 00:00,261500,264300,259500,260300,43106700,0.0004024225964373263 +SPY,20030331 00:00,853500,869600,844000,849800,55166100,0.0004042373031666141 +QQQ,20030331 00:00,255800,273600,243100,253200,83742300,0.0004042373031666141 +SPY,20030401 00:00,852600,868500,849100,860700,52487500,0.0004033330206213587 +QQQ,20030401 00:00,254500,256700,252500,254300,68171400,0.0004033330206213587 +SPY,20030402 00:00,875600,887700,870500,883900,45771800,0.00040741905927295705 +QQQ,20030402 00:00,260500,265600,254300,264400,72604600,0.00040741905927295705 +SPY,20030403 00:00,888400,889900,878000,878800,46588000,0.00040738328127520293 +QQQ,20030403 00:00,266400,268500,254900,264400,65951500,0.00040738328127520293 +SPY,20030404 00:00,884300,885900,875700,881200,34027100,0.0004071073798002859 +QQQ,20030404 00:00,265700,266000,259700,261200,62935800,0.0004071073798002859 +SPY,20030407 00:00,903400,909200,881900,882000,65803200,0.00040698029602564577 +QQQ,20030407 00:00,271200,279800,261800,262100,80657200,0.00040698029602564577 +SPY,20030408 00:00,883000,888900,862000,881100,37497500,0.0004061934366448234 +QQQ,20030408 00:00,261500,262900,258800,260100,54447300,0.0004061934366448234 +SPY,20030409 00:00,883600,898100,867700,868600,54266200,0.0004066343224788356 +QQQ,20030409 00:00,261000,267100,235900,254600,73818600,0.0004066343224788356 +SPY,20030410 00:00,870700,889000,857100,874500,36457100,0.00040460557782820964 +QQQ,20030410 00:00,254700,257700,244200,256900,53669700,0.00040460557782820964 +SPY,20030411 00:00,881900,887100,868600,871700,44797600,0.0004041678809510692 +QQQ,20030411 00:00,260300,265200,253600,255100,65478200,0.0004041678809510692 +SPY,20030414 00:00,874700,888700,864600,888500,33088500,0.0004060299737555884 +QQQ,20030414 00:00,255800,261400,254900,260500,49686300,0.0004060299737555884 +SPY,20030415 00:00,888600,894700,883900,894200,41537300,0.000402398515356298 +QQQ,20030415 00:00,259700,263500,252700,262100,54077000,0.000402398515356298 +SPY,20030416 00:00,899100,900700,880300,882300,49914000,0.00040236107034436093 +QQQ,20030416 00:00,266500,268300,254600,262100,68950400,0.00040236107034436093 +SPY,20030417 00:00,883500,897200,872900,896600,35530800,0.00040418561547337414 +QQQ,20030417 00:00,261600,269800,261500,269100,67251600,0.00040418561547337414 +SPY,20030421 00:00,898600,901600,890600,895000,30947000,0.00040423164067659035 +QQQ,20030421 00:00,269500,271100,266000,268800,51163300,0.00040423164067659035 +SPY,20030422 00:00,891000,915600,888900,915100,55045400,0.00040453050289069204 +QQQ,20030422 00:00,267400,274600,266500,274000,66685300,0.00040453050289069204 +SPY,20030423 00:00,916000,931100,912400,922000,42098700,0.0004043303606279689 +QQQ,20030423 00:00,275000,278000,272600,276500,66712100,0.0004043303606279689 +SPY,20030424 00:00,915300,920800,901800,914200,48770700,0.000404063420665157 +QQQ,20030424 00:00,273600,277500,244700,275600,71731200,0.000404063420665157 +SPY,20030425 00:00,913000,914700,900200,901500,42082300,0.00040523906072467285 +QQQ,20030425 00:00,273200,274500,268600,269400,63228300,0.00040523906072467285 +SPY,20030428 00:00,904400,921900,901700,918700,44105500,0.00040499778704160364 +QQQ,20030428 00:00,270500,276300,269500,275200,57086100,0.00040499778704160364 +SPY,20030429 00:00,921400,936600,914000,921500,47893600,0.00040494741096687914 +QQQ,20030429 00:00,276500,282000,274100,277500,74657300,0.00040494741096687914 +SPY,20030430 00:00,919300,925700,913200,918500,43007600,0.0004040643648847619 +QQQ,20030430 00:00,276600,277900,274300,274700,58553700,0.0004040643648847619 +SPY,20030501 00:00,919200,927300,905000,919200,47446800,0.00040434828766379335 +QQQ,20030501 00:00,274400,278700,271900,276800,64591500,0.00040434828766379335 +SPY,20030502 00:00,915600,934700,909000,933000,46777300,0.0004055152361696319 +QQQ,20030502 00:00,276100,289600,271400,282700,83785100,0.0004055152361696319 +SPY,20030505 00:00,934700,939700,920500,929500,34390100,0.0004043556948873192 +QQQ,20030505 00:00,283300,287100,281700,282400,79783100,0.0004043556948873192 +SPY,20030506 00:00,931000,944200,920500,937900,42445700,0.000402993737444952 +QQQ,20030506 00:00,282200,295300,280800,286300,73696900,0.000402993737444952 +SPY,20030507 00:00,934200,941400,924000,933300,39303700,0.00040318570459739456 +QQQ,20030507 00:00,284100,286900,281200,282800,69065700,0.00040318570459739456 +SPY,20030508 00:00,925200,933800,922100,923400,39041600,0.0003881064435241054 +QQQ,20030508 00:00,278600,281900,270900,278100,78385700,0.0003881064435241054 +SPY,20030509 00:00,928300,938000,922000,937200,32040000,0.00038782245833746956 +QQQ,20030509 00:00,280400,284800,273800,284100,57497000,0.00038782245833746956 +SPY,20030512 00:00,935000,963000,922400,949000,33488000,0.00038618495854912167 +QQQ,20030512 00:00,283600,289600,258500,288500,66583800,0.00038618495854912167 +SPY,20030513 00:00,945300,959700,916000,946400,36510100,0.00038333674228164014 +QQQ,20030513 00:00,286300,289900,285400,287200,62044000,0.00038333674228164014 +SPY,20030514 00:00,951000,952400,922400,943600,31475800,0.00037887742279730873 +QQQ,20030514 00:00,288700,289700,283600,285300,59402700,0.00037887742279730873 +SPY,20030515 00:00,948900,953300,942500,951300,43037600,0.00037941528753089154 +QQQ,20030515 00:00,287500,297200,285600,289100,56876800,0.00037941528753089154 +SPY,20030516 00:00,948900,954500,940500,948600,35295200,0.00037937651242139824 +QQQ,20030516 00:00,287200,289400,283500,286600,67115800,0.00037937651242139824 +SPY,20030519 00:00,942000,949200,920800,925100,43984300,0.0003823492425504943 +QQQ,20030519 00:00,285200,286800,276100,277000,90054700,0.0003823492425504943 +SPY,20030520 00:00,928200,942100,916000,924500,52587100,0.0003810965581971463 +QQQ,20030520 00:00,277600,279600,266100,276800,66025400,0.0003810965581971463 +SPY,20030521 00:00,921100,929200,919100,927800,43595100,0.0003800416969360558 +QQQ,20030521 00:00,276500,285100,274400,277100,62584100,0.0003800416969360558 +SPY,20030522 00:00,929500,940500,921400,936800,37055000,0.0003805492053074693 +QQQ,20030522 00:00,277600,283200,231400,281300,60491200,0.0003805492053074693 +SPY,20030523 00:00,935300,953600,928600,937200,25718600,0.0003797123948783295 +QQQ,20030523 00:00,280500,282500,271500,280800,37486800,0.0003797123948783295 +SPY,20030527 00:00,933000,958400,931800,956200,40479600,0.00038165680379198796 +QQQ,20030527 00:00,279300,292200,278900,291400,101068600,0.00038165680379198796 +SPY,20030528 00:00,958500,977300,949800,958300,35069300,0.00038139454253805296 +QQQ,20030528 00:00,291800,294000,282200,291600,75175800,0.00038139454253805296 +SPY,20030529 00:00,958800,968200,923200,953700,49556400,0.00038083275269570866 +QQQ,20030529 00:00,292300,298000,291000,293100,95698200,0.00038083275269570866 +SPY,20030530 00:00,959000,970900,951700,969300,46174600,0.00038185130252852805 +QQQ,20030530 00:00,295300,298700,290700,297400,76031300,0.00038185130252852805 +SPY,20030602 00:00,975300,988400,960800,971700,47403200,0.0003818921464343134 +QQQ,20030602 00:00,300800,305000,290000,294500,99416800,0.0003818921464343134 +SPY,20030603 00:00,971500,979000,968500,977100,31344400,0.0003777582189801951 +QQQ,20030603 00:00,294500,298400,286600,298300,75594300,0.0003777582189801951 +SPY,20030604 00:00,976600,993500,947200,991400,46824600,0.00037877994345158876 +QQQ,20030604 00:00,298100,305800,297200,304000,83244900,0.00037877994345158876 +SPY,20030605 00:00,985800,995900,981400,995600,42870100,0.00037838095022224956 +QQQ,20030605 00:00,301300,306500,299700,306100,84153500,0.00037838095022224956 +SPY,20030606 00:00,1004400,1014000,991300,992200,55486600,0.0003762550783602896 +QQQ,20030606 00:00,311700,314700,300700,301000,133737800,0.0003762550783602896 +SPY,20030609 00:00,987800,999200,977700,981100,36095100,0.0003767233284583309 +QQQ,20030609 00:00,300000,302200,295300,297300,94536600,0.0003767233284583309 +SPY,20030610 00:00,984600,998300,977200,990400,27750200,0.000377325422283466 +QQQ,20030610 00:00,298500,301800,296800,301800,63484600,0.000377325422283466 +SPY,20030611 00:00,991600,1011900,982800,1003300,35323300,0.000375899847021967 +QQQ,20030611 00:00,300700,328600,291700,305200,85915300,0.000375899847021967 +SPY,20030612 00:00,1007500,1014000,996200,1005200,34887000,0.000375384320656353 +QQQ,20030612 00:00,306200,313900,302600,305600,77631200,0.000375384320656353 +SPY,20030613 00:00,1006000,1007500,989500,994400,43904700,0.0003756374145101039 +QQQ,20030613 00:00,306600,307300,298600,299500,82269400,0.0003756374145101039 +SPY,20030616 00:00,999600,1016600,998000,1016600,34397800,0.00037816423283439327 +QQQ,20030616 00:00,301700,308400,300000,308200,68028500,0.00037816423283439327 +SPY,20030617 00:00,1020500,1021800,1007300,1016800,34970300,0.00037420603756938703 +QQQ,20030617 00:00,310100,311100,305600,307900,66045300,0.00037420603756938703 +SPY,20030618 00:00,1012900,1021400,1010000,1015400,33837000,0.00037418462518328395 +QQQ,20030618 00:00,306600,312300,285000,310200,77165700,0.00037418462518328395 +SPY,20030619 00:00,1016400,1017300,998400,1000200,41701500,0.0003728995207251243 +QQQ,20030619 00:00,309800,312400,303800,304800,77195000,0.0003728995207251243 +SPY,20030620 00:00,1003900,1005000,995000,997500,36384800,0.000371306314649186 +QQQ,20030620 00:00,306900,315000,302500,304000,73708600,0.000371306314649186 +SPY,20030623 00:00,994500,996600,979200,983600,33254600,0.0003703367894289987 +QQQ,20030623 00:00,303300,303700,290800,297900,83259300,0.0003703367894289987 +SPY,20030624 00:00,982200,990900,980200,986500,35363600,0.00036989416940581897 +QQQ,20030624 00:00,297300,303000,295300,297100,80621500,0.00036989416940581897 +SPY,20030625 00:00,985300,995900,976700,978000,43741400,0.0003675871672833677 +QQQ,20030625 00:00,296700,330500,294700,296000,91645200,0.0003675871672833677 +SPY,20030626 00:00,977800,990000,969600,988900,30562500,0.0003684847708011173 +QQQ,20030626 00:00,297100,302800,296100,302100,76949300,0.0003684847708011173 +SPY,20030627 00:00,987500,991900,976600,978600,49177600,0.0003673703951574909 +QQQ,20030627 00:00,302500,305700,297700,299600,80921800,0.0003673703951574909 +SPY,20030630 00:00,982200,989300,967200,976900,29156600,0.00036740644432818923 +QQQ,20030630 00:00,301600,303400,298000,298600,68284200,0.00036740644432818923 +SPY,20030701 00:00,972500,988500,964300,985600,48168800,0.00036343553589901186 +QQQ,20030701 00:00,297000,303300,292600,302900,91627200,0.00036343553589901186 +SPY,20030702 00:00,987700,996800,985700,996300,32277800,0.00036113792509638836 +QQQ,20030702 00:00,304100,336100,303800,309000,79805700,0.00036113792509638836 +SPY,20030703 00:00,990700,998500,979000,988000,31558400,0.0003607932216159405 +QQQ,20030703 00:00,307000,318400,300700,305300,50131300,0.0003607932216159405 +SPY,20030707 00:00,996500,1009000,996100,1007500,26522100,0.0003543546025967162 +QQQ,20030707 00:00,309700,318800,302500,318400,85553900,0.0003543546025967162 +SPY,20030708 00:00,1005000,1012900,1001700,1010200,26654100,0.0003522483872691428 +QQQ,20030708 00:00,317800,323100,316200,322600,79946000,0.0003522483872691428 +SPY,20030709 00:00,1009200,1014000,1000300,1005500,32218300,0.00034995405926958965 +QQQ,20030709 00:00,321700,327800,312000,321700,81128700,0.00034995405926958965 +SPY,20030710 00:00,998400,1007700,986300,992100,49644400,0.00034672130738899737 +QQQ,20030710 00:00,318400,323000,313300,315700,98458300,0.00034672130738899737 +SPY,20030711 00:00,993900,1004500,993900,1001400,32413800,0.00034576836294800015 +QQQ,20030711 00:00,316500,319900,316100,318400,66236400,0.00034576836294800015 +SPY,20030714 00:00,1012000,1019000,996100,1007200,40162200,0.0003460183525203038 +QQQ,20030714 00:00,323400,327500,320700,322200,82207300,0.0003460183525203038 +SPY,20030715 00:00,1013800,1019100,999500,1003800,38640700,0.0003464320755523521 +QQQ,20030715 00:00,325300,326500,311500,321700,69431300,0.0003464320755523521 +SPY,20030716 00:00,1008100,1008700,977600,997600,36831600,0.00034576698135619125 +QQQ,20030716 00:00,324600,329900,310900,321400,75587900,0.00034576698135619125 +SPY,20030717 00:00,991500,999800,981600,985100,46981700,0.00034709621532257333 +QQQ,20030717 00:00,316800,318400,310400,312100,100236000,0.00034709621532257333 +SPY,20030718 00:00,990200,999800,984600,995800,33310400,0.00034344809034806453 +QQQ,20030718 00:00,314000,333400,309200,313000,75330500,0.00034344809034806453 +SPY,20030721 00:00,994500,994900,978500,982400,32513000,0.0003390687381441577 +QQQ,20030721 00:00,312600,318600,306100,308300,131325500,0.0003390687381441577 +SPY,20030722 00:00,986900,999100,979100,991200,47511800,0.0003361392866647642 +QQQ,20030722 00:00,311100,315000,308600,313100,88362500,0.0003361392866647642 +SPY,20030723 00:00,992100,998300,982800,992300,36864600,0.0003308083217441353 +QQQ,20030723 00:00,313800,316200,309900,315200,64567900,0.0003308083217441353 +SPY,20030724 00:00,999900,1003400,983700,985000,37033900,0.00031769649354555253 +QQQ,20030724 00:00,318600,320200,310800,311300,76500400,0.00031769649354555253 +SPY,20030725 00:00,986600,1002900,980400,1002300,39276800,0.00031721447373878243 +QQQ,20030725 00:00,311300,317800,307700,317700,78832100,0.00031721447373878243 +SPY,20030728 00:00,1003700,1009800,996700,1000400,33516100,0.0003160859126472326 +QQQ,20030728 00:00,318600,319900,316000,318500,56717300,0.0003160859126472326 +SPY,20030729 00:00,1001400,1003000,986800,993200,52108100,0.00030355565477574784 +QQQ,20030729 00:00,319300,327100,312300,316600,78070000,0.00030355565477574784 +SPY,20030730 00:00,996000,997900,989300,991100,27288900,0.0003034243252501384 +QQQ,20030730 00:00,317000,317400,313300,314100,55694000,0.0003034243252501384 +SPY,20030731 00:00,999800,1009400,989000,994100,51122000,0.0003040943449486913 +QQQ,20030731 00:00,318000,323300,312600,317000,82437900,0.0003040943449486913 +SPY,20030801 00:00,991900,996800,982400,983800,47944800,0.0002982683226033027 +QQQ,20030801 00:00,316900,319200,313000,314900,70790300,0.0002982683226033027 +SPY,20030804 00:00,983100,997100,970000,987200,54147600,0.00029610271604143184 +QQQ,20030804 00:00,314100,319800,308400,315100,93816600,0.00029610271604143184 +SPY,20030805 00:00,984100,988500,968400,968500,51537800,0.00029300320407855366 +QQQ,20030805 00:00,314100,317200,300500,305500,91471700,0.00029300320407855366 +SPY,20030806 00:00,967100,980600,964200,971000,48456400,0.00028632256170231356 +QQQ,20030806 00:00,303600,315100,300000,302100,93193400,0.00028632256170231356 +SPY,20030807 00:00,971700,979800,966700,978800,40462700,0.00028524638563150987 +QQQ,20030807 00:00,302200,312200,300200,302900,66734200,0.00028524638563150987 +SPY,20030808 00:00,983200,985500,977600,982200,25756900,0.0002816029803964407 +QQQ,20030808 00:00,304300,305500,289900,300600,64610600,0.0002816029803964407 +SPY,20030811 00:00,982600,996900,978400,985100,36860500,0.0002818174605002397 +QQQ,20030811 00:00,300800,306000,300300,304000,63342200,0.0002818174605002397 +SPY,20030812 00:00,987100,995600,984200,995400,29867800,0.0002823798035286035 +QQQ,20030812 00:00,305100,308900,300400,308600,55531500,0.0002823798035286035 +SPY,20030813 00:00,998200,998500,985300,988900,34206500,0.00027958982469522054 +QQQ,20030813 00:00,309800,310700,306500,308200,56769800,0.00027958982469522054 +SPY,20030814 00:00,991000,997500,985100,995400,30134100,0.00026953413070752785 +QQQ,20030814 00:00,308800,311900,306700,311400,42839000,0.00026953413070752785 +SPY,20030815 00:00,993600,997900,991200,995400,11731800,0.0002690547602052737 +QQQ,20030815 00:00,310000,313300,309300,311500,26323200,0.0002690547602052737 +SPY,20030818 00:00,999300,1007800,997400,1005000,21228600,0.0002700710387077123 +QQQ,20030818 00:00,313000,319600,310500,319400,63737300,0.0002700710387077123 +SPY,20030819 00:00,1006900,1009400,996000,1008200,36117200,0.00026742271094424815 +QQQ,20030819 00:00,321000,323700,318500,323600,63208400,0.00026742271094424815 +SPY,20030820 00:00,1002900,1008900,1001600,1005000,19140800,0.0002666379784310549 +QQQ,20030820 00:00,320900,343400,320200,322700,56847400,0.0002666379784310549 +SPY,20030821 00:00,1010500,1044500,1002000,1009100,44924100,0.0002656593266667366 +QQQ,20030821 00:00,325900,328200,321000,326800,75593700,0.0002656593266667366 +SPY,20030822 00:00,1017500,1020000,997400,997700,49593900,0.0002652634798645208 +QQQ,20030822 00:00,332700,333700,323300,324700,90054000,0.0002652634798645208 +SPY,20030825 00:00,997300,1016300,992800,998200,22212200,0.00026168711160165996 +QQQ,20030825 00:00,323600,333100,320000,324600,41284000,0.00026168711160165996 +SPY,20030826 00:00,995000,1004600,988300,1001800,43123200,0.00026158172312380627 +QQQ,20030826 00:00,322800,325900,318100,325100,78153300,0.00026158172312380627 +SPY,20030827 00:00,1000500,1003600,995700,1002400,17611500,0.00025919916599820384 +QQQ,20030827 00:00,324900,337100,323700,328100,46132500,0.00025919916599820384 +SPY,20030828 00:00,1004000,1010000,996600,1008500,25828500,0.0002570785483328983 +QQQ,20030828 00:00,329400,331100,316200,330900,53470300,0.0002570785483328983 +SPY,20030829 00:00,1006100,1014600,1000000,1014000,23586600,0.00025720709942409197 +QQQ,20030829 00:00,330400,334600,322600,333100,49200100,0.00025720709942409197 +SPY,20030902 00:00,1016400,1028800,1002800,1027700,46298000,0.00025773870237645044 +QQQ,20030902 00:00,334900,338600,304800,338300,77991800,0.00025773870237645044 +SPY,20030903 00:00,1030300,1037000,1012500,1031900,40191200,0.0002494736128419842 +QQQ,20030903 00:00,341000,342000,336500,337900,80100500,0.0002494736128419842 +SPY,20030904 00:00,1031000,1035500,1004300,1034300,26062300,0.00024824970956314183 +QQQ,20030904 00:00,338300,342200,337000,341500,59976700,0.00024824970956314183 +SPY,20030905 00:00,1029400,1205200,1015300,1026700,29648500,0.00024623173661092684 +QQQ,20030905 00:00,339600,343400,327900,338600,88478700,0.00024623173661092684 +SPY,20030908 00:00,1030400,1038800,1027300,1038000,32461700,0.0002445454444664898 +QQQ,20030908 00:00,340000,345100,338600,344600,68858600,0.0002445454444664898 +SPY,20030909 00:00,1033700,1034600,1026800,1029300,34210600,0.0002446262190677178 +QQQ,20030909 00:00,343200,344700,339200,340500,80989900,0.0002446262190677178 +SPY,20030910 00:00,1025400,1036000,1015500,1016900,42588100,0.00024566713350138 +QQQ,20030910 00:00,337500,345500,331100,331100,108812900,0.00024566713350138 +SPY,20030911 00:00,1021000,1028500,1014200,1022500,34663300,0.00024590082171948826 +QQQ,20030911 00:00,332800,337800,293100,335600,92848200,0.00024590082171948826 +SPY,20030912 00:00,1019100,1026400,1004600,1025200,40924400,0.0002425829560422213 +QQQ,20030912 00:00,333400,338000,322100,337400,102369500,0.0002425829560422213 +SPY,20030915 00:00,1025200,1026300,1010800,1021200,20062100,0.00024269480537034762 +QQQ,20030915 00:00,338500,339100,334400,334900,50427200,0.00024269480537034762 +SPY,20030916 00:00,1022300,1036400,1021700,1035500,35237000,0.00024406244796047868 +QQQ,20030916 00:00,335400,344300,330000,343400,79812200,0.00024406244796047868 +SPY,20030917 00:00,1034800,1037900,1025800,1032200,30704300,0.00024315639172319692 +QQQ,20030917 00:00,343100,345000,333300,341700,76836800,0.00024315639172319692 +SPY,20030918 00:00,1034000,1055000,1031700,1045900,29197800,0.00024380258719886112 +QQQ,20030918 00:00,341700,348600,334400,347800,88501800,0.00024380258719886112 +SPY,20030919 00:00,1042700,1046000,1034000,1038600,24909700,0.00024022119244484642 +QQQ,20030919 00:00,348000,348600,343600,346000,67567000,0.00024022119244484642 +SPY,20030922 00:00,1028500,1038700,1002900,1024900,33784400,0.00024139055637629155 +QQQ,20030922 00:00,341200,342000,337700,339500,93800100,0.00024139055637629155 +SPY,20030923 00:00,1025900,1032900,1023600,1030900,29146200,0.0002398984044051806 +QQQ,20030923 00:00,339800,345600,339100,344700,72929000,0.0002398984044051806 +SPY,20030924 00:00,1031200,1032200,1010700,1012000,39700500,0.00024234370712742024 +QQQ,20030924 00:00,345000,345200,332600,333600,106822400,0.00024234370712742024 +SPY,20030925 00:00,1014100,1018800,1002700,1005900,47503000,0.0002389549280967118 +QQQ,20030925 00:00,333900,339800,329600,329800,107048600,0.0002389549280967118 +SPY,20030926 00:00,1004400,1006600,998400,1000200,39894100,0.00023985220295227367 +QQQ,20030926 00:00,328900,339300,318100,325900,104092400,0.00023985220295227367 +SPY,20030929 00:00,1003000,1009900,987500,1008700,34534700,0.00023732184426945155 +QQQ,20030929 00:00,327600,347300,322900,331100,91294800,0.00023732184426945155 +SPY,20030930 00:00,1005300,1007600,959100,998600,66541600,0.00023625459838679883 +QQQ,20030930 00:00,329200,329600,323600,324400,115751500,0.00023625459838679883 +SPY,20031001 00:00,1002400,1021200,1000100,1020000,61422900,0.00023109001421914267 +QQQ,20031001 00:00,326100,332300,320100,331300,104783200,0.00023109001421914267 +SPY,20031002 00:00,1019300,1028500,1016300,1023200,42650800,0.00022889429954823712 +QQQ,20031002 00:00,331000,343500,322000,332100,81978200,0.00022889429954823712 +SPY,20031003 00:00,1036700,1042800,1023200,1032600,44559600,0.000228531629083675 +QQQ,20031003 00:00,338600,349600,338200,341600,107858100,0.000228531629083675 +SPY,20031006 00:00,1034800,1039900,1032000,1037200,21426800,0.000226664638636132 +QQQ,20031006 00:00,342800,344100,333000,343400,47134200,0.000226664638636132 +SPY,20031007 00:00,1032600,1042600,1029100,1041900,39712400,0.0002253554557960018 +QQQ,20031007 00:00,341600,346100,340100,345700,75347600,0.0002253554557960018 +SPY,20031008 00:00,1043300,1043900,1026000,1037100,37406500,0.00022513409456040526 +QQQ,20031008 00:00,348100,348400,341900,344200,67981200,0.00022513409456040526 +SPY,20031009 00:00,1048800,1052200,1036500,1041700,43192200,0.00022455178979908694 +QQQ,20031009 00:00,349200,352700,344300,346400,115553800,0.00022455178979908694 +SPY,20031010 00:00,1042700,1044800,1039100,1042000,20895700,0.00021829499877339185 +QQQ,20031010 00:00,347700,349700,346400,349300,63783500,0.00021829499877339185 +SPY,20031013 00:00,1047200,1052900,1017000,1048600,22789900,0.0002112430142483876 +QQQ,20031013 00:00,351400,362500,341500,351500,58393900,0.0002112430142483876 +SPY,20031014 00:00,1048000,1053600,1036700,1052900,34600000,0.0002109846848233844 +QQQ,20031014 00:00,351000,353500,349600,353100,56284800,0.0002109846848233844 +SPY,20031015 00:00,1058600,1058900,1046400,1050200,36984200,0.00020192667045719343 +QQQ,20031015 00:00,357900,358500,342000,352100,92129400,0.00020192667045719343 +SPY,20031016 00:00,1046800,1059800,1046500,1053300,31219000,0.0001980199997761761 +QQQ,20031016 00:00,351000,355300,341100,354400,65957400,0.0001980199997761761 +SPY,20031017 00:00,1054700,1059100,1039800,1042300,32168100,0.00019629059982211963 +QQQ,20031017 00:00,354100,368500,346100,346600,92146300,0.00019629059982211963 +SPY,20031020 00:00,1044500,1048300,1039400,1047800,25177800,0.00019622410660935461 +QQQ,20031020 00:00,346600,356800,340800,349800,66406700,0.00019622410660935461 +SPY,20031021 00:00,1048700,1052800,1043200,1049600,24689900,0.0001947695338386111 +QQQ,20031021 00:00,351300,354500,349400,353600,69893000,0.0001947695338386111 +SPY,20031022 00:00,1040300,1045400,1027000,1034000,31485700,0.0001955043081598923 +QQQ,20031022 00:00,349100,358800,344400,345600,85295700,0.0001955043081598923 +SPY,20031023 00:00,1028900,1039500,1026800,1037400,43512900,0.0001947666600932487 +QQQ,20031023 00:00,341500,345100,340500,343400,86490000,0.0001947666600932487 +SPY,20031024 00:00,1028300,1037600,1021800,1032800,50146300,0.00019339756941971317 +QQQ,20031024 00:00,337900,344100,334900,340700,94799400,0.00019339756941971317 +SPY,20031027 00:00,1037400,1044400,1032700,1034400,30493800,0.00019160723074002832 +QQQ,20031027 00:00,342800,344500,340400,341800,61720400,0.00019160723074002832 +SPY,20031028 00:00,1039800,1050700,1038200,1050200,32172100,0.0001928755756881494 +QQQ,20031028 00:00,344200,353100,343700,352900,103921000,0.0001928755756881494 +SPY,20031029 00:00,1047700,1060800,1037300,1052500,30289100,0.00019210482228021537 +QQQ,20031029 00:00,352100,354100,343200,353000,72076300,0.00019210482228021537 +SPY,20031030 00:00,1057900,1059700,1042400,1050900,36716900,0.00019125294058652822 +QQQ,20031030 00:00,357900,360000,344500,352200,87880200,0.00019125294058652822 +SPY,20031031 00:00,1054000,1057400,1052200,1054200,22457300,0.00019119885531383826 +QQQ,20031031 00:00,354500,354900,350600,351600,51389300,0.00019119885531383826 +SPY,20031103 00:00,1057500,1066100,1042000,1063200,36184684,0.00018976131513380928 +QQQ,20031103 00:00,354300,360000,347500,358800,67913163,0.00018976131513380928 +SPY,20031104 00:00,1059800,1062700,1038400,1057800,30356338,0.00018937279690745416 +QQQ,20031104 00:00,356900,358700,354000,355800,58032335,0.00018937279690745416 +SPY,20031105 00:00,1055200,1059700,1049000,1056300,34379600,0.00018923747776836928 +QQQ,20031105 00:00,355200,357700,342900,356400,57850100,0.00018923747776836928 +SPY,20031106 00:00,1056400,1064000,1051000,1062600,26891500,0.00018892829155282023 +QQQ,20031106 00:00,357700,359000,325400,358200,86443900,0.00018892829155282023 +SPY,20031107 00:00,1066400,1067200,1056500,1058100,30466600,0.00018529226035621325 +QQQ,20031107 00:00,360800,369900,351500,357600,57801500,0.00018529226035621325 +SPY,20031110 00:00,1057300,1067500,1050100,1051800,24000800,0.0001852035896227996 +QQQ,20031110 00:00,357000,361200,346900,351900,64945700,0.0001852035896227996 +SPY,20031111 00:00,1050800,1053400,1048000,1050800,25833400,0.0001822557448612294 +QQQ,20031111 00:00,351500,359000,348500,350100,73588600,0.0001822557448612294 +SPY,20031112 00:00,1052100,1064700,1051600,1063800,26023500,0.00018249638933620266 +QQQ,20031112 00:00,351700,358800,351400,358300,74280100,0.00018249638933620266 +SPY,20031113 00:00,1060100,1065400,1057800,1063500,26263200,0.000182553338830593 +QQQ,20031113 00:00,357000,359500,355500,357900,62183500,0.000182553338830593 +SPY,20031114 00:00,1064000,1069500,1025600,1055400,47567700,0.0001791610985655585 +QQQ,20031114 00:00,358200,360200,349900,350200,89191000,0.0001791610985655585 +SPY,20031117 00:00,1049100,1055100,1040400,1048600,43458300,0.00017947562050923296 +QQQ,20031117 00:00,348300,358500,303300,346200,106152500,0.00017947562050923296 +SPY,20031118 00:00,1052400,1054600,1039000,1039100,34193000,0.00017962834313629047 +QQQ,20031118 00:00,348800,358600,339500,339800,99638900,0.00017962834313629047 +SPY,20031119 00:00,1040300,1055300,1039200,1047800,27333500,0.00017957317270593282 +QQQ,20031119 00:00,340000,344000,338800,343000,82821700,0.00017957317270593282 +SPY,20031120 00:00,1040000,1056300,1038000,1039000,48251500,0.0001767645487071211 +QQQ,20031120 00:00,339300,346800,330200,339600,115695700,0.0001767645487071211 +SPY,20031121 00:00,1042400,1049100,1026500,1040400,28252200,0.00017328794351018805 +QQQ,20031121 00:00,340700,349800,337300,341500,77430500,0.00017328794351018805 +SPY,20031124 00:00,1046800,1057700,1046800,1057200,26789400,0.0001751503814179387 +QQQ,20031124 00:00,345100,352400,329200,352300,84299600,0.0001751503814179387 +SPY,20031125 00:00,1057300,1064200,1040600,1060100,37048100,0.00017505894382752066 +QQQ,20031125 00:00,352800,354500,350900,351300,69609800,0.00017505894382752066 +SPY,20031126 00:00,1064200,1064500,1044000,1064000,43671100,0.0001718749211373094 +QQQ,20031126 00:00,354100,355200,348100,352800,71861800,0.0001718749211373094 +SPY,20031128 00:00,1062800,1066600,1062000,1065400,10401800,0.0001682711562799069 +QQQ,20031128 00:00,352600,355000,352100,353700,25140100,0.0001682711562799069 +SPY,20031201 00:00,1068500,1076800,1003500,1075700,34785800,0.00016862613844971595 +QQQ,20031201 00:00,356900,360100,354700,359000,80524000,0.00016862613844971595 +SPY,20031202 00:00,1073800,1077700,1070700,1072700,31161900,0.00016875888810176216 +QQQ,20031202 00:00,358200,360500,355800,356100,62444500,0.00016875888810176216 +SPY,20031203 00:00,1076500,1080800,1070800,1071100,38845700,0.00016711914651828993 +QQQ,20031203 00:00,358400,361200,353500,353600,104129600,0.00016711914651828993 +SPY,20031204 00:00,1071700,1077200,1069400,1076800,34806300,0.00016703751139978516 +QQQ,20031204 00:00,354000,394300,350800,356300,97153700,0.00016703751139978516 +SPY,20031205 00:00,1071500,1078000,1000600,1068100,28144500,0.00016671256165191336 +QQQ,20031205 00:00,352700,356300,349600,350500,85470500,0.00016671256165191336 +SPY,20031208 00:00,1067400,1076400,1066800,1075200,25534900,0.00016654650946138695 +QQQ,20031208 00:00,350100,353300,347800,352500,85254800,0.00016654650946138695 +SPY,20031209 00:00,1079000,1079300,1055200,1066200,41477400,0.00016298757450004684 +QQQ,20031209 00:00,354400,359700,343400,344200,107980800,0.00016298757450004684 +SPY,20031210 00:00,1067700,1069800,1007000,1065400,30425000,0.00016224664844485863 +QQQ,20031210 00:00,344900,355400,336500,345300,100299900,0.00016224664844485863 +SPY,20031211 00:00,1067000,1081000,1066700,1078400,41272400,0.0001631203259138231 +QQQ,20031211 00:00,344900,355300,341400,352400,108067400,0.0001631203259138231 +SPY,20031212 00:00,1079700,1087000,1066500,1081300,32363800,0.00016312863034671315 +QQQ,20031212 00:00,353100,353400,349000,352300,69817400,0.00016312863034671315 +SPY,20031215 00:00,1091700,1094500,1074800,1075200,37584800,0.00016165901684232582 +QQQ,20031215 00:00,359200,370000,347000,347500,98920400,0.00016165901684232582 +SPY,20031216 00:00,1076800,1085000,1002400,1081700,31281800,0.00015873292293009614 +QQQ,20031216 00:00,347900,350200,344200,349000,88258500,0.00015873292293009614 +SPY,20031217 00:00,1080600,1083800,1078000,1083400,22379200,0.00015868622184158542 +QQQ,20031217 00:00,348200,350000,345700,348000,64756100,0.00015868622184158542 +SPY,20031218 00:00,1085500,1097200,1083900,1096000,27293400,0.0001579270554975256 +QQQ,20031218 00:00,349500,356400,344500,355700,87652600,0.0001579270554975256 +SPY,20031219 00:00,1093000,1097000,1085800,1090400,38548300,0.00015778699662927613 +QQQ,20031219 00:00,356000,356500,352000,354500,88921700,0.00015778699662927613 +SPY,20031222 00:00,1087900,1094700,1086500,1094600,26487100,0.00015763869397352235 +QQQ,20031222 00:00,353500,385700,346400,355800,62437500,0.00015763869397352235 +SPY,20031223 00:00,1094800,1099500,1084200,1097900,23343300,0.0001576019566201511 +QQQ,20031223 00:00,355900,360200,349000,359600,68370200,0.0001576019566201511 +SPY,20031224 00:00,1095200,1098800,1094300,1095800,8102900,0.00015728898132721591 +QQQ,20031224 00:00,358400,360200,353700,358600,46722800,0.00015728898132721591 +SPY,20031226 00:00,1097100,1100800,1096300,1096700,8278000,0.00015716413819765894 +QQQ,20031226 00:00,359600,360900,358200,358700,25403900,0.00015716413819765894 +SPY,20031229 00:00,1101000,1111700,1090000,1111500,18474600,0.00015675438268930732 +QQQ,20031229 00:00,360200,365100,359000,364900,59296100,0.00015675438268930732 +SPY,20031230 00:00,1110900,1112700,1101500,1111700,17554100,0.0001569103116025522 +QQQ,20031230 00:00,365200,365500,362800,364700,47434400,0.0001569103116025522 +SPY,20031231 00:00,1112300,1115200,1108400,1111500,28056500,0.00015693253400777383 +QQQ,20031231 00:00,366000,366400,354100,363700,57150500,0.00015693253400777383 +SPY,20040102 00:00,1117400,1199100,1107300,1110000,35070700,0.00015132135587071514 +QQQ,20040102 00:00,366500,367900,357000,363300,53850600,0.00015132135587071514 +SPY,20040105 00:00,1116900,1124500,1111700,1123700,25956100,0.0001522566048537048 +QQQ,20040105 00:00,366000,371600,358300,371200,66093600,0.0001522566048537048 +SPY,20040106 00:00,1121800,1127300,1112300,1126300,18416900,0.00014991649934279925 +QQQ,20040106 00:00,370800,374200,369500,373200,60312000,0.00014991649934279925 +SPY,20040107 00:00,1123900,1129200,1118900,1129000,27474700,0.00015011355632695857 +QQQ,20040107 00:00,372700,376200,370700,376100,66027600,0.00015011355632695857 +SPY,20040108 00:00,1132600,1134100,1121900,1133200,33802100,0.00014853384689724464 +QQQ,20040108 00:00,378700,379800,376000,379400,71539000,0.00014853384689724464 +SPY,20040109 00:00,1128200,1139800,1121900,1125100,40552100,0.0001464311589139677 +QQQ,20040109 00:00,377100,388400,358700,378100,90933300,0.0001464311589139677 +SPY,20040112 00:00,1125500,1131200,1123600,1131100,28825100,0.00014668492826136877 +QQQ,20040112 00:00,378500,383200,367700,383000,74670800,0.00014668492826136877 +SPY,20040113 00:00,1130900,1132300,1111300,1124700,44553600,0.00014694287595113677 +QQQ,20040113 00:00,382600,386300,376000,379000,93502800,0.00014694287595113677 +SPY,20040114 00:00,1127600,1134200,1126700,1133100,25360700,0.000146850436699301 +QQQ,20040114 00:00,380800,389500,371000,381000,57436200,0.000146850436699301 +SPY,20040115 00:00,1135700,1140600,1125800,1135300,38120800,0.00014565960869984484 +QQQ,20040115 00:00,379300,384600,376300,381200,101805100,0.00014565960869984484 +SPY,20040116 00:00,1140400,1143100,1130800,1142500,29709700,0.00014567433829709836 +QQQ,20040116 00:00,383800,386300,348300,385700,73172000,0.00014567433829709836 +SPY,20040120 00:00,1145300,1146500,1138200,1142100,27297000,0.00014311005106936275 +QQQ,20040120 00:00,387200,390000,383100,386400,74319500,0.00014311005106936275 +SPY,20040121 00:00,1141300,1153000,1137200,1150600,30519200,0.0001421469426279088 +QQQ,20040121 00:00,383900,387000,380000,384100,106032800,0.0001421469426279088 +SPY,20040122 00:00,1151400,1153800,1145800,1147300,27978800,0.00014212259499569017 +QQQ,20040122 00:00,385600,386900,380700,380900,83945200,0.00014212259499569017 +SPY,20040123 00:00,1150000,1153700,1139500,1143600,29245600,0.00014124882422597695 +QQQ,20040123 00:00,382000,388900,376000,380300,86325100,0.00014124882422597695 +SPY,20040126 00:00,1143900,1159100,1143900,1158000,28336100,0.0001371382291455371 +QQQ,20040126 00:00,379700,389000,378400,385600,80168100,0.0001371382291455371 +SPY,20040127 00:00,1157500,1165000,1147000,1147000,32571800,0.00013740043373347582 +QQQ,20040127 00:00,385100,386300,376900,377900,90496900,0.00013740043373347582 +SPY,20040128 00:00,1149800,1153700,1129400,1132300,48424700,0.0001379447996649119 +QQQ,20040128 00:00,379400,380600,360500,371600,122748000,0.0001379447996649119 +SPY,20040129 00:00,1135600,1138500,1125600,1137500,55569800,0.00013749400662525882 +QQQ,20040129 00:00,372400,373100,361000,371600,138458200,0.00013749400662525882 +SPY,20040130 00:00,1135200,1152900,1130900,1134400,27744000,0.00013440407136705132 +QQQ,20040130 00:00,372000,381900,369700,370900,80818200,0.00013440407136705132 +SPY,20040202 00:00,1137000,1163600,1131200,1138300,37615300,0.00013461197436603455 +QQQ,20040202 00:00,372000,374800,368200,369500,90665200,0.00013461197436603455 +SPY,20040203 00:00,1137400,1149700,1134400,1139500,22680000,0.00013457552492619656 +QQQ,20040203 00:00,369100,381000,360800,370600,64169800,0.00013457552492619656 +SPY,20040204 00:00,1131900,1139400,1127900,1130300,37534600,0.00013433824214616064 +QQQ,20040204 00:00,366200,377600,363300,364000,106355100,0.00013433824214616064 +SPY,20040205 00:00,1131700,1135400,1127800,1132600,34498800,0.00013423227512506078 +QQQ,20040205 00:00,365100,396000,363300,364800,85194100,0.00013423227512506078 +SPY,20040206 00:00,1134200,1146900,1132000,1146600,34866300,0.00013510675599502867 +QQQ,20040206 00:00,366000,379800,365300,372500,103881600,0.00013510675599502867 +SPY,20040209 00:00,1146700,1148700,1142900,1143400,22947000,0.00013439863623858114 +QQQ,20040209 00:00,373400,374800,362700,371000,56269700,0.00013439863623858114 +SPY,20040210 00:00,1142800,1151400,1142600,1149000,26564200,0.00013408900127969163 +QQQ,20040210 00:00,370600,374100,370300,372300,62856800,0.00013408900127969163 +SPY,20040211 00:00,1148500,1163900,1050100,1161900,41979200,0.00013427940954709153 +QQQ,20040211 00:00,372400,376700,370000,375800,90129700,0.00013427940954709153 +SPY,20040212 00:00,1159700,1167400,1146400,1156700,25685800,0.00013376443820711063 +QQQ,20040212 00:00,375200,377000,372600,373300,64090300,0.00013376443820711063 +SPY,20040213 00:00,1158200,1162000,1147500,1151200,42820400,0.00013394915463985595 +QQQ,20040213 00:00,373900,379700,367600,369700,87747000,0.00013394915463985595 +SPY,20040217 00:00,1158500,1164300,1157700,1161400,23040800,0.0001319429855577541 +QQQ,20040217 00:00,372800,376200,363700,374600,67387900,0.0001319429855577541 +SPY,20040218 00:00,1162000,1166000,1153500,1156600,26629100,0.0001295697182563273 +QQQ,20040218 00:00,375100,376700,373200,374900,66260400,0.0001295697182563273 +SPY,20040219 00:00,1163300,1163900,1150000,1152200,45058400,0.00012954979269704154 +QQQ,20040219 00:00,378600,379000,369200,369600,94731500,0.00012954979269704154 +SPY,20040220 00:00,1154500,1155600,1143200,1150000,45242500,0.00012924735646273583 +QQQ,20040220 00:00,370100,371400,338700,369100,132579000,0.00012924735646273583 +SPY,20040223 00:00,1152200,1156100,1141700,1145500,36514400,0.00012882953510852093 +QQQ,20040223 00:00,370000,372700,359000,363900,121943700,0.00012882953510852093 +SPY,20040224 00:00,1142700,1149900,1130300,1144500,44472000,0.00012699665741745694 +QQQ,20040224 00:00,363000,366700,360000,363800,134313900,0.00012699665741745694 +SPY,20040225 00:00,1144600,1150600,1143200,1149100,28553900,0.0001269720090005317 +QQQ,20040225 00:00,364300,366700,363300,365800,70050200,0.0001269720090005317 +SPY,20040226 00:00,1146100,1152900,1143400,1150400,27040800,0.0001254564180599956 +QQQ,20040226 00:00,364700,368400,363100,367000,68667000,0.0001254564180599956 +SPY,20040227 00:00,1151900,1160800,1145500,1150800,36024700,0.00012467292316565833 +QQQ,20040227 00:00,367700,369400,362700,365400,95661900,0.00012467292316565833 +SPY,20040301 00:00,1154300,1163400,1144400,1160700,32675900,0.00012476738018426416 +QQQ,20040301 00:00,366800,370700,307000,369800,77086800,0.00012476738018426416 +SPY,20040302 00:00,1159400,1169700,1151900,1154900,38210300,0.00012426654188421468 +QQQ,20040302 00:00,369800,371800,366200,366700,92975700,0.00012426654188421468 +SPY,20040303 00:00,1152500,1164000,1142500,1157000,30759200,0.00012364340574856847 +QQQ,20040303 00:00,365100,366300,362100,364900,82912400,0.00012364340574856847 +SPY,20040304 00:00,1157200,1161000,1150400,1160500,19519800,0.00012344605901969347 +QQQ,20040304 00:00,364400,368300,363900,368100,61527400,0.00012344605901969347 +SPY,20040305 00:00,1154200,1169500,1150800,1162900,54667200,0.0001229683135288484 +QQQ,20040305 00:00,364200,399300,361500,366800,114239900,0.0001229683135288484 +SPY,20040308 00:00,1163400,1166200,1152200,1152700,35524500,0.0001238837233948474 +QQQ,20040308 00:00,366900,369700,358000,358400,106604300,0.0001238837233948474 +SPY,20040309 00:00,1151000,1166500,1049700,1146600,37870300,0.00012120013028177624 +QQQ,20040309 00:00,358100,367400,355200,357900,125237900,0.00012120013028177624 +SPY,20040310 00:00,1147200,1156200,1114500,1129800,63572300,0.00012187577957633274 +QQQ,20040310 00:00,357500,369600,352300,352900,125469200,0.00012187577957633274 +SPY,20040311 00:00,1123900,1156500,1111500,1113500,82967500,0.0001224944600040909 +QQQ,20040311 00:00,350700,355300,348600,348900,146342700,0.0001224944600040909 +SPY,20040312 00:00,1117300,1127000,1115800,1126900,50845500,0.00011562193439503183 +QQQ,20040312 00:00,351800,363600,344500,355600,116411400,0.00011562193439503183 +SPY,20040315 00:00,1122600,1126900,1109000,1110300,59041900,0.00011701031398962253 +QQQ,20040315 00:00,353600,359800,348100,348300,114826500,0.00011701031398962253 +SPY,20040316 00:00,1117800,1149300,1108400,1117300,56252100,0.00011120155830263857 +QQQ,20040316 00:00,351100,352500,346300,350000,115980400,0.00011120155830263857 +SPY,20040317 00:00,1122000,1132600,1115600,1130000,37263700,0.00011171302619061744 +QQQ,20040317 00:00,352000,356200,343400,355000,92743400,0.00011171302619061744 +SPY,20040318 00:00,1126700,1139400,1119300,1129100,57846900,0.00011197306264689502 +QQQ,20040318 00:00,353700,354600,349700,352900,107889400,0.00011197306264689502 +SPY,20040319 00:00,1124100,1133300,1107000,1112900,42347600,0.00011283342212712611 +QQQ,20040319 00:00,352800,359700,348200,348300,100061600,0.00011283342212712611 +SPY,20040322 00:00,1105400,1105700,1053500,1097400,59212700,0.00011293513574498505 +QQQ,20040322 00:00,345300,371300,340300,343500,129988200,0.00011293513574498505 +SPY,20040323 00:00,1102500,1109300,1093600,1096500,50925500,0.00010684375883374606 +QQQ,20040323 00:00,345900,353600,340100,341200,121264600,0.00010684375883374606 +SPY,20040324 00:00,1096200,1104700,1088500,1094100,51507700,0.0001059496713642145 +QQQ,20040324 00:00,341500,353500,335000,344100,116587400,0.0001059496713642145 +SPY,20040325 00:00,1100800,1113000,1097900,1111100,45819300,0.00010759648386801555 +QQQ,20040325 00:00,346400,354600,342100,354100,135180300,0.00010759648386801555 +SPY,20040326 00:00,1109600,1117900,1108000,1111700,34724000,0.00010753419874078018 +QQQ,20040326 00:00,353000,355800,352200,352700,76148500,0.00010753419874078018 +SPY,20040329 00:00,1116300,1145000,1115800,1124900,42364300,0.00010778715228687383 +QQQ,20040329 00:00,355100,359600,347900,358500,98635000,0.00010778715228687383 +SPY,20040330 00:00,1123000,1130700,1122200,1129700,36690700,0.0001055293300922905 +QQQ,20040330 00:00,356700,359400,338400,358900,90110600,0.0001055293300922905 +SPY,20040331 00:00,1129900,1134000,1116000,1128800,44063000,0.00010544910919667504 +QQQ,20040331 00:00,359200,360000,356100,356900,84007400,0.00010544910919667504 +SPY,20040401 00:00,1130700,1181800,1130500,1134900,43460700,0.00010166046172885908 +QQQ,20040401 00:00,358100,362500,351100,360800,89126800,0.00010166046172885908 +SPY,20040402 00:00,1148100,1155500,1120100,1144400,49027100,0.00010231010095698478 +QQQ,20040402 00:00,368900,390200,357200,369800,140202400,0.00010231010095698478 +SPY,20040405 00:00,1144600,1157900,1144400,1153300,28795500,0.00010270501465507616 +QQQ,20040405 00:00,370100,374800,369700,374600,64820400,0.00010270501465507616 +SPY,20040406 00:00,1148300,1151800,1141000,1150800,25102800,0.00010286486582630609 +QQQ,20040406 00:00,371600,372500,369200,370600,91542000,0.00010286486582630609 +SPY,20040407 00:00,1149400,1149800,1141100,1144900,43731300,0.00010295178845892055 +QQQ,20040407 00:00,369900,371100,366000,368700,84326300,0.00010295178845892055 +SPY,20040408 00:00,1154100,1154100,1137400,1142300,45988200,0.00010154796647611346 +QQQ,20040408 00:00,373500,373900,367400,369900,74677100,0.00010154796647611346 +SPY,20040412 00:00,1145800,1150800,1145000,1148800,22187200,0.00010143436871104 +QQQ,20040412 00:00,370300,372900,369800,371600,54066000,0.00010143436871104 +SPY,20040413 00:00,1152600,1153000,1130700,1133100,51934900,0.00010223328798191128 +QQQ,20040413 00:00,373400,373600,360000,366200,93369400,0.00010223328798191128 +SPY,20040414 00:00,1126100,1143200,1125500,1131900,65752200,0.00010080198687185308 +QQQ,20040414 00:00,364100,369500,363600,366800,107922800,0.00010080198687185308 +SPY,20040415 00:00,1134500,1137800,1120300,1131700,59058100,0.00010075284205277351 +QQQ,20040415 00:00,367500,368600,360200,363100,117232200,0.00010075284205277351 +SPY,20040416 00:00,1134300,1140500,1129800,1137200,42013900,0.00010053554545072919 +QQQ,20040416 00:00,362100,369900,357900,360300,108160600,0.00010053554545072919 +SPY,20040419 00:00,1135500,1166300,1132700,1138900,27015500,9.902485148468512e-05 +QQQ,20040419 00:00,360100,382800,359800,365600,81496500,9.902485148468512e-05 +SPY,20040420 00:00,1141100,1143200,1121100,1121400,46026100,0.00010052175988996688 +QQQ,20040420 00:00,366100,367900,355400,357500,111965600,0.00010052175988996688 +SPY,20040421 00:00,1122000,1129500,1118700,1128100,50401500,9.91255618128675e-05 +QQQ,20040421 00:00,359200,369200,347400,360800,112645000,9.91255618128675e-05 +SPY,20040422 00:00,1124800,1146700,1122400,1144400,58743900,0.00010010888374326793 +QQQ,20040422 00:00,360000,371800,359800,369200,131772800,0.00010010888374326793 +SPY,20040423 00:00,1144200,1146100,1133400,1144400,28136900,9.991652578267696e-05 +QQQ,20040423 00:00,370800,372300,360000,372100,92034400,9.991652578267696e-05 +SPY,20040426 00:00,1145000,1149400,1136000,1139100,30358300,9.879545945450308e-05 +QQQ,20040426 00:00,371900,377600,366500,367800,72734100,9.879545945450308e-05 +SPY,20040427 00:00,1142300,1151200,1125200,1142200,42595100,9.732814636487321e-05 +QQQ,20040427 00:00,369400,371900,366900,368100,85016300,9.732814636487321e-05 +SPY,20040428 00:00,1138800,1143300,1125000,1125800,48133100,9.854027862862998e-05 +QQQ,20040428 00:00,367100,367200,343300,360800,108687300,9.854027862862998e-05 +SPY,20040429 00:00,1127200,1135000,1111600,1118400,64784500,9.875053852649689e-05 +QQQ,20040429 00:00,360800,369900,350700,356400,161410800,9.875053852649689e-05 +SPY,20040430 00:00,1121700,1123800,1111000,1111300,43933900,9.940525722367995e-05 +QQQ,20040430 00:00,356600,358000,348200,348600,139728500,9.940525722367995e-05 +SPY,20040503 00:00,1113900,1147000,1111400,1121400,32438000,9.852335609576631e-05 +QQQ,20040503 00:00,350000,355200,348900,351800,115006300,9.852335609576631e-05 +SPY,20040504 00:00,1122500,1132600,1116600,1123600,49564600,9.851302583576167e-05 +QQQ,20040504 00:00,352100,357500,350300,354100,123153200,9.851302583576167e-05 +SPY,20040505 00:00,1124200,1129600,1121600,1125800,31951000,9.810153319965534e-05 +QQQ,20040505 00:00,354200,366300,352000,355300,93779100,9.810153319965534e-05 +SPY,20040506 00:00,1120200,1129900,1110000,1118500,55153900,9.807539984765829e-05 +QQQ,20040506 00:00,352400,355200,340400,352300,99725700,9.807539984765829e-05 +SPY,20040507 00:00,1112200,1125000,1017700,1103000,56597900,9.774920753967462e-05 +QQQ,20040507 00:00,350900,356400,349600,349800,132379100,9.774920753967462e-05 +SPY,20040510 00:00,1094400,1103000,1083600,1091300,71688500,9.691557196781194e-05 +QQQ,20040510 00:00,346700,355800,344200,347500,156762300,9.691557196781194e-05 +SPY,20040511 00:00,1094600,1100500,1091700,1100100,45139000,9.666230105631755e-05 +QQQ,20040511 00:00,349700,353800,349200,353000,111580200,9.666230105631755e-05 +SPY,20040512 00:00,1095900,1103000,1080600,1103000,88509300,9.656459171199157e-05 +QQQ,20040512 00:00,351200,384000,342700,352200,195129600,9.656459171199157e-05 +SPY,20040513 00:00,1097600,1110800,1094400,1101500,55237300,9.646383743039833e-05 +QQQ,20040513 00:00,350600,354500,341900,352200,132681600,9.646383743039833e-05 +SPY,20040514 00:00,1099600,1115400,1092700,1100200,50676700,9.618260966144718e-05 +QQQ,20040514 00:00,352100,353100,346400,348000,130002900,9.618260966144718e-05 +SPY,20040517 00:00,1088900,1098900,1062900,1088500,50323900,9.670663301937964e-05 +QQQ,20040517 00:00,343800,354400,341100,343200,147278400,9.670663301937964e-05 +SPY,20040518 00:00,1095100,1099400,1093300,1097000,27587700,9.356459524315258e-05 +QQQ,20040518 00:00,346600,349000,343500,347600,88454700,9.356459524315258e-05 +SPY,20040519 00:00,1105000,1111800,1093000,1094100,52483500,9.357237953054128e-05 +QQQ,20040519 00:00,351600,357500,347100,347500,136180600,9.357237953054128e-05 +SPY,20040520 00:00,1094500,1098700,1090400,1095200,36316800,9.357075569340285e-05 +QQQ,20040520 00:00,347800,350200,345600,347700,92710700,9.357075569340285e-05 +SPY,20040521 00:00,1099700,1105500,1003200,1099300,45668000,9.313325556611431e-05 +QQQ,20040521 00:00,350100,351700,347300,350100,111755300,9.313325556611431e-05 +SPY,20040524 00:00,1105200,1109700,1089800,1100900,38977400,9.314101031040357e-05 +QQQ,20040524 00:00,352900,354600,350000,351600,95480400,9.314101031040357e-05 +SPY,20040525 00:00,1099200,1119800,1096000,1119200,47273500,9.176085731159948e-05 +QQQ,20040525 00:00,351400,360800,349500,360200,141954900,9.176085731159948e-05 +SPY,20040526 00:00,1116600,1130000,1109000,1120900,35125400,9.177156924068174e-05 +QQQ,20040526 00:00,358800,361900,349900,361500,91168200,9.177156924068174e-05 +SPY,20040527 00:00,1125300,1130300,1120600,1127200,42981900,9.195934885194698e-05 +QQQ,20040527 00:00,362900,365000,360000,363600,107739200,9.195934885194698e-05 +SPY,20040528 00:00,1127400,1129000,1120800,1127100,21270500,9.1087387489093e-05 +QQQ,20040528 00:00,363900,365400,353400,365400,55778500,9.1087387489093e-05 +SPY,20040601 00:00,1125000,1136300,1118700,1126800,38048600,9.117127858921506e-05 +QQQ,20040601 00:00,362700,365400,351700,365200,90503200,9.117127858921506e-05 +SPY,20040602 00:00,1130300,1137300,1124600,1131200,35038800,9.088015487748887e-05 +QQQ,20040602 00:00,365700,366600,361700,364000,95596600,9.088015487748887e-05 +SPY,20040603 00:00,1127900,1131900,1120400,1122500,32395900,9.027007535147797e-05 +QQQ,20040603 00:00,363000,363600,359400,359700,90273600,9.027007535147797e-05 +SPY,20040604 00:00,1130000,1135800,1126700,1129000,30328600,9.031492548020928e-05 +QQQ,20040604 00:00,363300,366200,361800,362300,87623900,9.031492548020928e-05 +SPY,20040607 00:00,1134800,1147000,1134200,1146500,29638400,9.136739711000347e-05 +QQQ,20040607 00:00,364400,370900,356500,370700,101724100,9.136739711000347e-05 +SPY,20040608 00:00,1143700,1149200,1141700,1148500,30447200,9.075107949467577e-05 +QQQ,20040608 00:00,369100,372000,368500,371600,68719300,9.075107949467577e-05 +SPY,20040609 00:00,1145200,1148600,1129800,1137700,33968300,9.096171701877801e-05 +QQQ,20040609 00:00,369800,371900,363700,365300,94907000,9.096171701877801e-05 +SPY,20040610 00:00,1140400,1143200,1139300,1143000,19793700,9.055073700993082e-05 +QQQ,20040610 00:00,366900,377300,365300,368000,54661300,9.055073700993082e-05 +SPY,20040614 00:00,1138400,1138500,1112300,1131900,30710200,9.118974641388183e-05 +QQQ,20040614 00:00,365900,368300,352000,362500,77881000,9.118974641388183e-05 +SPY,20040615 00:00,1139600,1144500,1135100,1139500,35119400,9.063533319046333e-05 +QQQ,20040615 00:00,365600,369900,365600,368400,86341300,9.063533319046333e-05 +SPY,20040616 00:00,1140200,1142000,1137000,1139900,24930800,8.818738383830134e-05 +QQQ,20040616 00:00,367700,372500,358200,368000,60572400,8.818738383830134e-05 +SPY,20040617 00:00,1138500,1140700,1133300,1138600,26144700,8.826060452219276e-05 +QQQ,20040617 00:00,366600,366600,362500,364000,75210100,8.826060452219276e-05 +SPY,20040618 00:00,1132700,1142200,1131800,1137100,30286600,8.831174081961675e-05 +QQQ,20040618 00:00,363000,368400,362600,364200,77752200,8.831174081961675e-05 +SPY,20040621 00:00,1137800,1141400,1131800,1133100,21889000,8.732381329060524e-05 +QQQ,20040621 00:00,365000,380000,360600,361500,64205700,8.732381329060524e-05 +SPY,20040622 00:00,1131300,1138200,1126700,1137900,35492200,8.748000868726854e-05 +QQQ,20040622 00:00,361600,366800,360200,366700,99245300,8.748000868726854e-05 +SPY,20040623 00:00,1136100,1148400,1134200,1147000,33526700,8.658660671885143e-05 +QQQ,20040623 00:00,365800,371900,365100,371000,89991600,8.658660671885143e-05 +SPY,20040624 00:00,1145600,1149300,1142600,1144400,33590600,8.665606746219924e-05 +QQQ,20040624 00:00,370200,379800,359800,370200,88429700,8.665606746219924e-05 +SPY,20040625 00:00,1144100,1149400,1139500,1141300,28221300,8.641773837341892e-05 +QQQ,20040625 00:00,370000,373900,369800,372400,75034100,8.641773837341892e-05 +SPY,20040628 00:00,1145200,1146100,1134300,1136800,38803300,8.567297853509863e-05 +QQQ,20040628 00:00,374900,375200,364800,371100,90888800,8.567297853509863e-05 +SPY,20040629 00:00,1135300,1141700,1134200,1139900,25858700,8.533592132934072e-05 +QQQ,20040629 00:00,371100,379900,370000,374400,64979700,8.533592132934072e-05 +SPY,20040630 00:00,1140700,1147900,1136500,1144500,45402600,8.538976394731926e-05 +QQQ,20040630 00:00,374400,379000,373000,377400,95439900,8.538976394731926e-05 +SPY,20040701 00:00,1142900,1144100,1125800,1132000,54746200,8.584151737887848e-05 +QQQ,20040701 00:00,376500,377000,367700,370400,120050000,8.584151737887848e-05 +SPY,20040702 00:00,1131300,1142000,1126000,1128000,32907500,8.517604260953289e-05 +QQQ,20040702 00:00,370400,371900,366300,367800,72132100,8.517604260953289e-05 +SPY,20040706 00:00,1123700,1177400,1116300,1119600,37407000,8.541577232582606e-05 +QQQ,20040706 00:00,365900,368200,358300,360100,127570400,8.541577232582606e-05 +SPY,20040707 00:00,1118100,1125700,1117500,1121400,26849200,8.218246879949932e-05 +QQQ,20040707 00:00,359500,382500,359200,360900,94757900,8.218246879949932e-05 +SPY,20040708 00:00,1118100,1144500,1112000,1112200,42989300,8.258249393734246e-05 +QQQ,20040708 00:00,358200,361300,355500,355700,101630700,8.258249393734246e-05 +SPY,20040709 00:00,1117000,1119400,1113800,1116400,28340700,8.259242253468119e-05 +QQQ,20040709 00:00,358400,380200,356300,357900,90265500,8.259242253468119e-05 +SPY,20040712 00:00,1115100,1120400,1110000,1117800,35749900,8.15200129211374e-05 +QQQ,20040712 00:00,355700,356900,336300,356000,79116100,8.15200129211374e-05 +SPY,20040713 00:00,1119000,1120200,1116300,1118900,24206700,8.123095573911786e-05 +QQQ,20040713 00:00,356900,358100,354300,355300,73771200,8.123095573911786e-05 +SPY,20040714 00:00,1112600,1144100,1111200,1114900,51054000,8.113881733243628e-05 +QQQ,20040714 00:00,351900,356500,350500,352100,114940900,8.113881733243628e-05 +SPY,20040715 00:00,1117400,1119100,1110100,1110400,33439800,8.112652608887641e-05 +QQQ,20040715 00:00,353300,354900,322000,351900,85396400,8.112652608887641e-05 +SPY,20040716 00:00,1115700,1119400,1104400,1105300,35916600,8.138953039124098e-05 +QQQ,20040716 00:00,354300,354500,346400,346800,116114100,8.138953039124098e-05 +SPY,20040719 00:00,1107500,1116400,1099900,1104500,38330500,7.986488268256824e-05 +QQQ,20040719 00:00,347900,349700,344700,347300,102237900,7.986488268256824e-05 +SPY,20040720 00:00,1105300,1113100,1102500,1112500,43557500,8.017238677409485e-05 +QQQ,20040720 00:00,347500,352900,347000,352700,101676200,8.017238677409485e-05 +SPY,20040721 00:00,1118100,1120600,1097600,1097900,50225500,8.047475570145764e-05 +QQQ,20040721 00:00,355700,378100,345000,345300,130292900,8.047475570145764e-05 +SPY,20040722 00:00,1094000,1103900,1087700,1100100,68211300,8.003853302775572e-05 +QQQ,20040722 00:00,344700,355400,342500,349600,123607500,8.003853302775572e-05 +SPY,20040723 00:00,1096300,1100800,1086900,1089200,47526400,8.09814625933987e-05 +QQQ,20040723 00:00,346300,350100,335000,341600,102369000,8.09814625933987e-05 +SPY,20040726 00:00,1091900,1099500,1082100,1088500,47699800,8.059981825984782e-05 +QQQ,20040726 00:00,342200,349500,337000,340600,113081100,8.059981825984782e-05 +SPY,20040727 00:00,1090500,1101100,1089700,1098800,49254500,7.97483746421549e-05 +QQQ,20040727 00:00,342000,347100,340400,345700,99691800,7.97483746421549e-05 +SPY,20040728 00:00,1095500,1103700,1077200,1100300,64194000,7.974730511717077e-05 +QQQ,20040728 00:00,344000,346300,338100,344000,153651300,7.974730511717077e-05 +SPY,20040729 00:00,1105400,1116300,1100000,1105500,49656000,7.97306138301462e-05 +QQQ,20040729 00:00,347000,349200,345000,347700,94962100,7.97306138301462e-05 +SPY,20040730 00:00,1103200,1108500,1005100,1106700,39101900,7.964948442064e-05 +QQQ,20040730 00:00,347600,351000,340100,348500,79091500,7.964948442064e-05 +SPY,20040802 00:00,1102000,1136100,1018100,1111000,36502400,7.95849415805361e-05 +QQQ,20040802 00:00,346100,350200,344600,349300,79747400,7.95849415805361e-05 +SPY,20040803 00:00,1109300,1118500,1100000,1103800,37293400,7.980791319477874e-05 +QQQ,20040803 00:00,348400,354100,324100,342800,81095500,7.980791319477874e-05 +SPY,20040804 00:00,1098900,1107500,1004500,1102800,39996100,7.981069516632026e-05 +QQQ,20040804 00:00,341500,348000,321900,342600,86488100,7.981069516632026e-05 +SPY,20040805 00:00,1102700,1109200,1083700,1085200,48165600,7.861460845058026e-05 +QQQ,20040805 00:00,343600,349200,329100,336500,104229100,7.861460845058026e-05 +SPY,20040806 00:00,1076300,1104400,1066200,1068300,69832900,8.04846611934185e-05 +QQQ,20040806 00:00,334100,351800,320000,327300,138880600,8.04846611934185e-05 +SPY,20040809 00:00,1070200,1102700,1068500,1070100,35622900,8.042498021815003e-05 +QQQ,20040809 00:00,328200,329600,326500,328000,75444000,8.042498021815003e-05 +SPY,20040810 00:00,1073100,1180000,1047700,1083600,50445900,8.142188869677163e-05 +QQQ,20040810 00:00,329600,350200,329000,334200,95689300,8.142188869677163e-05 +SPY,20040811 00:00,1076900,1083300,1047900,1080900,52934600,8.149292915854592e-05 +QQQ,20040811 00:00,328600,377200,325000,329100,117079300,8.149292915854592e-05 +SPY,20040812 00:00,1076800,1079500,1067700,1068500,46393500,8.155705584483125e-05 +QQQ,20040812 00:00,326900,328600,320000,324600,107413800,8.155705584483125e-05 +SPY,20040813 00:00,1071000,1073500,1065900,1070700,39483400,8.152475054236201e-05 +QQQ,20040813 00:00,326400,327400,323500,325200,87914900,8.152475054236201e-05 +SPY,20040816 00:00,1071400,1095300,1070300,1085300,42741600,8.200762906572749e-05 +QQQ,20040816 00:00,326200,331900,325200,329800,73989600,8.200762906572749e-05 +SPY,20040817 00:00,1087500,1092800,1085300,1087100,38877500,8.20355203148311e-05 +QQQ,20040817 00:00,331200,334400,329900,331700,86043800,8.20355203148311e-05 +SPY,20040818 00:00,1085200,1101300,1080800,1100800,39425800,8.215271759032125e-05 +QQQ,20040818 00:00,330700,339100,330100,338900,102031000,8.215271759032125e-05 +SPY,20040819 00:00,1098100,1100200,1083400,1096100,35353700,8.215542655447904e-05 +QQQ,20040819 00:00,337300,338500,334100,336300,101371700,8.215542655447904e-05 +SPY,20040820 00:00,1096200,1106300,1004200,1104400,44928200,8.24203418962839e-05 +QQQ,20040820 00:00,335700,341400,330300,340000,90290800,8.24203418962839e-05 +SPY,20040823 00:00,1105500,1107700,1014600,1102200,32167300,8.221480626447239e-05 +QQQ,20040823 00:00,340500,342700,339100,340900,81107400,8.221480626447239e-05 +SPY,20040824 00:00,1106400,1107300,1098500,1101900,28175700,8.190817176116359e-05 +QQQ,20040824 00:00,342400,343100,338100,340400,82955200,8.190817176116359e-05 +SPY,20040825 00:00,1103300,1112700,1099000,1111200,32871800,8.237667729531177e-05 +QQQ,20040825 00:00,340800,346000,330400,345500,87032100,8.237667729531177e-05 +SPY,20040826 00:00,1109600,1113100,1103900,1111600,25411100,8.236281174036374e-05 +QQQ,20040826 00:00,344500,354800,343100,344000,54385400,8.236281174036374e-05 +SPY,20040827 00:00,1112000,1116300,1103400,1114600,23741200,8.239646719186957e-05 +QQQ,20040827 00:00,344700,355000,344400,345600,56679700,8.239646719186957e-05 +SPY,20040830 00:00,1112300,1113400,1105100,1105800,24429400,8.271545252433114e-05 +QQQ,20040830 00:00,344000,344300,340200,340400,58228100,8.271545252433114e-05 +SPY,20040831 00:00,1106600,1110800,1101000,1110700,39554400,8.255840426267965e-05 +QQQ,20040831 00:00,340200,341200,336500,339900,76201100,8.255840426267965e-05 +SPY,20040901 00:00,1109500,1116400,1104800,1113100,48592800,8.18040417572552e-05 +QQQ,20040901 00:00,339200,349600,330400,342600,94958500,8.18040417572552e-05 +SPY,20040902 00:00,1112400,1126600,1112400,1125500,38976400,8.243160760848602e-05 +QQQ,20040902 00:00,341800,348800,341600,347500,74637100,8.243160760848602e-05 +SPY,20040903 00:00,1123000,1128200,1113000,1120900,27059500,8.266749903184987e-05 +QQQ,20040903 00:00,344400,346800,340500,341300,83317100,8.266749903184987e-05 +SPY,20040907 00:00,1125700,1131300,1120300,1128100,35207800,8.256999545043224e-05 +QQQ,20040907 00:00,343900,354100,341200,343700,93256200,8.256999545043224e-05 +SPY,20040908 00:00,1126200,1139300,1116200,1123500,31513900,8.189692769206492e-05 +QQQ,20040908 00:00,343100,346800,341800,342300,98371200,8.189692769206492e-05 +SPY,20040909 00:00,1125700,1128800,1120300,1125000,32230700,8.151754169654396e-05 +QQQ,20040909 00:00,344500,347500,341300,345700,101869700,8.151754169654396e-05 +SPY,20040910 00:00,1125200,1132700,1120800,1130900,26319500,8.043789157878563e-05 +QQQ,20040910 00:00,346100,351900,340200,351200,102507300,8.043789157878563e-05 +SPY,20040913 00:00,1132800,1137400,1130100,1132900,40108000,8.021623259862098e-05 +QQQ,20040913 00:00,352400,357200,342800,354400,105704500,8.021623259862098e-05 +SPY,20040914 00:00,1133000,1136900,1123600,1136100,26316500,8.022530394136913e-05 +QQQ,20040914 00:00,354600,357300,344900,356500,74984800,8.022530394136913e-05 +SPY,20040915 00:00,1133000,1133600,1123500,1127400,35820600,8.050832374196505e-05 +QQQ,20040915 00:00,354300,356700,343000,352000,88658500,8.050832374196505e-05 +SPY,20040916 00:00,1128500,1133700,1128000,1131000,21854300,7.915488300682072e-05 +QQQ,20040916 00:00,352800,363200,351300,352400,65246200,7.915488300682072e-05 +SPY,20040917 00:00,1129500,1133600,1126900,1131100,31200400,7.907490765628036e-05 +QQQ,20040917 00:00,352400,355200,351600,354500,79814800,7.907490765628036e-05 +SPY,20040920 00:00,1126900,1129900,1122800,1125200,35149300,7.817576393842339e-05 +QQQ,20040920 00:00,352900,357700,351000,354400,107819300,7.817576393842339e-05 +SPY,20040921 00:00,1127500,1134700,1125400,1132400,36802200,7.817229109262076e-05 +QQQ,20040921 00:00,355400,358500,354200,356700,85690400,7.817229109262076e-05 +SPY,20040922 00:00,1124800,1136000,1115000,1116300,47097600,7.83312044243977e-05 +QQQ,20040922 00:00,354300,354600,348700,349500,96856600,7.83312044243977e-05 +SPY,20040923 00:00,1116000,1117000,1110400,1111400,41857200,7.79799403968776e-05 +QQQ,20040923 00:00,349800,351500,348800,349900,89448200,7.79799403968776e-05 +SPY,20040924 00:00,1111700,1125800,1110000,1113500,33678500,7.553319736576244e-05 +QQQ,20040924 00:00,349900,351900,346800,348000,101830200,7.553319736576244e-05 +SPY,20040927 00:00,1111000,1118000,1105800,1106700,38491500,7.55097312513118e-05 +QQQ,20040927 00:00,346200,347900,343800,344400,82962100,7.55097312513118e-05 +SPY,20040928 00:00,1109100,1115100,1098000,1113500,36924500,7.530889816492552e-05 +QQQ,20040928 00:00,345500,346900,342300,345900,84949800,7.530889816492552e-05 +SPY,20040929 00:00,1112100,1117900,1110000,1117400,31233100,7.497905558133314e-05 +QQQ,20040929 00:00,345400,351200,345300,350900,91650200,7.497905558133314e-05 +SPY,20040930 00:00,1115500,1119800,1058800,1117400,36058300,7.411971452422199e-05 +QQQ,20040930 00:00,350200,352700,340500,351300,71179500,7.411971452422199e-05 +SPY,20041001 00:00,1122700,1135200,1117800,1134900,59600200,7.402410142318449e-05 +QQQ,20041001 00:00,354400,361500,351300,361000,114761600,7.402410142318449e-05 +SPY,20041004 00:00,1141000,1144400,1134900,1138500,31199200,7.40552900207242e-05 +QQQ,20041004 00:00,363600,385000,361300,362900,103923700,7.40552900207242e-05 +SPY,20041005 00:00,1138500,1141600,1130000,1138300,35789400,7.306830010627715e-05 +QQQ,20041005 00:00,362300,364900,361600,363300,87060500,7.306830010627715e-05 +SPY,20041006 00:00,1137700,1197900,1136800,1145600,40810300,7.317833608751824e-05 +QQQ,20041006 00:00,363200,369500,361100,366300,84776300,7.317833608751824e-05 +SPY,20041007 00:00,1143800,1188200,1133600,1133800,35343800,7.357318176499354e-05 +QQQ,20041007 00:00,365400,366700,361700,362100,80315000,7.357318176499354e-05 +SPY,20041008 00:00,1131500,1137700,1123500,1125800,49598900,7.397073057093586e-05 +QQQ,20041008 00:00,360800,366500,355000,356200,110280800,7.397073057093586e-05 +SPY,20041011 00:00,1127800,1130200,1126400,1128700,18952100,7.390050410079485e-05 +QQQ,20041011 00:00,357200,360600,356000,357500,50871400,7.390050410079485e-05 +SPY,20041012 00:00,1122000,1129500,1119400,1125300,37984800,7.391935173072038e-05 +QQQ,20041012 00:00,354400,358000,342300,357100,93088500,7.391935173072038e-05 +SPY,20041013 00:00,1130000,1130700,1113200,1116700,52363600,7.382017568777788e-05 +QQQ,20041013 00:00,360500,361400,348400,356600,126325100,7.382017568777788e-05 +SPY,20041014 00:00,1116800,1119300,1105800,1107000,62188900,7.398523462375123e-05 +QQQ,20041014 00:00,356800,357800,353300,354300,95862100,7.398523462375123e-05 +SPY,20041015 00:00,1110200,1126700,1105700,1111700,61272300,7.401862562291945e-05 +QQQ,20041015 00:00,355000,358600,344400,355800,130561600,7.401862562291945e-05 +SPY,20041018 00:00,1109100,1119600,1107000,1118000,41935800,7.431663955419401e-05 +QQQ,20041018 00:00,355100,362000,354000,361900,101332900,7.431663955419401e-05 +SPY,20041019 00:00,1120200,1144700,1007500,1107200,50433700,7.36831576581252e-05 +QQQ,20041019 00:00,363800,365700,358900,359100,122829800,7.36831576581252e-05 +SPY,20041020 00:00,1104000,1108800,1097500,1107100,54179800,7.349581779286271e-05 +QQQ,20041020 00:00,358300,362300,356500,360900,103808000,7.349581779286271e-05 +SPY,20041021 00:00,1107900,1113200,1102100,1110400,49232000,7.359715020459085e-05 +QQQ,20041021 00:00,362400,367900,351900,366400,112647100,7.359715020459085e-05 +SPY,20041022 00:00,1111800,1112500,1009400,1099500,45811600,7.316112732582977e-05 +QQQ,20041022 00:00,366000,366500,357400,357900,109420000,7.316112732582977e-05 +SPY,20041025 00:00,1097500,1101200,1093500,1098700,41245600,7.326107481146768e-05 +QQQ,20041025 00:00,357300,366500,354900,356100,99945900,7.326107481146768e-05 +SPY,20041026 00:00,1101300,1114300,1098800,1114000,47990100,7.337031893700236e-05 +QQQ,20041026 00:00,356600,358000,345000,357900,94993400,7.337031893700236e-05 +SPY,20041027 00:00,1113600,1131000,1111200,1129700,71710400,7.483857830229073e-05 +QQQ,20041027 00:00,358400,370000,357100,367700,154784400,7.483857830229073e-05 +SPY,20041028 00:00,1127600,1135600,1124900,1131700,52313400,7.294680391348244e-05 +QQQ,20041028 00:00,366700,371200,356700,369200,106664600,7.294680391348244e-05 +SPY,20041029 00:00,1131200,1160000,1105100,1133800,43958500,7.294170809255924e-05 +QQQ,20041029 00:00,369100,372400,366700,369000,97922700,7.294170809255924e-05 +SPY,20041101 00:00,1135600,1138400,1132000,1134900,35382400,7.293087833675059e-05 +QQQ,20041101 00:00,369700,371800,270500,370200,68724600,7.293087833675059e-05 +SPY,20041102 00:00,1136600,1145700,1132200,1135000,51994200,7.29500510028154e-05 +QQQ,20041102 00:00,370900,375500,370000,371500,105136100,7.29500510028154e-05 +SPY,20041103 00:00,1150000,1153600,1140000,1147700,72697500,7.249860776985609e-05 +QQQ,20041103 00:00,377600,379000,371500,373400,132787200,7.249860776985609e-05 +SPY,20041104 00:00,1147800,1166700,1146800,1165500,52191400,7.278057392380585e-05 +QQQ,20041104 00:00,372600,377800,371100,376400,109005800,7.278057392380585e-05 +SPY,20041105 00:00,1170200,1188400,1164900,1171000,58818600,7.291289777660513e-05 +QQQ,20041105 00:00,380200,381600,353100,379200,109332800,7.291289777660513e-05 +SPY,20041108 00:00,1170100,1172300,1167200,1170000,31567600,7.280164672570654e-05 +QQQ,20041108 00:00,379400,381000,378500,379800,65062400,7.280164672570654e-05 +SPY,20041109 00:00,1170800,1175000,1167600,1170000,41364900,7.276460953736935e-05 +QQQ,20041109 00:00,379400,381500,378100,380000,80383200,7.276460953736935e-05 +SPY,20041110 00:00,1170600,1175500,1167600,1169400,43129500,7.237763779453458e-05 +QQQ,20041110 00:00,379400,380600,373400,377400,92698600,7.237763779453458e-05 +SPY,20041111 00:00,1171800,1181200,1171000,1179900,35989400,7.287274197221868e-05 +QQQ,20041111 00:00,379200,383800,377200,383400,94573200,7.287274197221868e-05 +SPY,20041112 00:00,1179700,1189900,1173500,1189100,51980800,7.201342816671415e-05 +QQQ,20041112 00:00,383500,386800,381700,386600,98482200,7.201342816671415e-05 +SPY,20041115 00:00,1185000,1187300,1182300,1186700,33332800,7.197691479595478e-05 +QQQ,20041115 00:00,386500,388600,385000,388000,80057500,7.197691479595478e-05 +SPY,20041116 00:00,1183700,1186300,1177300,1177600,37279200,7.151843316955176e-05 +QQQ,20041116 00:00,386600,388300,383200,385200,94416500,7.151843316955176e-05 +SPY,20041117 00:00,1183600,1191400,1180700,1184000,52866900,7.144619675083216e-05 +QQQ,20041117 00:00,388500,393200,309000,390400,120965200,7.144619675083216e-05 +SPY,20041118 00:00,1185300,1188000,1182300,1186600,30321600,7.075592801606048e-05 +QQQ,20041118 00:00,389800,393600,388900,392900,92570200,7.075592801606048e-05 +SPY,20041119 00:00,1186800,1188700,1114700,1173200,52205900,7.126148059436145e-05 +QQQ,20041119 00:00,392400,392900,385900,386600,113559500,7.126148059436145e-05 +SPY,20041122 00:00,1171800,1181200,1170300,1179500,33744100,7.105892599988775e-05 +QQQ,20041122 00:00,386100,390400,384100,390200,77406800,7.105892599988775e-05 +SPY,20041123 00:00,1179300,1182600,1173700,1179700,39390300,7.104815667101668e-05 +QQQ,20041123 00:00,390100,391500,338900,388900,89658300,7.104815667101668e-05 +SPY,20041124 00:00,1182700,1185900,1180400,1185400,27437400,6.93097165636612e-05 +QQQ,20041124 00:00,391000,393900,390700,393600,71208900,6.93097165636612e-05 +SPY,20041126 00:00,1184900,1189800,1182600,1184000,15774700,6.93633433414332e-05 +QQQ,20041126 00:00,393600,394800,391700,392400,31350600,6.93633433414332e-05 +SPY,20041129 00:00,1187900,1190100,1174800,1181300,57211000,6.930360317418816e-05 +QQQ,20041129 00:00,394600,396400,389700,393000,91385800,6.930360317418816e-05 +SPY,20041130 00:00,1180000,1182400,1176400,1177700,44535700,6.936286761481618e-05 +QQQ,20041130 00:00,392900,393900,390600,391300,87409100,6.936286761481618e-05 +SPY,20110323 00:00,1289600,1300000,1283200,1296400,126368332,0.00023758666406180202 +QQQ,20110323 00:00,552000,558600,548200,557200,54175787,0.00023758666406180202 +SPY,20110324 00:00,1304600,1310800,1296800,1309000,124919412,0.00023800775873249294 +QQQ,20110324 00:00,561300,568200,558200,567300,62779061,0.00023800775873249294 +SPY,20110325 00:00,1312200,1318600,1309500,1312900,130636077,0.00023791963627963088 +QQQ,20110325 00:00,568800,572200,567600,568400,66809144,0.00023791963627963088 +SPY,20110328 00:00,1315700,1319200,1309400,1309400,76324619,0.0002379341637968627 +QQQ,20110328 00:00,570900,571000,565000,565100,31936709,0.0002379341637968627 +SPY,20110329 00:00,1308900,1318900,1304400,1318600,112305617,0.00023746933302586543 +QQQ,20110329 00:00,564000,570800,562400,570800,41471856,0.00023746933302586543 +SPY,20110330 00:00,1325800,1331500,1323600,1327000,110691781,0.00023744803046180717 +QQQ,20110330 00:00,573600,574300,570800,573600,41170128,0.00023744803046180717 +SPY,20110331 00:00,1326300,1329600,1324600,1325100,107390884,0.00023650355764939294 +QQQ,20110331 00:00,572700,574800,571600,574300,42075889,0.00023650355764939294 +SPY,20110401 00:00,1334500,1337700,1328400,1331500,132462581,0.000236480281914026 +QQQ,20110401 00:00,577200,579000,572900,574600,49725119,0.000236480281914026 +SPY,20110404 00:00,1334800,1336700,1328800,1332400,87692371,0.00023566419548425255 +QQQ,20110404 00:00,576300,576800,570200,572700,39049670,0.00023566419548425255 +SPY,20110405 00:00,1329500,1338300,1329400,1332400,102189817,0.0002357014645839726 +QQQ,20110405 00:00,571600,574900,570100,570900,45852649,0.0002357014645839726 +SPY,20110406 00:00,1338500,1340000,1331200,1336600,102531525,0.00023528734436830426 +QQQ,20110406 00:00,575600,577300,569300,572200,43043240,0.00023528734436830426 +SPY,20110407 00:00,1333900,1339400,1326600,1333200,166665573,0.00023527538916505767 +QQQ,20110407 00:00,572400,576000,568100,572300,51317888,0.00023527538916505767 +SPY,20110408 00:00,1338800,1339900,1323100,1328600,122011059,0.00023541954710460097 +QQQ,20110408 00:00,574700,575700,566500,569300,36391150,0.00023541954710460097 +SPY,20110411 00:00,1330100,1334500,1321400,1324700,105116572,0.00023463926202778023 +QQQ,20110411 00:00,571700,572900,565600,567700,37979835,0.00023463926202778023 +SPY,20110412 00:00,1317100,1319700,1309900,1314500,147011475,0.00023482086382250274 +QQQ,20110412 00:00,565000,566400,561500,563700,45706183,0.00023482086382250274 +SPY,20110413 00:00,1320900,1321800,1309700,1314500,131494341,0.00023478319409821723 +QQQ,20110413 00:00,567900,570000,564000,568500,45983815,0.00023478319409821723 +SPY,20110414 00:00,1306900,1317600,1302700,1315600,132675697,0.00023470577070788665 +QQQ,20110414 00:00,564600,568300,562300,567400,43891370,0.00023470577070788665 +SPY,20110415 00:00,1317800,1323700,1314100,1321200,127204358,0.00023460110718381843 +QQQ,20110415 00:00,565300,568700,562800,566500,58674418,0.00023460110718381843 +SPY,20110418 00:00,1305300,1308100,1295100,1305300,175212323,0.00023508850444363438 +QQQ,20110418 00:00,560800,562700,553300,562300,52309096,0.00023508850444363438 +SPY,20110419 00:00,1307500,1313500,1304400,1312800,103007172,0.00023440538483906874 +QQQ,20110419 00:00,564000,566000,561000,566000,30112824,0.00023440538483906874 +SPY,20110420 00:00,1328800,1333900,1328000,1331600,123308092,0.00023550871338439425 +QQQ,20110420 00:00,576000,579400,575300,578800,46608364,0.00023550871338439425 +SPY,20110421 00:00,1337500,1338300,1333500,1337400,90235439,0.0002355722874734779 +QQQ,20110421 00:00,584400,584700,581600,583400,33546679,0.0002355722874734779 +SPY,20110425 00:00,1336600,1338500,1332000,1336200,51582371,0.0002355417960830659 +QQQ,20110425 00:00,583900,585200,582800,584900,20071389,0.0002355417960830659 +SPY,20110426 00:00,1340500,1350500,1339100,1347900,116407987,0.00023475573185373832 +QQQ,20110426 00:00,586400,590300,585100,588300,41471881,0.00023475573185373832 +SPY,20110427 00:00,1350500,1358700,1345000,1356300,95956938,0.0002348366625902869 +QQQ,20110427 00:00,589300,592900,586600,592300,40010055,0.0002348366625902869 +SPY,20110428 00:00,1354200,1362900,1354100,1360400,101543480,0.00023477222868077346 +QQQ,20110428 00:00,590400,592300,588800,591700,38076882,0.00023477222868077346 +SPY,20110429 00:00,1361400,1365700,1359800,1365400,85741363,0.00023466213610531716 +QQQ,20110429 00:00,590200,592800,589800,591300,39023164,0.00023466213610531716 +SPY,20110502 00:00,1371000,1371800,1359500,1362500,103821177,0.0002345431116688746 +QQQ,20110502 00:00,591700,593400,588200,589700,44759093,0.0002345431116688746 +SPY,20110503 00:00,1359400,1361900,1350500,1357100,108602242,0.00023447146451238798 +QQQ,20110503 00:00,589400,590000,583300,587000,34248871,0.00023447146451238798 +SPY,20110504 00:00,1357000,1357300,1342400,1348600,158575567,0.00023425209400804842 +QQQ,20110504 00:00,587300,588700,581100,586100,48327411,0.00023425209400804842 +SPY,20110505 00:00,1340900,1349400,1330200,1336300,188183223,0.00023445337022938635 +QQQ,20110505 00:00,583100,589700,580800,583000,66104025,0.00023445337022938635 +SPY,20110506 00:00,1348800,1356200,1336800,1342000,184218970,0.00023447336359212376 +QQQ,20110506 00:00,588600,592000,583100,584700,61240812,0.00023447336359212376 +SPY,20110509 00:00,1342000,1351100,1339800,1347200,101087402,0.00023427552866570465 +QQQ,20110509 00:00,585700,589200,583400,586900,38139617,0.00023427552866570465 +SPY,20110510 00:00,1351500,1361100,1350100,1358700,96564068,0.0002344772651643574 +QQQ,20110510 00:00,588600,592800,587800,591900,35139127,0.0002344772651643574 +SPY,20110511 00:00,1356400,1356900,1338200,1344500,169055758,0.00023510450816429813 +QQQ,20110511 00:00,591000,593100,583600,587600,54260133,0.00023510450816429813 +SPY,20110512 00:00,1340700,1353600,1333900,1351000,151731104,0.0002350224874828922 +QQQ,20110512 00:00,585800,591900,582400,591100,55738060,0.0002350224874828922 +SPY,20110513 00:00,1351700,1353300,1335700,1340400,137536979,0.00023543832010725733 +QQQ,20110513 00:00,589700,590700,583900,584100,55298733,0.00023543832010725733 +SPY,20110516 00:00,1335400,1346000,1329700,1331900,123693366,0.00023540450741971457 +QQQ,20110516 00:00,581400,583100,572700,574000,64614401,0.00023540450741971457 +SPY,20110517 00:00,1327000,1333500,1321200,1331700,169691578,0.00023451806521080908 +QQQ,20110517 00:00,571000,575700,569900,575600,58413846,0.00023451806521080908 +SPY,20110518 00:00,1332600,1345000,1329500,1343800,113414741,0.000233715706729898 +QQQ,20110518 00:00,574800,581400,574100,580300,32175251,0.000233715706729898 +SPY,20110519 00:00,1347900,1350200,1339400,1346600,107562279,0.00023375559392440067 +QQQ,20110519 00:00,582200,583400,578500,582300,31424569,0.00023375559392440067 +SPY,20110520 00:00,1343100,1345200,1333600,1336700,151825718,0.00023402775140856112 +QQQ,20110520 00:00,581500,582100,576900,577600,37737127,0.00023402775140856112 +SPY,20110523 00:00,1319900,1324600,1315900,1320400,146936625,0.00023493478767804465 +QQQ,20110523 00:00,569800,571500,566500,569300,38695717,0.00023493478767804465 +SPY,20110524 00:00,1324200,1327300,1317000,1319500,125130970,0.00023497590875409607 +QQQ,20110524 00:00,570600,570700,565600,565800,33166887,0.00023497590875409607 +SPY,20110525 00:00,1313800,1329300,1313800,1323700,126797102,0.00023430221380543577 +QQQ,20110525 00:00,565000,570600,564700,567900,37202691,0.00023430221380543577 +SPY,20110526 00:00,1320000,1332400,1317800,1330100,141163316,0.00023437180912483192 +QQQ,20110526 00:00,566200,573000,566100,571500,35031021,0.00023437180912483192 +SPY,20110527 00:00,1333900,1338700,1331900,1335400,104585597,0.00023352266787865953 +QQQ,20110527 00:00,572400,574900,571900,574300,26563167,0.00023352266787865953 +SPY,20110531 00:00,1347800,1349000,1338400,1348900,137873991,0.00023396818384146956 +QQQ,20110531 00:00,579700,583600,576700,583600,41641015,0.00023396818384146956 +SPY,20110601 00:00,1345200,1346000,1317600,1318500,191089527,0.00023617811131625605 +QQQ,20110601 00:00,582200,583600,570400,570700,46076014,0.00023617811131625605 +SPY,20110602 00:00,1319800,1322300,1309600,1316900,171255274,0.00023586151796869143 +QQQ,20110602 00:00,572000,574100,568900,572100,46676655,0.00023586151796869143 +SPY,20110603 00:00,1301600,1314200,1300800,1304000,175974272,0.00023640380287913939 +QQQ,20110603 00:00,565500,569900,562700,563300,44579375,0.00023640380287913939 +SPY,20110606 00:00,1300900,1303600,1288700,1290500,150447026,0.00023657595892257065 +QQQ,20110606 00:00,562200,565300,558700,559000,41528641,0.00023657595892257065 +SPY,20110607 00:00,1296700,1300700,1288500,1288500,140942241,0.00023622999819662683 +QQQ,20110607 00:00,560400,562600,557600,557900,40292556,0.00023622999819662683 +SPY,20110608 00:00,1287700,1291900,1281800,1284000,172442254,0.0002363554293322029 +QQQ,20110608 00:00,556700,557700,552300,553800,41478680,0.0002363554293322029 +SPY,20110609 00:00,1287700,1299300,1284600,1294000,124608303,0.0002360727597549917 +QQQ,20110609 00:00,554100,557600,552300,554700,39398038,0.0002360727597549917 +SPY,20110610 00:00,1288300,1289300,1272600,1275600,200759581,0.00023705154095294702 +QQQ,20110610 00:00,552300,553400,545900,546200,50520598,0.00023705154095294702 +SPY,20110613 00:00,1278900,1282400,1270500,1276700,166838405,0.000236769516105729 +QQQ,20110613 00:00,546700,549300,544500,546300,34837062,0.000236769516105729 +SPY,20110614 00:00,1288800,1297700,1288200,1293200,135441318,0.00023729349882390603 +QQQ,20110614 00:00,550600,554700,550300,553300,36738832,0.00023729349882390603 +SPY,20110615 00:00,1282600,1286500,1266800,1270200,253954829,0.00023874103556143801 +QQQ,20110615 00:00,548100,551400,541800,543000,50513749,0.00023874103556143801 +SPY,20110616 00:00,1270900,1279700,1263200,1272800,235033145,0.0002386992947860458 +QQQ,20110616 00:00,543200,545000,536200,540800,49715263,0.0002386992947860458 +SPY,20110617 00:00,1279100,1279400,1266200,1270200,196654705,0.00023876860491989148 +QQQ,20110617 00:00,544000,545200,536400,537900,58145745,0.00023876860491989148 +SPY,20110620 00:00,1266000,1279700,1265800,1277000,118761833,0.00023850272580067396 +QQQ,20110620 00:00,536400,542300,536400,540700,33472582,0.00023850272580067396 +SPY,20110621 00:00,1283400,1297000,1281900,1294200,156360187,0.00023930165119435574 +QQQ,20110621 00:00,542600,552900,540300,552400,49103421,0.00023930165119435574 +SPY,20110622 00:00,1290500,1298100,1285900,1287000,149249226,0.00023955986893034782 +QQQ,20110622 00:00,550000,553200,548200,548400,32337397,0.00023955986893034782 +SPY,20110623 00:00,1270900,1283700,1261900,1282900,235834402,0.000239386257773983 +QQQ,20110623 00:00,542400,553600,540600,553400,67844594,0.000239386257773983 +SPY,20110624 00:00,1282800,1283700,1266200,1268100,164159526,0.00024034022392783102 +QQQ,20110624 00:00,550800,551300,542700,543800,43763114,0.00024034022392783102 +SPY,20110627 00:00,1269100,1284300,1266400,1279400,136843451,0.00023990883120040315 +QQQ,20110627 00:00,544400,555200,543300,552600,43430783,0.00023990883120040315 +SPY,20110628 00:00,1284300,1296300,1282700,1296100,140874843,0.00024044818497104438 +QQQ,20110628 00:00,553700,560800,552900,560600,36440865,0.00024044818497104438 +SPY,20110629 00:00,1301600,1309200,1297100,1307500,194592323,0.00023955066899970686 +QQQ,20110629 00:00,562000,564100,559000,563200,52950961,0.00023955066899970686 +SPY,20110630 00:00,1311500,1321800,1309900,1319700,175250888,0.00023910356538275375 +QQQ,20110630 00:00,565000,570900,564700,570500,43265519,0.00023910356538275375 +SPY,20110701 00:00,1319500,1341000,1317800,1339600,177311326,0.00023907273321934535 +QQQ,20110701 00:00,570800,579900,569300,579100,42594720,0.00023907273321934535 +SPY,20110705 00:00,1338000,1340800,1333900,1337100,143543355,0.00023763628493350068 +QQQ,20110705 00:00,579700,582600,578300,581900,39766322,0.00023763628493350068 +SPY,20110706 00:00,1334800,1341400,1331100,1339400,120813267,0.00023758503286472663 +QQQ,20110706 00:00,581300,584900,579400,583900,44754532,0.00023758503286472663 +SPY,20110707 00:00,1351300,1357000,1348800,1354600,135298236,0.00023755950673357506 +QQQ,20110707 00:00,588300,593600,587400,591900,44410702,0.00023755950673357506 +SPY,20110708 00:00,1338400,1344400,1333900,1344000,141569480,0.00023767611963445347 +QQQ,20110708 00:00,586800,590400,583700,590400,50288141,0.00023767611963445347 +SPY,20110711 00:00,1327300,1331800,1316600,1319600,153549170,0.0002383053543348213 +QQQ,20110711 00:00,584100,587100,577600,579600,43981033,0.0002383053543348213 +SPY,20110712 00:00,1316900,1327800,1313600,1314300,183267791,0.0002375534527649241 +QQQ,20110712 00:00,579500,580700,574600,575100,72832299,0.0002375534527649241 +SPY,20110713 00:00,1321100,1332200,1315200,1318500,175157447,0.00023751459839615771 +QQQ,20110713 00:00,579400,583400,575500,577600,69988061,0.00023751459839615771 +SPY,20110714 00:00,1321700,1327800,1306800,1309400,203950283,0.0002380139740092951 +QQQ,20110714 00:00,579100,581800,568700,570900,79795319,0.0002380139740092951 +SPY,20110715 00:00,1316400,1318700,1307700,1317400,181930028,0.0002366724295496263 +QQQ,20110715 00:00,577300,578500,573100,578500,59840643,0.0002366724295496263 +SPY,20110718 00:00,1310600,1312800,1296300,1305800,156024657,0.00023695784768379213 +QQQ,20110718 00:00,575300,577900,569800,575400,48404652,0.00023695784768379213 +SPY,20110719 00:00,1313500,1328900,1313100,1327800,141053959,0.00023765638009434173 +QQQ,20110719 00:00,580900,589000,580900,588600,53550605,0.00023765638009434173 +SPY,20110720 00:00,1330800,1331500,1324200,1326500,116123946,0.00023771788335305927 +QQQ,20110720 00:00,591800,591900,585000,586000,47110777,0.00023771788335305927 +SPY,20110721 00:00,1333900,1348200,1331400,1345200,210672957,0.00023791141066123873 +QQQ,20110721 00:00,586600,593200,583400,590000,61596367,0.00023791141066123873 +SPY,20110722 00:00,1345000,1347200,1337700,1346100,104151486,0.00023774944782321567 +QQQ,20110722 00:00,589600,597000,589200,596000,40488449,0.00023774944782321567 +SPY,20110725 00:00,1333300,1344900,1331600,1338300,118778460,0.00023715850013182916 +QQQ,20110725 00:00,591300,598100,590200,595000,45720071,0.00023715850013182916 +SPY,20110726 00:00,1337500,1339600,1330300,1333600,110478321,0.00023686085387543589 +QQQ,20110726 00:00,594400,598300,593200,596000,34684887,0.00023686085387543589 +SPY,20110727 00:00,1325800,1326000,1304300,1306000,227669341,0.00023905056131202004 +QQQ,20110727 00:00,592400,592900,579400,580900,73137508,0.00023905056131202004 +SPY,20110728 00:00,1306200,1317600,1300100,1301600,174850267,0.0002388927266828671 +QQQ,20110728 00:00,581200,589300,579000,581900,55346807,0.0002388927266828671 +SPY,20110729 00:00,1289000,1305500,1283600,1290500,259846955,0.00023911905878556822 +QQQ,20110729 00:00,577200,586100,574400,579700,75650701,0.00023911905878556822 +SPY,20110801 00:00,1309500,1309600,1275300,1287100,282573772,0.00023914167233061718 +QQQ,20110801 00:00,587000,588200,570300,577500,77841199,0.00023914167233061718 +SPY,20110802 00:00,1277700,1285000,1254900,1254900,277202501,0.00024101919338306236 +QQQ,20110802 00:00,574600,577200,562100,562700,82904125,0.00024101919338306236 +SPY,20110803 00:00,1256600,1263100,1235300,1262100,330037238,0.00024117494095305132 +QQQ,20110803 00:00,563400,568800,553500,568100,92910298,0.00024117494095305132 +SPY,20110804 00:00,1244200,1246200,1200700,1201800,425131235,0.0002504490886789308 +QQQ,20110804 00:00,560000,560900,541700,541700,115998085,0.0002504490886789308 +SPY,20110805 00:00,1219000,1220700,1168700,1199800,563324602,0.0002506886810843529 +QQQ,20110805 00:00,547200,550300,523200,538300,190960226,0.0002506886810843529 +SPY,20110808 00:00,1169800,1183500,1120200,1122600,575520736,0.0002665395938158321 +QQQ,20110808 00:00,521800,531200,505900,505900,191921886,0.0002665395938158321 +SPY,20110809 00:00,1142500,1174900,1102700,1173700,488407780,0.00027346377239208903 +QQQ,20110809 00:00,513500,530700,499300,530300,168633829,0.00027346377239208903 +SPY,20110810 00:00,1151800,1162800,1119600,1123500,437511075,0.0002805997591696907 +QQQ,20110810 00:00,518300,526000,508100,508600,168319667,0.0002805997591696907 +SPY,20110811 00:00,1134500,1189200,1128500,1172800,370920501,0.0002867436653402654 +QQQ,20110811 00:00,515900,536900,513400,531000,123262127,0.0002867436653402654 +SPY,20110812 00:00,1185500,1192100,1172800,1181500,268509211,0.0002869512235137605 +QQQ,20110812 00:00,534300,539000,528800,535700,77080960,0.0002869512235137605 +SPY,20110815 00:00,1192400,1207400,1190000,1205500,212752002,0.0002877209186658966 +QQQ,20110815 00:00,537900,543600,535300,543600,63012914,0.0002877209186658966 +SPY,20110816 00:00,1193400,1206900,1183100,1195600,244497729,0.0002880815119608824 +QQQ,20110816 00:00,538300,543500,531800,539000,79282047,0.0002880815119608824 +SPY,20110817 00:00,1203100,1211900,1187200,1196700,208918724,0.00028679389581252114 +QQQ,20110817 00:00,539700,544100,530200,535800,78082177,0.00028679389581252114 +SPY,20110818 00:00,1165000,1166400,1133900,1146100,425616854,0.00029504304541772876 +QQQ,20110818 00:00,521300,521400,504800,509500,114746166,0.00029504304541772876 +SPY,20110819 00:00,1129100,1158800,1125000,1126800,356095922,0.0002957734506119244 +QQQ,20110819 00:00,504200,516700,499900,500300,86478970,0.0002957734506119244 +SPY,20110822 00:00,1151200,1152300,1124100,1127300,242458988,0.0002955114675968946 +QQQ,20110822 00:00,512300,512400,500600,502100,69616648,0.0002955114675968946 +SPY,20110823 00:00,1131700,1165400,1125800,1164600,281355605,0.0003006445651369046 +QQQ,20110823 00:00,505500,522800,503400,522800,69654353,0.0003006445651369046 +SPY,20110824 00:00,1161800,1182400,1159300,1181300,207713990,0.0003009670418717319 +QQQ,20110824 00:00,521300,528000,517100,526900,65288345,0.0003009670418717319 +SPY,20110825 00:00,1188000,1194000,1158700,1163100,257738746,0.0003018267259368157 +QQQ,20110825 00:00,526600,529100,516500,518300,80546727,0.0003018267259368157 +SPY,20110826 00:00,1156600,1185100,1138600,1180400,270142650,0.00030265932517876227 +QQQ,20110826 00:00,516600,533100,511500,531300,87365378,0.00030265932517876227 +SPY,20110829 00:00,1195200,1214200,1194400,1213800,161544072,0.0003051387162308517 +QQQ,20110829 00:00,536600,546700,536400,546100,42669827,0.0003051387162308517 +SPY,20110830 00:00,1208600,1224300,1192600,1216200,211257778,0.00030475220974299314 +QQQ,20110830 00:00,544100,552900,541100,549700,57552324,0.00030475220974299314 +SPY,20110831 00:00,1224800,1235100,1213000,1220600,245536971,0.00030478380038343025 +QQQ,20110831 00:00,553000,557400,546000,550600,55341790,0.00030478380038343025 +SPY,20110901 00:00,1222500,1234000,1207800,1209600,224361524,0.00030519148607438643 +QQQ,20110901 00:00,552000,556400,544600,545600,49670668,0.00030519148607438643 +SPY,20110902 00:00,1184700,1190700,1174300,1178400,203457102,0.00030776908406355646 +QQQ,20110902 00:00,535800,538200,529900,532800,52630129,0.00030776908406355646 +SPY,20110906 00:00,1144300,1171600,1143800,1169900,246122470,0.0003071250908468213 +QQQ,20110906 00:00,520400,533700,519100,533000,50139050,0.0003071250908468213 +SPY,20110907 00:00,1188500,1203300,1183700,1202700,179440332,0.00030934188884644667 +QQQ,20110907 00:00,540500,546500,539000,546400,46182793,0.00030934188884644667 +SPY,20110908 00:00,1195900,1209300,1187800,1190200,217993064,0.00030959441502437907 +QQQ,20110908 00:00,543600,551600,542200,544000,53958349,0.00030959441502437907 +SPY,20110909 00:00,1176800,1181000,1152800,1158600,324360564,0.00031222845426347954 +QQQ,20110909 00:00,540100,542300,528500,531800,59865531,0.00031222845426347954 +SPY,20110912 00:00,1144900,1167600,1140500,1166600,266243906,0.00031246357403392794 +QQQ,20110912 00:00,525900,539000,525700,539000,60184754,0.00031246357403392794 +SPY,20110913 00:00,1170800,1181800,1162200,1175800,233871130,0.00031277024080142766 +QQQ,20110913 00:00,540600,546900,538100,545800,52431611,0.00031277024080142766 +SPY,20110914 00:00,1183200,1207800,1167200,1193600,262265087,0.0003120385866701914 +QQQ,20110914 00:00,548600,559800,543300,553600,74980813,0.0003120385866701914 +SPY,20110915 00:00,1205500,1214700,1195700,1214700,249832457,0.0003129206434350827 +QQQ,20110915 00:00,559600,562800,553900,561900,67055308,0.0003129206434350827 +SPY,20110916 00:00,1213100,1219500,1203200,1215800,241561427,0.00031285410273972823 +QQQ,20110916 00:00,562000,566500,561000,565900,83866394,0.00031285410273972823 +SPY,20110919 00:00,1195600,1209300,1187200,1203100,203129673,0.0003129352274149453 +QQQ,20110919 00:00,558900,569100,554300,566100,62092729,0.0003129352274149453 +SPY,20110920 00:00,1208300,1219900,1200100,1201700,197070638,0.00031296790861049927 +QQQ,20110920 00:00,569000,573500,562400,563600,56754267,0.00031296790861049927 +SPY,20110921 00:00,1202600,1205900,1165000,1165100,265304249,0.0003154270541258966 +QQQ,20110921 00:00,566500,569300,553700,553800,72511493,0.0003154270541258966 +SPY,20110922 00:00,1132800,1142100,1113000,1128000,421358975,0.00031939349684379447 +QQQ,20110922 00:00,539700,544600,527500,535800,138575219,0.00031939349684379447 +SPY,20110923 00:00,1121600,1141600,1120200,1135400,256734677,0.0003194972800435482 +QQQ,20110923 00:00,531300,543800,531000,541500,75107083,0.0003194972800435482 +SPY,20110926 00:00,1146400,1164000,1129800,1162500,239547138,0.0003191128176677979 +QQQ,20110926 00:00,544200,548700,532200,547800,89140914,0.0003191128176677979 +SPY,20110927 00:00,1185300,1195600,1168400,1176000,256192520,0.00031949590135093333 +QQQ,20110927 00:00,557100,562000,549800,553500,74075322,0.00031949590135093333 +SPY,20110928 00:00,1178300,1184800,1149700,1151600,259939999,0.0003201725573568166 +QQQ,20110928 00:00,555900,559700,544000,545300,72217551,0.0003201725573568166 +SPY,20110929 00:00,1171200,1176300,1139400,1160200,269136509,0.000319670267298495 +QQQ,20110929 00:00,553600,554300,529700,538800,104820025,0.000319670267298495 +SPY,20110930 00:00,1144500,1154400,1130800,1131700,248418973,0.00032167770197949876 +QQQ,20110930 00:00,531600,536100,524600,525200,90442657,0.00032167770197949876 +SPY,20111003 00:00,1125000,1139500,1098200,1099300,311460260,0.00032449093234434797 +QQQ,20111003 00:00,520200,528500,511100,511400,90873581,0.00032449093234434797 +SPY,20111004 00:00,1084300,1125800,1074300,1121300,417972274,0.0003259956556247379 +QQQ,20111004 00:00,506200,522900,501000,521900,123724379,0.0003259956556247379 +SPY,20111005 00:00,1125900,1147200,1115800,1145000,256163233,0.00032793484351993944 +QQQ,20111005 00:00,520600,536700,516600,535300,99358132,0.00032793484351993944 +SPY,20111006 00:00,1143500,1166600,1135200,1165100,227492632,0.0003289577140951063 +QQQ,20111006 00:00,534600,544300,532100,544300,65588150,0.0003289577140951063 +SPY,20111007 00:00,1171600,1172500,1150600,1157500,248676622,0.0003290487469377562 +QQQ,20111007 00:00,544000,546600,537200,540700,64010623,0.0003290487469377562 +SPY,20111010 00:00,1177200,1195900,1176700,1195900,198271905,0.00033312557370607546 +QQQ,20111010 00:00,549900,559400,548900,559400,43619939,0.00033312557370607546 +SPY,20111011 00:00,1188500,1200400,1187500,1196800,178972455,0.00033283689691257815 +QQQ,20111011 00:00,557900,564600,557000,563200,58409284,0.00033283689691257815 +SPY,20111012 00:00,1206000,1221300,1203300,1206700,242813965,0.0003329095620435425 +QQQ,20111012 00:00,568600,572300,565600,566400,71300836,0.0003329095620435425 +SPY,20111013 00:00,1200300,1208700,1191200,1204700,195568141,0.00033290593016955557 +QQQ,20111013 00:00,564900,571900,564300,571200,52844678,0.00033290593016955557 +SPY,20111014 00:00,1218600,1225800,1212300,1225600,172262036,0.00033393452157857073 +QQQ,20111014 00:00,578200,581900,575100,581900,56954894,0.00033393452157857073 +SPY,20111017 00:00,1219900,1220600,1199300,1202400,171627600,0.00033523450988774353 +QQQ,20111017 00:00,579100,580900,569800,572800,46380766,0.00033523450988774353 +SPY,20111018 00:00,1200800,1235000,1192000,1226100,268361142,0.00033594338306921085 +QQQ,20111018 00:00,571900,582900,566700,579900,77179052,0.00033594338306921085 +SPY,20111019 00:00,1223300,1230800,1207200,1211400,214042358,0.0003360688317441433 +QQQ,20111019 00:00,576700,578500,566800,568700,58308910,0.0003360688317441433 +SPY,20111020 00:00,1213600,1220900,1198200,1216900,237363342,0.000335810616023381 +QQQ,20111020 00:00,568600,569200,557900,565900,67802234,0.000335810616023381 +SPY,20111021 00:00,1230700,1241200,1227200,1239100,235785897,0.00033583283391610803 +QQQ,20111021 00:00,571900,576600,567800,573100,53809416,0.00033583283391610803 +SPY,20111024 00:00,1241400,1258000,1240600,1254900,183187923,0.00033672582595194726 +QQQ,20111024 00:00,575100,586500,574500,584900,50182465,0.00033672582595194726 +SPY,20111025 00:00,1249300,1249400,1227800,1230800,251450068,0.0003378704568095189 +QQQ,20111025 00:00,583000,583200,572200,573400,55321114,0.0003378704568095189 +SPY,20111026 00:00,1243500,1247700,1222100,1243300,269728092,0.000337692421241651 +QQQ,20111026 00:00,576600,577700,562200,572800,92943748,0.000337692421241651 +SPY,20111027 00:00,1277000,1294200,1266100,1285300,311523237,0.00034103083320108027 +QQQ,20111027 00:00,586400,592000,580400,588500,74564318,0.00034103083320108027 +SPY,20111028 00:00,1279800,1288500,1278000,1286800,195357919,0.0003410347536339699 +QQQ,20111028 00:00,585200,590100,584900,589400,38063135,0.0003410347536339699 +SPY,20111031 00:00,1272300,1272600,1253600,1254500,196077055,0.0003428264595297798 +QQQ,20111031 00:00,584300,586400,579100,579400,53551654,0.0003428264595297798 +SPY,20111101 00:00,1220000,1235100,1215200,1220800,327694121,0.00034585135478146017 +QQQ,20111101 00:00,565200,569700,561200,564400,84137143,0.00034585135478146017 +SPY,20111102 00:00,1238800,1244000,1228000,1239900,223203130,0.0003458825455198065 +QQQ,20111102 00:00,570300,571600,563900,569200,54890647,0.0003458825455198065 +SPY,20111103 00:00,1253100,1265000,1236000,1262400,250528531,0.0003471597703334983 +QQQ,20111103 00:00,573700,581800,567100,581000,60337389,0.0003471597703334983 +SPY,20111104 00:00,1252300,1257000,1240100,1254500,222714743,0.00034701856169842696 +QQQ,20111104 00:00,578200,580500,572200,578000,50649243,0.00034701856169842696 +SPY,20111107 00:00,1254300,1263900,1242000,1262800,190854662,0.0003458500496907069 +QQQ,20111107 00:00,577600,582500,571700,582100,50369039,0.0003458500496907069 +SPY,20111108 00:00,1269300,1280200,1257100,1278600,198356191,0.00034622418696937803 +QQQ,20111108 00:00,586300,589800,579700,588800,54497813,0.00034622418696937803 +SPY,20111109 00:00,1249100,1254600,1228700,1231900,258953226,0.00035072599203844095 +QQQ,20111109 00:00,577400,578300,566300,568100,60635255,0.00035072599203844095 +SPY,20111110 00:00,1248000,1249400,1230200,1243200,212759650,0.0003505990920422185 +QQQ,20111110 00:00,573700,574200,562300,567800,61401667,0.0003505990920422185 +SPY,20111111 00:00,1258600,1269900,1258000,1266200,160894568,0.00035132630248538294 +QQQ,20111111 00:00,572700,580200,572000,578500,44533763,0.00035132630248538294 +SPY,20111114 00:00,1262100,1263500,1249200,1254600,132357162,0.0003516853324872349 +QQQ,20111114 00:00,577100,580100,572800,574900,41619309,0.0003516853324872349 +SPY,20111115 00:00,1251200,1267500,1247200,1261200,161096614,0.0003517100224510101 +QQQ,20111115 00:00,573200,583600,572600,581300,49387714,0.0003517100224510101 +SPY,20111116 00:00,1248100,1263400,1239000,1240500,208022997,0.0003529913269913028 +QQQ,20111116 00:00,577100,581300,570600,571700,60799705,0.0003529913269913028 +SPY,20111117 00:00,1238400,1241600,1212300,1221800,289968098,0.0003545911525098658 +QQQ,20111117 00:00,570100,570400,554800,558300,89409830,0.0003545911525098658 +SPY,20111118 00:00,1224600,1227500,1214700,1219900,194731409,0.00035409219890440474 +QQQ,20111118 00:00,558400,559000,553000,554000,53680494,0.00035409219890440474 +SPY,20111121 00:00,1202100,1203400,1186600,1196200,196378704,0.00035577231197570636 +QQQ,20111121 00:00,546500,547300,537800,543400,45821220,0.00035577231197570636 +SPY,20111122 00:00,1193900,1201000,1185300,1191900,211395413,0.0003544427961926676 +QQQ,20111122 00:00,541700,546800,538800,545200,45616304,0.0003544427961926676 +SPY,20111123 00:00,1180700,1182000,1165600,1165600,187557531,0.0003547806201279544 +QQQ,20111123 00:00,541100,541700,532600,532900,44133473,0.0003547806201279544 +SPY,20111125 00:00,1163800,1177000,1162000,1162000,82609855,0.00035491700014708417 +QQQ,20111125 00:00,530600,536700,528900,529000,20866292,0.00035491700014708417 +SPY,20111128 00:00,1195300,1201800,1188200,1197000,187351680,0.00035790488691180656 +QQQ,20111128 00:00,541700,547900,541400,547200,42979123,0.00035790488691180656 +SPY,20111129 00:00,1200900,1208600,1196100,1200800,179062421,0.00035760273217275417 +QQQ,20111129 00:00,546900,551000,542300,543800,44688181,0.00035760273217275417 +SPY,20111130 00:00,1235000,1252200,1232200,1251100,251880591,0.00036258072400995484 +QQQ,20111130 00:00,558600,564400,556700,564200,55346352,0.00036258072400995484 +SPY,20111201 00:00,1248500,1256400,1244300,1249800,159154203,0.00036255785007341536 +QQQ,20111201 00:00,563800,569200,563500,567800,42152749,0.00036255785007341536 +SPY,20111202 00:00,1261400,1265000,1247800,1248600,177337985,0.0003619969376775673 +QQQ,20111202 00:00,573400,573400,565700,566200,32732541,0.0003619969376775673 +SPY,20111205 00:00,1268000,1271800,1254500,1262100,162251741,0.00036232347119472967 +QQQ,20111205 00:00,574700,576200,569200,572400,35244994,0.00036232347119472967 +SPY,20111206 00:00,1261700,1271100,1257600,1262600,131839611,0.0003614179491114406 +QQQ,20111206 00:00,572900,574500,568900,570800,35394447,0.0003614179491114406 +SPY,20111207 00:00,1258400,1272600,1249700,1267500,198050354,0.00036118645372962613 +QQQ,20111207 00:00,569200,573400,563500,570800,36626993,0.00036118645372962613 +SPY,20111208 00:00,1258800,1261800,1236500,1239800,209396519,0.0003626901313769852 +QQQ,20111208 00:00,567100,571500,560100,561100,43112494,0.0003626901313769852 +SPY,20111209 00:00,1245200,1263700,1244100,1260300,165468493,0.00036356892808219246 +QQQ,20111209 00:00,562600,571900,562400,570200,46365400,0.00036356892808219246 +SPY,20111212 00:00,1249100,1249700,1231600,1242400,178947251,0.0003643604993374309 +QQQ,20111212 00:00,564200,564500,559000,563800,49138135,0.0003643604993374309 +SPY,20111213 00:00,1249000,1255700,1224500,1231100,208440687,0.00036447664589593946 +QQQ,20111213 00:00,567500,569800,555300,557600,58665524,0.00036447664589593946 +SPY,20111214 00:00,1225900,1230200,1214700,1217100,209648393,0.00036531823200879374 +QQQ,20111214 00:00,555500,555900,545800,548900,57710086,0.00036531823200879374 +SPY,20111215 00:00,1231200,1232000,1219900,1221500,165196209,0.0003652348393571377 +QQQ,20111215 00:00,553600,554200,546600,547400,56613840,0.0003652348393571377 +SPY,20111216 00:00,1222100,1229500,1213000,1215700,176091223,0.00036465836656628066 +QQQ,20111216 00:00,548700,556100,547700,548600,54829554,0.00036465836656628066 +SPY,20111219 00:00,1220600,1223200,1200300,1203200,155423430,0.0003652125910704867 +QQQ,20111219 00:00,550700,552000,541700,543500,41414616,0.0003652125910704867 +SPY,20111220 00:00,1222300,1241400,1221700,1238800,174072018,0.0003683216309415575 +QQQ,20111220 00:00,552000,560000,551700,559500,62949475,0.0003683216309415575 +SPY,20111221 00:00,1239400,1243600,1227500,1241700,172629737,0.00036769094072794037 +QQQ,20111221 00:00,556000,556500,544900,551300,62746156,0.00036769094072794037 +SPY,20111222 00:00,1246400,1253900,1243600,1253300,107292214,0.00036753963179529106 +QQQ,20111222 00:00,552500,556200,551700,556000,30951391,0.00036753963179529106 +SPY,20111223 00:00,1256400,1264300,1254100,1263900,70389081,0.00036762806607116514 +QQQ,20111223 00:00,557100,560800,555900,560800,24062133,0.00036762806607116514 +SPY,20111227 00:00,1261500,1268200,1260600,1264900,67901152,0.0003675093142717336 +QQQ,20111227 00:00,559900,564200,559300,562400,19761204,0.0003675093142717336 +SPY,20111228 00:00,1265300,1265300,1247300,1249200,99876424,0.00036820323895434204 +QQQ,20111228 00:00,561700,562600,554500,555900,29940746,0.00036820323895434204 +SPY,20111229 00:00,1252100,1262500,1251800,1261000,92793923,0.0003681226914126063 +QQQ,20111229 00:00,556800,560300,555100,559900,24958839,0.0003681226914126063 +SPY,20111230 00:00,1259900,1263300,1255000,1255000,68634754,0.0003681960719597453 +QQQ,20111230 00:00,558700,561200,558200,558300,19592740,0.0003681960719597453 +SPY,20120103 00:00,1277500,1283800,1274400,1274900,153839622,0.0003691956947333092 +QQQ,20120103 00:00,569100,571900,567500,569000,36763716,0.0003691956947333092 +SPY,20120104 00:00,1271800,1278100,1267200,1276300,97719637,0.00036870952364767426 +QQQ,20120104 00:00,568100,572200,565600,571400,26818947,0.00036870952364767426 +SPY,20120105 00:00,1270100,1282300,1264300,1281000,125717608,0.0003687938626212972 +QQQ,20120105 00:00,570200,576600,568100,576100,36087054,0.0003687938626212972 +SPY,20120106 00:00,1282200,1282200,1272900,1278200,107707317,0.00036879261721019534 +QQQ,20120106 00:00,576200,579400,574100,577900,42716301,0.00036879261721019534 +SPY,20120109 00:00,1280400,1281800,1274100,1279900,73574543,0.00036871708362826616 +QQQ,20120109 00:00,579600,579800,574400,576200,35996640,0.00036871708362826616 +SPY,20120110 00:00,1293700,1296500,1289500,1291300,89928567,0.0003687850695991943 +QQQ,20120110 00:00,582300,584100,578900,580400,32991485,0.0003687850695991943 +SPY,20120111 00:00,1287500,1293700,1285200,1292500,89885776,0.00036744692925770204 +QQQ,20120111 00:00,580300,582900,578100,581600,33149554,0.00036744692925770204 +SPY,20120112 00:00,1295400,1297000,1285400,1295100,90072240,0.0003674289949687492 +QQQ,20120112 00:00,582900,584700,578600,583900,24233233,0.0003674289949687492 +SPY,20120113 00:00,1286600,1290100,1277200,1290100,140555253,0.0003675755436799165 +QQQ,20120113 00:00,580800,582000,576800,581800,32554172,0.0003675755436799165 +SPY,20120117 00:00,1301000,1303200,1290600,1293100,100741169,0.0003672694059010357 +QQQ,20120117 00:00,586900,589600,584900,587100,35561100,0.0003672694059010357 +SPY,20120118 00:00,1293500,1308400,1290800,1308000,121911064,0.00036769195114858043 +QQQ,20120118 00:00,588200,594900,587100,594900,43562388,0.00036769195114858043 +SPY,20120119 00:00,1312400,1315700,1308100,1314800,94452469,0.00036762702246816387 +QQQ,20120119 00:00,597300,599700,596500,598600,37413775,0.00036762702246816387 +SPY,20120120 00:00,1312300,1319500,1309200,1319500,92111257,0.0003675780840759466 +QQQ,20120120 00:00,596000,597900,595600,597700,34342484,0.0003675780840759466 +SPY,20120123 00:00,1315000,1322500,1309800,1315800,104367886,0.00036611220628459545 +QQQ,20120123 00:00,597800,602100,594400,597900,33819646,0.00036611220628459545 +SPY,20120124 00:00,1307700,1315000,1306000,1314600,80446736,0.0003661119027436133 +QQQ,20120124 00:00,595200,598400,594100,596700,29239003,0.0003661119027436133 +SPY,20120125 00:00,1312400,1328700,1307500,1325700,142742589,0.00036643671300233094 +QQQ,20120125 00:00,602600,605800,598400,604500,55563526,0.00036643671300233094 +SPY,20120126 00:00,1331500,1334000,1313700,1319000,136612555,0.00036644509138685275 +QQQ,20120126 00:00,606900,608000,599400,602200,33275864,0.00036644509138685275 +SPY,20120127 00:00,1311500,1320500,1311500,1317300,103843754,0.0003658332171274388 +QQQ,20120127 00:00,600900,605100,600600,604000,35014715,0.0003658332171274388 +SPY,20120130 00:00,1305000,1314400,1300600,1313800,111244083,0.00036527626156067843 +QQQ,20120130 00:00,598900,605400,596600,604400,38894772,0.00036527626156067843 +SPY,20120131 00:00,1320200,1321800,1306800,1312100,123069314,0.00036527829484217115 +QQQ,20120131 00:00,607500,608600,601400,605100,44869042,0.00036527829484217115 +SPY,20120201 00:00,1323100,1331400,1321300,1324700,123870829,0.0003654336534639723 +QQQ,20120201 00:00,608800,612400,606600,610200,39119430,0.0003654336534639723 +SPY,20120202 00:00,1327500,1330200,1322100,1326800,87353028,0.0003653048017525394 +QQQ,20120202 00:00,612200,614100,609700,612300,35620022,0.0003653048017525394 +SPY,20120203 00:00,1340300,1346200,1337700,1345700,108928852,0.00036553938284499123 +QQQ,20120203 00:00,617800,621200,616800,620500,32234737,0.00036553938284499123 +SPY,20120206 00:00,1339900,1345000,1338300,1344600,78933992,0.0003655406612085839 +QQQ,20120206 00:00,618200,620200,616600,620000,25805381,0.0003655406612085839 +SPY,20120207 00:00,1342000,1350200,1336400,1347900,105743604,0.0003652589609593957 +QQQ,20120207 00:00,619500,622500,616700,621300,34930746,0.0003652589609593957 +SPY,20120208 00:00,1348800,1352200,1343100,1351900,101030602,0.00036484913475413167 +QQQ,20120208 00:00,621600,624600,619100,624600,35271525,0.00036484913475413167 +SPY,20120209 00:00,1353900,1355800,1345700,1353400,115253050,0.00036486266670687984 +QQQ,20120209 00:00,627000,629800,623200,629300,40182582,0.00036486266670687984 +SPY,20120210 00:00,1341400,1344700,1338400,1344300,120730639,0.0003650615657992686 +QQQ,20120210 00:00,624600,626400,622500,624600,44286006,0.0003650615657992686 +SPY,20120213 00:00,1352900,1355200,1347400,1353600,90078617,0.00036412476108568965 +QQQ,20120213 00:00,629400,631300,626500,630500,28657953,0.00036412476108568965 +SPY,20120214 00:00,1349900,1352700,1342500,1351900,124259501,0.0003640773787323953 +QQQ,20120214 00:00,629100,632200,626900,631900,47560956,0.0003640773787323953 +SPY,20120215 00:00,1356400,1358300,1342900,1345400,151754087,0.00036416348938921636 +QQQ,20120215 00:00,635100,638600,626700,627700,83960618,0.00036416348938921636 +SPY,20120216 00:00,1345600,1361700,1343400,1360400,133245607,0.00036331199685331057 +QQQ,20120216 00:00,627900,637000,626300,636300,72560662,0.00036331199685331057 +SPY,20120217 00:00,1365200,1365700,1359600,1364100,96651581,0.00036326424157421834 +QQQ,20120217 00:00,636400,636900,631500,634300,61393177,0.00036326424157421834 +SPY,20120221 00:00,1367500,1370500,1360500,1364600,95051314,0.0003632759103133669 +QQQ,20120221 00:00,635000,638900,632100,636100,35205308,0.0003632759103133669 +SPY,20120222 00:00,1362000,1365500,1357900,1360200,95836135,0.00036339055010342207 +QQQ,20120222 00:00,635000,636800,632300,633200,39365682,0.00036339055010342207 +SPY,20120223 00:00,1359500,1367300,1355000,1366100,111498117,0.0003634507182678503 +QQQ,20120223 00:00,634100,638100,630900,637400,45138601,0.0003634507182678503 +SPY,20120224 00:00,1369500,1372000,1366300,1369300,85773667,0.0003633494738514319 +QQQ,20120224 00:00,639200,640700,638000,639600,38979636,0.0003633494738514319 +SPY,20120227 00:00,1360400,1375300,1358000,1371600,108707496,0.0003630215841382182 +QQQ,20120227 00:00,636100,642600,633300,640500,39766303,0.0003630215841382182 +SPY,20120228 00:00,1371900,1377200,1369300,1375600,98896749,0.00036300937740694176 +QQQ,20120228 00:00,641100,647000,640300,647000,39018968,0.00036300937740694176 +SPY,20120229 00:00,1377300,1381900,1367200,1368700,137944326,0.0003631638003613415 +QQQ,20120229 00:00,647500,649600,642000,644100,54577012,0.0003631638003613415 +SPY,20120301 00:00,1373200,1379900,1371200,1377700,110411453,0.0003632836120685186 +QQQ,20120301 00:00,646500,649700,644600,649200,54911277,0.0003632836120685186 +SPY,20120302 00:00,1376300,1378200,1370000,1373200,88920412,0.0003632913713313111 +QQQ,20120302 00:00,648300,650700,646600,648600,30305495,0.0003632913713313111 +SPY,20120305 00:00,1370500,1371900,1362800,1367500,96836494,0.00036309968134704793 +QQQ,20120305 00:00,648300,649000,639900,641900,42795104,0.00036309968134704793 +SPY,20120306 00:00,1352900,1354300,1343600,1346700,144814675,0.0003636925000511005 +QQQ,20120306 00:00,635700,637200,632300,635700,47127644,0.0003636925000511005 +SPY,20120307 00:00,1350600,1359100,1349300,1356900,103577541,0.00036385778836276486 +QQQ,20120307 00:00,638700,642100,637700,640700,38419162,0.00036385778836276486 +SPY,20120308 00:00,1365000,1373200,1362400,1370200,85876391,0.00036383521626129155 +QQQ,20120308 00:00,644400,649400,643000,647500,37968663,0.00036383521626129155 +SPY,20120309 00:00,1373600,1379300,1371300,1375700,91438907,0.0003636500262349644 +QQQ,20120309 00:00,648600,651400,648200,650200,37411668,0.0003636500262349644 +SPY,20120312 00:00,1375600,1377600,1370900,1375800,78786035,0.00036363163393886814 +QQQ,20120312 00:00,650000,651100,647200,650400,30365923,0.00036363163393886814 +SPY,20120313 00:00,1383800,1401200,1380900,1400600,158323337,0.0003638646151824105 +QQQ,20120313 00:00,654000,662600,652700,662600,55311490,0.0003638646151824105 +SPY,20120314 00:00,1400700,1404500,1394800,1399100,128829330,0.00036373389503004024 +QQQ,20120314 00:00,663300,667400,660800,664900,57130573,0.00036373389503004024 +SPY,20120315 00:00,1401200,1407800,1397600,1407200,137226098,0.0003637258624606832 +QQQ,20120315 00:00,666900,668200,663500,666800,61965237,0.0003637258624606832 +SPY,20120316 00:00,1403200,1404800,1400000,1402700,124840231,0.00036365002462286655 +QQQ,20120316 00:00,666700,666700,663600,665200,48925966,0.00036365002462286655 +SPY,20120319 00:00,1402000,1412800,1401100,1408800,109925153,0.0003636732260414682 +QQQ,20120319 00:00,666300,671500,664500,670000,49615270,0.0003636732260414682 +SPY,20120320 00:00,1400500,1406100,1396400,1404100,111240920,0.0003636754847467528 +QQQ,20120320 00:00,666400,671900,664700,671100,44077101,0.0003636754847467528 +SPY,20120321 00:00,1404600,1406500,1399200,1401600,108863774,0.00036359479531393213 +QQQ,20120321 00:00,671200,674900,670300,671200,35971792,0.00036359479531393213 +SPY,20120322 00:00,1391700,1395500,1387400,1391600,125466549,0.0001951424351950711 +QQQ,20120322 00:00,667200,671400,666800,669800,54412724,0.0001951424351950711 +SPY,20120323 00:00,1393700,1398100,1385500,1396900,92667075,0.00019447998038061705 +QQQ,20120323 00:00,670600,670800,665600,669500,39814758,0.00019447998038061705 +SPY,20120326 00:00,1406200,1416100,1406000,1416100,99701237,0.00019534845529602712 +QQQ,20120326 00:00,673900,681100,673300,681100,38349349,0.00019534845529602712 +SPY,20120327 00:00,1417400,1418300,1410800,1411300,92318657,0.00019525557153476003 +QQQ,20120327 00:00,681600,684900,681300,682200,32847019,0.00019525557153476003 +SPY,20120328 00:00,1410900,1413200,1396400,1404300,129945172,0.0001951210896742137 +QQQ,20120328 00:00,682500,685100,675400,679200,40649324,0.0001951210896742137 +SPY,20120329 00:00,1396200,1404200,1390900,1402200,149350733,0.00019505331310971553 +QQQ,20120329 00:00,676000,679300,672000,676800,46832930,0.00019505331310971553 +SPY,20120330 00:00,1409100,1410500,1400600,1407200,116418788,0.00019502207246626914 +QQQ,20120330 00:00,679800,680100,672800,675500,37902514,0.00019502207246626914 +SPY,20120402 00:00,1406400,1422100,1403700,1417900,124770859,0.0001953039195209004 +QQQ,20120402 00:00,674800,683400,673600,682500,37717634,0.0001953039195209004 +SPY,20120403 00:00,1416000,1418800,1404300,1412600,135974247,0.0001953270491651157 +QQQ,20120403 00:00,683000,685500,678500,682300,42032556,0.0001953270491651157 +SPY,20120404 00:00,1401700,1403300,1393400,1398400,136665920,0.00019591723604180542 +QQQ,20120404 00:00,677200,677600,669100,673000,52762020,0.00019591723604180542 +SPY,20120405 00:00,1394000,1402000,1392600,1397800,104649640,0.00019588438757610723 +QQQ,20120405 00:00,671900,677800,671300,677200,27725850,0.00019588438757610723 +SPY,20120409 00:00,1379400,1387800,1378400,1382300,102847154,0.0001962527548055074 +QQQ,20120409 00:00,668800,674800,667600,672100,33742301,0.0001962527548055074 +SPY,20120410 00:00,1379400,1383400,1357600,1358400,218274578,0.0001973368166957049 +QQQ,20120410 00:00,671800,674400,659200,661300,68159763,0.0001973368166957049 +SPY,20120411 00:00,1373300,1375400,1367500,1369000,132627770,0.00019741274874592277 +QQQ,20120411 00:00,667300,668900,662800,664400,63309580,0.00019741274874592277 +SPY,20120412 00:00,1371300,1389000,1370300,1388500,139019808,0.00019774997199822677 +QQQ,20120412 00:00,665600,672800,664900,671900,49887235,0.00019774997199822677 +SPY,20120413 00:00,1384600,1384800,1370100,1371300,139193450,0.00019855688114300447 +QQQ,20120413 00:00,669800,669900,661600,661800,53928212,0.00019855688114300447 +SPY,20120416 00:00,1378300,1380400,1365800,1369300,135725445,0.0001986413276771145 +QQQ,20120416 00:00,665200,665600,652500,654700,54508192,0.0001986413276771145 +SPY,20120417 00:00,1378600,1393600,1377000,1390900,120502872,0.0001998683197103983 +QQQ,20120417 00:00,657300,669900,656300,667800,43527031,0.0001998683197103983 +SPY,20120418 00:00,1384900,1390800,1383800,1385900,112671125,0.00019951712140196093 +QQQ,20120418 00:00,665900,670000,664100,666100,37969767,0.00019951712140196093 +SPY,20120419 00:00,1386000,1391400,1370700,1377500,183200752,0.0001996921646774771 +QQQ,20120419 00:00,663700,671700,656200,658700,76106897,0.0001996921646774771 +SPY,20120420 00:00,1382400,1388300,1378700,1379500,126288466,0.00019844628063534118 +QQQ,20120420 00:00,662200,665100,655800,656800,54846782,0.00019844628063534118 +SPY,20120423 00:00,1365500,1369100,1359400,1367900,143801646,0.000198658441195756 +QQQ,20120423 00:00,650600,651800,644900,650800,68043774,0.000198658441195756 +SPY,20120424 00:00,1368700,1376500,1368000,1373100,120700892,0.00019858273802737114 +QQQ,20120424 00:00,649600,652300,644500,647300,43306476,0.00019858273802737114 +SPY,20120425 00:00,1385600,1392500,1385300,1392400,133661106,0.00019984653032940617 +QQQ,20120425 00:00,660700,664900,659700,664600,51393392,0.00019984653032940617 +SPY,20120426 00:00,1389100,1403200,1388200,1401700,114664137,0.00019982981682992838 +QQQ,20120426 00:00,664400,669900,663500,668400,38380057,0.00019982981682992838 +SPY,20120427 00:00,1405600,1407800,1398000,1404200,104637129,0.00019988199216213024 +QQQ,20120427 00:00,671200,674500,667700,672500,42329050,0.00019988199216213024 +SPY,20120430 00:00,1401300,1402100,1394900,1397700,92165955,0.00020005181228738918 +QQQ,20120430 00:00,670400,671700,667100,667600,33528739,0.00020005181228738918 +SPY,20120501 00:00,1398100,1416600,1396300,1407400,115353699,0.0002000491447801899 +QQQ,20120501 00:00,666900,676200,665900,668700,34377955,0.0002000491447801899 +SPY,20120502 00:00,1399300,1404600,1394600,1402800,103011706,0.0001999354080696068 +QQQ,20120502 00:00,665400,671100,663900,670400,33011148,0.0001999354080696068 +SPY,20120503 00:00,1404000,1404500,1389900,1392500,123832837,0.00020021349863921908 +QQQ,20120503 00:00,671000,671500,661800,663400,48559532,0.00020021349863921908 +SPY,20120504 00:00,1385200,1386600,1369200,1369600,158063698,0.00020168409810924552 +QQQ,20120504 00:00,657400,658300,646900,646900,81890539,0.00020168409810924552 +SPY,20120507 00:00,1364800,1375600,1364700,1371000,108876105,0.00020164707900363388 +QQQ,20120507 00:00,643100,650700,642900,647600,47732112,0.00020164707900363388 +SPY,20120508 00:00,1363100,1367700,1349200,1365000,191348137,0.00020167517837124853 +QQQ,20120508 00:00,643500,647400,634800,645200,68416238,0.00020167517837124853 +SPY,20120509 00:00,1351000,1366000,1344900,1357400,201963421,0.00020145460978071453 +QQQ,20120509 00:00,637700,646800,635100,644100,75462234,0.00020145460978071453 +SPY,20120510 00:00,1367500,1368500,1357100,1359500,129264219,0.000201105803613464 +QQQ,20120510 00:00,646100,646300,639500,641700,44845941,0.000201105803613464 +SPY,20120511 00:00,1351600,1368700,1351100,1355600,135521665,0.00020100608147602367 +QQQ,20120511 00:00,639700,648600,639100,641800,44382143,0.00020100608147602367 +SPY,20120514 00:00,1343200,1350300,1339100,1341300,140800618,0.00020103244376770953 +QQQ,20120514 00:00,636300,640800,634800,635800,44440123,0.00020103244376770953 +SPY,20120515 00:00,1340500,1348100,1331300,1333500,177460833,0.0002006651478292237 +QQQ,20120515 00:00,637500,642700,632600,633700,62668343,0.0002006651478292237 +SPY,20120516 00:00,1339200,1345400,1328000,1328800,187878911,0.00020077245038098855 +QQQ,20120516 00:00,635900,637800,628100,629400,51374803,0.00020077245038098855 +SPY,20120517 00:00,1328800,1330200,1308100,1308700,212866150,0.0002017948752362496 +QQQ,20120517 00:00,629600,630600,616100,616100,59003423,0.0002017948752362496 +SPY,20120518 00:00,1314000,1316000,1295500,1297400,279229262,0.0002022082357457025 +QQQ,20120518 00:00,618000,619600,607700,608400,73078982,0.0002022082357457025 +SPY,20120521 00:00,1301400,1320200,1299500,1320200,148240929,0.0002038576746933398 +QQQ,20120521 00:00,609300,625700,608500,625100,53185463,0.0002038576746933398 +SPY,20120522 00:00,1323400,1332300,1313400,1322000,168227548,0.00020312477856524453 +QQQ,20120522 00:00,626900,629400,619900,624400,50607821,0.00020312477856524453 +SPY,20120523 00:00,1312600,1324600,1299900,1322700,190382180,0.00020310618270358484 +QQQ,20120523 00:00,619100,627100,613700,625600,54900351,0.00020310618270358484 +SPY,20120524 00:00,1326700,1328400,1314200,1325300,150009412,0.000203014708390173 +QQQ,20120524 00:00,626500,627100,616900,621500,78964489,0.000203014708390173 +SPY,20120525 00:00,1324800,1328500,1317800,1321000,117560211,0.0002029266574289861 +QQQ,20120525 00:00,622100,623200,618900,620700,30066834,0.0002029266574289861 +SPY,20120529 00:00,1331600,1339300,1327500,1337000,136971363,0.00020344545330110172 +QQQ,20120529 00:00,626500,631500,622800,628600,42850613,0.00020344545330110172 +SPY,20120530 00:00,1325900,1326200,1314900,1317300,137463079,0.0002033450237232307 +QQQ,20120530 00:00,622900,625500,616800,623200,51204984,0.0002033450237232307 +SPY,20120531 00:00,1317100,1324500,1303400,1314900,177358856,0.00020135336029990412 +QQQ,20120531 00:00,622500,624100,615900,620600,53276145,0.00020135336029990412 +SPY,20120601 00:00,1294100,1298500,1281600,1281600,204865682,0.00020408991585459924 +QQQ,20120601 00:00,609400,613200,603900,604100,64069771,0.00020408991585459924 +SPY,20120604 00:00,1284400,1287400,1271400,1281000,165707651,0.00020346014508563988 +QQQ,20120604 00:00,605800,609600,600400,608700,62970181,0.00020346014508563988 +SPY,20120605 00:00,1278800,1292600,1277900,1290300,142793334,0.00020322987171463372 +QQQ,20120605 00:00,606600,612400,606300,611200,44688151,0.00020322987171463372 +SPY,20120606 00:00,1299800,1320300,1299300,1320200,158440296,0.0002053115508064349 +QQQ,20120606 00:00,615800,625700,615200,625500,54662658,0.0002053115508064349 +SPY,20120607 00:00,1334900,1335300,1317800,1320500,161308954,0.0002051943821373775 +QQQ,20120607 00:00,631800,631800,622200,622700,36726970,0.0002051943821373775 +SPY,20120608 00:00,1317200,1331200,1312900,1331200,122247149,0.00020544733943485188 +QQQ,20120608 00:00,621700,629500,619600,628700,38502700,0.00020544733943485188 +SPY,20120611 00:00,1341900,1342500,1312800,1314500,147440040,0.00020535449260089246 +QQQ,20120611 00:00,633500,633800,617700,618900,48551584,0.00020535449260089246 +SPY,20120612 00:00,1318000,1330100,1311600,1330100,158037459,0.0002058276957139254 +QQQ,20120612 00:00,621000,625900,616800,625600,45167200,0.0002058276957139254 +SPY,20120613 00:00,1325000,1333600,1316200,1321000,156244332,0.00020542135296316129 +QQQ,20120613 00:00,623600,628500,619200,621300,47102026,0.00020542135296316129 +SPY,20120614 00:00,1323800,1340000,1319800,1335700,205109009,0.00020419428428145782 +QQQ,20120614 00:00,621200,626100,618000,623900,56303765,0.00020419428428145782 +SPY,20120615 00:00,1333500,1342600,1331100,1341000,140129470,0.00020436195804639934 +QQQ,20120615 00:00,623900,630800,623600,630100,36570234,0.00020436195804639934 +SPY,20120618 00:00,1335900,1347300,1332900,1344300,114237240,0.00020437518334298665 +QQQ,20120618 00:00,627300,637400,626300,635800,30886073,0.00020437518334298665 +SPY,20120619 00:00,1351300,1362500,1349300,1356900,123471677,0.00020464356347617881 +QQQ,20120619 00:00,639000,645100,638500,642600,35630853,0.00020464356347617881 +SPY,20120620 00:00,1357600,1361000,1344600,1354400,187408947,0.00020355163681481247 +QQQ,20120620 00:00,643800,645700,638100,642900,49194238,0.00020355163681481247 +SPY,20120621 00:00,1356700,1357800,1323300,1324400,183348690,0.00020564989456221298 +QQQ,20120621 00:00,642400,643100,626200,626900,41450098,0.00020564989456221298 +SPY,20120622 00:00,1331100,1337100,1326200,1334200,113139172,0.00020604740550772126 +QQQ,20120622 00:00,629000,634300,627400,633500,27808501,0.00020604740550772126 +SPY,20120625 00:00,1321000,1321000,1308500,1312600,127618191,0.0002065164440214619 +QQQ,20120625 00:00,628300,628500,619500,621200,32252091,0.0002065164440214619 +SPY,20120626 00:00,1316900,1323800,1309300,1320000,130178242,0.00020610383977202708 +QQQ,20120626 00:00,623400,627000,620600,625200,29212542,0.00020610383977202708 +SPY,20120627 00:00,1324000,1334300,1323100,1331700,93079408,0.00020558279048293247 +QQQ,20120627 00:00,627600,631800,626900,629000,30497453,0.00020558279048293247 +SPY,20120628 00:00,1323200,1329900,1312800,1327900,155144041,0.00020558556329586033 +QQQ,20120628 00:00,624300,624700,615400,621900,45148433,0.00020558556329586033 +SPY,20120629 00:00,1352400,1362700,1348500,1362700,171534507,0.0002083597109003731 +QQQ,20120629 00:00,634000,641600,632100,641600,41144040,0.0002083597109003731 +SPY,20120702 00:00,1365300,1366500,1355200,1364600,109683533,0.00020751154905009381 +QQQ,20120702 00:00,642500,643800,638700,643600,30680753,0.00020751154905009381 +SPY,20120703 00:00,1365100,1375100,1363400,1374700,71720585,0.00020776775986497534 +QQQ,20120703 00:00,643900,648900,642900,648900,15437730,0.00020776775986497534 +SPY,20120705 00:00,1369300,1374000,1362900,1368400,106181413,0.00020774879586582103 +QQQ,20120705 00:00,648300,652500,644800,649300,31506751,0.00020774879586582103 +SPY,20120706 00:00,1355600,1357600,1348500,1355900,122598176,0.0002076554441631516 +QQQ,20120706 00:00,646300,646900,636500,640900,33284419,0.0002076554441631516 +SPY,20120709 00:00,1354100,1355700,1347000,1353200,89161246,0.0002075770205193733 +QQQ,20120709 00:00,640500,642600,636800,640000,32944028,0.0002075770205193733 +SPY,20120710 00:00,1360800,1362300,1336800,1341400,136359914,0.00020657387968976674 +QQQ,20120710 00:00,643500,645000,631200,633700,43512723,0.00020657387968976674 +SPY,20120711 00:00,1342300,1346000,1333800,1341600,128650992,0.00020643695100905197 +QQQ,20120711 00:00,632900,634600,625000,630200,41678676,0.00020643695100905197 +SPY,20120712 00:00,1333900,1340900,1326000,1335100,129050301,0.00020658919546019552 +QQQ,20120712 00:00,625200,626900,618600,624200,51628007,0.00020658919546019552 +SPY,20120713 00:00,1338800,1358800,1338400,1357500,110927086,0.00020723181604116777 +QQQ,20120713 00:00,626000,635200,625600,633800,30505899,0.00020723181604116777 +SPY,20120716 00:00,1354200,1358300,1349000,1353900,82751324,0.00020697000168315042 +QQQ,20120716 00:00,632400,635200,629500,632000,26765032,0.00020697000168315042 +SPY,20120717 00:00,1360100,1366400,1345500,1363600,120755154,0.00020689420744995928 +QQQ,20120717 00:00,636000,637400,626300,635400,37756030,0.00020689420744995928 +SPY,20120718 00:00,1360200,1376400,1359600,1374100,101000531,0.0002057970790396417 +QQQ,20120718 00:00,634100,645800,633900,644000,37115491,0.0002057970790396417 +SPY,20120719 00:00,1376300,1381800,1372100,1377400,115912986,0.00020586332977974635 +QQQ,20120719 00:00,648400,653100,647200,651100,47864177,0.00020586332977974635 +SPY,20120720 00:00,1369800,1371600,1363200,1364700,124504674,0.00020601012634527117 +QQQ,20120720 00:00,650800,651000,642100,642800,37262421,0.00020601012634527117 +SPY,20120723 00:00,1344500,1354600,1338500,1350900,118466395,0.00020652731410183495 +QQQ,20120723 00:00,629900,636800,625100,634600,45625546,0.00020652731410183495 +SPY,20120724 00:00,1352000,1352500,1330300,1340300,145582265,0.00020674559517050735 +QQQ,20120724 00:00,635700,636600,625500,629500,51212540,0.00020674559517050735 +SPY,20120725 00:00,1342600,1345600,1332500,1339500,103594503,0.0002067847197324814 +QQQ,20120725 00:00,624700,629500,621500,625400,41543674,0.0002067847197324814 +SPY,20120726 00:00,1359100,1364600,1352600,1361700,125654874,0.00020549565135351532 +QQQ,20120726 00:00,634400,637300,629800,633800,38009342,0.00020549565135351532 +SPY,20120727 00:00,1369100,1390700,1366500,1388000,186380497,0.00020733846956554023 +QQQ,20120727 00:00,638300,649900,636400,649400,37453412,0.00020733846956554023 +SPY,20120730 00:00,1385700,1393300,1382700,1386800,94642715,0.00020719663169422504 +QQQ,20120730 00:00,650300,653100,646000,648200,34613776,0.00020719663169422504 +SPY,20120731 00:00,1385100,1388700,1377100,1377100,101993870,0.00020716985010859837 +QQQ,20120731 00:00,649200,651800,647400,648000,31813913,0.00020716985010859837 +SPY,20120801 00:00,1387200,1387300,1374000,1375900,120308711,0.0002045283871153754 +QQQ,20120801 00:00,652600,652700,643500,646100,25812266,0.0002045283871153754 +SPY,20120802 00:00,1365400,1375600,1355900,1366400,162944408,0.00020446669694021256 +QQQ,20120802 00:00,641200,650200,639100,643700,36673691,0.00020446669694021256 +SPY,20120803 00:00,1386000,1396400,1385000,1393900,125877370,0.0001968209751345916 +QQQ,20120803 00:00,654200,658800,651900,656100,36050002,0.0001968209751345916 +SPY,20120806 00:00,1397000,1401700,1395600,1396200,73331353,0.00019677910660807958 +QQQ,20120806 00:00,659400,663900,658000,661100,22631713,0.00019677910660807958 +SPY,20120807 00:00,1402000,1409200,1401500,1403200,91323457,0.00018099622620537754 +QQQ,20120807 00:00,663700,669200,662800,666700,26767704,0.00018099622620537754 +SPY,20120808 00:00,1398200,1406400,1398100,1404900,77895539,0.00017261332878801386 +QQQ,20120808 00:00,664800,667600,663700,666200,19135858,0.00017261332878801386 +SPY,20120809 00:00,1403000,1408900,1401500,1406300,78981598,0.0001653071381744064 +QQQ,20120809 00:00,666100,669100,664900,668200,19523612,0.0001653071381744064 +SPY,20120810 00:00,1400700,1408900,1398100,1408400,91051646,0.00015794883366998627 +QQQ,20120810 00:00,665800,668800,664100,668500,19168159,0.00015794883366998627 +SPY,20120813 00:00,1406000,1408400,1400400,1407700,71864462,0.00015773255388447206 +QQQ,20120813 00:00,668400,670300,665000,670300,18910475,0.00015773255388447206 +SPY,20120814 00:00,1412800,1413800,1403700,1407900,85796080,0.0001566578975700004 +QQQ,20120814 00:00,672700,674100,668600,670500,20286640,0.0001566578975700004 +SPY,20120815 00:00,1406400,1411900,1405500,1409500,63862368,0.00015632634834110144 +QQQ,20120815 00:00,670000,673100,669900,672300,22419947,0.00015632634834110144 +SPY,20120816 00:00,1410900,1421600,1408000,1420100,94540455,0.00015662131376973658 +QQQ,20120816 00:00,674700,681700,673900,680200,29030753,0.00015662131376973658 +SPY,20120817 00:00,1422500,1423000,1418600,1422200,77899419,0.00014799920547160387 +QQQ,20120817 00:00,681700,683300,680100,683200,21264247,0.00014799920547160387 +SPY,20120820 00:00,1420100,1422200,1416000,1422200,65230362,0.00014662633744714967 +QQQ,20120820 00:00,682700,684300,680000,684200,22313144,0.00014662633744714967 +SPY,20120821 00:00,1425200,1430900,1414500,1417600,91504684,0.0001467223045695674 +QQQ,20120821 00:00,686000,688800,678800,681400,37157407,0.0001467223045695674 +SPY,20120822 00:00,1413800,1420500,1410700,1418200,113612822,0.00014158995687915804 +QQQ,20120822 00:00,680000,685600,678100,684000,40101626,0.00014158995687915804 +SPY,20120823 00:00,1414500,1414800,1404400,1406800,98981571,0.00014153983246885095 +QQQ,20120823 00:00,681200,683400,677000,678700,27052207,0.00014153983246885095 +SPY,20120824 00:00,1403000,1418100,1402200,1415200,84633688,0.0001405165125281029 +QQQ,20120824 00:00,677100,684500,676000,682900,35213527,0.0001405165125281029 +SPY,20120827 00:00,1419000,1420800,1413400,1415400,59637252,0.00013917409665144856 +QQQ,20120827 00:00,685800,686700,682500,684000,19744080,0.00013917409665144856 +SPY,20120828 00:00,1411700,1418400,1409700,1414000,67508199,0.00013623495538357615 +QQQ,20120828 00:00,683400,685800,681100,684000,28985608,0.00013623495538357615 +SPY,20120829 00:00,1414800,1418900,1411200,1415100,60586630,0.00013620530829355052 +QQQ,20120829 00:00,684000,685700,681100,684000,20575956,0.00013620530829355052 +SPY,20120830 00:00,1409000,1409400,1401900,1404900,87670205,0.00013654603517334812 +QQQ,20120830 00:00,681000,681300,676000,677000,23632687,0.00013654603517334812 +SPY,20120831 00:00,1413200,1418200,1403600,1412400,130393446,0.00013626987386218658 +QQQ,20120831 00:00,682000,684500,674700,681600,35385449,0.00013626987386218658 +SPY,20120904 00:00,1410900,1414600,1401300,1408700,101328393,0.00013371162478155075 +QQQ,20120904 00:00,680300,683500,674200,680900,29397848,0.00013371162478155075 +SPY,20120905 00:00,1411000,1414700,1406300,1409400,84134821,0.00013369270053835352 +QQQ,20120905 00:00,680600,683500,678400,680200,23918420,0.00013369270053835352 +SPY,20120906 00:00,1417900,1437800,1417600,1437800,131300165,0.00013267449624923086 +QQQ,20120906 00:00,684400,695400,684200,695000,40867097,0.00013267449624923086 +SPY,20120907 00:00,1440200,1443900,1438800,1443900,82439521,0.00013240431465721248 +QQQ,20120907 00:00,693700,695500,692300,694300,27713573,0.00013240431465721248 +SPY,20120910 00:00,1442100,1444400,1434600,1435100,72407250,0.00013021927380285037 +QQQ,20120910 00:00,692500,694000,684900,685500,24396248,0.00013021927380285037 +SPY,20120911 00:00,1436300,1443700,1435600,1438900,71392996,0.00012990150000205745 +QQQ,20120911 00:00,685500,688200,683200,684300,27143461,0.00012990150000205745 +SPY,20120912 00:00,1443800,1445500,1439000,1443900,76655733,0.00012960211619917372 +QQQ,20120912 00:00,686800,688100,682100,686600,40555722,0.00012960211619917372 +SPY,20120913 00:00,1443300,1470400,1441500,1467000,176699165,0.00012959401174907108 +QQQ,20120913 00:00,686900,698500,686200,695800,44038688,0.00012959401174907108 +SPY,20120914 00:00,1468900,1481100,1467600,1472400,149771595,0.0001287419168167405 +QQQ,20120914 00:00,698100,704300,697900,701900,36946349,0.0001287419168167405 +SPY,20120917 00:00,1469500,1471900,1463700,1467400,93464487,0.0001287508901645078 +QQQ,20120917 00:00,702200,702400,699600,702100,29362698,0.0001287508901645078 +SPY,20120918 00:00,1465300,1468100,1462500,1466200,81839586,0.00012872549597805707 +QQQ,20120918 00:00,700300,703000,700200,702700,25058283,0.00012872549597805707 +SPY,20120919 00:00,1467600,1471700,1464100,1467400,97491385,0.00012868226014138066 +QQQ,20120919 00:00,702600,705800,700600,704000,29978142,0.00012868226014138066 +SPY,20120920 00:00,1460000,1467900,1456300,1467500,126125706,0.0001263923727650568 +QQQ,20120920 00:00,700600,704000,698700,703200,29054672,0.0001263923727650568 +SPY,20120921 00:00,1466400,1470000,1458100,1458900,92863680,0.00012207818423474976 +QQQ,20120921 00:00,704800,705400,700800,701800,21632845,0.00012207818423474976 +SPY,20120924 00:00,1451600,1459800,1450500,1455900,81529919,0.00012197191526456367 +QQQ,20120924 00:00,695700,698600,694300,696800,28205592,0.00012197191526456367 +SPY,20120925 00:00,1459600,1462400,1440600,1441900,116957213,0.00012160487461720083 +QQQ,20120925 00:00,699200,700800,687300,687600,39282700,0.00012160487461720083 +SPY,20120926 00:00,1441100,1441100,1429600,1432900,128852225,0.00012145760011736354 +QQQ,20120926 00:00,686700,687100,678600,682000,31348419,0.00012145760011736354 +SPY,20120927 00:00,1438800,1449700,1435100,1447200,96575805,0.00012057132564337766 +QQQ,20120927 00:00,683700,693000,682500,691600,23492190,0.00012057132564337766 +SPY,20120928 00:00,1440100,1445500,1434600,1439300,127590894,0.00012114763842200893 +QQQ,20120928 00:00,689100,691200,685100,685800,27258871,0.00012114763842200893 +SPY,20121001 00:00,1445000,1456900,1440200,1442400,120196114,0.00011845800574986088 +QQQ,20121001 00:00,689000,693300,682500,684700,33653093,0.00011845800574986088 +SPY,20121002 00:00,1449000,1451500,1438300,1445000,102440134,0.00011521310989737634 +QQQ,20121002 00:00,687700,689800,681400,686700,30198566,0.00011521310989737634 +SPY,20121003 00:00,1448800,1454300,1441300,1450700,104035525,0.00011381332084658764 +QQQ,20121003 00:00,688600,692400,685900,690900,34352509,0.00011381332084658764 +SPY,20121004 00:00,1456300,1463300,1454400,1462700,110972345,0.00011192545889267 +QQQ,20121004 00:00,692200,695400,690000,693500,21279480,0.00011192545889267 +SPY,20121005 00:00,1469200,1471500,1457000,1461300,102439846,0.00011093472704255187 +QQQ,20121005 00:00,697000,698000,688100,689800,23591888,0.00011093472704255187 +SPY,20121008 00:00,1455800,1458900,1453100,1456600,70711413,0.00011087634865468378 +QQQ,20121008 00:00,685700,687200,682000,683500,28687851,0.00011087634865468378 +SPY,20121009 00:00,1455200,1456400,1441500,1442500,133493925,0.00010725065287813075 +QQQ,20121009 00:00,681400,681800,671000,672600,53433015,0.00010725065287813075 +SPY,20121010 00:00,1442000,1443200,1430900,1432800,112051156,0.00010742561511788593 +QQQ,20121010 00:00,672400,674300,668000,669200,44123172,0.00010742561511788593 +SPY,20121011 00:00,1442800,1444900,1433600,1433600,104250608,0.00010728024926240117 +QQQ,20121011 00:00,674200,674700,666700,667100,27871688,0.00010728024926240117 +SPY,20121012 00:00,1434400,1439500,1425900,1428400,106195956,0.00010737423270952578 +QQQ,20121012 00:00,667000,670600,665500,666800,23416702,0.00010737423270952578 +SPY,20121015 00:00,1432300,1442300,1427700,1440100,89763067,0.00010637092562430409 +QQQ,20121015 00:00,669300,672600,665300,671600,21166650,0.00010637092562430409 +SPY,20121016 00:00,1447600,1456400,1446600,1455800,93647156,0.00010565859142825112 +QQQ,20121016 00:00,672700,682000,672500,681500,28134152,0.00010565859142825112 +SPY,20121017 00:00,1456300,1463200,1454200,1461600,97927398,0.00010475983494730211 +QQQ,20121017 00:00,677700,683000,676800,681000,31303904,0.00010475983494730211 +SPY,20121018 00:00,1458500,1465200,1453300,1458600,126316151,0.0001038785841041657 +QQQ,20121018 00:00,678600,680700,670400,673200,55260383,0.0001038785841041657 +SPY,20121019 00:00,1455000,1455600,1430500,1433000,161433193,0.00010581127175094642 +QQQ,20121019 00:00,672100,672700,656000,656600,59625000,0.00010581127175094642 +SPY,20121022 00:00,1432000,1436700,1422800,1434100,112027680,0.00010496693200722352 +QQQ,20121022 00:00,656500,661900,655000,660200,32936008,0.00010496693200722352 +SPY,20121023 00:00,1418800,1420600,1408300,1413500,166634827,0.00010459730215234903 +QQQ,20121023 00:00,654800,659500,651900,653900,43623312,0.00010459730215234903 +SPY,20121024 00:00,1419400,1421000,1408000,1410500,101447368,0.00010305694888970258 +QQQ,20121024 00:00,657400,658700,650600,651200,34929069,0.00010305694888970258 +SPY,20121025 00:00,1420700,1422800,1405700,1414300,114919471,0.00010311897537834878 +QQQ,20121025 00:00,656300,657200,649700,651600,31951144,0.00010311897537834878 +SPY,20121026 00:00,1413200,1418400,1403900,1413500,118933565,9.954335377266313e-05 +QQQ,20121026 00:00,651600,656200,646600,653500,44286059,9.954335377266313e-05 +SPY,20121031 00:00,1418400,1420300,1406800,1411800,85205741,9.958274770627764e-05 +QQQ,20121031 00:00,652700,653900,647300,649500,33458499,9.958274770627764e-05 +SPY,20121101 00:00,1416600,1430100,1415200,1429100,89011864,9.846287514974115e-05 +QQQ,20121101 00:00,653600,660000,651700,659000,23978633,9.846287514974115e-05 +SPY,20121102 00:00,1437200,1437200,1414100,1415600,113381608,9.605645116834185e-05 +QQQ,20121102 00:00,661700,662100,651100,651300,34921840,9.605645116834185e-05 +SPY,20121105 00:00,1413700,1421700,1409300,1419000,85689537,9.56303066805924e-05 +QQQ,20121105 00:00,651800,657300,650500,655900,25224623,9.56303066805924e-05 +SPY,20121106 00:00,1422700,1435200,1421300,1429300,92986054,9.426819376169964e-05 +QQQ,20121106 00:00,657100,661700,654600,657500,28572692,9.426819376169964e-05 +SPY,20121107 00:00,1416500,1416800,1390700,1397800,225343099,9.63196077186445e-05 +QQQ,20121107 00:00,650200,651000,639100,641700,53586406,9.63196077186445e-05 +SPY,20121108 00:00,1397200,1404100,1379500,1379500,157175132,9.702687031551814e-05 +QQQ,20121108 00:00,643500,645000,631600,631600,50947971,9.702687031551814e-05 +SPY,20121109 00:00,1376100,1394400,1375600,1381600,176223379,9.650598322034093e-05 +QQQ,20121109 00:00,632000,641100,631600,634300,42488190,9.650598322034093e-05 +SPY,20121112 00:00,1385500,1388100,1379600,1382400,86603151,9.126771564732439e-05 +QQQ,20121112 00:00,638000,638700,632500,634200,28916502,9.126771564732439e-05 +SPY,20121113 00:00,1375200,1392500,1373600,1378000,109828367,9.140621645477037e-05 +QQQ,20121113 00:00,629300,635800,627900,630000,36400463,9.140621645477037e-05 +SPY,20121114 00:00,1382100,1384300,1356200,1359800,169918714,9.074276272316428e-05 +QQQ,20121114 00:00,632900,633600,621400,622500,56182834,9.074276272316428e-05 +SPY,20121115 00:00,1359500,1364900,1351800,1357000,160925393,9.053102394352103e-05 +QQQ,20121115 00:00,622800,624900,618000,620300,42096592,9.053102394352103e-05 +SPY,20121116 00:00,1359200,1366400,1347000,1363500,213614223,9.037670231188991e-05 +QQQ,20121116 00:00,620800,624700,613100,622500,58234840,9.037670231188991e-05 +SPY,20121119 00:00,1379200,1391500,1378300,1391500,125631368,9.117783736284783e-05 +QQQ,20121119 00:00,629800,638300,629600,637800,38198026,9.117783736284783e-05 +SPY,20121120 00:00,1388900,1394200,1380800,1392800,99716218,8.968682980117455e-05 +QQQ,20121120 00:00,637600,638900,631900,638000,49504314,8.968682980117455e-05 +SPY,20121121 00:00,1393100,1395700,1390300,1394500,66253719,8.962030769209772e-05 +QQQ,20121121 00:00,638700,640200,636000,639300,17220668,8.962030769209772e-05 +SPY,20121123 00:00,1401400,1414000,1400400,1413300,53475754,8.876045079060754e-05 +QQQ,20121123 00:00,642900,649200,642600,648800,14765872,8.876045079060754e-05 +SPY,20121126 00:00,1406900,1411700,1401900,1411700,86491321,8.877360230706551e-05 +QQQ,20121126 00:00,647400,652100,645400,652000,25751224,8.877360230706551e-05 +SPY,20121127 00:00,1409100,1413800,1402400,1403800,113949581,8.676359695144511e-05 +QQQ,20121127 00:00,651700,654000,648500,649600,24818422,8.676359695144511e-05 +SPY,20121128 00:00,1397700,1415400,1390000,1414800,153889115,8.685391093000146e-05 +QQQ,20121128 00:00,646500,655700,642500,655200,35557704,8.685391093000146e-05 +SPY,20121129 00:00,1420200,1425000,1413700,1421600,132400376,8.301215190360334e-05 +QQQ,20121129 00:00,658700,661300,655800,659100,37418115,8.301215190360334e-05 +SPY,20121130 00:00,1421700,1424200,1416700,1420600,115188920,8.309482176403945e-05 +QQQ,20121130 00:00,659400,659700,656100,658000,31125755,8.309482176403945e-05 +SPY,20121203 00:00,1428100,1429200,1413400,1414700,103003304,7.708335861279526e-05 +QQQ,20121203 00:00,663100,663700,656500,657200,25878210,7.708335861279526e-05 +SPY,20121204 00:00,1414400,1418700,1408700,1412200,110768908,7.714433621537735e-05 +QQQ,20121204 00:00,657000,657700,652000,655800,44808964,7.714433621537735e-05 +SPY,20121205 00:00,1414100,1421600,1403800,1415000,134509723,7.706128480607133e-05 +QQQ,20121205 00:00,655300,655500,645500,649100,47567533,7.706128480607133e-05 +SPY,20121206 00:00,1413700,1420400,1411600,1419100,81136204,7.668451213150704e-05 +QQQ,20121206 00:00,647000,654800,645300,652800,39736556,7.668451213150704e-05 +SPY,20121207 00:00,1425200,1426900,1416700,1424000,89962391,7.661168186605861e-05 +QQQ,20121207 00:00,656400,657100,647100,649200,27348745,7.661168186605861e-05 +SPY,20121210 00:00,1422200,1428100,1421500,1425200,77982728,7.662264001272271e-05 +QQQ,20121210 00:00,647500,654600,647500,651200,28014274,7.662264001272271e-05 +SPY,20121211 00:00,1430700,1441100,1429900,1434200,120603702,7.533389670111637e-05 +QQQ,20121211 00:00,655700,663400,655200,659700,35501364,7.533389670111637e-05 +SPY,20121212 00:00,1440100,1445500,1433100,1435400,120477188,7.434188251628841e-05 +QQQ,20121212 00:00,663200,663200,656500,658300,42455798,7.434188251628841e-05 +SPY,20121213 00:00,1434400,1438300,1422800,1426600,112947114,7.386397587273856e-05 +QQQ,20121213 00:00,657000,661600,650300,653300,39545132,7.386397587273856e-05 +SPY,20121214 00:00,1423200,1425800,1418800,1421200,104037074,7.359696299505828e-05 +QQQ,20121214 00:00,648700,650800,644700,646900,37638441,7.359696299505828e-05 +SPY,20121217 00:00,1425000,1438500,1424300,1437900,111442822,7.337364785723978e-05 +QQQ,20121217 00:00,647500,655700,646600,655500,38906421,7.337364785723978e-05 +SPY,20121218 00:00,1440000,1455000,1437900,1454100,145326291,7.403562985859019e-05 +QQQ,20121218 00:00,658800,666500,657000,665700,49257715,7.403562985859019e-05 +SPY,20121219 00:00,1455500,1455800,1442400,1442700,128974934,7.426242235854186e-05 +QQQ,20121219 00:00,667400,667600,662200,662400,32478335,7.426242235854186e-05 +SPY,20121220 00:00,1443600,1451400,1439900,1451400,111467367,7.380735020649375e-05 +QQQ,20121220 00:00,663800,664100,659300,662600,34733567,7.380735020649375e-05 +SPY,20121221 00:00,1422000,1431000,1419400,1427700,177975926,7.166891603529102e-05 +QQQ,20121221 00:00,648800,652800,646000,651700,44719518,7.166891603529102e-05 +SPY,20121224 00:00,1424500,1425600,1421900,1423300,38187479,7.180848128375464e-05 +QQQ,20121224 00:00,650300,651400,649200,650700,9921678,7.180848128375464e-05 +SPY,20121226 00:00,1426200,1427100,1413500,1416500,84610171,7.173324452768259e-05 +QQQ,20121226 00:00,651200,651800,642900,645000,20958811,7.173324452768259e-05 +SPY,20121227 00:00,1417500,1420700,1399200,1415900,153336787,7.148706368302687e-05 +QQQ,20121227 00:00,645600,646400,636000,644000,44967714,7.148706368302687e-05 +SPY,20121228 00:00,1406500,1414200,1398700,1398700,118554490,7.199617210783216e-05 +QQQ,20121228 00:00,639100,644300,637500,637800,30401612,7.199617210783216e-05 +SPY,20121231 00:00,1397200,1425600,1395400,1425200,207656929,7.285865119227901e-05 +QQQ,20121231 00:00,637100,652500,635800,651100,53485109,7.285865119227901e-05 +SPY,20130102 00:00,1452800,1461500,1447300,1461500,154762124,7.574056566950661e-05 +QQQ,20130102 00:00,667300,672300,664800,672000,51501317,7.574056566950661e-05 +SPY,20130103 00:00,1459900,1463700,1453400,1457300,125860852,7.574194972952666e-05 +QQQ,20130103 00:00,671900,673400,666500,668700,38927150,7.574194972952666e-05 +SPY,20130104 00:00,1459700,1466100,1456700,1464500,95968674,7.454680032947675e-05 +QQQ,20130104 00:00,668800,668800,664700,666300,29237113,7.454680032947675e-05 +SPY,20130107 00:00,1458700,1461100,1454300,1459200,82356729,7.45380179264029e-05 +QQQ,20130107 00:00,664500,667600,662500,666800,24407789,7.45380179264029e-05 +SPY,20130108 00:00,1457200,1459100,1449800,1455300,96448983,7.447481847495154e-05 +QQQ,20130108 00:00,666400,668200,661700,665600,25491910,7.447481847495154e-05 +SPY,20130109 00:00,1458900,1463200,1456400,1459900,76541810,7.452846355580792e-05 +QQQ,20130109 00:00,666200,669500,665500,667700,22695693,7.452846355580792e-05 +SPY,20130110 00:00,1467200,1470900,1459700,1470700,104550895,7.468475667811942e-05 +QQQ,20130110 00:00,672300,672700,665500,671700,36088156,7.468475667811942e-05 +SPY,20130111 00:00,1470600,1471500,1466100,1470700,78613039,7.446243862268179e-05 +QQQ,20130111 00:00,671400,672900,670000,672600,18988373,7.446243862268179e-05 +SPY,20130114 00:00,1468900,1470700,1464300,1469600,76595746,7.448644588714023e-05 +QQQ,20130114 00:00,669200,671500,666700,669600,35140604,7.448644588714023e-05 +SPY,20130115 00:00,1462900,1472100,1462000,1470700,76588670,7.446217659172694e-05 +QQQ,20130115 00:00,666300,667200,663400,666300,26269574,7.446217659172694e-05 +SPY,20130116 00:00,1467800,1472800,1466100,1470500,82147565,7.43793099284602e-05 +QQQ,20130116 00:00,667200,671300,666000,669000,26310674,7.43793099284602e-05 +SPY,20130117 00:00,1476600,1484200,1474300,1479700,105543278,7.441451979061053e-05 +QQQ,20130117 00:00,671700,674800,670600,672200,29794841,7.441451979061053e-05 +SPY,20130118 00:00,1480000,1484900,1474300,1483300,143478816,7.383712147501854e-05 +QQQ,20130118 00:00,670200,671400,667700,670700,28834310,7.383712147501854e-05 +SPY,20130122 00:00,1483400,1491300,1479800,1491000,85902251,7.375196160744275e-05 +QQQ,20130122 00:00,671400,672300,667300,671800,26326796,7.375196160744275e-05 +SPY,20130123 00:00,1491200,1494900,1488600,1493700,78754801,7.38050138297114e-05 +QQQ,20130123 00:00,675600,677900,674600,675900,26232049,7.38050138297114e-05 +SPY,20130124 00:00,1491200,1501400,1490100,1494200,117043379,7.381394395531262e-05 +QQQ,20130124 00:00,666600,672800,665600,666600,39220362,7.381394395531262e-05 +SPY,20130125 00:00,1498800,1502500,1494600,1502500,106824958,7.389120222113507e-05 +QQQ,20130125 00:00,668700,671900,667400,670000,37731048,7.389120222113507e-05 +SPY,20130128 00:00,1503300,1503300,1495100,1500700,93917764,7.348297569494506e-05 +QQQ,20130128 00:00,670100,673800,669300,671500,26475197,7.348297569494506e-05 +SPY,20130129 00:00,1497800,1508500,1496700,1506600,90136030,7.338321848814979e-05 +QQQ,20130129 00:00,670700,673100,666300,671600,30720184,7.338321848814979e-05 +SPY,20130130 00:00,1506400,1509300,1499300,1500800,107211861,7.344658536873214e-05 +QQQ,20130130 00:00,672800,674800,668700,670200,31990436,7.344658536873214e-05 +SPY,20130131 00:00,1499300,1503800,1496000,1497000,92861090,7.347865453656693e-05 +QQQ,20130131 00:00,669900,673500,668100,668900,27642487,7.347865453656693e-05 +SPY,20130201 00:00,1506600,1514100,1503900,1512800,107936504,7.392273596419647e-05 +QQQ,20130201 00:00,673400,677700,670700,676600,34271506,7.392273596419647e-05 +SPY,20130204 00:00,1503100,1505800,1494300,1495300,121333979,7.4498526532298e-05 +QQQ,20130204 00:00,672700,674500,664600,664800,37613556,7.4498526532298e-05 +SPY,20130205 00:00,1503600,1514800,1502900,1510800,100432126,7.50590096448885e-05 +QQQ,20130205 00:00,667700,676700,666100,674800,29882634,7.50590096448885e-05 +SPY,20130206 00:00,1505300,1512600,1504100,1511800,112965414,7.43465838441888e-05 +QQQ,20130206 00:00,672400,675500,670400,672400,36961001,7.43465838441888e-05 +SPY,20130207 00:00,1512100,1513500,1498700,1509600,134829859,7.433638165918814e-05 +QQQ,20130207 00:00,673200,673700,665600,673000,37608724,7.433638165918814e-05 +SPY,20130208 00:00,1512400,1518900,1512200,1518000,81972911,7.4522106157641e-05 +QQQ,20130208 00:00,676400,681300,676300,679900,31070401,7.4522106157641e-05 +SPY,20130211 00:00,1517600,1519000,1514000,1517700,56652554,7.447405576060497e-05 +QQQ,20130211 00:00,680300,680600,677800,680100,17048942,7.447405576060497e-05 +SPY,20130212 00:00,1517800,1523000,1516100,1520000,56302742,7.443825474694189e-05 +QQQ,20130212 00:00,679200,680500,676600,677300,20341824,7.443825474694189e-05 +SPY,20130213 00:00,1523200,1526100,1517200,1521500,73581411,7.421862325736163e-05 +QQQ,20130213 00:00,679300,682300,677700,679700,22219188,7.421862325736163e-05 +SPY,20130214 00:00,1517100,1524700,1515200,1523100,60435268,7.398548817083702e-05 +QQQ,20130214 00:00,676600,680500,676200,679500,22526457,7.398548817083702e-05 +SPY,20130215 00:00,1524300,1525900,1515500,1521700,188245249,7.40172693856203e-05 +QQQ,20130215 00:00,679400,681100,675600,677500,22779254,7.40172693856203e-05 +SPY,20130219 00:00,1523800,1532800,1523600,1532000,74071874,7.403598479826327e-05 +QQQ,20130219 00:00,678800,682600,678600,682300,20352831,7.403598479826327e-05 +SPY,20130220 00:00,1531000,1531900,1512600,1512600,139347892,7.428482510529269e-05 +QQQ,20130220 00:00,682200,682500,671800,671900,34691421,7.428482510529269e-05 +SPY,20130221 00:00,1509000,1509600,1499400,1504000,145971241,7.458318166698103e-05 +QQQ,20130221 00:00,669400,670100,662300,664700,42395558,7.458318166698103e-05 +SPY,20130222 00:00,1511400,1518900,1507700,1518900,89396944,7.49603904136748e-05 +QQQ,20130222 00:00,668500,671500,665900,671500,20086730,7.49603904136748e-05 +SPY,20130225 00:00,1526000,1528600,1490000,1490100,179800584,7.587589941116988e-05 +QQQ,20130225 00:00,675700,678100,662500,663100,35795017,7.587589941116988e-05 +SPY,20130226 00:00,1497000,1501900,1487300,1500200,171479227,7.586546462654819e-05 +QQQ,20130226 00:00,664000,666800,659600,665600,40470990,7.586546462654819e-05 +SPY,20130227 00:00,1498900,1523300,1497700,1519100,119804636,7.631769479716657e-05 +QQQ,20130227 00:00,665600,676500,664700,672300,32802752,7.631769479716657e-05 +SPY,20130228 00:00,1518700,1528700,1515300,1515300,102964805,7.633739400781761e-05 +QQQ,20130228 00:00,672500,677400,671000,671000,24045864,7.633739400781761e-05 +SPY,20130301 00:00,1510900,1523400,1504200,1521100,143240616,7.629260733251189e-05 +QQQ,20130301 00:00,668700,675000,665400,673800,29589120,7.629260733251189e-05 +SPY,20130304 00:00,1517600,1529200,1515200,1529200,82972461,7.62719257506354e-05 +QQQ,20130304 00:00,671600,676900,670700,676800,18359784,7.62719257506354e-05 +SPY,20130305 00:00,1536500,1547000,1536400,1542900,104395367,7.657629772212432e-05 +QQQ,20130305 00:00,680800,687700,680800,686800,31181738,7.657629772212432e-05 +SPY,20130306 00:00,1548300,1549200,1541600,1545000,83236231,7.65484339474142e-05 +QQQ,20130306 00:00,688900,689000,684200,685000,27942851,7.65484339474142e-05 +SPY,20130307 00:00,1546900,1549800,1545200,1548200,63019696,7.636634674922758e-05 +QQQ,20130307 00:00,685900,688000,684600,686900,18570291,7.636634674922758e-05 +SPY,20130308 00:00,1554700,1556400,1546600,1554400,97289907,7.574529133275396e-05 +QQQ,20130308 00:00,689200,690200,685000,687500,23300919,7.574529133275396e-05 +SPY,20130311 00:00,1553500,1560400,1551400,1560300,63325768,7.557270406345223e-05 +QQQ,20130311 00:00,686800,689900,684700,689700,20129831,7.557270406345223e-05 +SPY,20130312 00:00,1559300,1561000,1552200,1556400,92466418,7.524170389571744e-05 +QQQ,20130312 00:00,687700,689200,683900,687200,21415708,7.524170389571744e-05 +SPY,20130313 00:00,1557500,1561200,1552400,1558400,75940737,7.518296620797032e-05 +QQQ,20130313 00:00,688100,688900,683900,686300,30606728,7.518296620797032e-05 +SPY,20130314 00:00,1563100,1568000,1562200,1567300,104114468,7.524952717665415e-05 +QQQ,20130314 00:00,688700,690100,687200,688700,26684228,7.524952717665415e-05 +SPY,20130315 00:00,1558700,1560400,1553100,1558800,105586093,7.408494468618594e-05 +QQQ,20130315 00:00,687500,687900,683400,685100,28059529,7.408494468618594e-05 +SPY,20130318 00:00,1542900,1556400,1542000,1549700,110246166,7.41640232879057e-05 +QQQ,20130318 00:00,678800,686300,677300,683600,34527111,7.41640232879057e-05 +SPY,20130319 00:00,1552900,1555100,1535900,1546100,149589016,7.412695420288079e-05 +QQQ,20130319 00:00,685700,687000,676200,682400,30993355,7.412695420288079e-05 +SPY,20130320 00:00,1555100,1559500,1552600,1556300,95297590,7.424467046310398e-05 +QQQ,20130320 00:00,687100,688600,683900,686800,25454493,7.424467046310398e-05 +SPY,20130321 00:00,1547900,1553100,1541000,1543400,115911436,7.451770872749378e-05 +QQQ,20130321 00:00,680800,682500,677700,679300,28810626,7.451770872749378e-05 +SPY,20130322 00:00,1548500,1556000,1547300,1556000,91810945,7.4836615020222e-05 +QQQ,20130322 00:00,682100,686400,681300,685900,25921264,7.4836615020222e-05 +SPY,20130325 00:00,1559900,1562700,1543500,1550700,131779376,7.489905299938261e-05 +QQQ,20130325 00:00,688100,689600,680100,683200,23704292,7.489905299938261e-05 +SPY,20130326 00:00,1556000,1562200,1554200,1561500,75820229,7.497623449497336e-05 +QQQ,20130326 00:00,686000,687300,684500,687100,17487822,7.497623449497336e-05 +SPY,20130327 00:00,1552700,1562500,1550000,1561600,89094609,7.498153997901873e-05 +QQQ,20130327 00:00,682400,688500,681400,688300,21507882,7.498153997901873e-05 +SPY,20130328 00:00,1561300,1568500,1558500,1565500,83562253,7.408639830490849e-05 +QQQ,20130328 00:00,688000,690600,686400,689700,20065356,7.408639830490849e-05 +SPY,20130401 00:00,1566000,1569100,1556800,1560500,82034908,7.420937846306055e-05 +QQQ,20130401 00:00,690200,690900,683100,685000,26433654,7.420937846306055e-05 +SPY,20130402 00:00,1565900,1572100,1563700,1568200,89338807,7.425183136624773e-05 +QQQ,20130402 00:00,688300,692700,687700,690400,23887778,7.425183136624773e-05 +SPY,20130403 00:00,1569200,1570300,1548200,1551500,138206759,7.463175141636626e-05 +QQQ,20130403 00:00,690800,691800,682400,684100,30686380,7.463175141636626e-05 +SPY,20130404 00:00,1554300,1561700,1550900,1558500,108461458,7.466007798891748e-05 +QQQ,20130404 00:00,683800,686000,680600,684300,25498178,7.466007798891748e-05 +SPY,20130405 00:00,1539800,1553500,1537700,1551800,132353586,7.452547403698788e-05 +QQQ,20130405 00:00,673500,679600,671900,678500,41910292,7.452547403698788e-05 +SPY,20130408 00:00,1552500,1562200,1547600,1562100,75492357,7.465437360773686e-05 +QQQ,20130408 00:00,678900,682400,676900,682200,15875018,7.465437360773686e-05 +SPY,20130409 00:00,1564800,1573200,1559800,1567500,91965576,7.415926875844801e-05 +QQQ,20130409 00:00,684000,689600,680900,686800,27067297,7.415926875844801e-05 +SPY,20130410 00:00,1571700,1588700,1571300,1587300,114994657,7.511665298592516e-05 +QQQ,20130410 00:00,689200,701700,688800,700200,43507204,7.511665298592516e-05 +SPY,20130411 00:00,1586900,1597100,1585400,1592200,94630689,7.474877786292188e-05 +QQQ,20130411 00:00,698500,701500,697700,699700,32081397,7.474877786292188e-05 +SPY,20130412 00:00,1587100,1590400,1579200,1587800,100708097,7.359387809809724e-05 +QQQ,20130412 00:00,698200,699900,694100,699400,27190869,7.359387809809724e-05 +SPY,20130415 00:00,1580200,1581300,1551200,1551700,186156530,7.533324279203372e-05 +QQQ,20130415 00:00,696500,697900,684800,685500,44037024,7.533324279203372e-05 +SPY,20130416 00:00,1563200,1574900,1559100,1574200,126446312,7.54632595638694e-05 +QQQ,20130416 00:00,689500,695500,688100,694700,24030900,7.54632595638694e-05 +SPY,20130417 00:00,1563100,1563200,1542800,1550400,198134784,7.592097334030993e-05 +QQQ,20130417 00:00,688700,688800,677100,681000,50495161,7.592097334030993e-05 +SPY,20130418 00:00,1553300,1554100,1535500,1541400,148855136,7.619424250165757e-05 +QQQ,20130418 00:00,682900,683300,668800,671400,50205946,7.619424250165757e-05 +SPY,20130419 00:00,1544400,1555500,1541200,1554800,123372939,7.544213288189254e-05 +QQQ,20130419 00:00,673000,682300,672000,680900,37077190,7.544213288189254e-05 +SPY,20130422 00:00,1557800,1565400,1547500,1562000,90989989,7.556520908414171e-05 +QQQ,20130422 00:00,683300,690400,680800,687900,30310722,7.556520908414171e-05 +SPY,20130423 00:00,1569600,1579300,1561800,1577900,120401270,7.562174119308464e-05 +QQQ,20130423 00:00,691800,696900,688200,694400,37475020,7.562174119308464e-05 +SPY,20130424 00:00,1578200,1582900,1575400,1579000,81172344,7.563257479159278e-05 +QQQ,20130424 00:00,692800,696700,691200,694300,27197515,7.563257479159278e-05 +SPY,20130425 00:00,1582500,1592700,1581000,1586100,113027663,7.537011085413417e-05 +QQQ,20130425 00:00,696000,700500,695900,697900,23524446,7.537011085413417e-05 +SPY,20130426 00:00,1583400,1586000,1577300,1582600,83462024,7.548177834659779e-05 +QQQ,20130426 00:00,696200,697700,692700,695700,21664689,7.548177834659779e-05 +SPY,20130429 00:00,1586500,1596500,1584200,1593000,79783650,7.427562959863853e-05 +QQQ,20130429 00:00,697900,704700,697600,702100,24304758,7.427562959863853e-05 +SPY,20130430 00:00,1592900,1597200,1586100,1596800,101793690,7.419469975649669e-05 +QQQ,20130430 00:00,703000,707300,700400,707300,25725809,7.419469975649669e-05 +SPY,20130501 00:00,1593200,1594100,1581000,1583200,111301363,7.434762948276483e-05 +QQQ,20130501 00:00,707400,708500,702500,703900,24346600,7.434762948276483e-05 +SPY,20130502 00:00,1586700,1598900,1585300,1597200,82810536,7.46016772070579e-05 +QQQ,20130502 00:00,705100,714300,704500,712800,27746900,7.46016772070579e-05 +SPY,20130503 00:00,1611300,1618800,1610400,1613200,115367824,7.499941477278874e-05 +QQQ,20130503 00:00,719700,723400,719200,721200,30565219,7.499941477278874e-05 +SPY,20130506 00:00,1614600,1620100,1614200,1617800,58439339,7.506493778444369e-05 +QQQ,20130506 00:00,722500,725100,721900,724000,18240163,7.506493778444369e-05 +SPY,20130507 00:00,1620900,1626500,1616700,1626300,80144043,7.469951949387225e-05 +QQQ,20130507 00:00,725200,725700,720900,723400,23187021,7.469951949387225e-05 +SPY,20130508 00:00,1624200,1633900,1623300,1633400,83868841,7.303891453753017e-05 +QQQ,20130508 00:00,723200,727600,722000,727100,19494491,7.303891453753017e-05 +SPY,20130509 00:00,1632900,1637000,1624700,1629300,94159930,7.305540384438816e-05 +QQQ,20130509 00:00,725700,731000,724700,726500,29161203,7.305540384438816e-05 +SPY,20130510 00:00,1630300,1634900,1625100,1634100,91107266,7.301329835831993e-05 +QQQ,20130510 00:00,727600,730800,726400,730500,19641643,7.301329835831993e-05 +SPY,20130513 00:00,1632300,1638100,1628200,1635400,71774035,7.295666578915486e-05 +QQQ,20130513 00:00,729300,733200,728600,731400,23596920,7.295666578915486e-05 +SPY,20130514 00:00,1637200,1653500,1636700,1652800,91589504,7.315114410816547e-05 +QQQ,20130514 00:00,731600,737400,731300,735200,32446658,7.315114410816547e-05 +SPY,20130515 00:00,1650100,1664500,1649100,1661500,104178214,7.317039520769832e-05 +QQQ,20130515 00:00,733800,737400,732000,736700,24257132,7.317039520769832e-05 +SPY,20130516 00:00,1657900,1663600,1651100,1653400,99638286,7.275361903979258e-05 +QQQ,20130516 00:00,737300,740900,735500,736000,24867739,7.275361903979258e-05 +SPY,20130517 00:00,1659700,1670400,1657400,1669700,106565142,7.29642069197046e-05 +QQQ,20130517 00:00,739700,743300,737400,743000,26182388,7.29642069197046e-05 +SPY,20130520 00:00,1668100,1675800,1666100,1669700,78535046,7.283953290316316e-05 +QQQ,20130520 00:00,741600,744300,738900,741900,21342362,7.283953290316316e-05 +SPY,20130521 00:00,1670900,1678000,1665000,1671100,82655513,7.143641181034598e-05 +QQQ,20130521 00:00,741500,745400,739000,742700,24414499,7.143641181034598e-05 +SPY,20130522 00:00,1673400,1690700,1651700,1659200,207803061,7.122187500643415e-05 +QQQ,20130522 00:00,743600,749500,732400,736500,53574732,7.122187500643415e-05 +SPY,20130523 00:00,1642000,1659100,1639400,1654500,184821919,6.950761765540677e-05 +QQQ,20130523 00:00,729700,737000,728300,734500,43717647,6.950761765540677e-05 +SPY,20130524 00:00,1644800,1653300,1639800,1653300,116703919,6.951707238735377e-05 +QQQ,20130524 00:00,729600,734300,727600,734300,24435361,6.951707238735377e-05 +SPY,20130528 00:00,1670900,1677800,1658100,1663000,127445547,6.963121674914105e-05 +QQQ,20130528 00:00,742700,745400,736600,739000,25448511,6.963121674914105e-05 +SPY,20130529 00:00,1654100,1658000,1643400,1652200,146895581,6.982626653079066e-05 +QQQ,20130529 00:00,736000,738000,731200,735400,30680205,6.982626653079066e-05 +SPY,20130530 00:00,1653800,1665900,1652300,1658900,96487592,6.985000924762292e-05 +QQQ,20130530 00:00,735700,742800,735500,739300,30462008,6.985000924762292e-05 +SPY,20130531 00:00,1653600,1663100,1632400,1632400,137865958,7.00483201772471e-05 +QQQ,20130531 00:00,736600,742000,731700,731700,35109348,7.00483201772471e-05 +SPY,20130603 00:00,1638800,1644600,1626600,1643800,146747874,6.952300356084168e-05 +QQQ,20130603 00:00,732600,734000,724300,733700,45144379,6.952300356084168e-05 +SPY,20130604 00:00,1644300,1651000,1627300,1635600,140302603,6.960478949542042e-05 +QQQ,20130604 00:00,735300,738200,727000,730000,32019053,6.960478949542042e-05 +SPY,20130605 00:00,1631000,1634200,1611300,1611800,183592216,6.761311878162105e-05 +QQQ,20130605 00:00,727600,730400,719900,720300,39875365,6.761311878162105e-05 +SPY,20130606 00:00,1611900,1627400,1602500,1626400,168748465,6.777190474242829e-05 +QQQ,20130606 00:00,721500,724000,714700,723500,59722927,6.777190474242829e-05 +SPY,20130607 00:00,1638300,1649500,1631400,1648100,146431212,6.836530634997134e-05 +QQQ,20130607 00:00,727000,734700,725200,734000,29238269,6.836530634997134e-05 +SPY,20130610 00:00,1653000,1654000,1643800,1648000,83501459,6.636042063425485e-05 +QQQ,20130610 00:00,735300,737600,732600,734200,21723639,6.636042063425485e-05 +SPY,20130611 00:00,1632700,1645400,1627400,1631200,136509220,6.680938241445391e-05 +QQQ,20130611 00:00,726900,733400,724400,727000,36375657,6.680938241445391e-05 +SPY,20130612 00:00,1642300,1643800,1616000,1617500,152312512,6.700612969290445e-05 +QQQ,20130612 00:00,731100,731400,717400,718400,37991366,6.700612969290445e-05 +SPY,20130613 00:00,1616500,1645000,1613000,1642200,134784614,6.680747571222071e-05 +QQQ,20130613 00:00,717500,729200,715500,727200,26721451,6.680747571222071e-05 +SPY,20130614 00:00,1640300,1646600,1629100,1631700,113390558,6.655602002123081e-05 +QQQ,20130614 00:00,727600,728400,721800,722800,25898887,6.655602002123081e-05 +SPY,20130617 00:00,1643000,1652200,1635500,1645000,117546027,6.658692708185527e-05 +QQQ,20130617 00:00,728500,734000,726000,729800,31542853,6.658692708185527e-05 +SPY,20130618 00:00,1645600,1659900,1645200,1656900,89587973,6.662771956181017e-05 +QQQ,20130618 00:00,730800,737200,730600,735600,23655080,6.662771956181017e-05 +SPY,20130619 00:00,1656100,1658900,1633800,1635400,169087146,6.714775456617763e-05 +QQQ,20130619 00:00,736000,736800,726800,727600,40191166,6.714775456617763e-05 +SPY,20130620 00:00,1618700,1621000,1589800,1592700,271644171,6.982665190355007e-05 +QQQ,20130620 00:00,719200,721600,707900,709400,55526174,6.982665190355007e-05 +SPY,20130621 00:00,1596200,1597600,1574800,1590500,232959955,6.954490235864367e-05 +QQQ,20130621 00:00,707800,709700,698400,703400,48936222,6.954490235864367e-05 +SPY,20130624 00:00,1574100,1584300,1557300,1569900,201603786,7.003615708747129e-05 +QQQ,20130624 00:00,698500,702700,691500,697300,37639288,7.003615708747129e-05 +SPY,20130625 00:00,1585200,1591700,1574300,1586500,140715013,6.799866590933216e-05 +QQQ,20130625 00:00,704000,705200,698100,702300,26332850,6.799866590933216e-05 +SPY,20130626 00:00,1599300,1605000,1592600,1601700,120215759,6.80361309514065e-05 +QQQ,20130626 00:00,708400,710000,705900,708700,21303374,6.80361309514065e-05 +SPY,20130627 00:00,1611500,1618200,1609500,1611300,119294686,6.676214136703426e-05 +QQQ,20130627 00:00,712400,716200,711300,711700,22303731,6.676214136703426e-05 +SPY,20130628 00:00,1606500,1614000,1598600,1600100,130109066,6.664972546319755e-05 +QQQ,20130628 00:00,709500,716900,707900,712100,25434130,6.664972546319755e-05 +SPY,20130701 00:00,1612800,1624800,1610800,1614000,114653012,6.66843337114265e-05 +QQQ,20130701 00:00,717500,723000,716400,717300,23957336,6.66843337114265e-05 +SPY,20130702 00:00,1610900,1623000,1605000,1611600,119553837,6.651694750666504e-05 +QQQ,20130702 00:00,716800,721700,713500,717300,21898154,6.651694750666504e-05 +SPY,20130703 00:00,1605100,1617600,1602200,1613400,59696858,6.336589337341808e-05 +QQQ,20130703 00:00,714800,723700,714200,720400,14935751,6.336589337341808e-05 +SPY,20130705 00:00,1625300,1630800,1613000,1630500,97439875,6.362303065430139e-05 +QQQ,20130705 00:00,724400,726100,718600,725600,25781531,6.362303065430139e-05 +SPY,20130708 00:00,1639200,1643900,1635800,1639400,90672202,6.343149737380132e-05 +QQQ,20130708 00:00,729600,729900,723800,726500,19705770,6.343149737380132e-05 +SPY,20130709 00:00,1650000,1653300,1642700,1650800,106757402,6.357133123424532e-05 +QQQ,20130709 00:00,729900,732400,726500,730900,24217324,6.357133123424532e-05 +SPY,20130710 00:00,1650300,1657500,1646300,1652100,105437138,6.303776096742347e-05 +QQQ,20130710 00:00,730200,736100,729800,735100,23850377,6.303776096742347e-05 +SPY,20130711 00:00,1671100,1676000,1665300,1675100,113993351,6.405927865991797e-05 +QQQ,20130711 00:00,743000,750300,742500,750300,42873715,6.405927865991797e-05 +SPY,20130712 00:00,1674300,1678500,1671300,1675100,81255611,6.364559973459211e-05 +QQQ,20130712 00:00,750300,753500,748300,752900,28057716,6.364559973459211e-05 +SPY,20130715 00:00,1679600,1683900,1676800,1682200,61816116,6.364992874656471e-05 +QQQ,20130715 00:00,753800,755200,751700,754800,17826964,6.364992874656471e-05 +SPY,20130716 00:00,1682500,1683500,1670700,1675000,76492853,6.345939145566243e-05 +QQQ,20130716 00:00,755300,755900,751800,753700,21857873,6.345939145566243e-05 +SPY,20130717 00:00,1681600,1684700,1677300,1679700,79399399,6.254925379771132e-05 +QQQ,20130717 00:00,756000,757400,753500,755700,18766690,6.254925379771132e-05 +SPY,20130718 00:00,1682900,1692700,1682000,1688800,84464524,6.243773015167047e-05 +QQQ,20130718 00:00,755500,757400,752500,753700,25371333,6.243773015167047e-05 +SPY,20130719 00:00,1684800,1692300,1683100,1692300,89925668,6.226930120912493e-05 +QQQ,20130719 00:00,747200,747400,743700,745900,31486623,6.226930120912493e-05 +SPY,20130722 00:00,1693900,1697400,1690100,1695000,66244175,6.192565856883618e-05 +QQQ,20130722 00:00,749100,749800,745800,748100,17712674,6.192565856883618e-05 +SPY,20130723 00:00,1697900,1698300,1690500,1691400,68810946,6.195568897381973e-05 +QQQ,20130723 00:00,749500,749600,742000,742600,18543671,6.195568897381973e-05 +SPY,20130724 00:00,1698000,1698500,1681800,1685500,101293288,6.137443987475675e-05 +QQQ,20130724 00:00,749900,750200,743400,745000,20284733,6.137443987475675e-05 +SPY,20130725 00:00,1681700,1690800,1679400,1689300,88599506,6.0816776140964874e-05 +QQQ,20130725 00:00,748500,750600,744600,749700,20701923,6.0816776140964874e-05 +SPY,20130726 00:00,1682400,1691600,1675200,1691100,87678043,6.0512612265787263e-05 +QQQ,20130726 00:00,746700,753800,745500,753700,19526727,6.0512612265787263e-05 +SPY,20130729 00:00,1687000,1690600,1681100,1685300,69807907,6.051354069525813e-05 +QQQ,20130729 00:00,752200,755400,750300,752300,17979325,6.051354069525813e-05 +SPY,20130730 00:00,1691500,1692800,1681900,1686000,76066677,5.9713463293261484e-05 +QQQ,20130730 00:00,755000,759400,753500,756300,22817021,5.9713463293261484e-05 +SPY,20130731 00:00,1689400,1698500,1684900,1686600,119215193,5.7950642258050236e-05 +QQQ,20130731 00:00,757800,762000,756300,757700,23513930,5.7950642258050236e-05 +SPY,20130801 00:00,1700000,1708100,1699000,1706500,93280387,5.834849140626291e-05 +QQQ,20130801 00:00,762900,766500,762100,765400,15627001,5.834849140626291e-05 +SPY,20130802 00:00,1703000,1709600,1700500,1709500,69378174,5.8334025367780556e-05 +QQQ,20130802 00:00,765500,769900,763900,769700,13585522,5.8334025367780556e-05 +SPY,20130805 00:00,1706100,1709600,1703500,1708000,45392458,5.830893751358174e-05 +QQQ,20130805 00:00,769000,770800,767800,770200,13937894,5.830893751358174e-05 +SPY,20130806 00:00,1703400,1705200,1693500,1697300,71528242,5.83619501186567e-05 +QQQ,20130806 00:00,769300,769900,762500,765600,22529435,5.83619501186567e-05 +SPY,20130807 00:00,1692300,1694300,1685500,1691800,73391843,5.6975377514031845e-05 +QQQ,20130807 00:00,763400,765600,758800,764200,18208362,5.6975377514031845e-05 +SPY,20130808 00:00,1700000,1701800,1689300,1698100,84008835,5.700224603700646e-05 +QQQ,20130808 00:00,768400,769800,763000,768000,18356292,5.700224603700646e-05 +SPY,20130809 00:00,1695600,1701000,1687300,1693000,82562992,5.6938053599906946e-05 +QQQ,20130809 00:00,766700,769400,762700,765000,16950100,5.6938053599906946e-05 +SPY,20130812 00:00,1684700,1693100,1683800,1691000,59076849,5.6927717411371e-05 +QQQ,20130812 00:00,762000,768000,761900,766700,16961448,5.6927717411371e-05 +SPY,20130813 00:00,1694000,1699000,1684100,1696900,74561074,5.6982657533677826e-05 +QQQ,20130813 00:00,767700,772700,762200,771200,22745617,5.6982657533677826e-05 +SPY,20130814 00:00,1695600,1697900,1687000,1687400,70350361,5.71000010848223e-05 +QQQ,20130814 00:00,770700,771800,767000,768100,25890627,5.71000010848223e-05 +SPY,20130815 00:00,1674300,1674300,1660900,1662700,126229462,5.817930371770811e-05 +QQQ,20130815 00:00,759500,759900,752900,755100,35619823,5.817930371770811e-05 +SPY,20130816 00:00,1660400,1666300,1655000,1658700,106209007,5.819324887201655e-05 +QQQ,20130816 00:00,755200,758700,753500,754600,20645369,5.819324887201655e-05 +SPY,20130819 00:00,1656400,1662100,1647600,1647600,83024441,5.8246416080463206e-05 +QQQ,20130819 00:00,754900,761300,753300,753500,27632475,5.8246416080463206e-05 +SPY,20130820 00:00,1650300,1662000,1648600,1655900,77447684,5.8010473664057665e-05 +QQQ,20130820 00:00,754900,760300,754300,757000,17239354,5.8010473664057665e-05 +SPY,20130821 00:00,1651500,1660300,1641900,1645600,132890097,5.810991581527757e-05 +QQQ,20130821 00:00,754400,760900,751400,754200,28275359,5.810991581527757e-05 +SPY,20130822 00:00,1649500,1662900,1648900,1660600,82535506,5.842925822626252e-05 +QQQ,20130822 00:00,757500,762100,757100,761600,15557186,5.842925822626252e-05 +SPY,20130823 00:00,1665500,1668300,1657700,1666700,70964457,5.843453815133825e-05 +QQQ,20130823 00:00,767000,767700,764000,766800,18100973,5.843453815133825e-05 +SPY,20130826 00:00,1667700,1673000,1658900,1659700,71204095,5.843976690964162e-05 +QQQ,20130826 00:00,767300,772700,765500,767100,24605595,5.843976690964162e-05 +SPY,20130827 00:00,1643300,1649800,1632100,1632900,132014807,5.961658354659483e-05 +QQQ,20130827 00:00,758000,761700,749600,750700,36525181,5.961658354659483e-05 +SPY,20130828 00:00,1633100,1644900,1630600,1639100,83019406,5.9549098377988605e-05 +QQQ,20130828 00:00,750500,757500,750500,754300,19453652,5.9549098377988605e-05 +SPY,20130829 00:00,1635300,1650400,1634000,1642200,88993054,5.958476871429177e-05 +QQQ,20130829 00:00,754100,763400,753000,759600,24481541,5.958476871429177e-05 +SPY,20130830 00:00,1644600,1645300,1631700,1636500,105523797,5.9696250922868664e-05 +QQQ,20130830 00:00,760400,760400,752000,754600,23730053,5.9696250922868664e-05 +SPY,20130903 00:00,1652300,1655800,1637000,1643800,113549991,5.977911825689477e-05 +QQQ,20130903 00:00,760900,764300,755400,759000,24697960,5.977911825689477e-05 +SPY,20130904 00:00,1644600,1660300,1641350,1657600,83234247,5.9757068347962175e-05 +QQQ,20130904 00:00,761600,768400,759300,767100,25470022,5.9757068347962175e-05 +SPY,20130905 00:00,1658500,1664000,1657300,1658600,55584480,5.964023838129757e-05 +QQQ,20130905 00:00,767600,770550,767300,768400,16810392,5.964023838129757e-05 +SPY,20130906 00:00,1664800,1669800,1644800,1660400,131889423,5.9621041473152356e-05 +QQQ,20130906 00:00,771000,773400,760600,769300,25556974,5.9621041473152356e-05 +SPY,20130909 00:00,1664500,1677300,1664400,1676700,71813338,6.002482612086117e-05 +QQQ,20130909 00:00,772600,779600,772300,778300,24193250,6.002482612086117e-05 +SPY,20130910 00:00,1686400,1689000,1682600,1688400,91018703,5.848539453259526e-05 +QQQ,20130910 00:00,782800,783100,779200,782000,22680213,5.848539453259526e-05 +SPY,20130911 00:00,1686600,1694000,1683500,1693700,77547138,5.84855757784831e-05 +QQQ,20130911 00:00,776900,781100,775900,780700,26345474,5.84855757784831e-05 +SPY,20130912 00:00,1693500,1695600,1687200,1690400,74584175,5.814331010949643e-05 +QQQ,20130912 00:00,780800,782500,778600,780100,17348184,5.814331010949643e-05 +SPY,20130913 00:00,1691300,1694600,1687400,1693300,61972527,5.816177073882158e-05 +QQQ,20130913 00:00,780900,781400,776400,780600,15908509,5.816177073882158e-05 +SPY,20130916 00:00,1711600,1712400,1700400,1703800,94743068,5.805923367062577e-05 +QQQ,20130916 00:00,787200,787200,776700,778500,24288939,5.805923367062577e-05 +SPY,20130917 00:00,1704700,1711100,1704600,1710700,68422451,5.735724477777384e-05 +QQQ,20130917 00:00,780200,784700,779800,783800,21785412,5.735724477777384e-05 +SPY,20130918 00:00,1709700,1735200,1705800,1731400,162552414,5.779275469989363e-05 +QQQ,20130918 00:00,784900,794600,783300,793400,29833813,5.779275469989363e-05 +SPY,20130919 00:00,1735300,1736000,1725900,1728100,122855888,5.777352085016728e-05 +QQQ,20130919 00:00,795600,796900,793700,795000,24861345,5.777352085016728e-05 +SPY,20130920 00:00,1723000,1723300,1705800,1706200,110504216,5.815013163365205e-05 +QQQ,20130920 00:00,794500,795300,789500,789800,24226392,5.815013163365205e-05 +SPY,20130923 00:00,1705000,1706400,1694000,1699400,88854203,5.8188320937629275e-05 +QQQ,20130923 00:00,793200,794100,784600,788500,25687298,5.8188320937629275e-05 +SPY,20130924 00:00,1699200,1705200,1692100,1695700,86708329,5.819306094682466e-05 +QQQ,20130924 00:00,790000,792500,785700,788300,21064604,5.819306094682466e-05 +SPY,20130925 00:00,1696100,1699300,1689000,1691100,98740960,5.817424014169156e-05 +QQQ,20130925 00:00,788900,790000,784000,786000,20362564,5.817424014169156e-05 +SPY,20130926 00:00,1693200,1701700,1690500,1696900,67188223,5.8167873958270324e-05 +QQQ,20130926 00:00,788800,793600,788500,791700,20003228,5.8167873958270324e-05 +SPY,20130927 00:00,1688500,1691400,1684700,1689500,80759674,5.7638817361763226e-05 +QQQ,20130927 00:00,787100,792100,785900,790800,22430191,5.7638817361763226e-05 +SPY,20130930 00:00,1674600,1685400,1671500,1681000,121886292,5.747791986309161e-05 +QQQ,20130930 00:00,782500,790900,780000,788500,24476177,5.747791986309161e-05 +SPY,20131001 00:00,1681500,1695000,1680000,1694000,107332142,5.725728773259879e-05 +QQQ,20131001 00:00,788900,797200,788500,796800,27311350,5.725728773259879e-05 +SPY,20131002 00:00,1683400,1692100,1678300,1691100,87176914,5.704721919855124e-05 +QQQ,20131002 00:00,791400,797600,790600,796500,21879194,5.704721919855124e-05 +SPY,20131003 00:00,1687700,1689400,1668400,1676200,153254596,5.752813514455694e-05 +QQQ,20131003 00:00,795500,797200,783000,787100,34917178,5.752813514455694e-05 +SPY,20131004 00:00,1677400,1690600,1675300,1688900,84960871,5.774314562715981e-05 +QQQ,20131004 00:00,787200,795100,786500,794000,20531533,5.774314562715981e-05 +SPY,20131007 00:00,1674300,1684500,1672500,1674200,81489219,5.800046713904078e-05 +QQQ,20131007 00:00,787000,793500,786700,787400,18658142,5.800046713904078e-05 +SPY,20131008 00:00,1674500,1676200,1653700,1654800,153859703,5.885920990960567e-05 +QQQ,20131008 00:00,787400,788100,772000,772200,40968703,5.885920990960567e-05 +SPY,20131009 00:00,1658200,1662000,1645300,1655700,143898404,5.882468419422808e-05 +QQQ,20131009 00:00,774000,774400,763600,769600,62806871,5.882468419422808e-05 +SPY,20131010 00:00,1673200,1692400,1672300,1692400,157839488,6.047717527545022e-05 +QQQ,20131010 00:00,778100,787800,777900,786100,41310257,6.047717527545022e-05 +SPY,20131011 00:00,1689000,1703200,1687700,1703000,88751455,5.99559306745284e-05 +QQQ,20131011 00:00,784100,792900,784000,792300,23175005,5.99559306745284e-05 +SPY,20131014 00:00,1692400,1710700,1690800,1710400,94276399,5.9877179751874073e-05 +QQQ,20131014 00:00,787500,797900,786800,797900,29982341,5.9877179751874073e-05 +SPY,20131015 00:00,1705200,1711500,1694700,1697200,135988023,6.0029942805432816e-05 +QQQ,20131015 00:00,797300,801100,793800,794800,34625853,6.0029942805432816e-05 +SPY,20131016 00:00,1707200,1721600,1706400,1720500,130275941,6.054961047592377e-05 +QQQ,20131016 00:00,798500,804200,797900,803700,43259878,6.054961047592377e-05 +SPY,20131017 00:00,1713800,1733200,1713400,1732700,109465354,6.0478021701738516e-05 +QQQ,20131017 00:00,800200,808700,799500,808100,29348023,6.0478021701738516e-05 +SPY,20131018 00:00,1738500,1745100,1735100,1743600,123495408,6.0262058147109435e-05 +QQQ,20131018 00:00,815800,821800,813500,821500,32161620,6.0262058147109435e-05 +SPY,20131021 00:00,1744700,1747500,1740100,1744500,84701818,6.0280754561935984e-05 +QQQ,20131021 00:00,823400,825400,820700,823000,29997232,6.0280754561935984e-05 +SPY,20131022 00:00,1749400,1759300,1746600,1753500,112475864,6.0153124861800774e-05 +QQQ,20131022 00:00,826500,829000,819300,824100,42243734,6.0153124861800774e-05 +SPY,20131023 00:00,1748000,1748900,1739700,1746200,93453544,5.8414825753065365e-05 +QQQ,20131023 00:00,820500,822000,815500,819500,29817224,5.8414825753065365e-05 +SPY,20131024 00:00,1748900,1753700,1745100,1752400,62520580,5.8453629649931435e-05 +QQQ,20131024 00:00,820000,824800,818800,823100,20213140,5.8453629649931435e-05 +SPY,20131025 00:00,1755100,1759600,1751700,1759300,75063201,5.789082356615018e-05 +QQQ,20131025 00:00,830800,832800,825000,828800,31793241,5.789082356615018e-05 +SPY,20131028 00:00,1759000,1764700,1757000,1762400,68672145,5.782904195006973e-05 +QQQ,20131028 00:00,829100,830500,825500,829600,22528984,5.782904195006973e-05 +SPY,20131029 00:00,1766400,1772200,1763800,1772200,69837141,5.7835592259801306e-05 +QQQ,20131029 00:00,832000,832600,827000,830600,33858025,5.7835592259801306e-05 +SPY,20131030 00:00,1773700,1775100,1756600,1763300,119958891,5.789887320882386e-05 +QQQ,20131030 00:00,833500,834900,825800,829600,30270108,5.789887320882386e-05 +SPY,20131031 00:00,1761800,1768900,1755300,1757300,113070805,5.789137230323927e-05 +QQQ,20131031 00:00,827700,833000,824800,827900,28059609,5.789137230323927e-05 +SPY,20131101 00:00,1760500,1766000,1752200,1761400,111765973,5.7266813132488985e-05 +QQQ,20131101 00:00,830700,831600,824000,827900,29477014,5.7266813132488985e-05 +SPY,20131104 00:00,1767100,1769000,1761500,1768600,71643685,5.675525656779288e-05 +QQQ,20131104 00:00,830600,830700,826400,829300,15624610,5.675525656779288e-05 +SPY,20131105 00:00,1761600,1767500,1755700,1762800,74666522,5.67111722244029e-05 +QQQ,20131105 00:00,826100,832200,823700,830500,25760387,5.67111722244029e-05 +SPY,20131106 00:00,1770600,1775000,1765400,1771800,71899592,5.664536823981597e-05 +QQQ,20131106 00:00,833700,834000,827300,829900,24499794,5.664536823981597e-05 +SPY,20131107 00:00,1775200,1776400,1747600,1749700,130922217,5.541380938199504e-05 +QQQ,20131107 00:00,830100,831300,813700,814300,48939052,5.541380938199504e-05 +SPY,20131108 00:00,1748500,1773100,1748500,1773100,112039875,5.5102026062452186e-05 +QQQ,20131108 00:00,817400,825500,815100,825500,28585128,5.5102026062452186e-05 +SPY,20131111 00:00,1771400,1775300,1769100,1772900,53145668,5.5107125050804536e-05 +QQQ,20131111 00:00,824200,826400,821400,824300,22542990,5.5107125050804536e-05 +SPY,20131112 00:00,1769400,1773600,1763700,1769800,73699767,5.510215911027831e-05 +QQQ,20131112 00:00,821600,826600,821200,825400,18085279,5.510215911027831e-05 +SPY,20131113 00:00,1761100,1784000,1760900,1783200,84500144,5.5262040547316956e-05 +QQQ,20131113 00:00,820000,835500,820000,835500,27274000,5.5262040547316956e-05 +SPY,20131114 00:00,1785300,1794200,1782500,1793200,92770485,5.453624832899524e-05 +QQQ,20131114 00:00,833200,838600,831500,837400,30069422,5.453624832899524e-05 +SPY,20131115 00:00,1795400,1801200,1793300,1801200,88157314,5.449421547782051e-05 +QQQ,20131115 00:00,838200,839600,836100,839600,19385521,5.449421547782051e-05 +SPY,20131118 00:00,1803900,1805000,1790200,1795000,83432360,5.4656019739917796e-05 +QQQ,20131118 00:00,839400,841000,829800,831600,29550469,5.4656019739917796e-05 +SPY,20131119 00:00,1793400,1798700,1787200,1790300,85703243,5.290035084989677e-05 +QQQ,20131119 00:00,830900,834900,827600,829000,24472996,5.290035084989677e-05 +SPY,20131120 00:00,1794100,1799300,1779800,1785100,108921426,5.295451531679213e-05 +QQQ,20131120 00:00,831200,834300,824600,827000,30334723,5.295451531679213e-05 +SPY,20131121 00:00,1789800,1800500,1788600,1799700,70890848,5.321592068290254e-05 +QQQ,20131121 00:00,830500,836100,829800,835500,25424452,5.321592068290254e-05 +SPY,20131122 00:00,1799600,1808300,1797700,1808100,66142514,5.259431962037627e-05 +QQQ,20131122 00:00,836800,840200,836200,840000,23816428,5.259431962037627e-05 +SPY,20131125 00:00,1811400,1811700,1803700,1807100,66442019,5.261985153989762e-05 +QQQ,20131125 00:00,842900,843800,839800,841900,21042353,5.261985153989762e-05 +SPY,20131126 00:00,1807500,1812200,1804100,1806400,72012227,5.246682958818137e-05 +QQQ,20131126 00:00,842100,848400,840300,847000,24328260,5.246682958818137e-05 +SPY,20131127 00:00,1808800,1812400,1806500,1811200,51121354,5.229506297015225e-05 +QQQ,20131127 00:00,848000,852400,847300,852200,19823184,5.229506297015225e-05 +SPY,20131129 00:00,1813400,1817500,1808000,1809300,41250857,5.2181054488592756e-05 +QQQ,20131129 00:00,855600,858400,854800,857300,14900285,5.2181054488592756e-05 +SPY,20131202 00:00,1811300,1814300,1802500,1805400,76545928,5.221250735367119e-05 +QQQ,20131202 00:00,858200,859600,853500,854800,24364586,5.221250735367119e-05 +SPY,20131203 00:00,1799500,1803900,1791700,1798500,92867713,5.2204133981933075e-05 +QQQ,20131203 00:00,854000,856400,850900,854000,30805607,5.2204133981933075e-05 +SPY,20131204 00:00,1792100,1804800,1783500,1796700,107731159,5.217104818144302e-05 +QQQ,20131204 00:00,850500,857700,847800,854700,35176633,5.217104818144302e-05 +SPY,20131205 00:00,1794200,1797400,1787800,1790100,88220890,5.2256555483801015e-05 +QQQ,20131205 00:00,855600,856600,851700,853800,37493947,5.2256555483801015e-05 +SPY,20131206 00:00,1807300,1811100,1801600,1809500,99444907,5.246266896356081e-05 +QQQ,20131206 00:00,861000,861800,855900,860000,32744675,5.246266896356081e-05 +SPY,20131209 00:00,1814800,1816700,1811600,1814000,60060446,5.254548347463655e-05 +QQQ,20131209 00:00,863500,865300,862000,863500,20696434,5.254548347463655e-05 +SPY,20131210 00:00,1809600,1813600,1806400,1807500,62301715,5.258019206549853e-05 +QQQ,20131210 00:00,862100,864500,861200,862900,24381167,5.258019206549853e-05 +SPY,20131211 00:00,1808100,1808500,1785000,1787200,111930458,5.300072679209616e-05 +QQQ,20131211 00:00,862800,864000,850600,851800,34470799,5.300072679209616e-05 +SPY,20131212 00:00,1786400,1788600,1777600,1781300,94786627,5.306065547414935e-05 +QQQ,20131212 00:00,852100,854200,849000,849600,29962653,5.306065547414935e-05 +SPY,20131213 00:00,1784700,1786600,1777700,1781100,83056349,5.2827866852504485e-05 +QQQ,20131213 00:00,853600,854000,847100,848500,31226220,5.2827866852504485e-05 +SPY,20131216 00:00,1789200,1798100,1789000,1792200,74941906,5.271953691080919e-05 +QQQ,20131216 00:00,852700,858100,852100,853300,20847465,5.271953691080919e-05 +SPY,20131217 00:00,1793700,1794100,1782500,1785400,75948317,5.2253502063782634e-05 +QQQ,20131217 00:00,853400,855200,849900,851500,23291934,5.2253502063782634e-05 +SPY,20131218 00:00,1789400,1817300,1773300,1817000,207030899,5.2361732717014445e-05 +QQQ,20131218 00:00,852500,862200,840500,861400,64031984,5.2361732717014445e-05 +SPY,20131219 00:00,1812000,1817000,1807200,1815000,112655750,5.218267732574696e-05 +QQQ,20131219 00:00,860000,860100,855200,859000,42197117,5.218267732574696e-05 +SPY,20131220 00:00,1806700,1819900,1806600,1815800,133819141,5.2187646518704126e-05 +QQQ,20131220 00:00,857900,866800,857300,864700,34200758,5.2187646518704126e-05 +SPY,20131223 00:00,1824100,1826400,1820700,1825400,66321111,5.114363913353175e-05 +QQQ,20131223 00:00,872100,874100,869500,874100,24476170,5.114363913353175e-05 +SPY,20131224 00:00,1825700,1830000,1825300,1829300,38250253,5.109569187717384e-05 +QQQ,20131224 00:00,874300,875100,872700,874500,12736703,5.109569187717384e-05 +SPY,20131226 00:00,1833700,1839600,1833300,1838400,53110222,5.089680851641716e-05 +QQQ,20131226 00:00,876100,878100,874400,877400,13877683,5.089680851641716e-05 +SPY,20131227 00:00,1841600,1841800,1836600,1838400,53771801,5.089613013837023e-05 +QQQ,20131227 00:00,878500,879000,874200,875200,14785346,5.089613013837023e-05 +SPY,20131230 00:00,1839200,1840200,1835800,1838200,47180243,5.033489968579243e-05 +QQQ,20131230 00:00,873900,875100,871400,873900,18024432,5.033489968579243e-05 +SPY,20131231 00:00,1841200,1846800,1839300,1846700,68550651,4.901430396363705e-05 +QQQ,20131231 00:00,875500,879600,875200,879600,23007605,4.901430396363705e-05 +SPY,20140102 00:00,1839100,1840600,1824800,1829200,108167846,4.636929793793845e-05 +QQQ,20140102 00:00,875600,875800,870200,872700,27825620,4.636929793793845e-05 +SPY,20140103 00:00,1832400,1836000,1826300,1828800,71382847,4.6316599042682844e-05 +QQQ,20140103 00:00,872700,873500,866200,866400,29271884,4.6316599042682844e-05 +SPY,20140106 00:00,1835200,1835600,1820800,1823600,89901576,4.6462233292553e-05 +QQQ,20140106 00:00,866600,867600,860000,863200,27757464,4.6462233292553e-05 +SPY,20140107 00:00,1831200,1837900,1829600,1834300,75867995,4.661130254204214e-05 +QQQ,20140107 00:00,867200,872500,865600,870900,25858017,4.661130254204214e-05 +SPY,20140108 00:00,1834600,1838300,1829000,1835200,86342393,4.6567069787129204e-05 +QQQ,20140108 00:00,871400,875500,869500,873100,23942763,4.6567069787129204e-05 +SPY,20140109 00:00,1841000,1841400,1828000,1836400,79126576,4.6553985601835124e-05 +QQQ,20140109 00:00,876300,876400,867200,870100,22253847,4.6553985601835124e-05 +SPY,20140110 00:00,1839600,1842100,1830100,1841400,77972574,4.64433915253262e-05 +QQQ,20140110 00:00,872300,874000,865800,873000,35086007,4.64433915253262e-05 +SPY,20140113 00:00,1836900,1841800,1813400,1816600,122813410,4.7368676650687485e-05 +QQQ,20140113 00:00,871700,874800,856800,859800,40329318,4.7368676650687485e-05 +SPY,20140114 00:00,1822700,1837700,1819500,1837200,85261773,4.8097866874423146e-05 +QQQ,20140114 00:00,863000,877200,863000,876500,35990060,4.8097866874423146e-05 +SPY,20140115 00:00,1841000,1849400,1840100,1846900,83647160,4.8216878445809644e-05 +QQQ,20140115 00:00,880300,885400,879400,883700,34433362,4.8216878445809644e-05 +SPY,20140116 00:00,1843000,1845000,1838400,1843900,61950237,4.8239651738433373e-05 +QQQ,20140116 00:00,883000,885100,881600,883800,27909058,4.8239651738433373e-05 +SPY,20140117 00:00,1841000,1844500,1833300,1836500,89214819,4.8300651496457404e-05 +QQQ,20140117 00:00,881100,883800,876700,878500,30782579,4.8300651496457404e-05 +SPY,20140121 00:00,1847200,1847700,1830500,1841800,77312943,4.8375999716015615e-05 +QQQ,20140121 00:00,884400,885900,878100,885500,24876851,4.8375999716015615e-05 +SPY,20140122 00:00,1845100,1845700,1839100,1843000,53915460,4.836572111795742e-05 +QQQ,20140122 00:00,887800,890000,885200,888100,25718497,4.836572111795742e-05 +SPY,20140123 00:00,1833500,1834000,1818300,1827900,115258815,4.852471670819784e-05 +QQQ,20140123 00:00,885100,885200,878600,884700,29992632,4.852471670819784e-05 +SPY,20140124 00:00,1815700,1816500,1788300,1788300,175573279,5.037448882009034e-05 +QQQ,20140124 00:00,880500,881800,867100,867100,61735444,5.037448882009034e-05 +SPY,20140127 00:00,1790500,1795100,1771300,1780100,160064102,5.0515877531334714e-05 +QQQ,20140127 00:00,867400,868900,852500,859000,59324167,5.0515877531334714e-05 +SPY,20140128 00:00,1782500,1793000,1781300,1791000,90568738,5.0488374305724485e-05 +QQQ,20140128 00:00,855000,859400,853100,858400,42937856,5.0488374305724485e-05 +SPY,20140129 00:00,1776200,1785500,1768800,1772800,179260502,5.1000468441984055e-05 +QQQ,20140129 00:00,851100,857400,847600,849300,47807341,5.1000468441984055e-05 +SPY,20140130 00:00,1788800,1798100,1782600,1792300,96632848,5.16569255856853e-05 +QQQ,20140130 00:00,859700,867900,858800,864900,59035956,5.16569255856853e-05 +SPY,20140131 00:00,1770200,1792900,1769200,1781800,159765786,5.171228942310651e-05 +QQQ,20140131 00:00,855400,866800,854500,862700,39874762,5.171228942310651e-05 +SPY,20140203 00:00,1779400,1783700,1738300,1741500,222544720,5.351448032046346e-05 +QQQ,20140203 00:00,861100,865000,840700,842900,60101399,5.351448032046346e-05 +SPY,20140204 00:00,1749400,1758400,1743400,1753600,144004983,5.2782424535150236e-05 +QQQ,20140204 00:00,847200,852500,844600,849100,35682519,5.2782424535150236e-05 +SPY,20140205 00:00,1747800,1755600,1737100,1751700,146216400,5.2261297981423776e-05 +QQQ,20140205 00:00,846300,849900,837400,846900,38952842,5.2261297981423776e-05 +SPY,20140206 00:00,1756100,1774800,1755800,1774800,110630862,5.2850971659461946e-05 +QQQ,20140206 00:00,849400,858800,849200,857700,29877943,5.2850971659461946e-05 +SPY,20140207 00:00,1782800,1798700,1777400,1797400,132131649,5.3661681766398477e-05 +QQQ,20140207 00:00,862500,873500,860000,873100,35785768,5.3661681766398477e-05 +SPY,20140210 00:00,1797100,1800700,1792100,1800100,72626938,5.349860587347533e-05 +QQQ,20140210 00:00,872700,878300,872100,878100,27965402,5.349860587347533e-05 +SPY,20140211 00:00,1802300,1824400,1800700,1819800,103111329,5.390654957310243e-05 +QQQ,20140211 00:00,879900,889700,878900,887900,36673442,5.390654957310243e-05 +SPY,20140212 00:00,1822600,1828300,1817100,1821600,87336980,5.3923419303250465e-05 +QQQ,20140212 00:00,889800,891600,887100,889700,30459185,5.3923419303250465e-05 +SPY,20140213 00:00,1808700,1832000,1808300,1830000,86663567,5.4017931202171906e-05 +QQQ,20140213 00:00,883200,897000,883000,896300,36046644,5.4017931202171906e-05 +SPY,20140214 00:00,1829000,1843600,1826800,1840100,79238964,5.4036061361673374e-05 +QQQ,20140214 00:00,896000,900100,893300,898100,31687128,5.4036061361673374e-05 +SPY,20140218 00:00,1842000,1844900,1836500,1842600,68488244,5.4016861340726614e-05 +QQQ,20140218 00:00,899600,904100,897400,902500,26876524,5.4016861340726614e-05 +SPY,20140219 00:00,1837800,1849500,1828700,1830500,107451814,5.4105341788639076e-05 +QQQ,20140219 00:00,900800,902900,894500,896400,34832280,5.4105341788639076e-05 +SPY,20140220 00:00,1833000,1845200,1826200,1841000,89178782,5.329533028053562e-05 +QQQ,20140220 00:00,896900,902200,893100,900500,37174480,5.329533028053562e-05 +SPY,20140221 00:00,1844200,1848900,1838000,1839600,100978693,5.3002284543700923e-05 +QQQ,20140221 00:00,903400,904700,898300,899300,27496934,5.3002284543700923e-05 +SPY,20140224 00:00,1843000,1861500,1842100,1849100,93723541,5.275120227361322e-05 +QQQ,20140224 00:00,901400,908200,900400,904300,30101716,5.275120227361322e-05 +SPY,20140225 00:00,1850300,1855800,1842300,1848400,97120950,5.167911931731908e-05 +QQQ,20140225 00:00,905400,907200,900200,903100,24950263,5.167911931731908e-05 +SPY,20140226 00:00,1851000,1856000,1843300,1848500,84192425,5.162666906440644e-05 +QQQ,20140226 00:00,905500,908400,898800,902300,37952454,5.162666906440644e-05 +SPY,20140227 00:00,1845800,1858700,1843800,1858700,80283904,5.1233042876696716e-05 +QQQ,20140227 00:00,898800,905300,897300,904400,26390229,5.1233042876696716e-05 +SPY,20140228 00:00,1857800,1871500,1850500,1863000,127758775,5.117760895202686e-05 +QQQ,20140228 00:00,904200,909600,895500,903400,41851761,5.117760895202686e-05 +SPY,20140303 00:00,1846500,1854500,1837500,1849800,141848312,5.140960014318062e-05 +QQQ,20140303 00:00,894900,899000,888700,896800,35467056,5.140960014318062e-05 +SPY,20140304 00:00,1868100,1879800,1867500,1875800,149682598,5.196473667808801e-05 +QQQ,20140304 00:00,906500,909800,905600,908300,30906558,5.196473667808801e-05 +SPY,20140305 00:00,1877500,1880700,1874500,1876100,72001348,5.152016263059333e-05 +QQQ,20140305 00:00,909600,912200,907700,910600,24910323,5.152016263059333e-05 +SPY,20140306 00:00,1882200,1886100,1878900,1882100,71357422,5.1509136638311117e-05 +QQQ,20140306 00:00,912700,913300,906500,909800,22567197,5.1509136638311117e-05 +SPY,20140307 00:00,1889600,1889600,1874300,1882600,92692794,5.151379326858427e-05 +QQQ,20140307 00:00,913200,913600,900700,905400,28582649,5.151379326858427e-05 +SPY,20140310 00:00,1879900,1882300,1870800,1882100,66969564,5.151853480019588e-05 +QQQ,20140310 00:00,904800,906600,900300,906100,17206260,5.151853480019588e-05 +SPY,20140311 00:00,1884800,1887000,1868000,1872300,88435777,5.16222808800647e-05 +QQQ,20140311 00:00,908300,910500,899500,902200,23484073,5.16222808800647e-05 +SPY,20140312 00:00,1863200,1873500,1859000,1872800,93180936,5.1555902453352495e-05 +QQQ,20140312 00:00,898100,906100,894800,905500,26867060,5.1555902453352495e-05 +SPY,20140313 00:00,1878800,1879900,1846600,1851800,136495375,5.2276047356504574e-05 +QQQ,20140313 00:00,909000,909300,888700,892900,45554081,5.2276047356504574e-05 +SPY,20140314 00:00,1848000,1857900,1844400,1846600,133250737,5.234198444415475e-05 +QQQ,20140314 00:00,889900,893800,886300,886500,35799615,5.234198444415475e-05 +SPY,20140317 00:00,1856200,1867700,1855200,1863300,86212672,5.24528667643445e-05 +QQQ,20140317 00:00,892400,899100,891900,894500,24699347,5.24528667643445e-05 +SPY,20140318 00:00,1867400,1879100,1865100,1876600,88937577,5.264423233898454e-05 +QQQ,20140318 00:00,895600,906300,895300,905300,28629543,5.264423233898454e-05 +SPY,20140319 00:00,1877100,1879400,1854800,1866600,142453779,5.276254514598535e-05 +QQQ,20140319 00:00,905600,906600,894500,900600,36461083,5.276254514598535e-05 +SPY,20140320 00:00,1862500,1878900,1859200,1877500,100140419,5.266787776573002e-05 +QQQ,20140320 00:00,897600,905600,895800,902900,29064586,5.266787776573002e-05 +SPY,20140321 00:00,1876900,1881700,1860300,1861900,137887629,5.279064902072433e-05 +QQQ,20140321 00:00,906000,906500,888300,890000,55655583,5.279064902072433e-05 +SPY,20140324 00:00,1868400,1870700,1846200,1854000,110550534,5.273056179534287e-05 +QQQ,20140324 00:00,893200,893900,874100,882200,71913746,5.273056179534287e-05 +SPY,20140325 00:00,1864000,1869400,1852700,1863100,95520395,5.268552953956107e-05 +QQQ,20140325 00:00,886800,892500,877800,885100,39905615,5.268552953956107e-05 +SPY,20140326 00:00,1870000,1873400,1849500,1849700,102575862,5.300775438811086e-05 +QQQ,20140326 00:00,889500,891500,873600,873700,37871980,5.300775438811086e-05 +SPY,20140327 00:00,1847700,1853400,1839100,1845800,127599205,5.3081909853731543e-05 +QQQ,20140327 00:00,872500,876400,864000,868900,61956289,5.3081909853731543e-05 +SPY,20140328 00:00,1851400,1864200,1850000,1855000,88551960,5.308928940739158e-05 +QQQ,20140328 00:00,871600,880100,868100,870500,38160798,5.308928940739158e-05 +SPY,20140331 00:00,1866600,1873000,1864700,1870400,83948640,5.3156377242563994e-05 +QQQ,20140331 00:00,877300,882600,876200,876800,29215241,5.3156377242563994e-05 +SPY,20140401 00:00,1876500,1883600,1874500,1882700,77846445,5.3423284450021934e-05 +QQQ,20140401 00:00,880800,892700,880800,892100,32216185,5.3423284450021934e-05 +SPY,20140402 00:00,1885000,1891300,1881400,1888600,70718887,5.297301066542337e-05 +QQQ,20140402 00:00,895800,896800,890400,894400,28852842,5.297301066542337e-05 +SPY,20140403 00:00,1891300,1892100,1880600,1886000,69874589,5.3062726812212446e-05 +QQQ,20140403 00:00,895300,896800,882200,887300,28025987,5.3062726812212446e-05 +SPY,20140404 00:00,1896400,1897000,1861000,1863800,147905014,5.4251003855733617e-05 +QQQ,20140404 00:00,893200,894100,861400,863700,105004938,5.4251003855733617e-05 +SPY,20140407 00:00,1859000,1862600,1839600,1843400,126552113,5.463106620886535e-05 +QQQ,20140407 00:00,858300,866200,849500,855500,76128955,5.463106620886535e-05 +SPY,20140408 00:00,1841800,1854000,1835900,1851300,101526439,5.468596162341218e-05 +QQQ,20140408 00:00,856500,864500,853500,863400,49757280,5.468596162341218e-05 +SPY,20140409 00:00,1856100,1871500,1850800,1871500,90817021,5.4462131332174344e-05 +QQQ,20140409 00:00,866600,878700,864300,878200,42483078,5.4462131332174344e-05 +SPY,20140410 00:00,1870700,1871700,1829400,1831700,150960665,5.72461737163203e-05 +QQQ,20140410 00:00,878800,878800,848600,851100,67439802,5.72461737163203e-05 +SPY,20140411 00:00,1821600,1834200,1813100,1814800,147808432,5.771949207811946e-05 +QQQ,20140411 00:00,843300,854400,839100,841100,83684201,5.771949207811946e-05 +SPY,20140414 00:00,1829200,1833700,1814500,1829400,118011184,5.600131119697334e-05 +QQQ,20140414 00:00,848600,852200,839900,847700,44542889,5.600131119697334e-05 +SPY,20140415 00:00,1833300,1843300,1815200,1842400,146271143,5.5374682543130964e-05 +QQQ,20140415 00:00,850800,855400,832800,850600,77906223,5.5374682543130964e-05 +SPY,20140416 00:00,1854900,1861400,1846500,1861400,89620166,5.454421877838327e-05 +QQQ,20140416 00:00,857900,861800,850900,861800,39759150,5.454421877838327e-05 +SPY,20140417 00:00,1858700,1869100,1855600,1863900,89232723,5.4147259536130206e-05 +QQQ,20140417 00:00,858500,866300,856400,862000,51035550,5.4147259536130206e-05 +SPY,20140421 00:00,1864500,1871000,1862100,1870400,53096311,5.3801997322258234e-05 +QQQ,20140421 00:00,864000,868400,860000,868400,24617562,5.3801997322258234e-05 +SPY,20140422 00:00,1872400,1884000,1871300,1878900,76101182,5.376359701492965e-05 +QQQ,20140422 00:00,871400,877500,869900,875300,28569180,5.376359701492965e-05 +SPY,20140423 00:00,1878000,1879200,1873000,1874400,64174505,5.356554865476679e-05 +QQQ,20140423 00:00,875300,875600,867100,867600,28084736,5.356554865476679e-05 +SPY,20140424 00:00,1883900,1883900,1869300,1878100,80287334,5.3608860990702324e-05 +QQQ,20140424 00:00,881900,882100,866600,875900,45728630,5.3608860990702324e-05 +SPY,20140425 00:00,1872000,1873300,1858700,1862900,90739070,5.413540574837351e-05 +QQQ,20140425 00:00,870700,871700,859800,861900,41998612,5.413540574837351e-05 +SPY,20140428 00:00,1870800,1876900,1849700,1868800,120930399,5.4112501148148316e-05 +QQQ,20140428 00:00,866000,871100,851100,864700,56034542,5.4112501148148316e-05 +SPY,20140429 00:00,1874800,1880400,1870800,1877000,71643542,5.4022252544695516e-05 +QQQ,20140429 00:00,867300,873200,863200,871600,35440778,5.4022252544695516e-05 +SPY,20140430 00:00,1874600,1885000,1871800,1884300,85384290,5.4000381942339794e-05 +QQQ,20140430 00:00,867600,874800,865400,873900,36591919,5.4000381942339794e-05 +SPY,20140501 00:00,1882500,1888400,1877300,1882900,82539046,5.3779234421828826e-05 +QQQ,20140501 00:00,875300,881500,873100,876500,34723173,5.3779234421828826e-05 +SPY,20140502 00:00,1883300,1891400,1877900,1880600,80493271,5.341784091590331e-05 +QQQ,20140502 00:00,879500,881100,872800,874900,36675211,5.341784091590331e-05 +SPY,20140505 00:00,1871600,1885500,1866300,1884400,62112050,5.303356379573241e-05 +QQQ,20140505 00:00,869700,879700,867600,879500,26314378,5.303356379573241e-05 +SPY,20140506 00:00,1880300,1881300,1867400,1868100,70612290,5.351387617742415e-05 +QQQ,20140506 00:00,878100,878600,867700,868100,30419125,5.351387617742415e-05 +SPY,20140507 00:00,1874100,1879700,1860200,1878900,95472189,5.346820128141162e-05 +QQQ,20140507 00:00,869900,870800,855300,865600,53682765,5.346820128141162e-05 +SPY,20140508 00:00,1877100,1890400,1870800,1877000,87869466,5.3412863277608696e-05 +QQQ,20140508 00:00,862500,875300,860500,864800,44446172,5.3412863277608696e-05 +SPY,20140509 00:00,1877100,1880400,1868300,1880000,74953765,5.3405629205107295e-05 +QQQ,20140509 00:00,864300,868600,858500,868000,33332319,5.3405629205107295e-05 +SPY,20140512 00:00,1887700,1898800,1887500,1898100,71834301,5.392608568165699e-05 +QQQ,20140512 00:00,873200,882600,872400,882300,37120129,5.392608568165699e-05 +SPY,20140513 00:00,1900000,1904200,1897800,1899600,60592895,5.3925702962650176e-05 +QQQ,20140513 00:00,883100,886100,881200,882900,26042141,5.3925702962650176e-05 +SPY,20140514 00:00,1898200,1898800,1887900,1890400,64159354,5.3877433655446485e-05 +QQQ,20140514 00:00,880200,883500,876200,878300,23363797,5.3877433655446485e-05 +SPY,20140515 00:00,1886800,1887200,1864800,1874000,141261751,5.416302890194166e-05 +QQQ,20140515 00:00,878100,879600,865800,871500,55388370,5.416302890194166e-05 +SPY,20140516 00:00,1875000,1881300,1867200,1881100,85281290,5.420002884105198e-05 +QQQ,20140516 00:00,872400,877600,866400,877000,62860032,5.420002884105198e-05 +SPY,20140519 00:00,1877000,1888900,1875200,1887000,51306979,5.393936386807927e-05 +QQQ,20140519 00:00,874500,884500,873000,883200,28226365,5.393936386807927e-05 +SPY,20140520 00:00,1886700,1886700,1870700,1875500,94515421,5.404900864763344e-05 +QQQ,20140520 00:00,882800,886000,876400,880000,32121236,5.404900864763344e-05 +SPY,20140521 00:00,1881000,1892200,1880600,1891300,77745877,5.432678856338445e-05 +QQQ,20140521 00:00,881300,888900,881100,888400,32678326,5.432678856338445e-05 +SPY,20140522 00:00,1892000,1899800,1888600,1896000,57302105,5.4076658167389284e-05 +QQQ,20140522 00:00,889400,894800,888000,892300,29916293,5.4076658167389284e-05 +SPY,20140523 00:00,1897600,1904800,1896800,1903800,50524951,5.412012003056058e-05 +QQQ,20140523 00:00,893200,899000,891300,898800,20407426,5.412012003056058e-05 +SPY,20140527 00:00,1910600,1915800,1909500,1915700,56783233,5.4380415126230284e-05 +QQQ,20140527 00:00,902800,910200,902000,910200,25720519,5.4380415126230284e-05 +SPY,20140528 00:00,1915500,1918200,1910600,1913800,60654048,5.4290635296075245e-05 +QQQ,20140528 00:00,909700,911000,906500,907200,28293408,5.4290635296075245e-05 +SPY,20140529 00:00,1918500,1924000,1913400,1924000,55471647,5.423203255278565e-05 +QQQ,20140529 00:00,910400,913100,908600,913000,25483306,5.423203255278565e-05 +SPY,20140530 00:00,1922100,1928000,1920400,1926300,63232048,5.416987363924012e-05 +QQQ,20140530 00:00,913200,914500,908300,913100,28188860,5.416987363924012e-05 +SPY,20140602 00:00,1929800,1929900,1919700,1929100,55322323,5.342376664091107e-05 +QQQ,20140602 00:00,914200,914400,906400,912200,25887041,5.342376664091107e-05 +SPY,20140603 00:00,1924300,1929000,1922600,1928100,52564603,5.33841574838581e-05 +QQQ,20140603 00:00,909200,913300,908000,911800,18172523,5.33841574838581e-05 +SPY,20140604 00:00,1924800,1933000,1922700,1931900,48936106,5.3264337407323384e-05 +QQQ,20140604 00:00,909500,916700,908100,915200,18691262,5.3264337407323384e-05 +SPY,20140605 00:00,1934300,1946500,1927000,1944600,76105702,5.25692917043664e-05 +QQQ,20140605 00:00,916000,924600,912900,922900,33347504,5.25692917043664e-05 +SPY,20140606 00:00,1948800,1954300,1947800,1954100,61256519,5.253377566986776e-05 +QQQ,20140606 00:00,926300,928200,924500,928200,20317781,5.253377566986776e-05 +SPY,20140609 00:00,1953600,1960500,1951700,1955700,58266471,5.185375777928658e-05 +QQQ,20140609 00:00,928400,929800,925000,927500,22411660,5.185375777928658e-05 +SPY,20140610 00:00,1953600,1956000,1949200,1955900,50668363,5.184982491832058e-05 +QQQ,20140610 00:00,926700,929600,925600,929100,19209256,5.184982491832058e-05 +SPY,20140611 00:00,1948700,1951100,1944800,1949200,55834216,5.140039819601598e-05 +QQQ,20140611 00:00,925900,930200,925000,928900,19775586,5.140039819601598e-05 +SPY,20140612 00:00,1946800,1948000,1931100,1935400,87647599,5.12461744579389e-05 +QQQ,20140612 00:00,926900,927900,917300,920500,28209727,5.12461744579389e-05 +SPY,20140613 00:00,1938900,1943200,1933000,1941600,64621214,5.061288504723653e-05 +QQQ,20140613 00:00,924500,925500,919200,923200,36056588,5.061288504723653e-05 +SPY,20140616 00:00,1938800,1947000,1936600,1942900,67831890,5.041370203936909e-05 +QQQ,20140616 00:00,921600,926700,919600,924000,22562853,5.041370203936909e-05 +SPY,20140617 00:00,1940000,1949700,1938100,1948300,69206159,5.015211267691792e-05 +QQQ,20140617 00:00,923300,927000,921800,924500,19276742,5.015211267691792e-05 +SPY,20140618 00:00,1948300,1963700,1944000,1962600,93135373,5.0093566403091105e-05 +QQQ,20140618 00:00,925400,931000,919800,929700,33010865,5.0093566403091105e-05 +SPY,20140619 00:00,1964600,1966000,1958000,1964800,74988020,4.944371412295096e-05 +QQQ,20140619 00:00,931100,931700,924900,929100,31932813,4.944371412295096e-05 +SPY,20140620 00:00,1960000,1960600,1957100,1959400,77778094,4.6685693978573125e-05 +QQQ,20140620 00:00,927000,928700,925300,927700,23569535,4.6685693978573125e-05 +SPY,20140623 00:00,1960000,1960500,1955200,1958800,50217325,4.660486285258204e-05 +QQQ,20140623 00:00,927600,928200,925100,927900,18030134,4.660486285258204e-05 +SPY,20140624 00:00,1955200,1965000,1944800,1947100,88391670,4.612209714346445e-05 +QQQ,20140624 00:00,927800,935700,924300,927000,30711382,4.612209714346445e-05 +SPY,20140625 00:00,1942800,1957800,1942500,1955800,72492534,4.596432970063003e-05 +QQQ,20140625 00:00,924900,934500,924800,932900,27844900,4.596432970063003e-05 +SPY,20140626 00:00,1956000,1956300,1941300,1954500,69751995,4.569009842811742e-05 +QQQ,20140626 00:00,933500,933600,926200,933400,21254573,4.569009842811742e-05 +SPY,20140627 00:00,1950100,1958800,1948900,1957900,55840263,4.563761677998945e-05 +QQQ,20140627 00:00,932200,937600,931900,937400,20826102,4.563761677998945e-05 +SPY,20140630 00:00,1957100,1961700,1955300,1957200,59593898,4.561695026394078e-05 +QQQ,20140630 00:00,937300,941400,936700,939100,18441080,4.561695026394078e-05 +SPY,20140701 00:00,1962100,1976300,1961300,1970600,81724640,4.565980066512591e-05 +QQQ,20140701 00:00,942400,951900,942000,949400,30211114,4.565980066512591e-05 +SPY,20140702 00:00,1970300,1974800,1969600,1972200,46267119,4.5649245785752275e-05 +QQQ,20140702 00:00,950000,952400,949100,951000,16607753,4.5649245785752275e-05 +SPY,20140703 00:00,1978100,1982900,1976500,1982500,39315126,4.5726633195384135e-05 +QQQ,20140703 00:00,954100,956800,951600,956500,13034409,4.5726633195384135e-05 +SPY,20140707 00:00,1978400,1979800,1972200,1975100,55946614,4.5555523052688245e-05 +QQQ,20140707 00:00,955900,957100,952300,954100,21024203,4.5555523052688245e-05 +SPY,20140708 00:00,1971200,1972200,1957600,1962800,90890519,4.5909911391292036e-05 +QQQ,20140708 00:00,952300,953000,938700,942900,38108601,4.5909911391292036e-05 +SPY,20140709 00:00,1967500,1973000,1963100,1971200,65783629,4.587161439549366e-05 +QQQ,20140709 00:00,945100,950600,942500,949600,26433732,4.587161439549366e-05 +SPY,20140710 00:00,1952400,1968600,1950600,1963500,88163470,4.5947843591305716e-05 +QQQ,20140710 00:00,937400,950500,936300,946600,36106183,4.5947843591305716e-05 +SPY,20140711 00:00,1962400,1967500,1957900,1966000,55246470,4.492306582608805e-05 +QQQ,20140711 00:00,949000,952700,946200,952700,18401479,4.492306582608805e-05 +SPY,20140714 00:00,1976300,1978600,1974400,1976000,51736248,4.501767940892236e-05 +QQQ,20140714 00:00,957000,960500,955400,958400,17520943,4.501767940892236e-05 +SPY,20140715 00:00,1977300,1981000,1963700,1972300,100356883,4.504033991728198e-05 +QQQ,20140715 00:00,959900,961300,948300,955100,35339512,4.504033991728198e-05 +SPY,20140716 00:00,1981300,1982600,1974200,1979600,66890342,4.5028643348603594e-05 +QQQ,20140716 00:00,962000,963000,957900,958900,20026624,4.5028643348603594e-05 +SPY,20140717 00:00,1973200,1981000,1954300,1957100,124560916,4.5699186483830044e-05 +QQQ,20140717 00:00,956300,959700,943200,946100,39788499,4.5699186483830044e-05 +SPY,20140718 00:00,1963800,1979100,1962400,1977400,111817075,4.6349653370207526e-05 +QQQ,20140718 00:00,951100,961700,950000,961200,34080235,4.6349653370207526e-05 +SPY,20140721 00:00,1970800,1975000,1964300,1973400,60883796,4.643856728961449e-05 +QQQ,20140721 00:00,959200,961600,955500,960000,25727045,4.643856728961449e-05 +SPY,20140722 00:00,1980400,1985600,1978700,1982000,60031730,4.651005927729368e-05 +QQQ,20140722 00:00,964500,967600,963500,966100,21643377,4.651005927729368e-05 +SPY,20140723 00:00,1985100,1988500,1981000,1986400,54979732,4.645097234014832e-05 +QQQ,20140723 00:00,969500,973400,967700,972400,25302052,4.645097234014832e-05 +SPY,20140724 00:00,1988200,1990600,1984500,1986500,50510204,4.649207663101368e-05 +QQQ,20140724 00:00,974000,975100,969800,971200,22239162,4.649207663101368e-05 +SPY,20140725 00:00,1981100,1982600,1973300,1977400,69172823,4.6562662729258515e-05 +QQQ,20140725 00:00,966200,968700,962300,967400,23384467,4.6562662729258515e-05 +SPY,20140728 00:00,1977800,1980900,1966200,1978000,64463636,4.655643116487789e-05 +QQQ,20140728 00:00,968400,970200,960200,967700,21983478,4.655643116487789e-05 +SPY,20140729 00:00,1982100,1984500,1969300,1969300,71955637,4.656552944439127e-05 +QQQ,20140729 00:00,969800,972000,965200,966000,25167304,4.656552944439127e-05 +SPY,20140730 00:00,1976600,1979100,1961600,1969800,97604354,4.656488779282325e-05 +QQQ,20140730 00:00,971400,973200,966000,969800,30946048,4.656488779282325e-05 +SPY,20140731 00:00,1956300,1957800,1930400,1930900,156932334,4.827475612390966e-05 +QQQ,20140731 00:00,961800,963400,948800,950300,47218109,4.827475612390966e-05 +SPY,20140801 00:00,1925800,1937500,1915800,1924800,159252899,4.793108389753675e-05 +QQQ,20140801 00:00,948200,953400,940400,946500,57744099,4.793108389753675e-05 +SPY,20140804 00:00,1929100,1943000,1920500,1938800,81387375,4.807458835103083e-05 +QQQ,20140804 00:00,948700,956900,945200,953200,30827711,4.807458835103083e-05 +SPY,20140805 00:00,1931100,1936000,1913200,1920100,136260078,4.841803896871915e-05 +QQQ,20140805 00:00,949600,952200,941500,945900,43571883,4.841803896871915e-05 +SPY,20140806 00:00,1910800,1928900,1910800,1920700,86720027,4.8235134567916036e-05 +QQQ,20140806 00:00,940000,951100,939200,945200,31672131,4.8235134567916036e-05 +SPY,20140807 00:00,1929600,1931200,1905500,1909900,121255519,4.829357699265312e-05 +QQQ,20140807 00:00,949600,951400,938900,942200,31336166,4.829357699265312e-05 +SPY,20140808 00:00,1914300,1933700,1909500,1932400,101088602,4.851176203573099e-05 +QQQ,20140808 00:00,943700,950100,939700,948700,37213639,4.851176203573099e-05 +SPY,20140811 00:00,1939900,1946600,1937100,1938000,68566260,4.8493803813803006e-05 +QQQ,20140811 00:00,952700,957600,952000,954600,26312581,4.8493803813803006e-05 +SPY,20140812 00:00,1936300,1941500,1929400,1935400,67359712,4.8512954833526135e-05 +QQQ,20140812 00:00,953600,956700,949300,954200,25161676,4.8512954833526135e-05 +SPY,20140813 00:00,1943000,1950600,1939600,1948900,59607085,4.8702261498466146e-05 +QQQ,20140813 00:00,958100,964700,957600,964300,25864146,4.8702261498466146e-05 +SPY,20140814 00:00,1951900,1957600,1949800,1957600,51962205,4.864551129739372e-05 +QQQ,20140814 00:00,965600,969500,964300,969300,21646680,4.864551129739372e-05 +SPY,20140815 00:00,1964900,1966500,1943200,1957100,131789171,4.754073154445051e-05 +QQQ,20140815 00:00,974900,976300,964800,974000,52041436,4.754073154445051e-05 +SPY,20140818 00:00,1968100,1974500,1966900,1973200,62330394,4.771889773096181e-05 +QQQ,20140818 00:00,979100,982400,977700,981500,36443608,4.771889773096181e-05 +SPY,20140819 00:00,1978500,1985400,1976500,1983900,52380329,4.7729700603234054e-05 +QQQ,20140819 00:00,983800,987600,983200,987100,20134213,4.7729700603234054e-05 +SPY,20140820 00:00,1981500,1991600,1980800,1989200,67210020,4.76599821366395e-05 +QQQ,20140820 00:00,986200,989000,985300,987000,21476088,4.76599821366395e-05 +SPY,20140821 00:00,1990600,1997600,1989300,1995000,59306589,4.75344190086677e-05 +QQQ,20140821 00:00,987500,989500,986000,989000,16063783,4.75344190086677e-05 +SPY,20140822 00:00,1993200,1996900,1987400,1991900,67316596,4.7240394403978215e-05 +QQQ,20140822 00:00,989400,992500,987200,990500,21846385,4.7240394403978215e-05 +SPY,20140825 00:00,2001500,2005300,1998600,2002000,59522463,4.7215697890784816e-05 +QQQ,20140825 00:00,995500,996800,991600,994000,21151578,4.7215697890784816e-05 +SPY,20140826 00:00,2003500,2008200,2002800,2003300,40694869,4.7202440357891264e-05 +QQQ,20140826 00:00,995500,996100,992700,995000,17998022,4.7202440357891264e-05 +SPY,20140827 00:00,2004500,2005700,1999400,2002500,41413859,4.568850298315696e-05 +QQQ,20140827 00:00,995300,996400,993100,995200,14091738,4.568850298315696e-05 +SPY,20140828 00:00,1995900,2002600,1993900,2001400,47413129,4.5657425365306244e-05 +QQQ,20140828 00:00,991800,995300,990800,994100,18652210,4.5657425365306244e-05 +SPY,20140829 00:00,2004400,2007300,1998200,2007100,52731377,4.565317762508182e-05 +QQQ,20140829 00:00,996300,999100,992700,997800,15587002,4.565317762508182e-05 +SPY,20140902 00:00,2009900,2010000,1998600,2006100,62095645,4.551184681511929e-05 +QQQ,20140902 00:00,1000200,1001000,996700,1000700,16424740,4.551184681511929e-05 +SPY,20140903 00:00,2013500,2014100,2002200,2005000,50973915,4.548189002141955e-05 +QQQ,20140903 00:00,1003400,1003400,993000,994800,23468745,4.548189002141955e-05 +SPY,20140904 00:00,2008600,2015800,1996600,2002200,69364467,4.520862017347996e-05 +QQQ,20140904 00:00,997100,1002200,991400,993900,22028262,4.520862017347996e-05 +SPY,20140905 00:00,2001900,2011900,1994200,2011100,83243971,4.5266986061487925e-05 +QQQ,20140905 00:00,995400,999500,990300,998900,28034536,4.5266986061487925e-05 +SPY,20140908 00:00,2009400,2012100,2000000,2005900,59405002,4.525576562697783e-05 +QQQ,20140908 00:00,999200,1003300,996200,1000800,23584765,4.525576562697783e-05 +SPY,20140909 00:00,2004200,2005500,1989200,1993200,81235943,4.5132888726417885e-05 +QQQ,20140909 00:00,1000900,1004600,990700,992500,34270823,4.5132888726417885e-05 +SPY,20140910 00:00,1994600,2002000,1987700,2000700,63306991,4.512763656897461e-05 +QQQ,20140910 00:00,993800,1001100,991000,1000700,29393854,4.512763656897461e-05 +SPY,20140911 00:00,1992800,2003300,1991200,2003000,60058285,4.5150409867372856e-05 +QQQ,20140911 00:00,996400,1000400,992500,999900,26806349,4.5150409867372856e-05 +SPY,20140912 00:00,2001200,2001200,1985600,1991200,104418519,4.529164853422079e-05 +QQQ,20140912 00:00,998700,999300,991700,994800,28578154,4.529164853422079e-05 +SPY,20140915 00:00,1991700,1993100,1983800,1990200,66547024,4.5342514690919456e-05 +QQQ,20140915 00:00,995900,996000,982200,985200,30971086,4.5342514690919456e-05 +SPY,20140916 00:00,1986400,2008400,1985000,2005200,104267737,4.563565477307395e-05 +QQQ,20140916 00:00,981500,995700,980500,993800,34619414,4.563565477307395e-05 +SPY,20140917 00:00,2008000,2016800,1997500,2007500,129557361,4.555812089332196e-05 +QQQ,20140917 00:00,993600,1000000,989300,995300,35057109,4.555812089332196e-05 +SPY,20140918 00:00,2013600,2018500,2011000,2018200,82911266,4.516590520011329e-05 +QQQ,20140918 00:00,998400,1002900,997300,1002800,27032104,4.516590520011329e-05 +SPY,20140919 00:00,2015500,2017300,2002900,2007000,103522528,4.52735673071147e-05 +QQQ,20140919 00:00,1004600,1004700,995800,999800,42610305,4.52735673071147e-05 +SPY,20140922 00:00,2003600,2003700,1987400,1991500,100445733,4.521794613135766e-05 +QQQ,20140922 00:00,997400,997500,986200,990500,44814291,4.521794613135766e-05 +SPY,20140923 00:00,1984100,1992600,1979500,1980100,95589005,4.526311826035297e-05 +QQQ,20140923 00:00,986500,992200,985800,987800,30509677,4.526311826035297e-05 +SPY,20140924 00:00,1980600,1996900,1975200,1995700,96800805,4.553146527629126e-05 +QQQ,20140924 00:00,988800,998800,985400,998400,32498884,4.553146527629126e-05 +SPY,20140925 00:00,1990500,1990500,1963200,1963300,131462409,4.6956892884614236e-05 +QQQ,20140925 00:00,995200,996400,977000,977400,64369226,4.6956892884614236e-05 +SPY,20140926 00:00,1967000,1983900,1964200,1979000,89383462,4.717194850939084e-05 +QQQ,20140926 00:00,980600,989600,978900,987800,48690943,4.717194850939084e-05 +SPY,20140929 00:00,1962000,1978900,1960500,1974900,84163503,4.7155211005261934e-05 +QQQ,20140929 00:00,978000,989200,977500,986500,30405584,4.7155211005261934e-05 +SPY,20140930 00:00,1977000,1983000,1966100,1970200,106045623,4.706261945366398e-05 +QQQ,20140930 00:00,989400,993000,983200,987900,36525121,4.706261945366398e-05 +SPY,20141001 00:00,1967500,1967700,1939100,1943700,163982292,4.7733514732968405e-05 +QQQ,20141001 00:00,985100,986100,969000,972100,52474323,4.7733514732968405e-05 +SPY,20141002 00:00,1941800,1950500,1923500,1944200,145715250,4.772363524931004e-05 +QQQ,20141002 00:00,971700,975100,959700,972100,51546624,4.772363524931004e-05 +SPY,20141003 00:00,1957100,1969400,1950800,1965200,101990291,4.7613626697368025e-05 +QQQ,20141003 00:00,977800,985700,974400,981700,38842888,4.7613626697368025e-05 +SPY,20141006 00:00,1973600,1976000,1955900,1963000,97319437,4.741691674530373e-05 +QQQ,20141006 00:00,984800,987200,976600,979600,31858655,4.741691674530373e-05 +SPY,20141007 00:00,1952900,1957200,1932500,1933000,126487728,4.802919839446452e-05 +QQQ,20141007 00:00,975000,977700,965600,965700,43292545,4.802919839446452e-05 +SPY,20141008 00:00,1933600,1969200,1923600,1966100,170825947,4.826065909512793e-05 +QQQ,20141008 00:00,966200,987600,960600,984500,61805524,4.826065909512793e-05 +SPY,20141009 00:00,1963600,1966000,1925800,1927000,193080301,4.9660533946882337e-05 +QQQ,20141009 00:00,983200,985700,967100,968600,58887960,4.9660533946882337e-05 +SPY,20141010 00:00,1927100,1936500,1905100,1905400,195742635,4.9099827784175785e-05 +QQQ,20141010 00:00,962800,968300,944200,944400,74259870,4.9099827784175785e-05 +SPY,20141013 00:00,1904400,1911500,1873000,1874500,203655232,5.002162466972822e-05 +QQQ,20141013 00:00,942700,949900,928800,929600,73671039,5.002162466972822e-05 +SPY,20141014 00:00,1884600,1898200,1870400,1878300,195991419,4.9917232567678504e-05 +QQQ,20141014 00:00,935400,941600,927100,929700,67206351,4.9917232567678504e-05 +SPY,20141015 00:00,1851900,1868800,1819200,1864300,349938478,4.9992788572555553e-05 +QQQ,20141015 00:00,915700,927500,902400,923700,101723479,4.9992788572555553e-05 +SPY,20141016 00:00,1830200,1875800,1829000,1862700,179272051,4.946191803802295e-05 +QQQ,20141016 00:00,904200,925800,903900,917900,61162296,4.946191803802295e-05 +SPY,20141017 00:00,1884800,1897500,1876200,1884700,195960240,4.990606242759442e-05 +QQQ,20141017 00:00,930000,938900,924600,930000,63457932,4.990606242759442e-05 +SPY,20141020 00:00,1880900,1904500,1880700,1903000,102818615,5.0063000419485096e-05 +QQQ,20141020 00:00,929900,944700,928100,943900,36009514,5.0063000419485096e-05 +SPY,20141021 00:00,1917000,1942000,1914800,1940700,136732853,5.2044544518005e-05 +QQQ,20141021 00:00,955600,968700,953200,968700,49361784,5.2044544518005e-05 +SPY,20141022 00:00,1944400,1949100,1926100,1926900,134617023,5.2206942801916216e-05 +QQQ,20141022 00:00,971700,973000,963100,963700,36737927,5.2206942801916216e-05 +SPY,20141023 00:00,1946400,1962000,1942600,1949300,141433028,5.273211144303742e-05 +QQQ,20141023 00:00,973400,983600,971700,978200,44492023,5.273211144303742e-05 +SPY,20141024 00:00,1952300,1964900,1944900,1964300,101947411,5.2901319260925965e-05 +QQQ,20141024 00:00,980300,986900,976400,986200,39138857,5.2901319260925965e-05 +SPY,20141027 00:00,1957500,1964500,1950300,1961600,75533804,5.28160200555046e-05 +QQQ,20141027 00:00,984300,988700,980200,986900,27809728,5.28160200555046e-05 +SPY,20141028 00:00,1968400,1984200,1967300,1984100,92862874,5.344318704379763e-05 +QQQ,20141028 00:00,991500,1002000,990800,1001800,29861051,5.344318704379763e-05 +SPY,20141029 00:00,1985900,1991200,1968000,1981100,129853584,5.346993889605669e-05 +QQQ,20141029 00:00,998500,1001200,991100,998100,37010193,5.346993889605669e-05 +SPY,20141030 00:00,1975900,1999500,1974100,1993800,106646609,5.345798613621927e-05 +QQQ,20141030 00:00,993600,1002600,991400,1000200,33566940,5.345798613621927e-05 +SPY,20141031 00:00,2017800,2018100,2007800,2016600,121383830,5.3976786197013294e-05 +QQQ,20141031 00:00,1016800,1017500,1010700,1014000,44363171,5.3976786197013294e-05 +SPY,20141103 00:00,2019600,2024500,2013100,2017700,80803486,5.3982572356435656e-05 +QQQ,20141103 00:00,1015800,1019700,1014300,1017000,28457381,5.3982572356435656e-05 +SPY,20141104 00:00,2012200,2016000,2000600,2010700,82190940,5.403761903938453e-05 +QQQ,20141104 00:00,1013800,1016200,1006700,1013600,20898564,5.403761903938453e-05 +SPY,20141105 00:00,2025500,2025900,2014500,2023400,82242532,5.403022275472874e-05 +QQQ,20141105 00:00,1020300,1020300,1010200,1013700,23519245,5.403022275472874e-05 +SPY,20141106 00:00,2024100,2032600,2016400,2031500,90435301,5.409014177283837e-05 +QQQ,20141106 00:00,1013600,1017200,1009200,1016900,21932569,5.409014177283837e-05 +SPY,20141107 00:00,2031600,2035900,2026100,2033400,70687484,5.3063438086906334e-05 +QQQ,20141107 00:00,1018800,1019100,1010700,1016000,18598551,5.3063438086906334e-05 +SPY,20141110 00:00,2034000,2040400,2031300,2039800,58529173,5.24358437959331e-05 +QQQ,20141110 00:00,1016600,1020900,1013800,1019600,18867350,5.24358437959331e-05 +SPY,20141111 00:00,2040700,2043000,2036600,2041600,48919008,5.243208827448185e-05 +QQQ,20141111 00:00,1019800,1022800,1017000,1022800,14618860,5.243208827448185e-05 +SPY,20141112 00:00,2033500,2042400,2033100,2039600,78536093,5.243078960026754e-05 +QQQ,20141112 00:00,1018800,1025700,1018700,1024600,19096147,5.243078960026754e-05 +SPY,20141113 00:00,2041400,2048300,2032100,2041900,79200441,5.212165373895013e-05 +QQQ,20141113 00:00,1026600,1032800,1024200,1029000,25954103,5.212165373895013e-05 +SPY,20141114 00:00,2041300,2044800,2037200,2042400,65017444,5.2090505251627386e-05 +QQQ,20141114 00:00,1028700,1032200,1025300,1032200,17459898,5.2090505251627386e-05 +SPY,20141117 00:00,2038500,2045800,2036600,2043700,60076767,5.206114372183686e-05 +QQQ,20141117 00:00,1029700,1032100,1024200,1029100,21625241,5.206114372183686e-05 +SPY,20141118 00:00,2044600,2059200,2044400,2055500,68462821,5.203362133373698e-05 +QQQ,20141118 00:00,1030000,1038200,1029900,1036800,24182426,5.203362133373698e-05 +SPY,20141119 00:00,2053000,2055500,2043000,2052200,77328648,5.202949221208929e-05 +QQQ,20141119 00:00,1035600,1035700,1027400,1032100,22506680,5.202949221208929e-05 +SPY,20141120 00:00,2042500,2057100,2041900,2055800,64783018,5.199995810069504e-05 +QQQ,20141120 00:00,1027900,1037600,1026900,1036700,19564210,5.199995810069504e-05 +SPY,20141121 00:00,2076000,2077200,2059800,2067200,121172657,5.1736507720829525e-05 +QQQ,20141121 00:00,1046200,1046900,1035400,1038700,29619626,5.1736507720829525e-05 +SPY,20141124 00:00,2071900,2073900,2069100,2072600,59414411,5.171944622458036e-05 +QQQ,20141124 00:00,1041700,1047300,1040600,1046800,16799716,5.171944622458036e-05 +SPY,20141125 00:00,2075100,2077900,2068000,2072500,66365644,5.1723964829879124e-05 +QQQ,20141125 00:00,1048600,1051400,1045700,1048400,16545703,5.1723964829879124e-05 +SPY,20141126 00:00,2072700,2077600,2070300,2076400,48377586,5.1772768523685186e-05 +QQQ,20141126 00:00,1049100,1055800,1048400,1055200,16499205,5.1772768523685186e-05 +SPY,20141128 00:00,2075000,2078700,2069100,2072000,47640169,5.168915883002827e-05 +QQQ,20141128 00:00,1058200,1062500,1057300,1060100,15993111,5.168915883002827e-05 +SPY,20141201 00:00,2063800,2065400,2053800,2058000,95613332,5.207621978590422e-05 +QQQ,20141201 00:00,1057400,1059100,1044200,1048100,32991801,5.207621978590422e-05 +SPY,20141202 00:00,2058000,2073400,2057900,2070900,68327439,5.2107637982714104e-05 +QQQ,20141202 00:00,1049300,1054100,1047000,1052300,24269235,5.2107637982714104e-05 +SPY,20141203 00:00,2072800,2081500,2071100,2079100,59313893,5.208865883936443e-05 +QQQ,20141203 00:00,1053900,1055600,1047700,1054200,30389323,5.208865883936443e-05 +SPY,20141204 00:00,2075500,2082700,2067000,2076400,80223355,5.209849421156136e-05 +QQQ,20141204 00:00,1053200,1057800,1049300,1053700,29464112,5.209849421156136e-05 +SPY,20141205 00:00,2078800,2084700,2075500,2080000,75793135,5.206224929899773e-05 +QQQ,20141205 00:00,1055300,1057000,1051500,1053800,24523000,5.206224929899773e-05 +SPY,20141208 00:00,2075500,2081200,2059300,2066100,98866205,5.203044465339818e-05 +QQQ,20141208 00:00,1051100,1055700,1040800,1046300,31188836,5.203044465339818e-05 +SPY,20141209 00:00,2043700,2066000,2039100,2064700,115507853,5.199382408978112e-05 +QQQ,20141209 00:00,1034200,1050400,1030400,1049600,40089969,5.199382408978112e-05 +SPY,20141210 00:00,2059400,2059800,2029300,2031600,146331601,5.305730359161469e-05 +QQQ,20141210 00:00,1047700,1050300,1031200,1033100,37408941,5.305730359161469e-05 +SPY,20141211 00:00,2038900,2061900,2037100,2042300,150279681,5.2493148126125956e-05 +QQQ,20141211 00:00,1036100,1050400,1035900,1038000,45086091,5.2493148126125956e-05 +SPY,20141212 00:00,2026500,2038100,2008500,2009400,177421306,5.32163301311138e-05 +QQQ,20141212 00:00,1028200,1039900,1026700,1026700,43751088,5.32163301311138e-05 +SPY,20141215 00:00,2020000,2025300,1987800,1995100,178323144,5.354750300176818e-05 +QQQ,20141215 00:00,1032300,1035800,1013200,1016100,51390788,5.354750300176818e-05 +SPY,20141216 00:00,1985500,2023900,1978600,1979000,222136276,5.400169646989737e-05 +QQQ,20141216 00:00,1009700,1024700,999600,999800,61291540,5.400169646989737e-05 +SPY,20141217 00:00,1984800,2023400,1983000,2017900,236495966,5.529190094065922e-05 +QQQ,20141217 00:00,1000700,1020900,999200,1018000,75179756,5.529190094065922e-05 +SPY,20141218 00:00,2047800,2129700,2039300,2068400,227706451,5.682313159448996e-05 +QQQ,20141218 00:00,1033100,1042600,1029800,1042500,44502274,5.682313159448996e-05 +SPY,20141219 00:00,2064600,2073300,2056200,2063300,201656897,5.680128520678444e-05 +QQQ,20141219 00:00,1039900,1047400,1037100,1043200,47736874,5.680128520678444e-05 +SPY,20141222 00:00,2067100,2074700,2064600,2074700,122695539,5.683725509592921e-05 +QQQ,20141222 00:00,1041600,1046100,1041000,1045800,33319787,5.683725509592921e-05 +SPY,20141223 00:00,2082000,2082300,2075100,2077500,105506063,5.663261069503786e-05 +QQQ,20141223 00:00,1049700,1049700,1040900,1042100,24804171,5.663261069503786e-05 +SPY,20141224 00:00,2080300,2083400,2077200,2078100,37099900,5.6634263883036834e-05 +QQQ,20141224 00:00,1043500,1047000,1042700,1043000,10773303,5.6634263883036834e-05 +SPY,20141226 00:00,2082900,2088400,2082500,2084400,47217364,5.665205675938986e-05 +QQQ,20141226 00:00,1045700,1052600,1045700,1050400,12548448,5.665205675938986e-05 +SPY,20141229 00:00,2082500,2089700,2081500,2087200,68552412,5.664212999511272e-05 +QQQ,20141229 00:00,1049800,1052500,1048800,1050200,15179628,5.664212999511272e-05 +SPY,20141230 00:00,2082100,2083700,2075100,2076000,67744755,5.6810414069853146e-05 +QQQ,20141230 00:00,1047300,1049600,1041800,1043200,16900848,5.6810414069853146e-05 +SPY,20141231 00:00,2079600,2081800,2054000,2055000,104411039,5.717717150729235e-05 +QQQ,20141231 00:00,1045100,1049100,1031000,1032500,22286939,5.717717150729235e-05 +SPY,20150102 00:00,2064000,2068800,2041800,2054300,105957476,5.6851173087424556e-05 +QQQ,20150102 00:00,1037500,1042000,1024500,1029400,29310772,5.6851173087424556e-05 +SPY,20150105 00:00,2042000,2043700,2013500,2017600,151790532,5.795002086859352e-05 +QQQ,20150105 00:00,1025000,1026100,1011500,1014300,33994158,5.795002086859352e-05 +SPY,20150106 00:00,2021300,2027200,1988600,1998200,191309913,5.8454791321669e-05 +QQQ,20150106 00:00,1015800,1017500,996200,1000700,63345086,5.8454791321669e-05 +SPY,20150107 00:00,2014600,2027200,2008800,2023100,110907078,5.8863262787753914e-05 +QQQ,20150107 00:00,1007400,1016000,1004900,1013600,33961867,5.8863262787753914e-05 +SPY,20150108 00:00,2040000,2061600,2039900,2059000,135532145,6.013537986738278e-05 +QQQ,20150108 00:00,1022500,1035000,1021200,1033000,37950558,6.013537986738278e-05 +SPY,20150109 00:00,2063900,2064100,2035200,2041900,138380098,6.039298840534804e-05 +QQQ,20150109 00:00,1036100,1036500,1020200,1026200,39201903,6.039298840534804e-05 +SPY,20150112 00:00,2044200,2045900,2019300,2026500,130060345,6.072086412560078e-05 +QQQ,20150112 00:00,1028200,1029300,1012900,1015500,33011889,6.072086412560078e-05 +SPY,20150113 00:00,2041500,2054800,2005200,2020800,195352135,5.985914430641111e-05 +QQQ,20150113 00:00,1025400,1036200,1007100,1015200,53995540,5.985914430641111e-05 +SPY,20150114 00:00,1996700,2011000,1985700,2009400,175802901,5.9190851872451785e-05 +QQQ,20150114 00:00,1004800,1014800,1000700,1009600,48551828,5.9190851872451785e-05 +SPY,20150115 00:00,2016400,2020000,1988800,1989700,156300011,5.958812461655108e-05 +QQQ,20150115 00:00,1013900,1015900,995300,996500,45530286,5.958812461655108e-05 +SPY,20150116 00:00,1987500,2018200,1985500,2016300,185662074,6.016572674621012e-05 +QQQ,20150116 00:00,995200,1009500,993600,1008200,33576728,6.016572674621012e-05 +SPY,20150120 00:00,2024300,2027100,2001700,2020800,120590234,6.010385243568816e-05 +QQQ,20150120 00:00,1014400,1018800,1002900,1016200,28456896,6.010385243568816e-05 +SPY,20150121 00:00,2015100,2036600,2009400,2030600,111421802,6.0110984500150753e-05 +QQQ,20150121 00:00,1013300,1026100,1009700,1021400,34202760,6.0110984500150753e-05 +SPY,20150122 00:00,2040200,2062600,2023300,2060500,143386079,6.112575718927563e-05 +QQQ,20150122 00:00,1025700,1041400,1016400,1040300,38065971,6.112575718927563e-05 +SPY,20150123 00:00,2058000,2061000,2048100,2049700,103145813,6.093517543760136e-05 +QQQ,20150123 00:00,1040500,1045800,1037200,1042600,33559434,6.093517543760136e-05 +SPY,20150126 00:00,2047300,2055600,2038500,2054400,80310454,5.9098512735615985e-05 +QQQ,20150126 00:00,1041700,1043300,1036100,1041400,18618622,5.9098512735615985e-05 +SPY,20150127 00:00,2030000,2041200,2017500,2027900,118119788,6.0321570275778444e-05 +QQQ,20150127 00:00,1025100,1025600,1011000,1014400,39424461,6.0321570275778444e-05 +SPY,20150128 00:00,2041600,2049500,1999100,2001400,143518567,6.066726899714488e-05 +QQQ,20150128 00:00,1030900,1031800,1009000,1009200,41913841,6.066726899714488e-05 +SPY,20150129 00:00,2003400,2023000,1986800,2020100,142243135,6.0498919148486254e-05 +QQQ,20150129 00:00,1008300,1020700,999600,1018900,42412437,6.0498919148486254e-05 +SPY,20150130 00:00,2005600,2021700,1991300,1994700,168157021,6.02010209742155e-05 +QQQ,20150130 00:00,1018000,1025800,1009600,1011000,37715667,6.02010209742155e-05 +SPY,20150202 00:00,2000700,2020200,1978600,2019000,148086377,6.0493293993081485e-05 +QQQ,20150202 00:00,1013300,1020700,997500,1019800,40681549,6.0493293993081485e-05 +SPY,20150203 00:00,2029400,2048500,2025500,2048400,111656466,5.8791412623907807e-05 +QQQ,20150203 00:00,1023300,1030300,1016800,1029600,28345597,5.8791412623907807e-05 +SPY,20150204 00:00,2039100,2053800,2035100,2040600,113368828,5.8657348087186866e-05 +QQQ,20150204 00:00,1025400,1035500,1023100,1028700,33263403,5.8657348087186866e-05 +SPY,20150205 00:00,2048300,2063000,2047700,2061800,86542389,5.8937512718977465e-05 +QQQ,20150205 00:00,1031300,1038300,1028700,1037600,20600221,5.8937512718977465e-05 +SPY,20150206 00:00,2065700,2072400,2049200,2055300,105345677,5.84444409024474e-05 +QQQ,20150206 00:00,1039200,1041700,1027600,1031300,29563768,5.84444409024474e-05 +SPY,20150209 00:00,2047700,2056400,2041400,2046300,77313286,5.768746445145935e-05 +QQQ,20150209 00:00,1027200,1032800,1025500,1028000,21894719,5.768746445145935e-05 +SPY,20150210 00:00,2058900,2071200,2048200,2067700,87817324,5.825459534216894e-05 +QQQ,20150210 00:00,1033800,1045400,1032100,1044000,22742554,5.825459534216894e-05 +SPY,20150211 00:00,2066000,2074500,2058300,2069300,77041314,5.7824658352551925e-05 +QQQ,20150211 00:00,1045100,1050100,1043200,1047800,19289541,5.7824658352551925e-05 +SPY,20150212 00:00,2079100,2089900,2076800,2089200,82340827,5.821702065178535e-05 +QQQ,20150212 00:00,1054500,1060400,1053000,1060000,21113798,5.821702065178535e-05 +SPY,20150213 00:00,2090800,2098400,2087600,2097800,77979039,5.822033113447755e-05 +QQQ,20150213 00:00,1062900,1069300,1061100,1069100,26422732,5.822033113447755e-05 +SPY,20150217 00:00,2093800,2103200,2091000,2101600,65018633,5.819619342510692e-05 +QQQ,20150217 00:00,1069100,1070800,1066500,1070100,15379926,5.819619342510692e-05 +SPY,20150218 00:00,2096300,2102200,2093500,2101500,68979537,5.8181158289582916e-05 +QQQ,20150218 00:00,1069000,1072100,1067400,1071600,13795618,5.8181158289582916e-05 +SPY,20150219 00:00,2094300,2104200,2092400,2099800,82658520,5.7945242007305887e-05 +QQQ,20150219 00:00,1070900,1077600,1070600,1076900,18462422,5.7945242007305887e-05 +SPY,20150220 00:00,2094300,2113300,2087300,2112800,123596635,5.799941705846086e-05 +QQQ,20150220 00:00,1076000,1084700,1072900,1084100,25294546,5.799941705846086e-05 +SPY,20150223 00:00,2109700,2112100,2104800,2111900,68459606,5.7987256266353474e-05 +QQQ,20150223 00:00,1084000,1085500,1081100,1085200,16260145,5.7987256266353474e-05 +SPY,20150224 00:00,2111100,2120500,2107600,2118100,65091020,5.7899310469750646e-05 +QQQ,20150224 00:00,1084100,1087300,1080500,1086000,18272329,5.7899310469750646e-05 +SPY,20150225 00:00,2116400,2122400,2112200,2116100,67297730,5.791098626116607e-05 +QQQ,20150225 00:00,1084400,1088600,1080900,1083300,18554299,5.791098626116607e-05 +SPY,20150226 00:00,2115500,2117100,2106500,2113700,65693818,5.787857243185177e-05 +QQQ,20150226 00:00,1084400,1089400,1081400,1088800,21048589,5.787857243185177e-05 +SPY,20150227 00:00,2112500,2115800,2106400,2106600,87493136,5.792817265768487e-05 +QQQ,20150227 00:00,1088600,1089100,1082300,1084000,21848435,5.792817265768487e-05 +SPY,20150302 00:00,2107900,2120600,2107200,2119900,75805733,5.8131909063515934e-05 +QQQ,20150302 00:00,1086100,1094200,1085900,1093800,21483782,5.8131909063515934e-05 +SPY,20150303 00:00,2114600,2115900,2100800,2111200,97220283,5.798664179629972e-05 +QQQ,20150303 00:00,1090600,1091600,1081800,1088700,20043637,5.798664179629972e-05 +SPY,20150304 00:00,2104200,2104900,2090600,2102100,99097965,5.742569451018334e-05 +QQQ,20150304 00:00,1085300,1086700,1078600,1084500,20174241,5.742569451018334e-05 +SPY,20150305 00:00,2105900,2108000,2098500,2105100,69813562,5.7431797975973066e-05 +QQQ,20150305 00:00,1087300,1089600,1081900,1086400,14192254,5.7431797975973066e-05 +SPY,20150306 00:00,2093800,2099400,2071000,2075000,151279849,5.815666140801392e-05 +QQQ,20150306 00:00,1085200,1087100,1071400,1074100,29117528,5.815666140801392e-05 +SPY,20150309 00:00,2077600,2087900,2075800,2083600,81466789,5.8185464172535816e-05 +QQQ,20150309 00:00,1076400,1079800,1071900,1077200,24850772,5.8185464172535816e-05 +SPY,20150310 00:00,2067000,2068100,2049700,2050000,137606860,5.9453329144456565e-05 +QQQ,20150310 00:00,1069500,1069800,1057200,1057200,30989645,5.9453329144456565e-05 +SPY,20150311 00:00,2052900,2055000,2044000,2045000,101445686,5.941512744986329e-05 +QQQ,20150311 00:00,1058700,1060100,1050700,1051100,22830168,5.941512744986329e-05 +SPY,20150312 00:00,2052400,2071800,2052000,2071300,83701264,5.97102588124232e-05 +QQQ,20150312 00:00,1050300,1059200,1049600,1058000,18992078,5.97102588124232e-05 +SPY,20150313 00:00,2067600,2069300,2045800,2058400,142726670,5.916642871338504e-05 +QQQ,20150313 00:00,1056700,1061200,1046800,1053400,39102687,5.916642871338504e-05 +SPY,20150316 00:00,2066800,2086900,2066800,2086400,122468254,5.969954179467066e-05 +QQQ,20150316 00:00,1057600,1067300,1056200,1067000,23517924,5.969954179467066e-05 +SPY,20150317 00:00,2076500,2084200,2069800,2079900,86273420,5.940586744191961e-05 +QQQ,20150317 00:00,1064100,1070400,1061600,1068700,18705018,5.940586744191961e-05 +SPY,20150318 00:00,2073500,2112600,2066200,2104200,201026638,5.9510660850247054e-05 +QQQ,20150318 00:00,1065700,1084100,1060300,1079200,37558204,5.9510660850247054e-05 +SPY,20150319 00:00,2100400,2102900,2090300,2095000,107031725,5.935890278364596e-05 +QQQ,20150319 00:00,1080400,1083800,1078700,1080800,26245908,5.935890278364596e-05 +SPY,20150320 00:00,2096600,2110200,2096100,2104500,143568202,5.937559284320814e-05 +QQQ,20150320 00:00,1087400,1090700,1085200,1085300,26136729,5.937559284320814e-05 +SPY,20150323 00:00,2104300,2111100,2100000,2100000,60797901,5.887537482341528e-05 +QQQ,20150323 00:00,1085000,1087700,1082800,1083200,14419498,5.887537482341528e-05 +SPY,20150324 00:00,2098700,2104000,2087400,2088200,66524763,5.880204117005894e-05 +QQQ,20150324 00:00,1083000,1088100,1079100,1079300,18200101,5.880204117005894e-05 +SPY,20150325 00:00,2090100,2093500,2057100,2057600,143214221,6.0183154064064894e-05 +QQQ,20150325 00:00,1081100,1082000,1054200,1054600,38077715,6.0183154064064894e-05 +SPY,20150326 00:00,2049600,2063700,2041200,2052700,135552421,5.981576868519849e-05 +QQQ,20150326 00:00,1045900,1057000,1042400,1051000,43741298,5.981576868519849e-05 +SPY,20150327 00:00,2051600,2059500,2049100,2057500,101603187,5.977583598408482e-05 +QQQ,20150327 00:00,1051000,1057700,1049300,1055200,31333313,5.977583598408482e-05 +SPY,20150330 00:00,2069600,2086100,2069600,2082400,79185641,6.025052727697471e-05 +QQQ,20150330 00:00,1061800,1068100,1061600,1067300,26189750,6.025052727697471e-05 +SPY,20150331 00:00,2072600,2081000,2063600,2064300,101521731,6.0464979591390056e-05 +QQQ,20150331 00:00,1064000,1066500,1055700,1056000,25346058,6.0464979591390056e-05 +SPY,20150401 00:00,2064200,2064200,2045100,2057000,123533228,6.014671662171593e-05 +QQQ,20150401 00:00,1056000,1056200,1043700,1050500,29862894,6.014671662171593e-05 +SPY,20150402 00:00,2055800,2069800,2054000,2064000,76346908,6.012571941644816e-05 +QQQ,20150402 00:00,1051700,1054600,1047800,1051200,17412755,6.012571941644816e-05 +SPY,20150406 00:00,2053900,2084500,2052100,2078400,94957784,6.0260412446208116e-05 +QQQ,20150406 00:00,1045000,1062600,1043400,1059800,21853293,6.0260412446208116e-05 +SPY,20150407 00:00,2078600,2087500,2072500,2072800,66012249,5.8959852585362786e-05 +QQQ,20150407 00:00,1059100,1067000,1058000,1058000,17585902,5.8959852585362786e-05 +SPY,20150408 00:00,2075300,2085000,2070800,2080200,79769143,5.857483187980687e-05 +QQQ,20150408 00:00,1059000,1067900,1058300,1066400,24616222,5.857483187980687e-05 +SPY,20150409 00:00,2078200,2091800,2071900,2089200,79714373,5.853127593428252e-05 +QQQ,20150409 00:00,1066400,1073500,1062300,1073100,21752747,5.853127593428252e-05 +SPY,20150410 00:00,2092100,2100900,2089600,2100600,64668878,5.7920034145530005e-05 +QQQ,20150410 00:00,1072700,1077600,1070300,1077500,15889883,5.7920034145530005e-05 +SPY,20150413 00:00,2098400,2106200,2090300,2090600,68313801,5.5234998885794425e-05 +QQQ,20150413 00:00,1078100,1083800,1073600,1074800,16864629,5.5234998885794425e-05 +SPY,20150414 00:00,2088600,2097100,2081000,2094900,66715857,5.471523346375431e-05 +QQQ,20150414 00:00,1074000,1076800,1065600,1071700,21871938,5.471523346375431e-05 +SPY,20150415 00:00,2100700,2110400,2099500,2104700,86369302,5.4597308238229977e-05 +QQQ,20150415 00:00,1074700,1080700,1073300,1078400,18705724,5.4597308238229977e-05 +SPY,20150416 00:00,2100400,2109800,2098000,2104000,60189683,5.454222854333461e-05 +QQQ,20150416 00:00,1075900,1078800,1074000,1076900,15231803,5.454222854333461e-05 +SPY,20150417 00:00,2089800,2092300,2070100,2079800,164756043,5.48539107837487e-05 +QQQ,20150417 00:00,1066800,1069500,1055500,1060100,40117505,5.48539107837487e-05 +SPY,20150420 00:00,2090900,2102500,2089600,2098500,77138230,5.533463121069291e-05 +QQQ,20150420 00:00,1065400,1077900,1065000,1076000,23707314,5.533463121069291e-05 +SPY,20150421 00:00,2106500,2108600,2092400,2096000,62036953,5.5234241162915884e-05 +QQQ,20150421 00:00,1082200,1084100,1079300,1080600,21590796,5.5234241162915884e-05 +SPY,20150422 00:00,2100400,2108500,2089000,2106600,72044468,5.520330011466906e-05 +QQQ,20150422 00:00,1083400,1088300,1076400,1086500,17955253,5.520330011466906e-05 +SPY,20150423 00:00,2101700,2119300,2100100,2112100,91675891,5.511577087165707e-05 +QQQ,20150423 00:00,1083000,1095500,1082600,1090600,25831045,5.511577087165707e-05 +SPY,20150424 00:00,2117000,2119700,2111100,2116700,49570752,5.514953316913471e-05 +QQQ,20150424 00:00,1101900,1106900,1100400,1105400,29027413,5.514953316913471e-05 +SPY,20150427 00:00,2123400,2124800,2105400,2107400,70031075,5.463674845889374e-05 +QQQ,20150427 00:00,1109600,1111600,1100200,1102600,26308369,5.463674845889374e-05 +SPY,20150428 00:00,2107100,2115000,2093400,2114400,80175010,5.457951016396475e-05 +QQQ,20150428 00:00,1103300,1105500,1091100,1100400,33274943,5.457951016396475e-05 +SPY,20150429 00:00,2103200,2112900,2096000,2105300,113900782,5.460918917304621e-05 +QQQ,20150429 00:00,1094200,1100700,1087500,1093500,31561296,5.460918917304621e-05 +SPY,20150430 00:00,2099000,2103500,2076200,2085200,139993578,5.524796363863918e-05 +QQQ,20150430 00:00,1087400,1091700,1070600,1076300,37755317,5.524796363863918e-05 +SPY,20150501 00:00,2094100,2107700,2092800,2107200,87366934,5.575331421550896e-05 +QQQ,20150501 00:00,1080600,1091200,1080300,1090500,30133298,5.575331421550896e-05 +SPY,20150504 00:00,2112200,2120200,2111000,2113900,63475146,5.574272781031723e-05 +QQQ,20150504 00:00,1093900,1099100,1091700,1092300,20504793,5.574272781031723e-05 +SPY,20150505 00:00,2110100,2114600,2087300,2089200,102623336,5.654647203887251e-05 +QQQ,20150505 00:00,1088100,1090000,1074000,1074500,42441431,5.654647203887251e-05 +SPY,20150506 00:00,2095400,2099300,2067600,2080400,122648566,5.618968649304811e-05 +QQQ,20150506 00:00,1076500,1079500,1060000,1067100,39326009,5.618968649304811e-05 +SPY,20150507 00:00,2079100,2093800,2075300,2088700,75342115,5.6341653437664e-05 +QQQ,20150507 00:00,1066800,1076400,1066000,1073500,27755019,5.6341653437664e-05 +SPY,20150508 00:00,2108400,2118500,2107900,2116500,125762691,5.692218019638867e-05 +QQQ,20150508 00:00,1084400,1089200,1083000,1086900,30641874,5.692218019638867e-05 +SPY,20150511 00:00,2115400,2118900,2105300,2106000,65829833,5.701402471865862e-05 +QQQ,20150511 00:00,1087200,1089800,1081900,1082700,18614261,5.701402471865862e-05 +SPY,20150512 00:00,2095900,2106300,2086300,2099800,101766611,5.6516681379541195e-05 +QQQ,20150512 00:00,1076100,1083300,1068000,1077800,29119576,5.6516681379541195e-05 +SPY,20150513 00:00,2104900,2112200,2097400,2100600,79703427,5.6516681873802273e-05 +QQQ,20150513 00:00,1082400,1088100,1078400,1080000,18362097,5.6516681873802273e-05 +SPY,20150514 00:00,2112400,2123200,2109100,2122500,82976922,5.693456087052135e-05 +QQQ,20150514 00:00,1088900,1096700,1084800,1095800,22193220,5.693456087052135e-05 +SPY,20150515 00:00,2124300,2126100,2118700,2124400,68168050,5.661594364343524e-05 +QQQ,20150515 00:00,1098900,1100100,1093100,1095800,23292276,5.661594364343524e-05 +SPY,20150518 00:00,2122400,2134000,2121700,2131000,68309200,5.658148089919904e-05 +QQQ,20150518 00:00,1094200,1102800,1093200,1100600,16710552,5.658148089919904e-05 +SPY,20150519 00:00,2132600,2135700,2126900,2130300,62912644,5.652401503250093e-05 +QQQ,20150519 00:00,1101800,1103500,1097600,1099400,12318113,5.652401503250093e-05 +SPY,20150520 00:00,2131600,2137800,2125100,2128800,70291407,5.6405849205539635e-05 +QQQ,20150520 00:00,1100100,1106700,1094300,1100100,19541881,5.6405849205539635e-05 +SPY,20150521 00:00,2127400,2137500,2125100,2135000,59049641,5.617464945159938e-05 +QQQ,20150521 00:00,1098000,1107300,1096600,1105800,15868269,5.617464945159938e-05 +SPY,20150522 00:00,2130200,2135400,2129100,2130000,48920652,5.616833042029578e-05 +QQQ,20150522 00:00,1104700,1108700,1103800,1104700,12645649,5.616833042029578e-05 +SPY,20150526 00:00,2123900,2125000,2102100,2107100,110549834,5.662576537719197e-05 +QQQ,20150526 00:00,1102100,1103800,1087600,1092000,23784971,5.662576537719197e-05 +SPY,20150527 00:00,2112300,2129800,2108500,2126700,83068343,5.689133523317417e-05 +QQQ,20150527 00:00,1095400,1110800,1092900,1109600,26132531,5.689133523317417e-05 +SPY,20150528 00:00,2123400,2125900,2116300,2125000,68137802,5.6883019199514283e-05 +QQQ,20150528 00:00,1108000,1110100,1103700,1107100,14036756,5.6883019199514283e-05 +SPY,20150529 00:00,2124000,2124300,2108200,2111300,101440890,5.695860878664911e-05 +QQQ,20150529 00:00,1106600,1107900,1097900,1100500,22445514,5.695860878664911e-05 +SPY,20150601 00:00,2119500,2123400,2106200,2115400,85386556,5.697662486119003e-05 +QQQ,20150601 00:00,1106300,1107200,1095200,1104200,22638136,5.697662486119003e-05 +SPY,20150602 00:00,2110200,2121900,2102700,2113900,80789780,5.700148509315626e-05 +QQQ,20150602 00:00,1100200,1106100,1094700,1100700,18321906,5.700148509315626e-05 +SPY,20150603 00:00,2119700,2126700,2113400,2119200,78010486,5.7015608613565126e-05 +QQQ,20150603 00:00,1106300,1108100,1101300,1104000,18534156,5.7015608613565126e-05 +SPY,20150604 00:00,2111200,2117700,2097500,2102700,133914464,5.72696480436548e-05 +QQQ,20150604 00:00,1097500,1104800,1092100,1095600,27319592,5.72696480436548e-05 +SPY,20150605 00:00,2099300,2105800,2089800,2097600,97753516,5.711318161531206e-05 +QQQ,20150605 00:00,1094200,1096900,1086300,1093000,20738018,5.711318161531206e-05 +SPY,20150608 00:00,2096300,2098200,2083900,2084800,80415421,5.7297232921858264e-05 +QQQ,20150608 00:00,1092400,1093300,1079700,1081900,22816995,5.7297232921858264e-05 +SPY,20150609 00:00,2084400,2091000,2076900,2084700,92083031,5.7303250699870284e-05 +QQQ,20150609 00:00,1079100,1083900,1072000,1080100,25115832,5.7303250699870284e-05 +SPY,20150610 00:00,2093800,2114000,2093100,2109500,122058028,5.7906277385473393e-05 +QQQ,20150610 00:00,1083700,1098100,1082600,1094900,26938768,5.7906277385473393e-05 +SPY,20150611 00:00,2114900,2120900,2112000,2116300,65279388,5.790152463742558e-05 +QQQ,20150611 00:00,1098500,1101500,1094600,1096500,16036994,5.790152463742558e-05 +SPY,20150612 00:00,2106200,2108400,2096800,2100100,120211197,5.7897198289928705e-05 +QQQ,20150612 00:00,1090900,1093000,1086000,1087500,26026319,5.7897198289928705e-05 +SPY,20150615 00:00,2086200,2094400,2077900,2091100,113025531,5.797548251422959e-05 +QQQ,20150615 00:00,1079500,1083800,1073100,1082100,28151455,5.797548251422959e-05 +SPY,20150616 00:00,2089000,2103500,2087200,2102500,75706432,5.807267562036589e-05 +QQQ,20150616 00:00,1080600,1089800,1080600,1088000,15862189,5.807267562036589e-05 +SPY,20150617 00:00,2105800,2113200,2093900,2105900,118475364,5.808465209647947e-05 +QQQ,20150617 00:00,1089800,1094500,1084300,1091000,21498113,5.808465209647947e-05 +SPY,20150618 00:00,2112300,2133400,2111800,2127800,153435733,5.850312810465882e-05 +QQQ,20150618 00:00,1094800,1108800,1094400,1106900,35321279,5.850312810465882e-05 +SPY,20150619 00:00,2114200,2115500,2104500,2108100,106014352,5.881079165792956e-05 +QQQ,20150619 00:00,1105100,1105700,1098400,1098900,24473983,5.881079165792956e-05 +SPY,20150622 00:00,2119500,2125900,2116500,2118900,61838092,5.8910738469379576e-05 +QQQ,20150622 00:00,1107000,1110300,1104500,1107000,16384186,5.8910738469379576e-05 +SPY,20150623 00:00,2121800,2124400,2115700,2120400,59750874,5.890949802407039e-05 +QQQ,20150623 00:00,1108200,1108900,1103300,1107900,16923201,5.890949802407039e-05 +SPY,20150624 00:00,2117100,2121700,2104800,2105000,77999419,5.904469644644154e-05 +QQQ,20150624 00:00,1106500,1111300,1101900,1102200,14851240,5.904469644644154e-05 +SPY,20150625 00:00,2111300,2112500,2097700,2098600,80464312,5.898746317825862e-05 +QQQ,20150625 00:00,1106700,1107600,1098200,1100000,17711591,5.898746317825862e-05 +SPY,20150626 00:00,2102800,2105800,2091600,2098200,84634171,5.900145163708813e-05 +QQQ,20150626 00:00,1099700,1102200,1088600,1092700,29877470,5.900145163708813e-05 +SPY,20150629 00:00,2080200,2088200,2053300,2054200,173766367,6.10286648453389e-05 +QQQ,20150629 00:00,1080100,1086600,1066400,1066900,47282136,6.10286648453389e-05 +SPY,20150630 00:00,2073200,2073200,2052800,2058500,147775137,6.10539734803845e-05 +QQQ,20150630 00:00,1075100,1077200,1067400,1070700,31102628,6.10539734803845e-05 +SPY,20150701 00:00,2077900,2080300,2065600,2075000,119981651,6.100853612707364e-05 +QQQ,20150701 00:00,1082000,1083400,1074300,1079200,20038829,6.100853612707364e-05 +SPY,20150702 00:00,2080700,2082700,2068200,2073100,91216426,6.10071016752888e-05 +QQQ,20150702 00:00,1082400,1083200,1076200,1079500,16326770,6.10071016752888e-05 +SPY,20150706 00:00,2057400,2076500,2055400,2067200,107837293,6.093668762172965e-05 +QQQ,20150706 00:00,1072300,1083200,1070500,1077000,22725533,6.093668762172965e-05 +SPY,20150707 00:00,2069300,2081600,2041200,2080200,160419568,6.0937191945902575e-05 +QQQ,20150707 00:00,1078300,1080700,1058400,1079700,42260072,6.0937191945902575e-05 +SPY,20150708 00:00,2063400,2067600,2042500,2045300,149493795,6.183637067333328e-05 +QQQ,20150708 00:00,1071400,1073300,1059000,1060900,37130269,6.183637067333328e-05 +SPY,20150709 00:00,2070300,2073500,2048800,2049000,129658638,6.172170342750754e-05 +QQQ,20150709 00:00,1075200,1075900,1060200,1060300,25291503,6.172170342750754e-05 +SPY,20150710 00:00,2072800,2079800,2064900,2074800,117226689,6.238951015790243e-05 +QQQ,20150710 00:00,1074500,1080500,1070600,1076500,24788200,6.238951015790243e-05 +SPY,20150713 00:00,2090000,2099000,2089400,2097700,95163867,6.309480089424382e-05 +QQQ,20150713 00:00,1085700,1096300,1085700,1095400,24304084,6.309480089424382e-05 +SPY,20150714 00:00,2096900,2110500,2096600,2106800,72962870,6.30882586999212e-05 +QQQ,20150714 00:00,1097000,1105600,1096300,1102600,21059019,6.30882586999212e-05 +SPY,20150715 00:00,2107100,2112800,2100500,2106100,88918067,6.305224324087097e-05 +QQQ,20150715 00:00,1104500,1108100,1100700,1103800,25995945,6.305224324087097e-05 +SPY,20150716 00:00,2118200,2123000,2115500,2123000,94346340,6.342240924958952e-05 +QQQ,20150716 00:00,1112600,1119600,1110700,1119400,25961481,6.342240924958952e-05 +SPY,20150717 00:00,2123400,2125500,2118000,2124800,79523761,6.279614290327716e-05 +QQQ,20150717 00:00,1128500,1135900,1126500,1135900,30128315,6.279614290327716e-05 +SPY,20150720 00:00,2127700,2131800,2122100,2125900,59688017,6.218950351530994e-05 +QQQ,20150720 00:00,1138500,1143900,1134800,1139800,23950721,6.218950351530994e-05 +SPY,20150721 00:00,2124500,2127400,2113900,2117500,69759154,6.219382501562706e-05 +QQQ,20150721 00:00,1140400,1142000,1135800,1139100,29742179,6.219382501562706e-05 +SPY,20150722 00:00,2109100,2117700,2108900,2113700,78346222,6.220209831204924e-05 +QQQ,20150722 00:00,1121700,1131700,1121600,1126200,30892117,6.220209831204924e-05 +SPY,20150723 00:00,2115400,2116500,2097500,2101800,82429587,6.225867075669182e-05 +QQQ,20150723 00:00,1127400,1131000,1119100,1122000,21618211,6.225867075669182e-05 +SPY,20150724 00:00,2102500,2103700,2076000,2080000,103477607,6.269648478064604e-05 +QQQ,20150724 00:00,1128000,1128600,1109400,1111000,27426504,6.269648478064604e-05 +SPY,20150727 00:00,2069800,2075500,2062600,2067900,115528777,6.282342149894052e-05 +QQQ,20150727 00:00,1104300,1109400,1099400,1101800,31598559,6.282342149894052e-05 +SPY,20150728 00:00,2078000,2095000,2068000,2093300,112137492,6.32100383201795e-05 +QQQ,20150728 00:00,1106500,1113500,1097900,1111300,32169764,6.32100383201795e-05 +SPY,20150729 00:00,2094400,2110400,2093200,2107700,93976149,6.324978564064723e-05 +QQQ,20150729 00:00,1113700,1117900,1109400,1115500,22891930,6.324978564064723e-05 +SPY,20150730 00:00,2102000,2110200,2094200,2108200,84772348,6.324936292854003e-05 +QQQ,20150730 00:00,1112800,1122600,1106200,1120800,21760664,6.324936292854003e-05 +SPY,20150731 00:00,2114400,2114500,2101600,2105000,87268759,6.160174522358887e-05 +QQQ,20150731 00:00,1124400,1124900,1117200,1119500,19592341,6.160174522358887e-05 +SPY,20150803 00:00,2105300,2105300,2086500,2097900,103970825,6.159272677038666e-05 +QQQ,20150803 00:00,1120000,1122800,1108600,1116000,22628113,6.159272677038666e-05 +SPY,20150804 00:00,2097000,2102400,2088000,2093800,75432078,6.143963737245898e-05 +QQQ,20150804 00:00,1115600,1117400,1109300,1113900,20301727,6.143963737245898e-05 +SPY,20150805 00:00,2104000,2113100,2097300,2100700,76059680,6.118922805307051e-05 +QQQ,20150805 00:00,1120100,1130000,1118800,1122500,26749046,6.118922805307051e-05 +SPY,20150806 00:00,2102700,2104100,2076500,2083500,102560139,6.175898810089624e-05 +QQQ,20150806 00:00,1123200,1125000,1099500,1104500,38108680,6.175898810089624e-05 +SPY,20150807 00:00,2081600,2083400,2068700,2079500,100231197,6.168510036736511e-05 +QQQ,20150807 00:00,1101800,1105700,1094000,1103100,26293988,6.168510036736511e-05 +SPY,20150810 00:00,2092900,2106700,2092800,2105700,71084411,6.19258322125227e-05 +QQQ,20150810 00:00,1110500,1118100,1110000,1115700,19112128,6.19258322125227e-05 +SPY,20150811 00:00,2089600,2094700,2077600,2086700,105506895,6.237166364164322e-05 +QQQ,20150811 00:00,1109700,1114100,1095300,1101400,32092237,6.237166364164322e-05 +SPY,20150812 00:00,2071400,2091400,2053600,2089200,161327951,6.237462329009315e-05 +QQQ,20150812 00:00,1093700,1107300,1082200,1105200,38597869,6.237462329009315e-05 +SPY,20150813 00:00,2087500,2095500,2080200,2086600,83612688,6.21235250530104e-05 +QQQ,20150813 00:00,1106800,1111600,1101000,1103400,21330805,6.21235250530104e-05 +SPY,20150814 00:00,2084300,2095000,2082600,2094200,64655468,6.205985038916277e-05 +QQQ,20150814 00:00,1101000,1106700,1098600,1105100,16264603,6.205985038916277e-05 +SPY,20150817 00:00,2087300,2105900,2081600,2105900,72957322,6.223263159449416e-05 +QQQ,20150817 00:00,1102300,1114600,1099600,1114300,20310989,6.223263159449416e-05 +SPY,20150818 00:00,2102900,2106800,2097000,2099800,64867959,6.207877693232575e-05 +QQQ,20150818 00:00,1112800,1113700,1107100,1108600,13174353,6.207877693232575e-05 +SPY,20150819 00:00,2091000,2100100,2073500,2083200,158175490,6.220156686297352e-05 +QQQ,20150819 00:00,1105000,1111000,1094900,1101300,39140424,6.220156686297352e-05 +SPY,20150820 00:00,2065400,2071700,2039100,2039700,168829568,6.45652977710961e-05 +QQQ,20150820 00:00,1091400,1094600,1070700,1070800,52999826,6.45652977710961e-05 +SPY,20150821 00:00,2018100,2029200,1975400,1978300,302127692,6.983098793736317e-05 +QQQ,20150821 00:00,1055500,1064700,1024000,1024000,85631198,6.983098793736317e-05 +SPY,20150824 00:00,1874900,1958400,1829500,1895000,422467681,7.629868857205974e-05 +QQQ,20150824 00:00,941700,1025300,847400,984600,134472193,7.629868857205974e-05 +SPY,20150825 00:00,1954500,1954500,1870600,1872700,309260532,7.639844170101083e-05 +QQQ,20150825 00:00,1021100,1027400,980400,980900,66062248,7.639844170101083e-05 +SPY,20150826 00:00,1922100,1947900,1883700,1944600,286850037,8.411575464770609e-05 +QQQ,20150826 00:00,1009500,1032300,989300,1030300,94961536,8.411575464770609e-05 +SPY,20150827 00:00,1970500,1994100,1952100,1992700,223431181,8.659135829301062e-05 +QQQ,20150827 00:00,1045300,1057000,1032800,1056400,57986325,8.659135829301062e-05 +SPY,20150828 00:00,1985000,1998300,1979200,1992800,125935492,8.658812520065832e-05 +QQQ,20150828 00:00,1050800,1059900,1048500,1056200,43761962,8.658812520065832e-05 +SPY,20150831 00:00,1981400,1991200,1970200,1976700,125137509,8.695658564780099e-05 +QQQ,20150831 00:00,1050300,1056100,1040500,1043100,35157391,8.695658564780099e-05 +SPY,20150901 00:00,1930700,1947600,1907300,1917700,218973748,9.06870548348031e-05 +QQQ,20150901 00:00,1016800,1032900,1006300,1010500,62227907,9.06870548348031e-05 +SPY,20150902 00:00,1946900,1954400,1924300,1954100,135717247,9.28077606613012e-05 +QQQ,20150902 00:00,1028900,1039100,1017000,1039000,37770603,9.28077606613012e-05 +SPY,20150903 00:00,1962500,1980500,1949600,1955500,132209917,9.278595607123786e-05 +QQQ,20150903 00:00,1043200,1050200,1031000,1033900,40175421,9.278595607123786e-05 +SPY,20150904 00:00,1928800,1938600,1916100,1925900,156708531,9.342230984014464e-05 +QQQ,20150904 00:00,1020000,1028400,1015900,1021600,41189839,9.342230984014464e-05 +SPY,20150908 00:00,1959700,1976100,1951800,1974300,101013620,9.625027443823568e-05 +QQQ,20150908 00:00,1041300,1051700,1036900,1050400,34480814,9.625027443823568e-05 +SPY,20150909 00:00,1993300,1994600,1943500,1947900,124972739,9.664605269488593e-05 +QQQ,20150909 00:00,1062800,1063100,1035900,1038600,40940102,9.664605269488593e-05 +SPY,20150910 00:00,1945000,1972200,1942500,1958500,129752786,9.675689714464948e-05 +QQQ,20150910 00:00,1037500,1056800,1036200,1049900,40846811,9.675689714464948e-05 +SPY,20150911 00:00,1953200,1967600,1945400,1967400,99026646,9.685787375744209e-05 +QQQ,20150911 00:00,1045400,1055700,1042100,1055700,25336262,9.685787375744209e-05 +SPY,20150914 00:00,1969500,1970000,1954400,1960100,67361661,9.67807301269964e-05 +QQQ,20150914 00:00,1059800,1059800,1048500,1052500,18237470,9.67807301269964e-05 +SPY,20150915 00:00,1965900,1989900,1960900,1984600,101089338,9.733060115028773e-05 +QQQ,20150915 00:00,1055000,1068200,1051100,1064900,28310624,9.733060115028773e-05 +SPY,20150916 00:00,1988200,2004000,1984100,2001800,87778654,9.726183659917945e-05 +QQQ,20150916 00:00,1065700,1071900,1061400,1070900,29704071,9.726183659917945e-05 +SPY,20150917 00:00,1999600,2028400,1992800,1997300,222001098,9.725652208114895e-05 +QQQ,20150917 00:00,1070000,1087200,1066400,1071300,50633919,9.725652208114895e-05 +SPY,20150918 00:00,1957400,1975600,1949600,1954500,187553370,9.854463747383335e-05 +QQQ,20150918 00:00,1052500,1066000,1051700,1053500,38704240,9.854463747383335e-05 +SPY,20150921 00:00,1964500,1976800,1952200,1964600,89174988,9.853301991215842e-05 +QQQ,20150921 00:00,1059400,1065400,1047400,1056800,31943013,9.853301991215842e-05 +SPY,20150922 00:00,1939000,1944600,1925700,1939100,126149228,9.902446092037705e-05 +QQQ,20150922 00:00,1040500,1044200,1031300,1041000,41367236,9.902446092037705e-05 +SPY,20150923 00:00,1941300,1946700,1929100,1936000,84630237,9.895377375073766e-05 +QQQ,20150923 00:00,1044000,1046600,1036400,1041800,19982982,9.895377375073766e-05 +SPY,20150924 00:00,1921300,1934500,1905600,1929000,138435508,9.86768044528567e-05 +QQQ,20150924 00:00,1031600,1041900,1022700,1038000,32290399,9.86768044528567e-05 +SPY,20150925 00:00,1946100,1950000,1918100,1928500,123731291,9.731273354865336e-05 +QQQ,20150925 00:00,1049500,1050100,1022800,1029200,40582724,9.731273354865336e-05 +SPY,20150928 00:00,1917500,1919000,1876400,1880100,140388758,9.983061424517709e-05 +QQQ,20150928 00:00,1024200,1025300,996900,999900,40162084,9.983061424517709e-05 +SPY,20150929 00:00,1882400,1897400,1869300,1881200,133559566,9.980419854854627e-05 +QQQ,20150929 00:00,1002100,1012600,987500,994700,42893667,9.980419854854627e-05 +SPY,20150930 00:00,1904000,1918200,1894400,1916300,138923111,0.00010152661480581707 +QQQ,20150930 00:00,1008900,1018700,1005000,1017600,39210176,0.00010152661480581707 +SPY,20151001 00:00,1920300,1924900,1898200,1921300,120401494,0.00010070504720891347 +QQQ,20151001 00:00,1019700,1022300,1005900,1022200,39333463,0.00010070504720891347 +SPY,20151002 00:00,1897500,1950000,1891200,1950000,171195207,0.00010172785210707897 +QQQ,20151002 00:00,1008400,1040100,1004800,1040100,50423188,0.00010172785210707897 +SPY,20151005 00:00,1964700,1987400,1963300,1984700,113013522,0.00010230776165784246 +QQQ,20151005 00:00,1047400,1057800,1045500,1055000,30317059,0.00010230776165784246 +SPY,20151006 00:00,1982700,1989800,1970000,1977900,98202913,0.0001023669119157758 +QQQ,20151006 00:00,1052600,1056000,1041800,1050000,30459249,0.0001023669119157758 +SPY,20151007 00:00,1988500,1998300,1974900,1994100,109575864,0.0001016534574940567 +QQQ,20151007 00:00,1056300,1058600,1042900,1056300,35204895,0.0001016534574940567 +SPY,20151008 00:00,1989600,2015500,1985900,2012100,135414276,0.00010049033411935059 +QQQ,20151008 00:00,1052500,1062300,1042100,1060500,46622971,0.00010049033411935059 +SPY,20151009 00:00,2014000,2019000,2005800,2013300,86171310,9.917431365261015e-05 +QQQ,20151009 00:00,1061200,1067300,1058100,1065300,22249821,9.917431365261015e-05 +SPY,20151012 00:00,2014300,2017600,2009100,2015200,49928236,9.801726137007374e-05 +QQQ,20151012 00:00,1067500,1069900,1063500,1067900,15543419,9.801726137007374e-05 +SPY,20151013 00:00,2006300,2021600,2000500,2002500,73963310,9.713408557112237e-05 +QQQ,20151013 00:00,1061900,1072600,1060000,1061000,25378996,9.713408557112237e-05 +SPY,20151014 00:00,2001600,2008700,1989400,1992900,87771536,9.718159312915399e-05 +QQQ,20151014 00:00,1061100,1066300,1054900,1059300,28844025,9.718159312915399e-05 +SPY,20151015 00:00,2000500,2023500,1996400,2023500,115541959,9.790857484912422e-05 +QQQ,20151015 00:00,1063300,1076800,1061800,1076700,32971499,9.790857484912422e-05 +SPY,20151016 00:00,2028200,2032800,2019200,2032700,99255980,9.793210155356619e-05 +QQQ,20151016 00:00,1078900,1081800,1073800,1081200,23317566,9.793210155356619e-05 +SPY,20151019 00:00,2025300,2033700,2021300,2033700,69118218,9.736533293253098e-05 +QQQ,20151019 00:00,1079800,1088100,1077400,1087400,22272493,9.736533293253098e-05 +SPY,20151020 00:00,2028600,2038400,2025500,2031100,69151520,9.686742628592311e-05 +QQQ,20151020 00:00,1085400,1087700,1078100,1081800,20605910,9.686742628592311e-05 +SPY,20151021 00:00,2036400,2037900,2016500,2018500,91935632,9.503247556022475e-05 +QQQ,20151021 00:00,1087500,1088400,1074800,1075200,27188298,9.503247556022475e-05 +SPY,20151022 00:00,2030000,2055100,2028100,2052600,150245339,9.618200765140987e-05 +QQQ,20151022 00:00,1085100,1098000,1081800,1097100,34971791,9.618200765140987e-05 +SPY,20151023 00:00,2072400,2079500,2063000,2075100,122715586,9.669365183249132e-05 +QQQ,20151023 00:00,1126700,1132400,1120700,1127800,45250993,9.669365183249132e-05 +SPY,20151026 00:00,2072700,2073700,2065600,2070000,60360403,9.646969857207563e-05 +QQQ,20151026 00:00,1127100,1130700,1122700,1128500,24142346,9.646969857207563e-05 +SPY,20151027 00:00,2062000,2070000,2058000,2066000,68555036,9.64578912936496e-05 +QQQ,20151027 00:00,1125300,1132400,1125200,1130800,26939008,9.64578912936496e-05 +SPY,20151028 00:00,2070000,2089700,2062100,2089500,120529088,9.615164247207872e-05 +QQQ,20151028 00:00,1132700,1140200,1123400,1140200,38078165,9.615164247207872e-05 +SPY,20151029 00:00,2083600,2092700,2082100,2088300,76891203,9.612873026988962e-05 +QQQ,20151029 00:00,1134900,1140300,1133900,1138400,23226884,9.612873026988962e-05 +SPY,20151030 00:00,2090700,2094400,2078300,2079300,106285063,9.618226573778041e-05 +QQQ,20151030 00:00,1139200,1140800,1133100,1133300,23161165,9.618226573778041e-05 +SPY,20151102 00:00,2083600,2106200,2081800,2103900,76512481,9.60872800555975e-05 +QQQ,20151102 00:00,1136300,1147400,1133900,1146100,21457203,9.60872800555975e-05 +SPY,20151103 00:00,2099800,2116600,2097000,2110000,88875760,9.611558527498054e-05 +QQQ,20151103 00:00,1143800,1154200,1142100,1150100,19280811,9.611558527498054e-05 +SPY,20151104 00:00,2113700,2114900,2097300,2103600,85726190,9.606431841587079e-05 +QQQ,20151104 00:00,1153800,1154700,1145400,1150200,26568612,9.606431841587079e-05 +SPY,20151105 00:00,2104400,2109800,2090900,2101500,70361947,9.609105986527972e-05 +QQQ,20151105 00:00,1151600,1153900,1141100,1147100,22367646,9.609105986527972e-05 +SPY,20151106 00:00,2097400,2103200,2084700,2100400,88269574,9.605090103948818e-05 +QQQ,20151106 00:00,1145100,1149200,1137700,1147900,26724607,9.605090103948818e-05 +SPY,20151109 00:00,2093300,2094900,2069500,2080800,116567529,9.647668227224582e-05 +QQQ,20151109 00:00,1143900,1145100,1128700,1135700,30580591,9.647668227224582e-05 +SPY,20151110 00:00,2075400,2086000,2071900,2085600,66317971,9.641368242249849e-05 +QQQ,20151110 00:00,1129400,1133900,1126300,1132800,32966364,9.641368242249849e-05 +SPY,20151111 00:00,2089000,2089400,2076700,2077400,61997358,9.643313346391789e-05 +QQQ,20151111 00:00,1136000,1141400,1129600,1131400,21495927,9.643313346391789e-05 +SPY,20151112 00:00,2065100,2070600,2048200,2049000,108620680,9.699567151637463e-05 +QQQ,20151112 00:00,1126800,1132300,1119600,1120400,28620767,9.699567151637463e-05 +SPY,20151113 00:00,2043600,2046700,2024400,2025300,138508160,9.790339668300003e-05 +QQQ,20151113 00:00,1115700,1116900,1097800,1098400,48163448,9.790339668300003e-05 +SPY,20151116 00:00,2023000,2056500,2021900,2056500,98680096,9.87606680795646e-05 +QQQ,20151116 00:00,1097300,1114300,1094900,1114200,31274348,9.87606680795646e-05 +SPY,20151117 00:00,2059700,2070300,2048800,2054000,106324660,9.876697696270565e-05 +QQQ,20151117 00:00,1116100,1122900,1112100,1114900,27471264,9.876697696270565e-05 +SPY,20151118 00:00,2060300,2089000,2060100,2086800,102442425,9.979572369822093e-05 +QQQ,20151118 00:00,1119400,1137400,1118300,1136300,31114270,9.979572369822093e-05 +SPY,20151119 00:00,2085500,2090500,2082000,2085400,76035735,9.97609755610101e-05 +QQQ,20151119 00:00,1136900,1142300,1134900,1137100,23931227,9.97609755610101e-05 +SPY,20151120 00:00,2094700,2101200,2088600,2093800,81212191,9.98333653661327e-05 +QQQ,20151120 00:00,1142500,1145700,1141400,1144800,19260571,9.98333653661327e-05 +SPY,20151123 00:00,2094000,2099800,2085300,2090900,60019105,9.982095361373294e-05 +QQQ,20151123 00:00,1145200,1149400,1136600,1141500,19646578,9.982095361373294e-05 +SPY,20151124 00:00,2078700,2098300,2074100,2093700,87434656,9.974031029756467e-05 +QQQ,20151124 00:00,1134100,1143200,1128400,1140500,24969108,9.974031029756467e-05 +SPY,20151125 00:00,2094800,2097400,2090100,2093000,47935311,9.974011429329441e-05 +QQQ,20151125 00:00,1142200,1143600,1139100,1141500,12992442,9.974011429329441e-05 +SPY,20151127 00:00,2094000,2098000,2088700,2095300,29568841,9.970052746508281e-05 +QQQ,20151127 00:00,1143900,1145400,1139300,1143100,7849771,9.970052746508281e-05 +SPY,20151130 00:00,2097900,2098900,2085600,2086900,88383711,9.978523131356878e-05 +QQQ,20151130 00:00,1146500,1146500,1136500,1140200,21683418,9.978523131356878e-05 +SPY,20151201 00:00,2094200,2108200,2091200,2106800,88004669,9.982582605632919e-05 +QQQ,20151201 00:00,1144800,1151600,1143400,1151600,25534944,9.982582605632919e-05 +SPY,20151202 00:00,2106000,2110000,2082300,2085400,97535582,0.00010000668449135415 +QQQ,20151202 00:00,1152500,1157500,1142800,1144500,20645950,0.00010000668449135415 +SPY,20151203 00:00,2089000,2091500,2047600,2055800,136133021,0.00010096539705020948 +QQQ,20151203 00:00,1147600,1149600,1118500,1125100,35431495,0.00010096539705020948 +SPY,20151204 00:00,2061000,2099700,2059400,2096600,163843653,0.00010277614834476926 +QQQ,20151204 00:00,1128500,1153300,1126200,1151400,34604736,0.00010277614834476926 +SPY,20151207 00:00,2092000,2092400,2072000,2082700,91156641,0.0001029095549360813 +QQQ,20151207 00:00,1152200,1152900,1140700,1146200,24149941,0.0001029095549360813 +SPY,20151208 00:00,2064800,2080400,2057800,2069900,88063594,0.00010271551240984725 +QQQ,20151208 00:00,1134200,1150000,1133800,1146300,26535184,0.00010271551240984725 +SPY,20151209 00:00,2062000,2086800,2041800,2053300,141598569,0.00010322331256927101 +QQQ,20151209 00:00,1141300,1147600,1122000,1128900,42158097,0.00010322331256927101 +SPY,20151210 00:00,2054400,2074300,2051500,2058600,104748495,0.00010223160289833598 +QQQ,20151210 00:00,1131400,1141600,1128100,1134000,25002095,0.00010223160289833598 +SPY,20151211 00:00,2033800,2041400,2015100,2018800,179403932,0.00010394746311517964 +QQQ,20151211 00:00,1120900,1123800,1107200,1107900,49050061,0.00010394746311517964 +SPY,20151214 00:00,2021000,2030000,1999700,2030000,149245578,0.00010338211194722212 +QQQ,20151214 00:00,1109400,1116800,1093800,1116300,42789964,0.00010338211194722212 +SPY,20151215 00:00,2046900,2061100,2045500,2050600,136119948,0.00010329825277231787 +QQQ,20151215 00:00,1126600,1132800,1121700,1123100,42768159,0.00010329825277231787 +SPY,20151216 00:00,2063700,2083900,2048300,2080200,173480390,0.00010356610739320322 +QQQ,20151216 00:00,1130900,1141600,1118900,1139800,41588672,0.00010356610739320322 +SPY,20151217 00:00,2083700,2084800,2048400,2048600,153094246,0.00010311693559853138 +QQQ,20151217 00:00,1144800,1144800,1123000,1123200,38526481,0.00010311693559853138 +SPY,20151218 00:00,2027700,2028900,1999800,2000200,210818406,0.00010287606382875287 +QQQ,20151218 00:00,1116300,1118800,1098300,1098300,47556795,0.00010287606382875287 +SPY,20151221 00:00,2014300,2018800,2000900,2017000,85939272,0.00010324446875346516 +QQQ,20151221 00:00,1109000,1110700,1100500,1110500,24164382,0.00010324446875346516 +SPY,20151222 00:00,2027000,2038500,2015500,2035600,94477624,0.00010342699175554387 +QQQ,20151222 00:00,1116400,1119400,1110500,1117800,24205862,0.00010342699175554387 +SPY,20151223 00:00,2047000,2060700,2045800,2060500,100768218,0.00010379302750352958 +QQQ,20151223 00:00,1123600,1126900,1121600,1126100,23531296,0.00010379302750352958 +SPY,20151224 00:00,2057200,2063300,2054300,2056500,37303088,0.00010379672769940682 +QQQ,20151224 00:00,1126100,1129000,1125400,1125900,10830020,0.00010379672769940682 +SPY,20151228 00:00,2048600,2052500,2039500,2052200,61014906,0.00010372253154878915 +QQQ,20151228 00:00,1122600,1125500,1115100,1125300,18294658,0.00010372253154878915 +SPY,20151229 00:00,2065300,2077900,2064700,2074000,82484583,0.00010437534922305942 +QQQ,20151229 00:00,1132000,1145400,1131400,1143000,25563474,0.00010437534922305942 +SPY,20151230 00:00,2070900,2072100,2057600,2059300,56653819,0.00010449020608940671 +QQQ,20151230 00:00,1142000,1142400,1132600,1132700,16521959,0.00010449020608940671 +SPY,20151231 00:00,2051700,2058900,2038900,2038900,88561987,0.00010456795590413844 +QQQ,20151231 00:00,1128900,1130800,1118400,1118600,27209868,0.00010456795590413844 +SPY,20160104 00:00,2005300,2010300,1985900,2010100,194050675,0.00010576940469195884 +QQQ,20160104 00:00,1094500,1096000,1081200,1095000,44020950,0.00010576940469195884 +SPY,20160105 00:00,2013900,2019000,2000500,2013500,95287082,0.00010468748292859612 +QQQ,20160105 00:00,1100400,1101800,1088000,1093100,34272879,0.00010468748292859612 +SPY,20160106 00:00,1983300,2000500,1976000,1988500,125322778,0.00010465259367912276 +QQQ,20160106 00:00,1074100,1088900,1074100,1082600,38920777,0.00010465259367912276 +SPY,20160107 00:00,1953200,1974300,1935900,1939900,186961947,0.00010709623701193511 +QQQ,20160107 00:00,1059500,1072900,1048100,1048700,54364285,0.00010709623701193511 +SPY,20160108 00:00,1952100,1958500,1915800,1919500,167303627,0.0001060842397926401 +QQQ,20160108 00:00,1056300,1062900,1039000,1040100,56883349,0.0001060842397926401 +SPY,20160111 00:00,1930500,1934000,1898300,1921100,170857466,0.00010588074436569659 +QQQ,20160111 00:00,1047500,1050600,1027300,1043300,44653532,0.00010588074436569659 +SPY,20160112 00:00,1938500,1945500,1911400,1936600,149409008,0.0001059436877180884 +QQQ,20160112 00:00,1053300,1060700,1040800,1055400,43529730,0.0001059436877180884 +SPY,20160113 00:00,1945300,1948600,1883800,1888700,188087693,0.00010932826488418641 +QQQ,20160113 00:00,1059700,1062200,1017400,1019000,60799713,0.00010932826488418641 +SPY,20160114 00:00,1895500,1932600,1876600,1918900,190012996,0.00011056800404774536 +QQQ,20160114 00:00,1023600,1049700,1006700,1040700,65779962,0.00011056800404774536 +SPY,20160115 00:00,1867900,1887600,1855200,1878300,270477512,0.00011267315742077728 +QQQ,20160115 00:00,1006200,1019400,995100,1008400,78400205,0.00011267315742077728 +SPY,20160119 00:00,1899500,1901100,1862100,1880600,162816196,0.00011205549005526087 +QQQ,20160119 00:00,1022100,1023700,998800,1010600,49036071,0.00011205549005526087 +SPY,20160120 00:00,1850000,1874900,1810200,1858100,227085634,0.00011212323997102243 +QQQ,20160120 00:00,994700,1018300,972600,1007500,68557035,0.00011212323997102243 +SPY,20160121 00:00,1861900,1888700,1846500,1867000,146780065,0.00011203867696924585 +QQQ,20160121 00:00,1011800,1023400,998200,1008500,45952520,0.00011203867696924585 +SPY,20160122 00:00,1897800,1907600,1888800,1905500,138442684,0.00011334225664377706 +QQQ,20160122 00:00,1028800,1038100,1025300,1037700,36278141,0.00011334225664377706 +SPY,20160125 00:00,1899100,1901500,1874100,1876300,106621985,0.00011427656602610584 +QQQ,20160125 00:00,1034000,1039900,1021400,1022300,33372429,0.00011427656602610584 +SPY,20160126 00:00,1884400,1905300,1880300,1902400,122035268,0.0001147963924966811 +QQQ,20160126 00:00,1026600,1035900,1017600,1031500,30207695,0.0001147963924966811 +SPY,20160127 00:00,1895800,1915600,1870600,1881400,146285880,0.00011456048208963811 +QQQ,20160127 00:00,1025800,1029900,1001500,1005800,43080545,0.00011456048208963811 +SPY,20160128 00:00,1900000,1902000,1871700,1891700,112813076,0.00011461199912367194 +QQQ,20160128 00:00,1022500,1022900,1002700,1020000,37061022,0.00011461199912367194 +SPY,20160129 00:00,1900300,1938700,1898800,1938700,168702015,0.00011631922442417176 +QQQ,20160129 00:00,1019700,1041700,1019400,1041300,45849215,0.00011631922442417176 +SPY,20160201 00:00,1925000,1945800,1918500,1936500,110539586,0.0001159141729466389 +QQQ,20160201 00:00,1036300,1048000,1032300,1044100,28099108,0.0001159141729466389 +SPY,20160202 00:00,1919000,1919600,1895400,1901100,155214611,0.00011706986836026613 +QQQ,20160202 00:00,1039300,1039700,1018400,1021500,40295051,0.00011706986836026613 +SPY,20160203 00:00,1913700,1917800,1871100,1912300,163410140,0.00011638984806159824 +QQQ,20160203 00:00,1028300,1028300,998800,1016600,49835631,0.00011638984806159824 +SPY,20160204 00:00,1907200,1927400,1899600,1915300,108163692,0.00011637611648279837 +QQQ,20160204 00:00,1013900,1024500,1004400,1016500,38761193,0.00011637611648279837 +SPY,20160205 00:00,1909700,1910800,1872000,1879800,146276261,0.00011853102932705085 +QQQ,20160205 00:00,1012700,1013200,977200,981200,59948909,0.00011853102932705085 +SPY,20160208 00:00,1857500,1861200,1828100,1853500,154383523,0.00011928743566993066 +QQQ,20160208 00:00,962900,970500,948400,966200,76925794,0.00011928743566993066 +SPY,20160209 00:00,1833800,1869300,1832100,1853500,146059137,0.00011923494327567921 +QQQ,20160209 00:00,953300,977800,951800,963200,61525623,0.00011923494327567921 +SPY,20160210 00:00,1864400,1883200,1851200,1853100,117266734,0.00011855752415312072 +QQQ,20160210 00:00,974300,986900,966200,966900,45562783,0.00011855752415312072 +SPY,20160211 00:00,1823800,1841000,1810900,1830300,163939145,0.00011859651187642997 +QQQ,20160211 00:00,954600,973200,951900,965500,58684176,0.00011859651187642997 +SPY,20160212 00:00,1849300,1866500,1839700,1866500,104243751,0.00011936585602941328 +QQQ,20160212 00:00,976400,981200,967300,980200,44003341,0.00011936585602941328 +SPY,20160216 00:00,1887800,1898100,1876400,1898100,96542669,0.00012077693086066756 +QQQ,20160216 00:00,994700,1002300,988500,1002300,32545076,0.00012077693086066756 +SPY,20160217 00:00,1911200,1933200,1910100,1928700,118038289,0.00012225984314864045 +QQQ,20160217 00:00,1009600,1026400,1007000,1025000,36522271,0.00012225984314864045 +SPY,20160218 00:00,1932200,1932600,1917200,1920500,90826534,0.00012243642487144254 +QQQ,20160218 00:00,1028200,1028300,1012000,1013300,32951179,0.00012243642487144254 +SPY,20160219 00:00,1911500,1921800,1904500,1920000,98439467,0.00012244723442885426 +QQQ,20160219 00:00,1008400,1019400,1006200,1016300,25162410,0.00012244723442885426 +SPY,20160222 00:00,1939000,1949500,1938000,1948300,88924304,0.00012325106904446486 +QQQ,20160222 00:00,1025800,1033800,1024800,1032800,21959855,0.00012325106904446486 +SPY,20160223 00:00,1939900,1943200,1921800,1923300,94280136,0.00012406660037362748 +QQQ,20160223 00:00,1026800,1029600,1015100,1015800,26878182,0.00012406660037362748 +SPY,20160224 00:00,1906200,1935300,1893200,1932300,125633728,0.0001242481288101076 +QQQ,20160224 00:00,1003900,1026800,997700,1025500,37544135,0.0001242481288101076 +SPY,20160225 00:00,1937300,1955500,1928300,1955500,98561286,0.00012473025028428002 +QQQ,20160225 00:00,1027600,1035600,1018400,1035600,27092847,0.00012473025028428002 +SPY,20160226 00:00,1965200,1966800,1949000,1951000,111611131,0.0001247576208539302 +QQQ,20160226 00:00,1043500,1043600,1031900,1034300,28087183,0.0001247576208539302 +SPY,20160229 00:00,1950800,1962300,1934400,1935600,101903944,0.0001249740058267869 +QQQ,20160229 00:00,1033300,1041000,1025000,1025000,24891677,0.0001249740058267869 +SPY,20160301 00:00,1950500,1982100,1944600,1982100,120346342,0.00012784812382752824 +QQQ,20160301 00:00,1034800,1057900,1031600,1057900,34994483,0.00012784812382752824 +SPY,20160302 00:00,1977000,1990600,1972500,1990300,89104136,0.00012778339225207034 +QQQ,20160302 00:00,1056600,1058500,1050100,1058300,26887677,0.00012778339225207034 +SPY,20160303 00:00,1987000,1997900,1981100,1997700,89517942,0.00012769132021721592 +QQQ,20160303 00:00,1057200,1057500,1048700,1056300,22589009,0.00012769132021721592 +SPY,20160304 00:00,2000000,2013500,1990300,2003600,106711620,0.00012768520169930892 +QQQ,20160304 00:00,1057500,1063500,1049700,1056700,27500528,0.00012768520169930892 +SPY,20160307 00:00,1994000,2010700,1992700,2006300,83187387,0.00012701066518064217 +QQQ,20160307 00:00,1051300,1057400,1042700,1050200,24615843,0.00012701066518064217 +SPY,20160308 00:00,1993000,1999200,1982200,1983600,108213232,0.0001273296942005488 +QQQ,20160308 00:00,1043000,1052100,1039700,1041500,27109086,0.0001273296942005488 +SPY,20160309 00:00,1993600,1997900,1984300,1994100,80085909,0.0001262824222918957 +QQQ,20160309 00:00,1045400,1048300,1039700,1048200,25609559,0.0001262824222918957 +SPY,20160310 00:00,1999000,2010500,1973800,1995400,128146107,0.0001262225258188882 +QQQ,20160310 00:00,1052600,1058700,1033100,1046600,38607172,0.0001262225258188882 +SPY,20160311 00:00,2012500,2028100,2011300,2027600,115060016,0.0001270107323198137 +QQQ,20160311 00:00,1057900,1064900,1054600,1064900,28959137,0.0001270107323198137 +SPY,20160314 00:00,2022000,2030300,2017700,2025300,64367388,0.00012689325972944286 +QQQ,20160314 00:00,1060900,1069200,1060600,1066700,22704436,0.00012689325972944286 +SPY,20160315 00:00,2013200,2022000,2010600,2022000,83697700,0.00012620025826201472 +QQQ,20160315 00:00,1062900,1067500,1059500,1066300,25498145,0.00012620025826201472 +SPY,20160316 00:00,2016200,2038200,2015600,2033900,112017848,0.00012642712790258308 +QQQ,20160316 00:00,1063700,1078600,1063400,1075800,25722466,0.00012642712790258308 +SPY,20160317 00:00,2032600,2052200,2027700,2047900,116797254,0.00012595439474995376 +QQQ,20160317 00:00,1072700,1077700,1068700,1075200,24837678,0.00012595439474995376 +SPY,20160318 00:00,2042000,2047800,2038000,2045200,118003097,0.00012598630588661204 +QQQ,20160318 00:00,1074600,1076300,1068000,1073700,34702877,0.00012598630588661204 +SPY,20160321 00:00,2041100,2049400,2038100,2046900,65685245,0.00012592477225893128 +QQQ,20160321 00:00,1071800,1078900,1071200,1077900,14364000,0.00012592477225893128 +SPY,20160322 00:00,2037400,2052300,2035700,2046200,83178482,0.0001259046823128771 +QQQ,20160322 00:00,1071800,1083700,1071700,1081200,17551682,0.0001259046823128771 +SPY,20160323 00:00,2041100,2043300,2030100,2032200,69049169,0.00012604785468187088 +QQQ,20160323 00:00,1079100,1079900,1069900,1072300,19249855,0.00012604785468187088 +SPY,20160324 00:00,2019800,2031600,2017400,2031100,71333708,0.00012470778997576414 +QQQ,20160324 00:00,1067100,1072900,1065400,1072600,16577767,0.00012470778997576414 +SPY,20160328 00:00,2036200,2038500,2027100,2032700,53066451,0.00012466904126425096 +QQQ,20160328 00:00,1075600,1075800,1069200,1071100,13193281,0.00012466904126425096 +SPY,20160329 00:00,2027500,2052300,2024100,2052300,83887128,0.00012524204195312738 +QQQ,20160329 00:00,1069100,1089000,1067400,1088300,26809882,0.00012524204195312738 +SPY,20160330 00:00,2063500,2068700,2055900,2061000,76192165,0.0001247780943728855 +QQQ,20160330 00:00,1094800,1100400,1091300,1093600,22560356,0.0001247780943728855 +SPY,20160331 00:00,2058700,2064100,2053300,2055600,76146466,0.00012442109424293035 +QQQ,20160331 00:00,1092800,1096900,1090400,1092000,18504785,0.00012442109424293035 +SPY,20160401 00:00,2043500,2071400,2039900,2069100,92124925,0.00012461219027442926 +QQQ,20160401 00:00,1085400,1104000,1083900,1103600,23785449,0.00012461219027442926 +SPY,20160404 00:00,2068400,2070700,2058900,2062900,56532432,0.00012465653177149973 +QQQ,20160404 00:00,1103600,1104400,1096800,1099400,15263058,0.00012465653177149973 +SPY,20160405 00:00,2046400,2052500,2039000,2041400,81083900,0.00012484613750402324 +QQQ,20160405 00:00,1090900,1095000,1087400,1088800,17405013,0.00012484613750402324 +SPY,20160406 00:00,2042700,2064900,2039800,2064600,80656346,0.0001255589848876239 +QQQ,20160406 00:00,1089900,1107100,1089900,1106700,22246888,0.0001255589848876239 +SPY,20160407 00:00,2051800,2055600,2030900,2038900,102193798,0.00012617292006463982 +QQQ,20160407 00:00,1100300,1102200,1086100,1090800,27300196,0.00012617292006463982 +SPY,20160408 00:00,2053200,2058400,2038800,2044800,85480012,0.0001260563123851597 +QQQ,20160408 00:00,1097600,1100200,1086200,1090000,20874722,0.0001260563123851597 +SPY,20160411 00:00,2052300,2060700,2039100,2039900,73916328,0.00012600476348206168 +QQQ,20160411 00:00,1094700,1100200,1085900,1086000,22181556,0.00012600476348206168 +SPY,20160412 00:00,2042000,2062500,2037000,2059900,100704771,0.00012627824237939445 +QQQ,20160412 00:00,1086800,1097200,1080200,1095100,25024412,0.00012627824237939445 +SPY,20160413 00:00,2070200,2081000,2068400,2080400,85422095,0.00012680213671008745 +QQQ,20160413 00:00,1103500,1110800,1102100,1109100,22696366,0.00012680213671008745 +SPY,20160414 00:00,2080300,2086000,2076000,2080200,55930929,0.000126689931161712 +QQQ,20160414 00:00,1109300,1113300,1106200,1109200,16622024,0.000126689931161712 +SPY,20160415 00:00,2080000,2081100,2074000,2078000,69798928,0.00012669930840293963 +QQQ,20160415 00:00,1108300,1110600,1103600,1106400,18678370,0.00012669930840293963 +SPY,20160418 00:00,2071100,2092700,2070000,2092500,69184743,0.00012611222524845322 +QQQ,20160418 00:00,1103200,1112600,1102500,1112300,15549236,0.00012611222524845322 +SPY,20160419 00:00,2097000,2102000,2089400,2099100,81005196,0.00012550919784309992 +QQQ,20160419 00:00,1114400,1114400,1098800,1105500,33797563,0.00012550919784309992 +SPY,20160420 00:00,2099000,2109200,2094000,2100700,68129528,0.00012553140160787558 +QQQ,20160420 00:00,1105500,1111400,1101700,1106400,16292426,0.00012553140160787558 +SPY,20160421 00:00,2101300,2102500,2086600,2089000,66185715,0.0001254271801907199 +QQQ,20160421 00:00,1105800,1110400,1101500,1106500,16604689,0.0001254271801907199 +SPY,20160422 00:00,2085300,2092900,2079200,2089600,81454081,0.00012537305673118197 +QQQ,20160422 00:00,1092100,1097200,1081200,1089800,36436003,0.00012537305673118197 +SPY,20160425 00:00,2082800,2086200,2075400,2085900,54918433,0.0001252563795974044 +QQQ,20160425 00:00,1086500,1089900,1084500,1089800,13120373,0.0001252563795974044 +SPY,20160426 00:00,2090200,2095200,2083700,2090000,67103310,0.00012517359346484795 +QQQ,20160426 00:00,1092100,1093900,1081200,1084500,14936225,0.00012517359346484795 +SPY,20160427 00:00,2084600,2098100,2080600,2093800,65535983,0.00012514237340374108 +QQQ,20160427 00:00,1073400,1078300,1066900,1075800,27772991,0.00012514237340374108 +SPY,20160428 00:00,2084900,2097600,2069700,2074200,80393263,0.00012548524095056118 +QQQ,20160428 00:00,1077000,1083300,1060800,1062800,24518367,0.00012548524095056118 +SPY,20160429 00:00,2067100,2071300,2050300,2063000,110829381,0.00012500029642384042 +QQQ,20160429 00:00,1062800,1065000,1048800,1057200,61807683,0.00012500029642384042 +SPY,20160502 00:00,2069000,2081800,2064100,2080300,55377797,0.00012476188571617708 +QQQ,20160502 00:00,1059900,1068700,1055600,1067200,21181924,0.00012476188571617708 +SPY,20160503 00:00,2065000,2067900,2052800,2061300,89754991,0.00012507626978351327 +QQQ,20160503 00:00,1059600,1064300,1054500,1057300,31740729,0.00012507626978351327 +SPY,20160504 00:00,2050000,2058300,2044200,2049600,74239405,0.00012446510397602387 +QQQ,20160504 00:00,1050900,1054800,1048000,1050500,22955639,0.00012446510397602387 +SPY,20160505 00:00,2055700,2059800,2044700,2049500,57183088,0.00012434987148682102 +QQQ,20160505 00:00,1054700,1056600,1048100,1050200,18539892,0.00012434987148682102 +SPY,20160506 00:00,2040400,2057700,2038800,2057000,70502951,0.00012433228913171358 +QQQ,20160506 00:00,1045000,1056000,1044000,1055800,26421287,0.00012433228913171358 +SPY,20160509 00:00,2055800,2064000,2053700,2058900,60302710,0.00012367936778801813 +QQQ,20160509 00:00,1055900,1063700,1055400,1058800,16140332,0.00012367936778801813 +SPY,20160510 00:00,2066400,2084600,2066400,2084600,65978296,0.0001242847877597619 +QQQ,20160510 00:00,1062600,1073800,1060700,1073300,20620530,0.0001242847877597619 +SPY,20160511 00:00,2078900,2083300,2065000,2065000,72657913,0.00012457118307914443 +QQQ,20160511 00:00,1071500,1074900,1063300,1063600,17987786,0.00012457118307914443 +SPY,20160512 00:00,2072900,2074800,2053700,2065500,77898879,0.00012456354689908373 +QQQ,20160512 00:00,1066100,1067400,1051400,1058900,27023527,0.00012456354689908373 +SPY,20160513 00:00,2062300,2068600,2043800,2047200,83635846,0.00012407951607735715 +QQQ,20160513 00:00,1058000,1064500,1053000,1055000,17780734,0.00012407951607735715 +SPY,20160516 00:00,2049500,2073400,2048900,2068100,68003049,0.00012459363406877995 +QQQ,20160516 00:00,1056600,1072100,1055700,1068200,16662116,0.00012459363406877995 +SPY,20160517 00:00,2064400,2068000,2042300,2048200,100223310,0.00012501233994605433 +QQQ,20160517 00:00,1067300,1070400,1052000,1054800,26056588,0.00012501233994605433 +SPY,20160518 00:00,2044400,2063000,2036400,2049100,102872425,0.00012501933221156645 +QQQ,20160518 00:00,1052400,1064300,1050400,1058600,23889263,0.00012501933221156645 +SPY,20160519 00:00,2040000,2045400,2027800,2042400,104044038,0.00012508555163061476 +QQQ,20160519 00:00,1054500,1057000,1045400,1053100,24578667,0.00012508555163061476 +SPY,20160520 00:00,2049500,2060900,2048600,2054900,90968053,0.00012529744778648328 +QQQ,20160520 00:00,1057300,1069000,1056800,1064700,27063887,0.00012529744778648328 +SPY,20160523 00:00,2054800,2058400,2049900,2051600,52302088,0.00012529666973631472 +QQQ,20160523 00:00,1065900,1069700,1062300,1063300,13250193,0.00012529666973631472 +SPY,20160524 00:00,2061500,2082400,2061400,2078700,84293252,0.00012586508478681783 +QQQ,20160524 00:00,1069200,1085900,1068900,1084600,25304493,0.00012586508478681783 +SPY,20160525 00:00,2086400,2097700,2086200,2092600,71874969,0.00012545964281868402 +QQQ,20160525 00:00,1088700,1095700,1086900,1092400,37124817,0.00012545964281868402 +SPY,20160526 00:00,2094700,2097100,2089700,2093400,48058849,0.00012545691865873082 +QQQ,20160526 00:00,1093700,1097000,1090900,1095600,20023555,0.00012545691865873082 +SPY,20160527 00:00,2095500,2102100,2094700,2102100,53233980,0.00012538662054210203 +QQQ,20160527 00:00,1096300,1101400,1096100,1101300,16913314,0.00012538662054210203 +SPY,20160531 00:00,2105300,2106900,2091800,2100800,87775464,0.000125356913082903 +QQQ,20160531 00:00,1102800,1105100,1097900,1103400,22259453,0.000125356913082903 +SPY,20160601 00:00,2091500,2104800,2088900,2103000,64263039,0.00012534734193447806 +QQQ,20160601 00:00,1100000,1106000,1099100,1103500,18990799,0.00012534734193447806 +SPY,20160602 00:00,2098000,2109200,2092400,2109200,56601095,0.00012534185425981158 +QQQ,20160602 00:00,1101300,1105900,1095300,1105800,14573816,0.00012534185425981158 +SPY,20160603 00:00,2103200,2106900,2088600,2102800,89799792,0.00012516041219121814 +QQQ,20160603 00:00,1103700,1104200,1093400,1100600,19005526,0.00012516041219121814 +SPY,20160606 00:00,2107100,2117600,2105100,2113900,57500239,0.00012520885742772027 +QQQ,20160606 00:00,1102600,1107500,1100700,1104600,12206740,0.00012520885742772027 +SPY,20160607 00:00,2115600,2123400,2115000,2117000,52942760,0.0001249399588885216 +QQQ,20160607 00:00,1105200,1106300,1101300,1101800,11714181,0.0001249399588885216 +SPY,20160608 00:00,2118000,2125200,2116900,2123900,57416846,0.0001249582885933988 +QQQ,20160608 00:00,1103700,1105900,1099600,1103700,13230934,0.0001249582885933988 +SPY,20160609 00:00,2114900,2122200,2111900,2120400,72933317,0.0001243330989764515 +QQQ,20160609 00:00,1099200,1103100,1097100,1101900,17004569,0.0001243330989764515 +SPY,20160610 00:00,2104300,2108600,2094400,2100300,100123152,0.00012474931800765223 +QQQ,20160610 00:00,1091900,1094000,1085600,1089400,31816092,0.00012474931800765223 +SPY,20160613 00:00,2093400,2103700,2083500,2084200,99528764,0.00012475412216477475 +QQQ,20160613 00:00,1083200,1089300,1078900,1080300,23793618,0.00012475412216477475 +SPY,20160614 00:00,2079700,2087400,2069200,2080900,112987135,0.00012466805887549368 +QQQ,20160614 00:00,1077400,1084200,1072400,1080300,23284140,0.00012466805887549368 +SPY,20160615 00:00,2085700,2092000,2075300,2077800,94632612,0.0001245689526707164 +QQQ,20160615 00:00,1082900,1084400,1075400,1077200,22349990,0.0001245689526707164 +SPY,20160616 00:00,2067400,2085700,2055900,2083500,139759122,0.00012458346865736045 +QQQ,20160616 00:00,1071900,1081400,1065000,1080400,30003216,0.00012458346865736045 +SPY,20160617 00:00,2071400,2072000,2057500,2065300,108517057,0.00012447476579172416 +QQQ,20160617 00:00,1075300,1075600,1062400,1064900,27359949,0.00012447476579172416 +SPY,20160620 00:00,2088400,2096000,2077500,2079100,74625875,0.00012438038438725125 +QQQ,20160620 00:00,1077300,1082400,1070800,1071600,19633136,0.00012438038438725125 +SPY,20160621 00:00,2082600,2089200,2077900,2084100,66630510,0.00012425993645975893 +QQQ,20160621 00:00,1073000,1077100,1071000,1075000,21579600,0.00012425993645975893 +SPY,20160622 00:00,2086900,2094900,2079400,2080300,90582991,0.00012427457085022162 +QQQ,20160622 00:00,1075600,1081900,1071500,1072400,19196650,0.00012427457085022162 +SPY,20160623 00:00,2098300,2108700,2092700,2108700,86757627,0.00012490105312980084 +QQQ,20160623 00:00,1080700,1087900,1076200,1087700,17263349,0.00012490105312980084 +SPY,20160624 00:00,2040000,2069000,2027200,2031300,294018070,0.00013089247169330518 +QQQ,20160624 00:00,1049000,1065000,1040700,1042900,63088407,0.00013089247169330518 +SPY,20160627 00:00,2015900,2015900,1986500,1995300,216490003,0.0001322724875259804 +QQQ,20160627 00:00,1036000,1036000,1017500,1022200,46626203,0.0001322724875259804 +SPY,20160628 00:00,2016600,2032200,2011200,2032200,145242853,0.0001319400118154971 +QQQ,20160628 00:00,1033500,1045100,1033000,1044600,26073817,0.0001319400118154971 +SPY,20160629 00:00,2048300,2069300,2047200,2067100,122034443,0.00013311780939864235 +QQQ,20160629 00:00,1052800,1065300,1052400,1063100,29668019,0.00013311780939864235 +SPY,20160630 00:00,2071800,2095400,2065600,2095300,140612123,0.00013349047579645632 +QQQ,20160630 00:00,1064900,1076000,1061300,1075400,30429572,0.00013349047579645632 +SPY,20160701 00:00,2092900,2104900,2092900,2097900,92251985,0.00013351369532972086 +QQQ,20160701 00:00,1074900,1084800,1074500,1080800,19531458,0.00013351369532972086 +SPY,20160705 00:00,2089000,2090800,2077100,2083900,99629966,0.00013365252689169678 +QQQ,20160705 00:00,1075100,1076600,1068400,1074200,19314640,0.00013365252689169678 +SPY,20160706 00:00,2078700,2098000,2070600,2097700,87769094,0.0001338036464058638 +QQQ,20160706 00:00,1069100,1083500,1065700,1083000,22961895,0.0001338036464058638 +SPY,20160707 00:00,2098900,2106400,2086300,2095400,76391364,0.00013260828081106894 +QQQ,20160707 00:00,1084000,1088600,1081100,1086200,17526516,0.00013260828081106894 +SPY,20160708 00:00,2110000,2129400,2107800,2127000,114482147,0.00013351900428793404 +QQQ,20160708 00:00,1092000,1103600,1090200,1103000,25680410,0.00013351900428793404 +SPY,20160711 00:00,2131600,2140700,2129500,2134500,67609333,0.00013284802041048705 +QQQ,20160711 00:00,1106700,1113400,1106600,1109300,18578691,0.00013284802041048705 +SPY,20160712 00:00,2145100,2153000,2142500,2150000,91585333,0.00013223291049577356 +QQQ,20160712 00:00,1116100,1117900,1113400,1114900,20556785,0.00013223291049577356 +SPY,20160713 00:00,2154200,2154500,2143500,2149300,77887465,0.0001321302523835151 +QQQ,20160713 00:00,1117500,1118200,1112200,1112200,20285318,0.0001321302523835151 +SPY,20160714 00:00,2163400,2166600,2156600,2161100,81647966,0.000132274743155061 +QQQ,20160714 00:00,1119600,1121900,1117000,1119800,19711925,0.000132274743155061 +SPY,20160715 00:00,2167900,2168200,2153100,2158400,88704013,0.00013184391678149572 +QQQ,20160715 00:00,1122400,1123000,1115500,1118000,15768055,0.00013184391678149572 +SPY,20160718 00:00,2159500,2166000,2156700,2164100,48647808,0.00013186748000007097 +QQQ,20160718 00:00,1118700,1127400,1118500,1125400,18868100,0.00013186748000007097 +SPY,20160719 00:00,2158800,2162300,2156500,2161800,43905369,0.00013187965111808778 +QQQ,20160719 00:00,1121500,1124700,1119300,1121300,16190351,0.00013187965111808778 +SPY,20160720 00:00,2167500,2173700,2162400,2171300,52553592,0.00013206617782702878 +QQQ,20160720 00:00,1127400,1136500,1126000,1134400,21979892,0.00013206617782702878 +SPY,20160721 00:00,2169200,2172200,2157500,2162200,63005168,0.0001320187390393817 +QQQ,20160721 00:00,1135200,1137400,1128700,1131800,17868626,0.0001320187390393817 +SPY,20160722 00:00,2163900,2173000,2161000,2172500,52576045,0.0001320037045538437 +QQQ,20160722 00:00,1132600,1137800,1129200,1136500,17919229,0.0001320037045538437 +SPY,20160725 00:00,2170000,2170600,2159700,2166400,49718650,0.0001315848926835846 +QQQ,20160725 00:00,1135600,1136900,1132800,1136600,12503677,0.0001315848926835846 +SPY,20160726 00:00,2165300,2171700,2157600,2167500,64796484,0.00013138172107305285 +QQQ,20160726 00:00,1136200,1142000,1132200,1137900,19621479,0.00013138172107305285 +SPY,20160727 00:00,2171700,2172700,2156200,2165100,73524223,0.00013094163130791602 +QQQ,20160727 00:00,1147500,1148800,1141000,1145800,22704072,0.00013094163130791602 +SPY,20160728 00:00,2162600,2171100,2157500,2168000,59237051,0.00013086135882365183 +QQQ,20160728 00:00,1147500,1151100,1144000,1149800,14847431,0.00013086135882365183 +SPY,20160729 00:00,2164500,2175400,2161300,2171500,68771465,0.00013087155127700992 +QQQ,20160729 00:00,1152000,1155400,1148700,1152300,20810707,0.00013087155127700992 +SPY,20160801 00:00,2171500,2176500,2164100,2169300,65459572,0.00013083820897150016 +QQQ,20160801 00:00,1153100,1161300,1151700,1158400,13509130,0.00013083820897150016 +SPY,20160802 00:00,2166400,2168300,2145800,2155200,86422053,0.0001309985727130331 +QQQ,20160802 00:00,1156700,1157700,1142200,1149600,19858833,0.0001309985727130331 +SPY,20160803 00:00,2154500,2162400,2151300,2162300,46176692,0.00013101928083349287 +QQQ,20160803 00:00,1148700,1153500,1148100,1153400,13242595,0.00013101928083349287 +SPY,20160804 00:00,2163000,2167800,2158300,2164300,40200895,0.0001309339632536635 +QQQ,20160804 00:00,1153000,1157800,1150400,1156700,12152693,0.0001309339632536635 +SPY,20160805 00:00,2171900,2182300,2170700,2181400,61991590,0.0001306754762725583 +QQQ,20160805 00:00,1162600,1170400,1161300,1167800,19130371,0.0001306754762725583 +SPY,20160808 00:00,2183900,2185200,2177400,2180500,36959153,0.00013066564205679385 +QQQ,20160808 00:00,1168400,1168700,1162800,1166500,11212368,0.00013066564205679385 +SPY,20160809 00:00,2181200,2187600,2178000,2182200,48239720,0.0001301210064043499 +QQQ,20160809 00:00,1167400,1172800,1166700,1169200,13573049,0.0001301210064043499 +SPY,20160810 00:00,2182900,2184000,2172300,2176300,51678201,0.0001296719766457702 +QQQ,20160810 00:00,1169900,1170200,1163200,1166200,14145957,0.0001296719766457702 +SPY,20160811 00:00,2182500,2189400,2179500,2186800,65858201,0.00012973267612597636 +QQQ,20160811 00:00,1170200,1173700,1167800,1171200,12005676,0.00012973267612597636 +SPY,20160812 00:00,2182600,2187100,2179900,2184100,48330938,0.00012971902409701877 +QQQ,20160812 00:00,1169200,1172100,1167900,1172000,17743232,0.00012971902409701877 +SPY,20160815 00:00,2188900,2195000,2188800,2190900,43891571,0.00012974768337995057 +QQQ,20160815 00:00,1173500,1179700,1173200,1177000,11481381,0.00012974768337995057 +SPY,20160816 00:00,2185600,2186800,2179600,2179600,48785828,0.00012970077144922336 +QQQ,20160816 00:00,1174800,1174900,1170300,1170500,13348580,0.00012970077144922336 +SPY,20160817 00:00,2179800,2185300,2170200,2183800,69540455,0.00012964432138335487 +QQQ,20160817 00:00,1170800,1173000,1164300,1172600,14855132,0.00012964432138335487 +SPY,20160818 00:00,2183100,2189000,2182200,2189000,49012060,0.00012941997205447194 +QQQ,20160818 00:00,1171500,1174600,1169500,1172900,9071625,0.00012941997205447194 +SPY,20160819 00:00,2183400,2187500,2177400,2185600,68512765,0.00012705589355902543 +QQQ,20160819 00:00,1170800,1175200,1167600,1172600,17196221,0.00012705589355902543 +SPY,20160822 00:00,2182500,2188000,2178300,2185100,56032026,0.00012168154814355723 +QQQ,20160822 00:00,1170900,1175500,1168700,1173500,14042742,0.00012168154814355723 +SPY,20160823 00:00,2192300,2196000,2189000,2189300,49279171,0.00011503230461796903 +QQQ,20160823 00:00,1178100,1180000,1175100,1175600,11351356,0.00011503230461796903 +SPY,20160824 00:00,2188000,2189100,2173600,2178800,62792016,0.00011496513409819336 +QQQ,20160824 00:00,1174800,1176400,1164100,1168000,16723656,0.00011496513409819336 +SPY,20160825 00:00,2174000,2181900,2172200,2176600,61431694,0.00010749097428811875 +QQQ,20160825 00:00,1165000,1169700,1163600,1166100,22287155,0.00010749097428811875 +SPY,20160826 00:00,2179000,2191100,2162500,2172800,116455917,0.00010508053624240111 +QQQ,20160826 00:00,1166500,1175400,1160800,1167800,23406014,0.00010508053624240111 +SPY,20160829 00:00,2174300,2186600,2174000,2183400,60888768,0.00010509573028109907 +QQQ,20160829 00:00,1168100,1172500,1167900,1169400,10914791,0.00010509573028109907 +SPY,20160830 00:00,2182500,2185900,2173500,2179800,52513386,0.00010468992800025501 +QQQ,20160830 00:00,1167500,1170900,1161600,1165600,18464823,0.00010468992800025501 +SPY,20160831 00:00,2176400,2177500,2164700,2174400,71308010,0.00010086288050920043 +QQQ,20160831 00:00,1163800,1165600,1159500,1164400,15328565,0.00010086288050920043 +SPY,20160901 00:00,2173800,2177300,2160300,2173700,89011329,9.882265917441703e-05 +QQQ,20160901 00:00,1164800,1168800,1159200,1167400,19241076,9.882265917441703e-05 +SPY,20160902 00:00,2183600,2188700,2177000,2183600,70476391,9.88720099787485e-05 +QQQ,20160902 00:00,1173200,1175600,1166800,1171200,16736947,9.88720099787485e-05 +SPY,20160906 00:00,2187200,2190900,2178600,2190900,48541412,9.815639972795626e-05 +QQQ,20160906 00:00,1173200,1178500,1170700,1178500,17081737,9.815639972795626e-05 +SPY,20160907 00:00,2188400,2192200,2183100,2190100,72763936,9.544685244302931e-05 +QQQ,20160907 00:00,1179600,1181200,1174700,1179200,16552699,9.544685244302931e-05 +SPY,20160908 00:00,2186000,2189400,2181600,2185100,66880396,9.486794849892961e-05 +QQQ,20160908 00:00,1175700,1176000,1169200,1172300,18633525,9.486794849892961e-05 +SPY,20160909 00:00,2170000,2170200,2132500,2133200,199753948,9.713124233712819e-05 +QQQ,20160909 00:00,1162500,1165100,1142600,1142800,49577287,9.713124233712819e-05 +SPY,20160912 00:00,2123900,2168100,2123100,2164000,158990452,9.802653333785408e-05 +QQQ,20160912 00:00,1136400,1164900,1136300,1163300,39029019,9.802653333785408e-05 +SPY,20160913 00:00,2148500,2151400,2125000,2132400,166172973,9.853016733424838e-05 +QQQ,20160913 00:00,1157500,1160900,1147400,1152900,44471915,9.853016733424838e-05 +SPY,20160914 00:00,2132900,2146900,2125000,2131500,122562929,9.796641930941998e-05 +QQQ,20160914 00:00,1154100,1164700,1153800,1158400,26998332,9.796641930941998e-05 +SPY,20160915 00:00,2130000,2157300,2127600,2152800,125570649,9.837527351675245e-05 +QQQ,20160915 00:00,1158700,1178100,1158600,1176400,37286204,9.837527351675245e-05 +SPY,20160916 00:00,2135000,2136900,2125800,2133700,139164920,9.849936233727757e-05 +QQQ,20160916 00:00,1172400,1174100,1167100,1172900,22052198,9.849936233727757e-05 +SPY,20160919 00:00,2141000,2148700,2130300,2134100,75239623,9.702207065478226e-05 +QQQ,20160919 00:00,1175900,1179500,1165500,1167800,16555774,9.702207065478226e-05 +SPY,20160920 00:00,2144300,2145900,2133800,2134200,62864323,9.696938541612053e-05 +QQQ,20160920 00:00,1172000,1174800,1168100,1170000,15272828,9.696938541612053e-05 +SPY,20160921 00:00,2142200,2160300,2134400,2158200,102931692,9.654543243251409e-05 +QQQ,20160921 00:00,1175000,1183200,1168200,1181500,29347887,9.654543243251409e-05 +SPY,20160922 00:00,2169900,2175300,2167100,2171800,69951017,9.671800697283716e-05 +QQQ,20160922 00:00,1188400,1192200,1187200,1190900,20605769,9.671800697283716e-05 +SPY,20160923 00:00,2167300,2168800,2158800,2159900,63444583,9.681453880652983e-05 +QQQ,20160923 00:00,1190000,1190000,1181600,1183300,20733818,9.681453880652983e-05 +SPY,20160926 00:00,2150200,2152300,2140100,2142400,80230788,9.709382172229859e-05 +QQQ,20160926 00:00,1176600,1178000,1171700,1173400,16010083,9.709382172229859e-05 +SPY,20160927 00:00,2140300,2156800,2136200,2155700,68564482,9.432971264305488e-05 +QQQ,20160927 00:00,1172600,1185500,1171500,1185000,16697729,9.432971264305488e-05 +SPY,20160928 00:00,2158100,2168200,2147100,2166400,79072162,9.434585867169411e-05 +QQQ,20160928 00:00,1186500,1187700,1180900,1187000,14094643,9.434585867169411e-05 +SPY,20160929 00:00,2163900,2168700,2140500,2146800,115706725,9.303915033935369e-05 +QQQ,20160929 00:00,1185000,1187200,1173400,1178400,26361231,9.303915033935369e-05 +SPY,20160930 00:00,2156700,2171200,2153600,2163000,96329808,9.319803573607974e-05 +QQQ,20160930 00:00,1181500,1190700,1180300,1187200,23458388,9.319803573607974e-05 +SPY,20161003 00:00,2158100,2160400,2150400,2157800,75146488,9.224821462146195e-05 +QQQ,20161003 00:00,1185700,1187000,1180800,1185500,17875967,9.224821462146195e-05 +SPY,20161004 00:00,2158600,2161700,2139900,2146800,114252574,9.13384213621453e-05 +QQQ,20161004 00:00,1189000,1191600,1179300,1183700,20504314,9.13384213621453e-05 +SPY,20161005 00:00,2153700,2161300,2153300,2156300,63422919,9.130749149214775e-05 +QQQ,20161005 00:00,1187200,1191700,1186700,1187900,14065651,9.130749149214775e-05 +SPY,20161006 00:00,2153900,2160400,2147400,2157800,56891266,9.113584799377305e-05 +QQQ,20161006 00:00,1186400,1189800,1181600,1187300,11332868,9.113584799377305e-05 +SPY,20161007 00:00,2160600,2163000,2141900,2150400,79463848,9.105617997642044e-05 +QQQ,20161007 00:00,1188400,1190100,1179000,1184700,18328776,9.105617997642044e-05 +SPY,20161010 00:00,2161400,2167000,2159900,2161600,46875472,9.11653205539196e-05 +QQQ,20161010 00:00,1190800,1194800,1190300,1192200,18022477,9.11653205539196e-05 +SPY,20161011 00:00,2156400,2157400,2125800,2134300,119387206,9.191884784932042e-05 +QQQ,20161011 00:00,1191200,1191400,1170000,1175200,25781487,9.191884784932042e-05 +SPY,20161012 00:00,2136100,2143200,2130100,2137100,66340623,9.173217042025218e-05 +QQQ,20161012 00:00,1176300,1178200,1170600,1174200,13514398,9.173217042025218e-05 +SPY,20161013 00:00,2121500,2135900,2112100,2130100,91466314,9.17478593445524e-05 +QQQ,20161013 00:00,1166200,1173200,1159400,1170000,21791329,9.17478593445524e-05 +SPY,20161014 00:00,2141400,2146900,2130300,2131200,80852248,9.078723816245358e-05 +QQQ,20161014 00:00,1175800,1180500,1170700,1171400,20678381,9.078723816245358e-05 +SPY,20161017 00:00,2130700,2133800,2121700,2123800,53226160,9.076778074455212e-05 +QQQ,20161017 00:00,1170400,1173000,1166800,1168200,13220120,9.076778074455212e-05 +SPY,20161018 00:00,2142400,2142900,2132700,2137100,66888708,9.096726093379848e-05 +QQQ,20161018 00:00,1182100,1184100,1178000,1178600,17384714,9.096726093379848e-05 +SPY,20161019 00:00,2140000,2146400,2136000,2142800,57783289,9.092907777141463e-05 +QQQ,20161019 00:00,1177300,1180200,1176400,1178500,12799584,9.092907777141463e-05 +SPY,20161020 00:00,2138500,2145300,2131100,2138800,68059264,9.07749558569714e-05 +QQQ,20161020 00:00,1177300,1179700,1170300,1177100,16319681,9.07749558569714e-05 +SPY,20161021 00:00,2129500,2140800,2127600,2139800,78690483,8.945193740849738e-05 +QQQ,20161021 00:00,1178000,1182200,1174100,1181500,12972732,8.945193740849738e-05 +SPY,20161024 00:00,2149800,2153100,2144800,2148900,51206007,8.845425847555013e-05 +QQQ,20161024 00:00,1189100,1196500,1189000,1195700,16216682,8.845425847555013e-05 +SPY,20161025 00:00,2147000,2149800,2139800,2141700,58851733,8.850643481575485e-05 +QQQ,20161025 00:00,1196400,1196600,1190100,1191900,18183030,8.850643481575485e-05 +SPY,20161026 00:00,2132200,2144200,2129300,2137400,72529547,8.858272176727428e-05 +QQQ,20161026 00:00,1184200,1190400,1180300,1183800,19074971,8.858272176727428e-05 +SPY,20161027 00:00,2145700,2146200,2130900,2131700,68426767,8.827390067863715e-05 +QQQ,20161027 00:00,1188900,1189900,1176700,1178400,16357162,8.827390067863715e-05 +SPY,20161028 00:00,2131300,2139300,2117200,2125400,130649200,8.834805571043464e-05 +QQQ,20161028 00:00,1175000,1181100,1167400,1171000,32410172,8.834805571043464e-05 +SPY,20161031 00:00,2129500,2131900,2123700,2125500,54590230,8.8266246583224e-05 +QQQ,20161031 00:00,1175300,1175300,1169300,1169900,18025131,8.8266246583224e-05 +SPY,20161101 00:00,2129000,2129900,2096000,2110100,114185217,8.796870806443198e-05 +QQQ,20161101 00:00,1171900,1172100,1151000,1161100,22925367,8.796870806443198e-05 +SPY,20161102 00:00,2106700,2111000,2092400,2097400,91540186,8.812500514540822e-05 +QQQ,20161102 00:00,1160300,1163000,1149000,1151800,24660939,8.812500514540822e-05 +SPY,20161103 00:00,2100100,2102400,2084600,2087800,82365245,8.830572485132586e-05 +QQQ,20161103 00:00,1149900,1153700,1139200,1140500,30499787,8.830572485132586e-05 +SPY,20161104 00:00,2089100,2098800,2084000,2085500,95290592,8.831043826949613e-05 +QQQ,20161104 00:00,1137700,1145400,1134500,1136500,24483522,8.831043826949613e-05 +SPY,20161107 00:00,2114700,2131900,2113000,2131500,95548312,9.038875123241018e-05 +QQQ,20161107 00:00,1154900,1164700,1153000,1163500,24629132,9.038875123241018e-05 +SPY,20161108 00:00,2127200,2147700,2123800,2141100,97985548,9.009419774113517e-05 +QQQ,20161108 00:00,1162300,1176400,1159600,1171100,19311317,9.009419774113517e-05 +SPY,20161109 00:00,2124700,2171000,2123400,2164400,219161783,9.030609945898909e-05 +QQQ,20161109 00:00,1157400,1178400,1156000,1176500,64121012,9.030609945898909e-05 +SPY,20161110 00:00,2173500,2183100,2152300,2169200,159836491,9.015158102834008e-05 +QQQ,20161110 00:00,1182200,1183800,1142000,1157500,69491123,9.015158102834008e-05 +SPY,20161111 00:00,2161300,2167000,2153200,2164200,86128015,8.960094229251476e-05 +QQQ,20161111 00:00,1152500,1160500,1148300,1158000,39097265,8.960094229251476e-05 +SPY,20161114 00:00,2169900,2172700,2157200,2165900,85660687,8.864354265915181e-05 +QQQ,20161114 00:00,1158300,1159400,1140300,1146300,34543671,8.864354265915181e-05 +SPY,20161115 00:00,2170000,2182800,2168100,2182800,79608357,8.81993089483979e-05 +QQQ,20161115 00:00,1155000,1166200,1153300,1162200,28474667,8.81993089483979e-05 +SPY,20161116 00:00,2175200,2181400,2174200,2178700,59816015,8.815272840542951e-05 +QQQ,20161116 00:00,1156700,1169900,1156700,1169100,14903722,8.815272840542951e-05 +SPY,20161117 00:00,2180400,2190600,2179200,2189900,61742349,8.710200733699338e-05 +QQQ,20161117 00:00,1168500,1177800,1166100,1177600,20176082,8.710200733699338e-05 +SPY,20161118 00:00,2190400,2192600,2182900,2185000,79242591,8.714240454560688e-05 +QQQ,20161118 00:00,1179000,1181000,1172100,1173200,15082780,8.714240454560688e-05 +SPY,20161121 00:00,2191900,2201800,2190000,2201500,62050842,8.73406128823613e-05 +QQQ,20161121 00:00,1176100,1186500,1175700,1185400,20611982,8.73406128823613e-05 +SPY,20161122 00:00,2204900,2207900,2197300,2205800,60951795,8.73398117577669e-05 +QQQ,20161122 00:00,1190100,1191900,1186100,1189000,18793612,8.73398117577669e-05 +SPY,20161123 00:00,2200000,2207600,2197500,2207000,50177872,8.733955710543864e-05 +QQQ,20161123 00:00,1185100,1186400,1179000,1184200,20491749,8.733955710543864e-05 +SPY,20161125 00:00,2211200,2215400,2210100,2215200,30799433,8.738244554844036e-05 +QQQ,20161125 00:00,1185600,1188500,1184200,1188000,6743757,8.738244554844036e-05 +SPY,20161128 00:00,2211900,2214800,2203700,2204800,64260081,8.742732126257495e-05 +QQQ,20161128 00:00,1186500,1190800,1184200,1185300,13216697,8.742732126257495e-05 +SPY,20161129 00:00,2205800,2214400,2201700,2209100,60422740,8.740258083223531e-05 +QQQ,20161129 00:00,1186400,1195100,1183000,1189400,18188142,8.740258083223531e-05 +SPY,20161130 00:00,2216500,2218200,2203100,2203800,89052622,8.716831757616246e-05 +QQQ,20161130 00:00,1190900,1191300,1174600,1175000,27473786,8.716831757616246e-05 +SPY,20161201 00:00,2207300,2207300,2191500,2195700,73523163,8.717905742407615e-05 +QQQ,20161201 00:00,1174600,1174700,1152900,1154700,36706479,8.717905742407615e-05 +SPY,20161202 00:00,2197000,2202500,2192600,2196800,65214024,8.619628277063151e-05 +QQQ,20161202 00:00,1155400,1161600,1152200,1157000,31218241,8.619628277063151e-05 +SPY,20161205 00:00,2206700,2214000,2204200,2210000,62268605,8.455880180727989e-05 +QQQ,20161205 00:00,1163000,1170600,1157600,1166000,20525092,8.455880180727989e-05 +SPY,20161206 00:00,2212400,2217400,2206700,2217000,54251477,8.445780738464487e-05 +QQQ,20161206 00:00,1169300,1170800,1163900,1168800,25136386,8.445780738464487e-05 +SPY,20161207 00:00,2215000,2246700,2213800,2246000,100958910,8.509149489147921e-05 +QQQ,20161207 00:00,1166200,1185000,1162900,1183600,24978449,8.509149489147921e-05 +SPY,20161208 00:00,2245800,2257000,2242700,2251500,87138295,8.458890455054121e-05 +QQQ,20161208 00:00,1184100,1188700,1181800,1185700,17855858,8.458890455054121e-05 +SPY,20161209 00:00,2254400,2265100,2253700,2265100,75738981,8.472221999923682e-05 +QQQ,20161209 00:00,1190100,1195400,1190000,1195000,20873892,8.472221999923682e-05 +SPY,20161212 00:00,2264200,2269600,2257600,2262500,82237402,8.291488371521197e-05 +QQQ,20161212 00:00,1189700,1192100,1184700,1189600,22603883,8.291488371521197e-05 +SPY,20161213 00:00,2270100,2283400,2270000,2277600,98759427,8.307117069518983e-05 +QQQ,20161213 00:00,1193200,1211100,1193200,1204600,53002044,8.307117069518983e-05 +SPY,20161214 00:00,2274100,2282200,2253700,2258800,131328288,8.29330144700128e-05 +QQQ,20161214 00:00,1206100,1210000,1198600,1202100,25883799,8.29330144700128e-05 +SPY,20161215 00:00,2261300,2278100,2260100,2268100,109782020,8.213727098455973e-05 +QQQ,20161215 00:00,1203700,1211100,1200800,1204000,21186643,8.213727098455973e-05 +SPY,20161216 00:00,2259900,2260800,2246700,2250400,133572412,8.144150946349999e-05 +QQQ,20161216 00:00,1203400,1205200,1193600,1196000,22952131,8.144150946349999e-05 +SPY,20161219 00:00,2252400,2260100,2250800,2255300,77760990,7.930563242858705e-05 +QQQ,20161219 00:00,1197200,1208300,1195500,1200900,19564214,7.930563242858705e-05 +SPY,20161220 00:00,2261600,2265700,2258800,2264000,95464598,7.901448513009193e-05 +QQQ,20161220 00:00,1204700,1207700,1203300,1205500,11195243,7.901448513009193e-05 +SPY,20161221 00:00,2262700,2264500,2257700,2257700,58961932,7.881236954010043e-05 +QQQ,20161221 00:00,1206000,1206800,1201900,1204600,6849219,7.881236954010043e-05 +SPY,20161222 00:00,2256100,2257400,2249200,2253800,50253495,7.850532405224136e-05 +QQQ,20161222 00:00,1204700,1205000,1196600,1201200,15569584,7.850532405224136e-05 +SPY,20161223 00:00,2254200,2257200,2252100,2257100,30271966,7.850228579320986e-05 +QQQ,20161223 00:00,1199200,1202500,1198000,1202000,8073528,7.850228579320986e-05 +SPY,20161227 00:00,2260000,2267300,2260000,2262700,35839769,7.853356748069524e-05 +QQQ,20161227 00:00,1204600,1215200,1204100,1208200,15536641,7.853356748069524e-05 +SPY,20161228 00:00,2265900,2265900,2242800,2244000,55878521,7.818179371854475e-05 +QQQ,20161228 00:00,1210800,1211900,1198000,1198800,17481445,7.818179371854475e-05 +SPY,20161229 00:00,2244700,2248900,2238400,2243500,44831649,7.791064719427885e-05 +QQQ,20161229 00:00,1198500,1201300,1193300,1197100,12913138,7.791064719427885e-05 +SPY,20161230 00:00,2247100,2248300,2227300,2235300,86143160,7.755874814767774e-05 +QQQ,20161230 00:00,1199400,1199500,1181500,1184800,39570090,7.755874814767774e-05 +SPY,20170103 00:00,2250700,2258300,2238900,2252400,77920116,7.656164508054771e-05 +QQQ,20170103 00:00,1192700,1199900,1188900,1195400,21298217,7.656164508054771e-05 +SPY,20170104 00:00,2256400,2267500,2256100,2265800,70209892,7.668107245134975e-05 +QQQ,20170104 00:00,1196700,1204100,1196600,1201900,18383601,7.668107245134975e-05 +SPY,20170105 00:00,2262800,2265800,2254900,2264000,65938728,7.613480395763191e-05 +QQQ,20170105 00:00,1201000,1209500,1201000,1208700,20177699,7.613480395763191e-05 +SPY,20170106 00:00,2265300,2277500,2259000,2272100,62917568,7.305077691298982e-05 +QQQ,20170106 00:00,1210000,1222500,1206800,1219300,22000840,7.305077691298982e-05 +SPY,20170109 00:00,2269000,2270700,2264200,2264600,41106606,7.261393643929495e-05 +QQQ,20170109 00:00,1220300,1225500,1219500,1223300,17445807,7.261393643929495e-05 +SPY,20170110 00:00,2264700,2274400,2260100,2264600,56225536,7.260839558854477e-05 +QQQ,20170110 00:00,1223800,1229700,1221000,1226000,15473817,7.260839558854477e-05 +SPY,20170111 00:00,2263800,2271000,2255900,2271000,66005672,7.230388319359858e-05 +QQQ,20170111 00:00,1226500,1229300,1220100,1229300,18854540,7.230388319359858e-05 +SPY,20170112 00:00,2265000,2267500,2249600,2265300,67094792,6.876394190447768e-05 +QQQ,20170112 00:00,1224900,1228200,1215900,1227400,18632951,6.876394190447768e-05 +SPY,20170113 00:00,2267500,2274000,2266900,2270500,48194702,6.753119731312378e-05 +QQQ,20170113 00:00,1228000,1233700,1228000,1231600,14033357,6.753119731312378e-05 +SPY,20170117 00:00,2263000,2267800,2258000,2262500,52726727,6.48211324180339e-05 +QQQ,20170117 00:00,1228400,1230300,1224400,1227900,13796704,6.48211324180339e-05 +SPY,20170118 00:00,2265200,2268000,2259000,2267500,47432023,6.48256227619639e-05 +QQQ,20170118 00:00,1229700,1231600,1226600,1230400,10920268,6.48256227619639e-05 +SPY,20170119 00:00,2268300,2270000,2254100,2259100,60830945,6.465118509032248e-05 +QQQ,20170119 00:00,1232200,1236400,1227200,1229800,11715608,6.465118509032248e-05 +SPY,20170120 00:00,2267300,2273100,2260500,2267400,106233534,6.466425541314346e-05 +QQQ,20170120 00:00,1235200,1238300,1229300,1232500,18817221,6.466425541314346e-05 +SPY,20170123 00:00,2263700,2268000,2252700,2261500,64870592,6.243424151763619e-05 +QQQ,20170123 00:00,1231700,1235200,1225700,1233500,16548029,6.243424151763619e-05 +SPY,20170124 00:00,2264000,2280800,2262800,2276000,81566655,6.156872305324588e-05 +QQQ,20170124 00:00,1235900,1243700,1233900,1241800,16689559,6.156872305324588e-05 +SPY,20170125 00:00,2287000,2295700,2285100,2295700,65524898,6.14308499026863e-05 +QQQ,20170125 00:00,1249600,1254600,1248600,1254300,14562459,6.14308499026863e-05 +SPY,20170126 00:00,2294200,2297100,2290200,2293300,52160586,6.021410213202432e-05 +QQQ,20170126 00:00,1256000,1258200,1253500,1255600,13551108,6.021410213202432e-05 +SPY,20170127 00:00,2294400,2295900,2287600,2289700,45459870,5.995826943997336e-05 +QQQ,20170127 00:00,1258300,1259200,1253900,1258000,13846308,5.995826943997336e-05 +SPY,20170130 00:00,2281800,2282000,2264200,2275500,69104606,5.8267299887586467e-05 +QQQ,20170130 00:00,1253800,1253800,1241300,1248200,23217505,5.8267299887586467e-05 +SPY,20170131 00:00,2270100,2275900,2263200,2275300,63594548,5.828945422707708e-05 +QQQ,20170131 00:00,1243800,1246000,1238500,1245700,17455571,5.828945422707708e-05 +SPY,20170201 00:00,2282800,2285800,2269500,2276200,69036939,5.658456670497713e-05 +QQQ,20170201 00:00,1254500,1256800,1248600,1254300,20792517,5.658456670497713e-05 +SPY,20170202 00:00,2272400,2280900,2268300,2277700,64355660,5.670140038776264e-05 +QQQ,20170202 00:00,1252100,1257000,1248600,1253200,14269696,5.670140038776264e-05 +SPY,20170203 00:00,2288500,2295500,2284600,2293400,65321136,5.675369838433634e-05 +QQQ,20170203 00:00,1254500,1258100,1253300,1256800,15831866,5.675369838433634e-05 +SPY,20170206 00:00,2288900,2293200,2285500,2289300,52191634,5.400646504413119e-05 +QQQ,20170206 00:00,1254700,1258400,1253500,1258300,10763179,5.400646504413119e-05 +SPY,20170207 00:00,2293600,2296500,2287200,2289400,52308487,5.303260629429885e-05 +QQQ,20170207 00:00,1260900,1265500,1259700,1262900,16420559,5.303260629429885e-05 +SPY,20170208 00:00,2285900,2293900,2283100,2292400,44188553,5.301905625631997e-05 +QQQ,20170208 00:00,1261200,1266800,1258800,1265000,11734728,5.301905625631997e-05 +SPY,20170209 00:00,2295700,2309500,2295200,2306000,57358826,5.308166548357263e-05 +QQQ,20170209 00:00,1266300,1272400,1265700,1269600,15038528,5.308166548357263e-05 +SPY,20170210 00:00,2310000,2317700,2308800,2315100,53177237,5.29722708883699e-05 +QQQ,20170210 00:00,1272400,1275600,1270200,1273800,13149710,5.29722708883699e-05 +SPY,20170213 00:00,2320900,2330700,2320500,2327700,47492534,5.199431348169772e-05 +QQQ,20170213 00:00,1277700,1282600,1277200,1281000,18153459,5.199431348169772e-05 +SPY,20170214 00:00,2325500,2337100,2321600,2337000,63276400,5.064845125879896e-05 +QQQ,20170214 00:00,1281500,1285400,1277400,1285300,15535982,5.064845125879896e-05 +SPY,20170215 00:00,2334300,2351400,2333900,2349200,75351898,4.941487349368033e-05 +QQQ,20170215 00:00,1284400,1293500,1283800,1292900,15673199,4.941487349368033e-05 +SPY,20170216 00:00,2349300,2351500,2338500,2347200,77912159,4.9173388474388046e-05 +QQQ,20170216 00:00,1293700,1296300,1289200,1292500,14290464,4.9173388474388046e-05 +SPY,20170217 00:00,2339700,2350900,2339400,2350900,61031072,4.919184090138392e-05 +QQQ,20170217 00:00,1290600,1298200,1290400,1298100,13024315,4.919184090138392e-05 +SPY,20170221 00:00,2355100,2366800,2355100,2364900,68354069,4.842623418320536e-05 +QQQ,20170221 00:00,1300600,1305300,1299900,1304500,16989257,4.842623418320536e-05 +SPY,20170222 00:00,2360200,2365400,2358300,2362800,52965600,4.748142535997532e-05 +QQQ,20170222 00:00,1303300,1305900,1301200,1305000,10602727,4.748142535997532e-05 +SPY,20170223 00:00,2369000,2369000,2355700,2364400,66891920,4.735327283379806e-05 +QQQ,20170223 00:00,1307000,1307000,1294900,1300100,16964987,4.735327283379806e-05 +SPY,20170224 00:00,2354200,2367900,2354100,2367400,65260982,4.695818293359033e-05 +QQQ,20170224 00:00,1294200,1302600,1293800,1302600,16940719,4.695818293359033e-05 +SPY,20170227 00:00,2366100,2373100,2363500,2371100,47536121,4.693194127551822e-05 +QQQ,20170227 00:00,1300200,1304300,1298000,1304200,11391864,4.693194127551822e-05 +SPY,20170228 00:00,2367100,2369500,2360200,2364700,68854635,4.664318059411938e-05 +QQQ,20170228 00:00,1303900,1304500,1296600,1300200,14269724,4.664318059411938e-05 +SPY,20170301 00:00,2384000,2403200,2383700,2397800,118445158,4.428464052802919e-05 +QQQ,20170301 00:00,1308500,1316800,1306100,1314400,21803450,4.428464052802919e-05 +SPY,20170302 00:00,2395700,2395700,2382100,2382700,62429917,4.445727172981947e-05 +QQQ,20170302 00:00,1314100,1314300,1306200,1307800,19745391,4.445727172981947e-05 +SPY,20170303 00:00,2381900,2386100,2377300,2384200,59910203,4.4489842003621923e-05 +QQQ,20170303 00:00,1306900,1310600,1303500,1310200,12312143,4.4489842003621923e-05 +SPY,20170306 00:00,2374800,2381200,2370100,2377100,47626346,4.453978197679011e-05 +QQQ,20170306 00:00,1305900,1309500,1302100,1307300,10942484,4.453978197679011e-05 +SPY,20170307 00:00,2373900,2377700,2367700,2370000,51126013,4.4595786029682805e-05 +QQQ,20170307 00:00,1304700,1310800,1302800,1305100,14506559,4.4595786029682805e-05 +SPY,20170308 00:00,2373100,2376300,2364100,2365600,62858443,4.414688568320076e-05 +QQQ,20170308 00:00,1305900,1311500,1304600,1307400,14790141,4.414688568320076e-05 +SPY,20170309 00:00,2367100,2372400,2357400,2368600,78158975,4.4045929371346715e-05 +QQQ,20170309 00:00,1307100,1310200,1301400,1308400,18455453,4.4045929371346715e-05 +SPY,20170310 00:00,2379500,2380200,2365900,2376900,67005430,4.40819128693407e-05 +QQQ,20170310 00:00,1314400,1316000,1308300,1313900,18542254,4.40819128693407e-05 +SPY,20170313 00:00,2375900,2378500,2372400,2378100,44239339,4.306035757618953e-05 +QQQ,20170313 00:00,1313400,1316400,1312700,1316100,10106985,4.306035757618953e-05 +SPY,20170314 00:00,2372200,2372400,2361900,2369000,52143010,4.312494506308073e-05 +QQQ,20170314 00:00,1313100,1313700,1307600,1312900,13459518,4.312494506308073e-05 +SPY,20170315 00:00,2375600,2394300,2372900,2389500,78506663,4.328243369995251e-05 +QQQ,20170315 00:00,1315600,1324000,1311400,1321000,21389658,4.328243369995251e-05 +SPY,20170316 00:00,2391200,2392000,2381000,2384800,71500910,4.313130339689328e-05 +QQQ,20170316 00:00,1323500,1323500,1317100,1320100,17182282,4.313130339689328e-05 +SPY,20170317 00:00,2377500,2379700,2370300,2370300,66555644,4.325323316719587e-05 +QQQ,20170317 00:00,1319000,1320400,1316200,1316900,18320512,4.325323316719587e-05 +SPY,20170320 00:00,2370100,2373600,2363300,2367700,46808067,4.3235658509250386e-05 +QQQ,20170320 00:00,1316500,1321100,1314700,1318100,9807650,4.3235658509250386e-05 +SPY,20170321 00:00,2374900,2376100,2335800,2337300,119931847,4.408640862482598e-05 +QQQ,20170321 00:00,1323100,1324300,1297300,1298100,35310462,4.408640862482598e-05 +SPY,20170322 00:00,2337300,2346100,2330500,2342800,85892073,4.4137629758950826e-05 +QQQ,20170322 00:00,1298500,1308200,1296800,1306900,29543892,4.4137629758950826e-05 +SPY,20170323 00:00,2339800,2353400,2336000,2340300,89153899,4.389277964904072e-05 +QQQ,20170323 00:00,1305200,1308800,1301400,1303600,18406145,4.389277964904072e-05 +SPY,20170324 00:00,2343500,2350400,2329600,2338600,93360484,4.388384058277971e-05 +QQQ,20170324 00:00,1307800,1312900,1301300,1306300,22445760,4.388384058277971e-05 +SPY,20170327 00:00,2319700,2339200,2316100,2336200,78643223,4.3880659522165254e-05 +QQQ,20170327 00:00,1297000,1310700,1294000,1308400,17716189,4.3880659522165254e-05 +SPY,20170328 00:00,2333200,2358100,2331400,2353200,78046362,4.34711276048989e-05 +QQQ,20170328 00:00,1308400,1320300,1305500,1316400,19908117,4.34711276048989e-05 +SPY,20170329 00:00,2350000,2358100,2347300,2355400,48500109,4.3416979785703713e-05 +QQQ,20170329 00:00,1317300,1323000,1315900,1322500,11704446,4.3416979785703713e-05 +SPY,20170330 00:00,2355000,2365200,2352700,2362900,46797888,4.339755204557078e-05 +QQQ,20170330 00:00,1322000,1326100,1320900,1324700,14980189,4.339755204557078e-05 +SPY,20170331 00:00,2359100,2365100,2356800,2357400,55060512,4.317834795209915e-05 +QQQ,20170331 00:00,1322800,1327400,1321300,1323800,17964005,4.317834795209915e-05 +SPY,20170403 00:00,2357900,2360300,2339200,2353300,73352665,4.3126411003851755e-05 +QQQ,20170403 00:00,1324900,1328100,1315600,1323000,23062647,4.3126411003851755e-05 +SPY,20170404 00:00,2350000,2355800,2345600,2354800,47152999,4.267018058318949e-05 +QQQ,20170404 00:00,1319200,1325300,1318700,1325100,12560176,4.267018058318949e-05 +SPY,20170405 00:00,2362600,2373900,2345500,2347800,96925396,4.206357608349006e-05 +QQQ,20170405 00:00,1327000,1334800,1317200,1319700,30289939,4.206357608349006e-05 +SPY,20170406 00:00,2349600,2360400,2344300,2354400,59853359,4.1277758620747694e-05 +QQQ,20170406 00:00,1321000,1323900,1317000,1320400,18389289,4.1277758620747694e-05 +SPY,20170407 00:00,2351800,2360000,2346400,2352000,58063904,4.1300151800090714e-05 +QQQ,20170407 00:00,1320000,1323700,1315000,1319700,15775514,4.1300151800090714e-05 +SPY,20170410 00:00,2353600,2362500,2347300,2353400,62169916,4.1247167776345415e-05 +QQQ,20170410 00:00,1321000,1325600,1316600,1320200,14505106,4.1247167776345415e-05 +SPY,20170411 00:00,2349000,2351800,2333400,2350600,80178276,4.1002980500868666e-05 +QQQ,20170411 00:00,1319000,1321000,1305000,1314500,33039379,4.1002980500868666e-05 +SPY,20170412 00:00,2348000,2349500,2337700,2340300,66034492,4.064205517105166e-05 +QQQ,20170412 00:00,1314300,1315400,1307800,1309200,15255090,4.064205517105166e-05 +SPY,20170413 00:00,2336500,2344900,2325100,2325100,72058660,4.07698098152027e-05 +QQQ,20170413 00:00,1307400,1315100,1303800,1304000,22113044,4.07698098152027e-05 +SPY,20170417 00:00,2331200,2345700,2328800,2345700,56011057,4.1003512590897795e-05 +QQQ,20170417 00:00,1307700,1315000,1307300,1314800,12457358,4.1003512590897795e-05 +SPY,20170418 00:00,2337100,2344900,2330800,2338700,74664350,4.091421404536155e-05 +QQQ,20170418 00:00,1310400,1316600,1309500,1312800,12162470,4.091421404536155e-05 +SPY,20170419 00:00,2345200,2349500,2331800,2334400,59798136,4.097938577249319e-05 +QQQ,20170419 00:00,1318500,1322900,1313100,1314900,17440534,4.097938577249319e-05 +SPY,20170420 00:00,2341400,2358500,2337800,2353400,83135283,4.121299075177196e-05 +QQQ,20170420 00:00,1320200,1328800,1318300,1325900,20502778,4.121299075177196e-05 +SPY,20170421 00:00,2352200,2353000,2341300,2345900,92494914,4.12113958228474e-05 +QQQ,20170421 00:00,1327100,1327500,1322200,1325600,19906888,4.12113958228474e-05 +SPY,20170424 00:00,2371700,2374100,2366100,2371700,103888079,4.166921166577155e-05 +QQQ,20170424 00:00,1340300,1342900,1338100,1341600,21177216,4.166921166577155e-05 +SPY,20170425 00:00,2379300,2389500,2378100,2385500,67491880,4.1795130567936456e-05 +QQQ,20170425 00:00,1346000,1353600,1344800,1351300,18911331,4.1795130567936456e-05 +SPY,20170426 00:00,2385300,2395300,2383500,2384000,73538016,4.1838371966807434e-05 +QQQ,20170426 00:00,1351800,1355100,1348600,1349400,22603210,4.1838371966807434e-05 +SPY,20170427 00:00,2387400,2389500,2379800,2386000,45634569,4.188994636732557e-05 +QQQ,20170427 00:00,1352700,1357500,1351900,1357500,13877278,4.188994636732557e-05 +SPY,20170428 00:00,2389300,2389300,2379300,2380800,49721027,4.136544389152937e-05 +QQQ,20170428 00:00,1362900,1363400,1357700,1359900,17610230,4.136544389152937e-05 +SPY,20170501 00:00,2386600,2391700,2382000,2386800,44888079,4.127593312592474e-05 +QQQ,20170501 00:00,1364400,1373800,1363800,1372000,21055619,4.127593312592474e-05 +SPY,20170502 00:00,2388200,2389800,2383000,2387700,49086142,4.101386968509575e-05 +QQQ,20170502 00:00,1373700,1374900,1370200,1374300,17229212,4.101386968509575e-05 +SPY,20170503 00:00,2382900,2387300,2377000,2384800,61863616,4.064481826952895e-05 +QQQ,20170503 00:00,1371200,1371700,1366200,1369900,21209026,4.064481826952895e-05 +SPY,20170504 00:00,2388100,2389200,2377800,2387600,56277584,4.045537128149294e-05 +QQQ,20170504 00:00,1369700,1372300,1365600,1370400,13988193,4.045537128149294e-05 +SPY,20170505 00:00,2391600,2397200,2386900,2397000,49995690,4.0485319710551533e-05 +QQQ,20170505 00:00,1373900,1375400,1368800,1375400,13539327,4.0485319710551533e-05 +SPY,20170508 00:00,2397700,2399200,2391700,2396600,43249763,4.0430712670792616e-05 +QQQ,20170508 00:00,1376100,1378400,1373300,1378400,12757417,4.0430712670792616e-05 +SPY,20170509 00:00,2399400,2401900,2390400,2394400,46767168,4.0413900617616895e-05 +QQQ,20170509 00:00,1380500,1386300,1379300,1383200,24217378,4.0413900617616895e-05 +SPY,20170510 00:00,2393700,2398700,2391600,2398700,46195692,3.9813393067581264e-05 +QQQ,20170510 00:00,1384000,1384500,1379100,1384000,18306881,3.9813393067581264e-05 +SPY,20170511 00:00,2393100,2395700,2381400,2393800,54364403,3.943108555211266e-05 +QQQ,20170511 00:00,1380200,1383200,1373900,1382900,24357025,3.943108555211266e-05 +SPY,20170512 00:00,2390500,2392100,2386700,2389800,41779519,3.9412702087243365e-05 +QQQ,20170512 00:00,1383500,1386300,1382300,1386000,17094601,3.9412702087243365e-05 +SPY,20170515 00:00,2394900,2404400,2394500,2403000,51325482,3.927194954088796e-05 +QQQ,20170515 00:00,1386600,1391200,1385300,1390400,18227851,3.927194954088796e-05 +SPY,20170516 00:00,2406400,2406700,2396300,2400800,45582380,3.8817838259647464e-05 +QQQ,20170516 00:00,1394000,1396400,1389900,1396200,18530508,3.8817838259647464e-05 +SPY,20170517 00:00,2380900,2386400,2357500,2358200,144257251,4.0199309585639485e-05 +QQQ,20170517 00:00,1385100,1387700,1360500,1360700,51256217,4.0199309585639485e-05 +SPY,20170518 00:00,2357000,2377500,2354300,2367700,93498838,4.030638694232412e-05 +QQQ,20170518 00:00,1360200,1377200,1358700,1372600,38424762,4.030638694232412e-05 +SPY,20170519 00:00,2373600,2390800,2372700,2383100,97341700,4.028330760184817e-05 +QQQ,20170519 00:00,1377500,1384200,1376600,1378400,33965774,4.028330760184817e-05 +SPY,20170522 00:00,2388700,2397100,2388200,2395200,44766182,4.019600548690152e-05 +QQQ,20170522 00:00,1381500,1390800,1381000,1390000,18766106,4.019600548690152e-05 +SPY,20170523 00:00,2399800,2402400,2395200,2400500,44309601,4.0174021751571605e-05 +QQQ,20170523 00:00,1394100,1394200,1387900,1391400,17140392,4.0174021751571605e-05 +SPY,20170524 00:00,2403300,2407300,2399300,2406100,42561538,3.924682511450649e-05 +QQQ,20170524 00:00,1395600,1398500,1391700,1397800,15071337,3.924682511450649e-05 +SPY,20170525 00:00,2412200,2420800,2409700,2417600,57128563,3.9222077832023946e-05 +QQQ,20170525 00:00,1403100,1413300,1400100,1409700,22391583,3.9222077832023946e-05 +SPY,20170526 00:00,2415900,2419000,2414500,2417100,34160249,3.922130606010149e-05 +QQQ,20170526 00:00,1410000,1412800,1408100,1412200,11601987,3.922130606010149e-05 +SPY,20170530 00:00,2413200,2417900,2411600,2415000,30629121,3.916278961147187e-05 +QQQ,20170530 00:00,1411500,1415100,1410600,1413400,19387675,3.916278961147187e-05 +SPY,20170531 00:00,2418400,2418800,2406400,2414400,67558518,3.9171482518057216e-05 +QQQ,20170531 00:00,1418400,1418400,1405700,1412900,28836181,3.9171482518057216e-05 +SPY,20170601 00:00,2419700,2433600,2416500,2433600,58482273,3.925765942086628e-05 +QQQ,20170601 00:00,1415800,1418900,1409800,1418400,18935148,3.925765942086628e-05 +SPY,20170602 00:00,2434500,2443500,2430800,2441700,56727456,3.936076649097518e-05 +QQQ,20170602 00:00,1423400,1434900,1421000,1434600,34757896,3.936076649097518e-05 +SPY,20170605 00:00,2440200,2443000,2437600,2439900,33597787,3.9283934235514514e-05 +QQQ,20170605 00:00,1434500,1436800,1432300,1434300,14470464,3.9283934235514514e-05 +SPY,20170606 00:00,2433400,2439800,2431200,2432100,43156884,3.931193406633742e-05 +QQQ,20170606 00:00,1432600,1437300,1426500,1428600,21570129,3.931193406633742e-05 +SPY,20170607 00:00,2436100,2439200,2428300,2436600,43784238,3.9339203048957846e-05 +QQQ,20170607 00:00,1432600,1435400,1426000,1434200,18012338,3.9339203048957846e-05 +SPY,20170608 00:00,2438000,2443300,2431700,2437800,59231538,3.933221702163501e-05 +QQQ,20170608 00:00,1437400,1438000,1427900,1435700,22741112,3.933221702163501e-05 +SPY,20170609 00:00,2440700,2450100,2419500,2434100,115565354,3.9524908191935125e-05 +QQQ,20170609 00:00,1437400,1439000,1381100,1399800,102590425,3.9524908191935125e-05 +SPY,20170612 00:00,2430900,2434200,2423800,2433600,74220413,3.9050376559762925e-05 +QQQ,20170612 00:00,1388000,1394800,1374700,1392300,100249191,3.9050376559762925e-05 +SPY,20170613 00:00,2439800,2446100,2435800,2445500,53143874,3.886045945869769e-05 +QQQ,20170613 00:00,1400100,1405500,1392800,1403600,48814127,3.886045945869769e-05 +SPY,20170614 00:00,2448600,2448700,2433000,2442400,67840892,3.88923961664452e-05 +QQQ,20170614 00:00,1409300,1409300,1386300,1397500,58252735,3.88923961664452e-05 +SPY,20170615 00:00,2426900,2439100,2423700,2437700,57671192,3.891526826342631e-05 +QQQ,20170615 00:00,1383400,1392800,1374900,1391300,51345482,3.891526826342631e-05 +SPY,20170616 00:00,2428300,2428300,2416400,2426400,68393285,3.906841389198219e-05 +QQQ,20170616 00:00,1386800,1387100,1376400,1381500,43343677,3.906841389198219e-05 +SPY,20170619 00:00,2436100,2447300,2434800,2446600,51499196,3.897000718908407e-05 +QQQ,20170619 00:00,1394900,1405900,1392900,1404600,34467257,3.897000718908407e-05 +SPY,20170620 00:00,2442300,2442600,2429900,2430100,48023571,3.910907364884121e-05 +QQQ,20170620 00:00,1403200,1405000,1393200,1393600,37878867,3.910907364884121e-05 +SPY,20170621 00:00,2434600,2435900,2424200,2429500,50482105,3.906342541038371e-05 +QQQ,20170621 00:00,1396800,1408100,1395900,1407400,32847639,3.906342541038371e-05 +SPY,20170622 00:00,2429600,2435300,2426400,2428400,36622080,3.903499834623755e-05 +QQQ,20170622 00:00,1409600,1412200,1403400,1407000,24061597,3.903499834623755e-05 +SPY,20170623 00:00,2428800,2435100,2424700,2431300,56648578,3.8356377783601104e-05 +QQQ,20170623 00:00,1405400,1414200,1401500,1412400,19652211,3.8356377783601104e-05 +SPY,20170626 00:00,2439300,2443800,2430500,2432900,48970596,3.2056183780383645e-05 +QQQ,20170626 00:00,1420500,1422900,1402800,1405800,32858257,3.2056183780383645e-05 +SPY,20170627 00:00,2430100,2433800,2413100,2413300,72130894,3.118511559636686e-05 +QQQ,20170627 00:00,1400500,1402200,1380200,1380300,58836648,3.118511559636686e-05 +SPY,20170628 00:00,2425100,2437100,2422400,2434900,59025861,3.015273579439021e-05 +QQQ,20170628 00:00,1385400,1401400,1377400,1400200,52499260,3.015273579439021e-05 +SPY,20170629 00:00,2436200,2437200,2399600,2413500,97388588,2.9759233798355815e-05 +QQQ,20170629 00:00,1394400,1394400,1362500,1375900,84967360,2.9759233798355815e-05 +SPY,20170630 00:00,2423000,2427100,2415800,2418000,58187364,2.9208207970764442e-05 +QQQ,20170630 00:00,1379800,1383300,1371900,1376400,55840647,2.9208207970764442e-05 +SPY,20170703 00:00,2429000,2433800,2422100,2422100,32862520,2.9146596158664232e-05 +QQQ,20170703 00:00,1382700,1385000,1361000,1361900,30112069,2.9146596158664232e-05 +SPY,20170705 00:00,2426100,2430100,2417000,2427700,47672771,2.9001827209913248e-05 +QQQ,20170705 00:00,1366200,1379000,1361500,1375300,37563894,2.9001827209913248e-05 +SPY,20170706 00:00,2418600,2420300,2403400,2405500,57599572,2.9215435434374373e-05 +QQQ,20170706 00:00,1364800,1370600,1358000,1362900,47088492,2.9215435434374373e-05 +SPY,20170707 00:00,2411800,2422800,2410200,2421100,43893302,2.9460433177841025e-05 +QQQ,20170707 00:00,1367500,1381300,1367400,1377600,34879095,2.9460433177841025e-05 +SPY,20170710 00:00,2419800,2428000,2417800,2423700,31706829,2.8631980186431503e-05 +QQQ,20170710 00:00,1378500,1389900,1375000,1386600,22738627,2.8631980186431503e-05 +SPY,20170711 00:00,2421200,2425500,2408500,2421900,45825492,2.856520357381355e-05 +QQQ,20170711 00:00,1384600,1392200,1379400,1390500,26219948,2.856520357381355e-05 +SPY,20170712 00:00,2433100,2442000,2433100,2440100,46071933,2.8759485310261908e-05 +QQQ,20170712 00:00,1402400,1408600,1399600,1407000,32649785,2.8759485310261908e-05 +SPY,20170713 00:00,2440200,2445500,2437600,2444200,33501511,2.875387724613798e-05 +QQQ,20170713 00:00,1408700,1413500,1406000,1410100,29645544,2.875387724613798e-05 +SPY,20170714 00:00,2444000,2459700,2443100,2455600,47191923,2.875170939673673e-05 +QQQ,20170714 00:00,1416400,1423000,1412000,1421200,30623353,2.875170939673673e-05 +SPY,20170717 00:00,2454400,2459100,2453400,2455300,25751504,2.873472423897874e-05 +QQQ,20170717 00:00,1422700,1426900,1419200,1421900,23034590,2.873472423897874e-05 +SPY,20170718 00:00,2450600,2457200,2446700,2456600,36481728,2.868727421970955e-05 +QQQ,20170718 00:00,1420900,1431700,1416500,1431400,23121659,2.868727421970955e-05 +SPY,20170719 00:00,2460100,2470000,2460100,2469900,42449945,2.875264674019301e-05 +QQQ,20170719 00:00,1435600,1441900,1435000,1439800,30756253,2.875264674019301e-05 +SPY,20170720 00:00,2472500,2474200,2464700,2471000,38472135,2.858816395103051e-05 +QQQ,20170720 00:00,1443500,1444400,1435200,1441700,32319253,2.858816395103051e-05 +SPY,20170721 00:00,2464300,2469100,2461800,2468800,77627243,2.8534521803164725e-05 +QQQ,20170721 00:00,1436400,1441100,1433500,1441100,29346464,2.8534521803164725e-05 +SPY,20170724 00:00,2468100,2469800,2462900,2468200,32070018,2.8469979122537616e-05 +QQQ,20170724 00:00,1440900,1448700,1439200,1447700,21625264,2.8469979122537616e-05 +SPY,20170725 00:00,2477000,2478000,2471600,2474200,49230957,2.8431371788018455e-05 +QQQ,20170725 00:00,1442900,1447400,1440100,1444000,25884573,2.8431371788018455e-05 +SPY,20170726 00:00,2477800,2477900,2471300,2474300,41030559,2.842686383664833e-05 +QQQ,20170726 00:00,1447600,1449500,1445300,1448700,16848394,2.842686383664833e-05 +SPY,20170727 00:00,2479600,2480000,2456800,2472000,64357340,2.8508474779266268e-05 +QQQ,20170727 00:00,1458200,1459600,1423000,1439600,74666110,2.8508474779266268e-05 +SPY,20170728 00:00,2467000,2470600,2461400,2469100,40266001,2.8512163363889295e-05 +QQQ,20170728 00:00,1431000,1440700,1428700,1438400,33509998,2.8512163363889295e-05 +SPY,20170731 00:00,2473800,2474800,2465300,2467700,41852288,2.852899348220376e-05 +QQQ,20170731 00:00,1442500,1444300,1429200,1432300,31606853,2.852899348220376e-05 +SPY,20170801 00:00,2474500,2475000,2468000,2473200,39456990,2.8565724974730966e-05 +QQQ,20170801 00:00,1437200,1437600,1431200,1435600,17002233,2.8565724974730966e-05 +SPY,20170802 00:00,2474700,2476000,2463700,2474400,40002720,2.8326851340471457e-05 +QQQ,20170802 00:00,1444900,1445200,1426100,1439500,39489761,2.8326851340471457e-05 +SPY,20170803 00:00,2473100,2473400,2466400,2469600,35313680,2.8348122436303243e-05 +QQQ,20170803 00:00,1440900,1441400,1431300,1433900,25521874,2.8348122436303243e-05 +SPY,20170804 00:00,2475200,2477900,2469700,2474100,47115173,2.8349843259692595e-05 +QQQ,20170804 00:00,1437100,1439700,1430600,1436500,26533912,2.8349843259692595e-05 +SPY,20170807 00:00,2475000,2478700,2473700,2478700,26044202,2.8122708056758305e-05 +QQQ,20170807 00:00,1439100,1445600,1437100,1445600,16741235,2.8122708056758305e-05 +SPY,20170808 00:00,2474900,2489000,2468300,2472600,52101258,2.8146190658957732e-05 +QQQ,20170808 00:00,1442800,1454700,1439000,1443100,28774682,2.8146190658957732e-05 +SPY,20170809 00:00,2464600,2473100,2460600,2472500,55549945,2.8149407621141743e-05 +QQQ,20170809 00:00,1431200,1441900,1427900,1441200,33748470,2.8149407621141743e-05 +SPY,20170810 00:00,2463000,2464300,2437000,2437600,104046619,2.940113373806507e-05 +QQQ,20170810 00:00,1433000,1434000,1408900,1410300,58083013,2.940113373806507e-05 +SPY,20170811 00:00,2440000,2448000,2437500,2441200,61113729,2.936782412840891e-05 +QQQ,20170811 00:00,1412200,1424000,1409000,1421000,41971258,2.936782412840891e-05 +SPY,20170814 00:00,2455500,2467900,2455500,2465400,57898513,2.982064106765141e-05 +QQQ,20170814 00:00,1432300,1441500,1431900,1439300,32387080,2.982064106765141e-05 +SPY,20170815 00:00,2470000,2470000,2461600,2465100,47792878,2.978506062879858e-05 +QQQ,20170815 00:00,1442900,1443000,1436400,1440300,23753863,2.978506062879858e-05 +SPY,20170816 00:00,2470900,2475700,2464600,2469400,49448733,2.964622586474814e-05 +QQQ,20170816 00:00,1443900,1449700,1438100,1442800,30514187,2.964622586474814e-05 +SPY,20170817 00:00,2462600,2466000,2430900,2430900,115678588,3.100103659315954e-05 +QQQ,20170817 00:00,1437200,1439400,1413300,1413300,67323077,3.100103659315954e-05 +SPY,20170818 00:00,2429500,2441900,2422000,2427100,118659025,3.1016680938452965e-05 +QQQ,20170818 00:00,1414100,1422000,1406600,1412300,56332272,3.1016680938452965e-05 +SPY,20170821 00:00,2426400,2432000,2418300,2429000,52959492,3.1005786853058966e-05 +QQQ,20170821 00:00,1412200,1415200,1401800,1410500,35123426,3.1005786853058966e-05 +SPY,20170822 00:00,2436000,2456200,2435500,2454400,56390025,3.158182336976977e-05 +QQQ,20170822 00:00,1418100,1433500,1417600,1432000,34619678,3.158182336976977e-05 +SPY,20170823 00:00,2443400,2450500,2441800,2445600,41275750,3.1646559991938354e-05 +QQQ,20170823 00:00,1424800,1430100,1423800,1426900,22597420,3.1646559991938354e-05 +SPY,20170824 00:00,2450000,2451800,2437500,2439900,44822885,3.153606067626636e-05 +QQQ,20170824 00:00,1430100,1431700,1414700,1422700,34827777,3.153606067626636e-05 +SPY,20170825 00:00,2448900,2456100,2443900,2445600,53279580,3.1500030059050924e-05 +QQQ,20170825 00:00,1428200,1431800,1417800,1419700,24297121,3.1500030059050924e-05 +SPY,20170828 00:00,2451700,2451900,2440900,2445700,30596755,3.15017708875067e-05 +QQQ,20170828 00:00,1424000,1427400,1419600,1424100,13775472,3.15017708875067e-05 +SPY,20170829 00:00,2431300,2451500,2429300,2448500,45762826,3.1500383294888274e-05 +QQQ,20170829 00:00,1411900,1432100,1410600,1429700,22758846,3.1500383294888274e-05 +SPY,20170830 00:00,2448600,2463200,2446200,2460100,51768706,3.165034733051331e-05 +QQQ,20170830 00:00,1430900,1448900,1430000,1446500,32434308,3.165034733051331e-05 +SPY,20170831 00:00,2467500,2477700,2466100,2474900,74827764,3.184244438825675e-05 +QQQ,20170831 00:00,1450600,1462100,1449800,1462000,34597547,3.184244438825675e-05 +SPY,20170901 00:00,2479800,2483300,2476700,2478400,48254590,3.1840019309337976e-05 +QQQ,20170901 00:00,1463900,1465800,1456100,1460000,19670085,3.1840019309337976e-05 +SPY,20170905 00:00,2472700,2475200,2449500,2460600,80412244,3.210420273973613e-05 +QQQ,20170905 00:00,1455700,1458800,1436000,1446900,44535041,3.210420273973613e-05 +SPY,20170906 00:00,2468700,2472800,2462300,2469000,51824854,3.2068515092982175e-05 +QQQ,20170906 00:00,1451100,1454600,1440800,1451300,29368747,3.2068515092982175e-05 +SPY,20170907 00:00,2472700,2472700,2464000,2468700,51789141,3.20640068584445e-05 +QQQ,20170907 00:00,1454000,1458400,1449300,1454700,21870139,3.20640068584445e-05 +SPY,20170908 00:00,2465400,2471000,2463000,2465800,50483333,3.2053057377523075e-05 +QQQ,20170908 00:00,1452800,1453500,1440600,1442100,25232399,3.2053057377523075e-05 +SPY,20170911 00:00,2480400,2493000,2480300,2492100,58404461,2.995250876369039e-05 +QQQ,20170911 00:00,1453400,1461200,1453200,1458700,26018868,2.995250876369039e-05 +SPY,20170912 00:00,2496400,2500700,2494200,2500500,49393581,2.9032985503470357e-05 +QQQ,20170912 00:00,1462800,1464100,1455300,1462200,27088720,2.9032985503470357e-05 +SPY,20170913 00:00,2497300,2502100,2496000,2501700,42484385,2.8432930605709536e-05 +QQQ,20170913 00:00,1459700,1464400,1457300,1464200,22866601,2.8432930605709536e-05 +SPY,20170914 00:00,2498300,2503200,2496000,2500900,65581923,2.847547065727194e-05 +QQQ,20170914 00:00,1458500,1462900,1454700,1455600,27843552,2.847547065727194e-05 +SPY,20170915 00:00,2487000,2492900,2485700,2491900,68255555,2.788657883735267e-05 +QQQ,20170915 00:00,1455300,1465900,1452900,1460600,38902729,2.788657883735267e-05 +SPY,20170918 00:00,2496200,2501100,2492800,2497200,38706384,2.7714455184953253e-05 +QQQ,20170918 00:00,1459100,1463700,1451100,1455500,23954582,2.7714455184953253e-05 +SPY,20170919 00:00,2500000,2500700,2496000,2499700,38421723,2.7706236683492624e-05 +QQQ,20170919 00:00,1458100,1460100,1453100,1458000,18389221,2.7706236683492624e-05 +SPY,20170920 00:00,2500700,2501900,2489200,2500600,50752645,2.7713022989410296e-05 +QQQ,20170920 00:00,1457500,1459100,1442400,1453500,32303679,2.7713022989410296e-05 +SPY,20170921 00:00,2498700,2499800,2491900,2493900,43352855,2.7424347740896856e-05 +QQQ,20170921 00:00,1452500,1452500,1439500,1444600,27084994,2.7424347740896856e-05 +SPY,20170922 00:00,2490600,2496300,2490200,2494400,35884635,2.7263774878805967e-05 +QQQ,20170922 00:00,1440000,1445300,1438600,1443200,20342334,2.7263774878805967e-05 +SPY,20170925 00:00,2491600,2495500,2480800,2489300,50407468,2.7209005619281895e-05 +QQQ,20170925 00:00,1437500,1438300,1421000,1428000,51391091,2.7209005619281895e-05 +SPY,20170926 00:00,2494500,2496900,2488100,2490800,43026163,2.6891842085543596e-05 +QQQ,20170926 00:00,1435300,1438000,1426700,1431700,27820070,2.6891842085543596e-05 +SPY,20170927 00:00,2498900,2504900,2488800,2500500,62619261,2.679672472630469e-05 +QQQ,20170927 00:00,1439300,1450000,1435700,1444600,30416002,2.679672472630469e-05 +SPY,20170928 00:00,2497300,2504300,2496400,2503500,36427192,2.677858363852158e-05 +QQQ,20170928 00:00,1441100,1445500,1437900,1444100,23139707,2.677858363852158e-05 +SPY,20170929 00:00,2503700,2513100,2501300,2512300,59810909,2.6541582937528186e-05 +QQQ,20170929 00:00,1447000,1455600,1443200,1454500,40386063,2.6541582937528186e-05 +SPY,20171002 00:00,2515000,2523200,2514000,2523200,45157038,2.635980929819331e-05 +QQQ,20171002 00:00,1456700,1461700,1449200,1455800,26083175,2.635980929819331e-05 +SPY,20171003 00:00,2524800,2528900,2522300,2528600,48890886,2.6340077433727923e-05 +QQQ,20171003 00:00,1457700,1460600,1454500,1458900,18520352,2.6340077433727923e-05 +SPY,20171004 00:00,2527200,2534400,2525600,2531600,39214468,2.6285993993118222e-05 +QQQ,20171004 00:00,1456100,1463400,1454700,1460300,24676565,2.6285993993118222e-05 +SPY,20171005 00:00,2535400,2546800,2534100,2546600,57502282,2.6432769308172193e-05 +QQQ,20171005 00:00,1465600,1475400,1464100,1474600,29588461,2.6432769308172193e-05 +SPY,20171006 00:00,2541600,2544600,2538600,2543700,63350212,2.642953269433833e-05 +QQQ,20171006 00:00,1469600,1476600,1469600,1476600,21384976,2.642953269433833e-05 +SPY,20171009 00:00,2546500,2547000,2536500,2539500,27885527,2.6398108689502823e-05 +QQQ,20171009 00:00,1478500,1480100,1473100,1474900,13194621,2.6398108689502823e-05 +SPY,20171010 00:00,2545900,2550500,2539800,2546200,35938141,2.6298443354554168e-05 +QQQ,20171010 00:00,1479900,1481400,1469500,1476000,18721458,2.6298443354554168e-05 +SPY,20171011 00:00,2545300,2550200,2543200,2550200,35324039,2.5501041570196706e-05 +QQQ,20171011 00:00,1475300,1480700,1473400,1480400,11429786,2.5501041570196706e-05 +SPY,20171012 00:00,2546800,2550600,2543700,2546400,39362384,2.5529542887820743e-05 +QQQ,20171012 00:00,1478200,1483600,1476200,1477700,13958082,2.5529542887820743e-05 +SPY,20171013 00:00,2551500,2552700,2547600,2549500,39906982,2.5463372962238648e-05 +QQQ,20171013 00:00,1483700,1485100,1481900,1483400,17149441,2.5463372962238648e-05 +SPY,20171016 00:00,2552000,2555000,2548200,2552900,31623755,2.5469538334101044e-05 +QQQ,20171016 00:00,1487100,1488900,1484000,1488500,20856843,2.5469538334101044e-05 +SPY,20171017 00:00,2552400,2555200,2549800,2554700,29021655,2.5407239890669997e-05 +QQQ,20171017 00:00,1488000,1490600,1485700,1490400,12221763,2.5407239890669997e-05 +SPY,20171018 00:00,2559200,2559500,2555000,2557200,32340875,2.5230384002544956e-05 +QQQ,20171018 00:00,1491900,1492100,1486400,1488600,16268748,2.5230384002544956e-05 +SPY,20171019 00:00,2548300,2558200,2543500,2557900,51983499,2.5246577542273322e-05 +QQQ,20171019 00:00,1479900,1483300,1472700,1483100,25560329,2.5246577542273322e-05 +SPY,20171020 00:00,2567300,2571400,2564200,2571100,68864750,2.5255524005395266e-05 +QQQ,20171020 00:00,1489100,1490500,1485300,1487100,23514523,2.5255524005395266e-05 +SPY,20171023 00:00,2575100,2575100,2560200,2561100,50941227,2.5395749399447923e-05 +QQQ,20171023 00:00,1490200,1490300,1475400,1477400,25842803,2.5395749399447923e-05 +SPY,20171024 00:00,2565600,2568300,2561500,2565600,57258734,2.5242401820411054e-05 +QQQ,20171024 00:00,1480300,1483000,1474400,1479900,19394812,2.5242401820411054e-05 +SPY,20171025 00:00,2562300,2563100,2540000,2552900,84509571,2.528185442330814e-05 +QQQ,20171025 00:00,1477000,1481800,1463300,1474300,32891839,2.528185442330814e-05 +SPY,20171026 00:00,2560100,2563000,2555600,2556200,60425004,2.518931287476775e-05 +QQQ,20171026 00:00,1473400,1477100,1469200,1469600,24484471,2.518931287476775e-05 +SPY,20171027 00:00,2564700,2578900,2561600,2577100,68581031,2.5948916901471808e-05 +QQQ,20171027 00:00,1494300,1515200,1492100,1512400,56067103,2.5948916901471808e-05 +SPY,20171030 00:00,2570900,2576000,2564100,2567500,45270942,2.5818866465930918e-05 +QQQ,20171030 00:00,1511300,1521900,1509900,1515800,28902993,2.5818866465930918e-05 +SPY,20171031 00:00,2572100,2574400,2568100,2571500,42638839,2.5821707526079437e-05 +QQQ,20171031 00:00,1520700,1523700,1516300,1521500,24287932,2.5821707526079437e-05 +SPY,20171101 00:00,2581000,2584300,2570700,2574900,47993039,2.5543457256340033e-05 +QQQ,20171101 00:00,1527600,1528300,1515000,1521000,26423581,2.5543457256340033e-05 +SPY,20171102 00:00,2574300,2577500,2561900,2575900,48827159,2.5300376573414312e-05 +QQQ,20171102 00:00,1519300,1520000,1507700,1518100,28505858,2.5300376573414312e-05 +SPY,20171103 00:00,2578200,2585000,2573100,2584500,45788670,2.5147667618340363e-05 +QQQ,20171103 00:00,1523600,1533000,1518400,1532700,23695997,2.5147667618340363e-05 +SPY,20171106 00:00,2583100,2590000,2582200,2588500,40510098,2.5116684758032962e-05 +QQQ,20171106 00:00,1531500,1538500,1531000,1537900,27154642,2.5116684758032962e-05 +SPY,20171107 00:00,2590000,2593500,2580900,2586700,51927624,2.321020163914499e-05 +QQQ,20171107 00:00,1536700,1540800,1533400,1538800,20668666,2.321020163914499e-05 +SPY,20171108 00:00,2584600,2592200,2581500,2591100,40183247,2.3140594041645043e-05 +QQQ,20171108 00:00,1538000,1545400,1536200,1545000,15989852,2.3140594041645043e-05 +SPY,20171109 00:00,2577400,2583900,2563600,2581700,88196762,2.3109205513635462e-05 +QQQ,20171109 00:00,1532300,1537700,1521100,1536900,36619448,2.3109205513635462e-05 +SPY,20171110 00:00,2577100,2582100,2573700,2580900,46236809,2.3218066544672357e-05 +QQQ,20171110 00:00,1533300,1538200,1530600,1536800,18812296,2.3218066544672357e-05 +SPY,20171113 00:00,2573200,2585900,2572700,2583300,41967655,2.3209543721600053e-05 +QQQ,20171113 00:00,1531000,1543000,1531000,1538700,11838812,2.3209543721600053e-05 +SPY,20171114 00:00,2574400,2578500,2565200,2577300,50761825,2.327106232572635e-05 +QQQ,20171114 00:00,1533300,1535000,1525600,1533100,23486879,2.327106232572635e-05 +SPY,20171115 00:00,2566200,2572200,2556300,2564400,68119981,2.3041554335369198e-05 +QQQ,20171115 00:00,1526500,1530000,1517800,1525900,23184844,2.3041554335369198e-05 +SPY,20171116 00:00,2575200,2590400,2574800,2586200,68715102,2.3454391593990395e-05 +QQQ,20171116 00:00,1533600,1548900,1533600,1545400,30813361,2.3454391593990395e-05 +SPY,20171117 00:00,2582000,2584400,2577800,2578600,65649757,2.3415624603802353e-05 +QQQ,20171117 00:00,1545800,1546900,1538000,1539500,26503931,2.3415624603802353e-05 +SPY,20171120 00:00,2581500,2585200,2578600,2583000,38680440,2.335201930014755e-05 +QQQ,20171120 00:00,1540600,1541900,1536100,1538300,17318168,2.335201930014755e-05 +SPY,20171121 00:00,2591900,2602000,2591000,2599900,59121571,2.3325337233915446e-05 +QQQ,20171121 00:00,1545600,1555700,1544900,1555000,19556391,2.3325337233915446e-05 +SPY,20171122 00:00,2600700,2601500,2595800,2597600,36058663,2.3314589050445266e-05 +QQQ,20171122 00:00,1556400,1558400,1553500,1556900,18645624,2.3314589050445266e-05 +SPY,20171124 00:00,2603200,2604800,2601600,2603600,20775775,2.332893333922932e-05 +QQQ,20171124 00:00,1558500,1563100,1557700,1562600,7365109,2.332893333922932e-05 +SPY,20171127 00:00,2603800,2607500,2600000,2602300,43626677,2.3310628462399416e-05 +QQQ,20171127 00:00,1562100,1565600,1558300,1561900,20884148,2.3310628462399416e-05 +SPY,20171128 00:00,2607900,2629000,2606600,2628700,85200455,2.3292485048425243e-05 +QQQ,20171128 00:00,1565400,1566900,1557000,1565900,23291094,2.3292485048425243e-05 +SPY,20171129 00:00,2630500,2636300,2622000,2627100,70248234,2.337744747145755e-05 +QQQ,20171129 00:00,1564100,1564300,1531200,1538600,69863394,2.337744747145755e-05 +SPY,20171130 00:00,2638000,2660500,2636700,2650100,102291232,2.3447191397455157e-05 +QQQ,20171130 00:00,1545100,1554500,1541500,1551500,51088380,2.3447191397455157e-05 +SPY,20171201 00:00,2648000,2653100,2607600,2644600,144772948,2.3183381940518937e-05 +QQQ,20171201 00:00,1542000,1552400,1522600,1544900,54713571,2.3183381940518937e-05 +SPY,20171204 00:00,2663800,2667900,2641200,2641400,81628604,2.3282894724035788e-05 +QQQ,20171204 00:00,1554600,1556300,1525600,1527100,47860659,2.3282894724035788e-05 +SPY,20171205 00:00,2644000,2651500,2630400,2631900,72059111,2.3150259409478114e-05 +QQQ,20171205 00:00,1526800,1545500,1521000,1528100,35003699,2.3150259409478114e-05 +SPY,20171206 00:00,2628400,2637300,2627200,2632400,63603819,2.3130543896733008e-05 +QQQ,20171206 00:00,1522400,1537400,1520600,1535000,26735402,2.3130543896733008e-05 +SPY,20171207 00:00,2630800,2644300,2629400,2640700,66321314,2.258095240263917e-05 +QQQ,20171207 00:00,1534900,1544600,1533300,1540200,29052610,2.258095240263917e-05 +SPY,20171208 00:00,2650000,2655200,2647200,2655100,61507907,2.263980283607105e-05 +QQQ,20171208 00:00,1551500,1555300,1544600,1547000,25372639,2.263980283607105e-05 +SPY,20171211 00:00,2656000,2663800,2654900,2663100,59974834,2.2557383765332773e-05 +QQQ,20171211 00:00,1547700,1559500,1547600,1559000,19555803,2.2557383765332773e-05 +SPY,20171212 00:00,2666000,2673200,2663500,2667800,70771940,2.2506361867898955e-05 +QQQ,20171212 00:00,1558300,1561500,1553600,1556900,18878908,2.2506361867898955e-05 +SPY,20171213 00:00,2670500,2675600,2666600,2667500,84036820,2.222678084517004e-05 +QQQ,20171213 00:00,1563200,1565000,1557600,1559900,23519388,2.222678084517004e-05 +SPY,20171214 00:00,2670900,2672100,2656000,2656600,80249826,2.214905253751432e-05 +QQQ,20171214 00:00,1562600,1566600,1557100,1558800,22166182,2.214905253751432e-05 +SPY,20171215 00:00,2655400,2670400,2653900,2665100,121594778,2.2246424785137333e-05 +QQQ,20171215 00:00,1564900,1578200,1562400,1576500,40839767,2.2246424785137333e-05 +SPY,20171218 00:00,2681000,2686000,2679800,2682000,63715443,2.210063603699942e-05 +QQQ,20171218 00:00,1583600,1587700,1580700,1586400,22690586,2.210063603699942e-05 +SPY,20171219 00:00,2685100,2685300,2670900,2671700,65048769,2.2210381203959975e-05 +QQQ,20171219 00:00,1583400,1585000,1572700,1577000,28335811,2.2210381203959975e-05 +SPY,20171220 00:00,2682500,2683300,2666900,2670300,57876020,2.2186011455650255e-05 +QQQ,20171220 00:00,1582500,1582800,1569100,1575300,32193822,2.2186011455650255e-05 +SPY,20171221 00:00,2677300,2683900,2673000,2675800,58124382,2.2155491550849903e-05 +QQQ,20171221 00:00,1577500,1582500,1573700,1575500,16384267,2.2155491550849903e-05 +SPY,20171222 00:00,2676100,2676300,2669000,2675100,49690800,2.212629409923758e-05 +QQQ,20171222 00:00,1573100,1574300,1569500,1573700,20892107,2.212629409923758e-05 +SPY,20171226 00:00,2670200,2673800,2668900,2671900,39296365,2.2176154045381258e-05 +QQQ,20171226 00:00,1564900,1567200,1559500,1565200,21303618,2.2176154045381258e-05 +SPY,20171227 00:00,2673500,2677300,2670200,2673200,46121058,2.214736285400654e-05 +QQQ,20171227 00:00,1565300,1569600,1563900,1565400,22489654,2.214736285400654e-05 +SPY,20171228 00:00,2678700,2679200,2674500,2678700,40062616,2.183246271038642e-05 +QQQ,20171228 00:00,1570400,1570600,1565400,1567300,22681899,2.183246271038642e-05 +SPY,20171229 00:00,2685500,2685500,2666400,2668600,60907419,2.1952779935988754e-05 +QQQ,20171229 00:00,1568700,1569000,1557000,1557600,30723064,2.1952779935988754e-05 +SPY,20180102 00:00,2678600,2688100,2674000,2687700,60549562,2.217495370811296e-05 +QQQ,20180102 00:00,1565600,1585300,1561700,1584900,29229435,2.217495370811296e-05 +SPY,20180103 00:00,2689900,2706400,2689500,2704700,69993787,2.2151089940314533e-05 +QQQ,20180103 00:00,1586400,1601700,1586100,1600300,25624560,2.2151089940314533e-05 +SPY,20180104 00:00,2712200,2721600,2711000,2716100,70499774,2.2070448893500825e-05 +QQQ,20180104 00:00,1605800,1607900,1600800,1603100,23211278,2.2070448893500825e-05 +SPY,20180105 00:00,2725600,2735600,2719500,2734200,62838867,2.2307123549534964e-05 +QQQ,20180105 00:00,1610700,1620300,1607700,1619200,24592644,2.2307123549534964e-05 +SPY,20180108 00:00,2733200,2741000,2729800,2739200,45590194,2.2233311375478263e-05 +QQQ,20180108 00:00,1619200,1626300,1618600,1625500,21648301,2.2233311375478263e-05 +SPY,20180109 00:00,2744300,2752400,2740900,2745400,50588042,2.226113931375472e-05 +QQQ,20180109 00:00,1628700,1630400,1620700,1625600,22325508,2.226113931375472e-05 +SPY,20180110 00:00,2737100,2744200,2729200,2741200,52504885,2.229629208895493e-05 +QQQ,20180110 00:00,1618400,1622100,1611200,1621800,31069194,2.229629208895493e-05 +SPY,20180111 00:00,2747500,2761200,2745600,2761200,57132771,2.2431779022083423e-05 +QQQ,20180111 00:00,1624600,1633000,1622100,1632900,19081503,2.2431779022083423e-05 +SPY,20180112 00:00,2764300,2781100,2762700,2779200,72240014,2.2536770065357766e-05 +QQQ,20180112 00:00,1631500,1646600,1629400,1644900,32400221,2.2536770065357766e-05 +SPY,20180116 00:00,2794200,2800900,2761800,2769700,98395992,2.2591313824750008e-05 +QQQ,20180116 00:00,1655800,1664200,1635300,1640200,36820412,2.2591313824750008e-05 +SPY,20180117 00:00,2780700,2800500,2771900,2796100,86404443,2.2851926733359725e-05 +QQQ,20180117 00:00,1648000,1660400,1640300,1657900,30469423,2.2851926733359725e-05 +SPY,20180118 00:00,2795100,2799600,2785800,2791400,86824501,2.2857776353448595e-05 +QQQ,20180118 00:00,1655300,1661900,1651300,1658200,24456253,2.2857776353448595e-05 +SPY,20180119 00:00,2797000,2804100,2791400,2804100,115665358,2.2855218308905876e-05 +QQQ,20180119 00:00,1663100,1666000,1655400,1663400,36302385,2.2855218308905876e-05 +SPY,20180122 00:00,2801600,2826900,2801200,2826900,67806515,2.3118060081757716e-05 +QQQ,20180122 00:00,1662800,1681200,1660900,1681200,23816650,2.3118060081757716e-05 +SPY,20180123 00:00,2827600,2836200,2823800,2832900,78792149,2.3145917727849656e-05 +QQQ,20180123 00:00,1686400,1696600,1685600,1695100,31171023,2.3145917727849656e-05 +SPY,20180124 00:00,2840300,2847000,2818400,2831800,109450315,2.306504064292807e-05 +QQQ,20180124 00:00,1698700,1702400,1674400,1684100,51050581,2.306504064292807e-05 +SPY,20180125 00:00,2841600,2842700,2824100,2833000,68835239,2.2792772775352177e-05 +QQQ,20180125 00:00,1695700,1696300,1678100,1683500,26898995,2.2792772775352177e-05 +SPY,20180126 00:00,2843200,2865800,2839700,2865800,79736062,2.3393211616526786e-05 +QQQ,20180126 00:00,1692900,1709300,1689500,1709300,26322276,2.3393211616526786e-05 +SPY,20180129 00:00,2859900,2864200,2845000,2846800,75630192,2.3582139110881257e-05 +QQQ,20180129 00:00,1705700,1709000,1697400,1701000,35410275,2.3582139110881257e-05 +SPY,20180130 00:00,2832000,2832900,2812200,2817600,111230880,2.37472230983884e-05 +QQQ,20180130 00:00,1685500,1694200,1678200,1687000,41542632,2.37472230983884e-05 +SPY,20180131 00:00,2827500,2833000,2806800,2819000,95104527,2.373080888483641e-05 +QQQ,20180131 00:00,1696500,1699900,1683400,1694000,35604847,2.373080888483641e-05 +SPY,20180201 00:00,2811000,2830600,2806900,2815800,72849227,2.3818381939298813e-05 +QQQ,20180201 00:00,1681000,1697300,1674200,1679600,33038089,2.3818381939298813e-05 +SPY,20180202 00:00,2800000,2802300,2754100,2754500,149222076,2.5714352734321215e-05 +QQQ,20180202 00:00,1673000,1677000,1644700,1646100,60915528,2.5714352734321215e-05 +SPY,20180205 00:00,2734700,2758400,2633100,2639300,260184696,3.251595167336449e-05 +QQQ,20180205 00:00,1630700,1657500,1580000,1581200,98547041,3.251595167336449e-05 +SPY,20180206 00:00,2597300,2697000,2587000,2691300,317612443,3.445786646715562e-05 +QQQ,20180206 00:00,1558100,1625100,1551000,1623100,112110301,3.445786646715562e-05 +SPY,20180207 00:00,2684600,2723600,2676400,2676700,146912435,3.480151416172639e-05 +QQQ,20180207 00:00,1617900,1635500,1602000,1602100,83257372,3.480151416172639e-05 +SPY,20180208 00:00,2680000,2681600,2576000,2576300,210533683,4.1332918345195445e-05 +QQQ,20180208 00:00,1606200,1608000,1534500,1534500,89080576,4.1332918345195445e-05 +SPY,20180209 00:00,2609400,2636000,2529300,2615000,252255048,4.222344859750335e-05 +QQQ,20180209 00:00,1556200,1572400,1501300,1561000,107816842,4.222344859750335e-05 +SPY,20180212 00:00,2638900,2669800,2618800,2653400,125613495,4.314087835122868e-05 +QQQ,20180212 00:00,1577000,1599500,1564600,1588700,57585969,4.314087835122868e-05 +SPY,20180213 00:00,2640000,2666200,2633100,2660000,72719768,4.3081256075832397e-05 +QQQ,20180213 00:00,1579600,1600100,1577200,1596900,29696626,4.3081256075832397e-05 +SPY,20180214 00:00,2644000,2700000,2639700,2695900,104371989,4.3964328373393785e-05 +QQQ,20180214 00:00,1587500,1629300,1580000,1626800,47805902,4.3964328373393785e-05 +SPY,20180215 00:00,2715600,2730300,2687700,2730300,97354499,4.472492014738737e-05 +QQQ,20180215 00:00,1641400,1657000,1624400,1657000,48455411,4.472492014738737e-05 +SPY,20180216 00:00,2722700,2753200,2722700,2731100,133139606,4.4724285587384566e-05 +QQQ,20180216 00:00,1651600,1667600,1646800,1649600,56144964,4.4724285587384566e-05 +SPY,20180220 00:00,2720000,2736700,2705000,2714000,74302666,4.468397330400046e-05 +QQQ,20180220 00:00,1643800,1666800,1643100,1652900,33092894,4.468397330400046e-05 +SPY,20180221 00:00,2718500,2747100,2699800,2700500,78867162,4.468354007940266e-05 +QQQ,20180221 00:00,1661000,1677200,1647300,1648200,35263645,4.468354007940266e-05 +SPY,20180222 00:00,2710900,2730500,2696500,2704000,96644954,4.46770052335112e-05 +QQQ,20180222 00:00,1655400,1664100,1643800,1648000,34023215,4.46770052335112e-05 +SPY,20180223 00:00,2718400,2747100,2712600,2747100,71109438,4.586794443069811e-05 +QQQ,20180223 00:00,1661300,1681700,1654600,1681700,45502535,4.586794443069811e-05 +SPY,20180226 00:00,2759000,2780100,2752600,2779000,74117961,4.639849226374899e-05 +QQQ,20180226 00:00,1689600,1704000,1688200,1704000,36878844,4.639849226374899e-05 +SPY,20180227 00:00,2781100,2789200,2743600,2744300,84017988,4.710110037964656e-05 +QQQ,20180227 00:00,1704500,1707300,1682100,1682900,40035622,4.710110037964656e-05 +SPY,20180228 00:00,2756500,2761800,2713200,2716500,97944730,4.7365773663136124e-05 +QQQ,20180228 00:00,1692500,1698000,1671000,1672100,38293608,4.7365773663136124e-05 +SPY,20180301 00:00,2715000,2731700,2660000,2677000,157627163,4.7869910455450654e-05 +QQQ,20180301 00:00,1673000,1680700,1630000,1644800,67254077,4.7869910455450654e-05 +SPY,20180302 00:00,2657500,2697200,2648200,2690800,111706399,4.7861717021047863e-05 +QQQ,20180302 00:00,1625000,1662700,1619600,1659900,51884411,4.7861717021047863e-05 +SPY,20180305 00:00,2677500,2728900,2676100,2721900,82516773,4.830460401965911e-05 +QQQ,20180305 00:00,1652100,1682600,1645900,1678300,35146466,4.830460401965911e-05 +SPY,20180306 00:00,2732800,2733800,2711800,2728800,66749775,4.828407579212012e-05 +QQQ,20180306 00:00,1686500,1691100,1674900,1685400,26680406,4.828407579212012e-05 +SPY,20180307 00:00,2703900,2731700,2702100,2727800,75522183,4.824053985821141e-05 +QQQ,20180307 00:00,1672500,1690700,1669600,1689300,30575790,4.824053985821141e-05 +SPY,20180308 00:00,2735200,2742400,2724200,2741000,55014311,4.832237492137818e-05 +QQQ,20180308 00:00,1696300,1699700,1689500,1698600,24106812,4.832237492137818e-05 +SPY,20180309 00:00,2756900,2788700,2753400,2788700,93409685,4.9546532037318305e-05 +QQQ,20180309 00:00,1710700,1731600,1708200,1731600,33424419,4.9546532037318305e-05 +SPY,20180312 00:00,2792000,2799100,2780900,2785200,62503496,4.948020946780732e-05 +QQQ,20180312 00:00,1736700,1744800,1732800,1740800,33469089,4.948020946780732e-05 +SPY,20180313 00:00,2798400,2804000,2760300,2767200,77611771,4.989738255484822e-05 +QQQ,20180313 00:00,1748300,1752100,1712700,1717100,52183520,4.989738255484822e-05 +SPY,20180314 00:00,2778100,2780200,2746700,2753000,90187429,4.98640177807626e-05 +QQQ,20180314 00:00,1726100,1727400,1709400,1716800,35893605,4.98640177807626e-05 +SPY,20180315 00:00,2758500,2766000,2744300,2750000,68608453,4.971416839677082e-05 +QQQ,20180315 00:00,1718000,1725300,1709000,1715300,24478596,4.971416839677082e-05 +SPY,20180316 00:00,2744500,2753800,2741600,2742000,80466251,4.9752578327943275e-05 +QQQ,20180316 00:00,1718200,1722000,1709400,1710200,24677194,4.9752578327943275e-05 +SPY,20180319 00:00,2733400,2733800,2686300,2704900,95066872,5.1005652477039016e-05 +QQQ,20180319 00:00,1691000,1692200,1656400,1671000,62665331,5.1005652477039016e-05 +SPY,20180320 00:00,2709100,2716700,2701800,2709500,52033461,5.101568240410253e-05 +QQQ,20180320 00:00,1671700,1680400,1666100,1676500,31500793,5.101568240410253e-05 +SPY,20180321 00:00,2708800,2732600,2701900,2704300,71895340,5.0203695833978436e-05 +QQQ,20180321 00:00,1672100,1687600,1661900,1669200,41773262,5.0203695833978436e-05 +SPY,20180322 00:00,2678500,2688600,2633700,2636700,128018295,5.2772895205094e-05 +QQQ,20180322 00:00,1646100,1657700,1625900,1628000,61401317,5.2772895205094e-05 +SPY,20180323 00:00,2641700,2650200,2578300,2580500,152584561,5.511249119634276e-05 +QQQ,20180323 00:00,1626100,1633000,1584400,1585100,70619939,5.511249119634276e-05 +SPY,20180326 00:00,2621600,2654300,2594100,2651100,119051490,5.9004220286967507e-05 +QQQ,20180326 00:00,1617200,1646000,1591500,1644000,51322647,5.9004220286967507e-05 +SPY,20180327 00:00,2661700,2667700,2588700,2606000,116865500,6.132713666869844e-05 +QQQ,20180327 00:00,1656200,1656200,1576800,1590800,70092542,6.132713666869844e-05 +SPY,20180328 00:00,2607600,2626400,2585800,2598300,130160686,6.13481925781779e-05 +QQQ,20180328 00:00,1581700,1597800,1560400,1572500,80283198,6.13481925781779e-05 +SPY,20180329 00:00,2611200,2652600,2602800,2631500,101867581,6.220241196675848e-05 +QQQ,20180329 00:00,1581000,1617100,1566400,1601300,62725737,6.220241196675848e-05 +SPY,20180402 00:00,2625600,2631300,2546700,2574700,156224122,6.478662609363818e-05 +QQQ,20180402 00:00,1589900,1597500,1538800,1555100,81617579,6.478662609363818e-05 +SPY,20180403 00:00,2589200,2613100,2568400,2607700,112280149,6.529329613685325e-05 +QQQ,20180403 00:00,1568700,1579300,1544400,1572600,59080294,6.529329613685325e-05 +SPY,20180404 00:00,2567600,2643600,2566000,2635600,105850742,6.589390628490766e-05 +QQQ,20180404 00:00,1542200,1602300,1540400,1597400,59094528,6.589390628490766e-05 +SPY,20180405 00:00,2655500,2666400,2643300,2656400,74694497,6.603766502608057e-05 +QQQ,20180405 00:00,1613300,1615700,1594800,1606500,40378173,6.603766502608057e-05 +SPY,20180406 00:00,2634200,2651000,2580000,2597200,147082676,6.830960405360469e-05 +QQQ,20180406 00:00,1588800,1604600,1558800,1566300,54466041,6.830960405360469e-05 +SPY,20180409 00:00,2613700,2648400,2605400,2610000,91750575,6.842407710617373e-05 +QQQ,20180409 00:00,1579800,1608800,1574600,1577300,38606428,6.842407710617373e-05 +SPY,20180410 00:00,2642500,2660400,2629900,2651500,95382545,6.972315997383429e-05 +QQQ,20180410 00:00,1602100,1617300,1590700,1612100,45510646,6.972315997383429e-05 +SPY,20180411 00:00,2634200,2656400,2633900,2637600,80296381,6.987421859915622e-05 +QQQ,20180411 00:00,1602000,1620000,1601000,1602800,39039665,6.987421859915622e-05 +SPY,20180412 00:00,2652800,2670000,2650600,2659300,63531523,7.018379654924757e-05 +QQQ,20180412 00:00,1612500,1627700,1611600,1622100,29137347,7.018379654924757e-05 +SPY,20180413 00:00,2674500,2675400,2640100,2651500,74484642,7.01712020859596e-05 +QQQ,20180413 00:00,1630200,1632500,1606700,1613700,39801932,7.01712020859596e-05 +SPY,20180416 00:00,2670000,2681900,2660700,2673300,53229700,7.02394551556821e-05 +QQQ,20180416 00:00,1625000,1631900,1614700,1626000,24878654,7.02394551556821e-05 +SPY,20180417 00:00,2693300,2708700,2687500,2701900,54103741,7.082663284179882e-05 +QQQ,20180417 00:00,1642400,1664500,1639100,1661000,33172661,7.082663284179882e-05 +SPY,20180418 00:00,2706800,2713000,2698700,2703900,50299257,7.079143264833272e-05 +QQQ,20180418 00:00,1661000,1670000,1653100,1664400,27217596,7.079143264833272e-05 +SPY,20180419 00:00,2695900,2698600,2677200,2688900,66127959,7.10464055022388e-05 +QQQ,20180419 00:00,1656000,1659900,1643400,1649100,32272835,7.10464055022388e-05 +SPY,20180420 00:00,2688700,2690600,2656200,2666100,86632836,7.142337005232812e-05 +QQQ,20180420 00:00,1644900,1646100,1617300,1623000,43908605,7.142337005232812e-05 +SPY,20180423 00:00,2672800,2678800,2653500,2665700,56938463,7.141656889168771e-05 +QQQ,20180423 00:00,1630900,1637300,1610200,1618900,29619483,7.141656889168771e-05 +SPY,20180424 00:00,2677600,2679700,2612800,2629800,105344976,7.216526190193754e-05 +QQQ,20180424 00:00,1626600,1629000,1573900,1584600,68025816,7.216526190193754e-05 +SPY,20180425 00:00,2629400,2641300,2608500,2636300,85139536,7.202923245011512e-05 +QQQ,20180425 00:00,1587400,1593100,1564800,1586500,48319632,7.202923245011512e-05 +SPY,20180426 00:00,2648600,2672400,2642900,2663100,58733046,7.28066886396088e-05 +QQQ,20180426 00:00,1607000,1625300,1601800,1619900,38128925,7.28066886396088e-05 +SPY,20180427 00:00,2670000,2673300,2655000,2665600,49090356,7.279869584120947e-05 +QQQ,20180427 00:00,1643700,1644100,1611700,1620900,46538264,7.279869584120947e-05 +SPY,20180430 00:00,2672600,2678900,2644400,2645100,64203115,7.306388849384294e-05 +QQQ,20180430 00:00,1624700,1634800,1605400,1609400,32583764,7.306388849384294e-05 +SPY,20180501 00:00,2638700,2651000,2621200,2649800,60987801,7.305313781673309e-05 +QQQ,20180501 00:00,1605200,1628000,1601400,1627800,34080939,7.305313781673309e-05 +SPY,20180502 00:00,2647700,2656800,2627700,2632000,70609719,7.324175149765539e-05 +QQQ,20180502 00:00,1630600,1635700,1616300,1618200,35408333,7.324175149765539e-05 +SPY,20180503 00:00,2622800,2633600,2590500,2626200,120224810,7.322505737051507e-05 +QQQ,20180503 00:00,1610000,1624000,1592200,1618000,59058522,7.322505737051507e-05 +SPY,20180504 00:00,2615200,2667800,2611500,2660200,68817239,7.413441183215583e-05 +QQQ,20180504 00:00,1611000,1652500,1609800,1648700,38502554,7.413441183215583e-05 +SPY,20180507 00:00,2669100,2680200,2661100,2669200,47379307,7.418244177570493e-05 +QQQ,20180507 00:00,1656400,1667800,1655100,1662400,30015319,7.418244177570493e-05 +SPY,20180508 00:00,2664800,2673200,2651500,2669200,57615594,7.418919685127092e-05 +QQQ,20180508 00:00,1658900,1664300,1648600,1660700,24944018,7.418919685127092e-05 +SPY,20180509 00:00,2676700,2698600,2671000,2695000,52616842,7.457334776673809e-05 +QQQ,20180509 00:00,1663700,1680000,1657800,1678800,26637300,7.457334776673809e-05 +SPY,20180510 00:00,2703400,2723900,2702300,2720200,59562006,7.490985338885113e-05 +QQQ,20180510 00:00,1684200,1697400,1682900,1696200,25001870,7.490985338885113e-05 +SPY,20180511 00:00,2722500,2731400,2715800,2728500,49302696,7.487471865684191e-05 +QQQ,20180511 00:00,1694200,1698600,1687200,1694600,21711786,7.487471865684191e-05 +SPY,20180514 00:00,2733400,2740700,2723700,2729800,48164268,7.488668780174293e-05 +QQQ,20180514 00:00,1698500,1708200,1659300,1697500,19876008,7.488668780174293e-05 +SPY,20180515 00:00,2715200,2716100,2700300,2711000,75504782,7.519217499103781e-05 +QQQ,20180515 00:00,1684100,1685000,1669800,1678700,44101965,7.519217499103781e-05 +SPY,20180516 00:00,2711100,2727500,2711000,2722400,41303208,7.529661147128282e-05 +QQQ,20180516 00:00,1680900,1693700,1680100,1689800,21105809,7.529661147128282e-05 +SPY,20180517 00:00,2719300,2732300,2711400,2720100,49747414,7.340600477954969e-05 +QQQ,20180517 00:00,1683900,1696100,1675100,1683300,25902938,7.340600477954969e-05 +SPY,20180518 00:00,2716100,2720200,2709300,2713300,57758893,7.337214802654953e-05 +QQQ,20180518 00:00,1676800,1682600,1672100,1674600,23540773,7.337214802654953e-05 +SPY,20180521 00:00,2729900,2739800,2726000,2733700,49218301,7.342420284416427e-05 +QQQ,20180521 00:00,1687600,1694900,1676800,1684000,20890845,7.342420284416427e-05 +SPY,20180522 00:00,2739400,2742500,2722500,2726100,46039188,7.331609233704567e-05 +QQQ,20180522 00:00,1691700,1694500,1678800,1681800,18229381,7.331609233704567e-05 +SPY,20180523 00:00,2711900,2733900,2709900,2733600,52441278,7.338185479635065e-05 +QQQ,20180523 00:00,1668800,1696100,1668800,1696000,24979100,7.338185479635065e-05 +SPY,20180524 00:00,2729500,2732200,2707800,2728000,64497794,7.336648790722679e-05 +QQQ,20180524 00:00,1695500,1698500,1678400,1695500,26195326,7.336648790722679e-05 +SPY,20180525 00:00,2721500,2728600,2715800,2721500,43997689,7.323325260079656e-05 +QQQ,20180525 00:00,1695300,1703300,1692100,1697200,24132082,7.323325260079656e-05 +SPY,20180529 00:00,2702600,2711700,2677600,2690200,98456218,7.34840411713313e-05 +QQQ,20180529 00:00,1689500,1699200,1679600,1689700,38703565,7.34840411713313e-05 +SPY,20180530 00:00,2705000,2731000,2704300,2726100,61173533,7.381141571977561e-05 +QQQ,20180530 00:00,1695800,1704800,1692200,1701800,19705057,7.381141571977561e-05 +SPY,20180531 00:00,2722000,2724800,2702600,2709400,77780721,7.384595697485035e-05 +QQQ,20180531 00:00,1701800,1712000,1696300,1700700,33849468,7.384595697485035e-05 +SPY,20180601 00:00,2724900,2739400,2723300,2736000,61618180,7.430751331110402e-05 +QQQ,20180601 00:00,1709200,1728300,1708700,1727400,41272483,7.430751331110402e-05 +SPY,20180604 00:00,2745100,2751800,2742700,2749000,41517726,7.43270393109269e-05 +QQQ,20180604 00:00,1731800,1743400,1730700,1743000,18753380,7.43270393109269e-05 +SPY,20180605 00:00,2750200,2755300,2741900,2751000,43560811,7.43238924189374e-05 +QQQ,20180605 00:00,1747100,1751300,1740600,1748400,22545503,7.43238924189374e-05 +SPY,20180606 00:00,2759000,2775200,2750900,2774000,51074336,7.440725697545056e-05 +QQQ,20180606 00:00,1750200,1758900,1741400,1758600,23283885,7.440725697545056e-05 +SPY,20180607 00:00,2779800,2782800,2763400,2773700,62257297,7.441490161664298e-05 +QQQ,20180607 00:00,1758900,1759300,1735500,1744300,36818037,7.441490161664298e-05 +SPY,20180608 00:00,2767800,2782500,2766700,2781900,49348853,7.44075381288528e-05 +QQQ,20180608 00:00,1736100,1747000,1731800,1744400,29149960,7.44075381288528e-05 +SPY,20180611 00:00,2784200,2793700,2783100,2785600,44542078,7.41987384285943e-05 +QQQ,20180611 00:00,1743100,1753400,1742800,1749100,21215513,7.41987384285943e-05 +SPY,20180612 00:00,2790500,2793300,2782000,2789200,63125112,7.419163716161758e-05 +QQQ,20180612 00:00,1751500,1760000,1749600,1758300,21069179,7.419163716161758e-05 +SPY,20180613 00:00,2792100,2794800,2778000,2780300,66680720,7.408339863411225e-05 +QQQ,20180613 00:00,1761000,1771400,1754300,1758200,35959036,7.408339863411225e-05 +SPY,20180614 00:00,2790100,2793300,2780600,2787300,59029532,7.411670637847788e-05 +QQQ,20180614 00:00,1766300,1778900,1765000,1776000,32847905,7.411670637847788e-05 +SPY,20180615 00:00,2766500,2775000,2753500,2771300,95685257,7.417578599450707e-05 +QQQ,20180615 00:00,1769300,1773300,1761100,1769800,39273659,7.417578599450707e-05 +SPY,20180618 00:00,2754700,2767000,2749500,2765600,46078648,7.404806200646463e-05 +QQQ,20180618 00:00,1754900,1766500,1749400,1765000,26933522,7.404806200646463e-05 +SPY,20180619 00:00,2739800,2757500,2735300,2755000,73157804,7.362554305399212e-05 +QQQ,20180619 00:00,1742700,1760400,1737000,1760000,35197757,7.362554305399212e-05 +SPY,20180620 00:00,2762700,2767200,2755900,2759700,45977778,7.339959590158458e-05 +QQQ,20180620 00:00,1768100,1779800,1766500,1772500,29298016,7.339959590158458e-05 +SPY,20180621 00:00,2759800,2759800,2736800,2742400,63277398,7.368840111483678e-05 +QQQ,20180621 00:00,1777000,1778800,1753700,1757100,38540665,7.368840111483678e-05 +SPY,20180622 00:00,2756700,2757800,2744900,2747400,45162641,7.366730627426296e-05 +QQQ,20180622 00:00,1763000,1763600,1746900,1753200,27812197,7.366730627426296e-05 +SPY,20180625 00:00,2734500,2736100,2691100,2710000,115078014,7.497414200661434e-05 +QQQ,20180625 00:00,1737300,1739900,1698100,1713700,72480257,7.497414200661434e-05 +SPY,20180626 00:00,2716100,2725600,2707900,2716000,62816272,7.500100159437113e-05 +QQQ,20180626 00:00,1720000,1730500,1713700,1720700,36103163,7.500100159437113e-05 +SPY,20180627 00:00,2722700,2738700,2691800,2693500,89809831,7.485996731875764e-05 +QQQ,20180627 00:00,1728000,1735800,1696200,1697300,48556388,7.485996731875764e-05 +SPY,20180628 00:00,2692600,2717500,2684900,2708900,69724773,7.456359852442319e-05 +QQQ,20180628 00:00,1694700,1717700,1691700,1711900,43043605,7.456359852442319e-05 +SPY,20180629 00:00,2720800,2736600,2711900,2712800,71773644,7.38971117906463e-05 +QQQ,20180629 00:00,1720100,1729200,1714300,1716500,31725952,7.38971117906463e-05 +SPY,20180702 00:00,2695100,2720400,2692400,2718600,54236596,7.393794747179416e-05 +QQQ,20180702 00:00,1699700,1728500,1696700,1728000,30298605,7.393794747179416e-05 +SPY,20180703 00:00,2728800,2729800,2704200,2709000,35551259,7.41938308706781e-05 +QQQ,20180703 00:00,1734500,1734500,1706300,1708000,23208287,7.41938308706781e-05 +SPY,20180705 00:00,2721600,2731800,2709600,2731100,51422807,7.44793297876233e-05 +QQQ,20180705 00:00,1719400,1730600,1710300,1729200,28400870,7.44793297876233e-05 +SPY,20180706 00:00,2731400,2758400,2727200,2754200,53890390,7.455193512641475e-05 +QQQ,20180706 00:00,1733200,1757400,1730000,1756100,31464288,7.455193512641475e-05 +SPY,20180709 00:00,2765600,2779600,2765100,2779000,42066501,7.458950756849921e-05 +QQQ,20180709 00:00,1765200,1772300,1758200,1771900,22085629,7.458950756849921e-05 +SPY,20180710 00:00,2784000,2790100,2780900,2789000,45949582,7.457507387960858e-05 +QQQ,20180710 00:00,1775200,1777200,1767100,1773200,20775763,7.457507387960858e-05 +SPY,20180711 00:00,2771700,2780300,2765200,2768600,65023147,7.477593676186228e-05 +QQQ,20180711 00:00,1759300,1770700,1758000,1764200,26968896,7.477593676186228e-05 +SPY,20180712 00:00,2782900,2794300,2776100,2793700,52468803,7.502474530047641e-05 +QQQ,20180712 00:00,1772000,1794600,1770800,1794600,25270075,7.502474530047641e-05 +SPY,20180713 00:00,2791900,2799300,2786600,2795900,40862085,7.501932280914569e-05 +QQQ,20180713 00:00,1794500,1799000,1789500,1796100,24760337,7.501932280914569e-05 +SPY,20180716 00:00,2796600,2798000,2788400,2793400,37927451,7.492623857101706e-05 +QQQ,20180716 00:00,1796500,1799500,1788800,1791800,19170458,7.492623857101706e-05 +SPY,20180717 00:00,2784800,2809100,2784100,2804700,47922571,7.49958958240787e-05 +QQQ,20180717 00:00,1772800,1806500,1772800,1802700,28261011,7.49958958240787e-05 +SPY,20180718 00:00,2805700,2811800,2800600,2810600,35961053,7.497904950779873e-05 +QQQ,20180718 00:00,1802900,1804400,1793800,1799300,21232152,7.497904950779873e-05 +SPY,20180719 00:00,2803100,2807400,2794600,2800000,48872857,7.49857417449638e-05 +QQQ,20180719 00:00,1792800,1798800,1788300,1790300,28485440,7.49857417449638e-05 +SPY,20180720 00:00,2798000,2804800,2795100,2796800,61205760,7.499344493939402e-05 +QQQ,20180720 00:00,1796200,1801700,1787900,1789900,30820674,7.499344493939402e-05 +SPY,20180723 00:00,2794600,2804100,2790600,2802000,40201459,7.499790468557778e-05 +QQQ,20180723 00:00,1784600,1796400,1777400,1795600,19113242,7.499790468557778e-05 +SPY,20180724 00:00,2817900,2825500,2806400,2816100,55176993,7.506649279007673e-05 +QQQ,20180724 00:00,1814100,1820500,1795600,1803000,33515633,7.506649279007673e-05 +SPY,20180725 00:00,2813700,2843600,2812800,2840100,62755526,7.550523750439021e-05 +QQQ,20180725 00:00,1803800,1829300,1802800,1828200,28811490,7.550523750439021e-05 +SPY,20180726 00:00,2831500,2841100,2830900,2833400,46601066,7.569832982683035e-05 +QQQ,20180726 00:00,1803400,1809200,1798100,1800500,33630464,7.569832982683035e-05 +SPY,20180727 00:00,2837300,2838200,2803800,2814200,69312181,7.607650054888227e-05 +QQQ,20180727 00:00,1811900,1813100,1766100,1776200,55034032,7.607650054888227e-05 +SPY,20180730 00:00,2815100,2816800,2793600,2799500,53456799,7.640911030369877e-05 +QQQ,20180730 00:00,1776300,1777300,1742700,1751100,57906701,7.640911030369877e-05 +SPY,20180731 00:00,2807000,2820200,2803800,2813300,54314615,7.650535901877149e-05 +QQQ,20180731 00:00,1758000,1771300,1748200,1764500,41396605,7.650535901877149e-05 +SPY,20180801 00:00,2814800,2821300,2801400,2808600,48996782,7.647016343130742e-05 +QQQ,20180801 00:00,1768600,1776500,1761300,1771200,35078349,7.647016343130742e-05 +SPY,20180802 00:00,2794400,2825800,2791600,2823900,50365933,7.671851565341296e-05 +QQQ,20180802 00:00,1758700,1797400,1757900,1795300,42632985,7.671851565341296e-05 +SPY,20180803 00:00,2825500,2836500,2823400,2836000,41504629,7.670153132575126e-05 +QQQ,20180803 00:00,1798700,1800900,1790800,1800800,25587620,7.670153132575126e-05 +SPY,20180806 00:00,2836400,2849700,2832100,2846400,35260013,7.675776733393416e-05 +QQQ,20180806 00:00,1799600,1811900,1797400,1811400,21889822,7.675776733393416e-05 +SPY,20180807 00:00,2854000,2860100,2852500,2855800,38972125,7.675953295289043e-05 +QQQ,20180807 00:00,1816500,1821400,1812600,1818000,26022610,7.675953295289043e-05 +SPY,20180808 00:00,2853900,2859100,2849400,2854600,34117081,7.672565113904245e-05 +QQQ,20180808 00:00,1816000,1823600,1810600,1820200,20074033,7.672565113904245e-05 +SPY,20180809 00:00,2855400,2859700,2849200,2850700,31121962,7.673219829225239e-05 +QQQ,20180809 00:00,1819100,1826300,1816500,1819100,16874406,7.673219829225239e-05 +SPY,20180810 00:00,2834200,2840500,2823600,2831600,64276743,7.56670667079231e-05 +QQQ,20180810 00:00,1806800,1812100,1798400,1805200,30783887,7.56670667079231e-05 +SPY,20180813 00:00,2834900,2841600,2817700,2821000,54746417,7.56814416037432e-05 +QQQ,20180813 00:00,1808800,1820100,1802500,1803200,24111870,7.56814416037432e-05 +SPY,20180814 00:00,2829400,2841700,2825000,2839000,37456013,7.536177896509722e-05 +QQQ,20180814 00:00,1810100,1816600,1800400,1814500,19338963,7.536177896509722e-05 +SPY,20180815 00:00,2823500,2825100,2801600,2817800,90330173,7.578357536143642e-05 +QQQ,20180815 00:00,1800100,1805800,1781200,1792300,53086234,7.578357536143642e-05 +SPY,20180816 00:00,2833800,2850400,2833600,2840600,60613010,7.58506514894664e-05 +QQQ,20180816 00:00,1806100,1809900,1794700,1798200,25312473,7.58506514894664e-05 +SPY,20180817 00:00,2837600,2855600,2833800,2850600,55316391,7.445840013923565e-05 +QQQ,20180817 00:00,1793500,1803100,1782700,1798600,33948698,7.445840013923565e-05 +SPY,20180820 00:00,2855800,2859700,2850600,2856700,36225951,7.443198289090367e-05 +QQQ,20180820 00:00,1802600,1803200,1790000,1797000,21741917,7.443198289090367e-05 +SPY,20180821 00:00,2862600,2873100,2861100,2863400,57496192,7.445050461472528e-05 +QQQ,20180821 00:00,1802400,1814400,1801300,1803600,22583897,7.445050461472528e-05 +SPY,20180822 00:00,2858900,2867600,2855800,2861700,39705478,7.388061622460439e-05 +QQQ,20180822 00:00,1799800,1812700,1797500,1810600,16186743,7.388061622460439e-05 +SPY,20180823 00:00,2859400,2869400,2854400,2857900,41655271,7.382298411171838e-05 +QQQ,20180823 00:00,1807400,1820500,1805000,1808000,24600674,7.382298411171838e-05 +SPY,20180824 00:00,2864600,2876700,2863800,2875100,45762305,7.395215246648039e-05 +QQQ,20180824 00:00,1814000,1826300,1813600,1824800,20993905,7.395215246648039e-05 +SPY,20180827 00:00,2888600,2899000,2886800,2897800,51785180,7.423480771011931e-05 +QQQ,20180827 00:00,1834000,1843400,1831100,1843400,25171565,7.423480771011931e-05 +SPY,20180828 00:00,2903000,2904100,2894000,2899200,41169485,7.423979816367523e-05 +QQQ,20180828 00:00,1848300,1850200,1842200,1846100,18477558,7.423979816367523e-05 +SPY,20180829 00:00,2901600,2917400,2898900,2914800,51917476,7.442900137470832e-05 +QQQ,20180829 00:00,1849300,1868400,1848500,1867400,25960654,7.442900137470832e-05 +SPY,20180830 00:00,2909400,2913600,2896300,2903000,55221298,7.431177366226895e-05 +QQQ,20180830 00:00,1863800,1875100,1857900,1864100,26992915,7.431177366226895e-05 +SPY,20180831 00:00,2898400,2908100,2892900,2903100,52151495,7.410535036607769e-05 +QQQ,20180831 00:00,1861800,1871800,1859800,1866500,26303627,7.410535036607769e-05 +SPY,20180904 00:00,2898500,2902100,2886900,2898100,50641175,7.416283468971864e-05 +QQQ,20180904 00:00,1860800,1864000,1848500,1858500,25733347,7.416283468971864e-05 +SPY,20180905 00:00,2894100,2896400,2878900,2890300,62293382,7.40369763096372e-05 +QQQ,20180905 00:00,1855200,1855700,1828200,1834500,38956869,7.40369763096372e-05 +SPY,20180906 00:00,2891700,2894900,2870000,2881600,57093261,7.415906711365761e-05 +QQQ,20180906 00:00,1835300,1837600,1805800,1818100,41730763,7.415906711365761e-05 +SPY,20180907 00:00,2869600,2886900,2867100,2876000,59629388,7.421261141271672e-05 +QQQ,20180907 00:00,1805000,1826700,1804400,1811100,40746877,7.421261141271672e-05 +SPY,20180910 00:00,2887400,2890400,2878800,2881000,42190430,7.415359830281888e-05 +QQQ,20180910 00:00,1821500,1822500,1807300,1817200,23431667,7.415359830281888e-05 +SPY,20180911 00:00,2873700,2895500,2869800,2890500,42539380,7.38035869828823e-05 +QQQ,20180911 00:00,1809900,1834200,1805200,1831200,28024267,7.38035869828823e-05 +SPY,20180912 00:00,2890500,2898000,2882400,2891200,53961780,7.379337519791849e-05 +QQQ,20180912 00:00,1828500,1829800,1810100,1825800,34032538,7.379337519791849e-05 +SPY,20180913 00:00,2903000,2910300,2900000,2908300,44562244,7.399885758564608e-05 +QQQ,20180913 00:00,1837200,1848800,1836500,1845300,28520937,7.399885758564608e-05 +SPY,20180914 00:00,2911100,2912700,2900000,2908800,47621027,7.398006390903501e-05 +QQQ,20180914 00:00,1846600,1849400,1832600,1839900,28530710,7.398006390903501e-05 +SPY,20180917 00:00,2908200,2908600,2890400,2893400,59631885,7.438407769399518e-05 +QQQ,20180917 00:00,1836800,1838100,1811700,1813400,31552851,7.438407769399518e-05 +SPY,20180918 00:00,2895500,2915700,2895500,2909100,50345855,7.455063949376774e-05 +QQQ,20180918 00:00,1814900,1837300,1814000,1828400,30073629,7.455063949376774e-05 +SPY,20180919 00:00,2909800,2916700,2908300,2912200,42388455,7.454659309222258e-05 +QQQ,20180919 00:00,1828700,1833000,1815100,1827000,30354762,7.454659309222258e-05 +SPY,20180920 00:00,2926400,2939400,2925100,2935800,89443398,7.484105274012131e-05 +QQQ,20180920 00:00,1839600,1849700,1835100,1847200,30913412,7.484105274012131e-05 +SPY,20180921 00:00,2931700,2932200,2918100,2919900,86818431,7.490292485371771e-05 +QQQ,20180921 00:00,1852200,1854800,1834800,1837100,33896755,7.490292485371771e-05 +SPY,20180924 00:00,2914100,2915000,2903700,2910200,44500016,7.489989846840263e-05 +QQQ,20180924 00:00,1820200,1839600,1813000,1838900,31096778,7.489989846840263e-05 +SPY,20180925 00:00,2915300,2916500,2904900,2907500,38617967,7.477389142744382e-05 +QQQ,20180925 00:00,1838100,1842800,1831700,1841400,22974400,7.477389142744382e-05 +SPY,20180926 00:00,2908900,2922400,2894100,2898800,63273109,7.477924507221638e-05 +QQQ,20180926 00:00,1843000,1859900,1839100,1842700,32001124,7.477924507221638e-05 +SPY,20180927 00:00,2904100,2919100,2901000,2906900,49923097,7.473968769630845e-05 +QQQ,20180927 00:00,1850200,1864900,1849200,1858300,29602448,7.473968769630845e-05 +SPY,20180928 00:00,2900100,2912800,2899500,2907200,55605049,7.474553359216128e-05 +QQQ,20180928 00:00,1853100,1862900,1849700,1857900,26049970,7.474553359216128e-05 +SPY,20181001 00:00,2921200,2929300,2909800,2917300,55669774,7.468598215263729e-05 +QQQ,20181001 00:00,1868700,1875300,1857000,1861700,25704709,7.468598215263729e-05 +SPY,20181002 00:00,2915700,2923600,2911500,2915600,42173808,7.470363611208229e-05 +QQQ,20181002 00:00,1860100,1871800,1853200,1857500,24386848,7.470363611208229e-05 +SPY,20181003 00:00,2927400,2932100,2913200,2917200,55817020,7.469682106452753e-05 +QQQ,20181003 00:00,1865300,1869700,1856600,1859500,27517991,7.469682106452753e-05 +SPY,20181004 00:00,2912200,2912400,2876600,2894400,99293459,7.537177659085845e-05 +QQQ,20181004 00:00,1852000,1853200,1810600,1823800,73919030,7.537177659085845e-05 +SPY,20181005 00:00,2896500,2902700,2862300,2878200,90999928,7.550164882808709e-05 +QQQ,20181005 00:00,1823600,1829700,1784300,1801500,76707685,7.550164882808709e-05 +SPY,20181008 00:00,2870600,2882200,2855000,2878200,76849736,7.551944538020261e-05 +QQQ,20181008 00:00,1795200,1806400,1769300,1790500,61742017,7.551944538020261e-05 +SPY,20181009 00:00,2874300,2888600,2867700,2874000,66107852,7.54832787462575e-05 +QQQ,20181009 00:00,1791800,1810200,1787500,1796300,45411634,7.54832787462575e-05 +SPY,20181010 00:00,2869100,2869100,2778900,2783000,181989770,8.120664928361191e-05 +QQQ,20181010 00:00,1785100,1786200,1715000,1717300,107750119,8.120664928361191e-05 +SPY,20181011 00:00,2771500,2789000,2703900,2721700,246184984,8.23564562346169e-05 +QQQ,20181011 00:00,1710200,1734000,1678100,1696000,129230929,8.23564562346169e-05 +SPY,20181012 00:00,2768600,2770800,2723700,2759500,164510497,8.380705367632485e-05 +QQQ,20181012 00:00,1741700,1748600,1709400,1743200,93735869,8.380705367632485e-05 +SPY,20181015 00:00,2755400,2770400,2743000,2744000,90506955,8.409949118830387e-05 +QQQ,20181015 00:00,1737100,1740300,1715600,1722100,61016751,8.409949118830387e-05 +SPY,20181016 00:00,2765600,2808200,2760700,2804000,98163677,8.65204517792712e-05 +QQQ,20181016 00:00,1740200,1776500,1737000,1772200,61956383,8.65204517792712e-05 +SPY,20181017 00:00,2804400,2811500,2775600,2804500,96178817,8.652015710569971e-05 +QQQ,20181017 00:00,1780800,1782500,1754700,1772900,64279103,8.652015710569971e-05 +SPY,20181018 00:00,2794100,2800700,2749700,2764000,123177259,8.793500607328394e-05 +QQQ,20181018 00:00,1766200,1766800,1724500,1731800,78359843,8.793500607328394e-05 +SPY,20181019 00:00,2771600,2793000,2754700,2762500,117788143,8.793942890984383e-05 +QQQ,20181019 00:00,1745800,1760700,1723900,1730200,73550766,8.793942890984383e-05 +SPY,20181022 00:00,2770000,2773500,2744200,2750100,73429798,8.781501938124278e-05 +QQQ,20181022 00:00,1740600,1752400,1725800,1739100,49029825,8.781501938124278e-05 +SPY,20181023 00:00,2708700,2748700,2686100,2736100,125899322,8.778848828954598e-05 +QQQ,20181023 00:00,1706400,1741300,1688200,1732700,72284499,8.778848828954598e-05 +SPY,20181024 00:00,2733300,2737600,2647000,2653200,148689080,9.342254429656636e-05 +QQQ,20181024 00:00,1730700,1733600,1650400,1653400,92899209,9.342254429656636e-05 +SPY,20181025 00:00,2673100,2718100,2662300,2700800,119060991,9.573426110405244e-05 +QQQ,20181025 00:00,1679100,1720800,1671600,1710600,72464690,9.573426110405244e-05 +SPY,20181026 00:00,2659200,2687800,2623000,2653300,178385574,9.761948632212789e-05 +QQQ,20181026 00:00,1652000,1699600,1642300,1666600,119369315,9.761948632212789e-05 +SPY,20181029 00:00,2688100,2702500,2598600,2638600,145358219,9.718253440637102e-05 +QQQ,20181029 00:00,1692100,1698600,1600900,1632300,105659436,9.718253440637102e-05 +SPY,20181030 00:00,2637300,2681200,2631200,2677700,139865192,9.814950002669205e-05 +QQQ,20181030 00:00,1627500,1660400,1620200,1659200,84336866,9.814950002669205e-05 +SPY,20181031 00:00,2707100,2732300,2701300,2706300,109862120,9.909167153682538e-05 +QQQ,20181031 00:00,1686200,1712500,1685400,1698200,67657933,9.909167153682538e-05 +SPY,20181101 00:00,2716400,2737300,2703800,2735100,90496605,9.961870754459391e-05 +QQQ,20181101 00:00,1700700,1722400,1687800,1720600,48385077,9.961870754459391e-05 +SPY,20181102 00:00,2747500,2752300,2696000,2718900,105725403,0.00010001720432229384 +QQQ,20181102 00:00,1715300,1725500,1682200,1693800,69880974,0.00010001720432229384 +SPY,20181105 00:00,2724800,2740100,2713500,2733900,58423015,9.984303379611257e-05 +QQQ,20181105 00:00,1696000,1696600,1670700,1689600,37334894,9.984303379611257e-05 +SPY,20181106 00:00,2733600,2753000,2732500,2751200,50219235,9.999964109971596e-05 +QQQ,20181106 00:00,1689700,1711900,1687200,1702400,31202142,9.999964109971596e-05 +SPY,20181107 00:00,2775500,2811000,2770800,2810100,86619120,0.00010258939987329056 +QQQ,20181107 00:00,1722800,1755800,1718700,1755800,47526012,0.00010258939987329056 +SPY,20181108 00:00,2801100,2812100,2792200,2805000,56765848,0.00010263135455284703 +QQQ,20181108 00:00,1748600,1753100,1736300,1744600,36874874,0.00010263135455284703 +SPY,20181109 00:00,2790000,2792300,2761800,2777600,84222634,0.00010324038215426484 +QQQ,20181109 00:00,1728300,1732500,1701600,1715200,46735288,0.00010324038215426484 +SPY,20181112 00:00,2772400,2774600,2720000,2725700,88721475,0.00010556140072606857 +QQQ,20181112 00:00,1703200,1706400,1661800,1663300,58429623,0.00010556140072606857 +SPY,20181113 00:00,2730600,2753300,2712500,2720600,87233813,0.00010555530897408268 +QQQ,20181113 00:00,1671100,1694800,1660000,1664700,62013664,0.00010555530897408268 +SPY,20181114 00:00,2741800,2746100,2684500,2702000,112019431,0.00010574009574335465 +QQQ,20181114 00:00,1681200,1687000,1642500,1652000,69916045,0.00010574009574335465 +SPY,20181115 00:00,2687600,2735400,2670200,2730200,118697478,0.00010632512154294183 +QQQ,20181115 00:00,1649000,1685400,1634600,1680900,64836206,0.00010632512154294183 +SPY,20181116 00:00,2717400,2747400,2701800,2737300,107996462,0.00010588414775149194 +QQQ,20181116 00:00,1664500,1683100,1657800,1675000,52984169,0.00010588414775149194 +SPY,20181119 00:00,2731700,2733700,2680800,2691000,88067909,0.0001080743910616576 +QQQ,20181119 00:00,1667000,1669000,1615400,1620600,61634066,0.0001080743910616576 +SPY,20181120 00:00,2654100,2670000,2631600,2641200,121906074,0.00010943090848097345 +QQQ,20181120 00:00,1583700,1613800,1571200,1591600,95765718,0.00010943090848097345 +SPY,20181121 00:00,2657800,2671500,2650200,2650200,65299409,0.0001092553777388154 +QQQ,20181121 00:00,1613500,1619700,1601100,1603700,39161372,0.0001092553777388154 +SPY,20181123 00:00,2631600,2648200,2631000,2632500,37268417,0.00010946008174338459 +QQQ,20181123 00:00,1591300,1608400,1590900,1592100,19440370,0.00010946008174338459 +SPY,20181126 00:00,2658000,2675500,2653400,2675000,67846819,0.00011089203312363138 +QQQ,20181126 00:00,1614600,1629700,1607600,1628900,37670928,0.00011089203312363138 +SPY,20181127 00:00,2663400,2684000,2656600,2684000,68394857,0.00011093006504756745 +QQQ,20181127 00:00,1620400,1638500,1611800,1634400,35179662,0.00011093006504756745 +SPY,20181128 00:00,2696100,2745800,2685400,2745800,113271909,0.0001137397397048601 +QQQ,20181128 00:00,1646600,1687000,1637100,1687000,65556617,0.0001137397397048601 +SPY,20181129 00:00,2737100,2755500,2724400,2739800,70520259,0.00011371631096929386 +QQQ,20181129 00:00,1679900,1692600,1668200,1681500,40641640,0.00011371631096929386 +SPY,20181130 00:00,2738100,2762800,2734500,2756500,79834477,0.00011360558256342333 +QQQ,20181130 00:00,1684100,1694700,1675400,1693700,32157445,0.00011360558256342333 +SPY,20181203 00:00,2803800,2804000,2775100,2793000,87120547,0.00011444341649944064 +QQQ,20181203 00:00,1731100,1733100,1710300,1723300,46778837,0.00011444341649944064 +SPY,20181204 00:00,2783400,2788400,2699000,2702500,156127119,0.00011941851732262366 +QQQ,20181204 00:00,1714300,1719100,1655200,1657200,63579527,0.00011941851732262366 +SPY,20181206 00:00,2659700,2699600,2624400,2698400,183371757,0.00011937809892267926 +QQQ,20181206 00:00,1623800,1669100,1617700,1668900,66954926,0.00011937809892267926 +SPY,20181207 00:00,2694500,2712200,2626400,2635700,141538111,0.00012247973419166798 +QQQ,20181207 00:00,1661600,1671200,1608600,1613800,75527503,0.00012247973419166798 +SPY,20181210 00:00,2633700,2651600,2586200,2640700,144445674,0.00012251641675861674 +QQQ,20181210 00:00,1610800,1637800,1594100,1630700,68065748,0.00012251641675861674 +SPY,20181211 00:00,2676200,2678600,2624800,2641300,113002276,0.00012243019323595697 +QQQ,20181211 00:00,1657300,1657700,1622300,1636100,52460716,0.00012243019323595697 +SPY,20181212 00:00,2674500,2689500,2653800,2654600,86056529,0.0001225109886647038 +QQQ,20181212 00:00,1660000,1676000,1649600,1650500,46326965,0.0001225109886647038 +SPY,20181213 00:00,2664500,2674900,2641200,2653700,86351666,0.00012252252095906667 +QQQ,20181213 00:00,1661300,1668100,1640300,1651000,44378354,0.00012252252095906667 +SPY,20181214 00:00,2629200,2640300,2598500,2604700,104539987,0.000124333349120334 +QQQ,20181214 00:00,1632100,1638100,1607000,1610800,49409065,0.000124333349120334 +SPY,20181217 00:00,2593900,2606500,2535300,2553600,147122082,0.00012609703036208522 +QQQ,20181217 00:00,1603900,1616600,1561700,1574300,70668559,0.00012609703036208522 +SPY,20181218 00:00,2571900,2579400,2533500,2550800,119888002,0.00012592453694354493 +QQQ,20181218 00:00,1586500,1599500,1570400,1584200,58081477,0.00012592453694354493 +SPY,20181219 00:00,2551800,2593900,2493500,2512600,197525731,0.00012721463077960079 +QQQ,20181219 00:00,1581800,1607300,1533400,1545300,74373454,0.00012721463077960079 +SPY,20181220 00:00,2497800,2516200,2446600,2471700,223400311,0.00012805463568503928 +QQQ,20181220 00:00,1541500,1558700,1503900,1522900,94250074,0.00012805463568503928 +SPY,20181221 00:00,2467500,2496900,2399900,2407000,213445004,0.00013123701524319137 +QQQ,20181221 00:00,1530500,1540900,1467100,1475700,129074071,0.00013123701524319137 +SPY,20181224 00:00,2390000,2402900,2343400,2343400,126345859,0.00013406843791133262 +QQQ,20181224 00:00,1460800,1479800,1435000,1435000,49335610,0.00013406843791133262 +SPY,20181226 00:00,2359000,2461800,2337600,2461800,194254142,0.0001467602544048519 +QQQ,20181226 00:00,1450800,1524800,1440900,1524600,92989917,0.0001467602544048519 +SPY,20181227 00:00,2425700,2481800,2389600,2480700,162914215,0.00014686240122297137 +QQQ,20181227 00:00,1503700,1531700,1470900,1530500,78590106,0.00014686240122297137 +SPY,20181228 00:00,2497300,2513200,2464500,2477500,137837623,0.000146864312988884 +QQQ,20181228 00:00,1541500,1555900,1517200,1529700,71489790,0.000146864312988884 +SPY,20181231 00:00,2495000,2501600,2474800,2499200,109065742,0.00014715456071116745 +QQQ,20181231 00:00,1544000,1549800,1527100,1542600,47505014,0.00014715456071116745 +SPY,20190102 00:00,2460600,2512100,2459600,2501800,113049958,0.00014708552257207305 +QQQ,20190102 00:00,1509900,1557500,1508800,1548800,51536023,0.00014708552257207305 +SPY,20190103 00:00,2483000,2485700,2436700,2442100,120229906,0.00014963757258049562 +QQQ,20190103 00:00,1526000,1532600,1494900,1498200,69404288,0.00014963757258049562 +SPY,20190104 00:00,2475900,2531100,2471700,2523900,127632690,0.00015514316173051174 +QQQ,20190104 00:00,1523400,1570000,1517300,1562300,67039114,0.00015514316173051174 +SPY,20190107 00:00,2527600,2559300,2517000,2543800,92782393,0.00015549561533383127 +QQQ,20190107 00:00,1566200,1588600,1561100,1580900,47861136,0.00015549561533383127 +SPY,20190108 00:00,2568600,2573100,2540100,2567700,91402346,0.00015556623310759713 +QQQ,20190108 00:00,1595400,1601000,1572000,1595200,46488474,0.00015556623310759713 +SPY,20190109 00:00,2575600,2589100,2562000,2579700,81042188,0.00015569205703432022 +QQQ,20190109 00:00,1601400,1615200,1594700,1608200,42344592,0.00015569205703432022 +SPY,20190110 00:00,2563100,2591500,2555200,2588800,89194945,0.00015573327994774255 +QQQ,20190110 00:00,1596000,1613700,1587000,1612800,35692946,0.00015573327994774255 +SPY,20190111 00:00,2576500,2589800,2570300,2589800,63179848,0.00015571194549849455 +QQQ,20190111 00:00,1603300,1608600,1597900,1606900,26703439,0.00015571194549849455 +SPY,20190114 00:00,2568700,2583000,2564100,2574000,55596057,0.00015571808761564348 +QQQ,20190114 00:00,1593300,1599600,1585900,1592700,27932686,0.00015571808761564348 +SPY,20190115 00:00,2578200,2607000,2578200,2603500,75236655,0.00015642820157275785 +QQQ,20190115 00:00,1600000,1626000,1599100,1623800,37634318,0.00015642820157275785 +SPY,20190116 00:00,2608200,2619600,2606000,2609800,64108161,0.00015638800183785567 +QQQ,20190116 00:00,1626500,1637800,1623000,1623500,31433490,0.00015638800183785567 +SPY,20190117 00:00,2600000,2639200,2599700,2629600,81545544,0.0001562149362251553 +QQQ,20190117 00:00,1618300,1643600,1615700,1636300,35227649,0.0001562149362251553 +SPY,20190118 00:00,2650000,2669700,2641100,2664600,107074964,0.0001567424496216473 +QQQ,20190118 00:00,1647800,1660200,1638200,1652500,53513611,0.0001567424496216473 +SPY,20190122 00:00,2647700,2650400,2610600,2628600,94951142,0.00015775275564740236 +QQQ,20190122 00:00,1640600,1641400,1607600,1619400,51323876,0.00015775275564740236 +SPY,20190123 00:00,2640000,2647600,2606600,2634100,78007199,0.0001574088405805084 +QQQ,20190123 00:00,1627700,1635100,1603200,1621500,35694193,0.0001574088405805084 +SPY,20190124 00:00,2632100,2641900,2620900,2635500,52302743,0.0001573508254792736 +QQQ,20190124 00:00,1626800,1634400,1620700,1632000,29885170,0.0001573508254792736 +SPY,20190125 00:00,2656200,2667000,2651100,2657800,82960927,0.00015775891512701085 +QQQ,20190125 00:00,1645100,1656500,1639500,1651500,33802582,0.00015775891512701085 +SPY,20190128 00:00,2633800,2638300,2618000,2637600,78330632,0.00015812402498808587 +QQQ,20190128 00:00,1630200,1631100,1617500,1631100,29304666,0.00015812402498808587 +SPY,20190129 00:00,2639300,2645500,2624800,2634100,57549403,0.00015743939409915305 +QQQ,20190129 00:00,1632000,1632400,1609900,1615700,28156234,0.00015743939409915305 +SPY,20190130 00:00,2650900,2685200,2642500,2675800,83541451,0.0001589477619494036 +QQQ,20190130 00:00,1634000,1662800,1628900,1656800,38435029,0.0001589477619494036 +SPY,20190131 00:00,2675000,2703900,2672700,2699300,80400276,0.00015914458125636236 +QQQ,20190131 00:00,1667000,1689900,1664800,1681600,33302200,0.00015914458125636236 +SPY,20190201 00:00,2701300,2712000,2691900,2700600,72038042,0.00015912467168359721 +QQQ,20190201 00:00,1673300,1686000,1669900,1674500,29537201,0.00015912467168359721 +SPY,20190204 00:00,2701400,2720200,2693600,2719600,52322390,0.00015943854144363854 +QQQ,20190204 00:00,1674800,1695300,1673300,1695300,23620118,0.00015943854144363854 +SPY,20190205 00:00,2724700,2734400,2718900,2731000,66377266,0.00015783780040308363 +QQQ,20190205 00:00,1697600,1712300,1696900,1710300,26425448,0.00015783780040308363 +SPY,20190206 00:00,2728000,2733400,2719200,2727400,48360155,0.00015121422276509404 +QQQ,20190206 00:00,1710700,1713800,1697500,1705200,24886080,0.00015121422276509404 +SPY,20190207 00:00,2709300,2715400,2683000,2701400,87046957,0.00014970327551896807 +QQQ,20190207 00:00,1689400,1694400,1669500,1682300,40057925,0.00014970327551896807 +SPY,20190208 00:00,2687200,2705100,2678300,2704700,66123754,0.00014942072279107917 +QQQ,20190208 00:00,1667600,1685600,1665800,1685600,26940223,0.00014942072279107917 +SPY,20190211 00:00,2711700,2714900,2700400,2706200,59745218,0.00014302530159147255 +QQQ,20190211 00:00,1691700,1695800,1679800,1684000,20121553,0.00014302530159147255 +SPY,20190212 00:00,2724300,2745200,2723400,2741000,63150422,0.00014275576994113718 +QQQ,20190212 00:00,1696300,1711400,1693300,1708900,27174863,0.00014275576994113718 +SPY,20190213 00:00,2750600,2759300,2745600,2749900,58128429,0.00014176106573763684 +QQQ,20190213 00:00,1716500,1721600,1708200,1710100,23977737,0.00014176106573763684 +SPY,20190214 00:00,2737700,2756400,2728700,2743800,75153118,0.00014170924320747056 +QQQ,20190214 00:00,1704000,1718300,1698300,1712200,27535626,0.00014170924320747056 +SPY,20190215 00:00,2763800,2774000,2761300,2773700,79085885,0.00014089860545673982 +QQQ,20190215 00:00,1725200,1725300,1711400,1719400,29110477,0.00014089860545673982 +SPY,20190219 00:00,2765200,2785800,2764700,2778500,52093038,0.0001399907593312532 +QQQ,20190219 00:00,1714100,1728000,1713800,1722800,17490039,0.0001399907593312532 +SPY,20190220 00:00,2778500,2789200,2772500,2784100,67228767,0.00013999059916060754 +QQQ,20190220 00:00,1724000,1730800,1713200,1722500,31141890,0.00013999059916060754 +SPY,20190221 00:00,2777500,2781000,2763500,2774200,54799005,0.0001400925410634359 +QQQ,20190221 00:00,1717900,1722600,1707100,1716200,23187005,0.0001400925410634359 +SPY,20190222 00:00,2781500,2793500,2778200,2791400,69886502,0.00014020028273298762 +QQQ,20190222 00:00,1719900,1730100,1719000,1728900,25006408,0.00014020028273298762 +SPY,20190225 00:00,2806900,2813100,2794300,2795200,63299670,0.00014021782027752772 +QQQ,20190225 00:00,1742100,1746600,1734000,1735200,30248457,0.00014021782027752772 +SPY,20190226 00:00,2791300,2802900,2789000,2793200,51868143,0.00013894579770879278 +QQQ,20190226 00:00,1731000,1742500,1728100,1737000,20979120,0.00013894579770879278 +SPY,20190227 00:00,2785300,2795900,2774800,2792000,51380666,0.00013834833769399332 +QQQ,20190227 00:00,1729000,1738000,1717600,1735900,23268086,0.00013834833769399332 +SPY,20190228 00:00,2789700,2794500,2783200,2786800,55290567,0.00013773752045389317 +QQQ,20190228 00:00,1730500,1738100,1727000,1731900,23248524,0.00013773752045389317 +SPY,20190301 00:00,2804400,2808700,2788200,2804200,66469737,0.000137627432357856 +QQQ,20190301 00:00,1744400,1746500,1731800,1743900,29248724,0.000137627432357856 +SPY,20190304 00:00,2816500,2818700,2768400,2794000,92363298,0.00013665294431303209 +QQQ,20190304 00:00,1755400,1757900,1724700,1744200,36753041,0.00013665294431303209 +SPY,20190305 00:00,2795500,2797600,2784100,2790200,50799626,0.00013647556512142621 +QQQ,20190305 00:00,1745500,1750900,1736800,1745500,20872391,0.00013647556512142621 +SPY,20190306 00:00,2791600,2791600,2769700,2773300,65186339,0.00013613137583670779 +QQQ,20190306 00:00,1747200,1747500,1732800,1735600,25466317,0.00013613137583670779 +SPY,20190307 00:00,2768400,2769700,2740700,2750100,87135188,0.00013651319822328205 +QQQ,20190307 00:00,1731200,1731800,1707900,1714300,37390742,0.00013651319822328205 +SPY,20190308 00:00,2729200,2746500,2724300,2744600,75928240,0.00013653090938893752 +QQQ,20190308 00:00,1695100,1712500,1693400,1711700,35843196,0.00013653090938893752 +SPY,20190311 00:00,2752400,2786200,2752300,2784400,55683813,0.00013761353723055697 +QQQ,20190311 00:00,1718800,1748500,1718400,1747300,27970535,0.00013761353723055697 +SPY,20190312 00:00,2790900,2800700,2788500,2794900,67070688,0.00013636399859558713 +QQQ,20190312 00:00,1751900,1761400,1747800,1756900,31812656,0.00013636399859558713 +SPY,20190313 00:00,2804900,2823600,2803000,2813400,67192638,0.00013658296581458984 +QQQ,20190313 00:00,1766000,1779300,1763500,1770100,41549368,0.00013658296581458984 +SPY,20190314 00:00,2813300,2818400,2806700,2811600,58035218,0.00013622744604813725 +QQQ,20190314 00:00,1771300,1773400,1766500,1767100,21819108,0.00013622744604813725 +SPY,20190315 00:00,2805600,2822000,2803400,2813100,70500698,0.00013623362036163983 +QQQ,20190315 00:00,1774000,1788800,1772800,1783500,35552903,0.00013623362036163983 +SPY,20190318 00:00,2815300,2826500,2813000,2823300,53932917,0.00013623232580079405 +QQQ,20190318 00:00,1779500,1789900,1776000,1784500,31265820,0.00013623232580079405 +SPY,20190319 00:00,2834900,2843600,2814200,2824000,75871459,0.000136193710532875 +QQQ,20190319 00:00,1791800,1800000,1782900,1790500,35154600,0.000136193710532875 +SPY,20190320 00:00,2821600,2835000,2803200,2815500,76226168,0.00013487626024617436 +QQQ,20190320 00:00,1790600,1808500,1782400,1797600,48359171,0.00013487626024617436 +SPY,20190321 00:00,2806300,2851800,2806000,2847300,71740185,0.00013553032842829972 +QQQ,20190321 00:00,1792200,1828300,1791800,1825700,39599407,0.00013553032842829972 +SPY,20190322 00:00,2832200,2838000,2791800,2792500,112328040,0.0001372239898197842 +QQQ,20190322 00:00,1817800,1822700,1783700,1785600,63081223,0.0001372239898197842 +SPY,20190325 00:00,2788900,2801900,2776400,2790400,76291897,0.00013471105065096018 +QQQ,20190325 00:00,1779100,1788400,1769300,1782200,43505452,0.00013471105065096018 +SPY,20190326 00:00,2809700,2821800,2795700,2811200,59544156,0.00013251101673116336 +QQQ,20190326 00:00,1796000,1806900,1781300,1790500,31204124,0.00013251101673116336 +SPY,20190327 00:00,2811300,2817500,2779300,2796500,66485128,0.0001287151790598456 +QQQ,20190327 00:00,1793200,1797200,1766000,1779000,35311283,0.0001287151790598456 +SPY,20190328 00:00,2803600,2812100,2790700,2807100,51663386,0.000126475556386763 +QQQ,20190328 00:00,1783800,1789800,1772400,1783100,28929492,0.000126475556386763 +SPY,20190329 00:00,2824100,2828400,2811400,2824800,62399538,0.00012648134540640222 +QQQ,20190329 00:00,1796900,1798300,1786000,1796600,30546067,0.00012648134540640222 +SPY,20190401 00:00,2847000,2861600,2844100,2858300,63982897,0.00012618477345347428 +QQQ,20190401 00:00,1815100,1822600,1807700,1820400,29488047,0.00012618477345347428 +SPY,20190402 00:00,2860400,2862300,2851000,2859700,37196324,0.00012359792235867764 +QQQ,20190402 00:00,1822400,1829100,1817800,1827300,21129929,0.00012359792235867764 +SPY,20190403 00:00,2873300,2877500,2857500,2864200,58863047,0.00012310122942379151 +QQQ,20190403 00:00,1837600,1849200,1832100,1837800,30133176,0.00012310122942379151 +SPY,20190404 00:00,2868000,2874600,2860100,2871800,46049322,0.00012247262486033363 +QQQ,20190404 00:00,1838300,1845000,1826500,1837100,27789757,0.00012247262486033363 +SPY,20190405 00:00,2879500,2886300,2876000,2885700,52350041,0.00012240184854625077 +QQQ,20190405 00:00,1842400,1847600,1840200,1846600,23644875,0.00012240184854625077 +SPY,20190408 00:00,2881000,2889000,2873700,2887900,43533191,0.00012007756078712757 +QQQ,20190408 00:00,1843600,1852800,1836300,1851300,20744290,0.00012007756078712757 +SPY,20190409 00:00,2877200,2880800,2867000,2873100,58219574,0.00012005937564882317 +QQQ,20190409 00:00,1845000,1851100,1840900,1844800,24699718,0.00012005937564882317 +SPY,20190410 00:00,2877700,2883800,2873200,2882900,45338210,0.00011879507162353972 +QQQ,20190410 00:00,1847200,1855200,1845200,1854700,23262552,0.00011879507162353972 +SPY,20190411 00:00,2888400,2888400,2875800,2882100,50745623,0.00011865910260137282 +QQQ,20190411 00:00,1857800,1857800,1846900,1850300,18505271,0.00011865910260137282 +SPY,20190412 00:00,2900100,2904700,2892600,2901600,54347951,0.000118396811328272 +QQQ,20190412 00:00,1858500,1859500,1850700,1858300,22223740,0.000118396811328272 +SPY,20190415 00:00,2902700,2903500,2890800,2899700,40803641,0.00011832167615471801 +QQQ,20190415 00:00,1858400,1860700,1846200,1858600,20123121,0.00011832167615471801 +SPY,20190416 00:00,2909600,2910100,2895000,2901600,47250452,0.00011810668202336306 +QQQ,20190416 00:00,1865400,1869100,1859300,1865000,24893990,0.00011810668202336306 +SPY,20190417 00:00,2914100,2914200,2889900,2894500,46905428,0.00011721114427784122 +QQQ,20190417 00:00,1877500,1879300,1866000,1871500,27750109,0.00011721114427784122 +SPY,20190418 00:00,2901200,2903200,2886600,2900200,57128888,0.00011721341161753806 +QQQ,20190418 00:00,1874600,1875200,1862900,1873900,25593845,0.00011721341161753806 +SPY,20190422 00:00,2891700,2904400,2890700,2902700,34371097,0.00011698906285820853 +QQQ,20190422 00:00,1865700,1879900,1864300,1879200,13731861,0.00011698906285820853 +SPY,20190423 00:00,2906800,2931300,2904200,2928800,48067844,0.00011682045419653094 +QQQ,20190423 00:00,1884000,1905400,1881200,1903100,31631498,0.00011682045419653094 +SPY,20190424 00:00,2927600,2931500,2920800,2922300,39141617,0.00011685375879445694 +QQQ,20190424 00:00,1904700,1907100,1896500,1897100,21734340,0.00011685375879445694 +SPY,20190425 00:00,2921200,2927800,2907300,2920500,47913789,0.00011562408243178956 +QQQ,20190425 00:00,1911300,1912200,1894500,1904800,26548184,0.00011562408243178956 +SPY,20190426 00:00,2921200,2934900,2912500,2934100,40182622,0.00011562230833088605 +QQQ,20190426 00:00,1901800,1906900,1885900,1906500,23822356,0.00011562230833088605 +SPY,20190429 00:00,2935300,2944500,2934100,2938700,54400805,0.0001148427776943218 +QQQ,20190429 00:00,1906500,1913200,1903400,1910200,19023392,0.0001148427776943218 +SPY,20190430 00:00,2935200,2943400,2919200,2940200,65799876,0.00011484041007167289 +QQQ,20190430 00:00,1894800,1898500,1882100,1895400,28317401,0.00011484041007167289 +SPY,20190501 00:00,2947600,2949500,2918000,2918100,60258030,0.00011471221280107946 +QQQ,20190501 00:00,1907800,1913200,1888000,1889300,32651807,0.00011471221280107946 +SPY,20190502 00:00,2916800,2927000,2895500,2911800,60849168,0.00011470619100001083 +QQQ,20190502 00:00,1888700,1898500,1868700,1881100,42131444,0.00011470619100001083 +SPY,20190503 00:00,2928000,2943400,2925700,2940300,46544275,0.0001150848907486932 +QQQ,20190503 00:00,1896700,1912500,1893300,1911100,27017721,0.0001150848907486932 +SPY,20190506 00:00,2892400,2933100,2889300,2928200,87572687,0.00011520123023492203 +QQQ,20190506 00:00,1870500,1902000,1867600,1899400,34743766,0.00011520123023492203 +SPY,20190507 00:00,2901500,2908100,2858200,2879300,122126119,0.00011565865786548328 +QQQ,20190507 00:00,1878700,1886700,1845100,1862400,54326767,0.00011565865786548328 +SPY,20190508 00:00,2875600,2894300,2868800,2875300,76825136,0.00011558608108766706 +QQQ,20190508 00:00,1856300,1871700,1849600,1857700,32449463,0.00011558608108766706 +SPY,20190509 00:00,2852000,2873300,2833100,2866600,92353972,0.0001156629939632592 +QQQ,20190509 00:00,1837000,1854100,1820900,1847700,52171029,0.0001156629939632592 +SPY,20190510 00:00,2856400,2889400,2823000,2881000,98319928,0.0001152894782654487 +QQQ,20190510 00:00,1841100,1858900,1810400,1850000,54954515,0.0001152894782654487 +SPY,20190513 00:00,2823900,2834900,2799300,2808600,109539319,0.00011847324800150867 +QQQ,20190513 00:00,1802900,1812600,1780600,1785800,60429485,0.00011847324800150867 +SPY,20190514 00:00,2820100,2851000,2818500,2834000,71206743,0.00011886391362291519 +QQQ,20190514 00:00,1795200,1816300,1788600,1805400,38580449,0.00011886391362291519 +SPY,20190515 00:00,2816000,2857600,2813600,2850600,63998271,0.00011917227492602616 +QQQ,20190515 00:00,1793500,1835500,1793100,1830900,37705489,0.00011917227492602616 +SPY,20190516 00:00,2858300,2892100,2857700,2877000,64428827,0.00011919059161308818 +QQQ,20190516 00:00,1831700,1860800,1829500,1849300,36142804,0.00011919059161308818 +SPY,20190517 00:00,2851300,2886000,2851300,2858400,83049965,0.00011937912294221152 +QQQ,20190517 00:00,1831000,1855900,1828800,1830400,39804299,0.00011937912294221152 +SPY,20190520 00:00,2840600,2854300,2831200,2839500,54207516,0.00011983140979438127 +QQQ,20190520 00:00,1804900,1811800,1793400,1799500,35994540,0.00011983140979438127 +SPY,20190521 00:00,2858300,2869300,2855500,2865100,42481385,0.00012012271529474703 +QQQ,20190521 00:00,1815000,1823300,1809200,1818300,29307875,0.00012012271529474703 +SPY,20190522 00:00,2854300,2866700,2851000,2856300,44484176,0.00012003539894602251 +QQQ,20190522 00:00,1808200,1820700,1807600,1810200,22060482,0.00012003539894602251 +SPY,20190523 00:00,2831600,2832100,2805800,2821400,84366849,0.00012079009822124293 +QQQ,20190523 00:00,1789400,1790200,1771400,1782500,44194819,0.00012079009822124293 +SPY,20190524 00:00,2837500,2841900,2820900,2827800,47298776,0.00012070004187671419 +QQQ,20190524 00:00,1792100,1798500,1779400,1781600,22589441,0.00012070004187671419 +SPY,20190528 00:00,2830100,2841400,2801500,2801500,60527933,0.0001208472712783296 +QQQ,20190528 00:00,1786600,1796600,1774700,1774900,23392868,0.0001208472712783296 +SPY,20190529 00:00,2789100,2793500,2767200,2782700,92901721,0.00012108631651797922 +QQQ,20190529 00:00,1763900,1770000,1750900,1760300,39572794,0.00012108631651797922 +SPY,20190530 00:00,2790800,2800400,2778100,2790300,55710278,0.0001209097879544911 +QQQ,20190530 00:00,1765000,1772700,1757700,1767700,28350773,0.0001209097879544911 +SPY,20190531 00:00,2762000,2771200,2752500,2752700,72088865,0.00012142188710722533 +QQQ,20190531 00:00,1746900,1752900,1738800,1739500,40117278,0.00012142188710722533 +SPY,20190603 00:00,2753000,2765500,2730900,2745700,87492324,0.00012163509800128132 +QQQ,20190603 00:00,1734800,1739500,1692700,1701200,71017154,0.00012163509800128132 +SPY,20190604 00:00,2771100,2806800,2766200,2805300,68467401,0.0001234444760775027 +QQQ,20190604 00:00,1720300,1749700,1713700,1749100,43072748,0.0001234444760775027 +SPY,20190605 00:00,2823400,2829900,2803200,2829600,62528891,0.00012352886043322716 +QQQ,20190605 00:00,1765800,1766100,1743800,1762100,30828347,0.00012352886043322716 +SPY,20190606 00:00,2832900,2855500,2825700,2848000,59513845,0.00012371906868683958 +QQQ,20190606 00:00,1765100,1780400,1757400,1776100,27751893,0.00012371906868683958 +SPY,20190607 00:00,2859500,2888500,2857500,2876500,64257228,0.000124283422223139 +QQQ,20190607 00:00,1785600,1817600,1783300,1810400,42141936,0.000124283422223139 +SPY,20190610 00:00,2893500,2908200,2888800,2889700,54537978,0.00012447259905279764 +QQQ,20190610 00:00,1822500,1848500,1822100,1831500,38783273,0.00012447259905279764 +SPY,20190611 00:00,2909500,2914000,2881900,2889000,48746820,0.00012447321387302972 +QQQ,20190611 00:00,1850600,1854000,1827700,1834000,36934648,0.00012447321387302972 +SPY,20190612 00:00,2886400,2892600,2878200,2883900,40324747,0.00012450940453412288 +QQQ,20190612 00:00,1829000,1832800,1820000,1823400,25812738,0.00012450940453412288 +SPY,20190613 00:00,2893700,2899800,2886200,2895800,43570266,0.00012457627804824547 +QQQ,20190613 00:00,1831000,1838700,1827400,1834200,21717303,0.00012457627804824547 +SPY,20190614 00:00,2892700,2899200,2884100,2892600,44888094,0.00012459553654993005 +QQQ,20190614 00:00,1824800,1831100,1819400,1826400,20519150,0.00012459553654993005 +SPY,20190617 00:00,2895300,2902200,2891800,2893700,35295998,0.0001245083764236096 +QQQ,20190617 00:00,1830400,1842500,1828400,1837400,19397014,0.0001245083764236096 +SPY,20190618 00:00,2913800,2935600,2910000,2924000,77625000,0.0001250014455062919 +QQQ,20190618 00:00,1859100,1877200,1854300,1864100,43883008,0.0001250014455062919 +SPY,20190619 00:00,2925300,2936500,2914900,2930600,70013693,0.00012500072561599232 +QQQ,20190619 00:00,1866600,1875300,1855700,1871100,30558353,0.00012500072561599232 +SPY,20190620 00:00,2960200,2963100,2936100,2958600,86590076,0.00012527821981034122 +QQQ,20190620 00:00,1897200,1897600,1874500,1888500,36957899,0.00012527821981034122 +SPY,20190621 00:00,2941400,2955100,2937600,2940000,67991002,0.0001252891361316759 +QQQ,20190621 00:00,1886300,1897700,1881800,1885700,34571622,0.0001252891361316759 +SPY,20190624 00:00,2941800,2945800,2934700,2936400,38096535,0.00012506769375592367 +QQQ,20190624 00:00,1885300,1887200,1880600,1881600,17994745,0.00012506769375592367 +SPY,20190625 00:00,2936700,2937300,2906400,2907600,71876031,0.00012578766825311556 +QQQ,20190625 00:00,1880300,1881400,1846500,1849300,32580001,0.00012578766825311556 +SPY,20190626 00:00,2917800,2923100,2903500,2904700,44754247,0.00012449705011630837 +QQQ,20190626 00:00,1861600,1873300,1854900,1857900,19491445,0.00012449705011630837 +SPY,20190627 00:00,2912900,2920600,2909300,2915000,34194112,0.00012451316465950294 +QQQ,20190627 00:00,1864600,1869400,1860000,1865000,17743833,0.00012451316465950294 +SPY,20190628 00:00,2925700,2935500,2920200,2930000,48292420,0.0001240461103560153 +QQQ,20190628 00:00,1869300,1871500,1860700,1867400,19321818,0.0001240461103560153 +SPY,20190701 00:00,2966800,2969100,2943300,2956600,62311396,0.00012432427881157472 +QQQ,20190701 00:00,1903200,1905700,1883800,1892600,28837907,0.00012432427881157472 +SPY,20190702 00:00,2955900,2964900,2946900,2964300,54952846,0.00012434568371061229 +QQQ,20190702 00:00,1892000,1900300,1886500,1900100,17109901,0.00012434568371061229 +SPY,20190703 00:00,2971900,2988200,2970200,2988000,31250129,0.00012451540852649186 +QQQ,20190703 00:00,1904900,1914400,1902900,1914400,14307879,0.00012451540852649186 +SPY,20190705 00:00,2974600,2986400,2960200,2984600,41808407,0.00012434065659565734 +QQQ,20190705 00:00,1901300,1914000,1893900,1910500,18644892,0.00012434065659565734 +SPY,20190708 00:00,2970100,2973500,2962300,2968200,38037047,0.0001241491534371433 +QQQ,20190708 00:00,1898100,1898800,1889300,1897100,16851074,0.0001241491534371433 +SPY,20190709 00:00,2955100,2975200,2954800,2971900,35212296,0.00012367765691652897 +QQQ,20190709 00:00,1888100,1909000,1886500,1906600,17897528,0.00012367765691652897 +SPY,20190710 00:00,2984000,2996600,2977900,2986100,49211837,0.0001235503280008294 +QQQ,20190710 00:00,1918200,1930900,1914700,1925600,25459850,0.0001235503280008294 +SPY,20190711 00:00,2993400,2995800,2982000,2993100,46132132,0.0001235370261719626 +QQQ,20190711 00:00,1928500,1933400,1918100,1924200,21016895,0.0001235370261719626 +SPY,20190712 00:00,2998600,3007300,2995100,3006500,35952915,0.00012345636028446102 +QQQ,20190712 00:00,1926300,1935400,1924600,1935300,17235862,0.00012345636028446102 +SPY,20190715 00:00,3011200,3011300,3002200,3007500,28272073,0.00012287311282789548 +QQQ,20190715 00:00,1939800,1941900,1934400,1941500,14462032,0.00012287311282789548 +SPY,20190716 00:00,3006400,3008800,2994400,2997100,35700618,0.00012295594774761707 +QQQ,20190716 00:00,1939100,1940900,1925600,1931500,18367842,0.00012295594774761707 +SPY,20190717 00:00,2997700,2999300,2977400,2977400,35522550,0.00012308780000250385 +QQQ,20190717 00:00,1931500,1934900,1921800,1922000,14367120,0.00012308780000250385 +SPY,20190718 00:00,2971800,2992400,2967000,2988300,46198657,0.00012301289183187545 +QQQ,20190718 00:00,1912900,1927900,1906900,1924200,27032737,0.00012301289183187545 +SPY,20190719 00:00,3000100,3000700,2969700,2971700,63466815,0.00012320732838847065 +QQQ,20190719 00:00,1937400,1938300,1908100,1910100,26118257,0.00012320732838847065 +SPY,20190722 00:00,2976100,2984900,2970500,2979000,36969602,0.00012318681192707422 +QQQ,20190722 00:00,1914400,1929400,1914400,1925300,16914364,0.00012318681192707422 +SPY,20190723 00:00,2991500,3000300,2982300,3000300,40884695,0.0001233509269738055 +QQQ,20190723 00:00,1935800,1938100,1922900,1937900,17741243,0.0001233509269738055 +SPY,20190724 00:00,2991600,3014400,2990900,3014400,39298979,0.00012344899960854274 +QQQ,20190724 00:00,1930500,1951600,1930300,1951500,17824133,0.00012344899960854274 +SPY,20190725 00:00,3009700,3010000,2991200,3000000,47024731,0.000123579395247193 +QQQ,20190725 00:00,1944900,1945200,1929300,1933000,20193300,0.000123579395247193 +SPY,20190726 00:00,3007700,3022300,3006200,3020100,36417399,0.00012338656496657676 +QQQ,20190726 00:00,1945300,1955500,1944300,1952900,17791758,0.00012338656496657676 +SPY,20190729 00:00,3018500,3019300,3008500,3014600,33607291,0.0001232546152724186 +QQQ,20190729 00:00,1951100,1951800,1933900,1946200,19023985,0.0001232546152724186 +SPY,20190730 00:00,2999000,3011700,2994900,3007200,39992583,0.00012291425631268704 +QQQ,20190730 00:00,1931300,1945400,1929900,1937800,16274996,0.00012291425631268704 +SPY,20190731 00:00,3009800,3012000,2952000,2974300,93490663,0.0001232325546269875 +QQQ,20190731 00:00,1943000,1944300,1893200,1911000,38087747,0.0001232325546269875 +SPY,20190801 00:00,2975600,3008700,2939600,2948400,129413425,0.0001232901745947622 +QQQ,20190801 00:00,1914300,1949800,1892300,1901500,58757033,0.0001232901745947622 +SPY,20190802 00:00,2938600,2941200,2909000,2926200,98958651,0.00012378169467505617 +QQQ,20190802 00:00,1887200,1889900,1862100,1873500,49202220,0.00012378169467505617 +SPY,20190805 00:00,2880700,2882000,2817300,2838200,153207444,0.0001277777125478733 +QQQ,20190805 00:00,1834300,1835100,1792100,1807300,67590576,0.0001277777125478733 +SPY,20190806 00:00,2859300,2880300,2842800,2878000,101365146,0.00012849821160987706 +QQQ,20190806 00:00,1824000,1838000,1810800,1832600,38954290,0.00012849821160987706 +SPY,20190807 00:00,2844000,2888200,2820600,2879700,111953123,0.0001284270937992148 +QQQ,20190807 00:00,1812700,1845100,1798900,1842500,44179383,0.0001284270937992148 +SPY,20190808 00:00,2896200,2936200,2890200,2936200,72990577,0.0001300584171301081 +QQQ,20190808 00:00,1850800,1883200,1845700,1882600,35522550,0.0001300584171301081 +SPY,20190809 00:00,2925900,2932400,2896500,2916200,80339390,0.0001303271976074698 +QQQ,20190809 00:00,1873600,1880000,1850300,1864900,31554795,0.0001303271976074698 +SPY,20190812 00:00,2899000,2905600,2870200,2881000,56407758,0.00013088784156621 +QQQ,20190812 00:00,1853400,1859000,1835100,1843500,22477823,0.00013088784156621 +SPY,20190813 00:00,2877800,2941500,2873600,2925500,84048259,0.00013199829080191993 +QQQ,20190813 00:00,1841900,1896800,1840100,1883900,37689505,0.00013199829080191993 +SPY,20190814 00:00,2880500,2887400,2837600,2839000,117557987,0.000135538254837514 +QQQ,20190814 00:00,1853600,1859500,1820100,1827600,46121089,0.000135538254837514 +SPY,20190815 00:00,2848900,2856300,2823900,2846500,83862040,0.00013537094894338372 +QQQ,20190815 00:00,1830000,1835900,1811600,1825500,33464974,0.00013537094894338372 +SPY,20190816 00:00,2864900,2893300,2864400,2888500,68482425,0.00013592278233378558 +QQQ,20190816 00:00,1842100,1859500,1841000,1854800,28569490,0.00013592278233378558 +SPY,20190819 00:00,2922300,2930800,2914400,2923300,48006246,0.0001365680196057894 +QQQ,20190819 00:00,1881600,1888300,1875000,1884300,20129768,0.0001365680196057894 +SPY,20190820 00:00,2917800,2923600,2899500,2900900,44802403,0.00013681792030061337 +QQQ,20190820 00:00,1879600,1886400,1869500,1869700,18657174,0.00013681792030061337 +SPY,20190821 00:00,2924700,2928600,2917200,2924500,43174047,0.00013710158208969883 +QQQ,20190821 00:00,1886100,1892300,1879600,1886300,18359394,0.00013710158208969883 +SPY,20190822 00:00,2932400,2939300,2904000,2923600,46884642,0.00013707802811239856 +QQQ,20190822 00:00,1889800,1894600,1865400,1880200,23071644,0.00013707802811239856 +SPY,20190823 00:00,2909500,2927600,2834700,2848500,120191247,0.00014035719080647286 +QQQ,20190823 00:00,1867400,1884500,1815600,1820700,49924672,0.00014035719080647286 +SPY,20190826 00:00,2872400,2880000,2855800,2880000,59943714,0.0001410034288589419 +QQQ,20190826 00:00,1841400,1848700,1830900,1848200,24232347,0.0001410034288589419 +SPY,20190827 00:00,2895500,2899500,2860400,2868700,61103929,0.00014082310517046431 +QQQ,20190827 00:00,1861100,1864200,1837100,1844300,26262643,0.00014082310517046431 +SPY,20190828 00:00,2861000,2890600,2852500,2888900,53616521,0.00014060447786411618 +QQQ,20190828 00:00,1838300,1854000,1829200,1850900,19959085,0.00014060447786411618 +SPY,20190829 00:00,2917700,2931600,2906200,2925800,50484863,0.00014136905407719286 +QQQ,20190829 00:00,1873900,1884600,1866700,1879200,23300786,0.00014136905407719286 +SPY,20190830 00:00,2942100,2942400,2914300,2924500,53366859,0.0001411336910411457 +QQQ,20190830 00:00,1889300,1889700,1864200,1874700,24080848,0.0001411336910411457 +SPY,20190903 00:00,2905600,2915800,2892800,2907400,56717313,0.00014133410323308645 +QQQ,20190903 00:00,1862200,1877000,1850300,1856500,25662692,0.00014133410323308645 +SPY,20190904 00:00,2931500,2940600,2923100,2940400,41612831,0.0001419774024891801 +QQQ,20190904 00:00,1874400,1884900,1869000,1883300,19594427,0.0001419774024891801 +SPY,20190905 00:00,2967800,2988200,2966500,2978200,73400759,0.00014286359119507 +QQQ,20190905 00:00,1904100,1923200,1903300,1917800,31241898,0.00014286359119507 +SPY,20190906 00:00,2982100,2987500,2974200,2980500,42688556,0.00014271052689789082 +QQQ,20190906 00:00,1921000,1921700,1911700,1915900,17211972,0.00014271052689789082 +SPY,20190909 00:00,2991500,2992300,2971600,2982000,46732221,0.00014259008689830843 +QQQ,20190909 00:00,1921900,1922700,1902200,1911900,23060214,0.00014259008689830843 +SPY,20190910 00:00,2973300,2982000,2959700,2981300,52064073,0.0001425601569074546 +QQQ,20190910 00:00,1901600,1907400,1889100,1906400,22283912,0.0001425601569074546 +SPY,20190911 00:00,2984900,3003300,2977500,3002500,56792958,0.0001427910663400106 +QQQ,20190911 00:00,1910000,1925300,1905600,1924300,21915341,0.0001427910663400106 +SPY,20190912 00:00,3012400,3024400,3004100,3012900,67811540,0.0001427501213252706 +QQQ,20190912 00:00,1936100,1947100,1929600,1932300,25912875,0.0001427501213252706 +SPY,20190913 00:00,3017800,3021700,3006800,3010900,54558955,0.00014276407905930018 +QQQ,20190913 00:00,1930000,1934000,1922900,1925400,24713148,0.00014276407905930018 +SPY,20190916 00:00,2998000,3006400,2994500,3001600,49705444,0.00014258945740012986 +QQQ,20190916 00:00,1912300,1920700,1911100,1916800,18829434,0.00014258945740012986 +SPY,20190917 00:00,2999100,3010200,2997700,3009200,36323494,0.00014263166023313468 +QQQ,20190917 00:00,1916900,1926000,1912900,1926000,19428537,0.00014263166023313468 +SPY,20190918 00:00,3004700,3012200,2982500,3011000,69120166,0.0001423083507180113 +QQQ,20190918 00:00,1922100,1926000,1901100,1925200,26993056,0.0001423083507180113 +SPY,20190919 00:00,3015000,3026300,3007200,3010800,69121065,0.00014214152286370929 +QQQ,20190919 00:00,1928700,1940400,1924700,1928400,24851268,0.00014214152286370929 +SPY,20190920 00:00,3003400,3006700,2974100,2982800,76469577,0.00014255546310762077 +QQQ,20190920 00:00,1930500,1933100,1901600,1908000,27164480,0.00014255546310762077 +SPY,20190923 00:00,2975700,2990000,2972800,2982100,34996734,0.00014221492203428686 +QQQ,20190923 00:00,1903200,1913300,1897200,1905000,21159602,0.00014221492203428686 +SPY,20190924 00:00,2994100,2998400,2948200,2958700,86035930,0.0001425176439831214 +QQQ,20190924 00:00,1914100,1917800,1871600,1879700,38842147,0.0001425176439831214 +SPY,20190925 00:00,2959400,2981000,2943300,2976200,59649873,0.0001427822007882162 +QQQ,20190925 00:00,1877800,1905800,1862100,1900800,32534077,0.0001427822007882162 +SPY,20190926 00:00,2976200,2978600,2954500,2970000,50218277,0.00014282167099948797 +QQQ,20190926 00:00,1898300,1900000,1879800,1893800,25722859,0.00014282167099948797 +SPY,20190927 00:00,2978700,2979400,2936900,2954000,69755359,0.00014310526242523322 +QQQ,20190927 00:00,1897300,1898300,1857500,1870300,38265215,0.00014310526242523322 +SPY,20190930 00:00,2959800,2975500,2959200,2967700,43647624,0.00014318511852286488 +QQQ,20190930 00:00,1877900,1891000,1874000,1888100,24564895,0.00014318511852286488 +SPY,20191001 00:00,2976700,2984500,2930000,2932400,82358360,0.0001435824108308595 +QQQ,20191001 00:00,1895000,1905900,1869600,1872700,31105641,0.0001435824108308595 +SPY,20191002 00:00,2914900,2915100,2866400,2880600,112701810,0.00014477581997515346 +QQQ,20191002 00:00,1860000,1860300,1830200,1840500,45253981,0.00014477581997515346 +SPY,20191003 00:00,2878100,2904200,2848200,2904200,80754022,0.00014512469455733057 +QQQ,20191003 00:00,1840300,1862000,1818200,1860700,38298158,0.00014512469455733057 +SPY,20191004 00:00,2912100,2946300,2910800,2943500,51702655,0.00014590559535973218 +QQQ,20191004 00:00,1870800,1890800,1868800,1888100,29130844,0.00014590559535973218 +SPY,20191007 00:00,2935000,2952600,2927700,2930800,53449478,0.00014535053161577975 +QQQ,20191007 00:00,1882700,1897400,1879100,1882400,20000452,0.00014535053161577975 +SPY,20191008 00:00,2910300,2918500,2884900,2885300,84728916,0.00014601417361224508 +QQQ,20191008 00:00,1870600,1878600,1852700,1854200,30189252,0.00014601417361224508 +SPY,20191009 00:00,2907800,2923000,2900600,2912700,53598153,0.0001463687005467776 +QQQ,20191009 00:00,1869900,1880800,1864300,1872300,18612667,0.0001463687005467776 +SPY,20191010 00:00,2911400,2942100,2910000,2932400,51438836,0.00014658461762736327 +QQQ,20191010 00:00,1872800,1894300,1871300,1886800,22593965,0.00014658461762736327 +SPY,20191011 00:00,2962800,2987200,2961500,2962800,84666635,0.00014145003353029402 +QQQ,20191011 00:00,1908300,1926300,1907200,1911100,37029245,0.00014145003353029402 +SPY,20191014 00:00,2959300,2966700,2955800,2959500,33597139,0.00014029956318142137 +QQQ,20191014 00:00,1908400,1917000,1906500,1910900,13636783,0.00014029956318142137 +SPY,20191015 00:00,2970500,2997000,2969700,2988800,42092291,0.00013929268663291427 +QQQ,20191015 00:00,1916800,1939700,1915600,1935200,22291734,0.00013929268663291427 +SPY,20191016 00:00,2984000,2991600,2979200,2984000,44244959,0.00013901466374378912 +QQQ,20191016 00:00,1928600,1935200,1924300,1930400,18871220,0.00013901466374378912 +SPY,20191017 00:00,2997000,3002400,2985200,2992800,42407689,0.00013658563035943657 +QQQ,20191017 00:00,1942000,1945000,1928100,1935500,18090263,0.00013658563035943657 +SPY,20191018 00:00,2987100,2994000,2970000,2979700,52953828,0.00013677273081173967 +QQQ,20191018 00:00,1932000,1936700,1907100,1916900,25488691,0.00013677273081173967 +SPY,20191021 00:00,2994800,3002100,2989400,2999900,32012712,0.00013559594389026233 +QQQ,20191021 00:00,1927100,1935200,1921400,1933900,14439112,0.00013559594389026233 +SPY,20191022 00:00,3006300,3009000,2989200,2990100,45261515,0.0001357136708541944 +QQQ,20191022 00:00,1941500,1944200,1917900,1918500,19768612,0.0001357136708541944 +SPY,20191023 00:00,2987400,2999400,2985000,2998800,29921722,0.00013581825368069324 +QQQ,20191023 00:00,1914600,1922500,1911500,1922200,12763854,0.00013581825368069324 +SPY,20191024 00:00,3008800,3010700,2994700,3003700,32530924,0.00013577115365356158 +QQQ,20191024 00:00,1935900,1942100,1927400,1940900,16698261,0.00013577115365356158 +SPY,20191025 00:00,2997400,3021900,2996900,3016000,39239172,0.00013018231513143444 +QQQ,20191025 00:00,1930700,1957400,1930500,1956400,20284113,0.00013018231513143444 +SPY,20191028 00:00,3029100,3038500,3029100,3033000,36575627,0.0001280186176705495 +QQQ,20191028 00:00,1965500,1978300,1965500,1975700,16695008,0.0001280186176705495 +SPY,20191029 00:00,3030300,3042200,3028600,3032100,41162448,0.0001261384839498093 +QQQ,20191029 00:00,1973000,1975300,1960100,1960400,17566024,0.0001261384839498093 +SPY,20191030 00:00,3034200,3045500,3019900,3041400,42953304,0.0001256561468952758 +QQQ,20191030 00:00,1964300,1973200,1952900,1969900,19817911,0.0001256561468952758 +SPY,20191031 00:00,3041100,3041300,3017400,3033300,58711304,0.00012477107124367033 +QQQ,20191031 00:00,1975200,1976500,1959400,1970800,24861874,0.00012477107124367033 +SPY,20191101 00:00,3049200,3061900,3047500,3061400,60530013,0.00012414138615815076 +QQQ,20191101 00:00,1979300,1988800,1976300,1988700,20308848,0.00012414138615815076 +SPY,20191104 00:00,3078700,3080000,3069600,3073700,53557993,0.0001237142189565209 +QQQ,20191104 00:00,2002000,2005300,1997400,2001000,17960874,0.0001237142189565209 +SPY,20191105 00:00,3075800,3079100,3067100,3070300,38622636,0.00012329695292270958 +QQQ,20191105 00:00,2003400,2005500,1995500,2002100,14223837,0.00012329695292270958 +SPY,20191106 00:00,3070600,3074000,3060700,3071000,39751180,0.00012336468202788888 +QQQ,20191106 00:00,1999700,2000000,1987900,1997600,17544510,0.00012336468202788888 +SPY,20191107 00:00,3086000,3094500,3076600,3081800,49868008,0.00012323746786491483 +QQQ,20191107 00:00,2007600,2017200,1998500,2004300,16370368,0.00012323746786491483 +SPY,20191108 00:00,3078200,3089700,3070400,3089400,40602769,0.0001207027249736159 +QQQ,20191108 00:00,2000700,2012500,1995400,2012300,14639508,0.0001207027249736159 +SPY,20191111 00:00,3074300,3085400,3072700,3083500,29661437,0.0001206585306225148 +QQQ,20191111 00:00,2002100,2010400,1999400,2009600,8982977,0.0001206585306225148 +SPY,20191112 00:00,3087500,3099900,3081500,3090000,42687583,0.00011995945591913833 +QQQ,20191112 00:00,2011300,2022100,2008200,2015400,14317792,0.00011995945591913833 +SPY,20191113 00:00,3079000,3095400,3076700,3091000,48941059,0.00011758615131179863 +QQQ,20191113 00:00,2008400,2017700,2007100,2015900,14498055,0.00011758615131179863 +SPY,20191114 00:00,3087700,3096400,3080900,3095500,45780378,0.00011758031185043723 +QQQ,20191114 00:00,2008400,2015600,2002200,2014300,15516675,0.00011758031185043723 +SPY,20191115 00:00,3109800,3118300,3102600,3117900,48879480,0.00011750074716859283 +QQQ,20191115 00:00,2026500,2029100,2020000,2029100,16865354,0.00011750074716859283 +SPY,20191118 00:00,3115200,3122800,3110300,3120200,43348280,0.00011684866887692302 +QQQ,20191118 00:00,2025900,2033900,2017700,2030700,15292448,0.00011684866887692302 +SPY,20191119 00:00,3126800,3126900,3112200,3119300,61908885,0.000116881628560373 +QQQ,20191119 00:00,2038400,2038400,2025900,2033700,15201852,0.000116881628560373 +SPY,20191120 00:00,3113000,3118200,3090700,3107700,67573622,0.00011467206220240001 +QQQ,20191120 00:00,2028400,2034500,2006200,2021500,32107878,0.00011467206220240001 +SPY,20191121 00:00,3108500,3110100,3093900,3102700,45099359,0.00011325999698868087 +QQQ,20191121 00:00,2019300,2044500,2010700,2017000,16371636,0.00011325999698868087 +SPY,20191122 00:00,3110600,3112300,3098500,3109600,35054695,0.00011318615720389466 +QQQ,20191122 00:00,2022000,2023200,2007400,2018300,14828836,0.00011318615720389466 +SPY,20191125 00:00,3119900,3133700,3119800,3133700,40447004,0.00011324644917084202 +QQQ,20191125 00:00,2027000,2042600,2026500,2042200,16159124,0.00011324644917084202 +SPY,20191126 00:00,3134200,3142800,3130600,3140800,33060315,0.00011189349066271828 +QQQ,20191126 00:00,2043500,2048700,2040500,2046100,12811867,0.00011189349066271828 +SPY,20191127 00:00,3146700,3154800,3143700,3154800,39384378,0.00011195818944984863 +QQQ,20191127 00:00,2051400,2060500,2048900,2060400,15155241,0.00011195818944984863 +SPY,20191129 00:00,3148900,3151300,3140600,3143100,26816024,0.00010926424051054628 +QQQ,20191129 00:00,2055200,2058300,2050000,2051000,8390058,0.00010926424051054628 +SPY,20191202 00:00,3146300,3146600,3111800,3116400,66926781,0.00010961916217641193 +QQQ,20191202 00:00,2051100,2051800,2017800,2030000,26045351,0.00010961916217641193 +SPY,20191203 00:00,3086400,3096400,3071300,3095500,66499178,0.00010972446335066617 +QQQ,20191203 00:00,2002100,2014900,1992300,2014100,28526741,0.00010972446335066617 +SPY,20191204 00:00,3106300,3121100,3103200,3114600,39502096,0.00010897201354247877 +QQQ,20191204 00:00,2024400,2029100,2021400,2024300,13924086,0.00010897201354247877 +SPY,20191205 00:00,3122200,3122400,3105900,3120200,36852740,0.00010383917091262075 +QQQ,20191205 00:00,2031000,2031500,2018400,2028300,14205182,0.00010383917091262075 +SPY,20191206 00:00,3141400,3153100,3141000,3148700,41180679,0.00010422470020071926 +QQQ,20191206 00:00,2043100,2051500,2041500,2050000,13379376,0.00010422470020071926 +SPY,20191209 00:00,3144100,3151800,3138000,3138800,30852815,0.00010107084592792876 +QQQ,20191209 00:00,2046300,2055900,2039800,2040700,12675207,0.00010107084592792876 +SPY,20191210 00:00,3138000,3145400,3128100,3135300,43286945,0.0001010399491624288 +QQQ,20191210 00:00,2041600,2048800,2034400,2039000,19320256,0.0001010399491624288 +SPY,20191211 00:00,3140500,3147000,3136000,3144200,45117507,0.00010108112887047732 +QQQ,20191211 00:00,2043600,2051900,2040400,2049800,15793538,0.00010108112887047732 +SPY,20191212 00:00,3144500,3179900,3141700,3171300,84790876,0.00010115112144029073 +QQQ,20191212 00:00,2047700,2073200,2045000,2065100,29930333,0.00010115112144029073 +SPY,20191213 00:00,3168800,3186600,3160300,3173200,69090591,0.00010114686597965754 +QQQ,20191213 00:00,2064000,2079200,2059600,2071900,29345791,0.00010114686597965754 +SPY,20191216 00:00,3191800,3201500,3191800,3195000,66586561,9.941597476923744e-05 +QQQ,20191216 00:00,2085500,2095200,2084800,2092700,18405004,9.941597476923744e-05 +SPY,20191217 00:00,3199800,3202400,3194800,3195700,47875424,9.747193409392985e-05 +QQQ,20191217 00:00,2095400,2097100,2089700,2093900,14379967,9.747193409392985e-05 +SPY,20191218 00:00,3200000,3202500,3195300,3195900,42877236,9.751465068407241e-05 +QQQ,20191218 00:00,2095700,2101400,2093300,2095500,14046362,9.751465068407241e-05 +SPY,20191219 00:00,3197800,3209800,3197600,3209000,66460035,9.593832411362563e-05 +QQQ,20191219 00:00,2096200,2109300,2096200,2108600,15213543,9.593832411362563e-05 +SPY,20191220 00:00,3205400,3214500,3204000,3207300,121837660,9.482912173551004e-05 +QQQ,20191220 00:00,2118600,2120500,2112700,2117100,24243313,9.482912173551004e-05 +SPY,20191223 00:00,3216300,3216500,3210700,3212200,40678424,9.130009831310521e-05 +QQQ,20191223 00:00,2120000,2121500,2116300,2118100,21504172,9.130009831310521e-05 +SPY,20191224 00:00,3214300,3215200,3209000,3212300,16196485,8.809492423068064e-05 +QQQ,20191224 00:00,2120000,2120900,2114400,2119200,6416983,8.809492423068064e-05 +SPY,20191226 00:00,3216900,3229400,3216400,3229400,27791943,7.623974689930521e-05 +QQQ,20191226 00:00,2122600,2138100,2122300,2137900,13380487,7.623974689930521e-05 +SPY,20191227 00:00,3237700,3238000,3222900,3228600,36687383,7.618646484436557e-05 +QQQ,20191227 00:00,2145400,2145600,2130400,2136100,16329144,7.618646484436557e-05 +SPY,20191230 00:00,3229400,3231000,3205500,3210800,43131761,7.63763726940155e-05 +QQQ,20191230 00:00,2135000,2136300,2111600,2122100,18324822,7.63763726940155e-05 +SPY,20191231 00:00,3205000,3221250,3201500,3218600,39932115,7.616144434893297e-05 +QQQ,20191231 00:00,2115300,2127600,2112050,2126100,16245049,7.616144434893297e-05 +SPY,20200102 00:00,3235800,3248700,3225350,3248700,48912531,7.666902460527495e-05 +QQQ,20200102 00:00,2144000,2161600,2139800,2161600,28675286,7.666902460527495e-05 +SPY,20200103 00:00,3211900,3236400,3211100,3224100,60780998,7.364389199119552e-05 +QQQ,20200103 00:00,2133000,2154700,2132800,2141800,24570808,7.364389199119552e-05 +SPY,20200106 00:00,3204400,3237300,3203600,3236400,43759922,6.835302042428363e-05 +QQQ,20200106 00:00,2125000,2155900,2122500,2155600,19700382,6.835302042428363e-05 +SPY,20200107 00:00,3230200,3235350,3222400,3227300,35212108,6.808375745532053e-05 +QQQ,20200107 00:00,2156400,2161400,2148500,2155300,20510990,6.808375745532053e-05 +SPY,20200108 00:00,3229900,3257800,3226800,3244500,57728195,6.79312865877252e-05 +QQQ,20200108 00:00,2155000,2181400,2151600,2171500,23694484,6.79312865877252e-05 +SPY,20200109 00:00,3262000,3267300,3255200,3266500,44095946,6.799653716043758e-05 +QQQ,20200109 00:00,2189400,2194100,2177200,2189900,21454160,6.799653716043758e-05 +SPY,20200110 00:00,3273600,3274600,3252050,3257100,45653071,6.803841672151731e-05 +QQQ,20200110 00:00,2198500,2198700,2180400,2184300,18295352,6.803841672151731e-05 +SPY,20200113 00:00,3264000,3279600,3259200,3279500,40497334,6.826934457313186e-05 +QQQ,20200113 00:00,2193300,2209800,2189800,2209500,20226442,6.826934457313186e-05 +SPY,20200114 00:00,3274800,3286200,3268500,3274500,55569570,6.803535929302015e-05 +QQQ,20200114 00:00,2208400,2212100,2197400,2200800,22066006,6.803535929302015e-05 +SPY,20200115 00:00,3273400,3290200,3272600,3281900,59764758,6.726837835994683e-05 +QQQ,20200115 00:00,2202100,2212000,2194500,2201700,22702156,6.726837835994683e-05 +SPY,20200116 00:00,3296700,3309200,3294500,3309200,44147974,6.752049890161009e-05 +QQQ,20200116 00:00,2212700,2223200,2208000,2222800,16403665,6.752049890161009e-05 +SPY,20200117 00:00,3317200,3321800,3310700,3319500,74196426,6.737776214627002e-05 +QQQ,20200117 00:00,2232800,2235600,2221200,2233800,19745031,6.737776214627002e-05 +SPY,20200121 00:00,3309200,3321800,3308200,3313000,64018769,6.697103445335832e-05 +QQQ,20200121 00:00,2227600,2238400,2226600,2232800,18901138,6.697103445335832e-05 +SPY,20200122 00:00,3322600,3329500,3311700,3313400,43894937,6.574126334770172e-05 +QQQ,20200122 00:00,2244100,2251500,2235900,2238700,18307031,6.574126334770172e-05 +SPY,20200123 00:00,3306000,3319200,3294100,3317200,42424449,6.57429545724745e-05 +QQQ,20200123 00:00,2237400,2246900,2227100,2245900,24446740,6.57429545724745e-05 +SPY,20200124 00:00,3324600,3325300,3273600,3287700,76182796,6.613136703035418e-05 +QQQ,20200124 00:00,2256400,2258800,2216700,2227000,33897189,6.613136703035418e-05 +SPY,20200127 00:00,3230500,3251200,3226800,3235000,70764386,6.727749627185996e-05 +QQQ,20200127 00:00,2176700,2192800,2171900,2181000,36374142,6.727749627185996e-05 +SPY,20200128 00:00,3250600,3278500,3245500,3268900,56570669,6.736475731400618e-05 +QQQ,20200128 00:00,2196400,2219600,2190308,2214500,23235600,6.736475731400618e-05 +SPY,20200129 00:00,3284000,3286200,3264000,3266200,44285050,6.726810085622427e-05 +QQQ,20200129 00:00,2226800,2229200,2208200,2218100,25046216,6.726810085622427e-05 +SPY,20200130 00:00,3243700,3279000,3235400,3276800,69267283,6.584764109454825e-05 +QQQ,20200130 00:00,2203800,2227000,2196700,2226000,34714336,6.584764109454825e-05 +SPY,20200131 00:00,3269700,3271700,3207400,3217300,97365490,6.669078250753778e-05 +QQQ,20200131 00:00,2235300,2235600,2182850,2190700,45539329,6.669078250753778e-05 +SPY,20200203 00:00,3233500,3261500,3232200,3241200,60751881,6.705780201460615e-05 +QQQ,20200203 00:00,2201100,2228900,2199900,2223800,21835864,6.705780201460615e-05 +SPY,20200204 00:00,3280700,3300100,3277350,3290600,54266275,6.802844106837097e-05 +QQQ,20200204 00:00,2254200,2278600,2246600,2274700,27788619,6.802844106837097e-05 +SPY,20200205 00:00,3322900,3330800,3306800,3328600,53887796,6.801482144271553e-05 +QQQ,20200205 00:00,2302100,2302500,2268500,2282200,34146249,6.801482144271553e-05 +SPY,20200206 00:00,3339800,3341900,3328050,3339800,43537036,6.805411994476562e-05 +QQQ,20200206 00:00,2287900,2302500,2279800,2301900,20098819,6.805411994476562e-05 +SPY,20200207 00:00,3328100,3336200,3316000,3322000,54243541,6.758378041376163e-05 +QQQ,20200207 00:00,2291600,2304350,2285400,2292000,22874659,6.758378041376163e-05 +SPY,20200210 00:00,3311900,3347200,3311900,3346800,35723822,6.786674705543743e-05 +QQQ,20200210 00:00,2284400,2319800,2283900,2319700,19851151,6.786674705543743e-05 +SPY,20200211 00:00,3361600,3370200,3347500,3352600,49571204,6.785993986266076e-05 +QQQ,20200211 00:00,2332500,2340200,2314000,2320100,28704498,6.785993986266076e-05 +SPY,20200212 00:00,3368600,3376500,3364300,3374200,35993342,6.74032903444809e-05 +QQQ,20200212 00:00,2333800,2344000,2328000,2342700,21491343,6.74032903444809e-05 +SPY,20200213 00:00,3359200,3381200,3355700,3370600,47811785,6.742856647934044e-05 +QQQ,20200213 00:00,2326400,2349300,2323600,2339700,20488613,6.742856647934044e-05 +SPY,20200214 00:00,3374800,3377200,3362000,3376000,51819302,6.743251062411965e-05 +QQQ,20200214 00:00,2343400,2348600,2335500,2346400,20643026,6.743251062411965e-05 +SPY,20200218 00:00,3365200,3371700,3352100,3367300,49435726,6.732776601922048e-05 +QQQ,20200218 00:00,2335000,2351700,2332400,2347300,21181754,6.732776601922048e-05 +SPY,20200219 00:00,3378100,3390650,3374800,3383400,36863549,6.74565933194857e-05 +QQQ,20200219 00:00,2361300,2376000,2358500,2369800,19213715,6.74565933194857e-05 +SPY,20200220 00:00,3377700,3386350,3336900,3369500,68702515,6.767046348372648e-05 +QQQ,20200220 00:00,2364800,2369400,2318700,2347800,39564186,6.767046348372648e-05 +SPY,20200221 00:00,3354100,3358100,3325800,3334800,94782814,6.848808970812217e-05 +QQQ,20200221 00:00,2336100,2340100,2293300,2302700,60202540,6.848808970812217e-05 +SPY,20200224 00:00,3231700,3258400,3212400,3224200,137060852,7.370157844457386e-05 +QQQ,20200224 00:00,2216800,2242500,2202600,2213900,74650743,7.370157844457386e-05 +SPY,20200225 00:00,3239600,3246100,3116900,3126500,197728104,7.7153308403584e-05 +QQQ,20200225 00:00,2232500,2239800,2147400,2153700,90742316,7.7153308403584e-05 +SPY,20200226 00:00,3141900,3181100,3107000,3115000,173407681,7.70838353263895e-05 +QQQ,20200226 00:00,2167100,2202900,2149000,2164800,72045289,7.70838353263895e-05 +SPY,20200227 00:00,3054500,3096400,2975100,2975100,253785330,8.626345536255254e-05 +QQQ,20200227 00:00,2109000,2143700,2055000,2056400,108461905,8.626345536255254e-05 +SPY,20200228 00:00,2886200,2962600,2855400,2962600,346777226,8.623669478028707e-05 +QQQ,20200228 00:00,1986400,2071700,1981600,2058000,137166353,8.623669478028707e-05 +SPY,20200302 00:00,2980000,3091500,2944600,3090900,207524129,9.478236148345919e-05 +QQQ,20200302 00:00,2087600,2165700,2059400,2164200,97482567,9.478236148345919e-05 +SPY,20200303 00:00,3095500,3138000,2975700,3002400,276438674,9.857644349141934e-05 +QQQ,20200303 00:00,2170300,2196100,2076200,2094800,121621623,9.857644349141934e-05 +SPY,20200304 00:00,3061100,3131000,3033300,3128600,150015051,0.00010534909924099831 +QQQ,20200304 00:00,2133500,2183300,2113700,2182200,64764691,0.00010534909924099831 +SPY,20200305 00:00,3049500,3084700,3000200,3024600,162185198,0.0001093778034002461 +QQQ,20200305 00:00,2125300,2163600,2101000,2115900,72037789,0.0001093778034002461 +SPY,20200306 00:00,2930800,2987800,2902400,2974600,201271746,0.00011011441945490124 +QQQ,20200306 00:00,2045500,2091500,2029100,2080200,79862351,0.00011011441945490124 +SPY,20200309 00:00,2756000,2841400,2734600,2742300,280056192,0.00013198442247380163 +QQQ,20200309 00:00,1930000,2011600,1921100,1935700,110141061,0.00013198442247380163 +SPY,20200310 00:00,2847600,2885200,2735000,2884200,248563890,0.0001418963687446561 +QQQ,20200310 00:00,2011800,2043000,1936900,2041100,90119540,0.0001418963687446561 +SPY,20200311 00:00,2807300,2819100,2708900,2743600,232891616,0.00015041899203914694 +QQQ,20200311 00:00,1993000,2007500,1927300,1952200,83550670,0.00015041899203914694 +SPY,20200312 00:00,2560500,2666400,2477200,2481100,347822422,0.00018521688449910206 +QQQ,20200312 00:00,1820900,1907800,1769400,1773200,126249753,0.00018521688449910206 +SPY,20200313 00:00,2633400,2710600,2495800,2693200,287485966,0.00021404631838015095 +QQQ,20200313 00:00,1870700,1944800,1781300,1923400,125012600,0.00021404631838015095 +SPY,20200316 00:00,2407800,2569000,2373700,2398500,266357640,0.0002661888627452993 +QQQ,20200316 00:00,1741500,1847000,1691600,1693000,84060751,0.0002661888627452993 +SPY,20200317 00:00,2450400,2559900,2370800,2528000,235335708,0.00028259737011787324 +QQQ,20200317 00:00,1753400,1843900,1697800,1821400,115793406,0.00028259737011787324 +SPY,20200318 00:00,2362500,2460300,2280800,2400000,300967068,0.0002887107775247364 +QQQ,20200318 00:00,1715000,1792200,1668000,1766000,103468629,0.0002887107775247364 +SPY,20200319 00:00,2392600,2473800,2322500,2405100,263646203,0.0002888108716389842 +QQQ,20200319 00:00,1754300,1834900,1716200,1776600,114691905,0.0002888108716389842 +SPY,20200320 00:00,2425900,2444600,2286200,2288000,304651791,0.0002955765118644264 +QQQ,20200320 00:00,1818900,1828700,1701000,1707000,104841464,0.0002955765118644264 +SPY,20200323 00:00,2280000,2293900,2182700,2229500,281816983,0.00029409429822903756 +QQQ,20200323 00:00,1707000,1742100,1649200,1704600,114873208,0.00029409429822903756 +SPY,20200324 00:00,2349900,2441000,2338000,2431500,214693586,0.0003221703122870761 +QQQ,20200324 00:00,1798800,1838300,1779500,1836600,86434644,0.0003221703122870761 +SPY,20200325 00:00,2450000,2563500,2397600,2467900,278538590,0.00032156440752775616 +QQQ,20200325 00:00,1844900,1895100,1799800,1823000,82965783,0.00032156440752775616 +SPY,20200326 00:00,2492600,2628000,2490500,2612000,224153673,0.00033364263322943654 +QQQ,20200326 00:00,1839300,1927200,1835600,1919000,74995622,0.00033364263322943654 +SPY,20200327 00:00,2532200,2608000,2510500,2534200,193638954,0.00033771897057197325 +QQQ,20200327 00:00,1869000,1905100,1846600,1853000,54182139,0.00033771897057197325 +SPY,20200330 00:00,2556800,2623900,2535300,2616500,141153243,0.0003422151863668511 +QQQ,20200330 00:00,1870600,1924900,1863500,1920400,46667707,0.0003422151863668511 +SPY,20200331 00:00,2607000,2633300,2562200,2577500,165876305,0.0003421236769386823 +QQQ,20200331 00:00,1917200,1952500,1892000,1904000,57650860,0.0003421236769386823 +SPY,20200401 00:00,2479500,2514400,2439000,2461500,171513817,0.0003497233123304257 +QQQ,20200401 00:00,1847700,1876600,1808600,1823100,49855126,0.0003497233123304257 +SPY,20200402 00:00,2452000,2526700,2446000,2518300,158102646,0.0003515570319296404 +QQQ,20200402 00:00,1812400,1861800,1809700,1860100,52939936,0.0003515570319296404 +SPY,20200403 00:00,2508100,2533100,2452300,2481900,121365280,0.00035237245553676363 +QQQ,20200403 00:00,1855500,1870600,1812900,1833700,45022619,0.00035237245553676363 +SPY,20200406 00:00,2580500,2669700,2567250,2648600,161181089,0.00037139982540947386 +QQQ,20200406 00:00,1904800,1976500,1891900,1964800,58240710,0.00037139982540947386 +SPY,20200407 00:00,2743000,2750000,2648900,2651300,180252896,0.0003713881730495871 +QQQ,20200407 00:00,2023700,2026600,1960000,1964000,65151399,0.0003713881730495871 +SPY,20200408 00:00,2680500,2760000,2655600,2740300,138883582,0.00037408908365132526 +QQQ,20200408 00:00,1981500,2011750,1963700,2005700,43133208,0.00037408908365132526 +SPY,20200409 00:00,2778100,2812000,2754800,2782000,163674342,0.00037407947678418655 +QQQ,20200409 00:00,2023500,2032200,1990300,2008600,61293607,0.00037407947678418655 +SPY,20200413 00:00,2771500,2774100,2714100,2756600,105066645,0.00037370152614802813 +QQQ,20200413 00:00,2000000,2034200,1987700,2030300,40864552,0.00037370152614802813 +SPY,20200414 00:00,2810800,2847500,2799100,2837900,123049134,0.000378627833093856 +QQQ,20200414 00:00,2072300,2125100,2064100,2118600,59587525,0.000378627833093856 +SPY,20200415 00:00,2775200,2795800,2754600,2777600,109527503,0.00037965962057133577 +QQQ,20200415 00:00,2084200,2112600,2071200,2094300,42199544,0.00037965962057133577 +SPY,20200416 00:00,2790500,2800300,2757600,2791000,111598189,0.0003799877930289359 +QQQ,20200416 00:00,2116900,2143600,2096900,2132500,58633388,0.0003799877930289359 +SPY,20200417 00:00,2854100,2873000,2824000,2866400,129983603,0.00038096110506961905 +QQQ,20200417 00:00,2161700,2165100,2120800,2152900,57826538,0.00038096110506961905 +SPY,20200420 00:00,2826000,2862900,2813600,2815900,89823671,0.0003818458097032143 +QQQ,20200420 00:00,2133600,2158800,2125700,2127400,35519823,0.0003818458097032143 +SPY,20200421 00:00,2764800,2780400,2720400,2730400,115363846,0.00038638042235860075 +QQQ,20200421 00:00,2106000,2111600,2036300,2048900,68622607,0.00038638042235860075 +SPY,20200422 00:00,2783800,2810000,2769100,2791000,82718312,0.0003885194613397847 +QQQ,20200422 00:00,2091000,2123600,2083300,2109700,34148223,0.0003885194613397847 +SPY,20200423 00:00,2804600,2839300,2787510,2790800,97600252,0.0003884868442028401 +QQQ,20200423 00:00,2117900,2144350,2101000,2105200,40773523,0.0003884868442028401 +SPY,20200424 00:00,2806900,2836900,2785000,2829700,73686003,0.0003893331561004171 +QQQ,20200424 00:00,2109700,2143000,2095100,2138400,32035824,0.0003893331561004171 +SPY,20200427 00:00,2850200,2882700,2846200,2870500,68934756,0.0003897494901594477 +QQQ,20200427 00:00,2161900,2166200,2145000,2155600,34846700,0.0003897494901594477 +SPY,20200428 00:00,2910000,2914000,2854050,2857300,97598619,0.00039010658200441524 +QQQ,20200428 00:00,2173200,2173200,2112100,2115000,43643613,0.00039010658200441524 +SPY,20200429 00:00,2915900,2948700,2904100,2932100,104012097,0.0003937257618384481 +QQQ,20200429 00:00,2161900,2199700,2151500,2190000,42337803,0.0003937257618384481 +SPY,20200430 00:00,2916900,2922300,2885900,2904800,104971069,0.0003936482515772715 +QQQ,20200430 00:00,2199500,2200400,2173500,2189100,37675523,0.0003936482515772715 +SPY,20200501 00:00,2851600,2860400,2815300,2827900,112895959,0.00039666885164516864 +QQQ,20200501 00:00,2145000,2166700,2116800,2127400,46164351,0.00039666885164516864 +SPY,20200504 00:00,2804600,2839000,2791600,2835700,70791051,0.0003961957030976832 +QQQ,20200504 00:00,2114600,2154500,2111200,2152200,30929871,0.0003961957030976832 +SPY,20200505 00:00,2866600,2892500,2857500,2861900,72761195,0.00039646861445153075 +QQQ,20200505 00:00,2174400,2201400,2168500,2176600,34640471,0.00039646861445153075 +SPY,20200506 00:00,2880100,2884600,2841500,2842500,65961054,0.00039496138557956506 +QQQ,20200506 00:00,2194000,2210400,2181100,2190000,34176586,0.00039496138557956506 +SPY,20200507 00:00,2877900,2897800,2871500,2876800,69442289,0.00039550817492828657 +QQQ,20200507 00:00,2218200,2227300,2204200,2218200,35261962,0.00039550817492828657 +SPY,20200508 00:00,2910500,2928500,2898700,2924400,62554633,0.0003962539080435661 +QQQ,20200508 00:00,2236200,2250000,2224800,2248600,29133599,0.0003962539080435661 +SPY,20200511 00:00,2903700,2940000,2898800,2925000,62733856,0.00039624744771933515 +QQQ,20200511 00:00,2234900,2279210,2232500,2268700,33314351,0.00039624744771933515 +SPY,20200512 00:00,2937500,2942200,2865500,2866700,82244098,0.0003943990208156419 +QQQ,20200512 00:00,2274900,2281000,2220900,2221200,38662692,0.0003943990208156419 +SPY,20200513 00:00,2859500,2871900,2789650,2816000,126198350,0.00039501669031123356 +QQQ,20200513 00:00,2226600,2246100,2167100,2193400,61854906,0.00039501669031123356 +SPY,20200514 00:00,2788400,2851000,2763800,2849700,110802691,0.000395206512428743 +QQQ,20200514 00:00,2179700,2218700,2159850,2218300,51132763,0.000395206512428743 +SPY,20200515 00:00,2823200,2863300,2813400,2862800,91973272,0.0003949752664045967 +QQQ,20200515 00:00,2187800,2233300,2183400,2232700,50176605,0.0003949752664045967 +SPY,20200518 00:00,2930900,2966750,2927000,2950000,101361961,0.00039679419636387493 +QQQ,20200518 00:00,2263300,2286800,2254700,2274300,39429845,0.00039679419636387493 +SPY,20200519 00:00,2944100,2962050,2919700,2919700,79323689,0.00039644988767340966 +QQQ,20200519 00:00,2277000,2298300,2267100,2268600,33780445,0.00039644988767340966 +SPY,20200520 00:00,2958300,2978700,2955800,2969300,68822340,0.00039737711078773936 +QQQ,20200520 00:00,2295000,2317600,2294800,2313900,35071301,0.00039737711078773936 +SPY,20200521 00:00,2968000,2976700,2936900,2948800,70251827,0.00039764844190826374 +QQQ,20200521 00:00,2314400,2321300,2283500,2288700,39518143,0.00039764844190826374 +SPY,20200522 00:00,2945600,2956300,2932300,2954400,54086999,0.0003968365552602744 +QQQ,20200522 00:00,2284500,2298700,2275000,2296600,26279140,0.0003968365552602744 +SPY,20200526 00:00,3019600,3021900,2987000,2990800,80856468,0.0003966634679106832 +QQQ,20200526 00:00,2333600,2335800,2287800,2290400,30865055,0.0003966634679106832 +SPY,20200527 00:00,3021400,3035700,2968700,3035300,92634618,0.00039671190401529427 +QQQ,20200527 00:00,2286900,2304100,2239400,2302900,50433111,0.00039671190401529427 +SPY,20200528 00:00,3046900,3068300,3022600,3029700,80738978,0.0003964625039038544 +QQQ,20200528 00:00,2291100,2334650,2290200,2299900,38161883,0.0003964625039038544 +SPY,20200529 00:00,3024600,3049600,2994700,3043200,102897180,0.0003966453980081049 +QQQ,20200529 00:00,2303800,2335900,2287600,2333600,48067862,0.0003966453980081049 +SPY,20200601 00:00,3036300,3062050,3030600,3055500,47464891,0.00039569890681285104 +QQQ,20200601 00:00,2324600,2344500,2320000,2340600,24017870,0.00039569890681285104 +SPY,20200602 00:00,3065200,3081300,3051000,3080800,67599676,0.0003955617585720231 +QQQ,20200602 00:00,2345000,2356900,2320100,2356300,31388131,0.0003955617585720231 +SPY,20200603 00:00,3102600,3132100,3099400,3121800,79682933,0.00039347456710643077 +QQQ,20200603 00:00,2362600,2374800,2353500,2366900,35745723,0.00039347456710643077 +SPY,20200604 00:00,3111200,3130000,3090800,3113600,68818172,0.00039338835333011093 +QQQ,20200604 00:00,2363300,2377850,2336800,2350300,36792651,0.00039338835333011093 +SPY,20200605 00:00,3174100,3212750,3171700,3193400,123509914,0.0003950728028139235 +QQQ,20200605 00:00,2362200,2402900,2356200,2396900,42990497,0.0003950728028139235 +SPY,20200608 00:00,3203000,3234100,3196300,3232000,65325209,0.0003946955251678209 +QQQ,20200608 00:00,2395400,2416800,2379100,2415500,29106011,0.0003946955251678209 +SPY,20200609 00:00,3202600,3223650,3193600,3207900,68019755,0.00039434310789789354 +QQQ,20200609 00:00,2406600,2441800,2404700,2433000,32807637,0.00039434310789789354 +SPY,20200610 00:00,3214000,3223900,3182300,3190000,84532800,0.00039408084026342237 +QQQ,20200610 00:00,2450500,2478100,2445100,2462200,52872597,0.00039408084026342237 +SPY,20200611 00:00,3113100,3121400,3000100,3006100,183916982,0.0004057929926315951 +QQQ,20200611 00:00,2421600,2435900,2339600,2340200,68123873,0.0004057929926315951 +SPY,20200612 00:00,3083200,3090800,2986000,3042100,170715746,0.0004060338333703425 +QQQ,20200612 00:00,2391400,2404000,2317400,2358800,66941083,0.0004060338333703425 +SPY,20200615 00:00,2980100,3082800,2967400,3070500,125276263,0.00040638793352795163 +QQQ,20200615 00:00,2323500,2394500,2314700,2387500,42852259,0.00040638793352795163 +SPY,20200616 00:00,3155600,3156400,3076800,3129600,122098812,0.0004075763272476076 +QQQ,20200616 00:00,2436900,2444500,2391000,2428500,45787110,0.0004075763272476076 +SPY,20200617 00:00,3140400,3143890,3108600,3116600,74761010,0.0004070157587143496 +QQQ,20200617 00:00,2444000,2454950,2427300,2436200,33182954,0.0004070157587143496 +SPY,20200618 00:00,3099800,3123000,3095200,3117800,65220566,0.00040699758440853836 +QQQ,20200618 00:00,2433200,2445400,2424800,2442800,25822891,0.00040699758440853836 +SPY,20200619 00:00,3141000,3143800,3065300,3086400,114303869,0.00040676410093215293 +QQQ,20200619 00:00,2467300,2470000,2424600,2442400,43799625,0.00040676410093215293 +SPY,20200622 00:00,3079500,3110500,3067500,3106200,64819717,0.00040690597133566077 +QQQ,20200622 00:00,2436800,2468800,2433800,2467400,22203280,0.00040690597133566077 +SPY,20200623 00:00,3135000,3145000,3116200,3120500,60336017,0.00040700244315569254 +QQQ,20200623 00:00,2483900,2511500,2478200,2488400,29980789,0.00040700244315569254 +SPY,20200624 00:00,3098400,3105000,3021100,3040900,116094751,0.0004085151088521896 +QQQ,20200624 00:00,2480600,2493200,2421600,2437100,44109927,0.0004085151088521896 +SPY,20200625 00:00,3034700,3076400,3012800,3073500,81346026,0.0004088704521792565 +QQQ,20200625 00:00,2438000,2463400,2411400,2460300,34114959,0.0004088704521792565 +SPY,20200626 00:00,3061700,3063800,2994200,3000500,110191083,0.0004112317011260987 +QQQ,20200626 00:00,2457800,2459600,2396800,2402200,50293064,0.0004112317011260987 +SPY,20200629 00:00,3014200,3044600,2989300,3044600,68919256,0.00041178343487401216 +QQQ,20200629 00:00,2399700,2428400,2373500,2428400,31576290,0.00041178343487401216 +SPY,20200630 00:00,3040100,3102000,3038300,3083600,87954973,0.0004122676897364737 +QQQ,20200630 00:00,2427700,2481700,2425800,2476000,35413828,0.0004122676897364737 +SPY,20200701 00:00,3095700,3118900,3090700,3105200,62334610,0.0004125175699638939 +QQQ,20200701 00:00,2476400,2515200,2470800,2504900,31503867,0.0004125175699638939 +SPY,20200702 00:00,3142400,3157000,3115100,3122300,59836713,0.0004124409317829577 +QQQ,20200702 00:00,2530200,2542700,2517100,2521900,29232232,0.0004124409317829577 +SPY,20200706 00:00,3163800,3176800,3155600,3170500,52435296,0.0004138089457827006 +QQQ,20200706 00:00,2554500,2589200,2554200,2583900,31904132,0.0004138089457827006 +SPY,20200707 00:00,3153800,3175200,3133700,3137800,72195898,0.0004139654880812946 +QQQ,20200707 00:00,2581300,2608900,2563000,2566100,34564264,0.0004139654880812946 +SPY,20200708 00:00,3145900,3163000,3127000,3161800,49246242,0.00041429085110241467 +QQQ,20200708 00:00,2579800,2600200,2564900,2599900,27663321,0.00041429085110241467 +SPY,20200709 00:00,3168500,3171000,3106800,3143800,75016501,0.00041397322100341125 +QQQ,20200709 00:00,2619700,2628800,2576300,2621800,39040687,0.00041397322100341125 +SPY,20200710 00:00,3142600,3178700,3127610,3175900,50767516,0.00041419892323422703 +QQQ,20200710 00:00,2620300,2642300,2592600,2639700,29877101,0.00041419892323422703 +SPY,20200713 00:00,3200600,3227100,3141400,3148400,88782287,0.00041492455856863915 +QQQ,20200713 00:00,2669100,2697900,2576900,2585400,58228063,0.00041492455856863915 +SPY,20200714 00:00,3132500,3197600,3120000,3189200,80603945,0.00041520988884864783 +QQQ,20200714 00:00,2559300,2607900,2527600,2603700,66487195,0.00041520988884864783 +SPY,20200715 00:00,3224800,3230350,3192700,3218500,76618906,0.00041512935266106244 +QQQ,20200715 00:00,2618300,2626900,2574900,2609000,50547825,0.00041512935266106244 +SPY,20200716 00:00,3197800,3212800,3190900,3207900,48326537,0.0004150754580169431 +QQQ,20200716 00:00,2580200,2597800,2556300,2591200,41572814,0.0004150754580169431 +SPY,20200717 00:00,3218200,3225600,3197400,3217200,54472899,0.00041507638021494287 +QQQ,20200717 00:00,2595900,2603100,2571700,2594200,32678634,0.00041507638021494287 +SPY,20200720 00:00,3214100,3251300,3206200,3243200,49745039,0.0004156713623680088 +QQQ,20200720 00:00,2600800,2674300,2587900,2667800,35279436,0.0004156713623680088 +SPY,20200721 00:00,3264800,3269200,3239400,3250100,49755103,0.00041554820187758286 +QQQ,20200721 00:00,2684000,2684200,2631300,2640000,40920166,0.00041554820187758286 +SPY,20200722 00:00,3246200,3272000,3245000,3268600,46779160,0.0004154569111329167 +QQQ,20200722 00:00,2645100,2658900,2625400,2649300,26731843,0.0004154569111329167 +SPY,20200723 00:00,3264500,3272300,3214900,3229600,69166002,0.00041672866815872274 +QQQ,20200723 00:00,2645100,2652400,2565500,2580100,47424354,0.00041672866815872274 +SPY,20200724 00:00,3209300,3219900,3192500,3208800,60592047,0.000416800759065538 +QQQ,20200724 00:00,2540400,2569300,2513200,2555600,50106555,0.000416800759065538 +SPY,20200727 00:00,3216300,3234100,3207800,3232200,43728174,0.000417026658036634 +QQQ,20200727 00:00,2572600,2607500,2564500,2601200,33649763,0.000417026658036634 +SPY,20200728 00:00,3224500,3236400,3208500,3211700,50744355,0.0004173651121918718 +QQQ,20200728 00:00,2593100,2598400,2565100,2568100,28263635,0.0004173651121918718 +SPY,20200729 00:00,3221400,3257300,3220800,3251200,44530648,0.00041777663005916583 +QQQ,20200729 00:00,2584000,2606600,2579100,2597700,25325691,0.00041777663005916583 +SPY,20200730 00:00,3219000,3244050,3196400,3239600,54373583,0.0004170165281885289 +QQQ,20200730 00:00,2577400,2617100,2565500,2611300,35294253,0.0004170165281885289 +SPY,20200731 00:00,3260000,3266100,3213400,3265200,67655356,0.00041725264848154 +QQQ,20200731 00:00,2659100,2659500,2608500,2657900,48399485,0.00041725264848154 +SPY,20200803 00:00,3283100,3296200,3277300,3287900,46717604,0.0004170191406939792 +QQQ,20200803 00:00,2680000,2701500,2678700,2693800,27416106,0.0004170191406939792 +SPY,20200804 00:00,3278800,3300600,3278600,3300600,38139316,0.00041249100522312013 +QQQ,20200804 00:00,2688600,2704500,2680910,2703800,22999848,0.00041249100522312013 +SPY,20200805 00:00,3314600,3323900,3311900,3321100,37235538,0.0004118627791650089 +QQQ,20200805 00:00,2708800,2715200,2694166,2710500,20136543,0.0004118627791650089 +SPY,20200806 00:00,3315200,3344600,3311400,3343300,39913430,0.0004121297666631793 +QQQ,20200806 00:00,2707800,2749800,2702000,2745850,24776741,0.0004121297666631793 +SPY,20200807 00:00,3332900,3348800,3323000,3345700,50273179,0.00041062843208676287 +QQQ,20200807 00:00,2740800,2748800,2692400,2714700,42197977,0.00041062843208676287 +SPY,20200810 00:00,3350000,3357700,3329600,3355700,39093250,0.0004102403157552009 +QQQ,20200810 00:00,2717400,2719800,2666700,2702800,32696601,0.0004102403157552009 +SPY,20200811 00:00,3368600,3375400,3320100,3328000,60840577,0.0004103050397273389 +QQQ,20200811 00:00,2691100,2705333,2646300,2651900,39253943,0.0004103050397273389 +SPY,20200812 00:00,3354700,3382800,3354300,3374400,47937318,0.00041035349361664964 +QQQ,20200812 00:00,2674200,2728400,2673700,2718600,35525096,0.00041035349361664964 +SPY,20200813 00:00,3365800,3382500,3358300,3368300,37594791,0.0004065171793676337 +QQQ,20200813 00:00,2726600,2748300,2715100,2724800,29986886,0.0004065171793676337 +SPY,20200814 00:00,3364300,3374100,3356700,3368400,42748803,0.00040654801792803136 +QQQ,20200814 00:00,2731200,2733900,2707000,2721600,28896708,0.00040654801792803136 +SPY,20200817 00:00,3379100,3383400,3374900,3379100,29645911,0.0004058494684236067 +QQQ,20200817 00:00,2739300,2758400,2737400,2753200,22159381,0.0004058494684236067 +SPY,20200818 00:00,3383200,3391000,3366200,3386400,34414214,0.00040525918448918184 +QQQ,20200818 00:00,2764200,2784650,2749000,2779700,21794437,0.00040525918448918184 +SPY,20200819 00:00,3391100,3396100,3366300,3372300,58910587,0.00040510637862936833 +QQQ,20200819 00:00,2779300,2790200,2755700,2761000,29395264,0.00040510637862936833 +SPY,20200820 00:00,3353300,3387950,3352200,3382800,37450891,0.00040501039584559705 +QQQ,20200820 00:00,2752800,2804300,2748600,2799300,25435198,0.00040501039584559705 +SPY,20200821 00:00,3378600,3397100,3375500,3394800,43998909,0.0004050444419051096 +QQQ,20200821 00:00,2801300,2823400,2794700,2818700,29363161,0.0004050444419051096 +SPY,20200824 00:00,3421300,3430000,3410600,3429200,40778173,0.0004016545203558403 +QQQ,20200824 00:00,2852500,2860000,2812700,2836300,34403998,0.0004016545203558403 +SPY,20200825 00:00,3435300,3442100,3422700,3441200,33649645,0.0004011846332519423 +QQQ,20200825 00:00,2828300,2860600,2823600,2858600,33333982,0.0004011846332519423 +SPY,20200826 00:00,3447200,3478600,3441700,3475700,44752689,0.0004018050680170377 +QQQ,20200826 00:00,2871500,2922500,2869700,2919600,39113373,0.0004018050680170377 +SPY,20200827 00:00,3485000,3499000,3465400,3483300,53042146,0.0004017423764196768 +QQQ,20200827 00:00,2929700,2938500,2887000,2910500,45601932,0.0004017423764196768 +SPY,20200828 00:00,3494500,3507100,3481600,3505800,45300252,0.0004011834839683621 +QQQ,20200828 00:00,2923300,2931800,2909300,2925300,26005692,0.0004011834839683621 +SPY,20200831 00:00,3503500,3512900,3491000,3493100,53787099,0.00040105039344814366 +QQQ,20200831 00:00,2930700,2967450,2926200,2948800,31727310,0.00040105039344814366 +SPY,20200901 00:00,3502400,3526900,3492400,3526000,48071811,0.0004012390156161797 +QQQ,20200901 00:00,2976200,3000400,2957900,2999200,31517742,0.0004012390156161797 +SPY,20200902 00:00,3546400,3587000,3534300,3577000,65239809,0.0004011250578088919 +QQQ,20200902 00:00,3032800,3035100,2968900,3027600,47661474,0.0004011250578088919 +SPY,20200903 00:00,3558500,3563800,3426100,3453900,132142532,0.00040775382313244936 +QQQ,20200903 00:00,2981000,2986200,2817000,2874100,95099057,0.00040775382313244936 +SPY,20200904 00:00,3460700,3478090,3348800,3425700,121071294,0.0004082929587409414 +QQQ,20200904 00:00,2855600,2889300,2718000,2835800,114075652,0.0004082929587409414 +SPY,20200908 00:00,3367400,3380500,3328800,3332100,102804803,0.00041384605377378175 +QQQ,20200908 00:00,2722200,2782200,2696600,2699500,87866075,0.00041384605377378175 +SPY,20200909 00:00,3375200,3424600,3366200,3397900,81687944,0.00041593328269210535 +QQQ,20200909 00:00,2756400,2800500,2730000,2778800,58062975,0.00041593328269210535 +SPY,20200910 00:00,3417500,3425200,3328600,3338900,83084631,0.0004172888657584771 +QQQ,20200910 00:00,2809400,2821990,2705500,2723400,65086110,0.0004172888657584771 +SPY,20200911 00:00,3357900,3369700,3310000,3340600,73834123,0.0004172638931151976 +QQQ,20200911 00:00,2741500,2752200,2669000,2704500,68822924,0.0004172638931151976 +SPY,20200914 00:00,3375200,3403700,3369300,3384600,57267531,0.0004180253842403538 +QQQ,20200914 00:00,2743600,2772200,2729600,2751600,35382634,0.0004180253842403538 +SPY,20200915 00:00,3411100,3420200,3390200,3401700,47255792,0.0004181495180798708 +QQQ,20200915 00:00,2790300,2806238,2772600,2790600,39339954,0.0004181495180798708 +SPY,20200916 00:00,3415000,3430600,3385300,3388200,72445309,0.00041845439091566325 +QQQ,20200916 00:00,2798800,2803600,2742500,2746100,38840730,0.00041845439091566325 +SPY,20200917 00:00,3335200,3376900,3330000,3358400,82845183,0.0004191033711816387 +QQQ,20200917 00:00,2675500,2723700,2666800,2703200,72649343,0.0004191033711816387 +SPY,20200918 00:00,3353500,3354900,3279700,3306500,90698721,0.00042002012257640146 +QQQ,20200918 00:00,2717900,2720900,2626300,2668700,77618636,0.00042002012257640146 +SPY,20200921 00:00,3257100,3270900,3217300,3269700,88383996,0.0004195030249526257 +QQQ,20200921 00:00,2624700,2676500,2600000,2675100,52105625,0.0004195030249526257 +SPY,20200922 00:00,3285500,3309000,3258700,3303000,58131952,0.0004201402810057315 +QQQ,20200922 00:00,2699900,2730700,2665300,2724800,37039928,0.0004201402810057315 +SPY,20200923 00:00,3309200,3312000,3221000,3226400,82043108,0.0004226858542321667 +QQQ,20200923 00:00,2721000,2723400,2632600,2641600,43870199,0.0004226858542321667 +SPY,20200924 00:00,3212200,3267900,3198000,3235000,71764361,0.00042250560215251827 +QQQ,20200924 00:00,2613900,2687000,2612200,2653900,62809100,0.00042250560215251827 +SPY,20200925 00:00,3225700,3295700,3216400,3287300,60520195,0.0004237927237773723 +QQQ,20200925 00:00,2659100,2724000,2642900,2715600,46868512,0.0004237927237773723 +SPY,20200928 00:00,3332200,3349600,3321600,3341900,58415562,0.00042466138068066424 +QQQ,20200928 00:00,2765800,2772000,2738500,2772000,52051448,0.00042466138068066424 +SPY,20200929 00:00,3340000,3347700,3316300,3323700,44028300,0.00042469282015526223 +QQQ,20200929 00:00,2766200,2777200,2753700,2759500,24168938,0.00042469282015526223 +SPY,20200930 00:00,3331000,3382900,3328800,3348900,84868616,0.0004243335406715123 +QQQ,20200930 00:00,2761500,2810900,2758800,2778400,45658941,0.0004243335406715123 +SPY,20201001 00:00,3376300,3387100,3350100,3370400,80342903,0.0004232460165662476 +QQQ,20201001 00:00,2818700,2828700,2798410,2822500,46988396,0.0004232460165662476 +SPY,20201002 00:00,3317100,3359150,3311900,3338400,77980566,0.00042420783815591426 +QQQ,20201002 00:00,2760200,2797800,2734400,2743100,69374529,0.00042420783815591426 +SPY,20201005 00:00,3360100,3399500,3360100,3397600,41167062,0.00042487021934979466 +QQQ,20201005 00:00,2763400,2804900,2762300,2801600,24986321,0.00042487021934979466 +SPY,20201006 00:00,3398700,3421700,3343800,3349300,82966706,0.00042594436344834297 +QQQ,20201006 00:00,2794500,2811900,2742400,2751600,45169764,0.00042594436344834297 +SPY,20201007 00:00,3381200,3416300,3380900,3407600,44075564,0.00042587570139281675 +QQQ,20201007 00:00,2778900,2807300,2772900,2799200,25117578,0.00042587570139281675 +SPY,20201008 00:00,3428800,3438500,3418700,3437800,38281729,0.00042571451141270336 +QQQ,20201008 00:00,2824000,2824700,2803100,2814100,22441634,0.00042571451141270336 +SPY,20201009 00:00,3455300,3473500,3448900,3468500,50708118,0.00042600695109231524 +QQQ,20201009 00:00,2831100,2857900,2827100,2857100,27008102,0.00042600695109231524 +SPY,20201012 00:00,3495500,3540200,3490600,3524300,64619979,0.0004273457636130348 +QQQ,20201012 00:00,2905500,2974600,2894700,2945300,73412806,0.0004273457636130348 +SPY,20201013 00:00,3523100,3523800,3491000,3501300,65629877,0.00042738813997009867 +QQQ,20201013 00:00,2963900,2970400,2931100,2945200,52472495,0.00042738813997009867 +SPY,20201014 00:00,3507300,3519300,3471500,3479300,50761914,0.0004272906660782325 +QQQ,20201014 00:00,2953600,2963500,2902600,2920600,34763392,0.0004272906660782325 +SPY,20201015 00:00,3437200,3480200,3431300,3475000,54266254,0.00042731891407383853 +QQQ,20201015 00:00,2872000,2907100,2865300,2901000,39059672,0.00042731891407383853 +SPY,20201016 00:00,3489900,3507500,3471100,3472900,64891517,0.0004273534755000211 +QQQ,20201016 00:00,2917400,2932690,2881500,2885100,35321283,0.0004273534755000211 +SPY,20201019 00:00,3485700,3493200,3410600,3420100,59117764,0.0004282738903751047 +QQQ,20201019 00:00,2905600,2914800,2827800,2838000,33555662,0.0004282738903751047 +SPY,20201020 00:00,3434200,3468800,3426500,3433800,52953855,0.0004281086932582199 +QQQ,20201020 00:00,2846200,2876200,2829400,2844100,28804080,0.0004281086932582199 +SPY,20201021 00:00,3433600,3456700,3424100,3427300,55820362,0.00042797946476526283 +QQQ,20201021 00:00,2845500,2873200,2836900,2841900,25921078,0.00042797946476526283 +SPY,20201022 00:00,3429200,3452400,3406500,3446100,48736995,0.000427943878852017 +QQQ,20201022 00:00,2850500,2859800,2808200,2841800,29136166,0.000427943878852017 +SPY,20201023 00:00,3459100,3459900,3431500,3457800,40954601,0.00042791859816126613 +QQQ,20201023 00:00,2847700,2849100,2817850,2847400,21783950,0.00042791859816126613 +SPY,20201026 00:00,3421400,3429800,3356300,3393900,83377228,0.00042911366470152457 +QQQ,20201026 00:00,2823800,2853000,2767600,2804700,36416689,0.00042911366470152457 +SPY,20201027 00:00,3397400,3401150,3379900,3382200,52891143,0.0004288506679218618 +QQQ,20201027 00:00,2815000,2835000,2802000,2826600,27735748,0.0004288506679218618 +SPY,20201028 00:00,3321100,3328400,3261300,3266600,113415793,0.0004344389448995092 +QQQ,20201028 00:00,2780100,2786600,2713800,2716400,47247688,0.0004344389448995092 +SPY,20201029 00:00,3269900,3333900,3251000,3299800,78860838,0.0004350169132219379 +QQQ,20201029 00:00,2730000,2794900,2725200,2763900,34705839,0.0004350169132219379 +SPY,20201030 00:00,3282800,3296800,3226000,3265400,99522697,0.0004361770393488359 +QQQ,20201030 00:00,2743350,2752400,2670700,2693800,58415861,0.0004361770393488359 +SPY,20201102 00:00,3302000,3323500,3272400,3302000,73909088,0.0004359439887574777 +QQQ,20201102 00:00,2718500,2735200,2669700,2699800,36913723,0.0004359439887574777 +SPY,20201103 00:00,3337200,3382500,3331700,3360300,80997071,0.0004369570296551615 +QQQ,20201103 00:00,2719600,2768200,2708400,2746500,38634028,0.0004369570296551615 +SPY,20201104 00:00,3408000,3479200,3396000,3435400,113182021,0.0004406763575152001 +QQQ,20201104 00:00,2835900,2887700,2818600,2869100,62887187,0.0004406763575152001 +SPY,20201105 00:00,3492800,3521900,3488750,3502400,73813299,0.00044249129944951064 +QQQ,20201105 00:00,2935300,2953900,2920000,2943900,46908237,0.00044249129944951064 +SPY,20201106 00:00,3499700,3515000,3476500,3501600,60701935,0.0004424779138937773 +QQQ,20201106 00:00,2937100,2953600,2898300,2946100,34229573,0.0004424779138937773 +SPY,20201109 00:00,3643600,3643700,3540600,3545600,145206783,0.0004414189938052859 +QQQ,20201109 00:00,2976500,2991400,2881200,2885900,69321520,0.0004414189938052859 +SPY,20201110 00:00,3535200,3551800,3505900,3540400,73250171,0.0004415614146959389 +QQQ,20201110 00:00,2851700,2866600,2806200,2834200,62574523,0.0004415614146959389 +SPY,20201111 00:00,3564300,3575600,3550700,3566700,48425558,0.00044210343440259143 +QQQ,20201111 00:00,2860300,2902500,2855300,2897600,31131846,0.00044210343440259143 +SPY,20201112 00:00,3555700,3564200,3512600,3532100,60620567,0.00044236700773107456 +QQQ,20201112 00:00,2907600,2920800,2872500,2884000,31267892,0.00044236700773107456 +SPY,20201113 00:00,3553000,3589000,3547100,3581000,51387458,0.0004427422533703588 +QQQ,20201113 00:00,2901700,2915700,2878700,2909300,22737090,0.0004427422533703588 +SPY,20201116 00:00,3611000,3625900,3595900,3625700,63099795,0.00044288116471268024 +QQQ,20201116 00:00,2906200,2935200,2899900,2932000,26002717,0.00044288116471268024 +SPY,20201117 00:00,3599700,3619200,3583400,3606200,57359007,0.0004430011896682934 +QQQ,20201117 00:00,2934000,2937400,2916100,2922700,19878141,0.0004430011896682934 +SPY,20201118 00:00,3609800,3615000,3562400,3562800,58727952,0.0004434633065864548 +QQQ,20201118 00:00,2917000,2933700,2900200,2901100,25187901,0.0004434633065864548 +SPY,20201119 00:00,3556800,3581800,3541500,3577800,51165348,0.0004434099846459383 +QQQ,20201119 00:00,2895400,2927000,2888500,2923800,20097304,0.0004434099846459383 +SPY,20201120 00:00,3574500,3577100,3552500,3553300,50408452,0.0004436322226193019 +QQQ,20201120 00:00,2923100,2930700,2902900,2903800,22316893,0.0004436322226193019 +SPY,20201123 00:00,3572500,3588200,3548650,3574600,51739439,0.00044360368128293256 +QQQ,20201123 00:00,2915300,2927500,2880600,2903900,24177232,0.00044360368128293256 +SPY,20201124 00:00,3603000,3638100,3592900,3632200,56453154,0.0004440763225627007 +QQQ,20201124 00:00,2915900,2949800,2896300,2944700,22295725,0.0004440763225627007 +SPY,20201125 00:00,3631600,3631600,3614850,3626600,35940388,0.0004440337908268301 +QQQ,20201125 00:00,2955700,2969400,2946000,2962800,21366275,0.0004440337908268301 +SPY,20201127 00:00,3638400,3641800,3625800,3636700,23919941,0.0004440164040869685 +QQQ,20201127 00:00,2983100,3001700,2979100,2990100,14003962,0.0004440164040869685 +SPY,20201130 00:00,3628400,3631200,3591800,3620600,70776034,0.00044389729872057075 +QQQ,20201130 00:00,2993400,2999700,2947700,2996200,25542421,0.00044389729872057075 +SPY,20201201 00:00,3656000,3676500,3649300,3660200,67257271,0.0004438938312719037 +QQQ,20201201 00:00,3019700,3051400,3008300,3034600,25607635,0.0004438938312719037 +SPY,20201202 00:00,3648000,3669500,3642000,3667900,38543468,0.00044359777034098664 +QQQ,20201202 00:00,3022500,3042000,3003500,3038500,22008272,0.00044359777034098664 +SPY,20201203 00:00,3666600,3681900,3655000,3666900,54787910,0.00044353283934433726 +QQQ,20201203 00:00,3041700,3058800,3035310,3042800,21082085,0.00044353283934433726 +SPY,20201204 00:00,3673000,3698500,3672200,3698500,41677506,0.00044360022222281035 +QQQ,20201204 00:00,3043300,3056700,3036300,3055200,17540116,0.00044360022222281035 +SPY,20201207 00:00,3689700,3696200,3677200,3690900,41405227,0.0004432655001283695 +QQQ,20201207 00:00,3057200,3076300,3055200,3072500,15799078,0.0004432655001283695 +SPY,20201208 00:00,3676700,3707700,3676700,3701700,35566369,0.00044317540201874324 +QQQ,20201208 00:00,3067600,3086100,3049600,3082900,16698225,0.00044317540201874324 +SPY,20201209 00:00,3709100,3710500,3659500,3668500,62483119,0.0004441135845336775 +QQQ,20201209 00:00,3081300,3083600,3002100,3013100,43692846,0.0004441135845336775 +SPY,20201210 00:00,3653900,3678550,3644500,3667300,49958315,0.0004440754772882702 +QQQ,20201210 00:00,2992100,3036800,2980900,3025200,25113732,0.0004440754772882702 +SPY,20201211 00:00,3649300,3665800,3632650,3663000,48805237,0.0004439304442596792 +QQQ,20201211 00:00,3007700,3019800,2984700,3018500,24711707,0.0004439304442596792 +SPY,20201214 00:00,3686100,3698000,3644900,3646600,56272411,0.00044381653600832695 +QQQ,20201214 00:00,3030500,3060500,3030100,3040400,25957392,0.00044381653600832695 +SPY,20201215 00:00,3674600,3695900,3659200,3695900,52393172,0.0004440683537839278 +QQQ,20201215 00:00,3064000,3073636,3041100,3072900,23074931,0.0004440683537839278 +SPY,20201216 00:00,3698100,3711600,3688800,3701700,48533538,0.00044407680248167205 +QQQ,20201216 00:00,3077500,3097810,3066200,3089800,22970435,0.00044407680248167205 +SPY,20201217 00:00,3719300,3724590,3710500,3722400,53146880,0.00044416353086454993 +QQQ,20201217 00:00,3107000,3112400,3093800,3110000,20697627,0.00044416353086454993 +SPY,20201218 00:00,3709800,3711500,3670200,3691800,97825013,0.00044427873351610657 +QQQ,20201218 00:00,3116000,3119700,3076100,3100600,36636019,0.00044427873351610657 +SPY,20201221 00:00,3649800,3784600,3620300,3678600,75870057,0.00044438490103483 +QQQ,20201221 00:00,3065100,3094700,3036000,3089200,32463534,0.00044438490103483 +SPY,20201222 00:00,3682300,3683300,3660400,3672400,42023209,0.0004443794610099767 +QQQ,20201222 00:00,3097700,3107200,3068500,3097600,24534478,0.0004443794610099767 +SPY,20201223 00:00,3683300,3696100,3673900,3675700,38573967,0.00044437208946897965 +QQQ,20201223 00:00,3098800,3103500,3080400,3082000,19091918,0.00044437208946897965 +SPY,20201224 00:00,3680600,3690000,3674500,3690000,21624848,0.00044427653855122094 +QQQ,20201224 00:00,3085300,3100200,3083900,3095600,11876055,0.00044427653855122094 +SPY,20201228 00:00,3718100,3725900,3710700,3721700,32833964,0.00044452561396955985 +QQQ,20201228 00:00,3123100,3131690,3103600,3126800,20724335,0.00044452561396955985 +SPY,20201229 00:00,3738500,3740000,3708300,3714600,45884792,0.00044432561037476 +QQQ,20201229 00:00,3140900,3146900,3120300,3129600,24384741,0.00044432561037476 +SPY,20201230 00:00,3723800,3730800,3715800,3719900,43472434,0.00044432062914988 +QQQ,20201230 00:00,3142000,3144900,3123300,3129700,16742560,0.00044432062914988 +SPY,20201231 00:00,3718500,3746420,3712400,3738800,55021528,0.00044382316229967173 +QQQ,20201231 00:00,3129200,3142400,3117700,3137400,19472357,0.00044382316229967173 +SPY,20210104 00:00,3753000,3754500,3648300,3687900,94376649,0.00044436938940336466 +QQQ,20210104 00:00,3151800,3152900,3051800,3093100,41715635,0.00044436938940336466 +SPY,20210105 00:00,3680500,3724800,3680500,3713300,54611244,0.00044447116983201466 +QQQ,20210105 00:00,3084400,3121400,3082900,3118600,26190005,0.00044447116983201466 +SPY,20210106 00:00,3696700,3769800,3691200,3735500,92950127,0.0004441234233284826 +QQQ,20210106 00:00,3068200,3118900,3059800,3075400,48330659,0.0004441234233284826 +SPY,20210107 00:00,3761800,3798900,3759200,3791000,62270874,0.0004452765294788891 +QQQ,20210107 00:00,3104100,3158400,3102500,3149800,27676047,0.0004452765294788891 +SPY,20210108 00:00,3806300,3814900,3771100,3812600,63163985,0.00044533231351142445 +QQQ,20210108 00:00,3173800,3193900,3150800,3190300,30741271,0.00044533231351142445 +SPY,20210111 00:00,3778400,3805700,3777200,3786900,45616919,0.00044575703331676864 +QQQ,20210111 00:00,3159500,3171900,3137600,3144200,30253406,0.00044575703331676864 +SPY,20210112 00:00,3788400,3798500,3763600,3787700,46336265,0.0004455265153224109 +QQQ,20210112 00:00,3144000,3155800,3112000,3139200,26793444,0.0004455265153224109 +SPY,20210113 00:00,3786500,3808600,3778500,3797900,39076595,0.0004455126393903981 +QQQ,20210113 00:00,3142800,3168600,3135700,3160400,19774972,0.0004455126393903981 +SPY,20210114 00:00,3806300,3811300,3781000,3784600,41851848,0.00044564057611731436 +QQQ,20210114 00:00,3165700,3175300,3138700,3143500,21894878,0.00044564057611731436 +SPY,20210115 00:00,3767100,3775800,3737200,3757000,81635248,0.0004457078583719189 +QQQ,20210115 00:00,3139600,3151200,3105800,3118600,31695724,0.0004457078583719189 +SPY,20210119 00:00,3782400,3792300,3767800,3786500,43441293,0.0004460439420747292 +QQQ,20210119 00:00,3143200,3169200,3131200,3164100,21457525,0.0004460439420747292 +SPY,20210120 00:00,3811000,3847900,3806900,3838900,54390017,0.0004471431794292439 +QQQ,20210120 00:00,3201800,3247400,3197600,3237700,28226415,0.0004471431794292439 +SPY,20210121 00:00,3845000,3849500,3832500,3842400,42558878,0.0004471481306796132 +QQQ,20210121 00:00,3251500,3271350,3237300,3263600,23050428,0.0004471481306796132 +SPY,20210122 00:00,3822400,3840800,3818400,3828800,40128912,0.0004472261243002795 +QQQ,20210122 00:00,3253200,3264600,3247100,3254200,18993700,0.0004472261243002795 +SPY,20210125 00:00,3836000,3847700,3784600,3843900,62710822,0.00044691311583430017 +QQQ,20210125 00:00,3289500,3303200,3214100,3281100,35751624,0.00044691311583430017 +SPY,20210126 00:00,3854100,3858500,3835500,3837900,39595836,0.00044540171776877367 +QQQ,20210126 00:00,3289300,3297600,3272100,3285900,22007761,0.00044540171776877367 +SPY,20210127 00:00,3802400,3803200,3720100,3744100,101850739,0.00044786879166314544 +QQQ,20210127 00:00,3262600,3263000,3173600,3194300,46566155,0.00044786879166314544 +SPY,20210128 00:00,3762700,3819300,3758900,3776300,76978675,0.0004479988390380562 +QQQ,20210128 00:00,3206000,3264200,3200200,3213200,38276373,0.0004479988390380562 +SPY,20210129 00:00,3755700,3766700,3682700,3700700,110053148,0.0004498607039646306 +QQQ,20210129 00:00,3194900,3207100,3127600,3145600,50173676,0.0004498607039646306 +SPY,20210201 00:00,3738400,3773400,3714200,3762300,65567084,0.0004500062310347131 +QQQ,20210201 00:00,3184100,3235400,3161300,3224200,32488751,0.0004500062310347131 +SPY,20210202 00:00,3796800,3832200,3796000,3815500,55798392,0.00045042595386227786 +QQQ,20210202 00:00,3255200,3288700,3253100,3276800,30132421,0.00045042595386227786 +SPY,20210203 00:00,3824300,3837000,3804800,3818500,44014303,0.0004492147488099277 +QQQ,20210203 00:00,3298900,3302000,3263200,3263800,22431939,0.0004492147488099277 +SPY,20210204 00:00,3830300,3862400,3827800,3861900,41511995,0.0004495720553009589 +QQQ,20210204 00:00,3279600,3303300,3264700,3302400,19972688,0.0004495720553009589 +SPY,20210205 00:00,3882700,3884700,3864850,3877100,40406184,0.0004495226964331537 +QQQ,20210205 00:00,3313100,3324000,3295300,3313600,20409945,0.0004495226964331537 +SPY,20210208 00:00,3893000,3905400,3883600,3905100,34842630,0.00044950078133484484 +QQQ,20210208 00:00,3331800,3337400,3314100,3335800,18171176,0.00044950078133484484 +SPY,20210209 00:00,3895500,3908900,3891700,3902500,31350935,0.0004492395283448147 +QQQ,20210209 00:00,3327200,3348100,3326100,3335100,16472896,0.0004492395283448147 +SPY,20210210 00:00,3921000,3922800,3875100,3900800,54203861,0.00044926506904760505 +QQQ,20210210 00:00,3349900,3354600,3295000,3327500,25751725,0.00044926506904760505 +SPY,20210211 00:00,3913400,3916900,3881200,3907100,39710262,0.0004490966044830147 +QQQ,20210211 00:00,3344400,3350000,3321200,3345800,20534222,0.0004490966044830147 +SPY,20210212 00:00,3898800,3928900,3897700,3926400,40896380,0.000449138312309621 +QQQ,20210212 00:00,3337500,3366200,3326200,3364500,18255219,0.000449138312309621 +SPY,20210216 00:00,3940600,3941600,3915400,3923000,44689625,0.0004491643476132583 +QQQ,20210216 00:00,3373500,3381900,3343400,3355400,24054540,0.0004491643476132583 +SPY,20210217 00:00,3904300,3926300,3893300,3923900,45915151,0.00044916235113940924 +QQQ,20210217 00:00,3324900,3356570,3301700,3339300,28125595,0.00044916235113940924 +SPY,20210218 00:00,3895600,3915150,3877400,3907200,53102694,0.000449157986904708 +QQQ,20210218 00:00,3301200,3338661,3283600,3324700,28453870,0.000449157986904708 +SPY,20210219 00:00,3921000,3923800,3895500,3900300,69024514,0.0004490059283536886 +QQQ,20210219 00:00,3339900,3339900,3299700,3310200,35763999,0.0004490059283536886 +SPY,20210222 00:00,3870600,3896200,3867400,3870300,58902644,0.00044901710059110236 +QQQ,20210222 00:00,3264000,3309653,3222300,3224400,40867925,0.00044901710059110236 +SPY,20210223 00:00,3847200,3889450,3802000,3875000,99054818,0.0004435533217229314 +QQQ,20210223 00:00,3168400,3232100,3110000,3214800,92411395,0.0004435533217229314 +SPY,20210224 00:00,3862300,3922300,3852700,3917700,65524154,0.0004401886416293734 +QQQ,20210224 00:00,3186600,3244500,3159500,3241300,52227753,0.0004401886416293734 +SPY,20210225 00:00,3905100,3918700,3807789,3823300,138895516,0.0004439290451684953 +QQQ,20210225 00:00,3214400,3241953,3112400,3128300,102454568,0.0004439290451684953 +SPY,20210226 00:00,3844400,3855800,3782300,3803600,136480361,0.0004343526939989636 +QQQ,20210226 00:00,3158300,3191200,3108700,3141400,94147142,0.0004343526939989636 +SPY,20210301 00:00,3856500,3909200,3855500,3895800,94752970,0.00043689902839191 +QQQ,20210301 00:00,3194800,3239400,3179350,3235900,44420555,0.00043689902839191 +SPY,20210302 00:00,3898700,3900700,3860000,3865400,73195170,0.0004292095113827413 +QQQ,20210302 00:00,3242600,3243397,3181400,3184000,45149257,0.0004292095113827413 +SPY,20210303 00:00,3858300,3868300,3813100,3814200,109545489,0.0004269595376067842 +QQQ,20210303 00:00,3171300,3182400,3091000,3091600,81334799,0.0004269595376067842 +SPY,20210304 00:00,3812200,3840000,3718800,3767000,171790812,0.00042138833865990705 +QQQ,20210304 00:00,3086600,3140000,3001050,3041000,133918263,0.00042138833865990705 +SPY,20210305 00:00,3804100,3847600,3726500,3836300,136356393,0.0004179376658537784 +QQQ,20210305 00:00,3069500,3096667,2974500,3086800,112054692,0.0004179376658537784 +SPY,20210308 00:00,3846900,3876800,3814200,3817200,108618789,0.0004173625624985292 +QQQ,20210308 00:00,3081100,3100600,2995100,2999400,81723076,0.0004173625624985292 +SPY,20210309 00:00,3858800,3899100,3853100,3871700,100993909,0.00039668813800874323 +QQQ,20210309 00:00,3076500,3137300,3069200,3117700,74021178,0.00039668813800874323 +SPY,20210310 00:00,3895900,3914000,3881702,3895800,102850671,0.000386095133697454 +QQQ,20210310 00:00,3162800,3164700,3101600,3108800,70751807,0.000386095133697454 +SPY,20210311 00:00,3922400,3956500,3917400,3935300,78605803,0.0003776899561533966 +QQQ,20210311 00:00,3160100,3198600,3148500,3180400,49817297,0.0003776899561533966 +SPY,20210312 00:00,3920900,3942100,3912000,3940600,58694370,0.0003411894499642172 +QQQ,20210312 00:00,3137800,3182302,3113900,3154600,61570587,0.0003411894499642172 +SPY,20210315 00:00,3944000,3966850,3920400,3964100,67193193,0.0003138841828558998 +QQQ,20210315 00:00,3158000,3190000,3140950,3188300,39818985,0.0003138841828558998 +SPY,20210316 00:00,3970600,3978300,3950800,3959100,67508285,0.0002596268385013464 +QQQ,20210316 00:00,3212300,3242000,3189554,3205800,52496933,0.0002596268385013464 +SPY,20210317 00:00,3945600,3981200,3933000,3972600,83563811,0.0002444614780048278 +QQQ,20210317 00:00,3174200,3238600,3156800,3219000,74074006,0.0002444614780048278 +SPY,20210318 00:00,3944900,3967200,3908650,3914800,101153040,0.00023975552357376607 +QQQ,20210318 00:00,3169200,3178801,3115700,3120400,72715984,0.00023975552357376607 +SPY,20210319 00:00,3899400,3915690,3871500,3894800,94802448,0.00023972267783426348 +QQQ,20210319 00:00,3119300,3147300,3096601,3131400,74114866,0.00023972267783426348 +SPY,20210322 00:00,3900100,3940500,3899800,3925900,62207903,0.00023162608557814024 +QQQ,20210322 00:00,3154100,3207500,3152000,3186100,50067564,0.00023162608557814024 +SPY,20210323 00:00,3918900,3934600,3886600,3895000,80338274,0.00023146152502758778 +QQQ,20210323 00:00,3196800,3210900,3163700,3172200,50079047,0.00023146152502758778 +SPY,20210324 00:00,3909200,3927500,3874800,3875200,86478164,0.00020558146993517563 +QQQ,20210324 00:00,3185400,3186700,3117200,3118700,61930710,0.00020558146993517563 +SPY,20210325 00:00,3859900,3905500,3839000,3897000,102523995,0.00020602472527279402 +QQQ,20210325 00:00,3099900,3134344,3073850,3113300,73199853,0.00020602472527279402 +SPY,20210326 00:00,3909800,3964100,3902900,3959800,101407276,0.00019538115598653926 +QQQ,20210326 00:00,3110200,3163300,3096700,3160000,59438321,0.00019538115598653926 +SPY,20210329 00:00,3943500,3967499,3928100,3957800,93832458,0.0001908004696126226 +QQQ,20210329 00:00,3155200,3169900,3124600,3159100,50225374,0.0001908004696126226 +SPY,20210330 00:00,3943500,3957800,3930299,3947300,66174457,0.0001867468036635878 +QQQ,20210330 00:00,3140500,3157420,3115400,3143200,41179093,0.0001867468036635878 +SPY,20210331 00:00,3953500,3980000,3953300,3963300,90673494,0.00018615835302076886 +QQQ,20210331 00:00,3161400,3207400,3150500,3191300,50120342,0.00018615835302076886 From 6575b5714691aadf56a669944ea1943913c9fc09 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Fri, 2 Jan 2026 10:21:02 -0300 Subject: [PATCH 073/103] Fix future expiration year calculation (#9182) --- Common/SymbolRepresentation.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/SymbolRepresentation.cs b/Common/SymbolRepresentation.cs index 8b73f4f2ef63..76711e59a812 100644 --- a/Common/SymbolRepresentation.cs +++ b/Common/SymbolRepresentation.cs @@ -622,7 +622,7 @@ private static int GetExpirationYear(int? futureYear, FutureTickerProperties par return 2000 + parsed.ExpirationYearShort; } - var baseYear = ((int)Math.Round(currentYear / 10.0)) * 10 + parsed.ExpirationYearShort; + var baseYear = ((int)Math.Floor(currentYear / 10.0)) * 10 + parsed.ExpirationYearShort; while (baseYear < currentYear) { baseYear += 10; From a66f27985280b4215aadbe7d2f09c5eb6d88f1a1 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Fri, 2 Jan 2026 12:58:29 -0300 Subject: [PATCH 074/103] Fix some incorrect future expirations (#9184) - Some future expiry functions were missing to account for holidays, adding unit test reproducing issue --- .../Securities/Future/FuturesExpiryFunctions.cs | 16 ++++++++-------- .../Futures/FuturesExpiryFunctionsTests.cs | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Common/Securities/Future/FuturesExpiryFunctions.cs b/Common/Securities/Future/FuturesExpiryFunctions.cs index 56946b03e0da..c0cbc9fe9d74 100644 --- a/Common/Securities/Future/FuturesExpiryFunctions.cs +++ b/Common/Securities/Future/FuturesExpiryFunctions.cs @@ -158,7 +158,7 @@ public static Func FuturesExpiryFunction(Symbol symbol) } // Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month - var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time); + var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.SP500EMini, SecurityType.Future, Market.CME)); return thirdFriday.Add(new TimeSpan(13,30,0)); }) }, @@ -217,7 +217,7 @@ public static Func FuturesExpiryFunction(Symbol symbol) } // Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month - var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time); + var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.NASDAQ100EMini, SecurityType.Future, Market.CME)); return thirdFriday.Add(new TimeSpan(13,30,0)); }) }, @@ -231,7 +231,7 @@ public static Func FuturesExpiryFunction(Symbol symbol) } // Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month - var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time); + var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.Dow30EMini, SecurityType.Future, Market.CBOT)); return thirdFriday.Add(new TimeSpan(13,30,0)); }) }, @@ -245,7 +245,7 @@ public static Func FuturesExpiryFunction(Symbol symbol) } // Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month - var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time); + var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.Russell2000EMini, SecurityType.Future, Market.CME)); return thirdFriday.Add(new TimeSpan (13,30,0)); }) }, @@ -3208,7 +3208,7 @@ Dec listed in June } // Trading terminates at 9:30 a.m. ET on the 3rd Friday of the contract month. - var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time); + var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.MicroSP500EMini, SecurityType.Future, Market.CME)); return thirdFriday.Add(new TimeSpan(13,30,0)); }) }, @@ -3222,7 +3222,7 @@ Dec listed in June } // Trading terminates at 9:30 a.m. ET on the 3rd Friday of the contract month. - var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time); + var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.MicroNASDAQ100EMini, SecurityType.Future, Market.CME)); return thirdFriday.Add(new TimeSpan(13,30,0)); }) }, @@ -3236,7 +3236,7 @@ Dec listed in June } // Trading terminates at 9:30 a.m. ET on the 3rd Friday of the contract month. - var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time); + var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.MicroRussell2000EMini, SecurityType.Future, Market.CME)); return thirdFriday.Add(new TimeSpan(13,30,0)); }) }, @@ -3250,7 +3250,7 @@ Dec listed in June } // Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month - var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time); + var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.MicroDow30EMini, SecurityType.Future, Market.CBOT)); return thirdFriday.Add(new TimeSpan(13,30,0)); }) }, diff --git a/Tests/Common/Securities/Futures/FuturesExpiryFunctionsTests.cs b/Tests/Common/Securities/Futures/FuturesExpiryFunctionsTests.cs index b9e2c22e0608..e1522d91b895 100644 --- a/Tests/Common/Securities/Futures/FuturesExpiryFunctionsTests.cs +++ b/Tests/Common/Securities/Futures/FuturesExpiryFunctionsTests.cs @@ -319,6 +319,20 @@ public void BankHolidaysAreRespected() Assert.AreEqual(new DateTime(2025, 2, 14), expiryDate.Date); } + [TestCase(QuantConnect.Securities.Futures.Indices.NASDAQ100EMini, "20260302", "20260320")] + [TestCase(QuantConnect.Securities.Futures.Indices.NASDAQ100EMini, "20260602", "20260618")] + public void ExpirationUsesHolidays(string symbol, string dateStr, string expectedDate) + { + var date = Time.ParseDate(dateStr); + var expected = Time.ParseDate(expectedDate); + + var futureSymbol = GetFutureSymbol(symbol, date); + var func = FuturesExpiryFunctions.FuturesExpiryFunction(GetFutureSymbol(symbol)); + + var actual = func(futureSymbol.ID.Date); + Assert.AreEqual(expected, actual.Date, $"Failed for symbol: {symbol}. Date {dateStr}"); + } + // 25th is a sunday [TestCase(QuantConnect.Securities.Futures.Energy.MicroCrudeOilWTI, "20221001", "20220919")] [TestCase(QuantConnect.Securities.Futures.Energy.CrudeOilWTI, "20221001", "20220920")] From 1171e4fe5280c0c8ffd0080749333906444e4c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Fri, 2 Jan 2026 14:05:36 -0500 Subject: [PATCH 075/103] Add 2026 Future EUREX, CFE and ICE Holidays (#9183) * rebase Add 2026 EUREX, CFE and ICE Holidays * Remove entries present in generic entry For some ICE Future entries, there were holidays that were already present in their generic entry (Future-ice-[*]), so those dates were removed from the entry --- Data/market-hours/market-hours-database.json | 116 ++++++++++++++----- 1 file changed, 89 insertions(+), 27 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 376d41b891b4..322c628c49da 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -767,6 +767,7 @@ "1/2/2023", "1/1/2025", "1/1/2026", + "1/1/2027", "1/2/2007", "1/19/1998", "1/18/1999", @@ -998,7 +999,8 @@ "12/26/2022", "12/25/2023", "12/25/2024", - "12/25/2025" + "12/25/2025", + "12/25/2026" ], "earlyCloses": {}, "lateOpens": {} @@ -2394,7 +2396,7 @@ "9/4/2023", "9/2/2024", "9/1/2025", - "9/1/2026", + "9/7/2026", "9/11/2001", "9/12/2001", "9/13/2001", @@ -2465,7 +2467,9 @@ "earlyCloses": { "7/3/2025": "18:15:00", "11/28/2025": "18:15:00", - "12/24/2025": "18:15:00" + "12/24/2025": "18:15:00", + "11/27/2026": "12:15:00", + "12/24/2026": "12:15:00" }, "lateOpens": {} }, @@ -5002,11 +5006,7 @@ } ], "saturday": [], - "holidays": [ - "1/2/2023", - "12/25/2023", - "1/1/2024" - ], + "holidays": [], "lateOpens": { "12/26/2008": "06:00:00", "1/2/2009": "06:00:00", @@ -77969,13 +77969,20 @@ ], "saturday": [], "holidays": [ - "1/20/2025", "2/17/2025", "5/26/2025", "6/19/2025", "7/4/2025", "9/1/2025", - "11/27/2025" + "11/27/2025", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ], "lateOpens": { "12/28/2009": "07:30:00", @@ -78068,13 +78075,20 @@ ], "saturday": [], "holidays": [ - "1/20/2025", "2/17/2025", "5/26/2025", "6/19/2025", "7/4/2025", "9/1/2025", - "11/27/2025" + "11/27/2025", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ], "lateOpens": { "12/26/2012": "07:30:00" @@ -78145,13 +78159,20 @@ ], "saturday": [], "holidays": [ - "1/20/2025", "2/17/2025", "5/26/2025", "6/19/2025", "7/4/2025", "9/1/2025", - "11/27/2025" + "11/27/2025", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ], "lateOpens": { "12/28/2009": "07:30:00", @@ -78240,13 +78261,20 @@ ], "saturday": [], "holidays": [ - "1/20/2025", "2/17/2025", "5/26/2025", "6/19/2025", "7/4/2025", "9/1/2025", - "11/27/2025" + "11/27/2025", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ], "lateOpens": { "12/28/2009": "07:30:00", @@ -79057,13 +79085,20 @@ ], "saturday": [], "holidays": [ - "1/20/2025", "2/17/2025", "5/26/2025", "6/19/2025", "7/4/2025", "9/1/2025", - "11/27/2025" + "11/27/2025", + "1/19/2026", + "2/16/2026", + "4/3/2026", + "5/25/2026", + "6/19/2026", + "7/3/2026", + "9/7/2026", + "11/26/2026" ], "lateOpens": { "12/28/2009": "07:30:00", @@ -79178,10 +79213,7 @@ ], "saturday": [], "holidays": [ - "1/2/2023", - "4/7/2023", - "12/25/2023", - "1/1/2024" + "4/3/2026" ], "earlyCloses": { "01/21/2013": "13:30:00", @@ -79314,10 +79346,7 @@ ], "saturday": [], "holidays": [ - "1/2/2023", - "4/7/2023", - "12/25/2023", - "1/1/2024" + "4/3/2026" ], "earlyCloses": { "01/21/2013": "13:30:00", @@ -158801,7 +158830,40 @@ "12/24/2025", "12/25/2025", "12/26/2025", - "12/31/2025" + "12/31/2025", + "1/1/2026", + "4/3/2026", + "4/6/2026", + "5/1/2026", + "12/24/2026", + "12/25/2026", + "12/31/2026", + "1/1/2027", + "3/26/2027", + "3/29/2027", + "12/24/2027", + "12/31/2027", + "4/14/2028", + "4/17/2028", + "5/1/2028", + "12/25/2028", + "12/26/2028", + "1/1/2029", + "3/30/2029", + "4/2/2029", + "5/1/2029", + "12/24/2029", + "12/25/2029", + "12/26/2029", + "12/31/2029", + "1/1/2030", + "4/19/2030", + "4/22/2030", + "5/1/2030", + "12/24/2030", + "12/25/2030", + "12/26/2030", + "12/31/2030" ] }, "Index-hkfe-[*]": { From e3783ed4770426d55904697099743afab2304868 Mon Sep 17 00:00:00 2001 From: Adalyat Nazirov Date: Mon, 5 Jan 2026 12:55:46 +0000 Subject: [PATCH 076/103] Override `GetBuyingPowerModel` to support USDC collaterla in dYdX brokerage (#9187) --- Common/Brokerages/dYdXBrokerageModel.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Common/Brokerages/dYdXBrokerageModel.cs b/Common/Brokerages/dYdXBrokerageModel.cs index 157dcbdea330..6c28e2950d0a 100644 --- a/Common/Brokerages/dYdXBrokerageModel.cs +++ b/Common/Brokerages/dYdXBrokerageModel.cs @@ -43,6 +43,21 @@ public dYdXBrokerageModel(AccountType accountType = AccountType.Margin) : base(a } } + /// + /// Gets a new buying power model for the security, returning the default model with the security's configured leverage. + /// For cash accounts, leverage = 1 is used. + /// + /// The security to get a buying power model for + /// The buying power model for this brokerage/security + public override IBuyingPowerModel GetBuyingPowerModel(Security security) + { + return security?.Type switch + { + SecurityType.CryptoFuture => new SecurityMarginModel(GetLeverage(security)), + _ => base.GetBuyingPowerModel(security) + }; + } + /// /// Provides dYdX fee model /// @@ -145,4 +160,4 @@ private static IReadOnlyDictionary GetDefaultMarkets(strin map[SecurityType.CryptoFuture] = marketName; return map.ToReadOnlyDictionary(); } -} +} \ No newline at end of file From 1f3fd6edbb082ff0e86055d52e317d854690c685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 09:52:15 -0500 Subject: [PATCH 077/103] Reduce (part of) dates already present in generic entries from MHDB (#9190) * Remove dates present in cme generic entry * Remove dates present in cbot generic entry * Remove dates present in nymex generic entry * Remove dates present in comex generic entry * Remove dates present in oanda generic entry * Remove dates present in SGX and HKFE generic entries --- Data/market-hours/market-hours-database.json | 1772 +----------------- 1 file changed, 74 insertions(+), 1698 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 322c628c49da..d634cb630912 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -2565,27 +2565,9 @@ ], "saturday": [], "holidays": [ - "7/4/2014", - "4/3/2015", - "7/3/2015", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "4/2/2021", - "7/5/2021", - "7/4/2022", "4/7/2023", - "7/4/2023", - "11/23/2023", - "12/25/2023", "1/2/2024", - "7/4/2024", - "11/28/2024", - "12/25/2024", "1/1/2025", - "1/9/2025", - "4/18/2025", "7/4/2025", "11/27/2025", "12/25/2025", @@ -3016,30 +2998,21 @@ "05/26/2013", "07/04/2013", "09/01/2013", - "11/28/2013", - "12/25/2013", "01/01/2014", "01/19/2014", "02/16/2014", "04/18/2014", "05/25/2014", "07/04/2014", - "7/4/2014", "07/06/2014", "08/31/2014", - "11/27/2014", - "12/25/2014", "01/01/2015", "01/18/2015", "02/15/2015", "04/03/2015", - "4/3/2015", "05/24/2015", "07/03/2015", - "7/3/2015", "09/06/2015", - "11/26/2015", - "12/25/2015", "01/01/2016", "01/17/2016", "02/14/2016", @@ -3048,74 +3021,40 @@ "07/03/2016", "07/04/2016", "09/04/2016", - "11/24/2016", "01/15/2017", "02/19/2017", "04/14/2017", "05/28/2017", "07/04/2017", - "7/4/2017", "09/03/2017", - "11/23/2017", - "12/25/2017", "01/01/2018", "01/14/2018", "02/18/2018", "03/30/2018", "05/27/2018", "07/04/2018", - "7/4/2018", "09/02/2018", - "11/22/2018", - "12/25/2018", "01/01/2019", "01/20/2019", "02/17/2019", "04/19/2019", "05/26/2019", "07/04/2019", - "7/4/2019", "09/01/2019", - "11/28/2019", - "12/25/2019", "01/01/2020", "01/19/2020", "02/16/2020", "04/10/2020", "05/24/2020", "07/03/2020", - "7/3/2020", "09/06/2020", - "11/26/2020", - "12/25/2020", "01/01/2021", - "4/2/2021", - "7/5/2021", - "7/4/2022", "12/25/2022", - "12/26/2022", "1/1/2023", - "1/2/2023", - "1/16/2023", - "2/20/2023", "4/7/2023", - "5/29/2023", - "6/19/2023", - "7/4/2023", - "7/4/2023", "9/4/2023", - "11/23/2023", - "11/23/2023", - "12/25/2023", - "12/25/2023", - "1/1/2024", "1/2/2024", - "7/4/2024", - "11/28/2024", - "12/25/2024", "1/1/2025", - "1/9/2025", - "4/18/2025", "7/4/2025", "11/27/2025", "12/25/2025", @@ -3520,7 +3459,6 @@ "07/04/2013", "09/02/2013", "11/28/2013", - "12/25/2013", "01/01/2014", "01/20/2014", "02/17/2014", @@ -3530,7 +3468,6 @@ "07/04/2014", "09/01/2014", "11/27/2014", - "12/25/2014", "01/01/2015", "01/19/2015", "02/16/2015", @@ -3539,7 +3476,6 @@ "07/03/2015", "09/07/2015", "11/26/2015", - "12/25/2015", "01/01/2016", "01/18/2016", "02/15/2016", @@ -3548,7 +3484,6 @@ "07/04/2016", "09/05/2016", "11/24/2016", - "12/26/2016", "01/01/2017", "01/02/2017", "01/16/2017", @@ -3558,7 +3493,6 @@ "07/04/2017", "09/04/2017", "11/23/2017", - "12/25/2017", "01/15/2018", "02/19/2018", "03/30/2018", @@ -3566,7 +3500,6 @@ "07/04/2018", "09/03/2018", "11/22/2018", - "12/25/2018", "01/01/2019", "01/21/2019", "02/18/2019", @@ -3575,7 +3508,6 @@ "07/04/2019", "09/02/2019", "11/28/2019", - "12/25/2019", "01/01/2020", "01/20/2020", "02/17/2020", @@ -3584,7 +3516,6 @@ "07/03/2020", "09/07/2020", "11/26/2020", - "12/25/2020", "01/01/2021", "01/17/2021", "01/18/2021", @@ -3599,7 +3530,6 @@ "09/06/2021", "11/24/2021", "11/25/2021", - "12/24/2021", "12/26/2021", "01/16/2022", "01/17/2022", @@ -3617,9 +3547,7 @@ "11/23/2022", "11/24/2022", "12/25/2022", - "12/26/2022", "1/1/2023", - "1/2/2023", "1/16/2023", "2/20/2023", "4/7/2023", @@ -3751,27 +3679,9 @@ ], "saturday": [], "holidays": [ - "7/4/2014", - "4/3/2015", - "7/3/2015", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "4/2/2021", - "7/5/2021", - "7/4/2022", "4/7/2023", - "7/4/2023", - "11/23/2023", - "12/25/2023", "1/2/2024", - "7/4/2024", - "11/28/2024", - "12/25/2024", "1/1/2025", - "1/9/2025", - "4/18/2025", "7/4/2025", "11/27/2025", "12/25/2025", @@ -4196,7 +4106,6 @@ "saturday": [], "holidays": [ "4/7/2023", - "1/9/2025", "1/1/2026", "4/3/2026", "6/19/2026", @@ -4327,7 +4236,6 @@ "saturday": [], "holidays": [ "4/7/2023", - "1/9/2025", "1/1/2026", "4/3/2026", "6/19/2026", @@ -4458,7 +4366,6 @@ "saturday": [], "holidays": [ "4/7/2023", - "1/9/2025", "1/1/2026", "4/3/2026", "6/19/2026", @@ -4588,27 +4495,9 @@ ], "saturday": [], "holidays": [ - "7/4/2014", - "4/3/2015", - "7/3/2015", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "4/2/2021", - "7/5/2021", - "7/4/2022", "4/7/2023", - "7/4/2023", - "11/23/2023", - "12/25/2023", "1/2/2024", - "7/4/2024", - "11/28/2024", - "12/25/2024", "1/1/2025", - "1/9/2025", - "4/18/2025", "7/4/2025", "11/27/2025", "12/25/2025", @@ -5245,7 +5134,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -5815,7 +5703,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -6385,7 +6272,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -6955,7 +6841,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -7525,7 +7410,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -8095,7 +7979,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -8665,7 +8548,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -9235,9 +9117,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -9786,9 +9665,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -10337,7 +10213,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -10907,7 +10782,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -11477,7 +11351,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -12047,7 +11920,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -12617,9 +12489,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -13168,9 +13037,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -13719,9 +13585,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -14270,9 +14133,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -14821,9 +14681,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -15372,9 +15229,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -15923,9 +15777,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -16474,9 +16325,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -17025,9 +16873,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -17576,9 +17421,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -18127,9 +17969,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -18678,9 +18517,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -19229,9 +19065,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -19780,9 +19613,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -20331,9 +20161,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -20882,9 +20709,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -21433,9 +21257,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -21984,9 +21805,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -22535,9 +22353,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -23086,9 +22901,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -23637,7 +23449,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -24207,9 +24018,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -24758,9 +24566,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -25309,9 +25114,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -25860,9 +25662,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -26411,9 +26210,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -26962,9 +26758,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -27513,7 +27306,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -28083,9 +27875,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -28634,9 +28423,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -29185,7 +28971,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -29755,9 +29540,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -30306,9 +30088,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -30857,9 +30636,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -31408,9 +31184,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -31957,9 +31730,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -32458,7 +32228,6 @@ "saturday": [], "holidays": [ "4/7/2023", - "1/9/2025", "1/1/2026", "1/19/2026", "2/16/2026", @@ -32592,9 +32361,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -33143,9 +32909,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -33694,9 +33457,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -34245,9 +34005,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -34796,9 +34553,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -35347,27 +35101,9 @@ ], "saturday": [], "holidays": [ - "7/4/2014", - "4/3/2015", - "7/3/2015", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "4/2/2021", - "7/5/2021", - "7/4/2022", "4/7/2023", - "7/4/2023", - "11/23/2023", - "12/25/2023", "1/2/2024", - "7/4/2024", - "11/28/2024", - "12/25/2024", "1/1/2025", - "1/9/2025", - "4/18/2025", "7/4/2025", "11/27/2025", "12/25/2025", @@ -35791,7 +35527,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -36333,9 +36068,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -36884,9 +36616,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -37435,9 +37164,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -37986,7 +37712,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -38320,27 +38045,9 @@ ], "saturday": [], "holidays": [ - "7/4/2014", - "4/3/2015", - "7/3/2015", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "4/2/2021", - "7/5/2021", - "7/4/2022", "4/7/2023", - "7/4/2023", - "11/23/2023", - "12/25/2023", "1/2/2024", - "7/4/2024", - "11/28/2024", - "12/25/2024", "1/1/2025", - "1/9/2025", - "4/18/2025", "7/4/2025", "11/27/2025", "12/25/2025", @@ -38764,9 +38471,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -39334,7 +39038,6 @@ "4/7/2023", "11/23/2023", "11/28/2024", - "4/18/2025", "7/4/2025", "11/27/2025", "11/28/2025", @@ -39784,7 +39487,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -40354,9 +40056,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -40905,7 +40604,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -41307,9 +41005,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -41877,7 +41572,6 @@ "4/7/2023", "11/23/2023", "11/28/2024", - "4/18/2025", "7/4/2025", "11/27/2025", "11/28/2025", @@ -42519,9 +42213,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -43070,9 +42761,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -43621,9 +43309,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -44191,7 +43876,6 @@ "4/7/2023", "11/23/2023", "11/28/2024", - "4/18/2025", "7/4/2025", "11/27/2025", "11/28/2025", @@ -44641,9 +44325,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -45211,7 +44892,6 @@ "4/7/2023", "11/23/2023", "11/28/2024", - "4/18/2025", "7/4/2025", "11/27/2025", "11/28/2025", @@ -45661,9 +45341,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -46212,7 +45889,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -46782,7 +46458,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -47352,7 +47027,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -47922,10 +47596,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "1/9/2025", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -48472,11 +48142,7 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/7/2023", - "4/18/2025", - "1/9/2025" + "4/7/2023" ], "earlyCloses": { "1/19/2009": "16:15:00", @@ -48989,7 +48655,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -49531,7 +49196,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -50073,9 +49737,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -50624,9 +50285,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -51175,7 +50833,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -51745,7 +51402,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -52054,9 +51710,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -52605,9 +52258,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -53156,9 +52806,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -53707,9 +53354,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -54352,8 +53996,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -54924,8 +54566,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -55496,9 +55136,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -56047,9 +55684,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -56598,9 +56232,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -57149,9 +56780,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -57966,7 +57594,6 @@ "4/7/2023", "11/23/2023", "11/28/2024", - "4/18/2025", "7/4/2025", "11/27/2025", "11/28/2025", @@ -58410,7 +58037,6 @@ "4/7/2023", "11/23/2023", "11/28/2024", - "4/18/2025", "7/4/2025", "11/27/2025", "11/28/2025", @@ -59052,8 +58678,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -59481,9 +59105,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -60032,9 +59653,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -60583,9 +60201,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -61326,9 +60941,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -61877,7 +61489,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -62419,7 +62030,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -62963,7 +62573,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -63507,7 +63116,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -64049,7 +63657,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -64619,9 +64226,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -65170,9 +64774,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -65721,8 +65322,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -66293,8 +65892,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -66865,8 +66462,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -67437,8 +67032,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -68260,7 +67853,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -68802,7 +68394,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -69344,7 +68935,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -69886,7 +69476,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -70428,7 +70017,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -70970,7 +70558,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -71512,8 +71099,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -72174,7 +71759,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -72716,7 +72300,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -73258,7 +72841,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -73800,7 +73382,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -74350,9 +73931,7 @@ "11/28/2024", "12/25/2024", "1/1/2025", - "1/20/2025", "2/17/2025", - "4/18/2025", "5/26/2025", "6/19/2025", "7/4/2025", @@ -74644,9 +74223,7 @@ "11/28/2024", "12/25/2024", "1/1/2025", - "1/20/2025", "2/17/2025", - "4/18/2025", "5/26/2025", "6/19/2025", "7/4/2025", @@ -74938,9 +74515,7 @@ "11/28/2024", "12/25/2024", "1/1/2025", - "1/20/2025", "2/17/2025", - "4/18/2025", "5/26/2025", "6/19/2025", "7/4/2025", @@ -75222,8 +74797,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -75554,8 +75127,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -75886,7 +75457,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -76428,7 +75998,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -77282,7 +76851,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -77613,7 +77181,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -78407,9 +77974,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -78844,9 +78408,7 @@ "11/28/2024", "12/25/2024", "1/1/2025", - "1/20/2025", "2/17/2025", - "4/18/2025", "5/26/2025", "6/19/2025", "7/4/2025", @@ -79658,92 +79220,8 @@ "state": "market" } ], - "holidays": [ - "1/1/2016", - "2/8/2016", - "2/9/2016", - "3/25/2016", - "5/1/2016", - "5/21/2016", - "7/6/2016", - "8/9/2016", - "9/12/2016", - "10/29/2016", - "12/25/2016", - "1/1/2017", - "1/28/2017", - "1/29/2017", - "4/14/2017", - "5/1/2017", - "5/10/2017", - "6/25/2017", - "8/9/2017", - "9/1/2017", - "10/18/2017", - "12/25/2017", - "1/1/2018", - "2/16/2018", - "2/17/2018", - "3/30/2018", - "5/1/2018", - "5/29/2018", - "6/15/2018", - "8/9/2018", - "8/22/2018", - "11/6/2018", - "12/25/2018", - "1/1/2019", - "2/5/2019", - "2/6/2019", - "4/19/2019", - "5/1/2019", - "5/20/2019", - "6/5/2019", - "8/9/2019", - "8/12/2019", - "10/28/2019", - "12/25/2019", - "1/1/2020", - "1/27/2020", - "4/10/2020", - "5/1/2020", - "5/7/2020", - "5/25/2020", - "7/31/2020", - "8/10/2020", - "11/14/2020", - "12/25/2020", - "1/1/2021", - "2/12/2021", - "4/2/2021", - "5/1/2021", - "8/9/2021", - "12/25/2021", - "1/3/2022", - "1/31/2022", - "2/1/2022", - "2/2/2022", - "4/15/2022", - "5/2/2022", - "8/9/2022", - "12/26/2022", - "12/31/2022" - ], - "earlyCloses": { - "2/15/2018": "12:00:00", - "12/24/2018": "12:00:00", - "12/31/2018": "12:00:00", - "4/02/2019": "12:00:00", - "12/24/2019": "12:00:00", - "12/31/2019": "12:00:00", - "1/24/2020": "12:00:00", - "12/24/2020": "12:00:00", - "12/31/2020": "12:00:00", - "2/11/2021": "12:00:00", - "12/24/2021": "12:00:00", - "12/31/2021": "12:00:00", - "1/31/2022": "12:00:00" - }, + "holidays": [], + "earlyCloses": {}, "lateOpens": {} }, "Future-sgx-TW": { @@ -79837,92 +79315,8 @@ "state": "market" } ], - "holidays": [ - "1/1/2016", - "2/8/2016", - "2/9/2016", - "3/25/2016", - "5/1/2016", - "5/21/2016", - "7/6/2016", - "8/9/2016", - "9/12/2016", - "10/29/2016", - "12/25/2016", - "1/1/2017", - "1/28/2017", - "1/29/2017", - "4/14/2017", - "5/1/2017", - "5/10/2017", - "6/25/2017", - "8/9/2017", - "9/1/2017", - "10/18/2017", - "12/25/2017", - "1/1/2018", - "2/16/2018", - "2/17/2018", - "3/30/2018", - "5/1/2018", - "5/29/2018", - "6/15/2018", - "8/9/2018", - "8/22/2018", - "11/6/2018", - "12/25/2018", - "1/1/2019", - "2/5/2019", - "2/6/2019", - "4/19/2019", - "5/1/2019", - "5/20/2019", - "6/5/2019", - "8/9/2019", - "8/12/2019", - "10/28/2019", - "12/25/2019", - "1/1/2020", - "1/27/2020", - "4/10/2020", - "5/1/2020", - "5/7/2020", - "5/25/2020", - "7/31/2020", - "8/10/2020", - "11/14/2020", - "12/25/2020", - "1/1/2021", - "2/12/2021", - "4/2/2021", - "5/1/2021", - "8/9/2021", - "12/25/2021", - "1/3/2022", - "1/31/2022", - "2/1/2022", - "2/2/2022", - "4/15/2022", - "5/2/2022", - "8/9/2022", - "12/26/2022", - "12/31/2022" - ], - "earlyCloses": { - "2/15/2018": "12:00:00", - "12/24/2018": "12:00:00", - "12/31/2018": "12:00:00", - "4/02/2019": "12:00:00", - "12/24/2019": "12:00:00", - "12/31/2019": "12:00:00", - "1/24/2020": "12:00:00", - "12/24/2020": "12:00:00", - "12/31/2020": "12:00:00", - "2/11/2021": "12:00:00", - "12/24/2021": "12:00:00", - "12/31/2021": "12:00:00", - "1/31/2022": "12:00:00" - }, + "holidays": [], + "earlyCloses": {}, "lateOpens": {} }, "Future-sgx-IN": { @@ -80016,92 +79410,8 @@ "state": "market" } ], - "holidays": [ - "1/1/2016", - "2/8/2016", - "2/9/2016", - "3/25/2016", - "5/1/2016", - "5/21/2016", - "7/6/2016", - "8/9/2016", - "9/12/2016", - "10/29/2016", - "12/25/2016", - "1/1/2017", - "1/28/2017", - "1/29/2017", - "4/14/2017", - "5/1/2017", - "5/10/2017", - "6/25/2017", - "8/9/2017", - "9/1/2017", - "10/18/2017", - "12/25/2017", - "1/1/2018", - "2/16/2018", - "2/17/2018", - "3/30/2018", - "5/1/2018", - "5/29/2018", - "6/15/2018", - "8/9/2018", - "8/22/2018", - "11/6/2018", - "12/25/2018", - "1/1/2019", - "2/5/2019", - "2/6/2019", - "4/19/2019", - "5/1/2019", - "5/20/2019", - "6/5/2019", - "8/9/2019", - "8/12/2019", - "10/28/2019", - "12/25/2019", - "1/1/2020", - "1/27/2020", - "4/10/2020", - "5/1/2020", - "5/7/2020", - "5/25/2020", - "7/31/2020", - "8/10/2020", - "11/14/2020", - "12/25/2020", - "1/1/2021", - "2/12/2021", - "4/2/2021", - "5/1/2021", - "8/9/2021", - "12/25/2021", - "1/3/2022", - "1/31/2022", - "2/1/2022", - "2/2/2022", - "4/15/2022", - "5/2/2022", - "8/9/2022", - "12/26/2022", - "12/31/2022" - ], - "earlyCloses": { - "2/15/2018": "12:00:00", - "12/24/2018": "12:00:00", - "12/31/2018": "12:00:00", - "4/02/2019": "12:00:00", - "12/24/2019": "12:00:00", - "12/31/2019": "12:00:00", - "1/24/2020": "12:00:00", - "12/24/2020": "12:00:00", - "12/31/2020": "12:00:00", - "2/11/2021": "12:00:00", - "12/24/2021": "12:00:00", - "12/31/2021": "12:00:00", - "1/31/2022": "12:00:00" - }, + "holidays": [], + "earlyCloses": {}, "lateOpens": {} }, "Option-usa-[*]": { @@ -80493,67 +79803,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-EURNZD": { "dataTimeZone": "UTC", @@ -80646,67 +79898,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDCAD": { "dataTimeZone": "UTC", @@ -80799,67 +79993,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDCHF": { "dataTimeZone": "UTC", @@ -80952,67 +80088,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDHKD": { "dataTimeZone": "UTC", @@ -81105,67 +80183,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDJPY": { "dataTimeZone": "UTC", @@ -81258,67 +80278,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDSGD": { "dataTimeZone": "UTC", @@ -81411,67 +80373,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Forex-oanda-NZDUSD": { "dataTimeZone": "UTC", @@ -81564,67 +80468,9 @@ } ], "saturday": [], - "holidays": [ - "1/1/2005", - "1/1/2010", - "1/1/2011", - "1/1/2013", - "1/1/2016", - "1/1/2017", - "1/1/2021", - "1/1/2023", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "12/25/2010", - "12/25/2012", - "12/25/2015", - "12/25/2016", - "12/25/2020", - "12/25/2022", - "12/26/2022", - "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "12/30/2005": "17:00:00", - "12/29/2005": "17:00:00", - "12/31/2007": "17:00:00", - "12/31/2008": "17:00:00", - "12/31/2009": "17:00:00", - "12/31/2010": "17:00:00", - "12/30/2011": "17:00:00", - "12/31/2012": "14:00:00", - "12/31/2013": "14:00:00", - "12/31/2014": "14:00:00", - "12/31/2015": "14:00:00", - "12/30/2016": "14:00:00", - "12/29/2017": "17:00:00", - "12/24/2018": "17:00:00", - "12/31/2018": "17:00:00", - "12/24/2019": "17:00:00", - "12/31/2019": "17:00:00", - "12/24/2020": "17:00:00", - "12/31/2020": "17:00:00", - "12/31/2021": "17:00:00", - "12/24/2024": "17:00:00", - "12/31/2024": "17:00:00", - "12/24/2025": "17:00:00", - "12/31/2025": "17:00:00" - }, - "lateOpens": { - "12/25/2018": "17:00:00", - "1/1/2019": "17:00:00", - "12/25/2019": "17:00:00", - "1/1/2020": "17:00:00", - "12/25/2023": "17:00:00", - "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" - } + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} }, "Cfd-fxcm-[*]": { "dataTimeZone": "UTC-05", @@ -83945,7 +82791,6 @@ "1/1/2029", "1/1/2030", "1/2/2012", - "1/2/2023", "1/26/2007", "1/26/2012", "1/26/2021", @@ -83984,7 +82829,6 @@ "12/25/2019", "12/25/2020", "12/25/2021", - "12/25/2022", "12/25/2023", "12/25/2024", "12/25/2025", @@ -84003,7 +82847,6 @@ "12/26/2019", "12/26/2020", "12/26/2021", - "12/26/2022", "12/26/2023", "12/26/2024", "12/26/2025", @@ -84175,11 +83018,7 @@ "12/25/2020", "1/1/2021", "4/2/2021", - "4/15/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/15/2022" ] }, "Cfd-oanda-CH20CHF": { @@ -84267,9 +83106,7 @@ "4/18/2022", "5/26/2022", "6/6/2022", - "8/1/2022", - "12/26/2022", - "1/2/2023" + "8/1/2022" ] }, "Cfd-oanda-CORNUSD": { @@ -84416,11 +83253,7 @@ "5/13/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-DE10YBEUR": { @@ -84508,9 +83341,7 @@ "5/1/2022", "6/6/2022", "10/3/2022", - "10/31/2022", - "12/26/2022", - "1/2/2023" + "10/31/2022" ] }, "Cfd-oanda-DE30EUR": { @@ -84598,9 +83429,7 @@ "5/1/2022", "6/6/2022", "10/3/2022", - "10/31/2022", - "12/26/2022", - "1/2/2023" + "10/31/2022" ] }, "Cfd-oanda-EU50EUR": { @@ -84661,7 +83490,6 @@ "1/1/2020", "1/1/2021", "1/1/2022", - "1/1/2023", "1/1/2024", "1/1/2025", "1/1/2026", @@ -84669,7 +83497,6 @@ "1/1/2028", "1/1/2029", "1/1/2030", - "1/2/2023", "12/25/2003", "12/25/2005", "12/25/2006", @@ -84687,7 +83514,6 @@ "12/25/2019", "12/25/2020", "12/25/2021", - "12/25/2022", "12/25/2023", "12/25/2024", "12/25/2025", @@ -84712,7 +83538,6 @@ "12/26/2019", "12/26/2020", "12/26/2021", - "12/26/2022", "12/26/2023", "12/26/2024", "12/26/2025", @@ -84864,7 +83689,6 @@ "1/1/2020", "1/1/2021", "1/1/2022", - "1/1/2023", "1/1/2024", "1/1/2025", "1/1/2026", @@ -84872,7 +83696,6 @@ "1/1/2028", "1/1/2029", "1/1/2030", - "1/2/2023", "12/25/2003", "12/25/2005", "12/25/2006", @@ -84890,7 +83713,6 @@ "12/25/2019", "12/25/2020", "12/25/2021", - "12/25/2022", "12/25/2023", "12/25/2024", "12/25/2025", @@ -84915,7 +83737,6 @@ "12/26/2019", "12/26/2020", "12/26/2021", - "12/26/2022", "12/26/2023", "12/26/2024", "12/26/2025", @@ -85136,7 +83957,6 @@ "1/1/2030", "1/2/2006", "1/2/2012", - "1/2/2023", "1/22/2004", "1/22/2023", "1/23/2004", @@ -85231,7 +84051,6 @@ "12/25/2019", "12/25/2020", "12/25/2021", - "12/25/2022", "12/25/2023", "12/25/2024", "12/25/2025", @@ -85254,7 +84073,6 @@ "12/26/2019", "12/26/2020", "12/26/2021", - "12/26/2022", "12/26/2023", "12/26/2024", "12/26/2025", @@ -85594,7 +84412,6 @@ "1/1/2020", "1/1/2021", "1/1/2022", - "1/1/2023", "1/1/2024", "1/1/2024", "1/1/2025", @@ -85620,8 +84437,6 @@ "1/2/2019", "1/2/2020", "1/2/2021", - "1/2/2023", - "1/2/2023", "1/2/2024", "1/2/2025", "1/2/2026", @@ -85705,10 +84520,8 @@ "12/25/2012", "12/25/2013", "12/25/2015", - "12/25/2022", "12/26/2005", "12/26/2011", - "12/26/2022", "12/31/2019", "12/31/2020", "12/31/2021", @@ -86000,10 +84813,6 @@ "12/24/2021", "1/1/2022", "4/15/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023", "4/7/2023", "12/25/2023", "1/1/2024", @@ -86145,11 +84954,7 @@ "5/30/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-NL25EUR": { @@ -86206,7 +85011,6 @@ "1/1/2020", "1/1/2021", "1/1/2022", - "1/1/2023", "1/1/2024", "1/1/2025", "1/1/2026", @@ -86214,7 +85018,6 @@ "1/1/2028", "1/1/2029", "1/1/2030", - "1/2/2023", "12/25/2008", "12/25/2009", "12/25/2011", @@ -86228,7 +85031,6 @@ "12/25/2019", "12/25/2020", "12/25/2021", - "12/25/2022", "12/25/2023", "12/25/2024", "12/25/2025", @@ -86248,7 +85050,6 @@ "12/26/2019", "12/26/2020", "12/26/2021", - "12/26/2022", "12/26/2023", "12/26/2024", "12/26/2025", @@ -86456,9 +85257,7 @@ "2/1/2022", "4/15/2022", "5/2/2022", - "8/9/2022", - "12/26/2022", - "1/2/2023" + "8/9/2022" ] }, "Cfd-oanda-SOYBNUSD": { @@ -86605,11 +85404,7 @@ "5/13/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-SPX500USD": { @@ -86748,10 +85543,6 @@ "12/24/2021", "1/1/2022", "4/15/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023", "4/7/2023", "12/25/2023", "1/1/2024", @@ -86869,9 +85660,7 @@ "5/30/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/26/2022", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-UK100GBP": { @@ -87056,10 +85845,7 @@ "5/2/2022", "5/30/2022", "8/29/2022", - "12/25/2022", - "12/26/2022", "12/27/2022", - "1/2/2023", "4/7/2023", "4/10/2023", "5/1/2023", @@ -87195,9 +85981,7 @@ "4/2/2021", "4/5/2021", "4/15/2022", - "4/18/2022", - "12/26/2022", - "1/2/2023" + "4/18/2022" ] }, "Cfd-oanda-US2000USD": { @@ -87305,7 +86089,6 @@ "1/1/2020", "1/1/2021", "1/1/2022", - "1/1/2023", "1/1/2024", "1/1/2025", "1/1/2026", @@ -87314,7 +86097,6 @@ "1/1/2029", "1/1/2030", "1/2/2012", - "1/2/2023", "12/24/2004", "12/24/2010", "12/24/2021", @@ -87330,7 +86112,6 @@ "12/25/2015", "12/25/2019", "12/25/2020", - "12/25/2022", "12/25/2023", "12/25/2024", "12/25/2025", @@ -87339,7 +86120,6 @@ "12/25/2029", "12/25/2030", "12/26/2011", - "12/26/2022", "3/21/2008", "3/25/2005", "3/25/2016", @@ -87470,7 +86250,6 @@ "1/1/2020", "1/1/2021", "1/1/2022", - "1/1/2023", "1/1/2024", "1/1/2025", "1/1/2026", @@ -87484,7 +86263,6 @@ "1/19/2004", "1/2/2006", "1/2/2012", - "1/2/2023", "11/22/2007", "11/23/2006", "11/24/2005", @@ -87513,7 +86291,6 @@ "12/25/2030", "12/26/2005", "12/26/2011", - "12/26/2022", "2/16/2004", "2/19/2007", "2/20/2006", @@ -87673,11 +86450,7 @@ "5/13/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-USB05YUSD": { @@ -87799,11 +86572,7 @@ "5/13/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-USB10YUSD": { @@ -87925,11 +86694,7 @@ "5/13/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-USB30YUSD": { @@ -88051,11 +86816,7 @@ "5/13/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-WHEATUSD": { @@ -88202,11 +86963,7 @@ "5/13/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-WTICOUSD": { @@ -88325,11 +87082,7 @@ "5/30/2022", "7/4/2022", "9/5/2022", - "11/24/2022", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "11/24/2022" ] }, "Cfd-oanda-XAGAUD": { @@ -88399,11 +87152,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAGCAD": { @@ -88472,12 +87221,7 @@ } ], "saturday": [], - "holidays": [ - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" - ] + "holidays": [] }, "Cfd-oanda-XAGCHF": { "dataTimeZone": "UTC", @@ -88546,11 +87290,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAGEUR": { @@ -88620,11 +87360,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAGGBP": { @@ -88694,11 +87430,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAGHKD": { @@ -88768,11 +87500,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAGJPY": { @@ -88842,11 +87570,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAGNZD": { @@ -88941,11 +87665,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAGSGD": { @@ -89015,11 +87735,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAGUSD": { @@ -89089,11 +87805,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUAUD": { @@ -89163,11 +87875,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUCAD": { @@ -89237,11 +87945,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUCHF": { @@ -89311,11 +88015,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUEUR": { @@ -89385,11 +88085,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUGBP": { @@ -89459,11 +88155,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUHKD": { @@ -89533,11 +88225,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUJPY": { @@ -89607,11 +88295,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUNZD": { @@ -89706,11 +88390,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUSGD": { @@ -89780,11 +88460,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUUSD": { @@ -89854,11 +88530,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XAUXAG": { @@ -89928,11 +88600,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XCUUSD": { @@ -90002,11 +88670,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XPDUSD": { @@ -90076,11 +88740,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-oanda-XPTUSD": { @@ -90150,11 +88810,7 @@ ], "saturday": [], "holidays": [ - "4/14/2017", - "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "4/14/2017" ] }, "Cfd-interactivebrokers-[*]": { @@ -140779,7 +139435,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -141321,7 +139976,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -141863,7 +140517,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -142433,7 +141086,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -142975,8 +141627,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -143519,10 +142169,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "1/9/2025", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -144069,7 +142715,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -144371,7 +143016,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -144678,9 +143322,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -145229,7 +143870,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -145799,10 +144439,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "1/9/2025", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -146349,9 +144985,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -146900,7 +145533,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -147470,7 +146102,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -148040,9 +146671,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -148591,9 +147219,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -149142,8 +147767,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -149714,7 +148337,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -150193,7 +148815,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -150763,8 +149384,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -151335,9 +149954,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -151886,9 +150502,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -152437,8 +151050,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -153370,7 +151981,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -154494,8 +153104,6 @@ ], "saturday": [], "holidays": [ - "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -155066,7 +153674,6 @@ ], "saturday": [], "holidays": [ - "4/18/2025", "7/4/2026", "12/25/2026", "1/1/2027" @@ -155683,9 +154290,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -156234,47 +154838,11 @@ ], "saturday": [], "holidays": [ - "4/10/2009", - "12/25/2009", - "1/1/2010", "4/2/2010", - "12/24/2010", - "1/1/2011", - "4/22/2011", - "12/26/2011", "4/6/2012", - "12/25/2012", "1/2/2013", - "3/29/2013", - "12/25/2013", - "1/1/2014", - "4/18/2014", - "12/25/2014", - "1/1/2015", - "12/25/2015", - "1/1/2016", - "3/25/2016", - "12/26/2016", - "1/2/2017", - "4/14/2017", - "12/25/2017", - "1/1/2018", - "3/30/2018", - "12/25/2018", - "1/1/2019", - "4/19/2019", - "12/25/2019", - "1/1/2020", - "4/10/2020", - "12/25/2020", - "1/1/2021", - "12/24/2021", - "1/1/2022", - "4/15/2022", "12/25/2022", - "12/26/2022", - "1/1/2023", - "1/2/2023" + "1/1/2023" ], "earlyCloses": { "1/19/2009": "10:30:00", @@ -156488,9 +155056,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -157012,49 +155577,12 @@ ], "saturday": [], "holidays": [ - "4/10/2009", - "12/25/2009", - "1/1/2010", "4/2/2010", - "12/24/2010", - "1/1/2011", - "4/22/2011", - "12/26/2011", "4/6/2012", - "12/25/2012", "1/2/2013", - "3/29/2013", - "12/25/2013", - "1/1/2014", - "4/18/2014", - "12/25/2014", - "1/1/2015", - "12/25/2015", - "1/1/2016", - "3/25/2016", - "12/26/2016", - "1/2/2017", - "4/14/2017", - "12/25/2017", - "1/1/2018", - "3/30/2018", - "12/25/2018", - "1/1/2019", - "4/19/2019", - "12/25/2019", - "1/1/2020", - "4/10/2020", - "12/25/2020", - "1/1/2021", - "12/24/2021", - "1/1/2022", - "4/15/2022", "12/25/2022", - "12/26/2022", "1/1/2023", - "1/2/2023", "1/9/2025", - "4/18/2025", "12/25/2026", "1/1/2027" ], @@ -157418,10 +155946,6 @@ ], "saturday": [], "holidays": [ - "4/3/2015", - "4/2/2021", - "1/9/2025", - "4/18/2025", "4/3/2026", "12/25/2026", "1/1/2027" @@ -159165,156 +157689,8 @@ } ], "saturday": [], - "holidays": [ - "1/2/2017", - "1/30/2017", - "1/31/2017", - "4/4/2017", - "4/14/2017", - "4/17/2017", - "5/1/2017", - "5/3/2017", - "5/30/2017", - "10/2/2017", - "10/5/2017", - "12/25/2017", - "12/26/2017", - "1/1/2018", - "2/16/2018", - "2/19/2018", - "3/30/2018", - "4/2/2018", - "4/5/2018", - "5/1/2018", - "5/22/2018", - "6/18/2018", - "7/2/2018", - "9/25/2018", - "10/1/2018", - "10/17/2018", - "12/25/2018", - "12/26/2018", - "1/1/2019", - "2/5/2019", - "2/6/2019", - "2/7/2019", - "4/5/2019", - "4/19/2019", - "4/22/2019", - "5/1/2019", - "5/13/2019", - "6/7/2019", - "7/1/2019", - "10/1/2019", - "10/7/2019", - "12/25/2019", - "12/26/2019", - "1/1/2020", - "1/27/2020", - "1/28/2020", - "4/10/2020", - "4/13/2020", - "4/30/2020", - "5/1/2020", - "6/25/2020", - "7/1/2020", - "10/1/2020", - "10/2/2020", - "10/26/2020", - "12/25/2020", - "1/1/2021", - "2/12/2021", - "2/15/2021", - "4/2/2021", - "4/5/2021", - "4/6/2021", - "5/19/2021", - "6/14/2021", - "7/1/2021", - "9/22/2021", - "10/1/2021", - "10/14/2021", - "12/27/2021", - "2/1/2022", - "2/2/2022", - "2/3/2022", - "4/5/2022", - "4/15/2022", - "4/18/2022", - "5/2/2022", - "5/9/2022", - "6/3/2022", - "7/1/2022", - "9/12/2022", - "10/4/2022", - "12/26/2022", - "12/27/2022", - "1/2/2023", - "1/23/2023", - "1/24/2023", - "1/25/2023", - "4/5/2023", - "4/7/2023", - "4/10/2023", - "5/1/2023", - "5/26/2023", - "6/22/2023", - "10/2/2023", - "10/23/2023", - "12/25/2023", - "12/26/2023", - "1/1/2024", - "2/12/2024", - "2/13/2024", - "3/29/2024", - "4/1/2024", - "4/4/2024", - "5/1/2024", - "5/15/2024", - "6/10/2024", - "7/1/2024", - "9/18/2024", - "10/1/2024", - "10/11/2024", - "12/25/2024", - "12/26/2024", - "1/1/2025", - "1/29/2025", - "1/30/2025", - "1/31/2025", - "4/4/2025", - "4/18/2025", - "4/21/2025", - "5/1/2025", - "5/5/2025", - "7/1/2025", - "10/1/2025", - "10/7/2025", - "10/29/2025", - "12/25/2025", - "12/26/2025" - ], - "earlyCloses": { - "2/15/2018": "12:00:00", - "12/24/2018": "12:00:00", - "12/31/2018": "12:00:00", - "2/4/2019": "12:00:00", - "12/24/2019": "12:00:00", - "12/31/2019": "12:00:00", - "1/24/2020": "12:00:00", - "12/24/2020": "12:00:00", - "12/31/2020": "12:00:00", - "2/11/2021": "12:00:00", - "12/24/2021": "12:00:00", - "12/31/2021": "12:00:00", - "1/31/2022": "12:00:00", - "2/9/2024": "12:00:00", - "12/24/2024": "12:00:00", - "12/31/2024": "12:00:00", - "1/28/2025": "12:00:00", - "12/24/2025": "12:00:00", - "12/31/2025": "12:00:00" - }, + "holidays": [], + "earlyCloses": {}, "lateOpens": {} }, "Future-hkfe-[*]": { From 538405d1521cbac2a75dfbf8257409051574e9b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 09:59:37 -0500 Subject: [PATCH 078/103] Remove dates present in generic interactivebrokers (#9191) --- Data/market-hours/market-hours-database.json | 3710 ++---------------- 1 file changed, 397 insertions(+), 3313 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index d634cb630912..cda1a67218ab 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -89246,3320 +89246,404 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBUS30": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBUST100": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:0:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBGB100": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBEU50": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBDE40": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "01:15:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBFR40": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBES35": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "07:00:00", - "end": "19:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBNL25": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "07:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBUS30": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBUST100": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:0:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBGB100": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBEU50": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "thursday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBDE40": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "01:15:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBFR40": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBES35": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "07:00:00", + "end": "19:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBNL25": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "07:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Cfd-interactivebrokers-IBCH20": { "dataTimeZone": "UTC", From 68d4da8e761ce63e4303b1dcb49b0fd44af818cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 10:22:20 -0500 Subject: [PATCH 079/103] Remove dates present in generic entries (#9192) --- Data/market-hours/market-hours-database.json | 2734 +++--------------- 1 file changed, 395 insertions(+), 2339 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index cda1a67218ab..1d5446f97e42 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -89685,2346 +89685,402 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBJP225": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - }, - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - }, - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - }, - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - }, - { - "start": "23:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "22:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBHK50": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [], - "monday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "01:15:00", - "end": "04:00:00", - "state": "market" - }, - { - "start": "05:00:00", - "end": "08:30:00", - "state": "market" - }, - { - "start": "09:15:00", - "end": "19:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-IBAU200": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:50:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "05:30:00", - "state": "market" - }, - { - "start": "06:10:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-XAUUSD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-XAGUSD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "UTC", - "sunday": [ - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - }, - { - "start": "22:00:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "21:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBJP225": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + }, + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + }, + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + }, + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + }, + { + "start": "23:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "22:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBHK50": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [], + "monday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "01:15:00", + "end": "04:00:00", + "state": "market" + }, + { + "start": "05:00:00", + "end": "08:30:00", + "state": "market" + }, + { + "start": "09:15:00", + "end": "19:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-IBAU200": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "wednesday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:50:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "05:30:00", + "state": "market" + }, + { + "start": "06:10:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-XAUUSD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-XAGUSD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "UTC", + "sunday": [ + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + }, + { + "start": "22:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "21:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Crypto-coinbase-[*]": { "dataTimeZone": "UTC", From 2f80a2a6b95f021cfd208d1350190c505353bef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 10:45:59 -0500 Subject: [PATCH 080/103] Remove dates in generic Interactive Brokers entry part 4 (#9193) * Remove dates present in generic entries * Remove dates present in IB generic entry --- Data/market-hours/market-hours-database.json | 4484 +++--------------- 1 file changed, 622 insertions(+), 3862 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 1d5446f97e42..3c9ea652d0c1 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -90364,3869 +90364,629 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-AUDCHF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-AUDCNH": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-AUDHKD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-AUDJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-AUDNZD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-AUDSGD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-AUDUSD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-AUDZAR": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CADCHF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-AUDCHF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-AUDCNH": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-AUDHKD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-AUDJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-AUDNZD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-AUDSGD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-AUDUSD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-AUDZAR": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CADCHF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Cfd-interactivebrokers-CADCNH": { "dataTimeZone": "UTC", From 1b66aeede1ad8e4e7a650edff58f9dd6d7a408c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:10:04 -0500 Subject: [PATCH 081/103] Remove dates present in IB generic entry part 5 (#9196) --- Data/market-hours/market-hours-database.json | 4484 +++--------------- 1 file changed, 622 insertions(+), 3862 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 3c9ea652d0c1..122e48554629 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -91054,3869 +91054,629 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CADHKD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CADJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CHFCNH": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CHFCZK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CHFDKK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CHFHUF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CHFJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CHFNOK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CHFPLN": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CADHKD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CADJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CHFCNH": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CHFCZK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CHFDKK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CHFHUF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CHFJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CHFNOK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CHFPLN": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Cfd-interactivebrokers-CHFSEK": { "dataTimeZone": "UTC", From fd7048d2d1f06238376ac1398636de6dc53d4231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:27:45 -0500 Subject: [PATCH 082/103] Remove dates present in IB generic entry part 6 (#9197) --- Data/market-hours/market-hours-database.json | 4484 +++--------------- 1 file changed, 622 insertions(+), 3862 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 122e48554629..9e18ba053bde 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -91744,3869 +91744,629 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CHFZAR": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CNHHKD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-CNHJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-DKKJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-DKKNOK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-DKKSEK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURAUD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURCAD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURCHF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CHFZAR": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CNHHKD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-CNHJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-DKKJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-DKKNOK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-DKKSEK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURAUD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURCAD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURCHF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Cfd-interactivebrokers-EURCNH": { "dataTimeZone": "UTC", From 713785157e0a42e03ebe44aa98cb4e93c19ad569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 12:30:07 -0500 Subject: [PATCH 083/103] Remove dates present in IB generic entry part 7 (#9198) --- Data/market-hours/market-hours-database.json | 6332 +++--------------- 1 file changed, 898 insertions(+), 5434 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 9e18ba053bde..4f2bc750d3f3 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -92434,5441 +92434,905 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURCZK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURDKK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURGBP": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURHKD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURHUF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURILS": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURMXN": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURNOK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURNZD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURPLN": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURRUB": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURSEK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURCZK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURDKK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURGBP": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURHKD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURHUF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURILS": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURMXN": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURNOK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURNZD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURPLN": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURRUB": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURSEK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Cfd-interactivebrokers-EURSGD": { "dataTimeZone": "UTC", From 6506ff53a35c1f3efe0de6ecd8001cd1c030dcd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 12:32:01 -0500 Subject: [PATCH 084/103] Remove dates in generic Interactive Brokers entry part 8 (#9199) * Remove dates present in IB generic entry part 7 * Remove dates present in IB generic entry part 8 --- Data/market-hours/market-hours-database.json | 6332 +++--------------- 1 file changed, 898 insertions(+), 5434 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 4f2bc750d3f3..78217c49949c 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -93400,5441 +93400,905 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURUSD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-EURZAR": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPAUD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPCAD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPCHF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPCNH": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPCZK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPDKK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPHKD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPHUF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPMXN": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPNOK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURUSD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-EURZAR": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPAUD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPCAD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPCHF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPCNH": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPCZK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPDKK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPHKD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPHUF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPMXN": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPNOK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Cfd-interactivebrokers-GBPNZD": { "dataTimeZone": "UTC", From 1253cc73bdfbf7d06a1bc0fab67f2cb24e0e1942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 14:12:19 -0500 Subject: [PATCH 085/103] Remove dates present in IB generic entry part 9 (#9200) --- Data/market-hours/market-hours-database.json | 7718 +++--------------- 1 file changed, 1105 insertions(+), 6613 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 78217c49949c..2add94e8022a 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -94366,6620 +94366,1112 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPPLN": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPSEK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPSGD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPUSD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-GBPZAR": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-HKDJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-MXNJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-NOKJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-NOKSEK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-NZDCAD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-NZDCHF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-NZDJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-NZDUSD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-SEKJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-SGDCNH": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-SGDJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPPLN": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPSEK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPSGD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPUSD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-GBPZAR": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-HKDJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-MXNJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-NOKJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-NOKSEK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-NZDCAD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-NZDCHF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-NZDJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-NZDUSD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-SEKJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-SGDCNH": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-SGDJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Cfd-interactivebrokers-USDCAD": { "dataTimeZone": "UTC", From f86a51ac3fb992ae96d8b2f68a52572936719188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 14:14:25 -0500 Subject: [PATCH 086/103] Remove dates in generic Interactive Brokers entry part 10 (#9201) * Remove dates present in IB generic entry part 9 * Remove dates in IB generic entry part 10 --- Data/market-hours/market-hours-database.json | 7718 +++--------------- 1 file changed, 1105 insertions(+), 6613 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 2add94e8022a..5310a52779b2 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -95539,6620 +95539,1112 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDCHF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDCNH": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDCZK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDDKK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDHKD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDHUF": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDILS": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDMXN": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDNOK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDPLN": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDRUB": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDSEK": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDSGD": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-USDZAR": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } - }, - "Cfd-interactivebrokers-ZARJPY": { - "dataTimeZone": "UTC", - "exchangeTimeZone": "America/New_York", - "sunday": [ - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "monday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "tuesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "wednesday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "thursday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - }, - { - "start": "17:15:00", - "end": "1.00:00:00", - "state": "market" - } - ], - "friday": [ - { - "start": "00:00:00", - "end": "17:00:00", - "state": "market" - } - ], - "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/1/2024", - "1/2/2023", - "1/1/2025", - "1/2/2007", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "6/11/2004", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "10/29/2012", - "10/30/2012", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025" + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDCHF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDCNH": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDCZK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDDKK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDHKD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDHUF": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDILS": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDMXN": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDNOK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDPLN": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDRUB": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDSEK": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDSGD": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" - } + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-USDZAR": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} + }, + "Cfd-interactivebrokers-ZARJPY": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + }, + { + "start": "17:15:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {} }, "Crypto-binance-[*]": { "dataTimeZone": "UTC", From f2c5551b1e5b36d439a5d8cd1d074f24bef49a58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Tue, 6 Jan 2026 15:19:07 -0500 Subject: [PATCH 087/103] Remove dates present in generic entry Index-usa and others (#9202) --- Data/market-hours/market-hours-database.json | 1040 +----------------- 1 file changed, 6 insertions(+), 1034 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 5310a52779b2..11ead53b1174 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -62476,8 +62476,6 @@ "6/19/2026", "7/3/2026", "9/7/2026", - "10/12/2026", - "11/11/2026", "11/26/2026" ] }, @@ -63019,8 +63017,6 @@ "6/19/2026", "7/3/2026", "9/7/2026", - "10/12/2026", - "11/11/2026", "11/26/2026" ] }, @@ -98381,345 +98377,8 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "1/2/2007", - "1/9/2025", - "1/1/2026", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "6/11/2004", - "10/29/2012", - "10/30/2012", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "1/19/2026", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "2/16/2026", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "4/3/2026", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "5/26/2025", - "5/25/2026", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "6/19/2026", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "7/3/2026", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/7/2026", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "11/26/2026", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025", - "12/25/2026" - ], - "earlyCloses": { - "7/3/2000": "12:15:00", - "7/3/2001": "12:15:00", - "7/5/2002": "12:15:00", - "7/3/2003": "12:15:00", - "7/3/2006": "12:15:00", - "7/3/2007": "12:15:00", - "7/3/2008": "12:15:00", - "7/3/2012": "12:15:00", - "7/3/2013": "12:15:00", - "7/3/2014": "12:15:00", - "7/3/2017": "12:15:00", - "7/3/2018": "12:15:00", - "7/3/2019": "12:15:00", - "7/3/2024": "12:00:00", - "7/3/2025": "12:00:00", - "11/26/1999": "12:15:00", - "11/24/2000": "12:15:00", - "11/23/2001": "12:15:00", - "11/29/2002": "12:15:00", - "11/28/2003": "12:15:00", - "11/26/2004": "12:15:00", - "11/25/2005": "12:15:00", - "11/24/2006": "12:15:00", - "11/23/2007": "12:15:00", - "11/28/2008": "12:15:00", - "11/27/2009": "12:15:00", - "11/26/2010": "12:15:00", - "11/25/2011": "12:15:00", - "11/23/2012": "12:15:00", - "11/29/2013": "12:15:00", - "11/28/2014": "12:15:00", - "11/27/2015": "12:15:00", - "11/25/2016": "12:15:00", - "11/24/2017": "12:15:00", - "11/23/2018": "12:15:00", - "11/29/2019": "12:15:00", - "11/27/2020": "12:15:00", - "11/26/2021": "12:15:00", - "11/25/2022": "12:15:00", - "11/24/2023": "12:15:00", - "11/29/2024": "12:00:00", - "11/28/2025": "12:00:00", - "11/27/2026": "12:00:00", - "12/24/2001": "12:15:00", - "12/24/2002": "12:15:00", - "12/24/2003": "12:15:00", - "12/26/2003": "12:15:00", - "12/24/2007": "12:15:00", - "12/24/2008": "12:15:00", - "12/24/2009": "12:15:00", - "12/24/2012": "12:15:00", - "12/24/2013": "12:15:00", - "12/24/2014": "12:15:00", - "12/24/2015": "12:15:00", - "12/24/2017": "12:15:00", - "12/24/2018": "12:15:00", - "12/24/2019": "12:15:00", - "12/24/2020": "12:15:00", - "12/24/2024": "12:00:00", - "12/24/2025": "12:00:00", - "12/24/2026": "12:00:00" - } + "holidays": [], + "earlyCloses": {} }, "Index-usa-NDX": { "dataTimeZone": "America/Chicago", @@ -98761,346 +98420,8 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "1/1/2026", - "1/2/2007", - "1/9/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "6/11/2004", - "10/29/2012", - "10/30/2012", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "1/19/2026", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "2/16/2026", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "4/3/2026", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "5/26/2025", - "5/25/2026", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "6/19/2026", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "7/3/2026", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/7/2026", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "11/26/2026", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025", - "12/25/2026" - ], - "earlyCloses": { - "7/3/2000": "13:00:00", - "7/3/2001": "13:00:00", - "7/5/2002": "13:00:00", - "7/3/2003": "13:00:00", - "7/3/2006": "13:00:00", - "7/3/2007": "13:00:00", - "7/3/2008": "13:00:00", - "7/3/2012": "13:00:00", - "7/3/2013": "13:00:00", - "7/3/2014": "13:00:00", - "7/3/2017": "13:00:00", - "7/3/2018": "13:00:00", - "7/3/2019": "13:00:00", - "7/3/2023": "13:00:00", - "7/3/2024": "13:00:00", - "7/3/2025": "13:00:00", - "11/26/1999": "13:00:00", - "11/24/2000": "13:00:00", - "11/23/2001": "13:00:00", - "11/29/2002": "13:00:00", - "11/28/2003": "13:00:00", - "11/26/2004": "13:00:00", - "11/25/2005": "13:00:00", - "11/24/2006": "13:00:00", - "11/23/2007": "13:00:00", - "11/28/2008": "13:00:00", - "11/27/2009": "13:00:00", - "11/26/2010": "13:00:00", - "11/25/2011": "13:00:00", - "11/23/2012": "13:00:00", - "11/29/2013": "13:00:00", - "11/28/2014": "13:00:00", - "11/27/2015": "13:00:00", - "11/25/2016": "13:00:00", - "11/24/2017": "13:00:00", - "11/23/2018": "13:00:00", - "11/29/2019": "13:00:00", - "11/27/2020": "13:00:00", - "11/26/2021": "13:00:00", - "11/25/2022": "13:00:00", - "11/24/2023": "13:00:00", - "11/29/2024": "13:00:00", - "11/28/2025": "13:00:00", - "11/27/2026": "13:00:00", - "12/24/2001": "13:00:00", - "12/24/2002": "13:00:00", - "12/24/2003": "13:00:00", - "12/26/2003": "13:00:00", - "12/24/2007": "13:00:00", - "12/24/2008": "13:00:00", - "12/24/2009": "13:00:00", - "12/24/2012": "13:00:00", - "12/24/2013": "13:00:00", - "12/24/2014": "13:00:00", - "12/24/2015": "13:00:00", - "12/24/2017": "13:00:00", - "12/24/2018": "13:00:00", - "12/24/2019": "13:00:00", - "12/24/2020": "13:00:00", - "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00", - "12/24/2026": "13:00:00" - } + "holidays": [], + "earlyCloses": {} }, "Index-usa-SPX": { "dataTimeZone": "America/Chicago", @@ -99142,357 +98463,8 @@ } ], "saturday": [], - "holidays": [ - "1/1/1998", - "1/1/1999", - "1/1/2001", - "1/1/2002", - "1/1/2003", - "1/1/2004", - "1/2/2006", - "1/1/2007", - "1/1/2008", - "1/1/2009", - "1/1/2010", - "1/1/2011", - "1/2/2012", - "1/1/2013", - "1/1/2014", - "1/1/2015", - "1/1/2016", - "1/2/2017", - "1/1/2018", - "1/1/2019", - "1/1/2020", - "1/1/2021", - "1/1/2022", - "1/2/2023", - "1/1/2024", - "1/1/2025", - "1/1/2026", - "1/1/2027", - "1/2/2007", - "1/9/2025", - "9/11/2001", - "9/12/2001", - "9/13/2001", - "9/14/2001", - "6/11/2004", - "10/29/2012", - "10/30/2012", - "1/19/1998", - "1/18/1999", - "1/17/2000", - "1/15/2001", - "1/21/2002", - "1/20/2003", - "1/19/2004", - "1/17/2005", - "1/16/2006", - "1/15/2007", - "1/21/2008", - "1/19/2009", - "1/18/2010", - "1/17/2011", - "1/16/2012", - "1/21/2013", - "1/20/2014", - "1/19/2015", - "1/18/2016", - "1/16/2017", - "1/15/2018", - "1/21/2019", - "1/20/2020", - "1/18/2021", - "1/17/2022", - "1/16/2023", - "1/15/2024", - "1/20/2025", - "1/19/2026", - "1/18/2027", - "2/16/1998", - "2/15/1999", - "2/21/2000", - "2/19/2001", - "2/18/2002", - "2/17/2003", - "2/16/2004", - "2/21/2005", - "2/20/2006", - "2/19/2007", - "2/18/2008", - "2/16/2009", - "2/15/2010", - "2/21/2011", - "2/20/2012", - "2/18/2013", - "2/17/2014", - "2/16/2015", - "2/15/2016", - "2/20/2017", - "2/19/2018", - "2/18/2019", - "2/17/2020", - "2/15/2021", - "2/21/2022", - "2/20/2023", - "2/19/2024", - "2/17/2025", - "2/16/2026", - "2/15/2027", - "4/10/1998", - "4/2/1999", - "4/21/2000", - "4/13/2001", - "3/29/2002", - "4/18/2003", - "4/9/2004", - "3/25/2005", - "4/14/2006", - "4/6/2007", - "3/21/2008", - "4/10/2009", - "4/2/2010", - "4/22/2011", - "4/6/2012", - "3/29/2013", - "4/18/2014", - "4/3/2015", - "3/25/2016", - "4/14/2017", - "3/30/2018", - "4/19/2019", - "4/10/2020", - "4/2/2021", - "4/15/2022", - "4/7/2023", - "3/29/2024", - "4/18/2025", - "4/3/2026", - "3/26/2027", - "5/25/1998", - "5/31/1999", - "5/29/2000", - "5/28/2001", - "5/27/2002", - "5/26/2003", - "5/31/2004", - "5/30/2005", - "5/29/2006", - "5/28/2007", - "5/26/2008", - "5/25/2009", - "5/31/2010", - "5/30/2011", - "5/28/2012", - "5/27/2013", - "5/26/2014", - "5/25/2015", - "5/30/2016", - "5/29/2017", - "5/28/2018", - "5/27/2019", - "5/25/2020", - "5/31/2021", - "5/30/2022", - "5/29/2023", - "5/27/2024", - "5/26/2025", - "5/25/2026", - "5/31/2027", - "6/20/2022", - "6/19/2023", - "6/19/2024", - "6/19/2025", - "6/19/2026", - "6/18/2027", - "7/3/1998", - "7/5/1999", - "7/4/2000", - "7/4/2001", - "7/4/2002", - "7/4/2003", - "7/5/2004", - "7/4/2005", - "7/4/2006", - "7/4/2007", - "7/4/2008", - "7/3/2009", - "7/5/2010", - "7/4/2011", - "7/4/2012", - "7/4/2013", - "7/4/2014", - "7/3/2015", - "7/4/2016", - "7/4/2017", - "7/4/2018", - "7/4/2019", - "7/3/2020", - "7/5/2021", - "7/4/2022", - "7/4/2023", - "7/4/2024", - "7/4/2025", - "7/3/2026", - "7/5/2027", - "9/7/1998", - "9/6/1999", - "9/4/2000", - "9/3/2001", - "9/2/2002", - "9/1/2003", - "9/6/2004", - "9/5/2005", - "9/4/2006", - "9/3/2007", - "9/1/2008", - "9/7/2009", - "9/6/2010", - "9/5/2011", - "9/3/2012", - "9/2/2013", - "9/1/2014", - "9/7/2015", - "9/5/2016", - "9/4/2017", - "9/3/2018", - "9/2/2019", - "9/7/2020", - "9/6/2021", - "9/5/2022", - "9/4/2023", - "9/2/2024", - "9/1/2025", - "9/7/2026", - "9/6/2027", - "11/26/1998", - "11/25/1999", - "11/23/2000", - "11/22/2001", - "11/28/2002", - "11/27/2003", - "11/25/2004", - "11/24/2005", - "11/23/2006", - "11/22/2007", - "11/27/2008", - "11/26/2009", - "11/25/2010", - "11/24/2011", - "11/22/2012", - "11/28/2013", - "11/27/2014", - "11/26/2015", - "11/24/2016", - "11/23/2017", - "11/22/2018", - "11/28/2019", - "11/26/2020", - "11/25/2021", - "11/24/2022", - "11/23/2023", - "11/28/2024", - "11/27/2025", - "11/26/2026", - "11/25/2027", - "12/05/2018", - "12/25/1998", - "12/24/1999", - "12/25/2000", - "12/25/2001", - "12/25/2002", - "12/25/2003", - "12/24/2004", - "12/26/2005", - "12/25/2006", - "12/25/2007", - "12/25/2008", - "12/25/2009", - "12/24/2010", - "12/26/2011", - "12/25/2012", - "12/25/2013", - "12/25/2014", - "12/25/2015", - "12/26/2016", - "12/25/2017", - "12/25/2018", - "12/25/2019", - "12/25/2020", - "12/24/2021", - "12/26/2022", - "12/25/2023", - "12/25/2024", - "12/25/2025", - "12/25/2026", - "12/24/2027" - ], - "earlyCloses": { - "7/3/2000": "12:00:00", - "7/3/2001": "12:00:00", - "7/5/2002": "12:00:00", - "7/3/2003": "12:00:00", - "7/3/2006": "12:00:00", - "7/3/2007": "12:00:00", - "7/3/2008": "12:00:00", - "7/3/2012": "12:00:00", - "7/3/2013": "12:00:00", - "7/3/2014": "12:00:00", - "7/3/2017": "12:00:00", - "7/3/2018": "12:00:00", - "7/3/2019": "12:00:00", - "7/3/2023": "12:00:00", - "7/3/2024": "12:00:00", - "7/3/2025": "12:00:00", - "11/26/1999": "12:00:00", - "11/24/2000": "12:00:00", - "11/23/2001": "12:00:00", - "11/29/2002": "12:00:00", - "11/28/2003": "12:00:00", - "11/26/2004": "12:00:00", - "11/25/2005": "12:00:00", - "11/24/2006": "12:00:00", - "11/23/2007": "12:00:00", - "11/28/2008": "12:00:00", - "11/27/2009": "12:00:00", - "11/26/2010": "12:00:00", - "11/25/2011": "12:00:00", - "11/23/2012": "12:00:00", - "11/29/2013": "12:00:00", - "11/28/2014": "12:00:00", - "11/27/2015": "12:00:00", - "11/25/2016": "12:00:00", - "11/24/2017": "12:00:00", - "11/23/2018": "12:00:00", - "11/29/2019": "12:00:00", - "11/27/2020": "12:00:00", - "11/26/2021": "12:00:00", - "11/25/2022": "12:00:00", - "11/24/2023": "12:00:00", - "11/29/2024": "12:00:00", - "11/28/2025": "12:00:00", - "11/27/2026": "12:00:00", - "11/26/2027": "12:00:00", - "12/24/2001": "12:00:00", - "12/24/2002": "12:00:00", - "12/24/2003": "12:00:00", - "12/26/2003": "12:00:00", - "12/24/2007": "12:00:00", - "12/24/2008": "12:00:00", - "12/24/2009": "12:00:00", - "12/24/2012": "12:00:00", - "12/24/2013": "12:00:00", - "12/24/2014": "12:00:00", - "12/24/2015": "12:00:00", - "12/24/2017": "12:00:00", - "12/24/2018": "12:00:00", - "12/24/2019": "12:00:00", - "12/24/2020": "12:00:00", - "12/24/2024": "12:00:00", - "12/24/2025": "12:00:00", - "12/24/2026": "12:00:00" - } + "holidays": [], + "earlyCloses": {} }, "Index-usa-RUT": { "dataTimeZone": "America/New_York", From d5f298c235d51fd7e0ffae90339c21da94019445 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Wed, 7 Jan 2026 11:08:40 -0500 Subject: [PATCH 088/103] Add missing Oanda, SGX and Cfd-InteractiveBrokers 2026 holidays to MHDB (#9204) * Add 2026 Oanda holidays * Add 2026 new year holiday SGX * Add Cfd-interactivebrokers 2026 holidays * Remove wrong holidays in Forex-oanda-[*] * Nit change --- Data/market-hours/market-hours-database.json | 33 +++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 11ead53b1174..b56818b7a4e3 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -79106,7 +79106,9 @@ "12/26/2022", "12/31/2022", "1/1/2025", - "4/18/2025" + "4/18/2025", + "12/25/2025", + "1/1/2026" ], "earlyCloses": { "2/15/2018": "12:00:00", @@ -79656,8 +79658,6 @@ "1/1/2021", "1/1/2023", "1/2/2023", - "1/1/2024", - "1/1/2025", "12/25/2010", "12/25/2012", "12/25/2015", @@ -79666,9 +79666,7 @@ "12/25/2022", "12/26/2022", "12/24/2023", - "12/31/2023", - "12/25/2024", - "12/25/2025" + "12/31/2023" ], "earlyCloses": { "12/30/2005": "17:00:00", @@ -79703,9 +79701,10 @@ "1/1/2020": "17:00:00", "12/25/2023": "17:00:00", "1/1/2024": "17:00:00", - "12/25/2024": "17:00:00", - "1/1/2025": "17:00:00", - "12/25/2025": "17:00:00" + "12/25/2024": "17:05:00", + "1/1/2025": "17:05:00", + "12/25/2025": "17:05:00", + "1/1/2026": "17:05:00" } }, "Forex-oanda-GBPNZD": { @@ -88876,6 +88875,7 @@ "1/1/2024", "1/2/2023", "1/1/2025", + "1/1/2026", "1/2/2007", "1/19/1998", "1/18/1999", @@ -88905,6 +88905,7 @@ "1/16/2023", "1/15/2024", "1/20/2025", + "1/19/2026", "2/16/1998", "2/15/1999", "2/21/2000", @@ -88933,6 +88934,7 @@ "2/20/2023", "2/19/2024", "2/17/2025", + "2/16/2026", "4/10/1998", "4/2/1999", "4/21/2000", @@ -88961,6 +88963,7 @@ "4/7/2023", "3/29/2024", "4/18/2025", + "4/3/2026", "5/25/1998", "5/31/1999", "5/29/2000", @@ -88988,11 +88991,13 @@ "5/30/2022", "5/29/2023", "5/27/2024", + "5/25/2026", "6/11/2004", "6/20/2022", "6/19/2023", "6/19/2024", "6/19/2025", + "6/19/2026", "7/3/1998", "7/5/1999", "7/4/2000", @@ -89021,6 +89026,7 @@ "7/4/2023", "7/4/2024", "7/4/2025", + "7/3/2026", "9/7/1998", "9/6/1999", "9/4/2000", @@ -89049,6 +89055,7 @@ "9/4/2023", "9/2/2024", "9/1/2025", + "9/7/2026", "9/11/2001", "9/12/2001", "9/13/2001", @@ -89083,6 +89090,7 @@ "11/23/2023", "11/28/2024", "11/27/2025", + "11/26/2026", "12/05/2018", "12/25/1998", "12/24/1999", @@ -89111,7 +89119,8 @@ "12/26/2022", "12/25/2023", "12/25/2024", - "12/25/2025" + "12/25/2025", + "12/25/2026" ], "earlyCloses": { "7/3/2000": "13:00:00", @@ -89157,6 +89166,7 @@ "11/24/2023": "13:00:00", "11/29/2024": "13:00:00", "11/28/2025": "13:00:00", + "11/27/2026": "13:00:00", "12/24/2001": "13:00:00", "12/24/2002": "13:00:00", "12/24/2003": "13:00:00", @@ -89173,7 +89183,8 @@ "12/24/2019": "13:00:00", "12/24/2020": "13:00:00", "12/24/2024": "13:00:00", - "12/24/2025": "13:00:00" + "12/24/2025": "13:00:00", + "12/24/2026": "13:00:00" } }, "Cfd-interactivebrokers-IBUS500": { From 286353b7637ffe1802b70e3a395a8ebb0a5e33b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Wed, 7 Jan 2026 14:13:19 -0500 Subject: [PATCH 089/103] Remove duplicated dates (#9207) --- Data/market-hours/market-hours-database.json | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index b56818b7a4e3..0f4c1dcaa281 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -81063,7 +81063,6 @@ "4/15/2022", "4/17/2006", "4/17/2017", - "4/17/2017", "4/17/2028", "4/18/2003", "4/18/2014", @@ -81131,7 +81130,6 @@ "5/6/2030", "5/7/2029", "6/5/2017", - "6/5/2017", "8/25/2025", "8/26/2019", "8/26/2024", @@ -83563,7 +83561,6 @@ "4/13/2020", "4/14/2006", "4/14/2017", - "4/14/2017", "4/14/2028", "4/15/2022", "4/17/2006", @@ -84127,10 +84124,8 @@ "2/4/2011", "2/4/2030", "2/5/2019", - "2/5/2019", "2/5/2030", "2/6/2019", - "2/6/2019", "2/6/2027", "2/6/2030", "2/7/2008", @@ -84408,13 +84403,11 @@ "1/1/2021", "1/1/2022", "1/1/2024", - "1/1/2024", "1/1/2025", "1/1/2026", "1/1/2027", "1/1/2028", "1/1/2029", - "1/1/2029", "1/1/2030", "1/10/2022", "1/10/2028", @@ -84441,13 +84434,11 @@ "1/3/2019", "1/3/2020", "1/3/2022", - "1/3/2022", "1/3/2023", "1/3/2024", "1/3/2025", "1/3/2026", "1/3/2028", - "1/3/2028", "1/3/2029", "1/3/2030", "1/4/2021", @@ -84592,13 +84583,11 @@ "5/31/2004", "5/4/2019", "5/4/2020", - "5/4/2020", "5/4/2021", "5/4/2022", "5/4/2023", "5/4/2024", "5/4/2026", - "5/4/2026", "5/4/2027", "5/4/2028", "5/4/2029", @@ -84608,7 +84597,6 @@ "5/5/2022", "5/5/2023", "5/5/2025", - "5/5/2025", "5/5/2026", "5/5/2027", "5/5/2028", @@ -84667,7 +84655,6 @@ "9/23/2026", "9/23/2027", "9/23/2030", - "9/23/2030", "9/24/2029", "9/6/2004" ] @@ -85212,8 +85199,6 @@ "2/19/2015", "2/8/2016", "1/30/2017", - "2/16/2018", - "2/5/2019", "1/27/2020", "4/14/2017", "1/2/2017", @@ -121533,11 +121518,9 @@ "4/12/2004", "5/1/2004", "12/24/2004", - "12/24/2004", "12/25/2004", "12/26/2004", "12/31/2004", - "12/31/2004", "3/25/2005", "3/28/2005", "12/26/2005", From 3ee941f329d93077768577dfd393d2593c0c0a4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Andr=C3=A9s=20Marino=20Rojas?= <47573394+Marinovsky@users.noreply.github.com> Date: Wed, 7 Jan 2026 14:13:28 -0500 Subject: [PATCH 090/103] Remove wrong holidays in MHDB (#9205) Remove wrong holidays in CME group Dairy, Livestock and Lumber products. There was also a wrong holidays in Future-cbot-KE --- Data/market-hours/market-hours-database.json | 39 -------------------- 1 file changed, 39 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 0f4c1dcaa281..507913acf45a 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -3052,7 +3052,6 @@ "12/25/2022", "1/1/2023", "4/7/2023", - "9/4/2023", "1/2/2024", "1/1/2025", "7/4/2025", @@ -39022,19 +39021,14 @@ "7/4/2014", "4/3/2015", "7/3/2015", - "7/4/2017", "11/23/2017", - "7/4/2018", "11/22/2018", - "7/4/2019", "11/28/2019", "7/3/2020", "11/26/2020", "4/2/2021", "11/25/2021", "11/24/2022", - "1/16/2023", - "2/20/2023", "4/7/2023", "11/23/2023", "11/28/2024", @@ -41556,19 +41550,14 @@ "7/4/2014", "4/3/2015", "7/3/2015", - "7/4/2017", "11/23/2017", - "7/4/2018", "11/22/2018", - "7/4/2019", "11/28/2019", "7/3/2020", "11/26/2020", "4/2/2021", "11/25/2021", "11/24/2022", - "1/16/2023", - "2/20/2023", "4/7/2023", "11/23/2023", "11/28/2024", @@ -43860,19 +43849,14 @@ "7/4/2014", "4/3/2015", "7/3/2015", - "7/4/2017", "11/23/2017", - "7/4/2018", "11/22/2018", - "7/4/2019", "11/28/2019", "7/3/2020", "11/26/2020", "4/2/2021", "11/25/2021", "11/24/2022", - "1/16/2023", - "2/20/2023", "4/7/2023", "11/23/2023", "11/28/2024", @@ -44876,19 +44860,14 @@ "7/4/2014", "4/3/2015", "7/3/2015", - "7/4/2017", "11/23/2017", - "7/4/2018", "11/22/2018", - "7/4/2019", "11/28/2019", "7/3/2020", "11/26/2020", "4/2/2021", "11/25/2021", "11/24/2022", - "1/16/2023", - "2/20/2023", "4/7/2023", "11/23/2023", "11/28/2024", @@ -57578,19 +57557,14 @@ "7/4/2014", "4/3/2015", "7/3/2015", - "7/4/2017", "11/23/2017", - "7/4/2018", "11/22/2018", - "7/4/2019", "11/28/2019", "7/3/2020", "11/26/2020", "4/2/2021", "11/25/2021", "11/24/2022", - "1/16/2023", - "2/20/2023", "4/7/2023", "11/23/2023", "11/28/2024", @@ -58021,19 +57995,14 @@ "7/4/2014", "4/3/2015", "7/3/2015", - "7/4/2017", "11/23/2017", - "7/4/2018", "11/22/2018", - "7/4/2019", "11/28/2019", "7/3/2020", "11/26/2020", "4/2/2021", "11/25/2021", "11/24/2022", - "1/16/2023", - "2/20/2023", "4/7/2023", "11/23/2023", "11/28/2024", @@ -73991,8 +73960,6 @@ "7/5/2016": "08:30:00", "9/6/2016": "08:30:00", "11/25/2016": "08:30:00", - "1/16/2017": "08:30:00", - "2/20/2017": "08:30:00", "4/17/2017": "08:30:00", "5/30/2017": "08:30:00", "7/5/2017": "08:30:00", @@ -74283,8 +74250,6 @@ "7/5/2016": "08:30:00", "9/6/2016": "08:30:00", "11/25/2016": "08:30:00", - "1/16/2017": "08:30:00", - "2/20/2017": "08:30:00", "4/17/2017": "08:30:00", "5/30/2017": "08:30:00", "7/5/2017": "08:30:00", @@ -74575,8 +74540,6 @@ "7/5/2016": "08:30:00", "9/6/2016": "08:30:00", "11/25/2016": "08:30:00", - "1/16/2017": "08:30:00", - "2/20/2017": "08:30:00", "4/17/2017": "08:30:00", "5/30/2017": "08:30:00", "7/5/2017": "08:30:00", @@ -78518,8 +78481,6 @@ "7/5/2016": "09:00:00", "9/6/2016": "09:00:00", "11/25/2016": "09:00:00", - "1/16/2017": "09:00:00", - "2/20/2017": "09:00:00", "4/17/2017": "09:00:00", "5/30/2017": "09:00:00", "7/5/2017": "09:00:00", From 8196d0b55748761fa4a652033990c83e9b0103f4 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Fri, 9 Jan 2026 13:43:46 -0500 Subject: [PATCH 091/103] HistoryRequest parameters now defaults to the security configuration (#9209) * Fix HistoryRequest DataMappingMode default to use security configuration * Solve review comments * Make HistoryRequest inherit existing subscription configuration values generically * Exclude any class that inherits from BaseChainUniverseData * Reuse existing filter for user configuration * Solve review comments * Normalize DataMappingMode * Minor fix --- Algorithm/QCAlgorithm.History.cs | 26 +++++--- Tests/Algorithm/AlgorithmHistoryTests.cs | 83 ++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 9 deletions(-) diff --git a/Algorithm/QCAlgorithm.History.cs b/Algorithm/QCAlgorithm.History.cs index 7ab90facb8af..41caa59528cc 100644 --- a/Algorithm/QCAlgorithm.History.cs +++ b/Algorithm/QCAlgorithm.History.cs @@ -1283,6 +1283,15 @@ private IEnumerable GetMatchingSubscriptions(Symbol symb } else { + // let's try to respect already added user settings, even if resolution/type don't match, like Tick vs Bars + var userConfigIfAny = subscriptions.FirstOrDefault(x => LeanData.IsCommonLeanDataType(x.Type) && !x.IsInternalFeed); + + // Inherit values from existing subscriptions or use defaults + var extendedMarketHours = userConfigIfAny?.ExtendedMarketHours ?? UniverseSettings.ExtendedMarketHours; + var dataNormalizationMode = userConfigIfAny?.DataNormalizationMode ?? UniverseSettings.GetUniverseNormalizationModeOrDefault(symbol.SecurityType); + var dataMappingMode = userConfigIfAny?.DataMappingMode ?? UniverseSettings.GetUniverseMappingModeOrDefault(symbol.SecurityType, symbol.ID.Market); + var contractDepthOffset = userConfigIfAny?.ContractDepthOffset ?? (uint)Math.Abs(UniverseSettings.ContractDepthOffset); + // If type was specified and not a lean data type and also not abstract, we create a new subscription if (type != null && !LeanData.IsCommonLeanDataType(type) && !type.IsAbstract) { @@ -1306,17 +1315,16 @@ private IEnumerable GetMatchingSubscriptions(Symbol symb entry.DataTimeZone, entry.ExchangeHours.TimeZone, UniverseSettings.FillForward, - UniverseSettings.ExtendedMarketHours, + extendedMarketHours, true, isCustom, LeanData.GetCommonTickTypeForCommonDataTypes(dataType, symbol.SecurityType), true, - UniverseSettings.GetUniverseNormalizationModeOrDefault(symbol.SecurityType))}; + dataNormalizationMode, + dataMappingMode, + contractDepthOffset)}; } - // let's try to respect already added user settings, even if resolution/type don't match, like Tick vs Bars - var userConfigIfAny = subscriptions.FirstOrDefault(x => LeanData.IsCommonLeanDataType(x.Type) && !x.IsInternalFeed); - var res = GetResolution(symbol, resolution, type); return SubscriptionManager .LookupSubscriptionConfigDataTypes(symbol.SecurityType, res, @@ -1337,14 +1345,14 @@ private IEnumerable GetMatchingSubscriptions(Symbol symb entry.DataTimeZone, entry.ExchangeHours.TimeZone, UniverseSettings.FillForward, - userConfigIfAny?.ExtendedMarketHours ?? UniverseSettings.ExtendedMarketHours, + extendedMarketHours, true, false, x.Item2, true, - userConfigIfAny?.DataNormalizationMode ?? UniverseSettings.GetUniverseNormalizationModeOrDefault(symbol.SecurityType), - userConfigIfAny?.DataMappingMode ?? UniverseSettings.GetUniverseMappingModeOrDefault(symbol.SecurityType, symbol.ID.Market), - userConfigIfAny?.ContractDepthOffset ?? (uint)Math.Abs(UniverseSettings.ContractDepthOffset)); + dataNormalizationMode, + dataMappingMode, + contractDepthOffset); }) // lets make sure to respect the order of the data types, if used on a history request will affect outcome when using pushthrough for example .OrderByDescending(config => GetTickTypeOrder(config.SecurityType, config.TickType)); diff --git a/Tests/Algorithm/AlgorithmHistoryTests.cs b/Tests/Algorithm/AlgorithmHistoryTests.cs index 68ff1646e18c..72e9fac5ec4d 100644 --- a/Tests/Algorithm/AlgorithmHistoryTests.cs +++ b/Tests/Algorithm/AlgorithmHistoryTests.cs @@ -3968,6 +3968,89 @@ public void DailyFuturesHistoryDoesNotIncludeSundaysAndReturnsCorrectSliceCountF } } + [TestCase(false)] + [TestCase(true)] + public void HistoryRequestUsesSecurityConfigOrExplicitValues(bool explicitParameters) + { + var start = new DateTime(2013, 10, 28); + var algorithm = GetAlgorithm(start); + var future = algorithm.AddFuture( + Futures.Indices.SP500EMini, + dataNormalizationMode: DataNormalizationMode.BackwardsRatio, + dataMappingMode: DataMappingMode.LastTradingDay, + contractDepthOffset: 0, + extendedMarketHours: true); + + var customTestHistoryProvider = new CustomTestHistoryProvider(); + algorithm.SetHistoryProvider(customTestHistoryProvider); + algorithm.HistoryProvider.Initialize(new HistoryProviderInitializeParameters( + null, + null, + _dataProvider, + _cacheProvider, + _mapFileProvider, + _factorFileProvider, + null, + false, + new DataPermissionManager(), + algorithm.ObjectStore, + algorithm.Settings)); + + List history; + + if (!explicitParameters) + { + history = algorithm.History( + future.Symbol, + new DateTime(2007, 1, 1), + new DateTime(2012, 1, 1)).ToList(); + } + else + { + history = algorithm.History( + future.Symbol, + new DateTime(2007, 1, 1), + new DateTime(2012, 1, 1), + dataNormalizationMode: DataNormalizationMode.Raw, + dataMappingMode: DataMappingMode.OpenInterest, + contractDepthOffset: 0, + extendedMarketHours: false).ToList(); + } + + Assert.AreEqual(1, customTestHistoryProvider.HistoryRequests.Count); + Assert.Greater(history.Count, 0); + + var request = customTestHistoryProvider.HistoryRequests[0]; + + if (!explicitParameters) + { + // Without explicit parameters: uses values from security configuration + Assert.AreEqual(DataNormalizationMode.BackwardsRatio, request.DataNormalizationMode); + Assert.AreEqual(DataMappingMode.LastTradingDay, request.DataMappingMode); + Assert.AreEqual(true, request.IncludeExtendedMarketHours); + Assert.AreEqual(0, request.ContractDepthOffset); + } + else + { + // With explicit parameters: uses values from history request + Assert.AreEqual(DataNormalizationMode.Raw, request.DataNormalizationMode); + Assert.AreEqual(DataMappingMode.OpenInterest, request.DataMappingMode); + Assert.AreEqual(false, request.IncludeExtendedMarketHours); + Assert.AreEqual(0, request.ContractDepthOffset); + } + } + + private class CustomTestHistoryProvider : SubscriptionDataReaderHistoryProvider + { + public List HistoryRequests { get; } = new List(); + + public override IEnumerable GetHistory(IEnumerable requests, DateTimeZone sliceTimeZone) + { + HistoryRequests.AddRange(requests); + return base.GetHistory(requests, sliceTimeZone); + } + } + public class CustomFundamentalTestData : BaseData { private static DateTime _currentDate; From c99a9dab3263c7bc906d1e5f1ad82fca9ac16d34 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Fri, 9 Jan 2026 14:44:29 -0400 Subject: [PATCH 092/103] Update CNH future quote currency (#9213) --- Data/symbol-properties/symbol-properties-database.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Data/symbol-properties/symbol-properties-database.csv b/Data/symbol-properties/symbol-properties-database.csv index 08175396faa9..ef8d02d02d67 100644 --- a/Data/symbol-properties/symbol-properties-database.csv +++ b/Data/symbol-properties/symbol-properties-database.csv @@ -253,7 +253,7 @@ cme,ANE,future,Australian Dollar/New Zealand Dollar Futures,NZD,200000.0,0.0001, cme,BIO,future,E-mini Nasdaq-100 Biotechnology Index Futures,USD,25.0,0.5,1.0 cme,BTC,future,Bitcoin Futures,USD,5.0,5.0,1.0 cme,CJY,future,Canadian Dollar/Japanese Yen Futures,JPY,200000.0,0.01,1.0 -cme,CNH,future,Standard-Size USD/Offshore RMB (CNH) Futures,CNY,100000.0,0.0001,1.0 +cme,CNH,future,Standard-Size USD/Offshore RMB (CNH) Futures,CNH,100000.0,0.0001,1.0 cme,E3G,future,E-mini FTSE 100 GBP Futures,GBP,500.0,0.05,1.0 cme,E7,future,E-mini Euro FX Futures,USD,62500.0,0.0001,1.0 cme,EAD,future,Euro/Australian Dollar Futures,AUD,125000.0,0.0001,1.0 From d702587ad88030eea679a8a41e246a23d273c974 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Fri, 9 Jan 2026 17:07:26 -0400 Subject: [PATCH 093/103] Fix SecurityIdentifier properties lazy initialization (#9214) --- Common/SecurityIdentifier.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/SecurityIdentifier.cs b/Common/SecurityIdentifier.cs index dad234444762..629f8ac92c0a 100644 --- a/Common/SecurityIdentifier.cs +++ b/Common/SecurityIdentifier.cs @@ -46,7 +46,7 @@ public class SecurityIdentifier : IEquatable, IComparable TypeMapping = new(); private static readonly Dictionary SecurityIdentifierCache = new(); private static readonly char[] InvalidCharacters = {'|', ' '}; - private static readonly Lazy MapFileProvider = new(Composer.Instance.GetPart()); + private static readonly Lazy MapFileProvider = new(Composer.Instance.GetPart); /// /// Gets an instance of that is empty, that is, one with no symbol specified From 75d5cbcf2af7bea84e4ebfeae3e10c272695fa25 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:50:01 -0500 Subject: [PATCH 094/103] Fix: RandomDataGenerator crashes when algorithm is null (#9211) * Fix NullReferenceException in SecurityService * Simplify the unit test * Add unit test for RandomDataGenerator * Improve unit test name * Solve review comments --- Common/Securities/SecurityService.cs | 2 +- .../Common/Securities/SecurityServiceTests.cs | 36 ++++++- .../RandomDataGeneratorTests.cs | 97 +++++++++++++++++++ 3 files changed, 133 insertions(+), 2 deletions(-) diff --git a/Common/Securities/SecurityService.cs b/Common/Securities/SecurityService.cs index aab216a7f11b..1cfd4e77cc7a 100644 --- a/Common/Securities/SecurityService.cs +++ b/Common/Securities/SecurityService.cs @@ -343,7 +343,7 @@ private void InitializeSecurity(bool initializeSecurity, Security security, bool { if (initializeSecurity && !security.IsInitialized) { - if (seedSecurity && _algorithm.Settings.SeedInitialPrices) + if (seedSecurity && _algorithm != null && _algorithm.Settings.SeedInitialPrices) { AlgorithmUtils.SeedSecurities([security], _algorithm); } diff --git a/Tests/Common/Securities/SecurityServiceTests.cs b/Tests/Common/Securities/SecurityServiceTests.cs index 5e8eb8019b7c..94625b7ac20b 100644 --- a/Tests/Common/Securities/SecurityServiceTests.cs +++ b/Tests/Common/Securities/SecurityServiceTests.cs @@ -19,6 +19,7 @@ using Moq; using NUnit.Framework; using QuantConnect.Algorithm.CSharp; +using QuantConnect.Configuration; using QuantConnect.Data; using QuantConnect.Data.Auxiliary; using QuantConnect.Data.Market; @@ -26,6 +27,8 @@ using QuantConnect.Interfaces; using QuantConnect.Securities; using QuantConnect.Tests.Engine.DataFeeds; +using QuantConnect.ToolBox.RandomDataGenerator; +using QuantConnect.Util; namespace QuantConnect.Tests.Common.Securities { @@ -216,7 +219,7 @@ public void CreatesEquityOptionWithContractMultiplierEqualsToContractUnitOfTrade var equityOptionSecurity = (QuantConnect.Securities.Option.Option)_securityService.CreateSecurity(equityOption, configs, 1.0m); Assert.AreEqual(100, equityOptionSecurity.ContractMultiplier); - Assert.AreEqual(100,equityOptionSecurity.ContractUnitOfTrade); + Assert.AreEqual(100, equityOptionSecurity.ContractUnitOfTrade); } [Test] @@ -277,5 +280,36 @@ public void AddPrimaryExchangeToSecurityObject() Assert.AreEqual(equity.Subscriptions.First().TickType, TickType.Trade); Assert.AreEqual(((QuantConnect.Securities.Equity.Equity)equity).PrimaryExchange, Exchange.NASDAQ); } + + [Test] + public void CreateSecurityDoesNotThrowWithNullAlgorithm() + { + var startDate = new DateTime(2024, 1, 1); + var securityManager = new SecurityManager(new TimeKeeper(startDate, new[] { TimeZones.Utc })); + + var securityService = new SecurityService( + new CashBook(), + MarketHoursDatabase.FromDataFolder(), + SymbolPropertiesDatabase.FromDataFolder(), + new SecurityInitializerProvider(new FuncSecurityInitializer(security => { })), + RegisteredSecurityDataTypesProvider.Null, + new SecurityCacheProvider( + new SecurityPortfolioManager(securityManager, + new SecurityTransactionManager(null, securityManager), + new AlgorithmSettings())), + new MapFilePrimaryExchangeProvider( + Composer.Instance.GetExportedValueByTypeName( + Config.Get("map-file-provider", "LocalDiskMapFileProvider"))), + algorithm: null + ); + + securityManager.SetSecurityService(securityService); + + Assert.DoesNotThrow(() => + { + var symbol = Symbol.Create("TEST", SecurityType.Equity, Market.USA); + var security = securityManager.CreateSecurity(symbol, new List(), underlying: null); + }); + } } } diff --git a/Tests/ToolBox/RandomDataGenerator/RandomDataGeneratorTests.cs b/Tests/ToolBox/RandomDataGenerator/RandomDataGeneratorTests.cs index 099fe2b1cf92..3cb3559c0a1e 100644 --- a/Tests/ToolBox/RandomDataGenerator/RandomDataGeneratorTests.cs +++ b/Tests/ToolBox/RandomDataGenerator/RandomDataGeneratorTests.cs @@ -29,6 +29,7 @@ using static QuantConnect.ToolBox.RandomDataGenerator.RandomDataGenerator; using QuantConnect.Algorithm; using System.Linq; +using System.IO; namespace QuantConnect.Tests.ToolBox.RandomDataGenerator { @@ -162,6 +163,102 @@ public void GetProgressAsPercentageShouldLogWhenProgressExceedsThreshold(Resolut Assert.IsTrue(logs.All(p => p >= 0 && p <= 100)); } + [Test] + public void RandomDataGeneratorCompletesSuccessfully() + { + var tempFolder = Path.Combine(Path.GetTempPath(), $"LeanTest_{Guid.NewGuid()}"); + var originalDataFolder = Config.Get("data-folder"); + try + { + Directory.CreateDirectory(tempFolder); + Config.Set("data-folder", tempFolder); + Globals.Reset(); + + var hourPath = Path.Combine(tempFolder, "equity", "usa", "hour"); + var dailyPath = Path.Combine(tempFolder, "equity", "usa", "daily"); + var factorFilesPath = Path.Combine(tempFolder, "equity", "usa", "factor_files"); + var mapFilesPath = Path.Combine(tempFolder, "equity", "usa", "map_files"); + + // Create the required folders + Directory.CreateDirectory(hourPath); + Directory.CreateDirectory(dailyPath); + Directory.CreateDirectory(factorFilesPath); + Directory.CreateDirectory(mapFilesPath); + + var settings = new RandomDataGeneratorSettings + { + Start = new DateTime(2024, 1, 1, 9, 30, 0), + End = new DateTime(2024, 1, 2, 16, 0, 0), + SymbolCount = 1, + Market = "usa", + SecurityType = SecurityType.Equity, + Resolution = Resolution.Hour, + DataDensity = DataDensity.Dense, + IncludeCoarse = false, + QuoteTradeRatio = 1.0, + RandomSeed = 123456, + HasDividendsPercentage = 0, + HasSplitsPercentage = 0, + HasIpoPercentage = 0, + HasRenamePercentage = 0, + Tickers = new List() { "AAPL" } + }; + + var generator = GetGenerator(settings); + + Assert.DoesNotThrow(() => generator.Run()); + + var allFiles = Directory.GetFiles(tempFolder, "*", SearchOption.AllDirectories); + Assert.Greater(allFiles.Length, 0); + + var hourFiles = Directory.GetFiles(hourPath, "*.zip"); + Assert.Greater(hourFiles.Length, 0); + } + finally + { + Config.Set("data-folder", originalDataFolder); + Globals.Reset(); + Directory.Delete(tempFolder, true); + } + } + + private static QuantConnect.ToolBox.RandomDataGenerator.RandomDataGenerator GetGenerator(RandomDataGeneratorSettings settings) + { + var securityManager = new SecurityManager(new TimeKeeper(settings.Start, new[] { TimeZones.Utc })); + + var securityService = new SecurityService( + new CashBook(), + MarketHoursDatabase.FromDataFolder(), + SymbolPropertiesDatabase.FromDataFolder(), + new SecurityInitializerProvider(new FuncSecurityInitializer(security => + { + // init price + security.SetMarketPrice(new Tick(settings.Start, security.Symbol, 100, 100)); + security.SetMarketPrice(new OpenInterest(settings.Start, security.Symbol, 10000)); + + // from settings + security.VolatilityModel = new StandardDeviationOfReturnsVolatilityModel(settings.VolatilityModelResolution); + + // from settings + if (security is Option option) + { + option.PriceModel = OptionPriceModels.Create(settings.OptionPriceEngineName, + _interestRateProvider.GetRiskFreeRate(settings.Start, settings.End)); + } + })), + RegisteredSecurityDataTypesProvider.Null, + new SecurityCacheProvider( + new SecurityPortfolioManager(securityManager, new SecurityTransactionManager(null, securityManager), new AlgorithmSettings())), + new MapFilePrimaryExchangeProvider(Composer.Instance.GetExportedValueByTypeName(Config.Get("map-file-provider", "LocalDiskMapFileProvider"))) + ); + + securityManager.SetSecurityService(securityService); + + var generator = new QuantConnect.ToolBox.RandomDataGenerator.RandomDataGenerator(); + generator.Init(settings, securityManager); + return generator; + } + private static readonly IRiskFreeInterestRateModel _interestRateProvider = new InterestRateProvider(); private static SecurityService GetSecurityService(RandomDataGeneratorSettings settings, SecurityManager securityManager) From 48fd4eccffe6bf49d3592c71705813dcaf0c1f24 Mon Sep 17 00:00:00 2001 From: Roman Yavnikov <45608740+Romazes@users.noreply.github.com> Date: Tue, 13 Jan 2026 15:00:48 +0200 Subject: [PATCH 095/103] Feat: override ToString() in several Event Args (#9217) * feat: override ToString() in several Event Args * fix: typo --- Common/Brokerages/DelistingNotificationEventArgs.cs | 8 ++++++++ .../Brokerages/NewBrokerageOrderNotificationEventArgs.cs | 8 ++++++++ Engine/TransactionHandlers/BrokerageTransactionHandler.cs | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Common/Brokerages/DelistingNotificationEventArgs.cs b/Common/Brokerages/DelistingNotificationEventArgs.cs index 118a346b64e5..fbcfbaffbccf 100644 --- a/Common/Brokerages/DelistingNotificationEventArgs.cs +++ b/Common/Brokerages/DelistingNotificationEventArgs.cs @@ -35,5 +35,13 @@ public DelistingNotificationEventArgs(Symbol symbol) { Symbol = symbol; } + + /// + /// Returns a string describing the delisting notification. + /// + public override string ToString() + { + return $"Symbol: {Symbol}"; + } } } diff --git a/Common/Brokerages/NewBrokerageOrderNotificationEventArgs.cs b/Common/Brokerages/NewBrokerageOrderNotificationEventArgs.cs index 8965fd8bd576..f77212acde1f 100644 --- a/Common/Brokerages/NewBrokerageOrderNotificationEventArgs.cs +++ b/Common/Brokerages/NewBrokerageOrderNotificationEventArgs.cs @@ -35,5 +35,13 @@ public NewBrokerageOrderNotificationEventArgs(Order order) { Order = order; } + + /// + /// Returns a string describing the new brokerage order notification. + /// + override public string ToString() + { + return Order.ToString(); + } } } diff --git a/Engine/TransactionHandlers/BrokerageTransactionHandler.cs b/Engine/TransactionHandlers/BrokerageTransactionHandler.cs index 25101d47ea50..56ba6b48b31e 100644 --- a/Engine/TransactionHandlers/BrokerageTransactionHandler.cs +++ b/Engine/TransactionHandlers/BrokerageTransactionHandler.cs @@ -1535,7 +1535,7 @@ private void HandleDelistingNotification(DelistingNotificationEventArgs e) { Log.Trace( $"BrokerageTransactionHandler.HandleDelistingNotification(): UtcTime: {CurrentTimeUtc} clearing position for delisted holding: " + - $"Symbol: {e.Symbol.Value}, " + + $"{e}, " + $"Quantity: {security.Holdings.Quantity}"); } From 26584c2fd0105cae4872ff161af5430de0150cab Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Tue, 13 Jan 2026 12:13:37 -0400 Subject: [PATCH 096/103] Stop and delete unused threads in tests (#9219) --- .../Execution/ImmediateExecutionModelTests.cs | 4 + .../Execution/SpreadExecutionModelTests.cs | 2 + .../StandardDeviationExecutionModelTests.cs | 1 + ...WeightedAveragePriceExecutionModelTests.cs | 1 + Tests/Brokerages/Paper/PaperBrokerageTests.cs | 49 +- .../Brokerages/DefaultBrokerageModelTests.cs | 140 ++-- .../Fills/PartialMarketFillModelTests.cs | 14 +- Tests/Common/Orders/OrderSizingTests.cs | 62 +- ...FutureOptionMarginBuyingPowerModelTests.cs | 51 +- .../Options/OptionPortfolioModelTests.cs | 116 +-- .../SecurityPortfolioManagerTests.cs | 1 + Tests/Engine/AlgorithmManagerTests.cs | 1 + .../BacktestingTransactionHandlerTests.cs | 464 ++++++----- .../BrokerageTransactionHandlerTests.cs | 749 +++++++++--------- .../Engine/DataFeeds/BaseDataExchangeTests.cs | 60 +- .../LiveTradingRealTimeHandlerTests.cs | 61 +- .../Results/LiveTradingResultHandlerTests.cs | 69 +- 17 files changed, 998 insertions(+), 847 deletions(-) diff --git a/Tests/Algorithm/Framework/Execution/ImmediateExecutionModelTests.cs b/Tests/Algorithm/Framework/Execution/ImmediateExecutionModelTests.cs index 6d657b6d2d62..6068424dae31 100644 --- a/Tests/Algorithm/Framework/Execution/ImmediateExecutionModelTests.cs +++ b/Tests/Algorithm/Framework/Execution/ImmediateExecutionModelTests.cs @@ -130,6 +130,7 @@ public void OrdersAreSubmittedImmediatelyForTargetsToExecute( } finally { + orderProcessor.Exit(); brokerage.Dispose(); } } @@ -174,6 +175,7 @@ public void PartiallyFilledOrdersAreTakenIntoAccount(Language language) } finally { + orderProcessor.Exit(); brokerage.Dispose(); } } @@ -221,6 +223,7 @@ public void NonFilledAsyncOrdersAreTakenIntoAccount(Language language) } finally { + orderProcessor.Exit(); brokerage.Dispose(); } } @@ -256,6 +259,7 @@ public void LotSizeIsRespected(Language language, int side) } finally { + orderProcessor.Exit(); brokerage.Dispose(); } } diff --git a/Tests/Algorithm/Framework/Execution/SpreadExecutionModelTests.cs b/Tests/Algorithm/Framework/Execution/SpreadExecutionModelTests.cs index 56c4ed10ef72..649e75acdf7b 100644 --- a/Tests/Algorithm/Framework/Execution/SpreadExecutionModelTests.cs +++ b/Tests/Algorithm/Framework/Execution/SpreadExecutionModelTests.cs @@ -120,6 +120,7 @@ public void OrdersAreSubmittedWhenRequiredForTargetsToExecute( } finally { + orderProcessor.Exit(); brokerage.Dispose(); } } @@ -174,6 +175,7 @@ public void FillsOnTradesOnlyRespectingExchangeOpen(Language language, int expec } finally { + orderProcessor.Exit(); brokerage.Dispose(); } } diff --git a/Tests/Algorithm/Framework/Execution/StandardDeviationExecutionModelTests.cs b/Tests/Algorithm/Framework/Execution/StandardDeviationExecutionModelTests.cs index e12e7a90e4c1..a095f6259346 100644 --- a/Tests/Algorithm/Framework/Execution/StandardDeviationExecutionModelTests.cs +++ b/Tests/Algorithm/Framework/Execution/StandardDeviationExecutionModelTests.cs @@ -132,6 +132,7 @@ public void OrdersAreSubmittedWhenRequiredForTargetsToExecute( } finally { + orderProcessor.Exit(); brokerage?.Dispose(); } } diff --git a/Tests/Algorithm/Framework/Execution/VolumeWeightedAveragePriceExecutionModelTests.cs b/Tests/Algorithm/Framework/Execution/VolumeWeightedAveragePriceExecutionModelTests.cs index 3a477e337c04..3b49a8a755cb 100644 --- a/Tests/Algorithm/Framework/Execution/VolumeWeightedAveragePriceExecutionModelTests.cs +++ b/Tests/Algorithm/Framework/Execution/VolumeWeightedAveragePriceExecutionModelTests.cs @@ -141,6 +141,7 @@ public void OrdersAreSubmittedWhenRequiredForTargetsToExecute( } finally { + orderProcessor.Exit(); brokerage?.Dispose(); } } diff --git a/Tests/Brokerages/Paper/PaperBrokerageTests.cs b/Tests/Brokerages/Paper/PaperBrokerageTests.cs index b28653035738..2087d01ac486 100644 --- a/Tests/Brokerages/Paper/PaperBrokerageTests.cs +++ b/Tests/Brokerages/Paper/PaperBrokerageTests.cs @@ -131,30 +131,35 @@ public void AppliesDividendsOnce() results.Initialize(new(job, eventMessagingHandler, api, transactions, null)); results.SetAlgorithm(algorithm, algorithm.Portfolio.TotalPortfolioValue); transactions.Initialize(algorithm, brokerage, results); - var realTime = new BacktestingRealTimeHandler(); - using var nullLeanManager = new AlgorithmManagerTests.NullLeanManager(); - using var tokenSource = new CancellationTokenSource(); - // run algorithm manager - manager.Run(job, - algorithm, - synchronizer, - transactions, - results, - realTime, - nullLeanManager, - tokenSource, - new() - ); - - var postDividendCash = algorithm.Portfolio.CashBook[Currencies.USD].Amount; - - realTime.Exit(); - results.Exit(); - Assert.AreEqual(initializedCash + dividend.Distribution, postDividendCash); - - transactions.Exit(); + try + { + using var nullLeanManager = new AlgorithmManagerTests.NullLeanManager(); + + using var tokenSource = new CancellationTokenSource(); + // run algorithm manager + manager.Run(job, + algorithm, + synchronizer, + transactions, + results, + realTime, + nullLeanManager, + tokenSource, + new() + ); + + var postDividendCash = algorithm.Portfolio.CashBook[Currencies.USD].Amount; + + Assert.AreEqual(initializedCash + dividend.Distribution, postDividendCash); + } + finally + { + realTime.Exit(); + results.Exit(); + transactions.Exit(); + } } [Test] diff --git a/Tests/Common/Brokerages/DefaultBrokerageModelTests.cs b/Tests/Common/Brokerages/DefaultBrokerageModelTests.cs index 09c0f1c431a2..d3434b7ad1f6 100644 --- a/Tests/Common/Brokerages/DefaultBrokerageModelTests.cs +++ b/Tests/Common/Brokerages/DefaultBrokerageModelTests.cs @@ -98,61 +98,68 @@ public void ApplySplitWorksAsExpected() using var backtestingBrokerage = new BacktestingBrokerage(algorithm); transactionHandler.Initialize(algorithm, backtestingBrokerage, new TestResultHandler(Console.WriteLine)); - algorithm.Transactions.SetOrderProcessor(transactionHandler); - algorithm.AddEquity("IBM"); - var tickets = new List(); - foreach (var type in orderTypes) + try { - SubmitOrderRequest orderRequest = null; - switch (type) + algorithm.Transactions.SetOrderProcessor(transactionHandler); + algorithm.AddEquity("IBM"); + var tickets = new List(); + foreach (var type in orderTypes) { - case OrderType.Limit: - orderRequest = new SubmitOrderRequest(OrderType.Limit, SecurityType.Equity, Symbols.IBM, 100, 0, limitPrice: 8, 0, - DateTime.UtcNow, ""); - break; - case OrderType.StopLimit: - orderRequest = new SubmitOrderRequest(OrderType.StopLimit, SecurityType.Equity, Symbols.IBM, 100, stopPrice: 10, 0, 0, - DateTime.UtcNow, ""); - break; - case OrderType.LimitIfTouched: - orderRequest = new SubmitOrderRequest(OrderType.LimitIfTouched, SecurityType.Equity, Symbols.IBM, 100, 0, limitPrice: 14, - triggerPrice: 12, DateTime.UtcNow, ""); - break; - case OrderType.TrailingStop: - orderRequest = new SubmitOrderRequest(OrderType.TrailingStop, SecurityType.Equity, Symbols.IBM, 100, stopPrice: 10, 0, 0, - trailingAmount: 0.5m, trailingAsPercentage: false, DateTime.UtcNow, ""); - break; + SubmitOrderRequest orderRequest = null; + switch (type) + { + case OrderType.Limit: + orderRequest = new SubmitOrderRequest(OrderType.Limit, SecurityType.Equity, Symbols.IBM, 100, 0, limitPrice: 8, 0, + DateTime.UtcNow, ""); + break; + case OrderType.StopLimit: + orderRequest = new SubmitOrderRequest(OrderType.StopLimit, SecurityType.Equity, Symbols.IBM, 100, stopPrice: 10, 0, 0, + DateTime.UtcNow, ""); + break; + case OrderType.LimitIfTouched: + orderRequest = new SubmitOrderRequest(OrderType.LimitIfTouched, SecurityType.Equity, Symbols.IBM, 100, 0, limitPrice: 14, + triggerPrice: 12, DateTime.UtcNow, ""); + break; + case OrderType.TrailingStop: + orderRequest = new SubmitOrderRequest(OrderType.TrailingStop, SecurityType.Equity, Symbols.IBM, 100, stopPrice: 10, 0, 0, + trailingAmount: 0.5m, trailingAsPercentage: false, DateTime.UtcNow, ""); + break; + } + algorithm.Transactions.AddOrder(orderRequest); + var ticket = new OrderTicket(algorithm.Transactions, orderRequest); + tickets.Add(ticket); } - algorithm.Transactions.AddOrder(orderRequest); - var ticket = new OrderTicket(algorithm.Transactions, orderRequest); - tickets.Add(ticket); - } - var split = new Split(Symbols.IBM, DateTime.UtcNow, 1, 0.5m, SplitType.SplitOccurred); - _defaultBrokerageModel.ApplySplit(tickets, split); - transactionHandler.ProcessSynchronousEvents(); - foreach (var order in algorithm.Transactions.GetOrders()) - { - Assert.AreEqual(200, order.Quantity); - var orderType = order.Type; - switch (orderType) + var split = new Split(Symbols.IBM, DateTime.UtcNow, 1, 0.5m, SplitType.SplitOccurred); + _defaultBrokerageModel.ApplySplit(tickets, split); + transactionHandler.ProcessSynchronousEvents(); + foreach (var order in algorithm.Transactions.GetOrders()) { - case OrderType.Limit: - Assert.AreEqual(4, order.GetPropertyValue("LimitPrice")); - break; - case OrderType.StopLimit: - Assert.AreEqual(5, order.GetPropertyValue("StopPrice")); - break; - case OrderType.LimitIfTouched: - Assert.AreEqual(6, order.GetPropertyValue("TriggerPrice")); - Assert.AreEqual(7, order.GetPropertyValue("LimitPrice")); - break; - case OrderType.TrailingStop: - Assert.AreEqual(5, order.GetPropertyValue("StopPrice")); - Assert.AreEqual(0.25m, order.GetPropertyValue("TrailingAmount")); - break; + Assert.AreEqual(200, order.Quantity); + var orderType = order.Type; + switch (orderType) + { + case OrderType.Limit: + Assert.AreEqual(4, order.GetPropertyValue("LimitPrice")); + break; + case OrderType.StopLimit: + Assert.AreEqual(5, order.GetPropertyValue("StopPrice")); + break; + case OrderType.LimitIfTouched: + Assert.AreEqual(6, order.GetPropertyValue("TriggerPrice")); + Assert.AreEqual(7, order.GetPropertyValue("LimitPrice")); + break; + case OrderType.TrailingStop: + Assert.AreEqual(5, order.GetPropertyValue("StopPrice")); + Assert.AreEqual(0.25m, order.GetPropertyValue("TrailingAmount")); + break; + } } } + finally + { + transactionHandler.Exit(); + } } @@ -167,25 +174,32 @@ public void AppliesSplitOnlyWhenTrailingStopOrderTrailingAmountIsNotPercentage([ using var backtestingBrokerage = new BacktestingBrokerage(algorithm); transactionHandler.Initialize(algorithm, backtestingBrokerage, new TestResultHandler(Console.WriteLine)); - algorithm.Transactions.SetOrderProcessor(transactionHandler); - algorithm.AddEquity("IBM"); + try + { + algorithm.Transactions.SetOrderProcessor(transactionHandler); + algorithm.AddEquity("IBM"); - var tickets = new List(); - var orderTime = new DateTime(2023, 07, 21, 12, 0, 0); - var orderRequest = new SubmitOrderRequest(OrderType.TrailingStop, SecurityType.Equity, Symbols.IBM, 100, stopPrice: 10, 0, 0, - trailingAmount: 0.1m, trailingAsPercentage, orderTime, ""); - algorithm.Transactions.AddOrder(orderRequest); - var ticket = new OrderTicket(algorithm.Transactions, orderRequest); - tickets.Add(ticket); + var tickets = new List(); + var orderTime = new DateTime(2023, 07, 21, 12, 0, 0); + var orderRequest = new SubmitOrderRequest(OrderType.TrailingStop, SecurityType.Equity, Symbols.IBM, 100, stopPrice: 10, 0, 0, + trailingAmount: 0.1m, trailingAsPercentage, orderTime, ""); + algorithm.Transactions.AddOrder(orderRequest); + var ticket = new OrderTicket(algorithm.Transactions, orderRequest); + tickets.Add(ticket); - var split = new Split(Symbols.IBM, orderTime, 1, 0.5m, SplitType.SplitOccurred); - _defaultBrokerageModel.ApplySplit(tickets, split); - transactionHandler.ProcessSynchronousEvents(); + var split = new Split(Symbols.IBM, orderTime, 1, 0.5m, SplitType.SplitOccurred); + _defaultBrokerageModel.ApplySplit(tickets, split); + transactionHandler.ProcessSynchronousEvents(); - var order = algorithm.Transactions.GetOrders().Single(); + var order = algorithm.Transactions.GetOrders().Single(); - Assert.AreEqual(5, order.GetPropertyValue("StopPrice", Flags.Instance | Flags.Public)); - Assert.AreEqual(trailingAsPercentage ? 0.1m : 0.05m, order.GetPropertyValue("TrailingAmount")); + Assert.AreEqual(5, order.GetPropertyValue("StopPrice", Flags.Instance | Flags.Public)); + Assert.AreEqual(trailingAsPercentage ? 0.1m : 0.05m, order.GetPropertyValue("TrailingAmount")); + } + finally + { + transactionHandler.Exit(); + } } diff --git a/Tests/Common/Orders/Fills/PartialMarketFillModelTests.cs b/Tests/Common/Orders/Fills/PartialMarketFillModelTests.cs index 1754eed43b8b..193582824178 100644 --- a/Tests/Common/Orders/Fills/PartialMarketFillModelTests.cs +++ b/Tests/Common/Orders/Fills/PartialMarketFillModelTests.cs @@ -32,6 +32,14 @@ namespace QuantConnect.Tests.Common.Orders.Fills [TestFixture, Ignore("TODO: fix me")] public class PartialMarketFillModelTests { + private static BacktestingTransactionHandler _transactionHandler; + + [TearDown] + public void TearDown() + { + _transactionHandler?.Exit(); + } + [Test] public void CreatesSpecificNumberOfFills() { @@ -92,13 +100,13 @@ private static DateTime InitializeTest(out BasicTemplateAlgorithm algorithm, out algorithm = new BasicTemplateAlgorithm(); algorithm.SetDateTime(referenceTimeUtc); - var transactionHandler = new BacktestingTransactionHandler(); + _transactionHandler = new BacktestingTransactionHandler(); # pragma warning disable CA2000 var backtestingBrokerage = new BacktestingBrokerage(algorithm); #pragma warning restore CA2000 - transactionHandler.Initialize(algorithm, backtestingBrokerage, new TestResultHandler(Console.WriteLine)); + _transactionHandler.Initialize(algorithm, backtestingBrokerage, new TestResultHandler(Console.WriteLine)); - algorithm.Transactions.SetOrderProcessor(transactionHandler); + algorithm.Transactions.SetOrderProcessor(_transactionHandler); var config = new SubscriptionDataConfig(typeof(TradeBar), Symbols.SPY, Resolution.Second, TimeZones.NewYork, TimeZones.NewYork, false, false, false); security = new Security( diff --git a/Tests/Common/Orders/OrderSizingTests.cs b/Tests/Common/Orders/OrderSizingTests.cs index c21855e0dc45..082a8e62e432 100644 --- a/Tests/Common/Orders/OrderSizingTests.cs +++ b/Tests/Common/Orders/OrderSizingTests.cs @@ -118,35 +118,43 @@ public void GetUnorderedQuantityHoldingsOpenOrders(decimal existingHoldings, dec var orderProcessor = new BrokerageTransactionHandler(); using var brokerage = new NullBrokerage(); orderProcessor.Initialize(algo, brokerage, new BacktestingResultHandler()); - algo.Transactions.SetOrderProcessor(orderProcessor); - - var orderRequest = new SubmitOrderRequest( - OrderType.Market, - SecurityType.Future, + + try + { + algo.Transactions.SetOrderProcessor(orderProcessor); + + var orderRequest = new SubmitOrderRequest( + OrderType.Market, + SecurityType.Future, + Symbols.Future_CLF19_Jan2019, + orderQuantity, + 250, + 250, + new DateTime(2020, 1, 1), + "Pepe" + ); + orderRequest.SetOrderId(1); + var order = Order.CreateOrder(orderRequest); + orderProcessor.AddOpenOrder(order, algo); + + brokerage.OnOrderEvent(new OrderEvent(1, Symbols.Future_CLF19_Jan2019, - orderQuantity, - 250, - 250, new DateTime(2020, 1, 1), - "Pepe" - ); - orderRequest.SetOrderId(1); - var order = Order.CreateOrder(orderRequest); - orderProcessor.AddOpenOrder(order, algo); - - brokerage.OnOrderEvent(new OrderEvent(1, - Symbols.Future_CLF19_Jan2019, - new DateTime(2020, 1, 1), - OrderStatus.PartiallyFilled, - filledQuantity > 0 ? OrderDirection.Buy : OrderDirection.Sell, - 250, - filledQuantity, - OrderFee.Zero)); - - var result = OrderSizing.GetUnorderedQuantity(algo, - new PortfolioTarget(Symbols.Future_CLF19_Jan2019, target)); - - Assert.AreEqual(expected, result); + OrderStatus.PartiallyFilled, + filledQuantity > 0 ? OrderDirection.Buy : OrderDirection.Sell, + 250, + filledQuantity, + OrderFee.Zero)); + + var result = OrderSizing.GetUnorderedQuantity(algo, + new PortfolioTarget(Symbols.Future_CLF19_Jan2019, target)); + + Assert.AreEqual(expected, result); + } + finally + { + orderProcessor.Exit(); + } } } } diff --git a/Tests/Common/Securities/FutureOptionMarginBuyingPowerModelTests.cs b/Tests/Common/Securities/FutureOptionMarginBuyingPowerModelTests.cs index 12c2a0e312ef..bd3fb352958c 100644 --- a/Tests/Common/Securities/FutureOptionMarginBuyingPowerModelTests.cs +++ b/Tests/Common/Securities/FutureOptionMarginBuyingPowerModelTests.cs @@ -163,28 +163,35 @@ public void OptionExerciseWhenFullyInvested() algorithm.Transactions.SetOrderProcessor(backtestingTransactionHandler); backtestingTransactionHandler.Initialize(algorithm, brokerage, new TestResultHandler()); - const decimal price = 2600m; - var time = new DateTime(2020, 10, 14); - var expDate = new DateTime(2021, 3, 19); - - // For this symbol we dont have any history, but only one date and margins line - var ticker = QuantConnect.Securities.Futures.Indices.SP500EMini; - var future = Symbol.CreateFuture(ticker, Market.CME, expDate); - var symbol = Symbol.CreateOption(future, Market.CME, OptionStyle.American, OptionRight.Call, 2550m, - new DateTime(2021, 3, 19)); - - var optionSecurity = algorithm.AddOptionContract(symbol); - optionSecurity.Underlying = algorithm.AddFutureContract(future); - - optionSecurity.Underlying.SetMarketPrice(new Tick { Value = price, Time = time }); - optionSecurity.SetMarketPrice(new Tick { Value = 150, Time = time }); - optionSecurity.Holdings.SetHoldings(1.5m, 10); - - algorithm.SetDateTime(time.AddHours(14)); // 10am - var ticket = algorithm.ExerciseOption(optionSecurity.Symbol, 10, true); - // Process orders - backtestingTransactionHandler.ProcessSynchronousEvents(); - Assert.AreEqual(OrderStatus.Filled, ticket.Status); + try + { + const decimal price = 2600m; + var time = new DateTime(2020, 10, 14); + var expDate = new DateTime(2021, 3, 19); + + // For this symbol we dont have any history, but only one date and margins line + var ticker = QuantConnect.Securities.Futures.Indices.SP500EMini; + var future = Symbol.CreateFuture(ticker, Market.CME, expDate); + var symbol = Symbol.CreateOption(future, Market.CME, OptionStyle.American, OptionRight.Call, 2550m, + new DateTime(2021, 3, 19)); + + var optionSecurity = algorithm.AddOptionContract(symbol); + optionSecurity.Underlying = algorithm.AddFutureContract(future); + + optionSecurity.Underlying.SetMarketPrice(new Tick { Value = price, Time = time }); + optionSecurity.SetMarketPrice(new Tick { Value = 150, Time = time }); + optionSecurity.Holdings.SetHoldings(1.5m, 10); + + algorithm.SetDateTime(time.AddHours(14)); // 10am + var ticket = algorithm.ExerciseOption(optionSecurity.Symbol, 10, true); + // Process orders + backtestingTransactionHandler.ProcessSynchronousEvents(); + Assert.AreEqual(OrderStatus.Filled, ticket.Status); + } + finally + { + backtestingTransactionHandler.Exit(); + } } [Test] diff --git a/Tests/Common/Securities/Options/OptionPortfolioModelTests.cs b/Tests/Common/Securities/Options/OptionPortfolioModelTests.cs index 22f2cf235d23..45f7f83c6aee 100644 --- a/Tests/Common/Securities/Options/OptionPortfolioModelTests.cs +++ b/Tests/Common/Securities/Options/OptionPortfolioModelTests.cs @@ -64,63 +64,71 @@ public void OptionExercise_NonAccountCurrency() algorithm.Securities = securities; using var backtestingBrokerage = new BacktestingBrokerage(algorithm); transactionHandler.Initialize(algorithm, backtestingBrokerage, _resultHandler); - transactions.SetOrderProcessor(transactionHandler); - - securities.Add( - Symbols.SPY, - new Security( - SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), - CreateTradeBarConfig(Symbols.SPY), - EUR, - SymbolProperties.GetDefault(EUR.Symbol), - ErrorCurrencyConverter.Instance, - RegisteredSecurityDataTypesProvider.Null, - new SecurityCache() - ) - ); - securities.Add( - Symbols.SPY_C_192_Feb19_2016, - new Option( - SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), - CreateTradeBarConfig(Symbols.SPY_C_192_Feb19_2016), - EUR, - new OptionSymbolProperties(new SymbolProperties("EUR", "EUR", 100, 0.01m, 1, string.Empty)), - ErrorCurrencyConverter.Instance, - RegisteredSecurityDataTypesProvider.Null - ) - ); - securities[Symbols.SPY_C_192_Feb19_2016].Holdings.SetHoldings(1, 1); - securities[Symbols.SPY].SetMarketPrice(new Tick { Value = 200 }); - - transactions.AddOrder(new SubmitOrderRequest(OrderType.OptionExercise, SecurityType.Option, Symbols.SPY_C_192_Feb19_2016, -1, 0, 0, securities.UtcTime, "")); - var option = (Option)securities[Symbols.SPY_C_192_Feb19_2016]; - var order = (OptionExerciseOrder)transactions.GetOrders(x => true).First(); - option.Underlying = securities[Symbols.SPY]; - - var fills = option.OptionExerciseModel.OptionExercise(option, order).ToList(); - - Assert.AreEqual(2, fills.Count); - Assert.IsFalse(fills[0].IsAssignment); - - StringAssert.Contains("Automatic Exercise", fills[0].Message); - Assert.AreEqual("Option Exercise", fills[1].Message); - - foreach (var fill in fills) + + try { - fill.Ticket = order.ToOrderTicket(transactions); - portfolio.ProcessFills(new List { fill }); - } + transactions.SetOrderProcessor(transactionHandler); + + securities.Add( + Symbols.SPY, + new Security( + SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), + CreateTradeBarConfig(Symbols.SPY), + EUR, + SymbolProperties.GetDefault(EUR.Symbol), + ErrorCurrencyConverter.Instance, + RegisteredSecurityDataTypesProvider.Null, + new SecurityCache() + ) + ); + securities.Add( + Symbols.SPY_C_192_Feb19_2016, + new Option( + SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), + CreateTradeBarConfig(Symbols.SPY_C_192_Feb19_2016), + EUR, + new OptionSymbolProperties(new SymbolProperties("EUR", "EUR", 100, 0.01m, 1, string.Empty)), + ErrorCurrencyConverter.Instance, + RegisteredSecurityDataTypesProvider.Null + ) + ); + securities[Symbols.SPY_C_192_Feb19_2016].Holdings.SetHoldings(1, 1); + securities[Symbols.SPY].SetMarketPrice(new Tick { Value = 200 }); + + transactions.AddOrder(new SubmitOrderRequest(OrderType.OptionExercise, SecurityType.Option, Symbols.SPY_C_192_Feb19_2016, -1, 0, 0, securities.UtcTime, "")); + var option = (Option)securities[Symbols.SPY_C_192_Feb19_2016]; + var order = (OptionExerciseOrder)transactions.GetOrders(x => true).First(); + option.Underlying = securities[Symbols.SPY]; + + var fills = option.OptionExerciseModel.OptionExercise(option, order).ToList(); + + Assert.AreEqual(2, fills.Count); + Assert.IsFalse(fills[0].IsAssignment); - // now we have long position in SPY with average price equal to strike - var newUnderlyingHoldings = securities[Symbols.SPY].Holdings; - // we added 100*192 EUR (strike price) at beginning, all consumed by exercise - Assert.AreEqual(0, EUR.Amount); - Assert.AreEqual(0, portfolio.CashBook["USD"].Amount); - Assert.AreEqual(100, newUnderlyingHoldings.Quantity); - Assert.AreEqual(192.0, newUnderlyingHoldings.AveragePrice); + StringAssert.Contains("Automatic Exercise", fills[0].Message); + Assert.AreEqual("Option Exercise", fills[1].Message); - // and long call option position has disappeared - Assert.AreEqual(0, securities[Symbols.SPY_C_192_Feb19_2016].Holdings.Quantity); + foreach (var fill in fills) + { + fill.Ticket = order.ToOrderTicket(transactions); + portfolio.ProcessFills(new List { fill }); + } + + // now we have long position in SPY with average price equal to strike + var newUnderlyingHoldings = securities[Symbols.SPY].Holdings; + // we added 100*192 EUR (strike price) at beginning, all consumed by exercise + Assert.AreEqual(0, EUR.Amount); + Assert.AreEqual(0, portfolio.CashBook["USD"].Amount); + Assert.AreEqual(100, newUnderlyingHoldings.Quantity); + Assert.AreEqual(192.0, newUnderlyingHoldings.AveragePrice); + + // and long call option position has disappeared + Assert.AreEqual(0, securities[Symbols.SPY_C_192_Feb19_2016].Holdings.Quantity); + } + finally + { + transactionHandler.Exit(); + } } private static SubscriptionDataConfig CreateTradeBarConfig(Symbol symbol) diff --git a/Tests/Common/Securities/SecurityPortfolioManagerTests.cs b/Tests/Common/Securities/SecurityPortfolioManagerTests.cs index 190c9bc225f4..1240b79b5348 100644 --- a/Tests/Common/Securities/SecurityPortfolioManagerTests.cs +++ b/Tests/Common/Securities/SecurityPortfolioManagerTests.cs @@ -86,6 +86,7 @@ public void SetUp() [TearDown] public void TearDown() { + _transactionHandler.Exit(); _resultHandler.Exit(); _backtestingBrokerage.Dispose(); } diff --git a/Tests/Engine/AlgorithmManagerTests.cs b/Tests/Engine/AlgorithmManagerTests.cs index f99b5e94255f..97faeecc3579 100644 --- a/Tests/Engine/AlgorithmManagerTests.cs +++ b/Tests/Engine/AlgorithmManagerTests.cs @@ -141,6 +141,7 @@ public void TestAlgorithmManagerSpeed() realtime.Exit(); results.Exit(); + transactions.Exit(); var thousands = nullSynchronizer.Count / 1000d; var seconds = sw.Elapsed.TotalSeconds; Log.Trace("COUNT: " + nullSynchronizer.Count + " KPS: " + thousands/seconds); diff --git a/Tests/Engine/BrokerageTransactionHandlerTests/BacktestingTransactionHandlerTests.cs b/Tests/Engine/BrokerageTransactionHandlerTests/BacktestingTransactionHandlerTests.cs index 5eb772f0a1e9..04cba991862f 100644 --- a/Tests/Engine/BrokerageTransactionHandlerTests/BacktestingTransactionHandlerTests.cs +++ b/Tests/Engine/BrokerageTransactionHandlerTests/BacktestingTransactionHandlerTests.cs @@ -64,24 +64,31 @@ public void InvalidOrderRequestWontSetTicketAsProcessed() using var backtestingBrokerage = new BacktestingBrokerage(_algorithm); transactionHandler.Initialize(_algorithm, backtestingBrokerage, new BacktestingResultHandler()); - // Creates the order - var security = _algorithm.Securities[Ticker]; - var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 600, 0, 0, 0, DateTime.Now, ""); + try + { + // Creates the order + var security = _algorithm.Securities[Ticker]; + var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 600, 0, 0, 0, DateTime.Now, ""); - // Mock the the order processor - var orderProcessorMock = new Mock(); - orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); - _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); + // Mock the the order processor + var orderProcessorMock = new Mock(); + orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); + _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - var ticket = transactionHandler.AddOrder(orderRequest); + var ticket = transactionHandler.AddOrder(orderRequest); - var ticket2 = transactionHandler.AddOrder(orderRequest); + var ticket2 = transactionHandler.AddOrder(orderRequest); - // 600 after round off becomes 0 -> order is not placed - Assert.IsTrue(orderRequest.Response.IsProcessed); - Assert.IsTrue(orderRequest.Response.IsError); - Assert.IsTrue(orderRequest.Response.ErrorMessage - .Contains("Cannot process submit request because order with id {0} already exists")); + // 600 after round off becomes 0 -> order is not placed + Assert.IsTrue(orderRequest.Response.IsProcessed); + Assert.IsTrue(orderRequest.Response.IsError); + Assert.IsTrue(orderRequest.Response.ErrorMessage + .Contains("Cannot process submit request because order with id {0} already exists")); + } + finally + { + transactionHandler.Exit(); + } } [Test] @@ -92,67 +99,74 @@ public void SendingNewOrderFromOnOrderEvent() using var brokerage = new BacktestingBrokerage(_algorithm); transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); - // Creates a market order - var security = _algorithm.Securities[Ticker]; - var price = 1.12m; - security.SetMarketPrice(new Tick(DateTime.UtcNow.AddDays(-1), security.Symbol, price, price, price)); - var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1000, 0, 0, 0, DateTime.UtcNow, ""); - var orderRequest2 = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, -1000, 0, 0, 0, DateTime.UtcNow, ""); - orderRequest.SetOrderId(1); - orderRequest2.SetOrderId(2); - - // Mock the the order processor - var orderProcessorMock = new Mock(); - orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 1))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); - orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 2))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest2)); - _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - - var orderEventCalls = 0; - brokerage.OrdersStatusChanged += (sender, orderEvents) => + try { - orderEventCalls++; - var orderEvent = orderEvents[0]; - switch (orderEventCalls) + // Creates a market order + var security = _algorithm.Securities[Ticker]; + var price = 1.12m; + security.SetMarketPrice(new Tick(DateTime.UtcNow.AddDays(-1), security.Symbol, price, price, price)); + var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1000, 0, 0, 0, DateTime.UtcNow, ""); + var orderRequest2 = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, -1000, 0, 0, 0, DateTime.UtcNow, ""); + orderRequest.SetOrderId(1); + orderRequest2.SetOrderId(2); + + // Mock the the order processor + var orderProcessorMock = new Mock(); + orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 1))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); + orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 2))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest2)); + _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); + + var orderEventCalls = 0; + brokerage.OrdersStatusChanged += (sender, orderEvents) => { - case 1: - Assert.AreEqual(1, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.Submitted, orderEvent.Status); - - // we send a new order request - var ticket2 = transactionHandler.Process(orderRequest2); - break; - case 2: - Assert.AreEqual(2, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.Submitted, orderEvent.Status); - break; - case 3: - Assert.AreEqual(1, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.Filled, orderEvent.Status); - break; - case 4: - Assert.AreEqual(2, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.Filled, orderEvent.Status); - break; - } - Log.Trace($"{orderEvent}"); - }; + orderEventCalls++; + var orderEvent = orderEvents[0]; + switch (orderEventCalls) + { + case 1: + Assert.AreEqual(1, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.Submitted, orderEvent.Status); + + // we send a new order request + var ticket2 = transactionHandler.Process(orderRequest2); + break; + case 2: + Assert.AreEqual(2, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.Submitted, orderEvent.Status); + break; + case 3: + Assert.AreEqual(1, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.Filled, orderEvent.Status); + break; + case 4: + Assert.AreEqual(2, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.Filled, orderEvent.Status); + break; + } + Log.Trace($"{orderEvent}"); + }; - var ticket = transactionHandler.Process(orderRequest); + var ticket = transactionHandler.Process(orderRequest); - Assert.IsTrue(orderRequest.Response.IsProcessed); - Assert.IsTrue(orderRequest.Response.IsSuccess); - Assert.AreEqual(OrderRequestStatus.Processed, orderRequest.Status); - Assert.IsTrue(orderRequest2.Response.IsProcessed); - Assert.IsTrue(orderRequest2.Response.IsSuccess); - Assert.AreEqual(OrderRequestStatus.Processed, orderRequest2.Status); + Assert.IsTrue(orderRequest.Response.IsProcessed); + Assert.IsTrue(orderRequest.Response.IsSuccess); + Assert.AreEqual(OrderRequestStatus.Processed, orderRequest.Status); + Assert.IsTrue(orderRequest2.Response.IsProcessed); + Assert.IsTrue(orderRequest2.Response.IsSuccess); + Assert.AreEqual(OrderRequestStatus.Processed, orderRequest2.Status); - var order1 = transactionHandler.GetOrderById(1); - Assert.AreEqual(OrderStatus.Filled, order1.Status); - var order2 = transactionHandler.GetOrderById(2); - Assert.AreEqual(OrderStatus.Filled, order2.Status); + var order1 = transactionHandler.GetOrderById(1); + Assert.AreEqual(OrderStatus.Filled, order1.Status); + var order2 = transactionHandler.GetOrderById(2); + Assert.AreEqual(OrderStatus.Filled, order2.Status); - // 2 submitted and 2 filled - Assert.AreEqual(4, orderEventCalls); + // 2 submitted and 2 filled + Assert.AreEqual(4, orderEventCalls); + } + finally + { + transactionHandler.Exit(); + } } [Test] @@ -163,77 +177,84 @@ public void SendingNewOrderFromPartiallyFilledOnOrderEvent() using var brokerage = new BacktestingBrokerage(_algorithm); transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); - // Creates a market order - var security = _algorithm.Securities[Ticker]; - security.FillModel = new TestPartialFilledModel(); - - var price = 1.12m; - security.SetMarketPrice(new Tick(DateTime.UtcNow.AddDays(-1), security.Symbol, price, price, price)); - var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 2000, 0, 0, 9, DateTime.UtcNow, ""); - var orderRequest2 = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, -2000, 0, 0, 9, DateTime.UtcNow, ""); - orderRequest.SetOrderId(1); - orderRequest2.SetOrderId(2); - - // Mock the the order processor - var orderProcessorMock = new Mock(); - orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 1))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); - orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 2))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest2)); - _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - - var orderEventCalls = 0; - brokerage.OrdersStatusChanged += (sender, orderEvents) => + try { - orderEventCalls++; - var orderEvent = orderEvents[0]; - switch (orderEventCalls) + // Creates a market order + var security = _algorithm.Securities[Ticker]; + security.FillModel = new TestPartialFilledModel(); + + var price = 1.12m; + security.SetMarketPrice(new Tick(DateTime.UtcNow.AddDays(-1), security.Symbol, price, price, price)); + var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 2000, 0, 0, 9, DateTime.UtcNow, ""); + var orderRequest2 = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, -2000, 0, 0, 9, DateTime.UtcNow, ""); + orderRequest.SetOrderId(1); + orderRequest2.SetOrderId(2); + + // Mock the the order processor + var orderProcessorMock = new Mock(); + orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 1))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); + orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 2))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest2)); + _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); + + var orderEventCalls = 0; + brokerage.OrdersStatusChanged += (sender, orderEvents) => { - case 1: - Assert.AreEqual(1, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.Submitted, orderEvent.Status); - - // we send a new order request - var ticket2 = transactionHandler.Process(orderRequest2); - break; - case 2: - Assert.AreEqual(2, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.Submitted, orderEvent.Status); - break; - case 3: - Assert.AreEqual(1, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.PartiallyFilled, orderEvent.Status); - break; - case 4: - Assert.AreEqual(2, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.PartiallyFilled, orderEvent.Status); - break; - case 5: - Assert.AreEqual(1, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.Filled, orderEvent.Status); - break; - case 6: - Assert.AreEqual(2, orderEvent.OrderId); - Assert.AreEqual(OrderStatus.Filled, orderEvent.Status); - break; - } - Log.Trace($"{orderEvent}"); - }; + orderEventCalls++; + var orderEvent = orderEvents[0]; + switch (orderEventCalls) + { + case 1: + Assert.AreEqual(1, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.Submitted, orderEvent.Status); + + // we send a new order request + var ticket2 = transactionHandler.Process(orderRequest2); + break; + case 2: + Assert.AreEqual(2, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.Submitted, orderEvent.Status); + break; + case 3: + Assert.AreEqual(1, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.PartiallyFilled, orderEvent.Status); + break; + case 4: + Assert.AreEqual(2, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.PartiallyFilled, orderEvent.Status); + break; + case 5: + Assert.AreEqual(1, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.Filled, orderEvent.Status); + break; + case 6: + Assert.AreEqual(2, orderEvent.OrderId); + Assert.AreEqual(OrderStatus.Filled, orderEvent.Status); + break; + } + Log.Trace($"{orderEvent}"); + }; - var ticket = transactionHandler.Process(orderRequest); + var ticket = transactionHandler.Process(orderRequest); - Assert.IsTrue(orderRequest.Response.IsProcessed); - Assert.IsTrue(orderRequest.Response.IsSuccess); - Assert.AreEqual(OrderRequestStatus.Processed, orderRequest.Status); - Assert.IsTrue(orderRequest2.Response.IsProcessed); - Assert.IsTrue(orderRequest2.Response.IsSuccess); - Assert.AreEqual(OrderRequestStatus.Processed, orderRequest2.Status); + Assert.IsTrue(orderRequest.Response.IsProcessed); + Assert.IsTrue(orderRequest.Response.IsSuccess); + Assert.AreEqual(OrderRequestStatus.Processed, orderRequest.Status); + Assert.IsTrue(orderRequest2.Response.IsProcessed); + Assert.IsTrue(orderRequest2.Response.IsSuccess); + Assert.AreEqual(OrderRequestStatus.Processed, orderRequest2.Status); - var order1 = transactionHandler.GetOrderById(1); - Assert.AreEqual(OrderStatus.Filled, order1.Status); - var order2 = transactionHandler.GetOrderById(2); - Assert.AreEqual(OrderStatus.Filled, order2.Status); + var order1 = transactionHandler.GetOrderById(1); + Assert.AreEqual(OrderStatus.Filled, order1.Status); + var order2 = transactionHandler.GetOrderById(2); + Assert.AreEqual(OrderStatus.Filled, order2.Status); - // 2 submitted and 2 PartiallyFilled and 2 Filled - Assert.AreEqual(6, orderEventCalls); + // 2 submitted and 2 PartiallyFilled and 2 Filled + Assert.AreEqual(6, orderEventCalls); + } + finally + { + transactionHandler.Exit(); + } } [Test] @@ -245,81 +266,86 @@ public void ProcessesOrdersInLivePaperTrading() _algorithm.SetLiveMode(true); transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); - // Creates a market order - var security = _algorithm.Securities[Ticker]; - var price = 1.12m; - security.SetMarketPrice(new Tick(DateTime.UtcNow.AddDays(-1), security.Symbol, price, price, price)); - var reference = new DateTime(2025, 07, 03, 10, 0, 0); - var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1000, 0, 0, 0, reference, ""); - var orderRequest2 = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, -1000, 0, 0, 0, reference.AddSeconds(1), ""); - orderRequest.SetOrderId(1); - orderRequest2.SetOrderId(2); - - // Mock the the order processor - var orderProcessorMock = new Mock(); - orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 1))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); - orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 2))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest2)); - _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - - var allOrderEvents = new List(); - using var eventsReceived = new AutoResetEvent(false); - - brokerage.OrdersStatusChanged += (sender, orderEvents) => + try { - var orderEvent = orderEvents[0]; - lock (allOrderEvents) + // Creates a market order + var security = _algorithm.Securities[Ticker]; + var price = 1.12m; + security.SetMarketPrice(new Tick(DateTime.UtcNow.AddDays(-1), security.Symbol, price, price, price)); + var reference = new DateTime(2025, 07, 03, 10, 0, 0); + var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1000, 0, 0, 0, reference, ""); + var orderRequest2 = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, -1000, 0, 0, 0, reference.AddSeconds(1), ""); + orderRequest.SetOrderId(1); + orderRequest2.SetOrderId(2); + + // Mock the the order processor + var orderProcessorMock = new Mock(); + orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 1))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); + orderProcessorMock.Setup(m => m.GetOrderTicket(It.Is(i => i == 2))).Returns(new OrderTicket(_algorithm.Transactions, orderRequest2)); + _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); + + var allOrderEvents = new List(); + using var eventsReceived = new AutoResetEvent(false); + + brokerage.OrdersStatusChanged += (sender, orderEvents) => { - allOrderEvents.Add(orderEvent); - if (allOrderEvents.Count == 4) + var orderEvent = orderEvents[0]; + lock (allOrderEvents) { - eventsReceived.Set(); + allOrderEvents.Add(orderEvent); + if (allOrderEvents.Count == 4) + { + eventsReceived.Set(); + } } - } - // Let's place another order before this one is filled - if (orderEvent.OrderId == 1 && orderEvent.Status == OrderStatus.Submitted) - { - var ticket2 = transactionHandler.Process(orderRequest2); - } - - Log.Debug($"{orderEvent}"); - }; + // Let's place another order before this one is filled + if (orderEvent.OrderId == 1 && orderEvent.Status == OrderStatus.Submitted) + { + var ticket2 = transactionHandler.Process(orderRequest2); + } - var ticket = transactionHandler.Process(orderRequest); + Log.Debug($"{orderEvent}"); + }; - if (!eventsReceived.WaitOne(10000)) - { - Assert.Fail($"Did not receive all order events, received {allOrderEvents.Count} order events: {string.Join(", ", allOrderEvents)}"); - } + var ticket = transactionHandler.Process(orderRequest); - Assert.IsTrue(orderRequest.Response.IsProcessed); - Assert.IsTrue(orderRequest.Response.IsSuccess); - Assert.AreEqual(OrderRequestStatus.Processed, orderRequest.Status); + if (!eventsReceived.WaitOne(10000)) + { + Assert.Fail($"Did not receive all order events, received {allOrderEvents.Count} order events: {string.Join(", ", allOrderEvents)}"); + } - Assert.IsTrue(orderRequest2.Response.IsProcessed); - Assert.IsTrue(orderRequest2.Response.IsSuccess); - Assert.AreEqual(OrderRequestStatus.Processed, orderRequest2.Status); + Assert.IsTrue(orderRequest.Response.IsProcessed); + Assert.IsTrue(orderRequest.Response.IsSuccess); + Assert.AreEqual(OrderRequestStatus.Processed, orderRequest.Status); - var order1 = transactionHandler.GetOrderById(1); - Assert.AreEqual(OrderStatus.Filled, order1.Status); + Assert.IsTrue(orderRequest2.Response.IsProcessed); + Assert.IsTrue(orderRequest2.Response.IsSuccess); + Assert.AreEqual(OrderRequestStatus.Processed, orderRequest2.Status); - var order2 = transactionHandler.GetOrderById(2); - Assert.AreEqual(OrderStatus.Filled, order2.Status); + var order1 = transactionHandler.GetOrderById(1); + Assert.AreEqual(OrderStatus.Filled, order1.Status); - // 2 submitted and 2 filled - Assert.AreEqual(4, allOrderEvents.Count); + var order2 = transactionHandler.GetOrderById(2); + Assert.AreEqual(OrderStatus.Filled, order2.Status); - var firstOrderSubmittedEvent = allOrderEvents.FirstOrDefault(x => x.OrderId == 1 && x.Status == OrderStatus.Submitted); - Assert.IsNotNull(firstOrderSubmittedEvent); - var firstOrderFilledEvent = allOrderEvents.FirstOrDefault(x => x.OrderId == 1 && x.Status == OrderStatus.Filled); - Assert.IsNotNull(firstOrderFilledEvent); + // 2 submitted and 2 filled + Assert.AreEqual(4, allOrderEvents.Count); - var secondOrderSubmittedEvent = allOrderEvents.FirstOrDefault(x => x.OrderId == 2 && x.Status == OrderStatus.Submitted); - Assert.IsNotNull(secondOrderSubmittedEvent); - var secondOrderFilledEvent = allOrderEvents.FirstOrDefault(x => x.OrderId == 2 && x.Status == OrderStatus.Filled); - Assert.IsNotNull(secondOrderFilledEvent); + var firstOrderSubmittedEvent = allOrderEvents.FirstOrDefault(x => x.OrderId == 1 && x.Status == OrderStatus.Submitted); + Assert.IsNotNull(firstOrderSubmittedEvent); + var firstOrderFilledEvent = allOrderEvents.FirstOrDefault(x => x.OrderId == 1 && x.Status == OrderStatus.Filled); + Assert.IsNotNull(firstOrderFilledEvent); - transactionHandler.Exit(); + var secondOrderSubmittedEvent = allOrderEvents.FirstOrDefault(x => x.OrderId == 2 && x.Status == OrderStatus.Submitted); + Assert.IsNotNull(secondOrderSubmittedEvent); + var secondOrderFilledEvent = allOrderEvents.FirstOrDefault(x => x.OrderId == 2 && x.Status == OrderStatus.Filled); + Assert.IsNotNull(secondOrderFilledEvent); + } + finally + { + transactionHandler.Exit(); + } } [Test] @@ -332,34 +358,40 @@ public void ProcessesOrdersConcurrentlyInLivePaperTrading() using var finishedEvent = new ManualResetEventSlim(false); var transactionHandler = new TestablePaperBrokerageTransactionHandler(expectedOrdersCount, finishedEvent); transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); - _algorithm.Transactions.SetOrderProcessor(transactionHandler); + + try + { + _algorithm.Transactions.SetOrderProcessor(transactionHandler); - var security = (Security)_algorithm.AddEquity("SPY"); - _algorithm.SetFinishedWarmingUp(); + var security = (Security)_algorithm.AddEquity("SPY"); + _algorithm.SetFinishedWarmingUp(); - // Set up security - var reference = new DateTime(2025, 07, 03, 10, 0, 0); - security.SetMarketPrice(new Tick(reference, security.Symbol, 300, 300)); + // Set up security + var reference = new DateTime(2025, 07, 03, 10, 0, 0); + security.SetMarketPrice(new Tick(reference, security.Symbol, 300, 300)); - // Creates the order - var orderRequests = Enumerable.Range(0, expectedOrdersCount) - .Select(_ => new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1000, 0, 0, 0, reference, "")) - .ToList(); + // Creates the order + var orderRequests = Enumerable.Range(0, expectedOrdersCount) + .Select(_ => new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1000, 0, 0, 0, reference, "")) + .ToList(); - // Act - for (var i = 0; i < orderRequests.Count; i++) + // Act + for (var i = 0; i < orderRequests.Count; i++) + { + var orderRequest = orderRequests[i]; + orderRequest.SetOrderId(i + 1); + transactionHandler.Process(orderRequest); + } + + // Wait for all orders to be processed + Assert.IsTrue(finishedEvent.Wait(10000)); + Assert.Greater(transactionHandler.ProcessingThreadNames.Count, 1); + CollectionAssert.AreEquivalent(orderRequests.Select(x => x.ToString()), transactionHandler.ProcessedRequests.Select(x => x.ToString())); + } + finally { - var orderRequest = orderRequests[i]; - orderRequest.SetOrderId(i + 1); - transactionHandler.Process(orderRequest); + transactionHandler.Exit(); } - - // Wait for all orders to be processed - Assert.IsTrue(finishedEvent.Wait(10000)); - Assert.Greater(transactionHandler.ProcessingThreadNames.Count, 1); - CollectionAssert.AreEquivalent(orderRequests.Select(x => x.ToString()), transactionHandler.ProcessedRequests.Select(x => x.ToString())); - - transactionHandler.Exit(); } private class TestablePaperBrokerageTransactionHandler : BacktestingTransactionHandler diff --git a/Tests/Engine/BrokerageTransactionHandlerTests/BrokerageTransactionHandlerTests.cs b/Tests/Engine/BrokerageTransactionHandlerTests/BrokerageTransactionHandlerTests.cs index 66030c51ec5b..842407d4c98a 100644 --- a/Tests/Engine/BrokerageTransactionHandlerTests/BrokerageTransactionHandlerTests.cs +++ b/Tests/Engine/BrokerageTransactionHandlerTests/BrokerageTransactionHandlerTests.cs @@ -49,6 +49,7 @@ public class BrokerageTransactionHandlerTests private MethodInfo _handleOptionNotification; private TestAlgorithm _algorithm; private Symbol _symbol; + private TestBrokerageTransactionHandler _transactionHandler; [SetUp] public void Initialize() @@ -64,6 +65,12 @@ public void Initialize() Assert.IsNotNull(_handleOptionNotification); } + [TearDown] + public void TearDown() + { + _transactionHandler?.Exit(); + } + private static SubmitOrderRequest MakeOrderRequest(Security security, OrderType orderType, DateTime date) { var groupOrderManager = new GroupOrderManager(1, 1, 100, orderType == OrderType.ComboLimit ? 100 : 0); @@ -93,32 +100,39 @@ public void RetrieveComboOrdersWithTheSameBrokerageIdEvenIfOneOfThemIsFilled(str _algorithm.AddSecurity(symbol); _algorithm.Securities[symbol].SetMarketPrice(new Tick(DateTime.UtcNow.AddDays(-1), symbol, 220m, 220m, 220m)); - var brokerageTransactionHandler = new BrokerageTransactionHandler(); + var transactionHandler = new BrokerageTransactionHandler(); using var brokerage = new TestingBrokerage(); - brokerageTransactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); - - var groupOrderManager = new GroupOrderManager(1, 3, 10); + transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); - var comboOrders = new List + try { - new ComboMarketOrder(symbol, 10m, DateTime.UtcNow, groupOrderManager) { Status = OrderStatus.Submitted }, - new ComboMarketOrder(symbol, -10m, DateTime.UtcNow, groupOrderManager) { Status = OrderStatus.PartiallyFilled }, - new ComboMarketOrder(symbol, 10m, DateTime.UtcNow, groupOrderManager) { Status = OrderStatus.Filled } - }; + var groupOrderManager = new GroupOrderManager(1, 3, 10); - foreach (var comboOrder in comboOrders) - { - comboOrder.BrokerId.Add(brokerageOrderId); - brokerageTransactionHandler.AddOpenOrder(comboOrder, _algorithm); - } + var comboOrders = new List + { + new ComboMarketOrder(symbol, 10m, DateTime.UtcNow, groupOrderManager) { Status = OrderStatus.Submitted }, + new ComboMarketOrder(symbol, -10m, DateTime.UtcNow, groupOrderManager) { Status = OrderStatus.PartiallyFilled }, + new ComboMarketOrder(symbol, 10m, DateTime.UtcNow, groupOrderManager) { Status = OrderStatus.Filled } + }; + + foreach (var comboOrder in comboOrders) + { + comboOrder.BrokerId.Add(brokerageOrderId); + transactionHandler.AddOpenOrder(comboOrder, _algorithm); + } - var openOrders = brokerageTransactionHandler.GetOrdersByBrokerageId(brokerageOrderId); + var openOrders = transactionHandler.GetOrdersByBrokerageId(brokerageOrderId); - Assert.IsNotEmpty(openOrders); - Assert.That(openOrders.Count, Is.EqualTo(expectedComboOrdersCount)); - Assert.True(openOrders.Any(o => o.Status == OrderStatus.Submitted)); - Assert.True(openOrders.Any(o => o.Status == OrderStatus.PartiallyFilled)); - Assert.True(openOrders.Any(o => o.Status == OrderStatus.Filled)); + Assert.IsNotEmpty(openOrders); + Assert.That(openOrders.Count, Is.EqualTo(expectedComboOrdersCount)); + Assert.True(openOrders.Any(o => o.Status == OrderStatus.Submitted)); + Assert.True(openOrders.Any(o => o.Status == OrderStatus.PartiallyFilled)); + Assert.True(openOrders.Any(o => o.Status == OrderStatus.Filled)); + } + finally + { + transactionHandler.Exit(); + } } [Test] @@ -134,9 +148,9 @@ public void OrderTagIsSetToTheDefaultOne([Values] OrderType orderType) algorithm.SetFinishedWarmingUp(); //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(algorithm); - transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); // Set up security security.SetMarketPrice(new Tick(reference, security.Symbol, 300, 300)); @@ -157,9 +171,9 @@ public void OrderTagIsSetToTheDefaultOne([Values] OrderType orderType) algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); @@ -167,7 +181,7 @@ public void OrderTagIsSetToTheDefaultOne([Values] OrderType orderType) Assert.AreEqual(OrderStatus.Submitted, orderTicket.Status); // Assert the order tag is set to the default one - var order = transactionHandler.GetOpenOrders().Single(); + var order = _transactionHandler.GetOpenOrders().Single(); Assert.AreEqual(orderType, order.Type); Assert.AreEqual(order.GetDefaultTag(), order.Tag); } @@ -176,9 +190,9 @@ public void OrderTagIsSetToTheDefaultOne([Values] OrderType orderType) public void OrderQuantityIsFlooredToNearestMultipleOfLotSizeWhenLongOrderIsRounded() { //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[_symbol]; @@ -190,9 +204,9 @@ public void OrderQuantityIsFlooredToNearestMultipleOfLotSizeWhenLongOrderIsRound _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); @@ -206,9 +220,9 @@ public void OrderQuantityIsFlooredToNearestMultipleOfLotSizeWhenLongOrderIsRound public void BrokerageOrderIdChanged() { //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var testBrokerage = new TestBroker(_algorithm, true); - transactionHandler.Initialize(_algorithm, testBrokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, testBrokerage, new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[_symbol]; @@ -220,14 +234,14 @@ public void BrokerageOrderIdChanged() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); - var originalBrokerageOrderId = transactionHandler.GetOrderById(orderTicket.OrderId).BrokerId; + var originalBrokerageOrderId = _transactionHandler.GetOrderById(orderTicket.OrderId).BrokerId; var orderIdChanged = new BrokerageOrderIdChangedEvent { OrderId = orderTicket.OrderId, BrokerId = new List { "asd" } }; testBrokerage.OnOrderIdChangedEventPublic(orderIdChanged); - var newBrokerageOrderId = transactionHandler.GetOrderById(orderTicket.OrderId).BrokerId; + var newBrokerageOrderId = _transactionHandler.GetOrderById(orderTicket.OrderId).BrokerId; Assert.AreNotEqual(originalBrokerageOrderId, newBrokerageOrderId); Assert.AreEqual(1, newBrokerageOrderId.Count); Assert.AreEqual("asd", newBrokerageOrderId[0]); @@ -237,9 +251,9 @@ public void BrokerageOrderIdChanged() public void OrderQuantityIsCeiledToNearestMultipleOfLotSizeWhenShortOrderIsRounded() { //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[_symbol]; @@ -251,9 +265,9 @@ public void OrderQuantityIsCeiledToNearestMultipleOfLotSizeWhenShortOrderIsRound _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); @@ -267,9 +281,9 @@ public void OrderQuantityIsCeiledToNearestMultipleOfLotSizeWhenShortOrderIsRound public void OrderIsNotPlacedWhenOrderIsLowerThanLotSize() { //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[_symbol]; @@ -281,9 +295,9 @@ public void OrderIsNotPlacedWhenOrderIsLowerThanLotSize() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // 600 after round off becomes 0 -> order is not placed Assert.IsTrue(orderRequest.Response.IsProcessed); @@ -295,9 +309,9 @@ public void OrderIsNotPlacedWhenOrderIsLowerThanLotSize() public void GetOpenOrderTicketsDoesWorksCorrectly() { //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[_symbol]; @@ -309,18 +323,18 @@ public void GetOpenOrderTicketsDoesWorksCorrectly() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); - var newTicket = transactionHandler.GetOpenOrderTickets(ticket => ticket.Symbol == security.Symbol).Single(); + var orderTicket = _transactionHandler.Process(orderRequest); + var newTicket = _transactionHandler.GetOpenOrderTickets(ticket => ticket.Symbol == security.Symbol).Single(); Assert.IsTrue(orderTicket.Status == OrderStatus.New); Assert.AreEqual(newTicket, orderTicket); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsFalse(orderRequest.Response.IsError); Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); - var processedTicket = transactionHandler.GetOpenOrderTickets(ticket => ticket.Symbol == security.Symbol).ToList(); + var processedTicket = _transactionHandler.GetOpenOrderTickets(ticket => ticket.Symbol == security.Symbol).ToList(); Assert.IsNotEmpty(processedTicket); } @@ -328,9 +342,9 @@ public void GetOpenOrderTicketsDoesWorksCorrectly() public void GetOpenOrderTicketsDoesNotReturnInvalidatedOrder() { //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[_symbol]; @@ -342,19 +356,19 @@ public void GetOpenOrderTicketsDoesNotReturnInvalidatedOrder() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); - var newTicket = transactionHandler.GetOpenOrderTickets(ticket => ticket.Symbol == security.Symbol).Single(); + var orderTicket = _transactionHandler.Process(orderRequest); + var newTicket = _transactionHandler.GetOpenOrderTickets(ticket => ticket.Symbol == security.Symbol).Single(); Assert.IsTrue(orderTicket.Status == OrderStatus.New); Assert.AreEqual(newTicket, orderTicket); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // 600 after round off becomes 0 -> order is not placed Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsError); Assert.IsTrue(orderTicket.Status == OrderStatus.Invalid); - var processedTicket = transactionHandler.GetOpenOrderTickets(ticket => ticket.Symbol == security.Symbol).ToList(); + var processedTicket = _transactionHandler.GetOpenOrderTickets(ticket => ticket.Symbol == security.Symbol).ToList(); Assert.IsEmpty(processedTicket); } @@ -377,9 +391,9 @@ public void DynamicIndexOptionPriceRoundeding(string indexOption, string orderPr //Initializes the transaction handler _algorithm.SetBrokerageModel(new DefaultBrokerageModel()); - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates the order var security = _algorithm.AddIndexOption(indexOption); @@ -393,9 +407,9 @@ public void DynamicIndexOptionPriceRoundeding(string indexOption, string orderPr _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); @@ -410,9 +424,9 @@ public void DynamicIndexOptionPriceRoundeding(string indexOption, string orderPr public void LimitOrderPriceIsRounded() { //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[_symbol]; @@ -426,9 +440,9 @@ public void LimitOrderPriceIsRounded() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); @@ -444,9 +458,9 @@ public void LimitOrderPriceIsRounded() public void StopMarketOrderPriceIsRounded() { //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates the order var security = _algorithm.Securities[_symbol]; @@ -460,9 +474,9 @@ public void StopMarketOrderPriceIsRounded() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); @@ -478,9 +492,9 @@ public void StopMarketOrderPriceIsRounded() public void TrailingStopOrderPriceIsRounded([Values] bool trailingAsPercentage) { //Initialize the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Create the order _algorithm.SetBrokerageModel(new DefaultBrokerageModel()); @@ -497,9 +511,9 @@ public void TrailingStopOrderPriceIsRounded([Values] bool trailingAsPercentage) _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.New); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); @@ -528,9 +542,9 @@ public void ComboLimitOrderPriceIsRounded(OrderType orderType, decimal groupOrde algorithm.SetFinishedWarmingUp(); //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(algorithm); - transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); var expectedGroupOrderLimitPrice = 0m; if (orderType == OrderType.ComboLimit) @@ -575,13 +589,13 @@ public void ComboLimitOrderPriceIsRounded(OrderType orderType, decimal groupOrde algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket1 = transactionHandler.Process(orderRequest1); + var orderTicket1 = _transactionHandler.Process(orderRequest1); Assert.AreEqual(OrderStatus.New, orderTicket1.Status); - transactionHandler.HandleOrderRequest(orderRequest1); + _transactionHandler.HandleOrderRequest(orderRequest1); - var orderTicket2 = transactionHandler.Process(orderRequest2); + var orderTicket2 = _transactionHandler.Process(orderRequest2); Assert.AreEqual(OrderStatus.New, orderTicket2.Status); - transactionHandler.HandleOrderRequest(orderRequest2); + _transactionHandler.HandleOrderRequest(orderRequest2); // Assert Assert.IsTrue(orderRequest1.Response.IsProcessed); @@ -601,9 +615,9 @@ public void ComboLimitOrderPriceIsRounded(OrderType orderType, decimal groupOrde public void OrderCancellationTransitionsThroughCancelPendingStatus() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -617,27 +631,27 @@ public void OrderCancellationTransitionsThroughCancelPendingStatus() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); // Cancel the order var cancelRequest = new CancelOrderRequest(DateTime.Now, orderTicket.OrderId, ""); - transactionHandler.Process(cancelRequest); + _transactionHandler.Process(cancelRequest); Assert.IsTrue(cancelRequest.Response.IsProcessed); Assert.IsTrue(cancelRequest.Response.IsSuccess); Assert.IsTrue(cancelRequest.Status == OrderRequestStatus.Processing); Assert.IsTrue(orderTicket.Status == OrderStatus.CancelPending); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 1); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 1); - transactionHandler.HandleOrderRequest(cancelRequest); + _transactionHandler.HandleOrderRequest(cancelRequest); Assert.IsTrue(cancelRequest.Response.IsProcessed); Assert.IsTrue(cancelRequest.Response.IsSuccess); Assert.IsTrue(cancelRequest.Status == OrderRequestStatus.Processed); Assert.IsTrue(orderTicket.Status == OrderStatus.Canceled); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 0); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 0); // Check CancelPending was sent Assert.AreEqual(_algorithm.OrderEvents.Count, 3); @@ -665,12 +679,12 @@ public void RoundsEquityLimitOrderPricesCorrectly(decimal securityPrice, decimal var security = algo.AddEquity("YGTY"); security.SetMarketPrice(new Tick { Value = securityPrice }); - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); var brokerage = new Mock(); - transactionHandler.Initialize(algo, brokerage.Object, null); + _transactionHandler.Initialize(algo, brokerage.Object, null); var order = new LimitOrder(security.Symbol, 1000, orderPrice, DateTime.UtcNow); - transactionHandler.RoundOrderPrices(order, security); + _transactionHandler.RoundOrderPrices(order, security); Assert.AreEqual(expected, order.LimitPrice); } @@ -688,14 +702,14 @@ public void RoundOff_Long_Fractional_Orders() var security = algo.AddSecurity(SecurityType.Crypto, "BTCUSD", Resolution.Hour, Market.Coinbase, false, 1m, true); //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(algo); - transactionHandler.Initialize(algo, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(algo, brokerage, new BacktestingResultHandler()); // Creates the order var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 123.123456789m, 0, 0, DateTime.Now, ""); var order = Order.CreateOrder(orderRequest); - var actual = transactionHandler.RoundOffOrder(order, security); + var actual = _transactionHandler.RoundOffOrder(order, security); Assert.AreEqual(123.12345678m, actual); } @@ -713,14 +727,14 @@ public void RoundOff_Short_Fractional_Orders() var security = algo.AddSecurity(SecurityType.Crypto, "BTCUSD", Resolution.Hour, Market.Coinbase, false, 1m, true); //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(algo); - transactionHandler.Initialize(algo, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(algo, brokerage, new BacktestingResultHandler()); // Creates the order var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, -123.123456789m, 0, 0, DateTime.Now, ""); var order = Order.CreateOrder(orderRequest); - var actual = transactionHandler.RoundOffOrder(order, security); + var actual = _transactionHandler.RoundOffOrder(order, security); Assert.AreEqual(-123.12345678m, actual); } @@ -738,14 +752,14 @@ public void RoundOff_LessThanLotSize_Fractional_Orders() var security = algo.AddSecurity(SecurityType.Crypto, "BTCUSD", Resolution.Hour, Market.Coinbase, false, 1m, true); //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(algo); - transactionHandler.Initialize(algo, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(algo, brokerage, new BacktestingResultHandler()); // Creates the order var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 0.000000009m, 0, 0, DateTime.Now, ""); var order = Order.CreateOrder(orderRequest); - var actual = transactionHandler.RoundOffOrder(order, security); + var actual = _transactionHandler.RoundOffOrder(order, security); Assert.AreEqual(0, actual); } @@ -753,19 +767,19 @@ public void RoundOff_LessThanLotSize_Fractional_Orders() [Test] public void InvalidUpdateOrderRequestShouldNotInvalidateCanceledOrder() { - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new NoSubmitTestBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); var security = _algorithm.Securities[_symbol]; var price = 1.12m; security.SetMarketPrice(new Tick(DateTime.Now, security.Symbol, price, price, price)); var orderRequest = new SubmitOrderRequest(OrderType.Limit, security.Type, security.Symbol, 1000, 0, 1.11m, DateTime.Now, ""); - _algorithm.Transactions.SetOrderProcessor(transactionHandler); + _algorithm.Transactions.SetOrderProcessor(_transactionHandler); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); @@ -774,8 +788,8 @@ public void InvalidUpdateOrderRequestShouldNotInvalidateCanceledOrder() Assert.AreEqual(OrderStatus.Submitted, orderTicket.Status); var updateRequest = new UpdateOrderRequest(DateTime.Now, orderTicket.OrderId, new UpdateOrderFields() { Quantity = 10000 }); - var updateTicket = transactionHandler.Process(updateRequest); - transactionHandler.HandleOrderRequest(updateRequest); + var updateTicket = _transactionHandler.Process(updateRequest); + _transactionHandler.HandleOrderRequest(updateRequest); Assert.AreEqual(OrderRequestStatus.Processed, updateRequest.Status); Assert.IsTrue(updateRequest.Response.IsSuccess); @@ -796,19 +810,19 @@ public void InvalidUpdateOrderRequestShouldNotInvalidateCanceledOrder() [Test] public void InvalidUpdateOrderRequestShouldNotInvalidateFilledOrder() { - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new NoSubmitTestBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); var security = _algorithm.Securities[_symbol]; var price = 1.12m; security.SetMarketPrice(new Tick(DateTime.Now, security.Symbol, price, price, price)); var orderRequest = new SubmitOrderRequest(OrderType.Limit, security.Type, security.Symbol, 1000, 0, 1.11m, DateTime.Now, ""); - _algorithm.Transactions.SetOrderProcessor(transactionHandler); + _algorithm.Transactions.SetOrderProcessor(_transactionHandler); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); @@ -817,8 +831,8 @@ public void InvalidUpdateOrderRequestShouldNotInvalidateFilledOrder() Assert.AreEqual(OrderStatus.Submitted, orderTicket.Status); var updateRequest = new UpdateOrderRequest(DateTime.Now, orderTicket.OrderId, new UpdateOrderFields() { Quantity = 10000 }); - var updateTicket = transactionHandler.Process(updateRequest); - transactionHandler.HandleOrderRequest(updateRequest); + var updateTicket = _transactionHandler.Process(updateRequest); + _transactionHandler.HandleOrderRequest(updateRequest); Assert.AreEqual(OrderRequestStatus.Processed, updateRequest.Status); Assert.IsTrue(updateRequest.Response.IsSuccess); @@ -844,9 +858,9 @@ public void InvalidUpdateOrderRequestShouldNotInvalidateFilledOrder() public void InvalidUpdateOrderRequestShouldNotInvalidateOrder() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); _algorithm.SetBrokerageModel(new TestBrokerageModel()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -860,19 +874,19 @@ public void InvalidUpdateOrderRequestShouldNotInvalidateOrder() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); var updateRequest = new UpdateOrderRequest(DateTime.Now, orderTicket.OrderId, new UpdateOrderFields()); - transactionHandler.Process(updateRequest); + _transactionHandler.Process(updateRequest); Assert.AreEqual(updateRequest.Status, OrderRequestStatus.Processing); Assert.IsTrue(updateRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); - transactionHandler.HandleOrderRequest(updateRequest); + _transactionHandler.HandleOrderRequest(updateRequest); Assert.IsFalse(updateRequest.Response.ErrorMessage.IsNullOrEmpty()); Assert.IsTrue(updateRequest.Response.IsError); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); @@ -886,9 +900,9 @@ public void InvalidUpdateOrderRequestShouldNotInvalidateOrder() public void UpdateOrderRequestShouldWork() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -902,19 +916,19 @@ public void UpdateOrderRequestShouldWork() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); var updateRequest = new UpdateOrderRequest(DateTime.Now, orderTicket.OrderId, new UpdateOrderFields()); - transactionHandler.Process(updateRequest); + _transactionHandler.Process(updateRequest); Assert.AreEqual(updateRequest.Status, OrderRequestStatus.Processing); Assert.IsTrue(updateRequest.Response.IsSuccess); Assert.AreEqual(OrderStatus.Submitted, orderTicket.Status); - transactionHandler.HandleOrderRequest(updateRequest); + _transactionHandler.HandleOrderRequest(updateRequest); Assert.IsTrue(updateRequest.Response.IsSuccess); Assert.AreEqual(OrderStatus.UpdateSubmitted, orderTicket.Status); @@ -927,10 +941,10 @@ public void UpdateOrderRequestShouldWork() public void UpdatePartiallyFilledOrderRequestShouldWork() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using (var broker = new BacktestingBrokerage(_algorithm)) { - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -948,8 +962,8 @@ public void UpdatePartiallyFilledOrderRequestShouldWork() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); @@ -958,12 +972,12 @@ public void UpdatePartiallyFilledOrderRequestShouldWork() Assert.AreEqual(orderTicket.Status, OrderStatus.PartiallyFilled); var updateRequest = new UpdateOrderRequest(DateTime.Now, orderTicket.OrderId, new UpdateOrderFields()); - transactionHandler.Process(updateRequest); + _transactionHandler.Process(updateRequest); Assert.AreEqual(updateRequest.Status, OrderRequestStatus.Processing); Assert.IsTrue(updateRequest.Response.IsSuccess); Assert.AreEqual(OrderStatus.PartiallyFilled, orderTicket.Status); - transactionHandler.HandleOrderRequest(updateRequest); + _transactionHandler.HandleOrderRequest(updateRequest); Assert.IsTrue(updateRequest.Response.IsSuccess); Assert.AreEqual(OrderStatus.UpdateSubmitted, orderTicket.Status); @@ -979,13 +993,13 @@ public void UpdatePartiallyFilledOrderRequestShouldWork() public void UpdateOrderRequestShouldFailForInvalidOrder() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; - _algorithm.Transactions.SetOrderProcessor(transactionHandler); + _algorithm.Transactions.SetOrderProcessor(_transactionHandler); var orderTicket = _algorithm.MarketOrder(security.Symbol, 1); Assert.AreEqual(orderTicket.Status, OrderStatus.Invalid); @@ -998,13 +1012,13 @@ public void UpdateOrderRequestShouldFailForInvalidOrder() public void CancelOrderRequestShouldFailForInvalidOrder() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; - _algorithm.Transactions.SetOrderProcessor(transactionHandler); + _algorithm.Transactions.SetOrderProcessor(_transactionHandler); var orderTicket = _algorithm.MarketOrder(security.Symbol, 1); Assert.AreEqual(orderTicket.Status, OrderStatus.Invalid); @@ -1017,9 +1031,9 @@ public void CancelOrderRequestShouldFailForInvalidOrder() public void UpdateOrderRequestShouldFailForFilledOrder() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -1033,8 +1047,8 @@ public void UpdateOrderRequestShouldFailForFilledOrder() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); @@ -1043,7 +1057,7 @@ public void UpdateOrderRequestShouldFailForFilledOrder() Assert.AreEqual(orderTicket.Status, OrderStatus.Filled); var updateRequest = new UpdateOrderRequest(DateTime.Now, orderTicket.OrderId, new UpdateOrderFields() { Quantity = 100 }); - transactionHandler.Process(updateRequest); + _transactionHandler.Process(updateRequest); Assert.AreEqual(updateRequest.Status, OrderRequestStatus.Error); Assert.IsTrue(updateRequest.Response.IsError); Assert.AreEqual(updateRequest.Response.ErrorCode, OrderResponseErrorCode.InvalidOrderStatus); @@ -1058,9 +1072,9 @@ public void UpdateOrderRequestShouldFailForFilledOrder() public void TagUpdateOrderRequestShouldSucceedForFilledOrder() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -1074,8 +1088,8 @@ public void TagUpdateOrderRequestShouldSucceedForFilledOrder() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); @@ -1084,7 +1098,7 @@ public void TagUpdateOrderRequestShouldSucceedForFilledOrder() Assert.AreEqual(orderTicket.Status, OrderStatus.Filled); var updateRequest = new UpdateOrderRequest(DateTime.Now, orderTicket.OrderId, new UpdateOrderFields() { Tag = "New tag" }); - transactionHandler.Process(updateRequest); + _transactionHandler.Process(updateRequest); Assert.AreEqual(updateRequest.Status, OrderRequestStatus.Processing); Assert.IsTrue(updateRequest.Response.IsSuccess); @@ -1097,9 +1111,9 @@ public void TagUpdateOrderRequestShouldSucceedForFilledOrder() public void UpdateOrderRequestShouldFailForNewOrderStatus() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new NoSubmitTestBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -1113,14 +1127,14 @@ public void UpdateOrderRequestShouldFailForNewOrderStatus() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.New); var updateRequest = new UpdateOrderRequest(DateTime.Now, orderTicket.OrderId, new UpdateOrderFields()); - transactionHandler.Process(updateRequest); + _transactionHandler.Process(updateRequest); Assert.AreEqual(updateRequest.Status, OrderRequestStatus.Error); Assert.IsTrue(updateRequest.Response.IsError); Assert.AreEqual(updateRequest.Response.ErrorCode, OrderResponseErrorCode.InvalidNewOrderStatus); @@ -1133,9 +1147,9 @@ public void UpdateOrderRequestShouldFailForNewOrderStatus() public void CancelOrderRequestShouldFailForNewOrderStatus() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new NoSubmitTestBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -1149,14 +1163,14 @@ public void CancelOrderRequestShouldFailForNewOrderStatus() _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.New); var cancelRequest = new CancelOrderRequest(DateTime.Now, orderTicket.OrderId, ""); - transactionHandler.Process(cancelRequest); + _transactionHandler.Process(cancelRequest); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Error); Assert.IsTrue(cancelRequest.Response.IsError); Assert.AreEqual(cancelRequest.Response.ErrorCode, OrderResponseErrorCode.InvalidNewOrderStatus); @@ -1168,19 +1182,19 @@ public void CancelOrderRequestShouldFailForNewOrderStatus() [Test] public void CancelOrderTicket() { - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new NoSubmitTestBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); var security = _algorithm.Securities[_symbol]; var price = 1.12m; security.SetMarketPrice(new Tick(DateTime.Now, security.Symbol, price, price, price)); var orderRequest = new SubmitOrderRequest(OrderType.Limit, security.Type, security.Symbol, 1000, 0, 1.11m, DateTime.Now, ""); - _algorithm.Transactions.SetOrderProcessor(transactionHandler); + _algorithm.Transactions.SetOrderProcessor(_transactionHandler); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.New); @@ -1210,9 +1224,9 @@ public void CancelOrderTicket() public void CancelOrderRequestShouldFailForFilledOrder() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); var security = _algorithm.Securities[_symbol]; var price = 1.12m; @@ -1224,15 +1238,15 @@ public void CancelOrderRequestShouldFailForFilledOrder() orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); broker.Scan(); Assert.AreEqual(orderTicket.Status, OrderStatus.Filled); var cancelRequest = new CancelOrderRequest(DateTime.Now, orderTicket.OrderId, ""); - transactionHandler.Process(cancelRequest); + _transactionHandler.Process(cancelRequest); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Error); Assert.IsTrue(cancelRequest.Response.IsError); Assert.AreEqual(cancelRequest.Response.ErrorCode, OrderResponseErrorCode.InvalidOrderStatus); @@ -1247,9 +1261,9 @@ public void CancelOrderRequestShouldFailForFilledOrder() public void SyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectly() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new TestBroker(_algorithm, false); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); var security = _algorithm.Securities[_symbol]; var price = 1.12m; @@ -1261,26 +1275,26 @@ public void SyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectly() orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); var cancelRequest = new CancelOrderRequest(DateTime.Now, orderTicket.OrderId, ""); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 0); - transactionHandler.Process(cancelRequest); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 1); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 0); + _transactionHandler.Process(cancelRequest); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 1); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Processing); Assert.IsTrue(cancelRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.CancelPending); - transactionHandler.HandleOrderRequest(cancelRequest); + _transactionHandler.HandleOrderRequest(cancelRequest); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Error); Assert.IsTrue(cancelRequest.Response.IsProcessed); Assert.IsTrue(cancelRequest.Response.IsError); Assert.IsTrue(cancelRequest.Response.ErrorMessage.Contains("Brokerage failed to cancel order")); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 0); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 0); Assert.AreEqual(_algorithm.OrderEvents.Count, 2); Assert.AreEqual(_algorithm.OrderEvents.Count(orderEvent => orderEvent.Status == OrderStatus.CancelPending), 1); Assert.AreEqual(_algorithm.OrderEvents.Count(orderEvent => orderEvent.Status == OrderStatus.Submitted), 1); @@ -1290,9 +1304,9 @@ public void SyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectly() public void AsyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectly() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new TestBroker(_algorithm, true); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); var security = _algorithm.Securities[_symbol]; var price = 1.12m; @@ -1304,28 +1318,28 @@ public void AsyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectly() orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); var cancelRequest = new CancelOrderRequest(DateTime.Now, orderTicket.OrderId, ""); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 0); - transactionHandler.Process(cancelRequest); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 1); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 0); + _transactionHandler.Process(cancelRequest); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 1); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Processing); Assert.IsTrue(cancelRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.CancelPending); - transactionHandler.HandleOrderRequest(cancelRequest); + _transactionHandler.HandleOrderRequest(cancelRequest); Assert.AreEqual(orderTicket.Status, OrderStatus.CancelPending); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Processed); Assert.IsTrue(cancelRequest.Response.IsProcessed); Assert.IsFalse(cancelRequest.Response.IsError); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 1); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 1); broker.Scan(); Assert.AreEqual(orderTicket.Status, OrderStatus.Filled); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 0); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 0); Assert.AreEqual(_algorithm.OrderEvents.Count, 3); Assert.AreEqual(_algorithm.OrderEvents.Count(orderEvent => orderEvent.Status == OrderStatus.CancelPending), 1); @@ -1337,9 +1351,9 @@ public void AsyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectly() public void AsyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectlyWithIntermediateUpdate() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new TestBroker(_algorithm, true); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); var security = _algorithm.Securities[_symbol]; var price = 1.12m; @@ -1351,14 +1365,14 @@ public void AsyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectlyWithInt orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); var cancelRequest = new CancelOrderRequest(DateTime.Now, orderTicket.OrderId, ""); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 0); - transactionHandler.Process(cancelRequest); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 1); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 0); + _transactionHandler.Process(cancelRequest); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 1); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Processing); Assert.IsTrue(cancelRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.CancelPending); @@ -1366,8 +1380,8 @@ public void AsyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectlyWithInt broker.Scan(); Assert.AreEqual(orderTicket.Status, OrderStatus.Filled); - transactionHandler.HandleOrderRequest(cancelRequest); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 0); + _transactionHandler.HandleOrderRequest(cancelRequest); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 0); Assert.AreEqual(orderTicket.Status, OrderStatus.Filled); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Error); Assert.IsTrue(cancelRequest.Response.IsProcessed); @@ -1384,9 +1398,9 @@ public void AsyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectlyWithInt public void SyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectlyWithIntermediateUpdate() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new TestBroker(_algorithm, false); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); var security = _algorithm.Securities[_symbol]; var price = 1.12m; @@ -1398,14 +1412,14 @@ public void SyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectlyWithInte orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); var cancelRequest = new CancelOrderRequest(DateTime.Now, orderTicket.OrderId, ""); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 0); - transactionHandler.Process(cancelRequest); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 1); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 0); + _transactionHandler.Process(cancelRequest); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 1); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Processing); Assert.IsTrue(cancelRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.CancelPending); @@ -1413,8 +1427,8 @@ public void SyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectlyWithInte broker.Scan(); Assert.AreEqual(orderTicket.Status, OrderStatus.Filled); - transactionHandler.HandleOrderRequest(cancelRequest); - Assert.AreEqual(transactionHandler.CancelPendingOrdersSize, 0); + _transactionHandler.HandleOrderRequest(cancelRequest); + Assert.AreEqual(_transactionHandler.CancelPendingOrdersSize, 0); Assert.AreEqual(orderTicket.Status, OrderStatus.Filled); Assert.AreEqual(cancelRequest.Status, OrderRequestStatus.Error); Assert.IsTrue(cancelRequest.Response.IsProcessed); @@ -1431,12 +1445,12 @@ public void SyncFailedCancelOrderRequestShouldUpdateOrderStatusCorrectlyWithInte public void UpdateOrderRequestShouldFailForInvalidOrderId() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); var updateRequest = new UpdateOrderRequest(DateTime.Now, -10, new UpdateOrderFields()); - transactionHandler.Process(updateRequest); + _transactionHandler.Process(updateRequest); Assert.AreEqual(updateRequest.Status, OrderRequestStatus.Error); Assert.IsTrue(updateRequest.Response.IsError); @@ -1447,9 +1461,9 @@ public void UpdateOrderRequestShouldFailForInvalidOrderId() public void GetOpenOrdersWorksForSubmittedFilledStatus() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -1462,27 +1476,27 @@ public void GetOpenOrdersWorksForSubmittedFilledStatus() orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - Assert.AreEqual(transactionHandler.GetOpenOrders().Count, 0); + Assert.AreEqual(_transactionHandler.GetOpenOrders().Count, 0); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.AreEqual(orderTicket.Status, OrderStatus.Submitted); - var openOrders = transactionHandler.GetOpenOrders(); + var openOrders = _transactionHandler.GetOpenOrders(); Assert.AreEqual(openOrders.Count, 1); Assert.AreEqual(openOrders[0].Id, orderTicket.OrderId); broker.Scan(); Assert.AreEqual(orderTicket.Status, OrderStatus.Filled); - Assert.AreEqual(transactionHandler.GetOpenOrders().Count, 0); + Assert.AreEqual(_transactionHandler.GetOpenOrders().Count, 0); } [Test] public void GetOpenOrdersWorksForCancelPendingCanceledStatus() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Creates a limit order var security = _algorithm.Securities[_symbol]; @@ -1495,50 +1509,50 @@ public void GetOpenOrdersWorksForCancelPendingCanceledStatus() orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - Assert.AreEqual(transactionHandler.GetOpenOrders().Count, 0); + Assert.AreEqual(_transactionHandler.GetOpenOrders().Count, 0); // Submit and process a limit order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); - var openOrders = transactionHandler.GetOpenOrders(); + var openOrders = _transactionHandler.GetOpenOrders(); Assert.AreEqual(openOrders.Count, 1); Assert.AreEqual(openOrders[0].Id, orderTicket.OrderId); // Cancel the order var cancelRequest = new CancelOrderRequest(DateTime.Now, orderTicket.OrderId, ""); - transactionHandler.Process(cancelRequest); + _transactionHandler.Process(cancelRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.CancelPending); - openOrders = transactionHandler.GetOpenOrders(); + openOrders = _transactionHandler.GetOpenOrders(); Assert.AreEqual(openOrders.Count, 1); Assert.AreEqual(openOrders[0].Id, orderTicket.OrderId); - transactionHandler.HandleOrderRequest(cancelRequest); + _transactionHandler.HandleOrderRequest(cancelRequest); Assert.IsTrue(orderTicket.Status == OrderStatus.Canceled); - Assert.AreEqual(transactionHandler.GetOpenOrders().Count, 0); + Assert.AreEqual(_transactionHandler.GetOpenOrders().Count, 0); } [Test] public void ProcessSynchronousEventsShouldPerformCashSyncOnce() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new TestBrokerage(); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); _algorithm.SetLiveMode(true); - var lastSyncDateBefore = transactionHandler.GetLastSyncDate(); + var lastSyncDateBefore = _transactionHandler.GetLastSyncDate(); // Advance current time UTC so cash sync is performed - transactionHandler.TestCurrentTimeUtc = transactionHandler.TestCurrentTimeUtc.AddDays(2); + _transactionHandler.TestCurrentTimeUtc = _transactionHandler.TestCurrentTimeUtc.AddDays(2); - transactionHandler.ProcessSynchronousEvents(); - var lastSyncDateAfter = transactionHandler.GetLastSyncDate(); + _transactionHandler.ProcessSynchronousEvents(); + var lastSyncDateAfter = _transactionHandler.GetLastSyncDate(); Assert.AreNotEqual(lastSyncDateAfter, lastSyncDateBefore); - transactionHandler.ProcessSynchronousEvents(); - var lastSyncDateAfterAgain = transactionHandler.GetLastSyncDate(); + _transactionHandler.ProcessSynchronousEvents(); + var lastSyncDateAfterAgain = _transactionHandler.GetLastSyncDate(); Assert.AreEqual(lastSyncDateAfter, lastSyncDateAfterAgain); Assert.AreEqual(1, brokerage.GetCashBalanceCallCount); @@ -1548,28 +1562,28 @@ public void ProcessSynchronousEventsShouldPerformCashSyncOnce() public void OrderFillShouldTriggerRePerformingCashSync() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new TestBrokerage(); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); _algorithm.SetLiveMode(true); - var lastSyncDateBefore = transactionHandler.GetLastSyncDate(); + var lastSyncDateBefore = _transactionHandler.GetLastSyncDate(); // Advance current time UTC so cash sync is performed - transactionHandler.TestCurrentTimeUtc = transactionHandler.TestCurrentTimeUtc.AddDays(2); + _transactionHandler.TestCurrentTimeUtc = _transactionHandler.TestCurrentTimeUtc.AddDays(2); // update last fill time - transactionHandler.TestTimeSinceLastFill = TimeSpan.FromSeconds(15); + _transactionHandler.TestTimeSinceLastFill = TimeSpan.FromSeconds(15); - transactionHandler.ProcessSynchronousEvents(); - var lastSyncDateAfter = transactionHandler.GetLastSyncDate(); + _transactionHandler.ProcessSynchronousEvents(); + var lastSyncDateAfter = _transactionHandler.GetLastSyncDate(); // cash sync happened Assert.AreNotEqual(lastSyncDateAfter, lastSyncDateBefore); var count = 0; - while (!brokerage.ShouldPerformCashSync(transactionHandler.TestCurrentTimeUtc)) + while (!brokerage.ShouldPerformCashSync(_transactionHandler.TestCurrentTimeUtc)) { count++; if (count > 40) @@ -1579,7 +1593,7 @@ public void OrderFillShouldTriggerRePerformingCashSync() // delayed task should take ~10 seconds to set the perform cash sync flag up, due to TimeSinceLastFill Thread.Sleep(1000); } - transactionHandler.ProcessSynchronousEvents(); + _transactionHandler.ProcessSynchronousEvents(); Assert.AreEqual(2, brokerage.GetCashBalanceCallCount); } @@ -1588,22 +1602,22 @@ public void OrderFillShouldTriggerRePerformingCashSync() public void ProcessSynchronousEventsShouldPerformCashSyncOnlyAtExpectedTime() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new TestBrokerage(); // This is 2 am New York - transactionHandler.TestCurrentTimeUtc = new DateTime(1, 1, 1, 7, 0, 0); + _transactionHandler.TestCurrentTimeUtc = new DateTime(1, 1, 1, 7, 0, 0); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); _algorithm.SetLiveMode(true); - var lastSyncDateBefore = transactionHandler.GetLastSyncDate(); + var lastSyncDateBefore = _transactionHandler.GetLastSyncDate(); // Advance current time UTC - transactionHandler.TestCurrentTimeUtc = transactionHandler.TestCurrentTimeUtc.AddDays(2); + _transactionHandler.TestCurrentTimeUtc = _transactionHandler.TestCurrentTimeUtc.AddDays(2); - transactionHandler.ProcessSynchronousEvents(); - var lastSyncDateAfter = transactionHandler.GetLastSyncDate(); + _transactionHandler.ProcessSynchronousEvents(); + var lastSyncDateAfter = _transactionHandler.GetLastSyncDate(); Assert.AreEqual(lastSyncDateAfter, lastSyncDateBefore); @@ -1632,14 +1646,14 @@ public void EmptyCashBalanceIsValid() algorithm.SetLiveMode(true); algorithm.SetFinishedWarmingUp(); - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); var resultHandler = new TestResultHandler(); - transactionHandler.Initialize(algorithm, brokerage, resultHandler); + _transactionHandler.Initialize(algorithm, brokerage, resultHandler); // Advance current time UTC so cash sync is performed - transactionHandler.TestCurrentTimeUtc = transactionHandler.TestCurrentTimeUtc.AddDays(2); + _transactionHandler.TestCurrentTimeUtc = _transactionHandler.TestCurrentTimeUtc.AddDays(2); - transactionHandler.ProcessSynchronousEvents(); + _transactionHandler.ProcessSynchronousEvents(); resultHandler.Exit(); @@ -1680,18 +1694,18 @@ public void DoesNotLoopEndlesslyIfGetCashBalanceAlwaysThrows() algorithm.SetLiveMode(true); algorithm.SetFinishedWarmingUp(); - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); var resultHandler = new TestResultHandler(); - transactionHandler.Initialize(algorithm, brokerage, resultHandler); + _transactionHandler.Initialize(algorithm, brokerage, resultHandler); // Advance current time UTC so cash sync is performed - transactionHandler.TestCurrentTimeUtc = transactionHandler.TestCurrentTimeUtc.AddDays(2); + _transactionHandler.TestCurrentTimeUtc = _transactionHandler.TestCurrentTimeUtc.AddDays(2); try { while (true) { - transactionHandler.ProcessSynchronousEvents(); + _transactionHandler.ProcessSynchronousEvents(); Assert.IsFalse(brokerage.IsConnected); @@ -1723,16 +1737,23 @@ public void AddOrderWaitsForOrderToBeProcessed() // lets wait until the transactionHandler starts running Thread.Sleep(250); - algorithm.Transactions.SetOrderProcessor(transactionHandler); + try + { + algorithm.Transactions.SetOrderProcessor(transactionHandler); - var ticket = algorithm.LimitOrder(security.Symbol, 1, 100); + var ticket = algorithm.LimitOrder(security.Symbol, 1, 100); - var openOrders = algorithm.Transactions.GetOpenOrders(); + var openOrders = algorithm.Transactions.GetOpenOrders(); - transactionHandler.Exit(); + transactionHandler.Exit(); - Assert.AreEqual(1, openOrders.Count); - Assert.IsTrue(ticket.HasOrder); + Assert.AreEqual(1, openOrders.Count); + Assert.IsTrue(ticket.HasOrder); + } + finally + { + transactionHandler.Exit(); + } } [Test, Parallelizable(ParallelScope.None)] @@ -1756,10 +1777,10 @@ public void IncrementalOrderId() public void InvalidOrderEventDueToNonShortableAsset() { // Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new TestBroker(_algorithm, false); _algorithm.SetBrokerageModel(new TestShortableBrokerageModel()); - transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, broker, new BacktestingResultHandler()); var security = _algorithm.Securities[_symbol]; var price = 1.12m; @@ -1771,8 +1792,8 @@ public void InvalidOrderEventDueToNonShortableAsset() orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(_algorithm.Transactions, orderRequest)); _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.AreEqual(orderTicket.Status, OrderStatus.Invalid); Assert.AreEqual(_algorithm.OrderEvents.Count, 1); Assert.AreEqual(_algorithm.OrderEvents.Count(orderEvent => orderEvent.Status == OrderStatus.Invalid), 1); @@ -1818,15 +1839,15 @@ string expectedMessage equity.SetMarketPrice(new Tick { Value = underlyingPrice }); using var brokerage = new NoSubmitTestBrokerage(algorithm); - var transactionHandler = new TestBrokerageTransactionHandler(); - transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); - algorithm.Transactions.SetOrderProcessor(transactionHandler); + _transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); + algorithm.Transactions.SetOrderProcessor(_transactionHandler); // 9 PM ET - transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 9, 1, 0, 0); + _transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 9, 1, 0, 0); var parameters = new object[] { new OptionNotificationEventArgs(optionSymbol, 0) }; - _handleOptionNotification.Invoke(transactionHandler, parameters); + _handleOptionNotification.Invoke(_transactionHandler, parameters); var tickets = algorithm.Transactions.GetOrderTickets().ToList(); Assert.AreEqual(1, tickets.Count); @@ -1844,8 +1865,8 @@ string expectedMessage Assert.AreEqual(expectedOptionPosition, algorithm.Portfolio[optionSymbol].Quantity); // let's push the same event again - _handleOptionNotification.Invoke(transactionHandler, parameters); - transactionHandler.Exit(); + _handleOptionNotification.Invoke(_transactionHandler, parameters); + _transactionHandler.Exit(); // we should not see any new orders or events come through tickets = algorithm.Transactions.GetOrderTickets().ToList(); @@ -1884,26 +1905,26 @@ string expectedMessage equity.SetMarketPrice(new Tick { Value = underlyingPrice }); using var brokerage = new NoSubmitTestBrokerage(algorithm); - var transactionHandler = new TestBrokerageTransactionHandler(); - transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); - algorithm.Transactions.SetOrderProcessor(transactionHandler); + _transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); + algorithm.Transactions.SetOrderProcessor(_transactionHandler); // 10 AM ET - transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); + _transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); // Creates an exercise order var exerciseQuantity = initialOptionPosition - expectedOptionPosition; - var orderRequest = new SubmitOrderRequest(OrderType.OptionExercise, option.Type, option.Symbol, -exerciseQuantity, 0, 0, transactionHandler.TestCurrentTimeUtc, ""); + var orderRequest = new SubmitOrderRequest(OrderType.OptionExercise, option.Type, option.Symbol, -exerciseQuantity, 0, 0, _transactionHandler.TestCurrentTimeUtc, ""); // Submit and process the exercise order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.New); var parameters = new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }; - _handleOptionNotification.Invoke(transactionHandler, parameters); + _handleOptionNotification.Invoke(_transactionHandler, parameters); var tickets = algorithm.Transactions.GetOrderTickets().ToList(); Assert.AreEqual(1, tickets.Count); @@ -1918,8 +1939,8 @@ string expectedMessage Assert.AreEqual(expectedOptionPosition, algorithm.Portfolio[optionSymbol].Quantity); // let's push the same event again - _handleOptionNotification.Invoke(transactionHandler, parameters); - transactionHandler.Exit(); + _handleOptionNotification.Invoke(_transactionHandler, parameters); + _transactionHandler.Exit(); // we should not see any new orders or events come through tickets = algorithm.Transactions.GetOrderTickets().ToList(); @@ -1957,33 +1978,33 @@ string expectedMessage equity.SetMarketPrice(new Tick { Value = underlyingPrice }); using var brokerage = new NoSubmitTestBrokerage(algorithm); - var transactionHandler = new TestBrokerageTransactionHandler(); - transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); - algorithm.Transactions.SetOrderProcessor(transactionHandler); + _transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); + algorithm.Transactions.SetOrderProcessor(_transactionHandler); // 10 AM ET - transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); + _transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); // Creates an exercise order var exerciseQuantity = initialOptionPosition - expectedOptionPosition; - var orderRequest = new SubmitOrderRequest(OrderType.OptionExercise, option.Type, option.Symbol, -exerciseQuantity, 0, 0, transactionHandler.TestCurrentTimeUtc, ""); + var orderRequest = new SubmitOrderRequest(OrderType.OptionExercise, option.Type, option.Symbol, -exerciseQuantity, 0, 0, _transactionHandler.TestCurrentTimeUtc, ""); // Submit and process the exercise order - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.IsTrue(orderRequest.Response.IsProcessed); Assert.IsTrue(orderRequest.Response.IsSuccess); Assert.AreEqual(orderTicket.Status, OrderStatus.New); // Fill the exercise order - brokerage.PublishOrderEvent(new OrderEvent(orderTicket.OrderId, option.Symbol, transactionHandler.TestCurrentTimeUtc, + brokerage.PublishOrderEvent(new OrderEvent(orderTicket.OrderId, option.Symbol, _transactionHandler.TestCurrentTimeUtc, OrderStatus.Filled, OrderDirection.Sell, 0, orderRequest.Quantity, OrderFee.Zero)); Assert.IsTrue(orderTicket.Status.IsClosed()); var tickets = algorithm.Transactions.GetOrderTickets().ToList(); Assert.AreEqual(1, tickets.Count); - _handleOptionNotification.Invoke(transactionHandler, new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }); + _handleOptionNotification.Invoke(_transactionHandler, new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }); // assert nothing happens! tickets = algorithm.Transactions.GetOrderTickets().ToList(); @@ -2021,15 +2042,15 @@ int expectedUnderlyingPosition equity.SetMarketPrice(new Tick { Value = underlyingPrice }); using var brokerage = new NoSubmitTestBrokerage(algorithm); - var transactionHandler = new TestBrokerageTransactionHandler(); - transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); - algorithm.Transactions.SetOrderProcessor(transactionHandler); + _transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); + algorithm.Transactions.SetOrderProcessor(_transactionHandler); // 10 AM ET - transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); + _transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); var parameters = new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }; - _handleOptionNotification.Invoke(transactionHandler, parameters); + _handleOptionNotification.Invoke(_transactionHandler, parameters); var tickets = algorithm.Transactions.GetOrderTickets().ToList(); Assert.AreEqual(1, tickets.Count); @@ -2043,8 +2064,8 @@ int expectedUnderlyingPosition Assert.AreEqual(expectedOptionPosition, algorithm.Portfolio[optionSymbol].Quantity); // let's push the same event again - _handleOptionNotification.Invoke(transactionHandler, parameters); - transactionHandler.Exit(); + _handleOptionNotification.Invoke(_transactionHandler, parameters); + _transactionHandler.Exit(); // we should not see any new orders or events come through tickets = algorithm.Transactions.GetOrderTickets().ToList(); @@ -2082,18 +2103,18 @@ int expectedUnderlyingPosition equity.SetMarketPrice(new Tick { Value = underlyingPrice }); using var brokerage = new NoSubmitTestBrokerage(algorithm); - var transactionHandler = new TestBrokerageTransactionHandler(); - transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); - algorithm.Transactions.SetOrderProcessor(transactionHandler); + _transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); + algorithm.Transactions.SetOrderProcessor(_transactionHandler); // 10 AM ET - transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); + _transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); // Creates a market order - var orderTime = transactionHandler.TestCurrentTimeUtc.AddMinutes(-10); + var orderTime = _transactionHandler.TestCurrentTimeUtc.AddMinutes(-10); var orderRequest = new SubmitOrderRequest(OrderType.Market, option.Type, option.Symbol, 1, 0, 0, orderTime, ""); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.AreEqual(1, algorithm.Transactions.GetOrderTickets().Count()); @@ -2105,7 +2126,7 @@ int expectedUnderlyingPosition Assert.AreEqual(1, algorithm.Transactions.GetOrderTickets().Count()); var parameters = new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }; - _handleOptionNotification.Invoke(transactionHandler, parameters); + _handleOptionNotification.Invoke(_transactionHandler, parameters); var tickets = algorithm.Transactions.GetOrderTickets().ToList(); Assert.AreEqual(2, tickets.Count); @@ -2158,39 +2179,39 @@ OrderDirection orderDirection equity.SetMarketPrice(new Tick { Value = underlyingPrice }); using var brokerage = new NoSubmitTestBrokerage(algorithm); - var transactionHandler = new TestBrokerageTransactionHandler(); - transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); - algorithm.Transactions.SetOrderProcessor(transactionHandler); + _transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); + algorithm.Transactions.SetOrderProcessor(_transactionHandler); // 10 AM ET - transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); + _transactionHandler.TestCurrentTimeUtc = new DateTime(2021, 9, 8, 14, 0, 0); // Creates a market order - var orderRequest = new SubmitOrderRequest(OrderType.Market, option.Type, option.Symbol, orderDirection == OrderDirection.Buy ? 1 : -1, 0, 0, transactionHandler.TestCurrentTimeUtc, ""); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); + var orderRequest = new SubmitOrderRequest(OrderType.Market, option.Type, option.Symbol, orderDirection == OrderDirection.Buy ? 1 : -1, 0, 0, _transactionHandler.TestCurrentTimeUtc, ""); + var orderTicket = _transactionHandler.Process(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); Assert.AreEqual(1, algorithm.Transactions.GetOrderTickets().Count()); - _handleOptionNotification.Invoke(transactionHandler, new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }); + _handleOptionNotification.Invoke(_transactionHandler, new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }); // we expect no difference because there is an open market order! Assert.AreEqual(1, algorithm.Transactions.GetOrderTickets().Count()); // Fill the order - brokerage.PublishOrderEvent(new OrderEvent(orderTicket.OrderId, option.Symbol, transactionHandler.TestCurrentTimeUtc, + brokerage.PublishOrderEvent(new OrderEvent(orderTicket.OrderId, option.Symbol, _transactionHandler.TestCurrentTimeUtc, OrderStatus.Filled, orderDirection, 10, orderRequest.Quantity, OrderFee.Zero)); Assert.IsTrue(orderTicket.Status.IsClosed()); - _handleOptionNotification.Invoke(transactionHandler, new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }); + _handleOptionNotification.Invoke(_transactionHandler, new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }); // we expect no difference because there is a closed market order! Assert.AreEqual(1, algorithm.Transactions.GetOrderTickets().Count()); // Timeout the order effect - transactionHandler.TestCurrentTimeUtc = transactionHandler.TestCurrentTimeUtc.AddMinutes(1); + _transactionHandler.TestCurrentTimeUtc = _transactionHandler.TestCurrentTimeUtc.AddMinutes(1); - _handleOptionNotification.Invoke(transactionHandler, new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }); + _handleOptionNotification.Invoke(_transactionHandler, new object[] { new OptionNotificationEventArgs(optionSymbol, expectedOptionPosition) }); // we expect difference because market order is old! Assert.AreEqual(2, algorithm.Transactions.GetOrderTickets().Count()); @@ -2207,9 +2228,9 @@ public void OrderPriceAdjustmentModeIsSetAfterPlacingOrder(DataNormalizationMode _algorithm.SetLiveMode(liveMode); //Initializes the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new BacktestingBrokerage(_algorithm); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Add the security var security = _algorithm.AddSecurity(SecurityType.Forex, "CADUSD", dataNormalizationMode: dataNormalizationMode); @@ -2228,9 +2249,9 @@ public void OrderPriceAdjustmentModeIsSetAfterPlacingOrder(DataNormalizationMode _algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); // Act - var orderTicket = transactionHandler.Process(orderRequest); + var orderTicket = _transactionHandler.Process(orderRequest); Assert.AreEqual(OrderStatus.New, orderTicket.Status); - transactionHandler.HandleOrderRequest(orderRequest); + _transactionHandler.HandleOrderRequest(orderRequest); // Assert Assert.IsTrue(orderRequest.Response.IsProcessed); @@ -2238,7 +2259,7 @@ public void OrderPriceAdjustmentModeIsSetAfterPlacingOrder(DataNormalizationMode Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); var expectedNormalizationMode = liveMode ? DataNormalizationMode.Raw : dataNormalizationMode; - Assert.AreEqual(expectedNormalizationMode, transactionHandler.GetOrderById(orderTicket.OrderId).PriceAdjustmentMode); + Assert.AreEqual(expectedNormalizationMode, _transactionHandler.GetOrderById(orderTicket.OrderId).PriceAdjustmentMode); } [TestCaseSource(nameof(PriceAdjustmentModeTestCases))] @@ -2248,9 +2269,9 @@ public void OrderPriceAdjustmentModeIsSetWhenAddingOpenOrder(DataNormalizationMo // The engine might fetch brokerage open orders before even initializing the transaction handler, // so let's not initialize it here to simulate that scenario - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new TestingBrokerage(); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); // Add the security var security = _algorithm.AddSecurity(SecurityType.Forex, "CADUSD", dataNormalizationMode: dataNormalizationMode); @@ -2265,13 +2286,13 @@ public void OrderPriceAdjustmentModeIsSetWhenAddingOpenOrder(DataNormalizationMo var order = Order.CreateOrder(orderRequest); // Act - transactionHandler.AddOpenOrder(order, _algorithm); + _transactionHandler.AddOpenOrder(order, _algorithm); // Assert Assert.Greater(order.Id, 0); var expectedNormalizationMode = liveMode ? DataNormalizationMode.Raw : dataNormalizationMode; - Assert.AreEqual(expectedNormalizationMode, transactionHandler.GetOrderById(order.Id).PriceAdjustmentMode); + Assert.AreEqual(expectedNormalizationMode, _transactionHandler.GetOrderById(order.Id).PriceAdjustmentMode); } private static TestCaseData[] BrokerageSideOrdersTestCases => new[] @@ -2325,9 +2346,9 @@ private static Order GetOrder(OrderType type, Symbol symbol) public void NewBrokerageOrdersAreFiltered(OrderType orderType, bool accepted) { //Initialize the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new TestingBrokerage(); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); _algorithm.SetBrokerageModel(new DefaultBrokerageModel()); var brokerageMessageHandler = new TestBrokerageMessageHandler(); @@ -2339,16 +2360,16 @@ public void NewBrokerageOrdersAreFiltered(OrderType orderType, bool accepted) Assert.AreEqual(orderType, order.Type); brokerage.OnNewBrokerageOrder(new NewBrokerageOrderNotificationEventArgs(order)); Assert.AreEqual(accepted, brokerageMessageHandler.LastHandleOrderResult); - Assert.AreEqual(accepted ? 1 : 0, transactionHandler.OrdersCount); + Assert.AreEqual(accepted ? 1 : 0, _transactionHandler.OrdersCount); } [Test] public void UnrequestedSecuritiesAreAddedForNewBrokerageSideOrders() { //Initialize the transaction handler - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new TestingBrokerage(); - transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(_algorithm, brokerage, new BacktestingResultHandler()); _algorithm.SetBrokerageModel(new DefaultBrokerageModel()); var brokerageMessageHandler = new TestBrokerageMessageHandler(); @@ -2360,7 +2381,7 @@ public void UnrequestedSecuritiesAreAddedForNewBrokerageSideOrders() var order = GetOrder(OrderType.Market, symbol); brokerage.OnNewBrokerageOrder(new NewBrokerageOrderNotificationEventArgs(order)); Assert.IsTrue(brokerageMessageHandler.LastHandleOrderResult); - Assert.AreEqual(1, transactionHandler.OrdersCount); + Assert.AreEqual(1, _transactionHandler.OrdersCount); Assert.IsTrue(_algorithm.Securities.TryGetValue(symbol, out var security)); Assert.AreEqual(symbol, security.Symbol); @@ -2376,30 +2397,38 @@ public void ProcessesOrdersConcurrently() using var finishedEvent = new ManualResetEventSlim(false); var transactionHandler = new TestableConcurrentBrokerageTransactionHandler(expectedOrdersCount, finishedEvent); transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); - algorithm.Transactions.SetOrderProcessor(transactionHandler); + + try + { + algorithm.Transactions.SetOrderProcessor(transactionHandler); - var security = (Security)algorithm.AddEquity("SPY"); - algorithm.SetFinishedWarmingUp(); + var security = (Security)algorithm.AddEquity("SPY"); + algorithm.SetFinishedWarmingUp(); - // Set up security - var reference = new DateTime(2025, 07, 03, 10, 0, 0); - security.SetMarketPrice(new Tick(reference, security.Symbol, 300, 300)); + // Set up security + var reference = new DateTime(2025, 07, 03, 10, 0, 0); + security.SetMarketPrice(new Tick(reference, security.Symbol, 300, 300)); - // Creates the order - var orderRequests = Enumerable.Range(0, expectedOrdersCount).Select(_ => MakeOrderRequest(security, OrderType.Market, reference)).ToList(); + // Creates the order + var orderRequests = Enumerable.Range(0, expectedOrdersCount).Select(_ => MakeOrderRequest(security, OrderType.Market, reference)).ToList(); - // Act - for (var i = 0; i < orderRequests.Count; i++) + // Act + for (var i = 0; i < orderRequests.Count; i++) + { + var orderRequest = orderRequests[i]; + orderRequest.SetOrderId(i + 1); + transactionHandler.Process(orderRequest); + } + + // Wait for all orders to be processed + Assert.IsTrue(finishedEvent.Wait(10000)); + Assert.Greater(transactionHandler.ProcessingThreadNames.Count, 1); + CollectionAssert.AreEquivalent(orderRequests.Select(x => x.ToString()), transactionHandler.ProcessedRequests.Select(x => x.ToString())); + } + finally { - var orderRequest = orderRequests[i]; - orderRequest.SetOrderId(i + 1); - transactionHandler.Process(orderRequest); + transactionHandler.Exit(); } - - // Wait for all orders to be processed - Assert.IsTrue(finishedEvent.Wait(10000)); - Assert.Greater(transactionHandler.ProcessingThreadNames.Count, 1); - CollectionAssert.AreEquivalent(orderRequests.Select(x => x.ToString()), transactionHandler.ProcessedRequests.Select(x => x.ToString())); } [TestCase("OnAccountChanged")] @@ -2417,9 +2446,9 @@ public void BrokerageTransactionHandlerDoesNotProcessEventsWhenAlgorithmIsStoppe algorithm.SetBrokerageMessageHandler(new TestBrokerageMessageHandler()); // Initialize the transaction handler and brokerage - var transactionHandler = new TestBrokerageTransactionHandler(); + _transactionHandler = new TestBrokerageTransactionHandler(); using var brokerage = new EventEmittingBrokerage(algorithm); - transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); + _transactionHandler.Initialize(algorithm, brokerage, new BacktestingResultHandler()); // Set up option security and add a submitted order algorithm.AddOption("SPY"); @@ -2431,9 +2460,9 @@ public void BrokerageTransactionHandlerDoesNotProcessEventsWhenAlgorithmIsStoppe Id = 1, BrokerId = new List { "1" } }; - transactionHandler.AddOpenOrder(orderRequest, algorithm); + _transactionHandler.AddOpenOrder(orderRequest, algorithm); // Order status should be Submitted - Assert.AreEqual(OrderStatus.Submitted, transactionHandler.GetOrdersByBrokerageId(1)[0].Status); + Assert.AreEqual(OrderStatus.Submitted, _transactionHandler.GetOrdersByBrokerageId(1)[0].Status); // Stop the algorithm algorithm.Status = AlgorithmStatus.Stopped; @@ -2450,7 +2479,7 @@ public void BrokerageTransactionHandlerDoesNotProcessEventsWhenAlgorithmIsStoppe case "OnOptionNotification": brokerage.CreateOptionNotificationEvent(new OptionNotificationEventArgs(option.Symbol, 5)); // Order status should still be Submitted - Assert.AreEqual(OrderStatus.Submitted, transactionHandler.GetOrdersByBrokerageId(1)[0].Status); + Assert.AreEqual(OrderStatus.Submitted, _transactionHandler.GetOrdersByBrokerageId(1)[0].Status); break; case "OnNewBrokerageOrderNotification": @@ -2461,7 +2490,7 @@ public void BrokerageTransactionHandlerDoesNotProcessEventsWhenAlgorithmIsStoppe }; brokerage.CreateNewBrokerageOrderNotificationEvent(new NewBrokerageOrderNotificationEventArgs(order)); // No new orders should have been added - Assert.AreEqual(1, transactionHandler.GetOrdersByBrokerageId(1).Count); + Assert.AreEqual(1, _transactionHandler.GetOrdersByBrokerageId(1).Count); break; case "OnOrderIdChanged": @@ -2471,9 +2500,9 @@ public void BrokerageTransactionHandlerDoesNotProcessEventsWhenAlgorithmIsStoppe BrokerId = new List { "2" } }); // No order should exist under the new broker ID - Assert.AreEqual(0, transactionHandler.GetOrdersByBrokerageId(2).Count); + Assert.AreEqual(0, _transactionHandler.GetOrdersByBrokerageId(2).Count); // Original broker ID should remain unchanged - Assert.AreEqual("1", transactionHandler.GetOrdersByBrokerageId(1)[0].BrokerId[0]); + Assert.AreEqual("1", _transactionHandler.GetOrdersByBrokerageId(1)[0].BrokerId[0]); break; case "OnOrderUpdated": @@ -2483,9 +2512,9 @@ public void BrokerageTransactionHandlerDoesNotProcessEventsWhenAlgorithmIsStoppe BrokerId = new List { "1" }, StopTriggered = false }; - transactionHandler.AddOpenOrder(stopLimitOrder, algorithm); + _transactionHandler.AddOpenOrder(stopLimitOrder, algorithm); brokerage.CreateOrderUpdatedEvent(new OrderUpdateEvent { OrderId = 2, StopTriggered = true }); - var updatedStopLimitOrder = (StopLimitOrder)transactionHandler + var updatedStopLimitOrder = (StopLimitOrder)_transactionHandler .GetOrdersByBrokerageId(1) .First(e => e.Id == 2); // StopTriggered flag should remain false diff --git a/Tests/Engine/DataFeeds/BaseDataExchangeTests.cs b/Tests/Engine/DataFeeds/BaseDataExchangeTests.cs index 05d5f5dd9701..fbac392abaf0 100644 --- a/Tests/Engine/DataFeeds/BaseDataExchangeTests.cs +++ b/Tests/Engine/DataFeeds/BaseDataExchangeTests.cs @@ -74,10 +74,15 @@ public void EndsQueueConsumption() using var finishedRunning = new AutoResetEvent(false); Task.Run(() => { exchange.Start(); finishedRunning.Set(); } ); - Assert.IsTrue(lastUpdated.WaitOne(DefaultTimeout)); - - exchange.Stop(); - cancellationToken.Cancel(); + try + { + Assert.IsTrue(lastUpdated.WaitOne(DefaultTimeout)); + } + finally + { + exchange.Stop(); + cancellationToken.Cancel(); + } Assert.IsTrue(finishedRunning.WaitOne(DefaultTimeout)); @@ -119,11 +124,16 @@ public void DefaultErrorHandlerDoesNotStopQueueConsumption() Task.Run(() => exchange.Start()); - Assert.IsTrue(lastUpdated.WaitOne(DefaultTimeout)); - - exchange.Stop(); - cancellationToken.Cancel(); - enqueable.Dispose(); + try + { + Assert.IsTrue(lastUpdated.WaitOne(DefaultTimeout)); + } + finally + { + exchange.Stop(); + cancellationToken.Cancel(); + enqueable.Dispose(); + } } [Test] @@ -164,14 +174,17 @@ public void SetErrorHandlerExitsOnTrueReturn() Task.Run(() => exchange.Start()); - Assert.IsTrue(errorCaught.WaitOne(DefaultTimeout)); - - exchange.Stop(); - - Assert.IsNull(last); - - enqueable.Dispose(); - cancellationToken.Cancel(); + try + { + Assert.IsTrue(errorCaught.WaitOne(DefaultTimeout)); + Assert.IsNull(last); + } + finally + { + exchange.Stop(); + enqueable.Dispose(); + cancellationToken.Cancel(); + } } [Test] @@ -189,10 +202,15 @@ public void RespectsShouldMoveNext() isCompletedEvent.Set(); }); - isCompletedEvent.WaitOne(); - Assert.IsFalse(isFaultedEvent.WaitOne(0)); - - exchange.Stop(); + try + { + isCompletedEvent.WaitOne(); + Assert.IsFalse(isFaultedEvent.WaitOne(0)); + } + finally + { + exchange.Stop(); + } } [Test] diff --git a/Tests/Engine/RealTime/LiveTradingRealTimeHandlerTests.cs b/Tests/Engine/RealTime/LiveTradingRealTimeHandlerTests.cs index 3560230fc60f..6cd4210b50b5 100644 --- a/Tests/Engine/RealTime/LiveTradingRealTimeHandlerTests.cs +++ b/Tests/Engine/RealTime/LiveTradingRealTimeHandlerTests.cs @@ -131,38 +131,45 @@ public void ResetMarketHoursCorrectly() var transactionHandler = new TestBrokerageTransactionHandler(); using var broker = new BacktestingBrokerage(algorithm); transactionHandler.Initialize(algorithm, broker, new BacktestingResultHandler()); + var realTimeHandler = new TestLiveTradingRealTimeHandlerReset(); - // Creates a market order - security.SetMarketPrice(new TradeBar(new DateTime(2023, 5, 30), symbol, 280m, 280m, 280m, 280m, 100)); - - var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1, 0, 0, new DateTime(2023, 5, 30), "TestTag1"); + try + { + // Creates a market order + security.SetMarketPrice(new TradeBar(new DateTime(2023, 5, 30), symbol, 280m, 280m, 280m, 280m, 100)); - var orderProcessorMock = new Mock(); - orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(algorithm.Transactions, orderRequest)); - algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); - var orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); - Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); - broker.Scan(); - Assert.IsTrue(orderTicket.Status == OrderStatus.Filled); + var orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1, 0, 0, new DateTime(2023, 5, 30), "TestTag1"); - var realTimeHandler = new TestLiveTradingRealTimeHandlerReset(); - realTimeHandler.Setup(algorithm, - new AlgorithmNodePacket(PacketType.AlgorithmNode), - new BacktestingResultHandler(), - null, - new TestTimeLimitManager()); - realTimeHandler.AddRefreshHoursScheduledEvent(); + var orderProcessorMock = new Mock(); + orderProcessorMock.Setup(m => m.GetOrderTicket(It.IsAny())).Returns(new OrderTicket(algorithm.Transactions, orderRequest)); + algorithm.Transactions.SetOrderProcessor(orderProcessorMock.Object); + var orderTicket = transactionHandler.Process(orderRequest); + transactionHandler.HandleOrderRequest(orderRequest); + Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); + broker.Scan(); + Assert.IsTrue(orderTicket.Status == OrderStatus.Filled); - orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1, 0, 0, new DateTime(2023, 5, 30), "TestTag2"); - orderRequest.SetOrderId(2); - orderTicket = transactionHandler.Process(orderRequest); - transactionHandler.HandleOrderRequest(orderRequest); - Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); - broker.Scan(); - Assert.IsTrue(orderTicket.Status != OrderStatus.Filled); + realTimeHandler.Setup(algorithm, + new AlgorithmNodePacket(PacketType.AlgorithmNode), + new BacktestingResultHandler(), + null, + new TestTimeLimitManager()); + realTimeHandler.AddRefreshHoursScheduledEvent(); + + orderRequest = new SubmitOrderRequest(OrderType.Market, security.Type, security.Symbol, 1, 0, 0, new DateTime(2023, 5, 30), "TestTag2"); + orderRequest.SetOrderId(2); + orderTicket = transactionHandler.Process(orderRequest); + transactionHandler.HandleOrderRequest(orderRequest); + Assert.IsTrue(orderTicket.Status == OrderStatus.Submitted); + broker.Scan(); + Assert.IsTrue(orderTicket.Status != OrderStatus.Filled); + } + finally + { + transactionHandler.Exit(); + realTimeHandler.Exit(); + } - realTimeHandler.Exit(); } [TestCase(null)] diff --git a/Tests/Engine/Results/LiveTradingResultHandlerTests.cs b/Tests/Engine/Results/LiveTradingResultHandlerTests.cs index bc01c7eeb167..ba3da3aac2d1 100644 --- a/Tests/Engine/Results/LiveTradingResultHandlerTests.cs +++ b/Tests/Engine/Results/LiveTradingResultHandlerTests.cs @@ -151,38 +151,43 @@ public void DailySampleValueBasedOnMarketHour(bool extendedMarketHoursEnabled) var resultHandler = new LiveTradingResultHandler(); resultHandler.Initialize(new (new LiveNodePacket(), messagging, api, new BacktestingTransactionHandler(), null)); - var algo = new AlgorithmStub(createDataManager:false); - algo.SetFinishedWarmingUp(); - var dataManager = new DataManagerStub(new TestDataFeed(), algo); - algo.SubscriptionManager.SetDataManager(dataManager); - var aapl = algo.AddEquity("AAPL", extendedMarketHours: extendedMarketHoursEnabled); - algo.PostInitialize(); - resultHandler.SetAlgorithm(algo, 100000); - resultHandler.OnSecuritiesChanged(SecurityChangesTests.AddedNonInternal(aapl)); - - // Add values during market hours, should always update - algo.Portfolio.CashBook["USD"].AddAmount(1000); - algo.Portfolio.InvalidateTotalPortfolioValue(); - - resultHandler.Sample(referenceDate.AddHours(15)); - Assert.IsTrue(resultHandler.Charts.ContainsKey("Strategy Equity")); - Assert.AreEqual(1, resultHandler.Charts["Strategy Equity"].Series["Equity"].Values.Count); - - var currentEquityValue = (Candlestick)resultHandler.Charts["Strategy Equity"].Series["Equity"].Values.Last(); - Assert.AreEqual(101000, currentEquityValue.Close); - - // Add value to portfolio, see if portfolio updates with new sample - // will be changed to 'extendedMarketHoursEnabled' = true - algo.Portfolio.CashBook["USD"].AddAmount(10000); - algo.Portfolio.InvalidateTotalPortfolioValue(); - - resultHandler.Sample(referenceDate.AddHours(22)); - Assert.AreEqual(2, resultHandler.Charts["Strategy Equity"].Series["Equity"].Values.Count); - - currentEquityValue = (Candlestick)resultHandler.Charts["Strategy Equity"].Series["Equity"].Values.Last(); - Assert.AreEqual(extendedMarketHoursEnabled ? 111000 : 101000, currentEquityValue.Close); - - resultHandler.Exit(); + try + { + var algo = new AlgorithmStub(createDataManager: false); + algo.SetFinishedWarmingUp(); + var dataManager = new DataManagerStub(new TestDataFeed(), algo); + algo.SubscriptionManager.SetDataManager(dataManager); + var aapl = algo.AddEquity("AAPL", extendedMarketHours: extendedMarketHoursEnabled); + algo.PostInitialize(); + resultHandler.SetAlgorithm(algo, 100000); + resultHandler.OnSecuritiesChanged(SecurityChangesTests.AddedNonInternal(aapl)); + + // Add values during market hours, should always update + algo.Portfolio.CashBook["USD"].AddAmount(1000); + algo.Portfolio.InvalidateTotalPortfolioValue(); + + resultHandler.Sample(referenceDate.AddHours(15)); + Assert.IsTrue(resultHandler.Charts.ContainsKey("Strategy Equity")); + Assert.AreEqual(1, resultHandler.Charts["Strategy Equity"].Series["Equity"].Values.Count); + + var currentEquityValue = (Candlestick)resultHandler.Charts["Strategy Equity"].Series["Equity"].Values.Last(); + Assert.AreEqual(101000, currentEquityValue.Close); + + // Add value to portfolio, see if portfolio updates with new sample + // will be changed to 'extendedMarketHoursEnabled' = true + algo.Portfolio.CashBook["USD"].AddAmount(10000); + algo.Portfolio.InvalidateTotalPortfolioValue(); + + resultHandler.Sample(referenceDate.AddHours(22)); + Assert.AreEqual(2, resultHandler.Charts["Strategy Equity"].Series["Equity"].Values.Count); + + currentEquityValue = (Candlestick)resultHandler.Charts["Strategy Equity"].Series["Equity"].Values.Last(); + Assert.AreEqual(extendedMarketHoursEnabled ? 111000 : 101000, currentEquityValue.Close); + } + finally + { + resultHandler.Exit(); + } } private class TestDataFeed : IDataFeed From 5b8e54f272a93410b9c33f5845a20919b81209a2 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Tue, 13 Jan 2026 12:19:40 -0500 Subject: [PATCH 097/103] Reduce excessive debug logging in live trading (#9220) * Reduce excessive logs * Revert unnecesary log changes --- Engine/Results/LiveTradingResultHandler.cs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Engine/Results/LiveTradingResultHandler.cs b/Engine/Results/LiveTradingResultHandler.cs index 39076274e95f..2e375cf2274c 100644 --- a/Engine/Results/LiveTradingResultHandler.cs +++ b/Engine/Results/LiveTradingResultHandler.cs @@ -183,7 +183,6 @@ private void Update() //Create and send back the changes in chart since the algorithm started. var deltaCharts = new Dictionary(); - Log.Debug("LiveTradingResultHandler.Update(): Build delta charts"); var performanceCharts = new Dictionary(); lock (ChartLock) { @@ -210,18 +209,15 @@ private void Update() } } } - Log.Debug("LiveTradingResultHandler.Update(): End build delta charts"); //Profit loss changes, get the banner statistics, summary information on the performance for the headers. var serverStatistics = GetServerStatistics(utcNow); var holdings = GetHoldings(Algorithm.Securities.Values, Algorithm.SubscriptionManager.SubscriptionDataConfigService); //Add the algorithm statistics first. - Log.Debug("LiveTradingResultHandler.Update(): Build run time stats"); var summary = GenerateStatisticsResults(performanceCharts).Summary; var runtimeStatistics = GetAlgorithmRuntimeStatistics(summary); - Log.Debug("LiveTradingResultHandler.Update(): End build run time stats"); // since we're sending multiple packets, let's do it async and forget about it @@ -613,7 +609,6 @@ protected override void Sample(string chartName, string seriesName, int seriesIn return; } - Log.Debug("LiveTradingResultHandler.Sample(): Sampling " + chartName + "." + seriesName); lock (ChartLock) { //Add a copy locally: @@ -633,7 +628,6 @@ protected override void Sample(string chartName, string seriesName, int seriesIn //Add our value: series.Values.Add(value); } - Log.Debug("LiveTradingResultHandler.Sample(): Done sampling " + chartName + "." + seriesName); } /// @@ -643,7 +637,6 @@ protected override void Sample(string chartName, string seriesName, int seriesIn /// protected void SampleRange(IEnumerable updates) { - Log.Debug("LiveTradingResultHandler.SampleRange(): Begin sampling"); lock (ChartLock) { foreach (var update in updates) @@ -679,7 +672,6 @@ protected void SampleRange(IEnumerable updates) } } } - Log.Debug("LiveTradingResultHandler.SampleRange(): Finished sampling"); } /// @@ -1047,8 +1039,6 @@ public virtual void ProcessSynchronousEvents(bool forceProcess = false) if (time > _nextSample || forceProcess) { - Log.Debug("LiveTradingResultHandler.ProcessSynchronousEvents(): Enter"); - //Set next sample time: 4000 samples per backtest _nextSample = time.Add(ResamplePeriod); @@ -1090,8 +1080,6 @@ public virtual void ProcessSynchronousEvents(bool forceProcess = false) } } } - - Log.Debug("LiveTradingResultHandler.ProcessSynchronousEvents(): Exit"); } /// From 1ca7320f2f90f7d32b3ae3f1fc7af0cd24757cf5 Mon Sep 17 00:00:00 2001 From: Adalyat Nazirov Date: Tue, 13 Jan 2026 21:00:26 +0000 Subject: [PATCH 098/103] Add `dYdXFutureMarginInterestRateModel` (#9221) * Add `dYdXFutureMarginInterestRateModel` and update `GetMarginInterestRateModel` to support CryptoFuture funding rates * missing import --- Common/Brokerages/dYdXBrokerageModel.cs | 11 +++++--- .../dYdXFutureMarginInterestRateModel.cs | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 Common/Securities/CryptoFuture/dYdXFutureMarginInterestRateModel.cs diff --git a/Common/Brokerages/dYdXBrokerageModel.cs b/Common/Brokerages/dYdXBrokerageModel.cs index 6c28e2950d0a..c05ff6e01980 100644 --- a/Common/Brokerages/dYdXBrokerageModel.cs +++ b/Common/Brokerages/dYdXBrokerageModel.cs @@ -20,6 +20,7 @@ using QuantConnect.Orders; using QuantConnect.Orders.Fees; using QuantConnect.Securities; +using QuantConnect.Securities.CryptoFuture; using QuantConnect.Util; namespace QuantConnect.Brokerages; @@ -79,8 +80,12 @@ public override IFeeModel GetFeeModel(Security security) /// The margin interest rate model for this brokerage public override IMarginInterestRateModel GetMarginInterestRateModel(Security security) { - // TODO: Implement dYdX margin interest rate model - return MarginInterestRateModel.Null; + // only applies for perpetual futures + return security.Type switch + { + SecurityType.CryptoFuture => new dYdXFutureMarginInterestRateModel(), + _ => base.GetMarginInterestRateModel(security) + }; } /// @@ -160,4 +165,4 @@ private static IReadOnlyDictionary GetDefaultMarkets(strin map[SecurityType.CryptoFuture] = marketName; return map.ToReadOnlyDictionary(); } -} \ No newline at end of file +} diff --git a/Common/Securities/CryptoFuture/dYdXFutureMarginInterestRateModel.cs b/Common/Securities/CryptoFuture/dYdXFutureMarginInterestRateModel.cs new file mode 100644 index 000000000000..42c7fa2371fa --- /dev/null +++ b/Common/Securities/CryptoFuture/dYdXFutureMarginInterestRateModel.cs @@ -0,0 +1,25 @@ +/* + * 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. + * +*/ + +namespace QuantConnect.Securities.CryptoFuture +{ + /// + /// The responsibility of this model is to apply future funding rate cash flows to the portfolio based on open positions + /// + public class dYdXFutureMarginInterestRateModel : BinanceFutureMarginInterestRateModel + { + } +} From 61e8c63acddab6a1a8418927c19355bd2d8ff8a5 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Wed, 14 Jan 2026 11:55:29 -0300 Subject: [PATCH 099/103] Fix dydx camel case (#9223) --- Common/Brokerages/BrokerageName.cs | 2 +- Common/Brokerages/IBrokerageModel.cs | 2 +- Common/Brokerages/dYdXBrokerageModel.cs | 4 ++-- Common/Currencies.cs | 2 +- Common/Market.cs | 4 ++-- Common/Securities/Cash.cs | 2 +- Tests/Common/Securities/CashTests.cs | 6 +++--- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Common/Brokerages/BrokerageName.cs b/Common/Brokerages/BrokerageName.cs index 58d238626917..7f6edaab7a5e 100644 --- a/Common/Brokerages/BrokerageName.cs +++ b/Common/Brokerages/BrokerageName.cs @@ -197,6 +197,6 @@ public enum BrokerageName /// /// Transaction and submit/execution rules will use dYdX models /// - dYdX + DYDX } } diff --git a/Common/Brokerages/IBrokerageModel.cs b/Common/Brokerages/IBrokerageModel.cs index 7657998d67a6..4544c388d8c1 100644 --- a/Common/Brokerages/IBrokerageModel.cs +++ b/Common/Brokerages/IBrokerageModel.cs @@ -288,7 +288,7 @@ public static IBrokerageModel Create(IOrderProvider orderProvider, BrokerageName case BrokerageName.Tastytrade: return new TastytradeBrokerageModel(accountType); - case BrokerageName.dYdX: + case BrokerageName.DYDX: return new dYdXBrokerageModel(accountType); default: diff --git a/Common/Brokerages/dYdXBrokerageModel.cs b/Common/Brokerages/dYdXBrokerageModel.cs index c05ff6e01980..d8b342aeddba 100644 --- a/Common/Brokerages/dYdXBrokerageModel.cs +++ b/Common/Brokerages/dYdXBrokerageModel.cs @@ -30,7 +30,7 @@ public class dYdXBrokerageModel : DefaultBrokerageModel /// /// Gets a map of the default markets to be used for each security type /// - public override IReadOnlyDictionary DefaultMarkets { get; } = GetDefaultMarkets(Market.dYdX); + public override IReadOnlyDictionary DefaultMarkets { get; } = GetDefaultMarkets(Market.DYDX); /// /// Initializes a new instance of the class @@ -95,7 +95,7 @@ public override IMarginInterestRateModel GetMarginInterestRateModel(Security sec /// The benchmark for this brokerage public override IBenchmark GetBenchmark(SecurityManager securities) { - var symbol = Symbol.Create("BTCUSD", SecurityType.CryptoFuture, Market.dYdX); + var symbol = Symbol.Create("BTCUSD", SecurityType.CryptoFuture, Market.DYDX); return SecurityBenchmark.CreateInstance(securities, symbol); //todo default conversion? } diff --git a/Common/Currencies.cs b/Common/Currencies.cs index ad6897897e45..894693b15232 100644 --- a/Common/Currencies.cs +++ b/Common/Currencies.cs @@ -267,7 +267,7 @@ public static class Currencies { Market.Bitfinex , _stableCoinsWithoutPairsBitfinex}, { Market.Coinbase, _stableCoinsWithoutPairsCoinbase}, { Market.Bybit , _stableCoinsWithoutPairsBybit}, - { Market.dYdX , _stableCoinsWithoutPairsdYdX} + { Market.DYDX , _stableCoinsWithoutPairsdYdX} }; /// diff --git a/Common/Market.cs b/Common/Market.cs index 8256cbd47648..e4745023ce2f 100644 --- a/Common/Market.cs +++ b/Common/Market.cs @@ -71,7 +71,7 @@ public static class Market Tuple.Create(InteractiveBrokers, 39), Tuple.Create(EUREX, 40), Tuple.Create(OSE, 41), - Tuple.Create(dYdX, 42) + Tuple.Create(DYDX, 42) }; static Market() @@ -265,7 +265,7 @@ static Market() /// /// dYdX market /// - public const string dYdX = "dydx"; + public const string DYDX = "dydx"; /// /// Adds the specified market to the map of available markets with the specified identifier. diff --git a/Common/Securities/Cash.cs b/Common/Securities/Cash.cs index cc1920b687c5..0c317ab21814 100644 --- a/Common/Securities/Cash.cs +++ b/Common/Securities/Cash.cs @@ -262,7 +262,7 @@ public List EnsureCurrencyDataFeed(SecurityManager secur var cfdEntries = GetAvailableSymbolPropertiesDatabaseEntries(SecurityType.Cfd, marketMap, markets); var cryptoEntries = GetAvailableSymbolPropertiesDatabaseEntries(SecurityType.Crypto, marketMap, markets); - if (marketMap.TryGetValue(SecurityType.CryptoFuture, out var cryptoFutureMarket) && cryptoFutureMarket == Market.dYdX) + if (marketMap.TryGetValue(SecurityType.CryptoFuture, out var cryptoFutureMarket) && cryptoFutureMarket == Market.DYDX) { // Put additional logic for dYdX crypto futures as they don't have Crypto (Spot) market // Also need to add them first to give the priority diff --git a/Tests/Common/Securities/CashTests.cs b/Tests/Common/Securities/CashTests.cs index db5081c9ab4e..d47415916bb1 100644 --- a/Tests/Common/Securities/CashTests.cs +++ b/Tests/Common/Securities/CashTests.cs @@ -469,14 +469,14 @@ public void EnsureCurrencyDataFeedForCryptoCurrency_CryptoFuturesFirst_When_dYdX var securities = new SecurityManager(TimeKeeper); var marketMapWithdYdX = MarketMap.ToDictionary(); - marketMapWithdYdX[SecurityType.CryptoFuture] = Market.dYdX; + marketMapWithdYdX[SecurityType.CryptoFuture] = Market.DYDX; book.EnsureCurrencyDataFeeds(securities, subscriptions, marketMapWithdYdX, SecurityChanges.None, dataManager.SecurityService); var symbols = dataManager.SubscriptionManagerSubscriptions.Select(sdc => sdc.Symbol).ToHashSet(); - Assert.IsTrue(symbols.Contains(Symbol.Create("BTCUSD", SecurityType.CryptoFuture, Market.dYdX))); - Assert.IsTrue(symbols.Contains(Symbol.Create("ETHUSD", SecurityType.CryptoFuture, Market.dYdX))); + Assert.IsTrue(symbols.Contains(Symbol.Create("BTCUSD", SecurityType.CryptoFuture, Market.DYDX))); + Assert.IsTrue(symbols.Contains(Symbol.Create("ETHUSD", SecurityType.CryptoFuture, Market.DYDX))); foreach (var subscription in subscriptions.Subscriptions) { From ef94b5affc61320246db200478839759e68aa234 Mon Sep 17 00:00:00 2001 From: Adalyat Nazirov Date: Thu, 15 Jan 2026 20:20:11 +0000 Subject: [PATCH 100/103] Add dYdX `IoC` Time In Force (#9226) * Add `IoC` and update `PostOnly` in `dYdXOrderProperties` with validation logic; add corresponding unit tests. * change case to use IOC * more IOC --- Common/Orders/dYdXOrderProperties.cs | 33 +++++- .../Common/Orders/dYdXOrderPropertiesTests.cs | 100 ++++++++++++++++++ 2 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 Tests/Common/Orders/dYdXOrderPropertiesTests.cs diff --git a/Common/Orders/dYdXOrderProperties.cs b/Common/Orders/dYdXOrderProperties.cs index b7f72a31be32..3f646c9a9277 100644 --- a/Common/Orders/dYdXOrderProperties.cs +++ b/Common/Orders/dYdXOrderProperties.cs @@ -13,7 +13,6 @@ * limitations under the License. */ -using QuantConnect.Data.Custom.Intrinio; using QuantConnect.Interfaces; namespace QuantConnect.Orders @@ -29,7 +28,37 @@ public class dYdXOrderProperties : OrderProperties /// it will be rejected and no part of the order will execute. /// Note: this flag is only applied to Limit orders. /// - public bool PostOnly { get; set; } = true; + public bool PostOnly + { + get; + set + { + if (value && IOC) + { + throw new System.InvalidOperationException("Cannot set PostOnly when IOC is already set. Only one execution type can be active at a time."); + } + field = value; + } + } + + /// + /// Enforces that an order only be placed + /// on the book as a maker order. Note this means that validators will cancel + /// any newly placed post only orders that would cross with other maker + /// orders. + /// + public bool IOC + { + get; + set + { + if (value && PostOnly) + { + throw new System.InvalidOperationException("Cannot set IOC when PostOnly is already set. Only one execution type can be active at a time."); + } + field = value; + } + } /// /// The maximum amount of gas to use for the order. diff --git a/Tests/Common/Orders/dYdXOrderPropertiesTests.cs b/Tests/Common/Orders/dYdXOrderPropertiesTests.cs new file mode 100644 index 000000000000..e07b5a617434 --- /dev/null +++ b/Tests/Common/Orders/dYdXOrderPropertiesTests.cs @@ -0,0 +1,100 @@ +/* + * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. + * Lean Algorithmic Trading Engine v2.0. Copyright 2023 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 NUnit.Framework; +using QuantConnect.Orders; + +namespace QuantConnect.Tests.Common.Orders; + +[TestFixture] +public class dYdXOrderPropertiesTests +{ + [Test] + public void PostOnlyPropertyCanBeSetAndRetrieved() + { + var properties = new dYdXOrderProperties(); + + properties.PostOnly = true; + Assert.IsTrue(properties.PostOnly); + + properties.PostOnly = false; + Assert.IsFalse(properties.PostOnly); + } + + [Test] + public void IOCPropertyCanBeSetAndRetrieved() + { + var properties = new dYdXOrderProperties(); + + properties.IOC = true; + Assert.IsTrue(properties.IOC); + + properties.IOC = false; + Assert.IsFalse(properties.IOC); + } + + [Test] + public void DefaultValuesAreCorrect() + { + var properties = new dYdXOrderProperties(); + + Assert.IsFalse(properties.PostOnly); + Assert.IsFalse(properties.IOC); + } + + [Test] + public void ThrowsIfSetIOCWhenPostOnlyAlreadySet() + { + var properties = new dYdXOrderProperties(); + + Assert.Throws(() => + { + properties.PostOnly = true; + properties.IOC = true; + }); + } + + [Test] + public void ThrowsIfSetPostOnlyWhenIOCAlreadySet() + { + var properties = new dYdXOrderProperties(); + + Assert.Throws(() => + { + properties.IOC = true; + properties.PostOnly = true; + }); + } + + [Test] + public void WhenPostOnlyIsTrueIOCRemainsFalse() + { + var properties = new dYdXOrderProperties(); + + properties.PostOnly = true; + Assert.IsTrue(properties.PostOnly); + Assert.IsFalse(properties.IOC); + } + + [Test] + public void WhenIOCIsTruePostOnlyRemainsFalse() + { + var properties = new dYdXOrderProperties(); + + properties.IOC = true; + Assert.IsTrue(properties.IOC); + Assert.IsFalse(properties.PostOnly); + } +} From 22e0e5ddf579d07cd71065e8665650a3b7367e18 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Fri, 16 Jan 2026 10:07:41 -0500 Subject: [PATCH 101/103] Prevent SessionBar EndTime overflow when Time is DateTime.MaxValue (#9215) * Fix SessionBar EndTime overflow * Fix broken tests * Update python regression tests * Solve review comments * Revert changes * Prevent overflow from Time + Period --- Common/Data/Market/SessionBar.cs | 17 +++++++++++++++++ Tests/Indicators/SessionTests.cs | 23 +++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/Common/Data/Market/SessionBar.cs b/Common/Data/Market/SessionBar.cs index b544a17dcaf9..03c050b8b08f 100644 --- a/Common/Data/Market/SessionBar.cs +++ b/Common/Data/Market/SessionBar.cs @@ -51,6 +51,23 @@ public class SessionBar : TradeBar /// public override decimal Close => _bar?.Close ?? 0m; + /// + /// The closing time of this bar, computed via the Time and Period + /// + public override DateTime EndTime + { + get + { + if (Time == DateTime.MaxValue) + { + // Prevent overflow from Time + Period when Time is DateTime.MaxValue + return Time; + } + + return base.EndTime; + } + } + /// /// The period of this session bar /// diff --git a/Tests/Indicators/SessionTests.cs b/Tests/Indicators/SessionTests.cs index e9c9efbb8969..8422749357f3 100644 --- a/Tests/Indicators/SessionTests.cs +++ b/Tests/Indicators/SessionTests.cs @@ -48,6 +48,7 @@ public void AddMethodPreservesPreviousValuesInSessionWindow(int initialSize) // Start of a new trading day date = date.AddDays(1); + session.Scan(date); bar1 = new TradeBar(date.AddHours(12), symbol, 200, 201, 199, 200, 2000, TimeSpan.FromHours(1)); session.Update(bar1); bar2 = new TradeBar(date.AddHours(13), symbol, 300, 301, 299, 300, 3100, TimeSpan.FromHours(1)); @@ -67,6 +68,28 @@ public void AddMethodPreservesPreviousValuesInSessionWindow(int initialSize) Assert.AreEqual(101, session[1].Close); Assert.AreEqual(2100, session[1].Volume); } + + [Test] + public void EndTimeDoesNotOverflowWhenAccessedBeforeFirstUpdate() + { + var symbol = Symbols.SPY; + var session = GetSession(TickType.Trade, 3); + + // Verify EndTime does not overflow when accessed before the first Update() + Assert.DoesNotThrow(() => + { + var currentEndTime = session.EndTime; + }); + + session.Update(new TradeBar(new DateTime(2025, 8, 25, 10, 0, 0), symbol, 100, 101, 99, 100, 1000, TimeSpan.FromHours(1))); + Assert.AreEqual(new DateTime(2025, 8, 26), session.EndTime); + Assert.AreEqual(100, session.Open); + Assert.AreEqual(101, session.High); + Assert.AreEqual(99, session.Low); + Assert.AreEqual(100, session.Close); + Assert.AreEqual(1000, session.Volume); + } + private Session GetSession(TickType tickType, int initialSize) { var symbol = Symbols.SPY; From 745292c15adc1f6e19145e3693f8b7187bc37494 Mon Sep 17 00:00:00 2001 From: Martin-Molinero Date: Fri, 16 Jan 2026 13:44:16 -0300 Subject: [PATCH 102/103] Add Async for submit request to string (#9228) --- Common/Messages/Messages.Orders.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/Messages/Messages.Orders.cs b/Common/Messages/Messages.Orders.cs index 1562593b46ce..47033d5192eb 100644 --- a/Common/Messages/Messages.Orders.cs +++ b/Common/Messages/Messages.Orders.cs @@ -527,7 +527,7 @@ public static string ToString(Orders.SubmitOrderRequest request) { // create a proxy order object to steal its ToString method var proxy = Orders.Order.CreateOrder(request); - return Invariant($"{request.Time} UTC: Submit Order: ({request.OrderId}) - {proxy} {request.Tag} Status: {request.Status}"); + return Invariant($"{request.Time} UTC: Submit Order: ({request.OrderId}) - {proxy} {request.Tag} Status: {request.Status} Async: {request.Asynchronous}"); } } From 7fb246511a6163565327ea9e26fb9b51f879bf16 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Fri, 16 Jan 2026 15:41:35 -0400 Subject: [PATCH 103/103] Add total performance statistics to live result files (#9224) * Add total performance statistics to live result files * Truncate closed trades in live results * Avoid adding totalPerformance to live minute result file * Deprecated Trade.Symbol in favor of new Trade.Symbols * Fixes for Trade serialization * Add trades json serialization tests * Cleanup --- Common/Packets/BacktestResultPacket.cs | 6 - Common/Packets/BacktestResultParameters.cs | 8 +- Common/Packets/BaseResultParameters.cs | 10 +- Common/Packets/LiveResultPacket.cs | 8 +- Common/Packets/LiveResultParameters.cs | 6 +- Common/Result.cs | 10 +- Common/Statistics/Trade.cs | 32 ++++- Common/Statistics/TradeBuilder.cs | 12 +- Engine/Results/LiveTradingResultHandler.cs | 26 +++- .../Statistics/PortfolioStatisticsTests.cs | 4 +- .../Common/Statistics/TradeStatisticsTests.cs | 34 ++--- Tests/Common/Statistics/TradeTests.cs | 125 ++++++++++++++++++ 12 files changed, 229 insertions(+), 52 deletions(-) create mode 100644 Tests/Common/Statistics/TradeTests.cs diff --git a/Common/Packets/BacktestResultPacket.cs b/Common/Packets/BacktestResultPacket.cs index 7a6e2317dd78..6a33c47e1465 100644 --- a/Common/Packets/BacktestResultPacket.cs +++ b/Common/Packets/BacktestResultPacket.cs @@ -208,11 +208,6 @@ public class BacktestResult : Result /// public Dictionary RollingWindow { get; set; } = new Dictionary(); - /// - /// Rolling window detailed statistics. - /// - public AlgorithmPerformance TotalPerformance { get; set; } - /// /// Default Constructor /// @@ -226,7 +221,6 @@ public BacktestResult() public BacktestResult(BacktestResultParameters parameters) : base(parameters) { RollingWindow = parameters.RollingWindow; - TotalPerformance = parameters.TotalPerformance; } } } // End of Namespace: diff --git a/Common/Packets/BacktestResultParameters.cs b/Common/Packets/BacktestResultParameters.cs index 31a89506876a..7481750c5617 100644 --- a/Common/Packets/BacktestResultParameters.cs +++ b/Common/Packets/BacktestResultParameters.cs @@ -18,7 +18,6 @@ using QuantConnect.Orders; using QuantConnect.Statistics; using System.Collections.Generic; -using QuantConnect.Securities.Positions; namespace QuantConnect.Packets { @@ -32,10 +31,6 @@ public class BacktestResultParameters : BaseResultParameters /// public Dictionary RollingWindow { get; set; } - /// - /// Rolling window detailed statistics. - /// - public AlgorithmPerformance TotalPerformance { get; set; } /// /// Creates a new instance /// @@ -49,10 +44,9 @@ public BacktestResultParameters(IDictionary charts, AlgorithmPerformance totalPerformance = null, AlgorithmConfiguration algorithmConfiguration = null, IDictionary state = null) - : base(charts, orders, profitLoss, statistics, runtimeStatistics, orderEvents, algorithmConfiguration, state) + : base(charts, orders, profitLoss, statistics, runtimeStatistics, orderEvents, totalPerformance, algorithmConfiguration, state) { RollingWindow = rollingWindow; - TotalPerformance = totalPerformance; } } } diff --git a/Common/Packets/BaseResultParameters.cs b/Common/Packets/BaseResultParameters.cs index fcf6cfe2d8c3..e75c7001c412 100644 --- a/Common/Packets/BaseResultParameters.cs +++ b/Common/Packets/BaseResultParameters.cs @@ -14,8 +14,9 @@ * */ -using System; using QuantConnect.Orders; +using QuantConnect.Statistics; +using System; using System.Collections.Generic; namespace QuantConnect.Packets @@ -65,6 +66,11 @@ public class BaseResultParameters /// public AlgorithmConfiguration AlgorithmConfiguration { get; set; } + /// + /// Rolling window detailed statistics. + /// + public AlgorithmPerformance TotalPerformance { get; set; } + /// /// Creates a new instance /// @@ -74,6 +80,7 @@ public BaseResultParameters(IDictionary charts, IDictionary statistics, IDictionary runtimeStatistics, List orderEvents, + AlgorithmPerformance totalPerformance = null, AlgorithmConfiguration algorithmConfiguration = null, IDictionary state = null) { @@ -85,6 +92,7 @@ public BaseResultParameters(IDictionary charts, OrderEvents = orderEvents; AlgorithmConfiguration = algorithmConfiguration; State = state; + TotalPerformance = totalPerformance; } } } diff --git a/Common/Packets/LiveResultPacket.cs b/Common/Packets/LiveResultPacket.cs index f054c61beb87..38d032328a62 100644 --- a/Common/Packets/LiveResultPacket.cs +++ b/Common/Packets/LiveResultPacket.cs @@ -14,13 +14,13 @@ * */ -using System; -using System.Linq; using Newtonsoft.Json; -using QuantConnect.Orders; using QuantConnect.Logging; +using QuantConnect.Orders; using QuantConnect.Securities; +using System; using System.Collections.Generic; +using System.Linq; namespace QuantConnect.Packets { @@ -109,7 +109,7 @@ public static LiveResultPacket CreateEmpty(LiveNodePacket job) return new LiveResultPacket(job, new LiveResult(new LiveResultParameters( new Dictionary(), new Dictionary(), new Dictionary(), new Dictionary(), new CashBook(), new Dictionary(), - new SortedDictionary(), new List(), new Dictionary(), + new SortedDictionary(), new List(), null, new Dictionary(), new AlgorithmConfiguration(), new Dictionary()))); } } // End Queue Packet: diff --git a/Common/Packets/LiveResultParameters.cs b/Common/Packets/LiveResultParameters.cs index cc4b4a3b2b2f..60e14fa246ea 100644 --- a/Common/Packets/LiveResultParameters.cs +++ b/Common/Packets/LiveResultParameters.cs @@ -14,9 +14,10 @@ * */ -using System; using QuantConnect.Orders; using QuantConnect.Securities; +using QuantConnect.Statistics; +using System; using System.Collections.Generic; namespace QuantConnect.Packets @@ -52,10 +53,11 @@ public LiveResultParameters(IDictionary charts, IDictionary statistics, IDictionary runtimeStatistics, List orderEvents, + AlgorithmPerformance totalPerformance = null, IDictionary serverStatistics = null, AlgorithmConfiguration algorithmConfiguration = null, IDictionary state = null) - : base(charts, orders, profitLoss, statistics, runtimeStatistics, orderEvents, algorithmConfiguration, state) + : base(charts, orders, profitLoss, statistics, runtimeStatistics, orderEvents, totalPerformance, algorithmConfiguration, state) { Holdings = holdings; CashBook = cashBook; diff --git a/Common/Result.cs b/Common/Result.cs index 932a571c257c..13f040b83ad6 100644 --- a/Common/Result.cs +++ b/Common/Result.cs @@ -13,10 +13,11 @@ * limitations under the License. */ -using System; using Newtonsoft.Json; using QuantConnect.Orders; using QuantConnect.Packets; +using QuantConnect.Statistics; +using System; using System.Collections.Generic; namespace QuantConnect @@ -83,6 +84,12 @@ public class Result [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public AlgorithmConfiguration AlgorithmConfiguration { get; set; } + /// + /// Rolling window detailed statistics. + /// + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public AlgorithmPerformance TotalPerformance { get; set; } + /// /// Creates new empty instance /// @@ -103,6 +110,7 @@ public Result(BaseResultParameters parameters) OrderEvents = parameters.OrderEvents; AlgorithmConfiguration = parameters.AlgorithmConfiguration; State = parameters.State; + TotalPerformance = parameters.TotalPerformance; } } } diff --git a/Common/Statistics/Trade.cs b/Common/Statistics/Trade.cs index 0a05a35c97ac..35ef2a35c6bb 100644 --- a/Common/Statistics/Trade.cs +++ b/Common/Statistics/Trade.cs @@ -13,6 +13,7 @@ * limitations under the License. */ +using Newtonsoft.Json; using System; using System.Collections.Generic; @@ -23,10 +24,39 @@ namespace QuantConnect.Statistics /// public class Trade { + private List _symbols; + /// /// The symbol of the traded instrument /// - public Symbol Symbol { get; set; } + [Obsolete("Use Symbols property instead")] + [JsonIgnore] + public Symbol Symbol + { + get + { + return _symbols != null && _symbols.Count > 0 ? _symbols[0] : Symbol.Empty; + } + private set + { + _symbols = new List() { value }; + } + } + + /// + /// Just needed so that "Symbol" is never serialized but can be deserialized, if present, for backward compatibility + /// + [JsonProperty("Symbol")] + private Symbol SymbolForDeserialization { set => Symbol = value; } + + /// + /// The symbol associated to the traded instruments + /// + public List Symbols + { + get { return _symbols; } + set { _symbols = value; } + } /// /// The date and time the trade was opened diff --git a/Common/Statistics/TradeBuilder.cs b/Common/Statistics/TradeBuilder.cs index 93ff8b3bfccb..b0b0cb010c30 100644 --- a/Common/Statistics/TradeBuilder.cs +++ b/Common/Statistics/TradeBuilder.cs @@ -227,7 +227,7 @@ private void ProcessFillUsingFillToFill(OrderEvent fill, decimal orderFee, decim { new Trade { - Symbol = fill.Symbol, + Symbols = [fill.Symbol], EntryTime = fill.UtcTime, EntryPrice = fill.FillPrice, Direction = fill.FillQuantity > 0 ? TradeDirection.Long : TradeDirection.Short, @@ -251,7 +251,7 @@ private void ProcessFillUsingFillToFill(OrderEvent fill, decimal orderFee, decim // execution has same direction of trade position.PendingTrades.Add(new Trade { - Symbol = fill.Symbol, + Symbols = [fill.Symbol], EntryTime = fill.UtcTime, EntryPrice = fill.FillPrice, Direction = fill.FillQuantity > 0 ? TradeDirection.Long : TradeDirection.Short, @@ -295,7 +295,7 @@ private void ProcessFillUsingFillToFill(OrderEvent fill, decimal orderFee, decim var newTrade = new Trade { - Symbol = trade.Symbol, + Symbols = trade.Symbols, EntryTime = trade.EntryTime, EntryPrice = trade.EntryPrice, Direction = trade.Direction, @@ -329,7 +329,7 @@ private void ProcessFillUsingFillToFill(OrderEvent fill, decimal orderFee, decim { new Trade { - Symbol = fill.Symbol, + Symbols =[fill.Symbol], EntryTime = fill.UtcTime, EntryPrice = fill.FillPrice, Direction = fill.FillQuantity > 0 ? TradeDirection.Long : TradeDirection.Short, @@ -412,7 +412,7 @@ private void ProcessFillUsingFlatToFlat(OrderEvent fill, decimal orderFee, decim var direction = Math.Sign(fill.FillQuantity) < 0 ? TradeDirection.Long : TradeDirection.Short; var trade = new Trade { - Symbol = fill.Symbol, + Symbols = [fill.Symbol], EntryTime = entryTime, EntryPrice = entryAveragePrice, Direction = direction, @@ -515,7 +515,7 @@ private void ProcessFillUsingFlatToReduced(OrderEvent fill, decimal orderFee, de var direction = totalExecutedQuantity < 0 ? TradeDirection.Long : TradeDirection.Short; var trade = new Trade { - Symbol = fill.Symbol, + Symbols = [fill.Symbol], EntryTime = entryTime, EntryPrice = entryPrice, Direction = direction, diff --git a/Engine/Results/LiveTradingResultHandler.cs b/Engine/Results/LiveTradingResultHandler.cs index 2e375cf2274c..6ea564e62da2 100644 --- a/Engine/Results/LiveTradingResultHandler.cs +++ b/Engine/Results/LiveTradingResultHandler.cs @@ -216,9 +216,8 @@ private void Update() //Add the algorithm statistics first. - var summary = GenerateStatisticsResults(performanceCharts).Summary; - var runtimeStatistics = GetAlgorithmRuntimeStatistics(summary); - + var statistics = GenerateStatisticsResults(performanceCharts); + var runtimeStatistics = GetAlgorithmRuntimeStatistics(statistics.Summary); // since we're sending multiple packets, let's do it async and forget about it // chart data can get big so let's break them up into groups @@ -248,7 +247,9 @@ private void Update() var deltaStatistics = new Dictionary(); var orders = new Dictionary(TransactionHandler.Orders); - var complete = new LiveResultPacket(_job, new LiveResult(new LiveResultParameters(chartComplete, orders, Algorithm.Transactions.TransactionRecord, holdings, Algorithm.Portfolio.CashBook, deltaStatistics, runtimeStatistics, orderEvents, serverStatistics, state: GetAlgorithmState()))); + var complete = new LiveResultPacket(_job, new LiveResult(new LiveResultParameters(chartComplete, orders, + Algorithm.Transactions.TransactionRecord, holdings, Algorithm.Portfolio.CashBook, deltaStatistics, + runtimeStatistics, orderEvents, statistics.TotalPerformance, serverStatistics, state: GetAlgorithmState()))); StoreResult(complete); _nextChartsUpdate = DateTime.UtcNow.Add(ChartUpdateInterval); Log.Debug("LiveTradingResultHandler.Update(): End-store result"); @@ -761,7 +762,7 @@ protected void SendFinalResult() result = new LiveResultPacket(_job, new LiveResult(new LiveResultParameters(charts, orders, profitLoss, new Dictionary(), Algorithm.Portfolio.CashBook, statisticsResults.Summary, runtime, GetOrderEventsToStore(), - algorithmConfiguration: AlgorithmConfiguration.Create(Algorithm, null), state: endState))); + algorithmConfiguration: AlgorithmConfiguration.Create(Algorithm, null), state: endState, totalPerformance: statisticsResults.TotalPerformance))); } else { @@ -854,8 +855,15 @@ protected override void StoreResult(Packet packet) // swap out our charts with the sampled data minuteCharts.Remove(PortfolioMarginKey); live.Results.Charts = minuteCharts; + + var totalPerformance = live.Results.TotalPerformance; + live.Results.TotalPerformance = null; // we don't need to save this in minute data + SaveResults(CreateKey("minute"), live.Results); + // restore total performance + live.Results.TotalPerformance = totalPerformance; + // 10 minute resolution data, save today var tenminuteSampler = new SeriesSampler(TimeSpan.FromMinutes(10)); var tenminuteCharts = tenminuteSampler.SampleCharts(live.Results.Charts, start, stop); @@ -983,6 +991,14 @@ private static void Truncate(LiveResult result, DateTime start, DateTime stop) (x.LastUpdateTime != null && x.LastUpdateTime >= start && x.LastUpdateTime <= stop) ).ToDictionary(x => x.Id); + var closedTrades = result.TotalPerformance?.ClosedTrades; + if (closedTrades != null && closedTrades.Count > 0) + { + result.TotalPerformance.ClosedTrades = closedTrades + .Where(x => x.ExitTime >= start && x.ExitTime <= stop) + .ToList(); + } + //Log.Trace("LiveTradingResultHandler.Truncate: Truncate Outgoing: " + result.Charts["Strategy Equity"].Series["Equity"].Values.Count); } diff --git a/Tests/Common/Statistics/PortfolioStatisticsTests.cs b/Tests/Common/Statistics/PortfolioStatisticsTests.cs index 7387f74df4ea..c3288b19f228 100644 --- a/Tests/Common/Statistics/PortfolioStatisticsTests.cs +++ b/Tests/Common/Statistics/PortfolioStatisticsTests.cs @@ -178,7 +178,7 @@ private List CreateITMOptionAssignment(bool win) { new Trade { - Symbol = Symbols.SPY_C_192_Feb19_2016, + Symbols = [Symbols.SPY_C_192_Feb19_2016], EntryTime = time, EntryPrice = 80m, Direction = TradeDirection.Long, @@ -193,7 +193,7 @@ private List CreateITMOptionAssignment(bool win) }, new Trade { - Symbol = Symbols.SPY, + Symbols =[Symbols.SPY], EntryTime = time.AddMinutes(20), EntryPrice = 192m, Direction = TradeDirection.Long, diff --git a/Tests/Common/Statistics/TradeStatisticsTests.cs b/Tests/Common/Statistics/TradeStatisticsTests.cs index 754c16174c52..4d5b15a8e690 100644 --- a/Tests/Common/Statistics/TradeStatisticsTests.cs +++ b/Tests/Common/Statistics/TradeStatisticsTests.cs @@ -124,7 +124,7 @@ private IEnumerable CreateThreeWinners() { new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time, EntryPrice = 1.07m, Direction = TradeDirection.Long, @@ -138,7 +138,7 @@ private IEnumerable CreateThreeWinners() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(10), EntryPrice = 1.08m, Direction = TradeDirection.Long, @@ -152,7 +152,7 @@ private IEnumerable CreateThreeWinners() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(30), EntryPrice = 1.08m, Direction = TradeDirection.Long, @@ -220,7 +220,7 @@ private IEnumerable CreateThreeLosers() { new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time, EntryPrice = 1.07m, Direction = TradeDirection.Short, @@ -234,7 +234,7 @@ private IEnumerable CreateThreeLosers() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(10), EntryPrice = 1.08m, Direction = TradeDirection.Short, @@ -248,7 +248,7 @@ private IEnumerable CreateThreeLosers() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(30), EntryPrice = 1.08m, Direction = TradeDirection.Short, @@ -316,7 +316,7 @@ private IEnumerable CreateTwoLosersOneWinner() { new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time, EntryPrice = 1.07m, Direction = TradeDirection.Short, @@ -330,7 +330,7 @@ private IEnumerable CreateTwoLosersOneWinner() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(10), EntryPrice = 1.08m, Direction = TradeDirection.Short, @@ -344,7 +344,7 @@ private IEnumerable CreateTwoLosersOneWinner() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(30), EntryPrice = 1.08m, Direction = TradeDirection.Long, @@ -412,7 +412,7 @@ private IEnumerable CreateOneWinnerTwoLosers() { new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time, EntryPrice = 1.08m, Direction = TradeDirection.Long, @@ -426,7 +426,7 @@ private IEnumerable CreateOneWinnerTwoLosers() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(20), EntryPrice = 1.07m, Direction = TradeDirection.Short, @@ -440,7 +440,7 @@ private IEnumerable CreateOneWinnerTwoLosers() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(30), EntryPrice = 1.08m, Direction = TradeDirection.Short, @@ -508,7 +508,7 @@ private IEnumerable CreateOneLoserTwoWinners() { new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time, EntryPrice = 1.07m, Direction = TradeDirection.Short, @@ -522,7 +522,7 @@ private IEnumerable CreateOneLoserTwoWinners() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(10), EntryPrice = 1.08m, Direction = TradeDirection.Long, @@ -536,7 +536,7 @@ private IEnumerable CreateOneLoserTwoWinners() }, new Trade { - Symbol = Symbols.EURUSD, + Symbols =[Symbols.EURUSD], EntryTime = time.AddMinutes(30), EntryPrice = 1.08m, Direction = TradeDirection.Long, @@ -618,7 +618,7 @@ private IEnumerable CreateITMOptionAssignment(bool win) { new Trade { - Symbol = Symbols.SPY_C_192_Feb19_2016, + Symbols = [Symbols.SPY_C_192_Feb19_2016], EntryTime = time, EntryPrice = 80m, Direction = TradeDirection.Long, @@ -633,7 +633,7 @@ private IEnumerable CreateITMOptionAssignment(bool win) }, new Trade { - Symbol = Symbols.SPY, + Symbols =[Symbols.SPY], EntryTime = time.AddMinutes(20), EntryPrice = 192m, Direction = TradeDirection.Long, diff --git a/Tests/Common/Statistics/TradeTests.cs b/Tests/Common/Statistics/TradeTests.cs new file mode 100644 index 000000000000..87599010b188 --- /dev/null +++ b/Tests/Common/Statistics/TradeTests.cs @@ -0,0 +1,125 @@ +/* + * 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 Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using NUnit.Framework; +using QuantConnect.Statistics; +using System; + +namespace QuantConnect.Tests.Common.Statistics +{ + [TestFixture] + public class TradeTests + { + [Test] + public void JsonSerializationRoundTrip() + { + var trade = MakeTrade(); + + var json = JsonConvert.SerializeObject(trade); + var deserializedTrade = JsonConvert.DeserializeObject(json); + CollectionAssert.AreEqual(trade.Symbols, deserializedTrade.Symbols); + Assert.AreEqual(trade.EntryTime, deserializedTrade.EntryTime); + Assert.AreEqual(trade.EntryPrice, deserializedTrade.EntryPrice); + Assert.AreEqual(trade.Direction, deserializedTrade.Direction); + Assert.AreEqual(trade.Quantity, deserializedTrade.Quantity); + Assert.AreEqual(trade.ExitTime, deserializedTrade.ExitTime); + Assert.AreEqual(trade.ExitPrice, deserializedTrade.ExitPrice); + Assert.AreEqual(trade.ProfitLoss, deserializedTrade.ProfitLoss); + Assert.AreEqual(trade.TotalFees, deserializedTrade.TotalFees); + Assert.AreEqual(trade.MAE, deserializedTrade.MAE); + Assert.AreEqual(trade.MFE, deserializedTrade.MFE); + + // For backwards compatibility, also verify Symbol property is set correctly + Assert.IsNotNull(trade.Symbol); + Assert.AreEqual(trade.Symbols[0], trade.Symbol); + Assert.AreEqual(trade.Symbol, deserializedTrade.Symbol); + } + + [Test] + public void DeprecatedSymbolIsNotSerialized() + { + var trade = MakeTrade(); + var jsonStr = JsonConvert.SerializeObject(trade); + var json = JObject.Parse(jsonStr); + Assert.IsFalse(json.ContainsKey("Symbol")); + } + + [Test] + public void CanDeserializeOldFormatWithSymbol() + { + var jsonTrade = @" +{ + ""Symbol"": { + ""value"": ""EURUSD"", + ""id"": ""EURUSD 8G"", + ""permtick"": ""EURUSD"" + }, + ""EntryTime"": ""2023-01-02T12:31:45"", + ""EntryPrice"": 1.07, + ""Direction"": 0, + ""Quantity"": 1000.0, + ""ExitTime"": ""2023-01-02T12:51:45"", + ""ExitPrice"": 1.09, + ""ProfitLoss"": 20.0, + ""TotalFees"": 2.5, + ""MAE"": -5.0, + ""MFE"": 30.0, + ""Duration"": ""00:20:00"", + ""EndTradeDrawdown"": -10.0, + ""IsWin"": false, + ""OrderIds"": [] +}"; + var deserializedTrade = JsonConvert.DeserializeObject(jsonTrade); + Assert.IsNotNull(deserializedTrade); + CollectionAssert.AreEqual(new[] { Symbols.EURUSD }, deserializedTrade.Symbols); + Assert.AreEqual(new DateTime(2023, 1, 2, 12, 31, 45), deserializedTrade.EntryTime); + Assert.AreEqual(1.07m, deserializedTrade.EntryPrice); + Assert.AreEqual(TradeDirection.Long, deserializedTrade.Direction); + Assert.AreEqual(1000m, deserializedTrade.Quantity); + Assert.AreEqual(new DateTime(2023, 1, 2, 12, 51, 45), deserializedTrade.ExitTime); + Assert.AreEqual(1.09m, deserializedTrade.ExitPrice); + Assert.AreEqual(20m, deserializedTrade.ProfitLoss); + Assert.AreEqual(2.5m, deserializedTrade.TotalFees); + Assert.AreEqual(-5m, deserializedTrade.MAE); + Assert.AreEqual(30m, deserializedTrade.MFE); + // For backwards compatibility, also verify Symbol property is set correctly + Assert.IsNotNull(deserializedTrade.Symbol); + Assert.AreEqual(deserializedTrade.Symbols[0], deserializedTrade.Symbol); + } + + private static Trade MakeTrade() + { + var entryTime = new DateTime(2023, 1, 2, 12, 31, 45); + var exitTime = entryTime.AddMinutes(20); + var trade = new Trade + { + Symbols = [Symbols.EURUSD], + EntryTime = entryTime, + EntryPrice = 1.07m, + Direction = TradeDirection.Long, + Quantity = 1000, + ExitTime = exitTime, + ExitPrice = 1.09m, + ProfitLoss = 20, + TotalFees = 2.5m, + MAE = -5, + MFE = 30 + }; + return trade; + } + } +}