Overall Statistics |
Total Trades 140 Average Win 2.97% Average Loss -4.11% Compounding Annual Return 24.929% Drawdown 34.200% Expectancy 0.339 Net Profit 210.105% Sharpe Ratio 0.826 Probabilistic Sharpe Ratio 25.355% Loss Rate 22% Win Rate 78% Profit-Loss Ratio 0.72 Alpha 0.073 Beta 1.071 Annual Standard Deviation 0.243 Annual Variance 0.059 Information Ratio 0.473 Tracking Error 0.173 Treynor Ratio 0.188 Total Fees $145.38 Estimated Strategy Capacity $190000000.00 Lowest Capacity Asset GOOG T1AZ164W5VTX |
# Top Dollar Volume and OHL Momentum Universe class DeltaMomentum(QCAlgorithm): def Initialize(self): self.SetStartDate(2017, 3, 3) self.SetEndDate(2022, 4, 1) self.SetCash(100000) self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverse(self.CoarseSelection) self.selectedSymbols = [] self.universeMonth = -1 def CoarseSelection(self, coarse): if self.Time.month == self.universeMonth: return self.selectedSymbols selected = [x for x in coarse if (x.HasFundamentalData) and (float(x.Price) > 5)] dollar_volume_sorted = sorted(selected, key=lambda x: x.DollarVolume, reverse = True) topDollarVolume = dollar_volume_sorted[:10] topDollarVolumeSymbols = [x.Symbol for x in topDollarVolume] hist = self.History(topDollarVolumeSymbols, 22, Resolution.Daily) O = hist['open'].unstack(level = 0) H = hist['high'].unstack(level = 0) L = hist['low'].unstack(level = 0) momentum = O.ix[-2] * H.ix[-2] * L.ix[-2] / O.ix[0] * H.ix[0] * L.ix[0] top_momentum = momentum.sort_values(ascending = False)[:2] self.selectedSymbols = [self.Symbol(str(x)) for x in top_momentum.index] self.Debug([self.Symbol(str(x)).Value for x in top_momentum.index]) return self.selectedSymbols def OnData(self, data): if self.Time.month == self.universeMonth: return for sec in self.Portfolio.Keys: if sec not in self.selectedSymbols: self.Liquidate(sec) for sec in self.selectedSymbols: self.SetHoldings(sec, 1/len(self.selectedSymbols)) self.universeMonth = self.Time.month