Overall Statistics |
Total Trades 1871 Average Win 0.76% Average Loss -0.51% Compounding Annual Return 7.055% Drawdown 11.200% Expectancy 0.172 Net Profit 121.598% Sharpe Ratio 0.911 Probabilistic Sharpe Ratio 33.734% Loss Rate 53% Win Rate 47% Profit-Loss Ratio 1.49 Alpha 0.044 Beta 0.18 Annual Standard Deviation 0.081 Annual Variance 0.007 Information Ratio -0.582 Tracking Error 0.159 Treynor Ratio 0.412 Total Fees $2882.86 Estimated Strategy Capacity $73000000.00 Lowest Capacity Asset QQQ RIWIV7K5Z9LX |
class HmaIchimokuAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2010, 1, 1) self.SetCash(25000) self.qqq = self.AddEquity("QQQ", Resolution.Hour).Symbol self.hma = self.HMA(self.qqq, 12, Resolution.Hour) self.delayed_hma = IndicatorExtensions.Of(Delay(2), self.hma) # ==== System Inputs ==== TenkanPeriod = 9 KijunPeriod = 26 SenkouAPeriod = 26 SenkouBPeriod = 52 SenkouADelay = 26 SenkouBDelay = 26 self.SetWarmUp(2*SenkouBPeriod, Resolution.Hour) self.ichimoku = self.ICHIMOKU(self.qqq, TenkanPeriod, KijunPeriod, SenkouAPeriod, SenkouBPeriod, SenkouADelay, SenkouBDelay, Resolution.Hour) def OnData(self, data): if not (self.qqq in data.Bars and self.hma.IsReady and self.delayed_hma.IsReady and self.ichimoku.IsReady): return price = self.Securities["QQQ"].Price currentHma = self.hma.Current.Value previousHma = self.delayed_hma.Current.Value tenkan = self.ichimoku.Tenkan.Current.Value kijun = self.ichimoku.Kijun.Current.Value chikou = self.ichimoku.Chikou.Current.Value senkou_span_a = self.ichimoku.SenkouA.Current.Value senkou_span_b = self.ichimoku.SenkouB.Current.Value cloud_top = max(senkou_span_a, senkou_span_b) cloud_bottom = min(senkou_span_a, senkou_span_b) if not self.Portfolio.Invested and currentHma > previousHma and price > previousHma and price > chikou and price > cloud_top and (tenkan >= kijun or price > kijun): self.SetHoldings("QQQ",1) elif not self.Portfolio.Invested and currentHma < previousHma and price < previousHma and price < chikou and price < cloud_bottom and (tenkan <= kijun or price < kijun): self.SetHoldings("QQQ", 0) if self.Portfolio["QQQ"].IsLong and currentHma < previousHma and (price < previousHma or tenkan < kijun or price < tenkan or price < kijun or price < cloud_top or price < chikou): self.Liquidate() elif self.Portfolio["QQQ"].IsShort and currentHma > previousHma and (price > previousHma or tenkan > kijun or price > tenkan or price > kijun or price > cloud_bottom or price > chikou): self.Liquidate()