First of all, thank you Riley Raschke!
Hi Rob Pec ,
The algorithm is creating indicators using the helper methods and subscribing to a consolidator. Therefore, the indicators are updated with two resolutions. Instead of using the helper methods, it should use the constructors:
symbolData.RSI = RelativeStrengthIndex(self.RSIPeriod)
see the docs, under Indicators section, for more details.
Also, the algorithm is updating the indicators subscribed to different consolidators with the same callback method and RegisterIndicator. So, for example, symbolData.RSI is being updated by 5 different consolidators:
1 - 1-hour consolidator from self.RSI
2 - Update method in OnDataConsolidated with is triggered by 3 consolidators:
3 - 1-hour consolidator with RegisterIndicator.
In order to update the indicators, we just need to use RegisterIndicator which accepts a timedelta (TimeSpan in C#) object and will create the consolidator under-the-hoods.
symbolData.RSI = RelativeStrengthIndex(self.RSIPeriod)
self.RegisterIndicator(symbolData.Symbol, symbolData.RSI, self.BarPeriod)
Finally, I would advise creating the indicator, with the constructor, in the SymbolData class to avoid the None.