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 * from sectorcodes import sectorcodes # endregion class FatYellowGreenGoat(QCAlgorithm): def Initialize(self): self.SetStartDate(2021, 7, 26) self.SetEndDate(2021, 10, 26) self.SetCash(100000) self.UniverseSettings.Resolution = Resolution.Daily self.AddUniverse(self.CoarseSelectionFunction, self.FineSelectionFunction) self.Data = {} barPeriod = 15 for etf in sectorcodes.keys(): symbol = self.AddEquity(etf,Resolution.Daily).Symbol self.rollingwindow = RollingWindow[TradeBar](barPeriod) self.EnableAutomaticIndicatorWarmUp = True self.logr = self.LOGR(etf,barPeriod) self.logr.Updated += self.LogrUpdated self.logr_window = RollingWindow[IndicatorDataPoint](barPeriod) self.Data[etf] = self.logr_window def LogrUpdated(self,sender,updated): self.logr_window.Add(updated) def OnData(self, data: Slice): for etf in sectorcodes.keys(): self.rollingwindow.Add(data[etf]) def rank(self): if not self.logr_window.IsReady: return temp = {} codeswospy = sectorcodes.copy() codeswospy.pop('SPY') for etf in codeswospy.keys(): temp[etf] = sum(self.Data[etf]) / sum(self.Data['SPY']) sorted_rank = (sorted(temp.items(), key=lambda item: item[1], reverse =True)) sorted_etfs = list(sorted_rank.keys()) return sorted_etfs[:3] def CoarseSelectionFunction(self,coarse): sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True) byprice = [x for x in sortedByDollarVolume if x.DollarVolume > 1000000 and x.Price > 5 and x.HasFundamentalData] byprice = [x.Symbol for x in byprice][:1000] return byprice def FineSelectionFunction(self,fine): sorted_etfs = self.rank() sector1 = sorted_etfs[0] sector2 = sorted_etfs[1] sector3 = sorted_etfs[2] fineUniverse = [x for x in fine if x.AssetClassification.MorningstarIndustryGroupCode == MorningstarIndustryGroupCode.sector1 or x.AssetClassification.MorningstarIndustryGroupCode == MorningstarIndustryGroupCode.sector2 or x.AssetClassification.MorningstarIndustryGroupCode == MorningstarIndustryGroupCode.sector3 and x.MarketCap > 5e7] tickerSymbolValuesOnly = [c.Symbol for c in fineUniverse] def OnSecuritiesChanged(self, changes): for security in changes.AddedSecurities: self.MarketOrder(security,1) #def LogReturns(self, etf, barPeriod): # self.window = RollingWindow[Tradebar](barPeriod) # self.logr = self.LOGR(etf,barPeriod) # self.logr.Updated += self.LogrUpdated #self.logr_window = RollingWindow[IndicatorDataPoint](barPeriod)
#region imports from AlgorithmImports import * #endregion #MorningstarIndustryGroupCode sectorcodes = { "MOO":"Agriculture", "ITB":"BuildingMaterials", "XME":"MetalsAndMining", "SLX":"Steel", "EATZ":"Restaurants", "PEJ":'TravelAndLeisure', "KBWB":"Banks", "KIE":"Insurance", "VNQ":"REITs", "IBB":"Biotechnology", "PPH":"DrugManufacturers", "IHF":"HealthcareProvidersAndServices", "IHI":"MedicalDevicesAndInstruments", "XLU":"UtilitiesIndependentPowerProducers", "IXP":"TelecommunicationServices", "FDN":"MediaDiversified", "XLE":"OilAndGas", "XRT":"AerospaceAndDefense", "XHB":"Construction", "IYM":"IndustrialProducts", "JETS":"Transportation", "IGV":"Software", "XTH":"Hardware", "SMH":"Semiconductors", "SPY":"BenchMark" }