I am creating a strategy for futures (eg Futures.Indices.NASDAQ100EMini) that trades on 5 minute bars (M5). Apparently to do that I must use a QuoteBarConsolidator as in the example below. But I have some questions.

1. In the Initialize method, I set the root symbol to Futures.Indices.NASDAQ100EMini and then the next line uses  Symbol.Create(self.rootSymbol, SecurityType.Future, Market.USA). I found this in an example and I have no idea why I must call the Symbol.Create() method. Is there a reason to call this? 

2. The M5 consolidator code is at the end of the Initialize method, and it sets up the callback method OnFiveMinuteBar(). The parameters sent in are "sender" and "bar". What is "sender" and do I need to use it? As for "bar" is that a single M5 trade bar with open,high,low,close data? Is it already just the data for "NQ" or must I index it to geth the data (like bar["NQ"])? Is it just the current bar or can I get prior bars from it?

3. When I get a new bar of data, of course I want to have access to past bars for indicators and such. For example, for a simple moving average 50 bars long, I need 50 bars of data. How exactly do I access this data? Must I create my own array of bars in Initialize and every time OnFiveMinuteBar is called I must append that bar to my array? Or is there some other way to get the M5 bar data for some number of bars in the past as well as the current bar?

Here is my Initialize() code:

def Initialize(self):

        self.SetStartDate(2018,1, 1)  #Set Start Date
        self.SetEndDate(2019,2,28)    #Set End Date
        self.SetCash(100000)           #Set Strategy Cash
        self.rootSymbol = Futures.Indices.NASDAQ100EMini
        self.symbol_NQ = Symbol.Create(self.rootSymbol, SecurityType.Future, Market.USA) . # what does this do?

        # Do i have to keep track of my own bars?

        self.mybars = []

        # Use consolidator
        # https://www.quantconnect.com/tutorials/api-tutorials/consolidating-data-to-build-bars
        fiveMinuteConsolidator = QuoteBarConsolidator(TimeSpan.FromMinutes(5))
        fiveMinuteConsolidator.DataConsolidated += self.OnFiveMinuteBar

    def OnFiveMinuteBar(self, sender, bar):

        self.mybars.append(bar) .           # do I have to keep track of bars myself?

        # TODO: code goes here, but I don't know what is in sender or bar