I was trying to backtest a 5 minute data feed and this didn't completely clarify it so I'll just leave here what I ended up doing to have as reference. My data is in the following format:
alt text
time,open,high,low,close,volume. And it goes from 2018-12-19 09:35:00. The datetime format is '%Y-%m-%d %H:%M:%S'.
I was trying to do it like this
data = bt.feeds.GenericCSVData(
dataname=datapath,
timeframe=bt.TimeFrame.Minutes,
compression=5,
sessionstart=datetime.datetime(2018, 12, 19, 9, 35, 0),
sessionend=datetime.datetime(2019, 5, 22, 16, 30, 0),
datetime=0,
open=1,
high=2,
low=3,
close=4,
volume=5,
)
and I was getting an IndexError: list index out of range. Doing it like this solved the problem:
data = bt.feeds.GenericCSVData(
dataname=datapath,
timeframe=bt.TimeFrame.Minutes,
compression=1, # The data is already at 5 minute intervals
fromdate=datetime.datetime(2018, 12, 20, 9, 30),
todate=datetime.datetime(2019, 5, 22, 16, 30),
sessionstart=datetime.time(9, 30),
sessionend=datetime.time(16, 30),
dtformat='%Y-%m-%d %H:%M:%S',
datetime=0,
time=-1,
open=1,
high=2,
low=3,
close=4,
volume=5,
openinterest=-1,
headers=1,
separator=",",
reverse=True
)
data.addfilter(bt.filters.SessionFilter(data))
cerebro.adddata(data)