Jared Broad, This is a follow-up to our discussion in Slack. Thanks so much for your response.

Is it possible, using history, rolling window, or something else, to select Universe based on whether today was a hammer at end of day?

One of my first attempts at this was based on the EMA Universe Selection tutorial in the Bootcamp. Here's a version of that attempt: this is giving me a bunch of Please register to receive data for symbol... errors:

class HammersUniverse(QCAlgorithm):

def Initialize(self):
self.SetStartDate(2020, 2, 20)
self.SetCash(10000)
self.UniverseSettings.Resolution = Resolution.Daily
self.AddUniverse(self.CoarseSelectionFunction)
self.hammers = { }

def CoarseSelectionFunction(self, universe):
selected = []
universe = sorted(universe, key=lambda c: c.DollarVolume, reverse=True)

# If I only want US stocks, is this the correct route?
universe = [c for c in universe if c.Price > 10 and c.Market == 'usa'][:10]

for security in universe:
symbol = security.Symbol

if symbol not in self.hammers:
history = self.History(symbol, 1, Resolution.Daily)
self.hammers[symbol] = SelectionData(self, history, symbol)

self.hammers[symbol].update(security.Time, security.Price)

if self.hammers[symbol].is_ready():
_hammer_value = self.hammers[symbol].Current.Value
if _hammer_value == 1 or _hammer_value == -1:
selected.append(symbol)

return selected[:10]

def OnSecuritiesChanged(self, changes):
for security in changes.RemovedSecurities:
# self.Liquidate(security.Symbol)
self.Debug(f"Added: { security.Symbol }")

for security in changes.AddedSecurities:
# self.SetHoldings(security.Symbol, 0.10)
self.Debug(f"Removed: { security.Symbol }")

class SelectionData():

def __init__(self, algo, history, symbol):
# Could not call CandleStickPatterns directly like we do EMA in the Bootcamp, so I pass the
# Also, for Hammer, I needed the symbol we are working with.
# Is this a good way to go?
self.hammer = algo.CandlestickPatterns.Hammer(symbol, Resolution.Daily)

for bar in history.itertuples():
tradebar = TradeBar(bar.Index[1], bar.Index[0], bar.open, bar.high, bar.low, bar.close, bar.volume)
self.hammer.Update(tradebar)

def is_ready(self):
return self.hammer.IsReady

def update(self, time, price):
self.hammer.Update(time, price)

I diverged from this based on some forum posts I'd seen, but none speak to this specific need directly, so I have been piecing things together).

In Slack, you'd mentioned that I am using the helper method, and that I need to use the actual class--the helpers are normally capitalized, but in the candle sections are lowercase. Where might I find the documentation on this? You are referring to the call to

algo.CandlestickPatterns.Hammer(symbol, Resolution.Daily)

, correct?