Overall Statistics |
Total Trades 3206 Average Win 1.14% Average Loss -0.20% Compounding Annual Return 2.600% Drawdown 24.900% Expectancy 0.056 Net Profit 13.701% Sharpe Ratio 0.199 Probabilistic Sharpe Ratio 1.471% Loss Rate 84% Win Rate 16% Profit-Loss Ratio 5.77 Alpha 0.057 Beta -0.213 Annual Standard Deviation 0.14 Annual Variance 0.02 Information Ratio -0.469 Tracking Error 0.234 Treynor Ratio -0.13 Total Fees $8568.55 Estimated Strategy Capacity $13000000.00 Lowest Capacity Asset QQQ RIWIV7K5Z9LX |
class PriceCrossingEMA(QCAlgorithm): def Initialize(self): self.SetStartDate(2017, 1, 1) self.SetEndDate(2021, 12, 31) self.SetCash(100000) self.symbol = self.AddEquity("QQQ", Resolution.Minute).Symbol consolidator = TradeBarConsolidator(timedelta(minutes = 5)) self.Consolidate(self.symbol, timedelta(minutes=5), self.BarHandler) self.emaShort = ExponentialMovingAverage(50) self.RegisterIndicator(self.symbol, self.emaShort, consolidator) self.emaLong = ExponentialMovingAverage(200) self.RegisterIndicator(self.symbol, self.emaLong, consolidator) self.SetWarmUp(5*5*200, Resolution.Minute) def BarHandler(self, consolidated): if self.IsWarmingUp: return if not self.emaLong.IsReady: return ema_f = self.emaShort.Current.Value ema_s = self.emaLong.Current.Value C = self.Securities[self.symbol].Close if not self.Portfolio.Invested: if ema_s > C > ema_f: self.SetHoldings(self.symbol, -1, False, " ema_s > C > ema_f") elif ema_s < C < ema_f: self.SetHoldings(self.symbol, 1, False, " ema_s < C < ema_f") if self.Portfolio[self.symbol].IsShort: if C > ema_s: self.Liquidate(self.symbol, " C > ema_s") elif self.Portfolio[self.symbol].IsLong: if C < ema_s: self.Liquidate(self.symbol, "C < ema_s ")