| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 |
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Common")
from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Data.Consolidators import *
from datetime import timedelta
class EndOfDayTrader(QCAlgorithm):
def Initialize(self):
self.SetCash(100000)
self.SetStartDate(2021,4,15)
self.SetEndDate(2021,4,15)
self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol
self.lookback = 200
self.premarketCloseData = {}
# define our 374 minute trade bar consolidator. we can
# access the 374 minute bar from the DataConsolidated events
preMarketCloseConsolidator = TradeBarConsolidator(timedelta(minutes=373))
# attach our event handler. the event handler is a function that will
# be called each time we produce a new consolidated piece of data.
preMarketCloseConsolidator.DataConsolidated += self.PreMarketCloseHandler
# this call adds our 30 minute consolidator to
# the manager to receive updates from the engine
self.SubscriptionManager.AddConsolidator("SPY", preMarketCloseConsolidator)
# Schedule function 16 minutes before every market close to submit MOC orders
self.Schedule.On(self.DateRules.EveryDay(self.symbol), \
self.TimeRules.BeforeMarketClose(self.symbol, 16), \
Action(self.EveryMarketClose))
def EveryMarketClose(self):
self.Log("EveryMarketClose() called.")
# this is called at the last possible minute to submit MOC orders
# get historical data - ends yesterday
self.opens = self.History(self.symbol, self.lookback, Resolution.Daily)["open"].values.tolist()
self.highs = self.History(self.symbol, self.lookback, Resolution.Daily)["high"].values.tolist()
self.lows = self.History(self.symbol, self.lookback, Resolution.Daily)["low"].values.tolist()
self.closes = self.History(self.symbol, self.lookback, Resolution.Daily)["close"].values.tolist()
self.volumes = self.History(self.symbol, self.lookback, Resolution.Daily)["volume"].values.tolist()
#self.vix_closes = self.History(CBOE,self.cboeVix, self.lookback, Resolution.Daily)["close"].values.tolist()
# now append today's value of the above using data 16 minutes prior to market close
self.opens.append(self.premarketCloseData['open'])
self.highs.append(self.premarketCloseData['high'])
self.lows.append(self.premarketCloseData['low'])
self.closes.append(self.premarketCloseData['close'])
self.volumes.append(self.premarketCloseData['volume'])
self.Log("Spy closed at 415.87 on 4/15/21 at 4:00 PM, current SPY price at 3:43PM is: {}".format(self.premarketCloseData['close']))
def PreMarketCloseHandler(self, sender, consolidated):
self.Log("PreMarketCloseHandler() called, current Close price is {}".format(consolidated.Close))
# called 17 minutes prior to market close
'''This is our event handler for our 373 minute trade bar defined above in Initialize(). So each time the
consolidator produces a new 373 minute bar, this function will be called automatically.'''
self.premarketCloseData['open'] = consolidated.Open
self.premarketCloseData['high'] = consolidated.High
self.premarketCloseData['low'] = consolidated.Low
self.premarketCloseData['close'] = consolidated.Close
self.premarketCloseData['volume'] = consolidated.Volume