Hello, I am new to QuantConnect and am running into an error that I can't figure out:

"Runtime Error: ArgumentException : Please subscribe to this symbol before adding a consolidator for it. Symbol: GC27V21
at QuantConnect.Data.SubscriptionManager.AddConsolidator(Symbol symbol, IDataConsolidator consolidator) in /LeanCloud/CI.Builder/bin/Debug/src/QuantConnect/Lean/Common/Data/SubscriptionManager.cs:line 156 
at QuantConnect.Data.SubscriptionManager.AddConsolidator(Symbol symbol, PyObject pyConsolidator) in /LeanCloud/CI.Builder/bin/Debug/src/QuantConnect/Lean/Common/Data/SubscriptionManager.cs:line 184 
at ConsolidateFuture
self.SubscriptionManager.AddConsolidator(contract.Symbol in main.py: line 165 (Open Stacktrace)"

As you can see I am adding a list of futures in the Initialize method and filtering them by front month. Currently I just have one future being used in the list for testing.

class FiveOneFractalBreakoutCopy(QCAlgorithm):
    consolidator_by_symbol = {}
    
    @property
    def tickers(self):
        metals = [
            Futures.Metals.Gold,
            #Futures.Metals.Silver,
            #Futures.Metals.Platinum,
            #Futures.Metals.Palladium,
            #Futures.Metals.Copper,
        ]

        tickers = metals

        return tickers

    def Initialize(self):
        self.SetStartDate(2021, 9, 15)  # Set Start Date
        self.SetCash(100000)  # Set Strategy Cash
        from future_set_up import FutureSetUp
        newFutureSetUp = FutureSetUp(self)
        self.SetSecurityInitializer(newFutureSetUp.OpenInterestSecurityInitializer)
        universe: typing.Dict[str, Future] = {s: self.AddFuture(s, Resolution.Minute) for s in self.tickers}
        [future.SetFilter(lambda x: x.FrontMonth().OnlyApplyFilterAtMarketOpen()) for future in universe.values()]
        
        #gc = self.AddFuture(Futures.Metals.Gold, Resolution.Minute)
        #gc.SetFilter(lambda x: x.FrontMonth().OnlyApplyFilterAtMarketOpen())
        #self.Consolidate(gc.Symbol, timedelta(minutes=5), self.OnDataConsolidated)
        

 

In the ConsolidateFuture() method I am trying to consolidate the front month contract. When debugging the first front month contract that runs it works perfectly, but once there is a new front month contract later in time it gives me that error.

 

def OnDataConsolidated(self, bar):
        #5M DATA SETUP
        self.liquidContract = self.liquidContractFive
        
        if self.liquidContract is None:
            return
        self.bar = bar
        self.longTradeBarWindow.Add(self.bar)
        if not self.longTradeBarWindow.IsReady:
            return
        from consolidated_fractals import ConsolidatedFractals
        newConsolidatedFractals = ConsolidatedFractals(self)
        
        #5M UP-FRACTAL FORMULA
        self.FiveUp = newConsolidatedFractals.UpFractalFormula()
        
        #5M DN-FRACTAL FORMULA
        self.FiveDown = newConsolidatedFractals.DownFractalFormula()
        
        #SET SUPPORT, RESET NON-DIRECTIONAL STATUS
        self.support = newConsolidatedFractals.SetSupport(self.FiveUp)
        #SET RESISTANCE, RESET NON-DIRECTIONAL STATUS
        self.resistance = newConsolidatedFractals.SetResistance(self.FiveDown)
            
        if self.support is None:
            return
        if self.resistance is None:
            return
        
        if self.partial_exit_fill_safety_long is True and self.Securities[self.liquidContract].Low <= self.	partial_fill_liq_price:
            self.Liquidate(self.liquidContract)
            self.partial_exit_fill_safety_long = False
            self.partial_fill_liq_price = None
            
        if self.partial_exit_fill_safety_short is True and self.Securities[self.liquidContract].Low >= self.partial_fill_liq_price:
            self.Liquidate(self.liquidContract)
            self.partial_exit_fill_safety_short = False
            self.partial_fill_liq_price = None
        
        #SET BULLISH DIRECTIONAL STATUS
        if self.Securities[self.liquidContract].Close > self.resistance:
            self.breakout = True
        
        #SET BEARISH DIRECTIONAL STATUS
        if self.Securities[self.liquidContract].Close < self.support:
            self.breakdown = True
            
            
    def FiveMinuteHandler(self, sender, bar):
        # Bar period is now 5 min from the consolidator above.
        self.Debug(str(bar.EndTime - bar.Time) + " " + bar.ToString())
        pass
            

def ConsolidateFuture(self, contract):
        contractSymbol = contract.Symbol
        contractValue = contract.Symbol.Value
        dailyConsolidator = TradeBarConsolidator(timedelta(minutes=5))
        dailyConsolidator.DataConsolidated += self.FiveMinuteHandler
        self.SubscriptionManager.AddConsolidator(contract.Symbol, dailyConsolidator)
        self.consolidator_by_symbol[contract.Symbol] = dailyConsolidator

    def OnData(self, slice):
        from future_set_up import FutureSetUp
        from quick_window import QuickWindow
        from fractals import Fractals
        
        #Set Contract
        newFutureSetUp = FutureSetUp(self)
        liquidContract = newFutureSetUp.SetContract(slice)
        if(liquidContract == None):
            return
        
        #Make sure Contract is consolidated
        if liquidContract.Symbol not in self.consolidator_by_symbol:
            self.ConsolidateFuture(liquidContract)

 

If anyone can help me find the solution to this problem that would be awesome!

 

Thanks

Author