Overall Statistics |
Total Trades 82 Average Win 2.06% Average Loss -2.87% Compounding Annual Return 55.006% Drawdown 32.700% Expectancy -0.045 Net Profit 55.006% Sharpe Ratio 1.344 Probabilistic Sharpe Ratio 64.872% Loss Rate 44% Win Rate 56% Profit-Loss Ratio 0.72 Alpha 0.47 Beta -0.293 Annual Standard Deviation 0.3 Annual Variance 0.09 Information Ratio 0.529 Tracking Error 0.332 Treynor Ratio -1.38 Total Fees $949.06 |
class MultidimensionalModulatedInterceptor(QCAlgorithm): def Initialize(self): self.SetStartDate(2019, 1, 1) # Set Start Date self.SetEndDate(2020, 1, 1) #Set End Date self.SetCash(100000) # Set Strategy Cash self.UniverseSettings.Resolution = Resolution.Daily # Set Resolution to Daily self.AddUniverse(self.CoarseSelection, self.FineSelection) self.month = -1 def CoarseSelection(self, coarse): if self.Time.month == self.month: return Universe.Unchanged else: # Filter for DollarVolume, Price and Fundamental Data availability filtered = [x for x in coarse if x.Price > 2 and x.HasFundamentalData] return [x.Symbol for x in filtered] def FineSelection(self, fine): if self.Time.month == self.month: return Universe.Unchanged else: self.month = self.Time.month # Filter for market cap and profitable company filtered = [f for f in fine if f.CompanyProfile.MarketCap > 300000000 and f.ValuationRatios.PERatio > 0] sortedByPE = sorted(filtered, key = lambda x : x.ValuationRatios.PERatio, reverse = False) sortedByPS = sorted(sortedByPE[:100], key = lambda x : x.ValuationRatios.PSRatio, reverse = False) # retrieve 10 lowest positive PS return [f.Symbol for f in sortedByPS][:10] def OnSecuritiesChanged(self, changes): for security in changes.RemovedSecurities: self.Liquidate(security.Symbol) for security in changes.AddedSecurities: self.SetHoldings(security.Symbol, 0.10)