backtrader 附带一组 Data Feed 解析器(在编写所有基于CSV时),可让您从不同的来源加载数据。
-
雅虎(在线或已保存到档)
-
视觉图表(见 www.visualchart.com
-
Backtrader CSV(用于测试的自有熟格式)
-
通用 CSV 支持
从快速入门指南中可以清楚地看出,您向实例添加了data feedsCerebro。data feeds稍后将可用于以下各项中的不同策略:
-
数组 self.datas(插入顺序)
-
数组对象的别名:
-
self.data 和 self.data0 指向第一个元素
-
self.dataX 指向数组中索引为 X 的元素
-
关于插入工作原理的快速提醒:
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
Data Feeds 常用参数
这个 data feed 可以直接从雅虎下载数据并输入到系统中。
参数:
-
dataname(默认值:无)必须提供含义因 data feed 类型(档位置,股票代码等)而异
-
name(默认值:“”)用于绘图中的装饰目的。如果未指定,则可能派生自
dataname(例如: last 文件路径的一部分) -
fromdate(默认值:mindate)Python datetime 对象,指示在此之前的任何日期时间都应被忽略
-
todate(默认值:最大日期)Python 日期时间对象,指示应忽略此日期后面的任何日期时间
-
timeframe(默认值:时间范围。天)潜在值:
Ticks、Seconds、、Minutes、WeeksDays和MonthsYears -
compression(默认值:1)每根柱的实际柱数。信息。仅在数据重采样/重放中有效。
-
sessionstart(默认值:无)指示数据的会话开始时间。可由类用于重采样等目的
-
sessionend(默认值:无)指示数据的会话结束时间。可由类用于重采样等目的
CSV Data Feeds 常用参数
参数(除常用参数外):
-
headers(默认值: True)指示传递的数据是否具有初始标题行
-
separator(默认值:“,”)要考虑的分隔符以标记每个 CSV 行
GenericCSVData
此类公开了一个通用接口,允许解析几乎所有的 CSV 文件格式。
根据参数定义的顺序和字段状态解析 CSV 档
具体参数(或具体含义):
-
dataname要解析的文件名或类似文档的对象
-
datetime(默认值:0)包含日期(或日期时间)字段的列 -
time(默认值:-1) 包含时间字段的列(如果与日期时间字段分开)(-1 表示它不存在) -
open(默认值:1)、high(默认值:2)、low(默认值:3)、close(默认值:4)、volume(默认值:5)、openinterest(默认值:6)包含相应字段的列的索引
如果传递负值(例如:-1),则表示 CSV 数据中不存在该字段
-
nullvalue(默认值:浮点('NaN'))如果缺少应存在的值(CSV 字段为空),将使用的值
-
dtformat(默认值:%Y-%m-%d %H:%M:%S)用于分析日期时间 CSV 字段的格式
-
tmformat(默认值: %H:%M:%S)如果「存在」,则用于解析时间 CSV 字段的格式(“时间”CSV 字段的默认值不存在)
涵盖以下要求的范例用法:
-
将投入限制在2000年
-
HLOC 顺序而不是 OHLC
-
要取代为零的缺失值 (0.0)
-
提供每日条形图,日期时间只是格式为YYYY-MM-DD的日期
-
不存在
openinterest列
代码:
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
)
...
略微修改的要求:
-
将投入限制在2000年
-
HLOC 顺序而不是 OHLC
-
要取代为零的缺失值 (0.0)
-
提供日内柱,具有单独的日期和时间列
- 日期的格式为YYYY-MM-DD
- 时间的格式 HH.MM.SS(而不是通常的HH:MM:SS)
-
不存在
openinterest列
代码:
import datetime
import backtrader as bt
import backtrader.feeds as btfeed
...
...
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'),
tmformat=('%H.%M.%S'),
datetime=0,
time=1,
high=2,
low=3,
open=4,
close=5,
volume=6,
openinterest=-1
)
这也可以通过子类化成为永久性的:
import datetime
import backtrader.feeds as btfeed
class MyHLOC(btfreeds.GenericCSVData):
params = (
('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)
)
现在,只需提供以下命令dataname即可重用此新类:
data = btfeeds.MyHLOC(dataname='mydata.csv')