backtrader
comes with a set of Data Feed parsers (at the time of writing all
CSV Based) to let you load data from different sources.
- Yahoo (online or already saved to a file)
- VisualChart (see www.visualchart.com
- Backtrader CSV (own cooked format for testing)
- Generic CSV support
From the :ref:`Quickstart` guide it should be clear that you add data feeds to a
Cerebro
instance. The data feeds will later be available to the different
strategies in:
- An array self.datas (insertion order)
- Alias to the array objects:
- self.data and self.data0 point to the first element
- self.dataX points to elements with index X in the array
A quick reminder as to how the insertion works:
import backtrader as bt import backtrader.feeds as btfeeds data = btfeeds.YahooFinanceCSVData(dataname='wheremydatacsvis.csv') cerebro = bt.Cerebro() cerebro.adddata(data) # a 'name' parameter can be passed for plotting purposes
This data feed can download data directly from Yahoo and feed into the system.
Parameters:
dataname
(default: None) MUST BE PROVIDEDThe meaning varies with the data feed type (file location, ticker, ...)
name
(default: '')Meant for decorative purposes in plotting. If not specified it may be derived from
dataname
(example: last part of a file path)
fromdate
(default: mindate)Python datetime object indicating that any datetime prior to this should be ignored
todate
(default: maxdate)Python datetime object indicating that any datetime posterior to this should be ignored
timeframe
(default: TimeFrame.Days)Informative unless Data Resampling/Replaying is used. It may be changed by classes upon timeframe detection
compression
(default: 1)Number of actual bars per bar. Informative. Only effective in Data Resampling/Replaying.
sessionstart
(default: None)Indication of session starting time for the data. May be used by classes for purposes like resampling
sessionend
(default: None)Indication of session ending time for the data. May be used by classes for purposes like resampling
This data feed can download data directly from Yahoo and feed into the system.
Parameters (additional to the common ones):
headers
(default: True)Indicates if the passed data has an initial headers row
separator
(default: ",")Separator to take into account to tokenize each of the CSV rows
This class exposes a generic interface allowing parsing mostly every CSV file format out there.
Parses a CSV file according to the order and field presence defined by the parameters
Specific parameters (or specific meaning):
dataname
The filename to parse or a file-like object
datetime
(default: 0) column containing the date (or datetime) field
time
(default: -1) column containing the time field if separate from the datetime field (-1 indicates it's not present)
open
(default: 1) ,high
(default: 2),low
(default: 3),close
(default: 4),volume
(default: 5),openinterest
(default: 6)Index of the columns containing the corresponding fields
If a negative value is passed (example: -1) it indicates the field is not present in the CSV data
nullvalue
(default: float('NaN'))Value that will be used if a value which should be there is missing (the CSV field is empty)
dtformat
(default: %Y-%m-%d %H:%M:%S)Format used to parse the datetime CSV field
tmformat
(default: %H:%M:%S)Format used to parse the time CSV field if "present" (the default for the "time" CSV field is not to be present)
An example usage covering the following requirements:
- Limit input to year 2000
- HLOC order rather than OHLC
- Missing values to be replaced with zero (0.0)
- Daily bars are provided and datetime is just the day with format YYYY-MM-DD
- No
openinterest
column is present
The code:
import datetime import backtrader as bt import backtrader.feeds as btfeeds ... ... data = btfeeds.GenericCSVData( dataname='mydata.csv', fromdate=datetime.datetime(2000, 1, 1), todate=datetime.datetime(2000, 12, 31), nullvalue=0.0, dtformat=('%Y-%m-%d'), datetime=0, high=1, low=2, open=3, close=4, volume=5, openinterest=-1 ) ...
Slightly modified requirements:
- Limit input to year 2000
- HLOC order rather than OHLC
- Missing values to be replaced with zero (0.0)
- Intraday bars are provided, with separate date and time columns - Date has format YYYY-MM-DD - Time has format HH.MM.SS (instead of the usual HH:MM:SS)
- No
openinterest
column is present
The code:
import datetime import backtrader as bt import backtrader.feeds as btfeed ... ... data = btfeed.GenericCSVData( dataname='mydata.csv', fromdate=datetime.datetime(2000, 1, 1), todate=datetime.datetime(2000, 12, 31), nullvalue=0.0, dtformat=('%Y-%m-%d'), tmformat=('%H.%M.%S'), datetime=0, time=1, high=2, low=3, open=4, close=5, volume=6, openinterest=-1 )