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