| 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:
equity = self.AddEquity(ticker, Resolution.Daily)
equity.SetDataNormalizationMode(DataNormalizationMode.Raw)
equity.SetLeverage(1.0)
symbol = equity.Symbol
self.symbolData[symbol] = SymbolData(self, symbol)
# Warm up algorithm for 50 days to populate the indicators prior to the start date
self.SetWarmUp(50)
def OnData(self, data):
for bar in data.Values:
self.symbolData[bar.Symbol].Add(bar)
# Don't run if we're warming up our indicators.
if self.IsWarmingUp or not all([v.IsReady for k,v in self.symbolData.items()]):
return
for symbol, value in self.symbolData.items():
self.Debug(f'{value}')
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 Add(self, bar):
self.window2.Add(bar)
self.window11.Add(bar)
self.window22.Add(bar)
@property
def IsReady(self):
return (self.window2.IsReady
and self.window11.IsReady
and self.window22.IsReady)
def __repr__(self):
if not self.IsReady:
return 'Not ready'
return f'Win02: {self.window2[0]}, Win11: {self.window11[0]}, Win22: {self.window22[0]}'