As I know, the history request does not include the latest/current price bar until it closes in the end of market and I want to add it to the previous data whenever i called.

My strategy is to buy 7-days low SPY at 15mins before market close. Also , at that time, the price should be above sma200.

Below is my first code but i got the error. Could someone help, please. Thanks!

Error:

BacktestingRealTimeHandler.Run(): There was an error in a scheduled event SPY: EveryDay: SPY: 30 min before MarketClose. The error was AttributeError : 'NoneType' object has no attribute 'Close'

from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Indicators import * from QuantConnect.Data.Market import TradeBar from datetime import datetime, timedelta import decimal class DaysAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2003,1,1) self.SetEndDate(2019,4,1) self.SetCash(10000) self.spy = self.AddEquity("SPY", Resolution.Daily) #consolidator = TradeBarConsolidator(timedelta(1)) #consolidator.DataConsolidated += self.OnDailyData #self.SubscriptionManager.AddConsolidator("SPY", consolidator) self.daily = RollingWindow[TradeBar](2) self.window = RollingWindow[TradeBar](2) self.spy.SetDataNormalizationMode(DataNormalizationMode.Raw) self.leverage = 1 self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.BeforeMarketClose("SPY", 30), Action(self.Rebalance)) self.sma = self.SMA(self.spy.Symbol, 200, Resolution.Daily) self.sma.Updated += self.SmaUpdated self.smaWin = RollingWindow[IndicatorDataPoint](5) def SmaUpdated(self, sender, updated): self.smaWin.Add(updated) def OnData(self, data): self.window.Add(data["SPY"]) if not (self.window.IsReady and self.smaWin.IsReady): return def Rebalance(self): close = self.History(self.spy.Symbol, 6, Resolution.Daily)['close'] holdings = self.Portfolio[self.spy.Symbol].Quantity currBar = self.window[0].Close currSma = self.smaWin[0].Value if not self.Portfolio.Invested and currBar > currSma and currBar < min(close): self.SetHoldings(self.spy.Symbol, 1) elif currBar < currSma or currBar > max(close): self.SetHoldings(self.spy.Symbol, 0)