For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/
List index out of range
-
I'm new to backtrader and want to backtest a strategy using tick data from a csv. I wrote this code to see if it runs and keep getting "list index out of range". I double checked the columns to see If adding a number to a column that doesn't exist but everything is in it's place.
Here's the code
import datetime import backtrader as bt import backtrader.feeds as btfeeds # Create a cerebro engine cerebro = bt.Cerebro() # Set desired initial balance cerebro.broker.setcash(100) # Get csv file path datapath = "SP500_May2_ticks.csv" # Create a Data Feed data = btfeeds.GenericCSVData( dataname=datapath, fromdate = datetime.datetime(2022, 5, 2), todate = datetime.datetime(2022, 5, 2), dtformat=('%Y-%m-%d'), tmformat=('%H:%M:%S'), timeframe=bt.TimeFrame.Ticks, date=0, time=1, open=2, #acts as bid price high=3, low=2, close=3, #acts as ask price ) # Add the Data Feed to Cerebro cerebro.adddata(data) # Run engine cerebro.run()
And here's a photo csv file:
-
I added the open interest, volume to -1 and added compression to 1. That seemed to solve the problem.
Here's the revised code:
import datetime import backtrader as bt import backtrader.feeds as btfeeds # Create a cerebro engine cerebro = bt.Cerebro() # Set desired initial balance cerebro.broker.setcash(100) # Get csv file path datapath = "SP500_May2_ticks.csv" # Create a Data Feed data = btfeeds.GenericCSVData( dataname=datapath, fromdate = datetime.datetime(2022, 5, 2), todate = datetime.datetime(2022, 5, 2), dtformat=('%Y-%m-%d'), tmformat=('%H:%M:%S'), timeframe=bt.TimeFrame.Ticks, compression=1, # 1 is the default date=0, time=1, open=2, #acts as bid price high=3, low=2, close=3, #acts as ask price openinterest=-1, volume=-1 ) # Add the Data Feed to Cerebro cerebro.adddata(data) # Run engine cerebro.run()