Hi everyone, 

I am aiming for a 60/30/10 portfolio allocation to momentum stocks, bond etfs, and market neutral etf respectively with annual rebalancement (using rebalancement flags for triggers). I also conduct universe selection monthly and update my momentum stocks on a monthly basis. 

When i first run my algo, i expect to be holding 60/30/10 60/30/10 portfolio allocation to momentum stocks, bond etfs (IEI, TLT) and market neutral ETF (BTAL). However, when i look through the orders for the backtest, my algo did not execute long positions in the bond etfs nor the market neutral etf at the start but it did execute the positions in the momentum stocks. 

Can someone please help me out on this issue? Much appreciated!!

import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from QuantConnect.Data.UniverseSelection import *
from scipy.stats import linregress

class Momentum(QCAlgorithm):

def __init__(self):
self.reb1 = 1 # set the flag for rebalance
self.reb2 = 12 # set the flag for rebalance
self.num_coarse = 500 # Number of stocks to pass CoarseSelection process
self.num_fine = 20 # Number of stocks to long
self.symbols = None

def Initialize(self):
self.SetStartDate(2012, 1, 1) # Set Start Date
self.SetEndDate(2013,6, 1) # Set End Date
self.SetCash(150000) # Set Strategy Cash

self.btal = self.AddEquity("BTAL", Resolution.Minute).Symbol # BTAL hedge
self.iei = self.AddEquity("IEI", Resolution.Minute).Symbol # bond hedge
self.tlt = self.AddEquity("TLT", Resolution.Minute).Symbol # bond hedge
self.list = [self.btal, self.iei, self.tlt]

self.reb1 = 1 # set the flag for momentum stock rebalancement
self.reb2 = 1 # set the flag for rebalance
self.spy = self.AddEquity("SPY", Resolution.Daily).Symbol
self.TimeRules.AfterMarketOpen(self.spy,5), Action(self.rebalance))
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Cash)

def CustomSecurityInitializer(self, security):

def CoarseSelectionFunction(self, coarse):
# if the rebalance flag is not 1, return null list to save time.
if self.reb1 != 1:
return self.long

# make universe selection once a month
sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)
filtered = [x.Symbol for x in sortedByDollarVolume if x.HasFundamentalData]

# filtered down to the 500 most liquid stocks
return filtered[:self.num_coarse]

def FineSelectionFunction(self, fine):
# return null list if it's not time to rebalance
if self.reb1 != 1:
return self.long

# drop counter (will update back to 1 after rebalancement has occurred)
self.reb1 = 0

#will not include this portion of code - essentially filters for top momentum stocks
self.long = sorted_symbolLong[:self.num_fine]
return self.long

def OnData(self, data):

def rebalance(self):
long_list = self.long

# to update the momentum stocks only monthly
for i in self.Portfolio.Values:
if i.Invested and i.Symbol not in long_list and i.Symbol not in self.list:

# annual portfolio rebalancement
if self.reb2 % 12 == 0:

self.SetHoldings(self.iei, 0.15)
self.SetHoldings(self.tlt, 0.15)
self.SetHoldings(self.btal, 0.10)

for i in long_list:
self.SetHoldings(i, 0.6/self.num_fine)

# monthly rebalancement of momentum stocks only, leaving bonds and market neutral etfs untouched
for i in long_list:
if not self.Securities[i].Invested:
self.SetHoldings(i, 0.6/self.num_fine)

self.reb1 = 1
self.reb2 += 1