Suppose we have an algorithm architecture like:

class MyAlgorithm(QCAlgorithm):
def Initialize(self):
def OnData(self, data):
class MyAlphaModel(AlphaModel):
def __init__(self):
def OnSecuritiesChanged(self, algorithm, changes):
def Update(self, algorithm, data):
insights = []
return insights

The objective is to take the dataframe of security close prices, apply some function MyFunc() to it, and emit a single scalar value for each security as an Insight object. 

def MyFunc(self, data):
for security in self.Securities:
# do something
return # some scalar value for each security
  • Should MyFunc() be called inside MyAlphaModel.Update or OnData?
  • Is self.Securities automatically populated with security objects from the set Universe, or should an empty list be instantiated and securities appended in MyAlphaModel.OnSecuritiesChanged()?