Overall Statistics |
Total Trades 102 Average Win 0.94% Average Loss -0.52% Compounding Annual Return 61.225% Drawdown 10.400% Expectancy 1.069 Net Profit 61.225% Sharpe Ratio 2.777 Probabilistic Sharpe Ratio 91.872% Loss Rate 26% Win Rate 74% Profit-Loss Ratio 1.80 Alpha 0.55 Beta -0.186 Annual Standard Deviation 0.181 Annual Variance 0.033 Information Ratio 1.099 Tracking Error 0.224 Treynor Ratio -2.698 Total Fees $133.38 |
from datetime import timedelta from QuantConnect.Data.UniverseSelection import * from Selection.FundamentalUniverseSelectionModel import FundamentalUniverseSelectionModel class NadionUncoupledPrism(QCAlgorithm): def Initialize(self): self.SetStartDate(2019, 1, 1) self.SetEndDate(2020,1 ,1) self.SetCash(100000) self.AddUniverseSelection(LiquidValueUniverseSelectionModel()) self.UniverseSettings.Resolution = Resolution.Daily def OnSecuritiesChanged(self, changes): self.changes = changes for security in self.changes.RemovedSecurities: if security.Invested: self.Liquidate(security.Symbol) for security in self.changes.AddedSecurities: if not security.Invested: self.SetHoldings(security.Symbol, .10) class LiquidValueUniverseSelectionModel(FundamentalUniverseSelectionModel): def __init__(self): super().__init__(True, None, None) self.lastMonth = -1 def SelectCoarse(self,algorithm, coarse): if self.lastMonth == algorithm.Time.month: return Universe.Unchanged self.lastMonth = algorithm.Time.month sortedByDollarVolume = sorted([x for x in coarse if x.HasFundamentalData], \ key=lambda x: x.DollarVolume, reverse=True) return [x.Symbol for x in sortedByDollarVolume[:100]] def SelectFine(self, algorithm, fine): #sortedByYields = sorted(fine, key=lambda f: f.ValuationRatios.EarningYield, reverse=True) filteredByYields = [f for f in fine if f.ValuationRatios.EarningYield > 0] universe = filteredByYields[:10] return [f.Symbol for f in universe]