Below i have attatched some code i found in one of Jareds posts which consolidates 30 minutes into 1 bar. I have 2 questions
1. Why am i unsuccesful in using the data from the bar i created in a loop to execute the buy order?
2. Is it possible to use consolidators accurately to create Montly or weekly timeframe data for forex?
from datetime import datetime, timedelta
class DataConsolidationAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2017,1,1)
self.SetEndDate(datetime.now()) #Set End Date
self.AddForex("EURUSD", Resolution.Minute)
# define our 30 minute trade bar consolidator. we can
# access the 30 minute bar from the DataConsolidated events
Consolidator = QuoteBarConsolidator(timedelta(minutes=30))
# attach our event handler. The event handler is a function that will
# be called each time we produce a new consolidated piece of data.
Consolidator.DataConsolidated += self.MinuteBarHandler
# this call adds our 30-minute consolidator to
# the manager to receive updates from the engine
self.SubscriptionManager.AddConsolidator("EURUSD", Consolidator)
def MinuteBarHandler(self, sender, bar):
'''This is our event handler for our 30-minute trade bar defined above in Initialize(). So each time the consolidator
produces a new 30-minute bar, this function will be called automatically. The sender parameter will be the instance of
the IDataConsolidator that invoked the event '''
close = bar.Close
Open = bar.Open
high = bar.High
low = bar.Low
self.Debug(str(self.Time) + " " + str(close)+ " "+str(Open))
def OnData(self, data):
price = self.Securities["EURUSD"].Price
if 0 < high:
self.Buy("EURUSD",1000)