Overall Statistics |
Total Trades 37 Average Win 0.05% Average Loss -0.09% Compounding Annual Return -6.673% Drawdown 0.700% Expectancy -0.241 Net Profit -0.189% Sharpe Ratio -1.626 Probabilistic Sharpe Ratio 32.462% Loss Rate 53% Win Rate 47% Profit-Loss Ratio 0.61 Alpha -0.036 Beta 0.207 Annual Standard Deviation 0.04 Annual Variance 0.002 Information Ratio 0.663 Tracking Error 0.114 Treynor Ratio -0.312 Total Fees $37.00 Estimated Strategy Capacity $24000000.00 Lowest Capacity Asset AMZN R735QTJ8XC9X |
class MomentumEffectAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 9, 15) self.SetCash(100000) self.UniverseSettings.Resolution = Resolution.Minute self.macd = {} self.userlist = ["AAPL","AMZN","TSLA","BABA"] self.AutomaticIndicatorWarmup = True self.AddUniverse(self.CoarseSelectionFunction, self.FineSelectionFunction) self.consolidators = {} def ThirtyMinuteHandler(self, sender, bar): for i in self.Securities.Keys: if self.macd[i].Current.Value > self.macd[i].Signal.Current.Value: self.SetHoldings(i, 0.1) elif self.macd[i].Signal.Current.Value > self.macd[i].Current.Value: self.Liquidate(i) def CoarseSelectionFunction(self, coarse): return [x.Symbol for x in coarse if x.Symbol.Value in self.userlist] def FineSelectionFunction(self, fine): return [x.Symbol for x in fine if x.Symbol.Value in self.userlist] def OnData(self, data): pass def OnSecuritiesChanged(self, changes): # Clean up data for removed securities for security in changes.RemovedSecurities: # Remove consolidator consolidator = self.consolidators.pop(security.Symbol) self.SubscriptionManager.RemoveConsolidator(security.Symbol, consolidator) consolidator.DataConsolidated -= self.ThirdtyMinuteHandler # Remove indicators self.macd.pop(security.Symbol, None) # Liquidate self.Liquidate(security.Symbol) # Loop through added securities for security in changes.AddedSecurities: # Register consolidator to get automatically updated with minute data thirtyMinuteConsolidator = TradeBarConsolidator(timedelta(minutes=30)) thirtyMinuteConsolidator.DataConsolidated += self.ThirtyMinuteHandler self.SubscriptionManager.AddConsolidator(security.Symbol, thirtyMinuteConsolidator) self.consolidators[security.Symbol] = thirtyMinuteConsolidator # Register indicators to get automatically updated with 30 minute bars self.macd[security.Symbol] = MovingAverageConvergenceDivergence(12, 26, 9, MovingAverageType.Exponential) self.RegisterIndicator(security.Symbol, self.macd[security.Symbol], thirtyMinuteConsolidator, Field.Open)