Update regression algorithms

This commit is contained in:
Jhonathan Abreu
2025-10-17 10:58:41 -04:00
parent 0678de396d
commit 30c19e22a8
24 changed files with 62 additions and 99 deletions
@@ -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
@@ -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:
@@ -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:
@@ -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
@@ -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)
@@ -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:
@@ -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")
@@ -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)
@@ -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])
@@ -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)
@@ -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)