From 3d9a451675c0c102500c97f0cef36018a58f8c11 Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Mon, 23 Dec 2024 10:44:23 -0400 Subject: [PATCH] Add DataFrame property to FuturesChains class --- Algorithm/QCAlgorithm.cs | 4 +- Common/Data/Market/BaseChains.cs | 107 ++++++++++++++++++++++ Common/Data/Market/FuturesChains.cs | 32 ++----- Common/Data/Market/OptionChains.cs | 63 +------------ Data/future/cme/universes/dc/20111229.csv | 1 - Data/future/cme/universes/dc/20111230.csv | 2 - Data/future/cme/universes/dc/20120103.csv | 1 - Data/future/cme/universes/dc/20120104.csv | 1 - Data/future/cme/universes/dc/20120105.csv | 1 - Data/future/cme/universes/dc/20120106.csv | 1 - Data/future/cme/universes/dc/20120109.csv | 1 - Data/future/cme/universes/dc/20120110.csv | 1 - Data/future/cme/universes/dc/20120111.csv | 1 - Data/future/cme/universes/dc/20120112.csv | 1 - Data/future/cme/universes/dc/20120113.csv | 1 - Data/future/cme/universes/dc/20120117.csv | 1 - Data/future/cme/universes/dc/20120118.csv | 1 - Data/future/cme/universes/dc/20120119.csv | 1 - Data/future/cme/universes/dc/20120120.csv | 1 - Data/future/cme/universes/dc/20120123.csv | 1 - Data/future/cme/universes/dc/20120124.csv | 1 - Data/future/cme/universes/dc/20120125.csv | 1 - Data/future/cme/universes/dc/20120126.csv | 1 - Data/future/cme/universes/dc/20120127.csv | 1 - Data/future/cme/universes/dc/20120130.csv | 1 - Data/future/cme/universes/dc/20120131.csv | 1 - Data/future/cme/universes/dc/20120201.csv | 1 - Data/future/cme/universes/dc/20120202.csv | 1 - Data/future/cme/universes/dc/20120203.csv | 1 - Data/future/cme/universes/dc/20120206.csv | 1 - Data/future/cme/universes/dc/20120207.csv | 1 - Data/future/cme/universes/dc/20120208.csv | 1 - Data/future/cme/universes/dc/20120209.csv | 1 - Data/future/cme/universes/dc/20120210.csv | 1 - Data/future/cme/universes/dc/20120213.csv | 1 - Data/future/cme/universes/dc/20120214.csv | 1 - Data/future/cme/universes/dc/20120215.csv | 1 - Data/future/cme/universes/dc/20120216.csv | 1 - Data/future/cme/universes/dc/20120217.csv | 1 - Data/future/cme/universes/dc/20120221.csv | 1 - Data/future/cme/universes/dc/20120222.csv | 1 - Data/future/cme/universes/dc/20120223.csv | 1 - Data/future/cme/universes/dc/20120224.csv | 1 - Data/future/cme/universes/dc/20120227.csv | 1 - Data/future/cme/universes/dc/20120228.csv | 1 - Data/future/cme/universes/dc/20120229.csv | 1 - Data/future/cme/universes/dc/20120301.csv | 1 - Data/future/cme/universes/dc/20120302.csv | 1 - Data/future/cme/universes/dc/20120305.csv | 1 - Data/future/cme/universes/dc/20120306.csv | 1 - Data/future/cme/universes/dc/20120307.csv | 1 - Data/future/cme/universes/dc/20120308.csv | 1 - Data/future/cme/universes/dc/20120309.csv | 1 - Data/future/cme/universes/dc/20120312.csv | 1 - Data/future/cme/universes/dc/20120313.csv | 1 - Data/future/cme/universes/dc/20120314.csv | 1 - Data/future/cme/universes/dc/20120315.csv | 1 - Data/future/cme/universes/dc/20120316.csv | 1 - Data/future/cme/universes/dc/20120319.csv | 1 - Data/future/cme/universes/dc/20120320.csv | 1 - Data/future/cme/universes/dc/20120321.csv | 1 - Data/future/cme/universes/dc/20120322.csv | 1 - Data/future/cme/universes/dc/20120323.csv | 1 - Data/future/cme/universes/dc/20120326.csv | 1 - Data/future/cme/universes/dc/20120327.csv | 1 - Data/future/cme/universes/dc/20120328.csv | 1 - Data/future/cme/universes/dc/20120329.csv | 1 - Data/future/cme/universes/dc/20131004.csv | 2 - Tests/Algorithm/AlgorithmChainsTests.cs | 102 ++++++++++++++------- 69 files changed, 190 insertions(+), 184 deletions(-) create mode 100644 Common/Data/Market/BaseChains.cs diff --git a/Algorithm/QCAlgorithm.cs b/Algorithm/QCAlgorithm.cs index 8c87679f8c78..be674c69fa40 100644 --- a/Algorithm/QCAlgorithm.cs +++ b/Algorithm/QCAlgorithm.cs @@ -3439,10 +3439,10 @@ public FuturesChains FuturesChains(IEnumerable symbols, bool flatten = f .Select(x => (x.Keys.Single(), x.Values.Single().Cast())); var time = Time.Date; - var chains = new FuturesChains(time); + var chains = new FuturesChains(time, flatten); foreach (var (symbol, contracts) in futureChainsData) { - var chain = new FuturesChain(symbol, time, contracts); + var chain = new FuturesChain(symbol, time, contracts, flatten); chains.Add(symbol, chain); } diff --git a/Common/Data/Market/BaseChains.cs b/Common/Data/Market/BaseChains.cs new file mode 100644 index 000000000000..2e36806d8ff3 --- /dev/null +++ b/Common/Data/Market/BaseChains.cs @@ -0,0 +1,107 @@ +/* + * 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 Python.Runtime; +using QuantConnect.Python; +using QuantConnect.Securities; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace QuantConnect.Data.Market +{ + /// + /// Collection of keyed by canonical option symbol + /// + public class BaseChains : DataDictionary + where T : BaseChain + where TContract : ISymbol, ISymbolProvider + where TContractsCollection : DataDictionary, new() + { + private static readonly IEnumerable _flattenedDfIndexNames = new[] { "canonical", "symbol" }; + + private readonly Lazy _dataframe; + private readonly bool _flatten; + + /// + /// Creates a new instance of the dictionary + /// + protected BaseChains() + : this(default, true) + { + } + + /// + /// Creates a new instance of the dictionary + /// + protected BaseChains(bool flatten) + : this(default, flatten) + { + } + + /// + /// Creates a new instance of the dictionary + /// + protected BaseChains(DateTime time, bool flatten) + : base(time) + { + _flatten = flatten; + _dataframe = new Lazy(InitializeDataFrame, isThreadSafe: false); + } + + /// + /// The data frame representation of the option chains + /// + public PyObject DataFrame => _dataframe.Value; + + /// + /// Gets or sets the BaseChain with the specified ticker. + /// + /// + /// The BaseChain with the specified ticker. + /// + /// The ticker of the element to get or set. + /// Wraps the base implementation to enable indexing in python algorithms due to pythonnet limitations + public new T this[string ticker] { get { return base[ticker]; } set { base[ticker] = value; } } + + /// + /// Gets or sets the BaseChain with the specified Symbol. + /// + /// + /// The BaseChain with the specified Symbol. + /// + /// The Symbol of the element to get or set. + /// Wraps the base implementation to enable indexing in python algorithms due to pythonnet limitations + public new T this[Symbol symbol] { get { return base[symbol]; } set { base[symbol] = value; } } + + private PyObject InitializeDataFrame() + { + if (!PythonEngine.IsInitialized) + { + return null; + } + + var dataFrames = this.Select(kvp => kvp.Value.DataFrame).ToList(); + + if (_flatten) + { + var canonicalSymbols = this.Select(kvp => kvp.Key); + return PandasConverter.ConcatDataFrames(dataFrames, keys: canonicalSymbols, names: _flattenedDfIndexNames, sort: false); + } + + return PandasConverter.ConcatDataFrames(dataFrames, sort: false); + } + } +} diff --git a/Common/Data/Market/FuturesChains.cs b/Common/Data/Market/FuturesChains.cs index a5cf3f9376ca..9b9e98f682b1 100644 --- a/Common/Data/Market/FuturesChains.cs +++ b/Common/Data/Market/FuturesChains.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -20,7 +20,7 @@ namespace QuantConnect.Data.Market /// /// Collection of keyed by canonical futures symbol /// - public class FuturesChains : DataDictionary + public class FuturesChains : BaseChains { /// /// Creates a new instance of the dictionary @@ -32,29 +32,17 @@ public FuturesChains() /// /// Creates a new instance of the dictionary /// - public FuturesChains(DateTime time) - : base(time) + public FuturesChains(bool flatten) + : base(flatten) { } /// - /// Gets or sets the FuturesChain with the specified ticker. - /// - /// - /// The FuturesChain with the specified ticker. - /// - /// The ticker of the element to get or set. - /// Wraps the base implementation to enable indexing in python algorithms due to pythonnet limitations - public new FuturesChain this[string ticker] { get { return base[ticker]; } set { base[ticker] = value; } } - - /// - /// Gets or sets the FuturesChain with the specified Symbol. + /// Creates a new instance of the dictionary /// - /// - /// The FuturesChain with the specified Symbol. - /// - /// The Symbol of the element to get or set. - /// Wraps the base implementation to enable indexing in python algorithms due to pythonnet limitations - public new FuturesChain this[Symbol symbol] { get { return base[symbol]; } set { base[symbol] = value; } } + public FuturesChains(DateTime time, bool flatten = true) + : base(time, flatten) + { + } } -} \ No newline at end of file +} diff --git a/Common/Data/Market/OptionChains.cs b/Common/Data/Market/OptionChains.cs index c78bf21e04eb..641b9378ba8a 100644 --- a/Common/Data/Market/OptionChains.cs +++ b/Common/Data/Market/OptionChains.cs @@ -13,29 +13,19 @@ * limitations under the License. */ -using Python.Runtime; -using QuantConnect.Python; using System; -using System.Collections.Generic; -using System.Linq; namespace QuantConnect.Data.Market { /// /// Collection of keyed by canonical option symbol /// - public class OptionChains : DataDictionary + public class OptionChains : BaseChains { - private static readonly IEnumerable _flattenedDfIndexNames = new[] { "canonical", "symbol" }; - - private readonly Lazy _dataframe; - private readonly bool _flatten; - /// /// Creates a new instance of the dictionary /// - public OptionChains() - : this(default, true) + public OptionChains() : base() { } @@ -43,7 +33,7 @@ public OptionChains() /// Creates a new instance of the dictionary /// public OptionChains(bool flatten) - : this(default, flatten) + : base(flatten) { } @@ -51,53 +41,8 @@ public OptionChains(bool flatten) /// Creates a new instance of the dictionary /// public OptionChains(DateTime time, bool flatten = true) - : base(time) + : base(time, flatten) { - _flatten = flatten; - _dataframe = new Lazy(InitializeDataFrame, isThreadSafe: false); - } - - /// - /// The data frame representation of the option chains - /// - public PyObject DataFrame => _dataframe.Value; - - /// - /// Gets or sets the OptionChain with the specified ticker. - /// - /// - /// The OptionChain with the specified ticker. - /// - /// The ticker of the element to get or set. - /// Wraps the base implementation to enable indexing in python algorithms due to pythonnet limitations - public new OptionChain this[string ticker] { get { return base[ticker]; } set { base[ticker] = value; } } - - /// - /// Gets or sets the OptionChain with the specified Symbol. - /// - /// - /// The OptionChain with the specified Symbol. - /// - /// The Symbol of the element to get or set. - /// Wraps the base implementation to enable indexing in python algorithms due to pythonnet limitations - public new OptionChain this[Symbol symbol] { get { return base[symbol]; } set { base[symbol] = value; } } - - private PyObject InitializeDataFrame() - { - if (!PythonEngine.IsInitialized) - { - return null; - } - - var dataFrames = this.Select(kvp => kvp.Value.DataFrame).ToList(); - - if (_flatten) - { - var canonicalSymbols = this.Select(kvp => kvp.Key); - return PandasConverter.ConcatDataFrames(dataFrames, keys: canonicalSymbols, names: _flattenedDfIndexNames, sort: false); - } - - return PandasConverter.ConcatDataFrames(dataFrames, sort: false); } } } diff --git a/Data/future/cme/universes/dc/20111229.csv b/Data/future/cme/universes/dc/20111229.csv index 77cc45888e3b..ca8e89f55003 100644 --- a/Data/future/cme/universes/dc/20111229.csv +++ b/Data/future/cme/universes/dc/20111229.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.54,17.75,17.41,17.45,310,3824 -DC V5E8P9SH0U0X,DC01H12,17.54,17.75,17.41,17.45,310,3824 DC V67S42RJBGU9,DC01J12,17.4,17.43,17.36,17.36,25,2808 DC V70C2SDFJCHT,DC30K12,17.22,17.25,17.19,17.25,35,2650 DC V8PDSL1WA4G1,DC31M12,0,0,0,0,0, diff --git a/Data/future/cme/universes/dc/20111230.csv b/Data/future/cme/universes/dc/20111230.csv index 50b178abd6a1..cc7215f1f2da 100644 --- a/Data/future/cme/universes/dc/20111230.csv +++ b/Data/future/cme/universes/dc/20111230.csv @@ -1,7 +1,6 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V4JPUDG8NG1T,DC01H12,17.25,17.35,17.13,17.15,231,4726 DC V5E8P9SH0U0X,DC01H12,17.5,17.69,17.45,17.56,449,3926 -DC V5E8P9SH0U0X,DC01H12,17.5,17.69,17.45,17.56,449,3926 DC V67S42RJBGU9,DC01J12,17.4,17.44,17.39,17.42,31,2841 DC V70C2SDFJCHT,DC30K12,17.25,17.3,17.25,17.25,11,2687 DC V7YSQ26C7R41,DC04M12,17.16,17.34,17.15,17.28,63,1680 @@ -14,7 +13,6 @@ DC VCY032R252BL,DC02Z12,17.08,17.08,17.06,17.06,2,1269 DC VDOL5LMM7FNL,DC29F13,16.75,16.78,16.75,16.775,0,36 DC VEG5O7VCCK5D,DC26G13,0,0,0,0,0,25 DC VFEMBHO90YRL,DC02H13,0,0,0,0,0,21 -DC VFEMBHO90YRL,DC02H13,0,0,0,0,0,21 DC VH4NHDPVUHVL,DC04K13,0,0,0,0,0,5 DC VHW7ZZYLZMDD,DC02M13,0,0,0,0,0,4 DC VINSIM7C4QV5,DC30N13,0,0,0,0,0,3 diff --git a/Data/future/cme/universes/dc/20120103.csv b/Data/future/cme/universes/dc/20120103.csv index 83ea63a7564d..431a35dd4728 100644 --- a/Data/future/cme/universes/dc/20120103.csv +++ b/Data/future/cme/universes/dc/20120103.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.59,17.59,17.3,17.45,371,4894 -DC V5E8P9SH0U0X,DC01H12,17.59,17.59,17.3,17.45,371,4894 DC V67S42RJBGU9,DC01J12,17.39,17.39,17.28,17.39,63,2884 DC V70C2SDFJCHT,DC30K12,17.24,17.26,17.2,17.24,32,2703 DC V8PDSL1WA4G1,DC31M12,17.2,17.2,17.14,17.2,31,2318 diff --git a/Data/future/cme/universes/dc/20120104.csv b/Data/future/cme/universes/dc/20120104.csv index 95952dbc20ef..61169695ffb6 100644 --- a/Data/future/cme/universes/dc/20120104.csv +++ b/Data/future/cme/universes/dc/20120104.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.44,17.85,17.4,17.68,1074,5271 -DC V5E8P9SH0U0X,DC01H12,17.44,17.85,17.4,17.68,1074,5271 DC V67S42RJBGU9,DC01J12,17.39,17.6,17.39,17.58,107,2934 DC V70C2SDFJCHT,DC30K12,17.28,17.46,17.26,17.4,75,2764 DC V8PDSL1WA4G1,DC31M12,17.22,17.4,17.22,17.35,30,2337 diff --git a/Data/future/cme/universes/dc/20120105.csv b/Data/future/cme/universes/dc/20120105.csv index bc911ddebd5d..24d9afa45459 100644 --- a/Data/future/cme/universes/dc/20120105.csv +++ b/Data/future/cme/universes/dc/20120105.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.95,17.95,17.57,17.74,531,5271 -DC V5E8P9SH0U0X,DC01H12,17.95,17.95,17.57,17.74,531,5271 DC V67S42RJBGU9,DC01J12,17.69,17.78,17.59,17.73,83,2934 DC V70C2SDFJCHT,DC30K12,17.5,17.59,17.44,17.55,50,2764 DC V8PDSL1WA4G1,DC31M12,17.42,17.5,17.39,17.5,24,2337 diff --git a/Data/future/cme/universes/dc/20120106.csv b/Data/future/cme/universes/dc/20120106.csv index 81b8692289ae..aca942f2b5f1 100644 --- a/Data/future/cme/universes/dc/20120106.csv +++ b/Data/future/cme/universes/dc/20120106.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.95,18.04,17.36,17.42,974,4467 -DC V5E8P9SH0U0X,DC01H12,17.95,18.04,17.36,17.42,974,4467 DC V67S42RJBGU9,DC01J12,17.8,17.87,17.64,17.66,146,3067 DC V70C2SDFJCHT,DC30K12,17.6,17.62,17.45,17.48,52,2795 DC V8PDSL1WA4G1,DC31M12,17.59,17.6,17.43,17.43,40,2362 diff --git a/Data/future/cme/universes/dc/20120109.csv b/Data/future/cme/universes/dc/20120109.csv index 3ccf883e0408..692e1f2ca75c 100644 --- a/Data/future/cme/universes/dc/20120109.csv +++ b/Data/future/cme/universes/dc/20120109.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.65,17.74,17.14,17.3,644,5493 -DC V5E8P9SH0U0X,DC01H12,17.65,17.74,17.14,17.3,644,5493 DC V67S42RJBGU9,DC01J12,17.7,17.7,17.6,17.66,42,3084 DC V70C2SDFJCHT,DC30K12,17.51,17.54,17.48,17.5,25,2809 DC V8PDSL1WA4G1,DC31M12,17.52,17.52,17.46,17.46,13,2376 diff --git a/Data/future/cme/universes/dc/20120110.csv b/Data/future/cme/universes/dc/20120110.csv index aedd9ad4b3a4..d2bd90ec6c5a 100644 --- a/Data/future/cme/universes/dc/20120110.csv +++ b/Data/future/cme/universes/dc/20120110.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.78,17.87,17.35,17.47,327,5604 -DC V5E8P9SH0U0X,DC01H12,17.78,17.87,17.35,17.47,327,5604 DC V67S42RJBGU9,DC01J12,17.66,17.76,17.65,17.67,44,3113 DC V70C2SDFJCHT,DC30K12,17.51,17.6,17.5,17.59,34,2835 DC V8PDSL1WA4G1,DC31M12,17.5,17.56,17.46,17.52,23,2391 diff --git a/Data/future/cme/universes/dc/20120111.csv b/Data/future/cme/universes/dc/20120111.csv index e79c9ae04d81..caa018f8c025 100644 --- a/Data/future/cme/universes/dc/20120111.csv +++ b/Data/future/cme/universes/dc/20120111.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.39,17.83,17.25,17.76,716,5713 -DC V5E8P9SH0U0X,DC01H12,17.39,17.83,17.25,17.76,716,5713 DC V67S42RJBGU9,DC01J12,17.65,17.71,17.61,17.61,32,3133 DC V70C2SDFJCHT,DC30K12,17.57,17.62,17.54,17.59,19,2842 DC V8PDSL1WA4G1,DC31M12,17.54,17.6,17.5,17.6,25,2411 diff --git a/Data/future/cme/universes/dc/20120112.csv b/Data/future/cme/universes/dc/20120112.csv index 432488d0dbbb..e4cdb8b04681 100644 --- a/Data/future/cme/universes/dc/20120112.csv +++ b/Data/future/cme/universes/dc/20120112.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.71,17.75,17.01,17.08,1429,5713 -DC V5E8P9SH0U0X,DC01H12,17.71,17.75,17.01,17.08,1429,5713 DC V67S42RJBGU9,DC01J12,17.61,17.66,17.3,17.31,80,3133 DC V70C2SDFJCHT,DC30K12,17.57,17.61,17.35,17.35,42,2842 DC V8PDSL1WA4G1,DC31M12,17.56,17.58,17.37,17.44,38,2411 diff --git a/Data/future/cme/universes/dc/20120113.csv b/Data/future/cme/universes/dc/20120113.csv index 623c4660ffbf..fabf95dc942a 100644 --- a/Data/future/cme/universes/dc/20120113.csv +++ b/Data/future/cme/universes/dc/20120113.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.06,17.37,16.9,17.25,786,4947 -DC V5E8P9SH0U0X,DC01H12,17.06,17.37,16.9,17.25,786,4947 DC V67S42RJBGU9,DC01J12,17.3,17.3,17.2,17.2,84,3180 DC V70C2SDFJCHT,DC30K12,17.29,17.33,17.2,17.2,27,2873 DC V8PDSL1WA4G1,DC31M12,17.35,17.41,17.24,17.24,23,2426 diff --git a/Data/future/cme/universes/dc/20120117.csv b/Data/future/cme/universes/dc/20120117.csv index 6325829bc68f..8aa0feea6430 100644 --- a/Data/future/cme/universes/dc/20120117.csv +++ b/Data/future/cme/universes/dc/20120117.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,17.21,17.23,16.47,16.62,1426,5531 -DC V5E8P9SH0U0X,DC01H12,17.21,17.23,16.47,16.62,1426,5531 DC V67S42RJBGU9,DC01J12,17.12,17.12,16.56,16.61,228,3207 DC V70C2SDFJCHT,DC30K12,17.2,17.2,16.7,16.75,176,2919 DC V8PDSL1WA4G1,DC31M12,17.25,17.25,16.79,16.9,147,2443 diff --git a/Data/future/cme/universes/dc/20120118.csv b/Data/future/cme/universes/dc/20120118.csv index 5a0b8a105cd9..4d371f379ed7 100644 --- a/Data/future/cme/universes/dc/20120118.csv +++ b/Data/future/cme/universes/dc/20120118.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.61,16.82,16.28,16.51,1233,5268 -DC V5E8P9SH0U0X,DC01H12,16.61,16.82,16.28,16.51,1233,5268 DC V67S42RJBGU9,DC01J12,16.45,16.74,16.43,16.64,166,3177 DC V70C2SDFJCHT,DC30K12,16.67,16.89,16.56,16.8,71,2926 DC V8PDSL1WA4G1,DC31M12,16.85,17.15,16.76,17.05,83,2467 diff --git a/Data/future/cme/universes/dc/20120119.csv b/Data/future/cme/universes/dc/20120119.csv index 99bcc20904c1..28e33c577e24 100644 --- a/Data/future/cme/universes/dc/20120119.csv +++ b/Data/future/cme/universes/dc/20120119.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.87,17.08,16.31,16.43,685,5268 -DC V5E8P9SH0U0X,DC01H12,16.87,17.08,16.31,16.43,685,5268 DC V67S42RJBGU9,DC01J12,16.82,16.9,16.59,16.67,87,3177 DC V70C2SDFJCHT,DC30K12,16.92,17,16.78,16.82,44,2926 DC V8PDSL1WA4G1,DC31M12,17.16,17.19,17.05,17.05,41,2467 diff --git a/Data/future/cme/universes/dc/20120120.csv b/Data/future/cme/universes/dc/20120120.csv index 2ba2b91f4e5a..268872c357fa 100644 --- a/Data/future/cme/universes/dc/20120120.csv +++ b/Data/future/cme/universes/dc/20120120.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.37,16.67,16.25,16.59,380,5312 -DC V5E8P9SH0U0X,DC01H12,16.37,16.67,16.25,16.59,380,5312 DC V67S42RJBGU9,DC01J12,16.61,16.64,16.51,16.6,115,3228 DC V70C2SDFJCHT,DC30K12,16.77,16.77,16.69,16.75,41,2947 DC V8PDSL1WA4G1,DC31M12,17.07,17.07,16.97,17.02,20,2477 diff --git a/Data/future/cme/universes/dc/20120123.csv b/Data/future/cme/universes/dc/20120123.csv index 93530eea45b4..d61772efbc27 100644 --- a/Data/future/cme/universes/dc/20120123.csv +++ b/Data/future/cme/universes/dc/20120123.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.54,16.95,16.28,16.56,397,5218 -DC V5E8P9SH0U0X,DC01H12,16.54,16.95,16.28,16.56,397,5218 DC V67S42RJBGU9,DC01J12,16.6,16.89,16.56,16.8,122,3227 DC V70C2SDFJCHT,DC30K12,16.8,16.92,16.76,16.81,31,2942 DC V8PDSL1WA4G1,DC31M12,17.02,17.17,16.95,17.1,87,2486 diff --git a/Data/future/cme/universes/dc/20120124.csv b/Data/future/cme/universes/dc/20120124.csv index c31b497bfcd1..30d2025a54dc 100644 --- a/Data/future/cme/universes/dc/20120124.csv +++ b/Data/future/cme/universes/dc/20120124.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.83,16.9,16.53,16.62,653,5352 -DC V5E8P9SH0U0X,DC01H12,16.83,16.9,16.53,16.62,653,5352 DC V67S42RJBGU9,DC01J12,16.81,16.85,16.74,16.74,56,3233 DC V70C2SDFJCHT,DC30K12,16.9,16.9,16.76,16.8,33,2930 DC V8PDSL1WA4G1,DC31M12,17.14,17.14,17.03,17.03,24,2480 diff --git a/Data/future/cme/universes/dc/20120125.csv b/Data/future/cme/universes/dc/20120125.csv index e4ff57a1bd21..69f1ae724f6a 100644 --- a/Data/future/cme/universes/dc/20120125.csv +++ b/Data/future/cme/universes/dc/20120125.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.79,16.92,16.48,16.62,313,5414 -DC V5E8P9SH0U0X,DC01H12,16.79,16.92,16.48,16.62,313,5414 DC V67S42RJBGU9,DC01J12,16.77,16.9,16.63,16.87,100,3246 DC V70C2SDFJCHT,DC30K12,16.87,16.93,16.75,16.93,40,2935 DC V8PDSL1WA4G1,DC31M12,17,17.07,16.96,17,15,2478 diff --git a/Data/future/cme/universes/dc/20120126.csv b/Data/future/cme/universes/dc/20120126.csv index 5d9cb238de47..66bbc5295d9e 100644 --- a/Data/future/cme/universes/dc/20120126.csv +++ b/Data/future/cme/universes/dc/20120126.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.66,16.93,16.58,16.72,553,5414 -DC V5E8P9SH0U0X,DC01H12,16.66,16.93,16.58,16.72,553,5414 DC V67S42RJBGU9,DC01J12,16.82,16.9,16.75,16.75,83,3246 DC V70C2SDFJCHT,DC30K12,16.95,17,16.83,16.87,22,2935 DC V8PDSL1WA4G1,DC31M12,17.04,17.12,16.96,17,24,2478 diff --git a/Data/future/cme/universes/dc/20120127.csv b/Data/future/cme/universes/dc/20120127.csv index c7949c353669..8399a4dc8274 100644 --- a/Data/future/cme/universes/dc/20120127.csv +++ b/Data/future/cme/universes/dc/20120127.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.69,16.72,16.55,16.62,696,5451 -DC V5E8P9SH0U0X,DC01H12,16.69,16.72,16.55,16.62,696,5451 DC V67S42RJBGU9,DC01J12,16.71,16.71,16.57,16.62,67,3301 DC V70C2SDFJCHT,DC30K12,16.78,16.78,16.65,16.65,57,2948 DC V8PDSL1WA4G1,DC31M12,16.92,16.96,16.87,16.9,49,2511 diff --git a/Data/future/cme/universes/dc/20120130.csv b/Data/future/cme/universes/dc/20120130.csv index 083c731e5123..f2dfe161d858 100644 --- a/Data/future/cme/universes/dc/20120130.csv +++ b/Data/future/cme/universes/dc/20120130.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.59,16.65,16.45,16.59,523,5894 -DC V5E8P9SH0U0X,DC01H12,16.59,16.65,16.45,16.59,523,5894 DC V67S42RJBGU9,DC01J12,16.57,16.57,16.46,16.5,147,3318 DC V70C2SDFJCHT,DC30K12,16.66,16.68,16.56,16.68,63,2962 DC V8PDSL1WA4G1,DC31M12,16.89,16.89,16.8,16.85,31,2511 diff --git a/Data/future/cme/universes/dc/20120131.csv b/Data/future/cme/universes/dc/20120131.csv index df3beb75adda..68a0ebf7f46c 100644 --- a/Data/future/cme/universes/dc/20120131.csv +++ b/Data/future/cme/universes/dc/20120131.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.58,16.62,16.2,16.35,641,5410 -DC V5E8P9SH0U0X,DC01H12,16.58,16.62,16.2,16.35,641,5410 DC V67S42RJBGU9,DC01J12,16.5,16.5,16.17,16.23,297,3426 DC V70C2SDFJCHT,DC30K12,16.58,16.58,16.41,16.5,133,2997 DC V8PDSL1WA4G1,DC31M12,16.89,16.89,16.8,16.85,0, diff --git a/Data/future/cme/universes/dc/20120201.csv b/Data/future/cme/universes/dc/20120201.csv index 861232f46c22..b50ebfd305c4 100644 --- a/Data/future/cme/universes/dc/20120201.csv +++ b/Data/future/cme/universes/dc/20120201.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.19,16.31,15.72,16.12,881,5857 -DC V5E8P9SH0U0X,DC01H12,16.19,16.31,15.72,16.12,881,5857 DC V67S42RJBGU9,DC01J12,16.18,16.18,15.72,15.9,319,3533 DC V70C2SDFJCHT,DC30K12,16.43,16.43,16.23,16.35,127,3028 DC V8PDSL1WA4G1,DC31M12,0,0,0,0,0,2579 diff --git a/Data/future/cme/universes/dc/20120202.csv b/Data/future/cme/universes/dc/20120202.csv index 7f00047e9984..477cdcbd391e 100644 --- a/Data/future/cme/universes/dc/20120202.csv +++ b/Data/future/cme/universes/dc/20120202.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16,16.2,15.55,15.9,524,5857 -DC V5E8P9SH0U0X,DC01H12,16,16.2,15.55,15.9,524,5857 DC V67S42RJBGU9,DC01J12,15.78,16.13,15.7,15.97,110,3533 DC V70C2SDFJCHT,DC30K12,16.25,16.44,16.2,16.42,69,3028 DC V8PDSL1WA4G1,DC31M12,16.58,16.76,16.58,16.66,24,2579 diff --git a/Data/future/cme/universes/dc/20120203.csv b/Data/future/cme/universes/dc/20120203.csv index b92dfe1119b6..32a66df0d6a7 100644 --- a/Data/future/cme/universes/dc/20120203.csv +++ b/Data/future/cme/universes/dc/20120203.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.74,16.18,15.63,16.12,241,5565 -DC V5E8P9SH0U0X,DC01H12,15.74,16.18,15.63,16.12,241,5565 DC V67S42RJBGU9,DC01J12,15.89,16.05,15.81,16,85,3579 DC V70C2SDFJCHT,DC30K12,16.29,16.48,16.29,16.42,73,3053 DC V8PDSL1WA4G1,DC31M12,16.6,16.77,16.59,16.7,27,2603 diff --git a/Data/future/cme/universes/dc/20120206.csv b/Data/future/cme/universes/dc/20120206.csv index 0ced8b6571dd..e76df16289ee 100644 --- a/Data/future/cme/universes/dc/20120206.csv +++ b/Data/future/cme/universes/dc/20120206.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.9,16.12,15.48,16.09,228,5569 -DC V5E8P9SH0U0X,DC01H12,15.9,16.12,15.48,16.09,228,5569 DC V67S42RJBGU9,DC01J12,16.05,16.06,15.71,15.75,126,3578 DC V70C2SDFJCHT,DC30K12,16.48,16.48,16.29,16.31,56,3056 DC V8PDSL1WA4G1,DC31M12,16.71,16.71,16.59,16.64,20,2601 diff --git a/Data/future/cme/universes/dc/20120207.csv b/Data/future/cme/universes/dc/20120207.csv index baecdbe3e436..fe9a97dd4a70 100644 --- a/Data/future/cme/universes/dc/20120207.csv +++ b/Data/future/cme/universes/dc/20120207.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.51,16.08,15.29,16.07,560,5975 -DC V5E8P9SH0U0X,DC01H12,15.51,16.08,15.29,16.07,560,5975 DC V67S42RJBGU9,DC01J12,15.64,15.72,15.49,15.66,319,3660 DC V70C2SDFJCHT,DC30K12,16.22,16.24,16.02,16.19,132,3095 DC V8PDSL1WA4G1,DC31M12,16.55,16.59,16.51,16.57,72,2632 diff --git a/Data/future/cme/universes/dc/20120208.csv b/Data/future/cme/universes/dc/20120208.csv index 690f5f4160c6..ee350a8a729c 100644 --- a/Data/future/cme/universes/dc/20120208.csv +++ b/Data/future/cme/universes/dc/20120208.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.09,16.11,15.36,15.61,466,5963 -DC V5E8P9SH0U0X,DC01H12,16.09,16.11,15.36,15.61,466,5963 DC V67S42RJBGU9,DC01J12,15.73,15.82,15.55,15.71,254,3716 DC V70C2SDFJCHT,DC30K12,16.19,16.2,16,16.1,134,3106 DC V8PDSL1WA4G1,DC31M12,16.57,16.58,16.4,16.52,79,2658 diff --git a/Data/future/cme/universes/dc/20120209.csv b/Data/future/cme/universes/dc/20120209.csv index 9b4aae9ad274..4b8a575724bd 100644 --- a/Data/future/cme/universes/dc/20120209.csv +++ b/Data/future/cme/universes/dc/20120209.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.62,16.12,15.52,16.08,303,5963 -DC V5E8P9SH0U0X,DC01H12,15.62,16.12,15.52,16.08,303,5963 DC V67S42RJBGU9,DC01J12,15.78,15.88,15.65,15.75,191,3716 DC V70C2SDFJCHT,DC30K12,16.12,16.18,16,16.12,109,3106 DC V8PDSL1WA4G1,DC31M12,16.53,16.58,16.42,16.46,77,2658 diff --git a/Data/future/cme/universes/dc/20120210.csv b/Data/future/cme/universes/dc/20120210.csv index caf0540d63d3..f13b42cf1742 100644 --- a/Data/future/cme/universes/dc/20120210.csv +++ b/Data/future/cme/universes/dc/20120210.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.45,16.08,15.41,16.07,517,5538 -DC V5E8P9SH0U0X,DC01H12,15.45,16.08,15.41,16.07,517,5538 DC V67S42RJBGU9,DC01J12,15.65,15.75,15.55,15.59,279,3843 DC V70C2SDFJCHT,DC30K12,15.96,16.02,15.9,15.91,79,3152 DC V8PDSL1WA4G1,DC31M12,0,0,0,0,0,2741 diff --git a/Data/future/cme/universes/dc/20120213.csv b/Data/future/cme/universes/dc/20120213.csv index 860fafe6920e..9c61018f0ad3 100644 --- a/Data/future/cme/universes/dc/20120213.csv +++ b/Data/future/cme/universes/dc/20120213.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.08,16.1,15.4,15.59,287,6123 -DC V5E8P9SH0U0X,DC01H12,16.08,16.1,15.4,15.59,287,6123 DC V67S42RJBGU9,DC01J12,15.57,15.76,15.57,15.73,155,3852 DC V70C2SDFJCHT,DC30K12,15.9,16,15.9,15.96,141,3242 DC V8PDSL1WA4G1,DC31M12,16.19,16.31,16.13,16.13,115,2768 diff --git a/Data/future/cme/universes/dc/20120214.csv b/Data/future/cme/universes/dc/20120214.csv index 5d913354331a..b68766a7e770 100644 --- a/Data/future/cme/universes/dc/20120214.csv +++ b/Data/future/cme/universes/dc/20120214.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.6,16.15,15.56,16.12,831,6149 -DC V5E8P9SH0U0X,DC01H12,15.6,16.15,15.56,16.12,831,6149 DC V67S42RJBGU9,DC01J12,15.8,16.19,15.75,15.94,461,3908 DC V70C2SDFJCHT,DC30K12,15.96,16.28,15.93,16.12,300,3286 DC V8PDSL1WA4G1,DC31M12,16.29,16.35,16.12,16.26,56,2783 diff --git a/Data/future/cme/universes/dc/20120215.csv b/Data/future/cme/universes/dc/20120215.csv index c144df85997d..50f1a6cd9a38 100644 --- a/Data/future/cme/universes/dc/20120215.csv +++ b/Data/future/cme/universes/dc/20120215.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.7,16.11,15.56,16.1,382,5524 -DC V5E8P9SH0U0X,DC01H12,15.7,16.11,15.56,16.1,382,5524 DC V67S42RJBGU9,DC01J12,15.76,15.79,15.53,15.57,232,3967 DC V70C2SDFJCHT,DC30K12,15.99,16,15.84,15.86,72,3289 DC V8PDSL1WA4G1,DC31M12,16.08,16.18,16.05,16.12,67,2818 diff --git a/Data/future/cme/universes/dc/20120216.csv b/Data/future/cme/universes/dc/20120216.csv index 11fd20059738..4ee0f879e9c0 100644 --- a/Data/future/cme/universes/dc/20120216.csv +++ b/Data/future/cme/universes/dc/20120216.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.07,16.09,15.5,15.7,181,5524 -DC V5E8P9SH0U0X,DC01H12,16.07,16.09,15.5,15.7,181,5524 DC V67S42RJBGU9,DC01J12,15.47,15.68,15.44,15.65,117,3967 DC V70C2SDFJCHT,DC30K12,15.75,16,15.75,15.93,119,3289 DC V8PDSL1WA4G1,DC31M12,16.05,16.2,16.05,16.17,38,2818 diff --git a/Data/future/cme/universes/dc/20120217.csv b/Data/future/cme/universes/dc/20120217.csv index 62c5322997b4..556186e60109 100644 --- a/Data/future/cme/universes/dc/20120217.csv +++ b/Data/future/cme/universes/dc/20120217.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.52,16.07,15.41,16.07,292,6234 -DC V5E8P9SH0U0X,DC01H12,15.52,16.07,15.41,16.07,292,6234 DC V67S42RJBGU9,DC01J12,15.43,15.52,15.24,15.26,422,4034 DC V70C2SDFJCHT,DC30K12,15.7,15.72,15.4,15.5,280,3376 DC V8PDSL1WA4G1,DC31M12,15.98,16,15.74,15.86,161,2957 diff --git a/Data/future/cme/universes/dc/20120221.csv b/Data/future/cme/universes/dc/20120221.csv index f4af4d16b03d..3c76e2f7943a 100644 --- a/Data/future/cme/universes/dc/20120221.csv +++ b/Data/future/cme/universes/dc/20120221.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.07,16.09,15.35,15.38,147,6214 -DC V5E8P9SH0U0X,DC01H12,16.07,16.09,15.35,15.38,147,6214 DC V67S42RJBGU9,DC01J12,15.22,15.26,15.12,15.2,253,4073 DC V70C2SDFJCHT,DC30K12,15.39,15.44,15.35,15.37,89,3405 DC V8PDSL1WA4G1,DC31M12,15.76,15.8,15.69,15.75,91,2954 diff --git a/Data/future/cme/universes/dc/20120222.csv b/Data/future/cme/universes/dc/20120222.csv index fea01af6018f..70b00ad58b90 100644 --- a/Data/future/cme/universes/dc/20120222.csv +++ b/Data/future/cme/universes/dc/20120222.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.09,16.1,15.17,15.24,461,5475 -DC V5E8P9SH0U0X,DC01H12,16.09,16.1,15.17,15.24,461,5475 DC V67S42RJBGU9,DC01J12,15.21,15.23,14.84,15,394,4238 DC V70C2SDFJCHT,DC30K12,15.36,15.39,15.04,15.1,262,3459 DC V8PDSL1WA4G1,DC31M12,15.65,15.7,15.41,15.45,157,3022 diff --git a/Data/future/cme/universes/dc/20120223.csv b/Data/future/cme/universes/dc/20120223.csv index 53d0c1892a12..56da26b97a9b 100644 --- a/Data/future/cme/universes/dc/20120223.csv +++ b/Data/future/cme/universes/dc/20120223.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.29,16.09,15.22,16.09,275,5475 -DC V5E8P9SH0U0X,DC01H12,15.29,16.09,15.22,16.09,275,5475 DC V67S42RJBGU9,DC01J12,15.04,15.23,14.97,15.05,272,4238 DC V70C2SDFJCHT,DC30K12,15.16,15.33,15.03,15.17,199,3459 DC V8PDSL1WA4G1,DC31M12,15.54,15.56,15.4,15.47,93,3022 diff --git a/Data/future/cme/universes/dc/20120224.csv b/Data/future/cme/universes/dc/20120224.csv index 8acb51a20e2c..ec445a730fb4 100644 --- a/Data/future/cme/universes/dc/20120224.csv +++ b/Data/future/cme/universes/dc/20120224.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.27,16.08,15.2,16.07,394,6270 -DC V5E8P9SH0U0X,DC01H12,15.27,16.08,15.2,16.07,394,6270 DC V67S42RJBGU9,DC01J12,15.17,15.3,15,15.26,388,4338 DC V70C2SDFJCHT,DC30K12,15.18,15.3,15.08,15.24,156,3472 DC V8PDSL1WA4G1,DC31M12,15.44,15.62,15.39,15.58,85,3054 diff --git a/Data/future/cme/universes/dc/20120227.csv b/Data/future/cme/universes/dc/20120227.csv index c130cb0d7d10..5f4adeefe4ab 100644 --- a/Data/future/cme/universes/dc/20120227.csv +++ b/Data/future/cme/universes/dc/20120227.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.39,16.08,15.3,16.07,454,6147 -DC V5E8P9SH0U0X,DC01H12,15.39,16.08,15.3,16.07,454,6147 DC V67S42RJBGU9,DC01J12,15.26,15.5,15.13,15.15,522,4490 DC V70C2SDFJCHT,DC30K12,15.28,15.39,15.17,15.18,181,3462 DC V8PDSL1WA4G1,DC31M12,15.47,15.57,15.47,15.49,60,3043 diff --git a/Data/future/cme/universes/dc/20120228.csv b/Data/future/cme/universes/dc/20120228.csv index 313d438d400e..d8bd3ee68bf2 100644 --- a/Data/future/cme/universes/dc/20120228.csv +++ b/Data/future/cme/universes/dc/20120228.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,16.07,16.07,15.38,15.56,306,6074 -DC V5E8P9SH0U0X,DC01H12,16.07,16.07,15.38,15.56,306,6074 DC V67S42RJBGU9,DC01J12,15.18,15.53,15.1,15.45,492,4481 DC V70C2SDFJCHT,DC30K12,15.24,15.45,15.18,15.35,237,3429 DC V8PDSL1WA4G1,DC31M12,15.5,15.74,15.47,15.66,137,3041 diff --git a/Data/future/cme/universes/dc/20120229.csv b/Data/future/cme/universes/dc/20120229.csv index f92f098b783a..19b02eaeb1e3 100644 --- a/Data/future/cme/universes/dc/20120229.csv +++ b/Data/future/cme/universes/dc/20120229.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.58,15.74,15.47,15.5,258,6025 -DC V5E8P9SH0U0X,DC01H12,15.58,15.74,15.47,15.5,258,6025 DC V67S42RJBGU9,DC01J12,15.47,15.64,15.45,15.59,290,4473 DC V70C2SDFJCHT,DC30K12,15.39,15.52,15.34,15.48,155,3428 DC V8PDSL1WA4G1,DC31M12,15.66,15.82,15.66,15.82,48,3044 diff --git a/Data/future/cme/universes/dc/20120301.csv b/Data/future/cme/universes/dc/20120301.csv index 5b9bd58571fb..bdeb4f0c2bd5 100644 --- a/Data/future/cme/universes/dc/20120301.csv +++ b/Data/future/cme/universes/dc/20120301.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.51,15.54,15.25,15.35,216,6025 -DC V5E8P9SH0U0X,DC01H12,15.51,15.54,15.25,15.35,216,6025 DC V67S42RJBGU9,DC01J12,15.58,15.59,14.85,14.93,592,4473 DC V70C2SDFJCHT,DC30K12,15.48,15.49,14.8,14.96,297,3428 DC V8PDSL1WA4G1,DC31M12,15.83,15.83,15.27,15.46,164,3044 diff --git a/Data/future/cme/universes/dc/20120302.csv b/Data/future/cme/universes/dc/20120302.csv index 05ab57415a95..deb69d5d900a 100644 --- a/Data/future/cme/universes/dc/20120302.csv +++ b/Data/future/cme/universes/dc/20120302.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.33,15.37,15.15,15.21,348,6064 -DC V5E8P9SH0U0X,DC01H12,15.33,15.37,15.15,15.21,348,6064 DC V67S42RJBGU9,DC01J12,14.85,14.85,14.24,14.26,675,4769 DC V70C2SDFJCHT,DC30K12,14.76,14.77,14.2,14.24,408,3701 DC V8PDSL1WA4G1,DC31M12,15.35,15.35,14.75,14.86,287,3167 diff --git a/Data/future/cme/universes/dc/20120305.csv b/Data/future/cme/universes/dc/20120305.csv index 0f8063b3f8f5..643f2849adfc 100644 --- a/Data/future/cme/universes/dc/20120305.csv +++ b/Data/future/cme/universes/dc/20120305.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.23,15.35,15.23,15.28,120,6063 -DC V5E8P9SH0U0X,DC01H12,15.23,15.35,15.23,15.28,120,6063 DC V67S42RJBGU9,DC01J12,14.44,14.96,14.44,14.9,542,4694 DC V70C2SDFJCHT,DC30K12,14.39,14.95,14.39,14.87,337,3746 DC V8PDSL1WA4G1,DC31M12,14.97,15.5,14.97,15.46,131,3174 diff --git a/Data/future/cme/universes/dc/20120306.csv b/Data/future/cme/universes/dc/20120306.csv index 6c9b1f877c5d..561cc83a06ca 100644 --- a/Data/future/cme/universes/dc/20120306.csv +++ b/Data/future/cme/universes/dc/20120306.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.32,15.4,15.26,15.35,185,6093 -DC V5E8P9SH0U0X,DC01H12,15.32,15.4,15.26,15.35,185,6093 DC V67S42RJBGU9,DC01J12,14.85,15.45,14.73,15.1,1036,4735 DC V70C2SDFJCHT,DC30K12,14.86,15.38,14.65,15.06,777,3737 DC V8PDSL1WA4G1,DC31M12,15.44,15.85,15.31,15.45,301,3184 diff --git a/Data/future/cme/universes/dc/20120307.csv b/Data/future/cme/universes/dc/20120307.csv index 1bdffe7e4501..5c266f2bb39e 100644 --- a/Data/future/cme/universes/dc/20120307.csv +++ b/Data/future/cme/universes/dc/20120307.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.42,15.44,15.28,15.35,222,6263 -DC V5E8P9SH0U0X,DC01H12,15.42,15.44,15.28,15.35,222,6263 DC V67S42RJBGU9,DC01J12,15.35,15.36,15.09,15.29,408,4734 DC V70C2SDFJCHT,DC30K12,15.31,15.33,15.08,15.28,316,3748 DC V8PDSL1WA4G1,DC31M12,15.71,15.77,15.5,15.71,171,3213 diff --git a/Data/future/cme/universes/dc/20120308.csv b/Data/future/cme/universes/dc/20120308.csv index 79a61a59ba11..0aa20d70e7d2 100644 --- a/Data/future/cme/universes/dc/20120308.csv +++ b/Data/future/cme/universes/dc/20120308.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.41,15.45,15.38,15.42,193,6263 -DC V5E8P9SH0U0X,DC01H12,15.41,15.45,15.38,15.42,193,6263 DC V67S42RJBGU9,DC01J12,15.2,15.35,15.18,15.24,188,4734 DC V70C2SDFJCHT,DC30K12,15.24,15.32,15.15,15.17,147,3748 DC V8PDSL1WA4G1,DC31M12,15.68,15.74,15.58,15.65,44,3213 diff --git a/Data/future/cme/universes/dc/20120309.csv b/Data/future/cme/universes/dc/20120309.csv index bd91b143684a..38cc93184a82 100644 --- a/Data/future/cme/universes/dc/20120309.csv +++ b/Data/future/cme/universes/dc/20120309.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.45,15.48,15.44,15.47,69,6245 -DC V5E8P9SH0U0X,DC01H12,15.45,15.48,15.44,15.47,69,6245 DC V67S42RJBGU9,DC01J12,15.32,15.49,15.32,15.49,332,4682 DC V70C2SDFJCHT,DC30K12,15.33,15.47,15.3,15.46,99,3775 DC V8PDSL1WA4G1,DC31M12,15.75,15.82,15.72,15.82,47,3219 diff --git a/Data/future/cme/universes/dc/20120312.csv b/Data/future/cme/universes/dc/20120312.csv index b27412fad710..0535e308e0d4 100644 --- a/Data/future/cme/universes/dc/20120312.csv +++ b/Data/future/cme/universes/dc/20120312.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.48,15.52,15.45,15.47,245,6138 -DC V5E8P9SH0U0X,DC01H12,15.48,15.52,15.45,15.47,245,6138 DC V67S42RJBGU9,DC01J12,15.45,15.59,15.31,15.42,389,4675 DC V70C2SDFJCHT,DC30K12,15.44,15.46,15.2,15.2,279,3783 DC V8PDSL1WA4G1,DC31M12,15.82,15.82,15.57,15.65,116,3267 diff --git a/Data/future/cme/universes/dc/20120313.csv b/Data/future/cme/universes/dc/20120313.csv index 49690b82ea7a..64575e969f4f 100644 --- a/Data/future/cme/universes/dc/20120313.csv +++ b/Data/future/cme/universes/dc/20120313.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.49,15.52,15.49,15.52,61,6134 -DC V5E8P9SH0U0X,DC01H12,15.49,15.52,15.49,15.52,61,6134 DC V67S42RJBGU9,DC01J12,15.48,15.73,15.42,15.68,339,4664 DC V70C2SDFJCHT,DC30K12,15.24,15.38,15.12,15.38,171,3796 DC V8PDSL1WA4G1,DC31M12,15.63,15.8,15.55,15.8,91,3258 diff --git a/Data/future/cme/universes/dc/20120314.csv b/Data/future/cme/universes/dc/20120314.csv index cb5296c351af..74f04688bef3 100644 --- a/Data/future/cme/universes/dc/20120314.csv +++ b/Data/future/cme/universes/dc/20120314.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.52,15.54,15.47,15.51,72,6096 -DC V5E8P9SH0U0X,DC01H12,15.52,15.54,15.47,15.51,72,6096 DC V67S42RJBGU9,DC01J12,15.77,16.01,15.7,15.9,523,4745 DC V70C2SDFJCHT,DC30K12,15.43,15.68,15.39,15.65,258,3835 DC V8PDSL1WA4G1,DC31M12,15.84,16.04,15.75,15.95,171,3283 diff --git a/Data/future/cme/universes/dc/20120315.csv b/Data/future/cme/universes/dc/20120315.csv index 70fbd571ad5b..f5b68c402705 100644 --- a/Data/future/cme/universes/dc/20120315.csv +++ b/Data/future/cme/universes/dc/20120315.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.62,15.65,15.61,15.61,79,6096 -DC V5E8P9SH0U0X,DC01H12,15.62,15.65,15.61,15.61,79,6096 DC V67S42RJBGU9,DC01J12,16.07,16.14,15.62,15.62,325,4745 DC V70C2SDFJCHT,DC30K12,15.78,15.78,15.33,15.33,220,3835 DC V8PDSL1WA4G1,DC31M12,16.1,16.15,15.78,15.78,78,3283 diff --git a/Data/future/cme/universes/dc/20120316.csv b/Data/future/cme/universes/dc/20120316.csv index 6d519fa74d48..1989a2b0d3ec 100644 --- a/Data/future/cme/universes/dc/20120316.csv +++ b/Data/future/cme/universes/dc/20120316.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.64,15.66,15.62,15.63,29,6101 -DC V5E8P9SH0U0X,DC01H12,15.64,15.66,15.62,15.63,29,6101 DC V67S42RJBGU9,DC01J12,15.61,16,15.36,15.79,294,4832 DC V70C2SDFJCHT,DC30K12,15.28,15.56,15.09,15.14,238,4030 DC V8PDSL1WA4G1,DC31M12,15.63,15.88,15.51,15.53,109,3390 diff --git a/Data/future/cme/universes/dc/20120319.csv b/Data/future/cme/universes/dc/20120319.csv index fb8e548148be..a386275b76f4 100644 --- a/Data/future/cme/universes/dc/20120319.csv +++ b/Data/future/cme/universes/dc/20120319.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.64,15.65,15.64,15.64,17,6098 -DC V5E8P9SH0U0X,DC01H12,15.64,15.65,15.64,15.64,17,6098 DC V67S42RJBGU9,DC01J12,15.76,15.9,15.65,15.9,313,4899 DC V70C2SDFJCHT,DC30K12,15.17,15.3,15,15.3,337,4129 DC V8PDSL1WA4G1,DC31M12,15.49,15.68,15.4,15.68,150,3470 diff --git a/Data/future/cme/universes/dc/20120320.csv b/Data/future/cme/universes/dc/20120320.csv index 9cd8ab09ab2b..9dd869abd9e6 100644 --- a/Data/future/cme/universes/dc/20120320.csv +++ b/Data/future/cme/universes/dc/20120320.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.65,15.68,15.64,15.65,63,6125 -DC V5E8P9SH0U0X,DC01H12,15.65,15.68,15.64,15.65,63,6125 DC V67S42RJBGU9,DC01J12,16.05,16.37,16,16.27,574,4829 DC V70C2SDFJCHT,DC30K12,15.4,15.7,15.36,15.55,328,4105 DC V8PDSL1WA4G1,DC31M12,15.78,15.99,15.74,15.83,188,3439 diff --git a/Data/future/cme/universes/dc/20120321.csv b/Data/future/cme/universes/dc/20120321.csv index 3a4d69b20651..18b3f7f62179 100644 --- a/Data/future/cme/universes/dc/20120321.csv +++ b/Data/future/cme/universes/dc/20120321.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.62,15.68,15.61,15.65,291,5996 -DC V5E8P9SH0U0X,DC01H12,15.62,15.68,15.61,15.65,291,5996 DC V67S42RJBGU9,DC01J12,16.38,16.4,16.15,16.31,727,4881 DC V70C2SDFJCHT,DC30K12,15.59,15.62,15.15,15.3,358,4201 DC V8PDSL1WA4G1,DC31M12,15.9,15.9,15.43,15.66,179,3478 diff --git a/Data/future/cme/universes/dc/20120322.csv b/Data/future/cme/universes/dc/20120322.csv index 023b18b55bb2..9da0c7e8b5c6 100644 --- a/Data/future/cme/universes/dc/20120322.csv +++ b/Data/future/cme/universes/dc/20120322.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.63,15.65,15.63,15.63,63,5996 -DC V5E8P9SH0U0X,DC01H12,15.63,15.65,15.63,15.63,63,5996 DC V67S42RJBGU9,DC01J12,16.17,16.23,15.56,15.6,545,4881 DC V70C2SDFJCHT,DC30K12,15.16,15.33,14.72,15.16,842,4201 DC V8PDSL1WA4G1,DC31M12,15.52,15.66,15.16,15.5,278,3478 diff --git a/Data/future/cme/universes/dc/20120323.csv b/Data/future/cme/universes/dc/20120323.csv index e0fa30cdf056..1e481d097f0f 100644 --- a/Data/future/cme/universes/dc/20120323.csv +++ b/Data/future/cme/universes/dc/20120323.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.65,15.68,15.63,15.66,45,6012 -DC V5E8P9SH0U0X,DC01H12,15.65,15.68,15.63,15.66,45,6012 DC V67S42RJBGU9,DC01J12,15.61,15.64,15.31,15.63,435,4903 DC V70C2SDFJCHT,DC30K12,15.1,15.44,14.91,15.37,442,4108 DC V8PDSL1WA4G1,DC31M12,15.48,15.67,15.32,15.63,161,3555 diff --git a/Data/future/cme/universes/dc/20120326.csv b/Data/future/cme/universes/dc/20120326.csv index 36d2f605c3a0..637cbfb2cf85 100644 --- a/Data/future/cme/universes/dc/20120326.csv +++ b/Data/future/cme/universes/dc/20120326.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.65,15.67,15.64,15.66,54,6000 -DC V5E8P9SH0U0X,DC01H12,15.65,15.67,15.64,15.66,54,6000 DC V67S42RJBGU9,DC01J12,15.65,15.7,15.37,15.4,311,5041 DC V70C2SDFJCHT,DC30K12,15.45,15.46,15.07,15.16,121,4098 DC V8PDSL1WA4G1,DC31M12,15.68,15.8,15.45,15.47,55,3568 diff --git a/Data/future/cme/universes/dc/20120327.csv b/Data/future/cme/universes/dc/20120327.csv index b027f92dad98..51ef622b72dd 100644 --- a/Data/future/cme/universes/dc/20120327.csv +++ b/Data/future/cme/universes/dc/20120327.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.65,15.65,15.65,15.65,1,6000 -DC V5E8P9SH0U0X,DC01H12,15.65,15.65,15.65,15.65,1,6000 DC V67S42RJBGU9,DC01J12,15.48,15.76,15.48,15.59,300,5173 DC V70C2SDFJCHT,DC30K12,15.15,15.49,15.15,15.26,181,4143 DC V8PDSL1WA4G1,DC31M12,15.47,15.64,15.47,15.56,53,3573 diff --git a/Data/future/cme/universes/dc/20120328.csv b/Data/future/cme/universes/dc/20120328.csv index c498dba938d1..9f3fbc419747 100644 --- a/Data/future/cme/universes/dc/20120328.csv +++ b/Data/future/cme/universes/dc/20120328.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.66,15.66,15.64,15.64,20,6010 -DC V5E8P9SH0U0X,DC01H12,15.66,15.66,15.64,15.64,20,6010 DC V67S42RJBGU9,DC01J12,15.63,15.68,15.5,15.61,245,5132 DC V70C2SDFJCHT,DC30K12,15.35,15.46,15.18,15.24,306,4206 DC V8PDSL1WA4G1,DC31M12,15.66,15.66,15.49,15.49,76,3599 diff --git a/Data/future/cme/universes/dc/20120329.csv b/Data/future/cme/universes/dc/20120329.csv index 9a35595d999e..c5abc2e0e5cd 100644 --- a/Data/future/cme/universes/dc/20120329.csv +++ b/Data/future/cme/universes/dc/20120329.csv @@ -1,6 +1,5 @@ #symbol_id,symbol_value,open,high,low,close,volume,open_interest DC V5E8P9SH0U0X,DC01H12,15.66,15.66,15.64,15.64,0,6010 -DC V5E8P9SH0U0X,DC01H12,15.66,15.66,15.64,15.64,0,6010 DC V67S42RJBGU9,DC01J12,15.74,15.99,15.62,15.73,541,5132 DC V70C2SDFJCHT,DC30K12,15.41,15.72,15.39,15.63,347,4206 DC V8PDSL1WA4G1,DC31M12,15.6,16.1,15.6,15.91,187,3599 diff --git a/Data/future/cme/universes/dc/20131004.csv b/Data/future/cme/universes/dc/20131004.csv index a392abd2a78f..9015b17acd75 100644 --- a/Data/future/cme/universes/dc/20131004.csv +++ b/Data/future/cme/universes/dc/20131004.csv @@ -7,11 +7,9 @@ DC VW29KFG1MFI9,DC02X14,17,17.03,17,17.03,12,366 DC VL5E74HP3EGX,DC29V13,18.14,18.14,18,18.07,207,3951 DC VTLNC0IUQJ29,DC03Q14,17.13,17.13,17.06,17.06,5,504 DC VQ4LK52F0POH,DC29J14,16.5,16.5,16.47,16.5,4,1036 -DC VTLNC0IUQJ29,DC03Q14,17.13,17.13,17.06,17.06,5,504 DC VMVFD0JBWXKX,DC31Z13,17.27,17.3,17.05,17.21,165,3253 DC VXSAQBHOFYM9,DC03F15,16.655,16.655,16.6,16.605,0,1 DC VR327EVBP4AP,DC03K14,16.54,16.6,16.54,16.54,3,1082 -DC VYJV8XQEL341,DC03G15,16.415,16.415,16.35,16.38,0, DC VVAP1T7BHB0H,DC04V14,17.06,17.06,17.05,17.06,23,399 DC VWTU31ORRK01,DC30Z14,16.99,16.99,16.99,16.99,13,347 DC VPD11ITOVL6P,DC01H14,16.58,16.61,16.57,16.61,23,1246 diff --git a/Tests/Algorithm/AlgorithmChainsTests.cs b/Tests/Algorithm/AlgorithmChainsTests.cs index 8bc010386756..56eee112cc94 100644 --- a/Tests/Algorithm/AlgorithmChainsTests.cs +++ b/Tests/Algorithm/AlgorithmChainsTests.cs @@ -133,40 +133,8 @@ public void GetsMultipleFullDataOptionChainAsDataFrame([Values] bool flatten) using var dataFrame = _algorithm.OptionChains(symbols, flatten).DataFrame; var expectedOptionChains = symbols.ToDictionary(x => x, x => _optionChainProvider.GetOptionContractList(x, date).ToList()); - var chainsTotalCount = expectedOptionChains.Values.Sum(x => x.Count); - if (flatten) - { - var dfLength = dataFrame.GetAttr("shape")[0].GetAndDispose(); - Assert.AreEqual(chainsTotalCount, dfLength); - - Assert.Multiple(() => - { - foreach (var (symbol, expectedChain) in expectedOptionChains) - { - var chainSymbols = AssertFlattenedSingleChainDataFrame(dataFrame, symbol); - - Assert.IsNotNull(chainSymbols); - CollectionAssert.AreEquivalent(expectedChain, chainSymbols); - } - }); - } - else - { - var dfLength = dataFrame.GetAttr("shape")[0].GetAndDispose(); - Assert.AreEqual(symbols.Length, dfLength); - - Assert.Multiple(() => - { - foreach (var (symbol, expectedChain) in expectedOptionChains) - { - var chainSymbols = AssertUnflattenedSingleChainDataFrame(dataFrame, symbol); - - Assert.IsNotNull(chainSymbols); - CollectionAssert.AreEquivalent(expectedChain, chainSymbols); - } - }); - } + AssertMultiChainsDataFrame(flatten, symbols, dataFrame, expectedOptionChains, isOptionChain: true); } private static List AssertFlattenedSingleChainDataFrame(PyObject dataFrame, Symbol symbol, bool hasCanonicalIndex = true, @@ -336,7 +304,7 @@ public void FuturesChainApisAreConsistent(Symbol symbol, DateTime dateTime, bool } [Test] - public void GetsFullDataFuturesChainAsDataFrame([Values] bool flatten) + public void GetsFullDataFuturesChainAsDataFrame([Values] bool flatten, [Values] bool withFutureAdded) { _algorithm.SetPandasConverter(); var date = new DateTime(2013, 10, 07); @@ -344,7 +312,8 @@ public void GetsFullDataFuturesChainAsDataFrame([Values] bool flatten) using var _ = Py.GIL(); - var symbol = Symbols.ES_Future_Chain; + // It should work regardless of whether the future is added to the algorithm + var symbol = withFutureAdded ? _algorithm.AddFuture(Futures.Indices.SP500EMini).Symbol : Symbols.ES_Future_Chain; using var dataFrame = _algorithm.FuturesChain(symbol, flatten).DataFrame; List symbols = null; @@ -367,5 +336,68 @@ public void GetsFullDataFuturesChainAsDataFrame([Values] bool flatten) Assert.IsNotNull(symbols); CollectionAssert.AreEquivalent(expectedFutureContractSymbols, symbols); } + + [Test] + public void GetsMultipleFullDataFuturesChainsAsDataFrame([Values] bool flatten, [Values] bool withFutureAdded) + { + var dateTime = new DateTime(2013, 10, 07, 12, 0, 0); + _algorithm.SetPandasConverter(); + _algorithm.SetDateTime(dateTime.ConvertToUtc(_algorithm.TimeZone)); + + using var _ = Py.GIL(); + + var symbols = withFutureAdded + ? new[] { Symbols.ES_Future_Chain, Symbols.CreateFuturesCanonicalSymbol(Futures.Dairy.ClassIIIMilk) } + : new[] { _algorithm.AddFuture(Futures.Indices.SP500EMini).Symbol, _algorithm.AddFuture(Futures.Dairy.ClassIIIMilk).Symbol }; + using var dataFrame = _algorithm.FuturesChains(symbols, flatten).DataFrame; + + var expectedFuturesChains = symbols.ToDictionary(x => x, x => + { + var exchange = MarketHoursDatabase.FromDataFolder().GetExchangeHours(x.ID.Market, x, x.SecurityType); + return _futureChainProvider.GetFutureContractList(x, dateTime.ConvertTo(_algorithm.TimeZone, exchange.TimeZone)).ToList(); + }); + + AssertMultiChainsDataFrame(flatten, symbols, dataFrame, expectedFuturesChains, isOptionChain: false); + } + + private static void AssertMultiChainsDataFrame(bool flatten, Symbol[] symbols, PyObject dataFrame, + Dictionary> expectedChains, bool isOptionChain) + where T : ISymbolProvider, ISymbol + { + var chainsTotalCount = expectedChains.Values.Sum(x => x.Count); + + if (flatten) + { + var dfLength = dataFrame.GetAttr("shape")[0].GetAndDispose(); + Assert.AreEqual(chainsTotalCount, dfLength); + + Assert.Multiple(() => + { + foreach (var (symbol, expectedChain) in expectedChains) + { + var chainSymbols = AssertFlattenedSingleChainDataFrame(dataFrame, symbol, isOptionChain: isOptionChain); + + Assert.IsNotNull(chainSymbols); + CollectionAssert.AreEquivalent(expectedChain, chainSymbols); + } + }); + } + else + { + var dfLength = dataFrame.GetAttr("shape")[0].GetAndDispose(); + Assert.AreEqual(symbols.Length, dfLength); + + Assert.Multiple(() => + { + foreach (var (symbol, expectedChain) in expectedChains) + { + var chainSymbols = AssertUnflattenedSingleChainDataFrame(dataFrame, symbol, isOptionChain); + + Assert.IsNotNull(chainSymbols); + CollectionAssert.AreEquivalent(expectedChain, chainSymbols); + } + }); + } + } } }