Hi everyone,

I am stuck at:

“Runtime Error: Please register to receive data for symbol ' W5373A5QVCRP' using the AddSecurity() function. in Indicators.cs:line 2213”,

when I try to backtest. Should I add a class for SymbolData, or change how I update the moving average current values? 

Here is my python file below:

#region imports
from AlgorithmImports import *
from QuantConnect.Data.UniverseSelection import *
#endregion
class ShortAlgorithm(QCAlgorithm):
    
    def __init__(self):
        self.reb = 1
        self.num_fine = 10
        self.symbols = None
        self.averages = {}
    def Initialize(self):
        self.SetCash(100000)
        self.SetStartDate(2022, 1, 1)
        self.AddIndex("VIX", Resolution.Daily)
        
        self.spy = self.AddEquity("SPY", Resolution.Daily).Symbol
        self.s200 = self.SMA("SPY", 200, Resolution.Daily)
        self.SetBenchmark("SPY")
        self.UniverseSettings.Resolution = Resolution.Daily
        
        self.AddUniverse(self.CoarseSelectionFunction,self.FineSelectionFunction)
        
        self.Schedule.On(self.DateRules.EveryDay(self.spy), 
        self.TimeRules.AfterMarketOpen(self.spy, 0), Action(self.rebalance))
    def OnData(self, data):
        if not data["SPY"]: 
            return
        if not self.s200.IsReady:
            return
   
    def CoarseSelectionFunction(self, coarse):
        if self.reb != 1:
            return self.symbols
        for cf in coarse:
            if cf.Symbol not in self.averages:
                self.averages[cf.Symbol] = self.SMA(cf.Symbol, 200)
            self.averages[cf.Symbol].Update(cf.EndTime, cf.AdjustedPrice)
            
        filtered_coarse = [x.Symbol for x in coarse if (x.HasFundamentalData) 
                                                and x.Price > 5
                                                and x.Price < self.averages[x.Symbol].Current.Value
                                                and x.Volume > 1e5
        ]
        return filtered_coarse
    def FineSelectionFunction(self, fine):
        if self.reb != 1:
            return self.symbols
            
        self.reb = 0
            
        filtered_fine = [x for x in fine if
                                                x.MarketCap > 2e9
        ]
        top = sorted(filtered_fine, key = lambda x: x.MarketCap, reverse=True)[:self.num_fine]
        self.symbols = [x.Symbol for x in top]
        return self.symbols
    def OnData(self, data):
        pass
    
    def rebalance(self):
        long_short_list = self.symbols
        for i in self.Portfolio.Values:
            if (i.Invested) and (i not in long_short_list):
                self.Liquidate(i.Symbol)
                
        if self.Securities["SPY"].Price < self.s200.Current.Value:
            if self.Securities["VIX"].Price > 20:
                for i in self.symbols:
                    self.SetHoldings(i, -1/self.num_fine)
            else:
                self.SetHoldings("SPY", 1)
        else:
            self.SetHoldings("SPY", 1)
        
        self.reb = 1

 

Any feedback is much appreciated!