I'm looking to do something like this where I have multiple Coarse selectors assigning tickers to their own array/list, but I suspect its not properly functioning and backtests are extremely lengthy.  Is this the correct way this should be done?


The universe selector:

def Initialize(self):
self.XLFsector = []
self.XLEsector = []

self.AddUniverse(self.XLFcoarse, self.XLFfine)
self.AddUniverse(self.XLEcoarse, self.XLEfine)
self.numberOfSymbolsCoarse = 500
self.lastMonth = -1


An example:

def XLFcoarse(self, coarse):
if self.Time.day == self.lastMonth:
return Universe.Unchanged
self.lastMonth = self.Time.day

allCoarse = [x for x in coarse if x.HasFundamentalData and x.Price > 50 and x.Volume > 200000]
finalCoarse = sorted(allCoarse, key = lambda x: x.DollarVolume, reverse = True)

return [x.Symbol for x in finalCoarse][:self.numberOfSymbolsCoarse]
#return self.tickers

def XLFfine(self, fine):
filteredSymbols = []
sortedBySector = [x for x in fine]
for code, g in groupby(sortedBySector, lambda x: x.AssetClassification.MorningstarSectorCode):
for x in sorted(g, key = lambda x: x.ValuationRatios.PERatio, reverse = False)[:2]:
self.XLFsector = filteredSymbols

return filteredSymbols[:3]