From 30c19e22a801bf3d9a705703ea50ea3fa806be3d Mon Sep 17 00:00:00 2001 From: Jhonathan Abreu Date: Fri, 17 Oct 2025 10:58:41 -0400 Subject: [PATCH] Update regression algorithms --- .../BasicTemplateEurexFuturesAlgorithm.cs | 3 -- .../BasicTemplateFuturesAlgorithm.cs | 3 -- ...plateFuturesWithExtendedMarketAlgorithm.cs | 3 -- .../CustomDataRegressionAlgorithm.cs | 3 -- ...SecurityCacheGetDataRegressionAlgorithm.cs | 5 +-- .../CustomSecurityInitializerAlgorithm.cs | 8 ++-- .../HSIFutureHourRegressionAlgorithm.cs | 3 -- ...meraiSignalExportDemonstrationAlgorithm.cs | 6 +-- .../RawPricesUniverseRegressionAlgorithm.cs | 41 ++++++++++--------- ...nReAdditionForEquityRegressionAlgorithm.cs | 8 ++-- ...ionForSelectedOptionRegressionAlgorithm.cs | 9 ++-- ...ForUniverseSelectionRegressionAlgorithm.cs | 7 +--- .../SecuritySeederRegressionAlgorithm.cs | 5 ++- .../BasicTemplateEurexFuturesAlgorithm.py | 3 -- .../BasicTemplateFuturesAlgorithm.py | 3 -- ...plateFuturesWithExtendedMarketAlgorithm.py | 3 -- ...eOptionUniverseChainRegressionAlgorithm.py | 6 +++ ...chDAOSignalExportDemonstrationAlgorithm.py | 2 - .../CustomDataRegressionAlgorithm.py | 2 - ...SecurityCacheGetDataRegressionAlgorithm.py | 5 +-- .../CustomSecurityInitializerAlgorithm.py | 16 ++++---- ...meraiSignalExportDemonstrationAlgorithm.py | 8 ++-- .../RawPricesUniverseRegressionAlgorithm.py | 7 +--- .../SecuritySeederRegressionAlgorithm.py | 2 + 24 files changed, 62 insertions(+), 99 deletions(-) diff --git a/Algorithm.CSharp/BasicTemplateEurexFuturesAlgorithm.cs b/Algorithm.CSharp/BasicTemplateEurexFuturesAlgorithm.cs index 0e51b1245..5b5dd0cb5 100644 --- a/Algorithm.CSharp/BasicTemplateEurexFuturesAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateEurexFuturesAlgorithm.cs @@ -58,9 +58,6 @@ namespace QuantConnect.Algorithm.CSharp var benchmark = AddIndex("SX5E"); SetBenchmark(benchmark.Symbol); - - var seeder = new FuncSecuritySeeder(GetLastKnownPrices); - SetSecurityInitializer(security => seeder.SeedSecurity(security)); } public override void OnData(Slice slice) diff --git a/Algorithm.CSharp/BasicTemplateFuturesAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesAlgorithm.cs index e21adfaf9..da77357a4 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesAlgorithm.cs @@ -63,9 +63,6 @@ namespace QuantConnect.Algorithm.CSharp var benchmark = AddEquity("SPY"); SetBenchmark(benchmark.Symbol); - - var seeder = new FuncSecuritySeeder(GetLastKnownPrices); - SetSecurityInitializer(security => seeder.SeedSecurity(security)); } /// diff --git a/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketAlgorithm.cs b/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketAlgorithm.cs index fca17cd2a..ace033db7 100644 --- a/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketAlgorithm.cs +++ b/Algorithm.CSharp/BasicTemplateFuturesWithExtendedMarketAlgorithm.cs @@ -63,9 +63,6 @@ namespace QuantConnect.Algorithm.CSharp var benchmark = AddEquity("SPY"); SetBenchmark(benchmark.Symbol); - - var seeder = new FuncSecuritySeeder(GetLastKnownPrices); - SetSecurityInitializer(security => seeder.SeedSecurity(security)); } /// diff --git a/Algorithm.CSharp/CustomDataRegressionAlgorithm.cs b/Algorithm.CSharp/CustomDataRegressionAlgorithm.cs index 2c62d99a7..39119c405 100644 --- a/Algorithm.CSharp/CustomDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CustomDataRegressionAlgorithm.cs @@ -49,9 +49,6 @@ namespace QuantConnect.Algorithm.CSharp //Define the symbol and "type" of our generic data: var resolution = LiveMode ? Resolution.Second : Resolution.Daily; AddData("BTC", resolution); - - var seeder = new FuncSecuritySeeder(GetLastKnownPrices); - SetSecurityInitializer(security => seeder.SeedSecurity(security)); } /// diff --git a/Algorithm.CSharp/CustomDataSecurityCacheGetDataRegressionAlgorithm.cs b/Algorithm.CSharp/CustomDataSecurityCacheGetDataRegressionAlgorithm.cs index 6a64c1a48..22d5042f1 100644 --- a/Algorithm.CSharp/CustomDataSecurityCacheGetDataRegressionAlgorithm.cs +++ b/Algorithm.CSharp/CustomDataSecurityCacheGetDataRegressionAlgorithm.cs @@ -24,7 +24,7 @@ using static QuantConnect.Algorithm.CSharp.CustomDataRegressionAlgorithm; namespace QuantConnect.Algorithm.CSharp { /// - /// Regression algorithm used to verify that GetData correctly retrieves + /// Regression algorithm used to verify that GetData correctly retrieves /// the latest custom data stored in the security cache. /// public class CustomDataSecurityCacheGetDataRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition @@ -35,9 +35,6 @@ namespace QuantConnect.Algorithm.CSharp SetEndDate(2020, 01, 10); AddData("BTC", Resolution.Daily); - - var seeder = new FuncSecuritySeeder(GetLastKnownPrices); - SetSecurityInitializer(security => seeder.SeedSecurity(security)); } public override void OnData(Slice slice) diff --git a/Algorithm.CSharp/CustomSecurityInitializerAlgorithm.cs b/Algorithm.CSharp/CustomSecurityInitializerAlgorithm.cs index e30e808ca..141a04510 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. * @@ -37,7 +37,7 @@ namespace QuantConnect.Algorithm.CSharp // set our initializer to our custom type SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage); var funcSecuritySeeder = new FuncSecuritySeeder(CustomSeedFunction); - SetSecurityInitializer(new CustomSecurityInitializer(BrokerageModel, funcSecuritySeeder, DataNormalizationMode.Raw)); + SetSecurityInitializer(new CustomSecurityInitializer(BrokerageModel, DataNormalizationMode.Raw)); SetStartDate(2013, 10, 01); SetEndDate(2013, 11, 01); @@ -83,8 +83,8 @@ namespace QuantConnect.Algorithm.CSharp /// The brokerage model used to get fill/fee/slippage/settlement models /// The security seeder to be used /// The desired data normalization mode - public CustomSecurityInitializer(IBrokerageModel brokerageModel, ISecuritySeeder securitySeeder, DataNormalizationMode dataNormalizationMode) - : base(brokerageModel, securitySeeder) + public CustomSecurityInitializer(IBrokerageModel brokerageModel, DataNormalizationMode dataNormalizationMode) + : base(brokerageModel, SecuritySeeder.Null) { _dataNormalizationMode = dataNormalizationMode; } diff --git a/Algorithm.CSharp/HSIFutureHourRegressionAlgorithm.cs b/Algorithm.CSharp/HSIFutureHourRegressionAlgorithm.cs index 637b42ed7..68d6bbea7 100644 --- a/Algorithm.CSharp/HSIFutureHourRegressionAlgorithm.cs +++ b/Algorithm.CSharp/HSIFutureHourRegressionAlgorithm.cs @@ -56,9 +56,6 @@ namespace QuantConnect.Algorithm.CSharp var future = AddFuture(Futures.Indices.HangSeng, Resolution); future.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182)); _futureSymbol = future.Symbol; - - var seeder = new FuncSecuritySeeder(GetLastKnownPrices); - SetSecurityInitializer(security => seeder.SeedSecurity(security)); } /// diff --git a/Algorithm.CSharp/NumeraiSignalExportDemonstrationAlgorithm.cs b/Algorithm.CSharp/NumeraiSignalExportDemonstrationAlgorithm.cs index 0524092c3..8de6a2b4b 100644 --- a/Algorithm.CSharp/NumeraiSignalExportDemonstrationAlgorithm.cs +++ b/Algorithm.CSharp/NumeraiSignalExportDemonstrationAlgorithm.cs @@ -24,7 +24,7 @@ namespace QuantConnect.Algorithm.CSharp { /// /// This algorithm sends an array of current portfolio targets to Numerai API - /// every time the ema indicators crosses between themselves. + /// every time the ema indicators crosses between themselves. /// See (https://docs.numer.ai/numerai-signals/signals-overview) for more information /// about accepted symbols, signals, etc. /// @@ -41,8 +41,6 @@ namespace QuantConnect.Algorithm.CSharp SetEndDate(2020, 10, 12); // Set End Date SetCash(100000); // Set Strategy Cash - SetSecurityInitializer(new BrokerageModelSecurityInitializer(BrokerageModel, new FuncSecuritySeeder(GetLastKnownPrices))); - // Add the CRSP US Total Market Index constituents, which represents approximately 100% of the investable US Equity market _etfSymbol = AddEquity("VTI").Symbol; AddUniverse(Universe.ETF(_etfSymbol)); @@ -63,7 +61,7 @@ namespace QuantConnect.Algorithm.CSharp // and created a model. See (https://signals.numer.ai/models) var numeraiModelId = ""; - var numeraiFilename = ""; // (Optional) Replace this value with your submission filename + var numeraiFilename = ""; // (Optional) Replace this value with your submission filename // Disable automatic exports as we manually set them SignalExport.AutomaticExportTimeSpan = null; diff --git a/Algorithm.CSharp/RawPricesUniverseRegressionAlgorithm.cs b/Algorithm.CSharp/RawPricesUniverseRegressionAlgorithm.cs index cd4f4f8ee..fd476478f 100644 --- a/Algorithm.CSharp/RawPricesUniverseRegressionAlgorithm.cs +++ b/Algorithm.CSharp/RawPricesUniverseRegressionAlgorithm.cs @@ -44,11 +44,7 @@ namespace QuantConnect.Algorithm.CSharp SetEndDate(2014,4,7); SetCash(50000); - // Set the security initializer with zero fees and price initial seed - var securitySeeder = new FuncSecuritySeeder(GetLastKnownPrices); - SetSecurityInitializer(new CompositeSecurityInitializer( - new FuncSecurityInitializer(x => x.SetFeeModel(new ConstantFeeModel(0))), - new FuncSecurityInitializer(security => securitySeeder.SeedSecurity(security)))); + SetSecurityInitializer(new FuncSecurityInitializer(x => x.SetFeeModel(new ConstantFeeModel(0)))); AddUniverse("MyUniverse", Resolution.Daily, SelectionFunction); } @@ -63,6 +59,12 @@ namespace QuantConnect.Algorithm.CSharp // this event fires whenever we have changes to our universe public override void OnSecuritiesChanged(SecurityChanges changes) { + + if (Transactions.OrdersCount == 9) + { + + } + foreach (var security in changes.RemovedSecurities) { if (security.Invested) @@ -71,6 +73,7 @@ namespace QuantConnect.Algorithm.CSharp } } + // we want 20% allocation in each security in our universe foreach (var security in changes.AddedSecurities) { @@ -111,31 +114,31 @@ namespace QuantConnect.Algorithm.CSharp {"Total Orders", "57"}, {"Average Win", "0.18%"}, {"Average Loss", "-0.24%"}, - {"Compounding Annual Return", "-47.380%"}, + {"Compounding Annual Return", "-46.434%"}, {"Drawdown", "2.500%"}, - {"Expectancy", "-0.352"}, + {"Expectancy", "-0.350"}, {"Start Equity", "50000"}, - {"End Equity", "48726.48"}, - {"Net Profit", "-2.547%"}, - {"Sharpe Ratio", "-3.372"}, - {"Sortino Ratio", "-3.889"}, - {"Probabilistic Sharpe Ratio", "10.352%"}, + {"End Equity", "48761.4"}, + {"Net Profit", "-2.477%"}, + {"Sharpe Ratio", "-3.361"}, + {"Sortino Ratio", "-3.948"}, + {"Probabilistic Sharpe Ratio", "10.714%"}, {"Loss Rate", "63%"}, {"Win Rate", "37%"}, {"Profit-Loss Ratio", "0.75"}, - {"Alpha", "-0.208"}, - {"Beta", "0.815"}, - {"Annual Standard Deviation", "0.086"}, + {"Alpha", "-0.201"}, + {"Beta", "0.791"}, + {"Annual Standard Deviation", "0.084"}, {"Annual Variance", "0.007"}, - {"Information Ratio", "-4.871"}, + {"Information Ratio", "-4.583"}, {"Tracking Error", "0.039"}, - {"Treynor Ratio", "-0.357"}, + {"Treynor Ratio", "-0.356"}, {"Total Fees", "$0.00"}, {"Estimated Strategy Capacity", "$230000000.00"}, {"Lowest Capacity Asset", "AIG R735QTJ8XC9X"}, - {"Portfolio Turnover", "77.40%"}, + {"Portfolio Turnover", "75.84%"}, {"Drawdown Recovery", "0"}, - {"OrderListHash", "4fb8ffbdfd2cce69ac28b0d0992d7198"} + {"OrderListHash", "6a2b5296fd1abd7f2018043675cf7fa0"} }; } } diff --git a/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs b/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs index f8086179f..cf034208c 100644 --- a/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecurityInitializationOnReAdditionForEquityRegressionAlgorithm.cs @@ -47,7 +47,7 @@ namespace QuantConnect.Algorithm.CSharp SetStartDate(StartTimeToUse); SetEndDate(EndTimeToUse); - var seeder = new FuncSecuritySeeder((security) => + SetSecurityInitializer(security => { if (!_securityInializationCounts.TryGetValue(security, out var count)) { @@ -55,10 +55,8 @@ namespace QuantConnect.Algorithm.CSharp } _securityInializationCounts[security] = count + 1; - Debug($"[{Time}] Seeding {security.Symbol}"); - return GetLastKnownPrices(security); + Debug($"[{Time}] Initializing security for {security.Symbol}"); }); - SetSecurityInitializer(security => seeder.SeedSecurity(security)); _security = AddSecurityImpl(); @@ -192,7 +190,7 @@ namespace QuantConnect.Algorithm.CSharp /// /// Data Points count of the algorithm history /// - public virtual int AlgorithmHistoryDataPoints => 7696; + public virtual int AlgorithmHistoryDataPoints => 3848; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/SecurityInitializationOnReAdditionForSelectedOptionRegressionAlgorithm.cs b/Algorithm.CSharp/SecurityInitializationOnReAdditionForSelectedOptionRegressionAlgorithm.cs index f33be4fc0..a43ac9cc1 100644 --- a/Algorithm.CSharp/SecurityInitializationOnReAdditionForSelectedOptionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecurityInitializationOnReAdditionForSelectedOptionRegressionAlgorithm.cs @@ -48,7 +48,7 @@ namespace QuantConnect.Algorithm.CSharp SetEndDate(2014, 06, 20); SetCash(100000); - var seeder = new FuncSecuritySeeder((security) => + SetSecurityInitializer(security => { if (security is Option option) { @@ -59,12 +59,9 @@ namespace QuantConnect.Algorithm.CSharp _securityInializationCounts[security] = count + 1; } - Debug($"[{Time}] Seeding {security.Symbol}"); - return GetLastKnownPrices(security); + Debug($"[{Time}] Initializing security for {security.Symbol}"); }); - SetSecurityInitializer(security => seeder.SeedSecurity(security)); - var equitySymbol = QuantConnect.Symbol.Create("AAPL", SecurityType.Equity, Market.USA); _contractsToSelect = new List() @@ -207,7 +204,7 @@ namespace QuantConnect.Algorithm.CSharp /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 10; + public int AlgorithmHistoryDataPoints => 5; /// /// Final status of the algorithm diff --git a/Algorithm.CSharp/SecurityInitializationOnReAdditionForUniverseSelectionRegressionAlgorithm.cs b/Algorithm.CSharp/SecurityInitializationOnReAdditionForUniverseSelectionRegressionAlgorithm.cs index ffdfcf292..c7c313327 100644 --- a/Algorithm.CSharp/SecurityInitializationOnReAdditionForUniverseSelectionRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecurityInitializationOnReAdditionForUniverseSelectionRegressionAlgorithm.cs @@ -47,7 +47,7 @@ namespace QuantConnect.Algorithm.CSharp UniverseSettings.Resolution = Resolution.Daily; - var seeder = new FuncSecuritySeeder((security) => + SetSecurityInitializer(security => { if (!_securityInializationCounts.TryGetValue(security, out var count)) { @@ -55,12 +55,9 @@ namespace QuantConnect.Algorithm.CSharp } _securityInializationCounts[security] = count + 1; - Debug($"[{Time}] Seeding {security.Symbol}"); - return GetLastKnownPrices(security); + Debug($"[{Time}] Initializing security for {security.Symbol}"); }); - SetSecurityInitializer(security => seeder.SeedSecurity(security)); - _symbolsToSelect = new List() { QuantConnect.Symbol.Create("SPY", SecurityType.Equity, Market.USA), diff --git a/Algorithm.CSharp/SecuritySeederRegressionAlgorithm.cs b/Algorithm.CSharp/SecuritySeederRegressionAlgorithm.cs index 8034c5acf..e351d709c 100644 --- a/Algorithm.CSharp/SecuritySeederRegressionAlgorithm.cs +++ b/Algorithm.CSharp/SecuritySeederRegressionAlgorithm.cs @@ -34,6 +34,9 @@ namespace QuantConnect.Algorithm.CSharp { SetStartDate(2013, 10, 08); SetEndDate(2013, 10, 10); + + // Let's disable default automatic security seeding to use our own + Settings.SeedInitialPrices = false; SetSecurityInitializer(new BrokerageModelSecurityInitializer(BrokerageModel, new FuncSecuritySeeder(GetLastKnownPrices))); AddEquity("SPY", Resolution.Minute); @@ -90,7 +93,7 @@ namespace QuantConnect.Algorithm.CSharp /// /// Data Points count of the algorithm history /// - public int AlgorithmHistoryDataPoints => 20; + public int AlgorithmHistoryDataPoints => 10; /// /// Final status of the algorithm diff --git a/Algorithm.Python/BasicTemplateEurexFuturesAlgorithm.py b/Algorithm.Python/BasicTemplateEurexFuturesAlgorithm.py index 10cfe3c6e..d099a2d62 100644 --- a/Algorithm.Python/BasicTemplateEurexFuturesAlgorithm.py +++ b/Algorithm.Python/BasicTemplateEurexFuturesAlgorithm.py @@ -50,9 +50,6 @@ class BasicTemplateEurexFuturesAlgorithm(QCAlgorithm): benchmark = self.add_index("SX5E") self.set_benchmark(benchmark.symbol) - func_seeder = FuncSecuritySeeder(self.get_last_known_prices) - self.set_security_initializer(lambda security: func_seeder.seed_security(security)) - def on_data(self, slice): for changed_event in slice.symbol_changed_events.values(): self._mappings_count += 1 diff --git a/Algorithm.Python/BasicTemplateFuturesAlgorithm.py b/Algorithm.Python/BasicTemplateFuturesAlgorithm.py index 517598d77..055d4037e 100644 --- a/Algorithm.Python/BasicTemplateFuturesAlgorithm.py +++ b/Algorithm.Python/BasicTemplateFuturesAlgorithm.py @@ -43,9 +43,6 @@ class BasicTemplateFuturesAlgorithm(QCAlgorithm): benchmark = self.add_equity("SPY") self.set_benchmark(benchmark.symbol) - seeder = FuncSecuritySeeder(self.get_last_known_prices) - self.set_security_initializer(lambda security: seeder.seed_security(security)) - def on_data(self,slice): if not self.portfolio.invested: for chain in slice.future_chains: diff --git a/Algorithm.Python/BasicTemplateFuturesWithExtendedMarketAlgorithm.py b/Algorithm.Python/BasicTemplateFuturesWithExtendedMarketAlgorithm.py index 68414fe9c..dc64ea6fb 100644 --- a/Algorithm.Python/BasicTemplateFuturesWithExtendedMarketAlgorithm.py +++ b/Algorithm.Python/BasicTemplateFuturesWithExtendedMarketAlgorithm.py @@ -43,9 +43,6 @@ class BasicTemplateFuturesWithExtendedMarketAlgorithm(QCAlgorithm): benchmark = self.add_equity("SPY") self.set_benchmark(benchmark.symbol) - seeder = FuncSecuritySeeder(self.get_last_known_prices) - self.set_security_initializer(lambda security: seeder.seed_security(security)) - def on_data(self,slice): if not self.portfolio.invested: for chain in slice.future_chains: diff --git a/Algorithm.Python/CoarseFineOptionUniverseChainRegressionAlgorithm.py b/Algorithm.Python/CoarseFineOptionUniverseChainRegressionAlgorithm.py index 3dc16367b..fdecdb3b8 100644 --- a/Algorithm.Python/CoarseFineOptionUniverseChainRegressionAlgorithm.py +++ b/Algorithm.Python/CoarseFineOptionUniverseChainRegressionAlgorithm.py @@ -31,6 +31,12 @@ class CoarseFineOptionUniverseChainRegressionAlgorithm(QCAlgorithm): self.set_end_date(2014,6,7) self.universe_settings.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. + self.settings.seed_initial_prices = False + self._twx = Symbol.create("TWX", SecurityType.EQUITY, Market.USA) self._aapl = Symbol.create("AAPL", SecurityType.EQUITY, Market.USA) self._last_equity_added = None diff --git a/Algorithm.Python/CrunchDAOSignalExportDemonstrationAlgorithm.py b/Algorithm.Python/CrunchDAOSignalExportDemonstrationAlgorithm.py index b9e9b8ca9..4639c9568 100644 --- a/Algorithm.Python/CrunchDAOSignalExportDemonstrationAlgorithm.py +++ b/Algorithm.Python/CrunchDAOSignalExportDemonstrationAlgorithm.py @@ -38,8 +38,6 @@ class CrunchDAOSignalExportDemonstrationAlgorithm(QCAlgorithm): comment = "" # A comment for the submission self.signal_export.add_signal_export_provider(CrunchDAOSignalExport(api_key, model, submission_name, comment)) - self.set_security_initializer(BrokerageModelSecurityInitializer(self.brokerage_model, FuncSecuritySeeder(self.get_last_known_prices))) - # Add a custom data universe to read the CrunchDAO skeleton self.add_universe(CrunchDaoSkeleton, "CrunchDaoSkeleton", Resolution.DAILY, self.select_symbols) diff --git a/Algorithm.Python/CustomDataRegressionAlgorithm.py b/Algorithm.Python/CustomDataRegressionAlgorithm.py index 051591521..7b58c13c6 100644 --- a/Algorithm.Python/CustomDataRegressionAlgorithm.py +++ b/Algorithm.Python/CustomDataRegressionAlgorithm.py @@ -32,8 +32,6 @@ class CustomDataRegressionAlgorithm(QCAlgorithm): resolution = Resolution.SECOND if self.live_mode else Resolution.DAILY self.add_data(Bitcoin, "BTC", resolution) - seeder = FuncSecuritySeeder(self.get_last_known_prices) - self.set_security_initializer(lambda x: seeder.seed_security(x)) self._warmed_up_checked = False def on_data(self, data: Slice) -> None: diff --git a/Algorithm.Python/CustomDataSecurityCacheGetDataRegressionAlgorithm.py b/Algorithm.Python/CustomDataSecurityCacheGetDataRegressionAlgorithm.py index ae6730501..86609c259 100644 --- a/Algorithm.Python/CustomDataSecurityCacheGetDataRegressionAlgorithm.py +++ b/Algorithm.Python/CustomDataSecurityCacheGetDataRegressionAlgorithm.py @@ -26,16 +26,13 @@ class CustomDataSecurityCacheGetDataRegressionAlgorithm(QCAlgorithm): self.add_data(Bitcoin, "BTC", Resolution.DAILY) - seeder = FuncSecuritySeeder(self.get_last_known_prices) - self.set_security_initializer(lambda x: seeder.seed_security(x)) - def on_data(self, data: Slice) -> None: bitcoin = self.securities['BTC'].cache.get_data(Bitcoin) if bitcoin is None: raise RegressionTestException("Expected Bitcoin data in cache, but none was found") if bitcoin.value == 0: raise RegressionTestException("Expected Bitcoin value to be non-zero") - + bitcoin_from_slice = list(data.get(Bitcoin).values())[0] if bitcoin_from_slice != bitcoin: raise RegressionTestException("Expected cached Bitcoin to match the one from Slice") diff --git a/Algorithm.Python/CustomSecurityInitializerAlgorithm.py b/Algorithm.Python/CustomSecurityInitializerAlgorithm.py index febcb3831..939cdbfc0 100644 --- a/Algorithm.Python/CustomSecurityInitializerAlgorithm.py +++ b/Algorithm.Python/CustomSecurityInitializerAlgorithm.py @@ -25,13 +25,12 @@ from AlgorithmImports import * class CustomSecurityInitializerAlgorithm(QCAlgorithm): def initialize(self): - + # set our initializer to our custom type self.set_brokerage_model(BrokerageName.INTERACTIVE_BROKERS_BROKERAGE) - - func_security_seeder = FuncSecuritySeeder(self.custom_seed_function) - self.set_security_initializer(CustomSecurityInitializer(self.brokerage_model, func_security_seeder, DataNormalizationMode.RAW)) - + + self.set_security_initializer(CustomSecurityInitializer(self.brokerage_model, DataNormalizationMode.RAW)) + self.set_start_date(2013,10,1) self.set_end_date(2013,11,1) @@ -64,12 +63,11 @@ class CustomSecurityInitializer(BrokerageModelSecurityInitializer): We sub-class the BrokerageModelSecurityInitializer so we can also take advantage of the default model/leverage setting behaviors''' - def __init__(self, brokerage_model, security_seeder, data_normalization_mode): + def __init__(self, brokerage_model, data_normalization_mode): '''Initializes a new instance of the CustomSecurityInitializer class with the specified normalization mode brokerage_model -- The brokerage model used to get fill/fee/slippage/settlement models - security_seeder -- The security seeder to be used data_normalization_mode -- The desired data normalization mode''' - self.base = BrokerageModelSecurityInitializer(brokerage_model, security_seeder) + super().__init__(brokerage_model, SecuritySeeder.NULL) self.data_normalization_mode = data_normalization_mode def initialize(self, security): @@ -77,7 +75,7 @@ class CustomSecurityInitializer(BrokerageModelSecurityInitializer): security -- The security to be initialized seed_security -- True to seed the security, false otherwise''' # first call the default implementation - self.base.initialize(security) + super().initialize(security) # now apply our data normalization mode security.set_data_normalization_mode(self.data_normalization_mode) diff --git a/Algorithm.Python/NumeraiSignalExportDemonstrationAlgorithm.py b/Algorithm.Python/NumeraiSignalExportDemonstrationAlgorithm.py index 396216b73..9738cbe4d 100644 --- a/Algorithm.Python/NumeraiSignalExportDemonstrationAlgorithm.py +++ b/Algorithm.Python/NumeraiSignalExportDemonstrationAlgorithm.py @@ -32,8 +32,6 @@ class NumeraiSignalExportDemonstrationAlgorithm(QCAlgorithm): self.set_end_date(2020, 10, 12) #Set End Date self.set_cash(100000) #Set Strategy Cash - self.set_security_initializer(BrokerageModelSecurityInitializer(self.brokerage_model, FuncSecuritySeeder(self.get_last_known_prices))) - # Add the CRSP US Total Market Index constituents, which represents approximately 100% of the investable US Equity market self.etf_symbol = self.add_equity("VTI").symbol self.add_universe(self.universe.etf(self.etf_symbol)) @@ -54,7 +52,7 @@ class NumeraiSignalExportDemonstrationAlgorithm(QCAlgorithm): # and created a model. See (https://signals.numer.ai/models) numerai_model_id = "" - numerai_filename = "" # (Optional) Replace this value with your submission filename + numerai_filename = "" # (Optional) Replace this value with your submission filename # Disable automatic exports as we manually set them self.signal_export.automatic_export_time_span = None @@ -71,7 +69,7 @@ class NumeraiSignalExportDemonstrationAlgorithm(QCAlgorithm): # Get historical data # close_prices = self.history(symbols, 22, Resolution.DAILY).close.unstack(0) - + # Create portfolio targets # Numerai requires that at least one of the signals have a unique weight # To ensure they are all unique, this demo gives a linear allocation to each symbol (ie. 1/55, 2/55, ..., 10/55) @@ -91,5 +89,5 @@ class NumeraiSignalExportDemonstrationAlgorithm(QCAlgorithm): for security in changes.removed_securities: if security in self._securities: self._securities.remove(security) - + self._securities.extend([security for security in changes.added_securities if security.symbol != self.etf_symbol]) diff --git a/Algorithm.Python/RawPricesUniverseRegressionAlgorithm.py b/Algorithm.Python/RawPricesUniverseRegressionAlgorithm.py index 6e636e41c..c52e03fe1 100644 --- a/Algorithm.Python/RawPricesUniverseRegressionAlgorithm.py +++ b/Algorithm.Python/RawPricesUniverseRegressionAlgorithm.py @@ -36,11 +36,8 @@ class RawPricesUniverseRegressionAlgorithm(QCAlgorithm): self.set_end_date(2014,4,7) #Set End Date self.set_cash(50000) #Set Strategy Cash - # Set the security initializer with zero fees and price initial seed - securitySeeder = FuncSecuritySeeder(self.get_last_known_prices) - self.set_security_initializer(CompositeSecurityInitializer( - FuncSecurityInitializer(lambda x: x.set_fee_model(ConstantFeeModel(0))), - FuncSecurityInitializer(lambda security: securitySeeder.seed_security(security)))) + # Set the security initializer with zero fees + self.set_security_initializer(FuncSecurityInitializer(lambda x: x.set_fee_model(ConstantFeeModel(0)))) self.add_universe("MyUniverse", Resolution.DAILY, self.selection_function) diff --git a/Algorithm.Python/SecuritySeederRegressionAlgorithm.py b/Algorithm.Python/SecuritySeederRegressionAlgorithm.py index bb4755def..c92b26c06 100644 --- a/Algorithm.Python/SecuritySeederRegressionAlgorithm.py +++ b/Algorithm.Python/SecuritySeederRegressionAlgorithm.py @@ -23,6 +23,8 @@ class SecuritySeederRegressionAlgorithm(QCAlgorithm): self.set_start_date(2013,10, 8) self.set_end_date(2013,10,10) + # Let's disable default automatic security seeding to use our own + self.settings.seed_initial_prices = False self.set_security_initializer(BrokerageModelSecurityInitializer(self.brokerage_model, FuncSecuritySeeder(self.get_last_known_prices))) self.add_equity("SPY", Resolution.MINUTE)