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:

  1. def Initialize(self):
  2. ...
  3. self.XLFsector = []
  4. self.XLEsector = []
  5. self.AddUniverse(self.XLFcoarse, self.XLFfine)
  6. self.AddUniverse(self.XLEcoarse, self.XLEfine)
  7. self.numberOfSymbolsCoarse = 500
  8. self.lastMonth = -1

 

An example:

  1. def XLFcoarse(self, coarse):
  2. if self.Time.day == self.lastMonth:
  3. return Universe.Unchanged
  4. self.lastMonth = self.Time.day
  5. allCoarse = [x for x in coarse if x.HasFundamentalData and x.Price > 50 and x.Volume > 200000]
  6. finalCoarse = sorted(allCoarse, key = lambda x: x.DollarVolume, reverse = True)
  7. return [x.Symbol for x in finalCoarse][:self.numberOfSymbolsCoarse]
  8. #return self.tickers
  9. def XLFfine(self, fine):
  10. filteredSymbols = []
  11. sortedBySector = [x for x in fine]
  12. for code, g in groupby(sortedBySector, lambda x: x.AssetClassification.MorningstarSectorCode):
  13. for x in sorted(g, key = lambda x: x.ValuationRatios.PERatio, reverse = False)[:2]:
  14. filteredSymbols.append(x.Symbol)
  15. self.XLFsector = filteredSymbols
  16. return filteredSymbols[:3]
+ Expand

Author

Axist

August 2021