Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset Portfolio Turnover 0% |
# region imports from AlgorithmImports import * import datetime # endregion class TestFundamentalIssue(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 11, 5) self.SetEndDate(2020, 12, 5) self.SetCash(100000) self.SetWarmUp(1) self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverse(self.CoarseSelectionFunction, self.SelectFine) self.SetBrokerageModel(InteractiveBrokersBrokerageModel()) self.SetExecution(ImmediateExecutionModel()) self.rebalence_flag = 0 self.SPY = self.AddEquity("SPY",Resolution.Hour).Symbol self.Schedule.On(self.DateRules.MonthEnd("SPY", 2), self.TimeRules.At(1, 0), Action(self.monthly_rebalance)) def monthly_rebalance(self): self.rebalence_flag = 1 def CoarseSelectionFunction(self, coarse): if not self.rebalence_flag: return Universe.Unchanged sortedByDollarVolume = sorted([x for x in coarse if x.HasFundamentalData and x.DollarVolume > 3000000 and x.Price >0], key = lambda x: x.DollarVolume, reverse=True)[:200] return [x.Symbol for x in sortedByDollarVolume] def SelectFine(self, fine): if not self.rebalence_flag: return Universe.Unchanged self.rebalence_flag = 0 fine = ([x for x in fine if x.CompanyReference.CountryId == "USA" and x.CompanyReference.PrimaryExchangeID in ["NYS","NAS"] and (self.Time - x.SecurityReference.IPODate).days > 180 #180 and x.MarketCap > 2e9 ]) fun_filter = (lambda x: x.OperationRatios.ROA.ThreeMonths if not np.isnan(x.OperationRatios.ROA.ThreeMonths) else 0) fine = ([x for x in fine if fun_filter(x) > 0]) if self.Time > datetime.datetime(2020,11,10): fun_map = {x.Symbol.Value:x for x in fine} self.Log('GPS1:' + str(fun_filter(fun_map['GPS']))) sortedByratio = sorted(fine, key=fun_filter, reverse=True)[:100] if self.Time > datetime.datetime(2020,11,10): fun_map = {x.Symbol.Value:x for x in sortedByratio} self.Log('cut:' + str(fun_filter(sortedByratio[-1]))) return [x.Symbol for x in sortedByratio]