Overall Statistics |
Total Trades 53 Average Win 0.20% Average Loss -0.47% Compounding Annual Return 189.180% Drawdown 4.100% Expectancy -0.283 Net Profit 9.438% Sharpe Ratio 6.39 Probabilistic Sharpe Ratio 81.214% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.43 Alpha 1.459 Beta -1.138 Annual Standard Deviation 0.228 Annual Variance 0.052 Information Ratio 4.829 Tracking Error 0.301 Treynor Ratio -1.28 Total Fees $76.86 Estimated Strategy Capacity $300000000.00 |
class LiquidUniverseSelection(QCAlgorithm): filteredByPrice = None def Initialize(self): self.SetStartDate(2020, 1, 1) self.SetEndDate(2020, 1, 31) self.SetCash(100000) self.AddUniverse(self.CoarseSelectionFilter, self.SelectFine) self.UniverseSettings.Resolution = Resolution.Daily #1. Set the leverage to 2 self.UniverseSettings.Leverage = 2 def CoarseSelectionFilter(self, coarse): sortedByDollarVolume = sorted(coarse, key=lambda c: c.DollarVolume, reverse=True) filteredByPrice = [c.Symbol for c in sortedByDollarVolume if c.Price > 10] return filteredByPrice[:10] def SelectFine(self, fine): for x in fine: self.Debug(f'\n {x.Symbol.Value} ') self.Debug(f'Sector {x.AssetClassification.MorningstarSectorCode}') self.Debug(f'Group {x.AssetClassification.MorningstarIndustryGroupCode}') self.Debug(f'Ind {x.AssetClassification.MorningstarIndustryCode}') return [x.Symbol for x in fine] def OnSecuritiesChanged(self, changes): self.changes = changes self.Log(f"OnSecuritiesChanged({self.Time}):: {changes}") for security in self.changes.RemovedSecurities: if security.Invested: self.Liquidate(security.Symbol) for security in self.changes.AddedSecurities: #2. Leave a cash buffer by setting the allocation to 0.18 instead of 0.2 # self.SetHoldings(security.Symbol, ...) self.SetHoldings(security.Symbol, 0.18)