| 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 -1.974 Tracking Error 0.123 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
class SwimmingYellowGreenDogfish(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 1, 21)
self.SetCash(100000)
self.dataBySymbol = {}
self.AddUniverse(self.MyCoarseFilterFunction)
self.UniverseSettings.Resolution = Resolution.Daily
def MyCoarseFilterFunction(self, coarse):
sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)
filtered = [ x.Symbol for x in sortedByDollarVolume
if x.Price > 10 and x.DollarVolume > 10000000 ]
return filtered[:10]
def OnData(self, data):
for symbol in self.dataBySymbol:
if self.dataBySymbol[symbol].IsReady:
self.Debug("sharpe ratio of "+str(symbol)+" is "+str(self.dataBySymbol[symbol].sharpe.Current.Value))
def OnSecuritiesChanged(self, changes):
for x in changes.AddedSecurities:
if x.Symbol not in self.dataBySymbol:
self.dataBySymbol[x.Symbol] = SymbolData(self,x.Symbol)
for x in changes.RemovedSecurities:
data = self.dataBySymbol.get(x.Symbol,None)
if data:
data.dispose()
class SymbolData:
def __init__(self,algo,symbol):
self.algo = algo
self.symbol = symbol
self.sharpe = SharpeRatio(7,0.1)
history = self.algo.History(self.symbol,7,Resolution.Daily)
if not history.empty and 'close' in history.columns:
for bar in history.loc[symbol, :].itertuples():
self.sharpe.Update(bar.Index,bar.close)
self.consolidator = TradeBarConsolidator(timedelta(days = 1))
self.consolidator.DataConsolidated += self.OnDataConsolidated
algo.SubscriptionManager.AddConsolidator(self.symbol, self.consolidator)
@property
def IsReady(self):
return self.sharpe.IsReady
def OnDataConsolidated(self,sender,bar):
self.sharpe.Update(bar.Time,bar.Close)
def dispose(self):
self.algo.SubscriptionManager.RemoveConsolidator(self.symbol, self.consolidator)