Custom Universes
Key Concepts
Initialize Universes
To add a custom universe to your algorithm, in the Initialize
initialize
method, pass your universe type and a selector function to the AddUniverse
add_universe
method.
AddUniverse<MyCustomUniverseDataClass>("myCustomUniverse", Resolution.Daily, SelectorFunction)
self.add_universe(MyCustomUniverseDataClass, "myCustomUniverse", Resolution.DAILY, self._selector_function)
Receive Custom Data
The universe selector function receives a list of your custom objects and must return a list of Symbol
objects. In the selector function definition, you can use any of the properties of your custom data type. The Symbol
objects that you return from the selector function set the constituents of the universe.
public class MyCustomUniverseAlgorithm : QCAlgorithm { private IEnumerable<Symbol> SelectorFunction(IEnumerable<MyCustomUniverseDataClass> data) { return (from singleStockData in data where singleStockData.CustomAttribute1 > 0 orderby singleStockData.CustomAttribute2 descending select singleStockData.Symbol).Take(5); } }
class MyCustomUniverseAlgorithm(QCAlgorithm): def _selector_function(self, data: List[MyCustomUniverseDataClass]) -> List[Symbol]: sorted_data = sorted([ x for x in data if x["CustomAttribute1"] > 0 ], key=lambda x: x["CustomAttribute2"], reverse=True) return [x.symbol for x in sorted_data[:5]]