Hi everyone,

I've completed the bootcamp excercises. I'm striving to follow the recommended practices from the very beginning hence using the framework.

The code below is supposed to simply pick top N stocks by descending ROIC.

However at Runtime I receive a TypeError : OnSecuritiesChanged() missing 1 required positional argument: 'changes' TypeError: OnSecuritiesChanged() missing 1 required positional argument: 'changes'. As if OnSecuritiesChanged was called without 'changes' at some point.

What am I doing wrong?

from Execution.ImmediateExecutionModel import ImmediateExecutionModel from Portfolio.EqualWeightingPortfolioConstructionModel import EqualWeightingPortfolioConstructionModel from QuantConnect.Data import Fundamental from datetime import timedelta class VentralTachyonGearbox(QCAlgorithm): def Initialize(self): self.nAssetsInPortfolio = 10 self.SetStartDate(2020, 11, 1) self.SetCash(100000) self.SetExecution(ImmediateExecutionModel()) self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel()) self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverse( self.CoarseSelectionFilter, self.FineFundamentalSorter ) self.AddAlpha(AllUp) def CoarseSelectionFilter(self, coarse): filtered = [x.Symbol for x in coarse if x.HasFundamentalData] return filtered def FineFundamentalSorter(self, fine): sortedByROIC = sorted(fine, key=lambda x: x.OperationRatios.ROIC.ThreeMonths, reverse=True) return [s.Symbol for s in sortedByROIC[:self.nAssetsInPortfolio]] class AllUp(AlphaModel): def __init__(self): self.securities = [] def OnSecuritiesChanged(self, algorithm, changes): if not changes: return for security in changes.AddedSecurities: self.securities.append(security) for security in changes.RemovedSecurities: if symbol in self.securities: self.secs.remove(security) def Update(self, algorithm, data): return Insight.Group( [Insight.Price(x.Symbol, timedelta(1), InsightDirection.Up) for x in self.securities] )