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 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 |
from TechnologyUniverseModule import TechnologyUniverseModule class UncoupledTransdimensionalCoil(QCAlgorithm): def Initialize(self): self.SetStartDate(2018, 12, 5) # Set Start Date self.SetEndDate(2018, 12, 10) self.SetCash(100000) # Set Strategy Cash self.UniverseSettings.Resolution = Resolution.Daily self.SetUniverseSelection(TechnologyUniverseModule()) def OnData(self, data): for key in data.Keys: self.Log(key.Value) def OnSecuritiesChanges(self, change): for added in change.AddedSecurities: self.Log(f"added: {added.Symbol.Value}") for removed in change.RemovedSecurities: self.Log(f"removed: {removed.Symbol.Value}")
from Selection.FundamentalUniverseSelectionModel import FundamentalUniverseSelectionModel class TechnologyUniverseModule(FundamentalUniverseSelectionModel): ''' This module selects the most liquid stocks listed on the Nasdaq Stock Exchange. ''' def __init__(self, filterFineData = True, universeSettings = None, securityInitializer = None): '''Initializes a new default instance of the TechnologyUniverseModule''' super().__init__(filterFineData, universeSettings, securityInitializer) self.numberOfSymbolsCoarse = 1000 self.numberOfSymbolsFine = 100 self.dollarVolumeBySymbol = {} self.symbols = [] self.lastMonth = -1 def SelectCoarse(self, algorithm, coarse): ''' Performs a coarse selection: -The stock must have fundamental data -The stock must have positive previous-day close price -The stock must have positive volume on the previous trading day ''' if algorithm.Time.month == self.lastMonth: return self.symbols filtered = [x for x in coarse if x.HasFundamentalData and x.Volume > 0 and x.Price > 0] sortedByDollarVolume = sorted(filtered, key = lambda x: x.DollarVolume, reverse=True)[:self.numberOfSymbolsCoarse] self.symbols.clear() self.dollarVolumeBySymbol.clear() for x in sortedByDollarVolume: self.symbols.append(x.Symbol) self.dollarVolumeBySymbol[x.Symbol] = x.DollarVolume return self.symbols def SelectFine(self, algorithm, fine): ''' Performs a fine selection: -The company's headquarter must in the U.S. -The stock must be traded on the NASDAQ stock exchange -At least half a year since its initial public offering -The stock must be in the Industry Template Code catagory N ''' if algorithm.Time.month == self.lastMonth: return self.symbols self.lastMonth = algorithm.Time.month # Filter stocks filteredFine = [x for x in fine if x.CompanyReference.CountryId == "USA" and (x.CompanyReference.PrimaryExchangeID == "NAS") and (algorithm.Time - x.SecurityReference.IPODate).days > 180 and x.CompanyReference.IndustryTemplateCode == "N"] sortedByDollarVolume = [] # Sort stocks on dollar volume sortedByDollarVolume = sorted(filteredFine, key = lambda x: self.dollarVolumeBySymbol[x.Symbol], reverse=True) self.symbols = [x.Symbol for x in sortedByDollarVolume[:self.numberOfSymbolsFine]] return self.symbols