Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Probabilistic Sharpe Ratio
0%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0
Tracking Error
0
Treynor Ratio
0
Total Fees
$0.00
class MyAlgorithm(QCAlgorithm):

    def Initialize(self):
        

        self.SetStartDate(2019,1,1)
        self.SetCash(100000)

        tickers = ["SPY", "TLT", "BND"] # can be more..
        
        self.symbolData = {}
        
        for ticker in tickers:

            self.equity = self.AddEquity(ticker, Resolution.Daily)
            symbol = self.equity.Symbol
            self.symbolData[symbol] = SymbolData(self, symbol)
            self.equity.SetDataNormalizationMode(DataNormalizationMode.Raw)   
            self.equity.SetLeverage(1.0)    
        
        
        # Warm up algorithm for 50 days to populate the indicators prior to the start date
        self.SetWarmUp(50)


    def OnDailyData(self, sender, bar):
        self.symbolData[bar.Symbol].window22.Add(bar)
        self.symbolData[bar.Symbol].window11.Add(bar)
        self.symbolData[bar.Symbol].window2.Add(bar)
   
    
    def OnData(self, data):
        
        for symbol, symbolData in self.symbolData.items():
            if data.ContainsKey(symbol):
                self.Log(f'{self.Time} :: Adding bar for {symbol.Value}')
                bar = data[symbol]
                symbolData.AddBar(bar)

        # Don't run if we're warming up our indicators.
        if self.IsWarmingUp: 
            return
        
        ## code to add here for adding information to rolling window:
        # Something of this sort: 
        # window.Add(data[symbol])
        
        # Also, making sure it is ready:
        # Something like this:
        # if not window.IsReady: continue
        
        
class SymbolData:
    
    def __init__(self, algorithm, symbol):
        
        self.algorithm = algorithm
        self.symbol = symbol
        
        self.window22 = RollingWindow[TradeBar](22)
        self.window11 = RollingWindow[TradeBar](11)
        self.window2 = RollingWindow[TradeBar](2)
        
    def AddBar(self, bar):
        self.window22.Add(bar)
        self.window11.Add(bar)
        self.window2.Add(bar)