I'm trying to make a simple equity screener that keeps stocks that cost < $10 from 5 days ago so I can eventually build more complicated screeners based on history data. When I run the code below over a 10 day backtest, it doesn't finish after 10 minutes, so I stopped it. Any recommendations on quicklly screening the full equity database?
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Indicators")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Data import *
from QuantConnect.Algorithm import *
from QuantConnect.Indicators import *
from System.Collections.Generic import List
import decimal as d
### <summary>
### In this algorithm we demonstrate how to perform some technical analysis as
### part of your coarse fundamental universe selection
### </summary>
### <meta name="tag" content="using data" />
### <meta name="tag" content="indicators" />
### <meta name="tag" content="universes" />
### <meta name="tag" content="coarse universes" />
class TestAlgorithm(QCAlgorithm):
def Initialize(self):
'''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
self.SetStartDate(2010,01,01) #Set Start Date
self.SetEndDate(2010,01,10) #Set End Date
self.SetCash(100000) #Set Strategy Cash
self.UniverseSettings.Resolution = Resolution.Daily
self.AddUniverse(self.CoarseSelectionFunction)
def CoarseSelectionFunction(self, coarse):
'''select for all U.S. stocks where share price from 5 days ago was < $10'''
matchingSymbols = []
for cf in coarse:
self.AddSecurity(SecurityType.Equity, cf.Symbol.Value)
hist = self.History(cf.Symbol.Value,5,Resolution.Daily)
if hist['close'][0] <10:
matchingSymbols.append(cf.Symbol)
return matchingSymbols
# this event fires whenever we have changes to our universe
def OnSecuritiesChanged(self, changes):
# liquidate removed securities
for security in changes.RemovedSecurities:
if security.Invested:
self.Liquidate(security.Symbol)
for security in changes.AddedSecurities:
self.SetHoldings(security.Symbol, 0.1)