Hello,
I'm unable to get stock's Volume data in a custom Coarse imported from a dropbox using a csv file.
Can anyone let me know what's wrong with the attached code ?
Error: Runtime Error: AttributeError : 'Symbol' object has no attribute 'Volume'
from AlgorithmImports import *
class DropboxCoarseFineAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2021, 7, 7) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.AddUniverse(self.SelectCoarse, self.SelectFine)
self.UniverseSettings.Resolution = Resolution.Hour
self.url = "https://www.dropbox.com/s/e3w1j0hryzeprz2/tickersonly.csv?dl=1"
def SelectCoarse(self, coarse):
coarse = self.GetSymbols()
self.sortedByVolume = sorted(coarse, key=lambda x: x.Volume, reverse=True)
return [x.Symbol for x in self.sortedByVolume if x.Price > 0
and x.HasFundamentalData][:4]
def SelectFine(self, fine):
# Return symbols from our list which have a market capitalization of at least 10B
return [f.Symbol for f in fine if f.MarketCap > 1e10 and f.Symbol in symbols]
def GetSymbols(self):
self.universeData = self.Parse(self.url)
# In backtest load once if not set, then just use the dates.
if self.universeData is None:
self.universeData = self.Parse(self.url)
return self.universeData
def Parse(self, url):
# Download file from url as string
file = self.Download(url).split("\n")
# # Remove formatting characters
data = [x.replace("\r", "").replace(" ", "").replace(",", "") for x in file]
# Dictionary to hold list of active symbols for each date, keyed by date
symbolsByDate = []
# Parse data into dictionary
for arr in data:
symb = Symbol.Create(arr, SecurityType.Equity, Market.USA)
# symb = self.AddEquity(arr).Symbol
symbolsByDate.append(symb)
return symbolsByDate
def OnSecuritiesChanged(self, changes):
# self.Debug(f"Added Securities: {[security.Symbol.Value for security in changes.AddedSecurities]}")
# self.Debug(f"Removed Securities: {[security.Symbol.Value for security in changes.RemovedSecurities]}")
pass