-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Open
Labels
Description
Expected Behavior
Be able to add a custom security Initializer while keeping the default behavior (BrokerageModelSecurityInitializer)
Actual Behavior
We need to either extend BrokerageModelSecurityInitializer:
class BrokerageModelExampleAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2025,8,19)
security_seeder = FuncSecuritySeeder(self.get_last_known_prices)
self.set_security_initializer(MySecurityInitializer(self.brokerage_model, security_seeder))
self.add_equity("SPY")
# Outside of the algorithm class
class MySecurityInitializer(BrokerageModelSecurityInitializer):
def __init__(self, brokerage_model: IBrokerageModel, security_seeder: ISecuritySeeder) -> None:
super().__init__(brokerage_model, security_seeder)
def initialize(self, security: Security) -> None:
super().initialize(security)
security.set_fee_model(ConstantFeeModel(0, "USD"))
or use CompositeSecurityInitializer:
class BrokerageModelExampleAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2025,8,19)
seeder = FuncSecuritySeeder(self.get_last_known_prices)
self.set_security_initializer(CompositeSecurityInitializer(
self.security_initializer,
FuncSecurityInitializer(lambda security: seeder.seed_security(security)),
FuncSecurityInitializer(self.custom_security_initializer)))
self.add_equity("SPY")
def custom_security_initializer(self, security):
security.set_fee_model(ConstantFeeModel(0, "USD"))
Potential Solution
We could introduce the AddSecurityInitializer that would append to the initializer, resulting in:
class BrokerageModelExampleAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2025,8,19)
seeder = FuncSecuritySeeder(self.get_last_known_prices)
self.add_security_initializer(lambda security: seeder.seed_security(security))
self.add_security_initializer(self.custom_security_initializer)
self.add_equity("SPY")
def custom_security_initializer(self, security):
security.set_fee_model(ConstantFeeModel(0, "USD"))
Checklist
- I have completely filled out this template
- I have confirmed that this issue exists on the current
master
branch - I have confirmed that this is not a duplicate issue by searching issues
Martin-Molinero