I was trying to find the right syntax for allocating holdings within a rebalancing strategy.
class ModulatedMultidimensionalContainmentField(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2009, 6, 20) # 2013/12/01 Earliest start date for all ETFs in universe 2/1/10
self.SetEndDate(2020, 6, 20)
self.SetCash(250000000)
self.SetBenchmark("ABC")
self.SetWarmup(400)
self.AddEquity("ABC", Resolution.Minute)
self.AddEquity("XYZ", Resolution.Minute)
self.AddEquity("SAM", Resolution.Minute)
self.Strategies = [self.Strategy_1, self.Strategy_2, self.Strategy_3, self.Strategy_4]
self.Strategy_1_Size = self.Portfolio[self.Strategy_1]/self.Portfolio.TotalPortfolioValue
self.Strategy_2_Size = self.Portfolio[self.Strategy_2]/self.Portfolio.TotalPortfolioValue
self.Strategy_3_Size = self.Portfolio[self.Strategy_3]/self.Portfolio.TotalPortfolioValue
self.Strategy_4_Size = self.Portfolio[self.Strategy_4]/self.Portfolio.TotalPortfolioValue
#This is where I am confused. How can I find how much of the portfolio is dedicated to a particular strategy at any given time?
self.strategy_1_portion = 0.25
self.strategy_2_portion = 0.25
self.strategy_3_portion = 0.25
self.strategy_4_portion = 0.1
#would like to do something like this if possible:
self.Schedule.On(
self.DateRules.MonthStart("ABC"),
self.TimeRules.AfterMarketOpen("ABC", 120),
self.AllocationStation
)
self.Schedule.On(
self.DateRules.EveryDay("ABC"),
self.TimeRules.AfterMarketOpen("ABC", 150),
self.Strategies
)
def AllocationStation(self):
self.SetHoldings(self.Strategy_1, self.strategy_1_portion)
self.SetHoldings(self.Strategy_2, self.strategy_2_portion)
self.SetHoldings(self.Strategy_3, self.strategy_3_portion)
self.SetHoldings(self.Strategy_4, self.strategy_4_portion)
def Strategy_1(self):
{Random Strategy}
if something happens, then:
self.SetHoldings("ABC", 0.4*(self.Strategy_1_Size))
self.SetHoldings("XYZ", 0.6*(self.Strategy_1_Size))
elif something happens:
self.SetHoldings("ABC", 0.25*(self.Strategy_1_Size))
self.SetHoldings("XYZ", 0.75*(self.Strategy_1_Size))
else:
self.SetHoldings("ABC", 0*(self.Strategy_1_Size))
self.SetHoldings("XYZ", 0*(self.Strategy_1_Size))
def Strategy_2(self):
{Random Strategy}
if something happens, then:
self.SetHoldings("ABC", 0.1*(self.Strategy_1_Size))
self.SetHoldings("XYZ", 0.9*(self.Strategy_1_Size))
def Strategy_3(self):
{Random Strategy}
if something happens, then:
self.SetHoldings("ABC", 0.2*(self.Strategy_1_Size))
self.SetHoldings("SAM", 0.7*(self.Strategy_1_Size))
def Strategy_4(self):
{Random Strategy}
if something happens, then:
self.SetHoldings("SAM", 0.9*(self.Strategy_1_Size))
self.SetHoldings("XYZ", 0.1*(self.Strategy_1_Size))
#I want to set a regular rebalancing between multiple strategies referencing the same portfolio
#If this is possible I would assume that my strategies would have to be rewritten to reference
#the respective strategy's portion of the portfolio itself, rather than simply SetHoldings()