| 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)