Data Feeds¶
Data feeds provide market data to the backtesting engine.
Data Feeds Module - Data source implementations.
This module provides data feed implementations for various data sources including CSV files, pandas DataFrames, Yahoo Finance, Quandl, InfluxDB, and the unified bt_api_py live interface.
- Data Feed Types:
CSV Feeds: GenericCSVData, BTCSV, MT4CSV, SierraChart, VChartCSV
Pandas: PandasData for pandas DataFrame integration
Online: Yahoo Finance, Quandl, BtApiFeed
Utilities: Chainer, RollOver for data manipulation
Example
Loading data from a CSV file: >>> data = bt.feeds.GenericCSVData( … dataname=’data.csv’, … datetime=0, … open=1, … high=2, … low=3, … close=4, … volume=5 … ) >>> cerebro.adddata(data)
Overview¶
Data feeds are the source of market data for strategies. Backtrader supports various data formats and sources.
Built-in Data Feeds¶
CSV Data¶
GenericCSVData: Flexible CSV readerYahooFinanceCSVData: Yahoo Finance formatBacktraderCSVData: Backtrader native format
Pandas¶
PandasData: Load from pandas DataFramePandasDirectData: Direct DataFrame access
Live Data¶
IBData: Interactive BrokersOandaData: OANDA forexCCXTData: Cryptocurrency exchanges
Using CSV Data¶
# Generic CSV
data = bt.feeds.GenericCSVData(
dataname='data.csv',
dtformat='%Y-%m-%d',
datetime=0,
open=1,
high=2,
low=3,
close=4,
volume=5,
openinterest=-1
)
# Yahoo Finance CSV
data = bt.feeds.YahooFinanceCSVData(
dataname='AAPL.csv',
fromdate=datetime(2020, 1, 1),
todate=datetime(2021, 1, 1)
)
Using Pandas Data¶
import pandas as pd
df = pd.read_csv('data.csv', parse_dates=['date'])
df.set_index('date', inplace=True)
data = bt.feeds.PandasData(
dataname=df,
datetime=None, # Use index as datetime
open='open',
high='high',
low='low',
close='close',
volume='volume'
)
Resampling Data¶
# Load minute data
data = bt.feeds.GenericCSVData(dataname='minute_data.csv')
cerebro.adddata(data)
# Resample to hourly
cerebro.resampledata(
data,
timeframe=bt.TimeFrame.Minutes,
compression=60
)
# Resample to daily
cerebro.resampledata(
data,
timeframe=bt.TimeFrame.Days,
compression=1
)
Multiple Data Feeds¶
# Add multiple stocks
for symbol in ['AAPL', 'GOOGL', 'MSFT']:
data = bt.feeds.YahooFinanceCSVData(
dataname=f'{symbol}.csv'
)
cerebro.adddata(data, name=symbol)
# Access in strategy
class MyStrategy(bt.Strategy):
def __init__(self):
# Access by index
self.data0 = self.datas[0]
# Access by name
self.aapl = self.getdatabyname('AAPL')