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 ModulatedResistanceCoreWave(QCAlgorithm): def Initialize(self): self.SetStartDate(2019, 9, 5) # Set Start Date self.SetEndDate(2019, 9 , 10) self.SetCash(100000) # Set Strategy Cash self.UniverseSettings.Resolution = Resolution.Hour self.AddUniverse(self.SelectCoarse) # Dictionary to hold symbolData self.symbolDict = {} def SelectCoarse(self, coarse): # Get top 1000 liquid stocks sortedCoarse = sorted(coarse, key=lambda c:c.DollarVolume, reverse=True) return [c.Symbol for c in sortedCoarse][:1000] def OnSecuritiesChanged(self, changes): # Add symbol to symbolDict if added to universe for security in changes.AddedSecurities: symbol = security.Symbol if symbol not in self.symbolDict: self.symbolDict[symbol] = SymbolData(self, symbol) for security in changes.RemovedSecurities: symbol = security.Symbol if symbol in self.symbolDict: # Remove unused consolidators from algorithm and remove symbol from dict self.SubscriptionManager.RemoveConsolidator(symbol, self.symbolDict[symbol].consolidator) self.symbolDict.pop(symbol, None) def OnData(self, data): selected = [] # Filter stocks in symbolDict by RSI for symbol, symbolData in self.symbolDict.items(): rsi = symbolData.rsi if rsi.IsReady and rsi.Current.Value < 30: selected.append(symbol.Value) self.Debug(selected) class SymbolData: def __init__(self, algorithm, symbol): self.algorithm = algorithm self.symbol = symbol # Define and register consolidator self.consolidator = TradeBarConsolidator(timedelta(hours = 1)) self.algorithm.SubscriptionManager.AddConsolidator(symbol, self.consolidator) # Define and register RSI indicator self.rsi = RelativeStrengthIndex(14) algorithm.RegisterIndicator(symbol, self.rsi, self.consolidator) # Warm-up our RSI indicator with historical data history = algorithm.History(symbol, 14, Resolution.Hour) if not history.empty: history = history.close.unstack(0) if not history.empty: df = history[symbol].dropna() for time, close in df.iteritems(): self.rsi.Update(time, close)