Hi Everyone,

Goal: For a filtered universe of stocks, each symbol is checked in OnData to verify that it isn't already invested and that it doesn't have open orders of any type (unfilled, partially filled, filled, etc.) because I don't want to accidently attempt to double place an order. 

In an attempt to check for if I'm invested in a symbol, I tried using ‘and not Portfolio[symbol].Invested’ from another community post but it's not working, giving me an error, 'name 'Portfolio' is not defined at OnData'

Guidance on this is appreciated!

    def Initialize(self):

		#other stuff
        self.Data = {}
        
    def OnData(self, data):
        for symbol in self.Data.keys():
            symbolData = self.Data[symbol]
            if not symbolData.IsReady: 
                continue
            if symbolData.Bars[0].Open < symbolData.Bars[0].Close and not Portfolio[symbol].Invested: #error here
                self.MarketOrder(symbol, 100)
                self.Log("MarketOrder was placed for symbol " + str(symbol))
                
    def CoarseSelectionFilter(self, coarse):
        if self.Time <= self.rebalanceTime: #checks if it has been 1 day since rebalancing
            return self.Universe.Unchanged #if not do not change the universe
        self.rebalanceTime = self.Time + timedelta(1) #set rebalance time to 1 day

        sortedByDollarVolume = sorted(coarse, key=lambda c: c.DollarVolume, reverse=True)
        symbols_by_price = [c.Symbol for c in sortedByDollarVolume if c.Price > 50 and c.Price < 100 and c.HasFundamentalData and c.Volume > 100000]
        self.filteredByPrice = symbols_by_price[:100]
        return self.filteredByPrice

    def FineSelectionFilter(self, fine):
        sortedByMarketCap = sorted(fine, key=lambda c: c.MarketCap)
        symbols_by_marketcap = [c.Symbol for c in sortedByMarketCap if c.MarketCap > 0]
        self.filteredBymarketcap = symbols_by_marketcap[:100]
        return self.filteredBymarketcap

    def OnSecuritiesChanged(self, changes):
        for security in changes.AddedSecurities:
            symbol = security.Symbol
            if symbol not in self.Data:
                self.Data[symbol] = SymbolData(self, symbol)
        
        for security in changes.RemovedSecurities:
            symbol = security.Symbol
            if symbol in self.Data:
                symbolData = self.Data.pop(symbol, None)
                self.SubscriptionManager.RemoveConsolidator(symbol, symbolData.consolidator)

class SymbolData:
    def __init__(self, algorithm, symbol):
        self.algorithm = algorithm
        self.symbol = symbol
        self.Bars = RollingWindow[TradeBar](10) # Rolling window for data bars
        self.consolidator = TradeBarConsolidator(timedelta(days=1))
        self.consolidator.DataConsolidated += self.OnDataConsolidated
        algorithm.SubscriptionManager.AddConsolidator(symbol, self.consolidator)
    
    def OnDataConsolidated(self, sender, bar):
        self.Bars.Add(bar)
    
    @property
    def IsReady(self):
        return self.Bars.IsReady

 

Author