Overall Statistics |
Total Trades 26 Average Win 10.00% Average Loss -74.10% Compounding Annual Return -49.593% Drawdown 77.600% Expectancy -0.007 Net Profit -49.688% Sharpe Ratio 0.018 Probabilistic Sharpe Ratio 14.095% Loss Rate 12% Win Rate 88% Profit-Loss Ratio 0.13 Alpha 0.1 Beta -0.431 Annual Standard Deviation 0.809 Annual Variance 0.655 Information Ratio -0.202 Tracking Error 0.909 Treynor Ratio -0.034 Total Fees $0.00 |
import pandas as pd class EMAMomentumUniverse(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 1, 1) self.SetEndDate(2021, 1, 1) self.SetCash(100000) self.AddEquity("SPY", Resolution.Daily) self.SetBenchmark("SPY") self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverse(self.CoarseSelectionFunction) self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.AfterMarketOpen("SPY", 190), self.EveryDayAfterMarketOpen) def CoarseSelectionFunction(self, universe): self.selected = [] universe = sorted(universe, key=lambda c: c.DollarVolume, reverse=True) universe = [c for c in universe if c.HasFundamentalData][:100] for coarse in universe: symbol = coarse.Symbol history = self.History(symbol, 63, Resolution.Daily) adv63 = (history.close.mean() * history.volume.mean()) self.selected.append([symbol,adv63]) self.selected = pd.DataFrame(self.selected,columns=['symbol','adv']).set_index('symbol') self.Log(str(self.selected.sort_values('adv',ascending=False).iloc[:1])) self.selected = list(self.selected.sort_values('adv',ascending=False).iloc[:1].index) return self.selected def EveryDayAfterMarketOpen(self): for security in self.selected: self.Securities[security].SetDataNormalizationMode(DataNormalizationMode.Adjusted) self.Securities[security].FeeModel = ConstantFeeModel(0) for security in self.selected: if self.Securities[security].Invested: pass else: self.SetHoldings(security, 1) for security in self.selected: self.SetHoldings(security, 1) self.Log('Ordered ' + str(security))