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 Estimated Strategy Capacity $0 |
from System.Drawing import Color class JumpingFluorescentOrangeGaur(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 4, 23) # Set Start Date self.SetEndDate(2021, 4, 23) self.SetCash(100000) # Set Strategy Cash self.UniverseSettings.ExtendedMarketHours = True self.UniverseSettings.Resolution = Resolution.Minute symbol = self.AddEquity('SPY', Resolution.Minute, Market.USA, True, 1, True).Symbol self.tradingSymbols = [] self.SetAlpha(TradingModel(self.tradingSymbols, exclude_symbol=symbol)) #self.tradingModel = TradingModel(self.tradingSymbols) self.Schedule.On( self.DateRules.EveryDay(), self.TimeRules.At(6, 50), self.addSymbols ) def addSymbols(self): self.aapl = self.AddEquity('AAPL', Resolution.Minute, Market.USA, True, 1, True).Symbol self.tradingSymbols.append(self.aapl) #return TradingModel(self.tradingSymbols) def OnData(self, data): pass class TradingModel(AlphaModel): def __init__(self, universe, exclude_symbol): self.tradeSymbols = universe self.exclude_symbol = exclude_symbol self.symbolDataBySymbol = {} self.startIndicators = {} self.allIndicators = {} self.count = 0 def Update(self, algorithm, data): insights = [] for symbol in self.tradeSymbols: if symbol in self.symbolDataBySymbol.keys(): symbolData = self.symbolDataBySymbol[symbol] if data.Bars.ContainsKey(symbol): algorithm.Plot('Trade Plot', 'Price', data.Bars[symbol].Close) if symbolData.slowFiveEMA.IsReady: algorithm.Plot('Trade Plot', 'EMA', symbolData.slowFiveEMA.Current.Value) ''' self.count += 1 if self.count == 120: for symbol, indicators in self.allIndicators.items(): self.indicatorValues = [indicator.Current.Value for indicator in indicators] algorithm.Log(f"Our indicator values for {symbol} are: {self.indicatorValues}") ''' return insights def OnSecuritiesChanged(self, algorithm, changes): self.changes = changes self.resolution = Resolution.Minute self.fastPeriod = 20 self.slowPeriod = 200 self.barPeriod = TimeSpan.FromMinutes(1) self.rollingWindowSize = 6 symbols = [] for added in changes.AddedSecurities: if added.Symbol not in self.symbolDataBySymbol and added.Symbol != self.exclude_symbol: symbols.append(added.Symbol) if len(symbols) == 0: return history = algorithm.History(symbols, self.slowPeriod * 5, self.resolution) tickers = history.index.levels[0] for ticker in tickers: symbol = SymbolCache.GetSymbol(ticker) symbolData = SymbolData(symbol, algorithm) symbolData.fastFiveEMA = ExponentialMovingAverage(self.fastPeriod) symbolData.slowFiveEMA = ExponentialMovingAverage(self.slowPeriod) symbolData.slowFiveSMA = SimpleMovingAverage(self.slowPeriod) symbolData.slowTwoEMA = ExponentialMovingAverage(self.slowPeriod) symbolData.slowTwoSMA = SimpleMovingAverage(self.slowPeriod) symbolData.slowOneEMA = ExponentialMovingAverage(self.slowPeriod) symbolData.slowOneSMA = SimpleMovingAverage(self.slowPeriod) symbolData.VWAP = algorithm.VWAP(symbol) symbolData.RegisterIndicator(algorithm) if not history.empty: symbolData.WarmUpIndicators(algorithm, history.loc[ticker]) self.symbolDataBySymbol[symbol] = symbolData for symbol, symbolData in self.symbolDataBySymbol.items(): self.allIndicators[symbol] = [ symbolData.fastFiveEMA, symbolData.slowFiveEMA, symbolData.slowFiveSMA, symbolData.slowTwoEMA, symbolData.slowOneEMA, symbolData.slowTwoSMA, symbolData.slowOneSMA, symbolData.VWAP ] class SymbolData: def __init__(self, symbol, algorithm): self.Symbol = symbol self.algorithm = algorithm self.resolution = Resolution.Minute self.slowPeriod = 200 self.fastPeriod = 20 self.fastFiveEMA = None self.slowFiveEMA = None self.slowFiveSMA = None self.slowTwoEMA = None self.slowTwoSMA = None self.slowOneEMA = None self.slowOneSMA = None self.VWAP = None self.fiveMinuteConsolidator = TradeBarConsolidator(timedelta(minutes = 5)) self.twoMinuteConsolidator = TradeBarConsolidator(timedelta(minutes = 2)) self.oneMinuteConsolidator = TradeBarConsolidator(timedelta(minutes = 1)) algorithm.SubscriptionManager.AddConsolidator(self.Symbol, self.fiveMinuteConsolidator) algorithm.SubscriptionManager.AddConsolidator(self.Symbol, self.twoMinuteConsolidator) algorithm.SubscriptionManager.AddConsolidator(self.Symbol, self.oneMinuteConsolidator) def WarmUpIndicators(self, algorithm, history): for tuple in history.itertuples(): tradebar = TradeBar(tuple.Index, self.Symbol, tuple.open, tuple.high, tuple.low, tuple.close, tuple.volume) self.fiveMinuteConsolidator.Update(tradebar) self.twoMinuteConsolidator.Update(tradebar) self.oneMinuteConsolidator.Update(tradebar) def RegisterIndicator(self, algorithm): algorithm.RegisterIndicator(self.Symbol, self.fastFiveEMA, self.fiveMinuteConsolidator, Field.Close) algorithm.RegisterIndicator(self.Symbol, self.slowFiveEMA, self.fiveMinuteConsolidator, Field.Close) algorithm.RegisterIndicator(self.Symbol, self.slowFiveSMA, self.fiveMinuteConsolidator, Field.Close) algorithm.RegisterIndicator(self.Symbol, self.slowTwoEMA, self.twoMinuteConsolidator, Field.Close) algorithm.RegisterIndicator(self.Symbol, self.slowTwoSMA, self.twoMinuteConsolidator, Field.Close) algorithm.RegisterIndicator(self.Symbol, self.slowOneEMA, self.oneMinuteConsolidator, Field.Close) algorithm.RegisterIndicator(self.Symbol, self.slowOneSMA, self.oneMinuteConsolidator, Field.Close)