Overall Statistics |
Total Trades 304 Average Win 0.92% Average Loss -0.21% Compounding Annual Return 23.612% Drawdown 13.400% Expectancy 1.812 Net Profit 88.953% Sharpe Ratio 1.492 Probabilistic Sharpe Ratio 77.704% Loss Rate 47% Win Rate 53% Profit-Loss Ratio 4.31 Alpha 0.081 Beta 0.397 Annual Standard Deviation 0.11 Annual Variance 0.012 Information Ratio -0.304 Tracking Error 0.148 Treynor Ratio 0.415 Total Fees $922.92 Estimated Strategy Capacity $12000000.00 Lowest Capacity Asset BND TRO5ZARLX6JP |
class CrawlingYellowGreenJackal(QCAlgorithm): def Initialize(self): self.SetStartDate(2018, 1, 1) self.SetEndDate(2021, 1, 1) self.SetCash(100000) self.symbol = self.AddEquity("QQQ", Resolution.Hour).Symbol self.bnd = self.AddEquity("BND", Resolution.Hour).Symbol length = self.GetParameter("sma_length") length = 30 if length is None else int(length) self.sma = self.SMA(self.symbol, length, Resolution.Daily) # History warm up for shortcut helper SMA indicator closing_prices = self.History(self.symbol, length, Resolution.Daily)["close"] for time, price in closing_prices.loc[self.symbol].items(): self.sma.Update(time, price) self.SetBenchmark(self.symbol) self.rebalanceTime = datetime.min self.uptrend = True self.Schedule.On(self.DateRules.EveryDay(self.symbol), \ self.TimeRules.BeforeMarketClose(self.symbol, 10), \ self.indicatorPlot) def OnData(self, data): if not self.sma.IsReady or self.symbol not in data or self.bnd not in data: return if self.symbol in data.Dividends and self.symbol not in data.Bars: self.Debug("Dividend paid at time "+str(self.Time)) return trend = data[self.symbol].Price >= self.sma.Current.Value if self.Time >= self.rebalanceTime or trend != self.uptrend: self.trade(trend) def trade(self, trend): if trend: # uptrend self.SetHoldings(self.symbol, 0.8) self.SetHoldings(self.bnd, 0.2) self.uptrend = True else: # downtrend self.SetHoldings(self.symbol, 0.2) self.SetHoldings(self.bnd, 0.8) self.uptrend = False self.rebalanceTime = self.Time + timedelta(30) def indicatorPlot(self): self.Plot("Benchmark", "SMA", self.sma.Current.Value)