数据源#
在 backtrader
中,有一组数据源解析器(截止到撰写时,全部为基于CSV的),让您可以从不同的源加载数据。
Yahoo(在线或已经保存到文件中)
VisualChart(请参阅 www.visualchart.com <http://www.visualchart.com> _)
Backtrader CSV(自有的用于测试的格式)
通用的CSV支持
从:ref:快速入门`指南中可以明确地了解到您可以将数据源添加到 ``Cerebro` 实例中。数据源稍后将可在不同策略中使用:
一个数组 self.datas (插入顺序)
对数组对象的别名:
self.data和self.data0指向第一个元素
self.dataX指向数组中索引X的元素插入数据的工作方式的快速提醒:
```python import backtrader as bt import backtrader.feeds as btfeeds
data = btfeeds.YahooFinanceCSVData(dataname=’wheremydatacsvis.csv’)
cerebro = bt.Cerebro()
cerebro.adddata(data) # 可以传递一个 ‘name’ 参数用于绘图目的 ```
数据来源常见参数#
该数据来源可以直接从Yahoo下载数据并供系统使用。
参数:
dataname
(默认值: None) 必须提供具体含义根据数据来源类型而变化(文件位置,代码标记,…) -
name
(默认值:’’)用于在绘图中作为装饰目的。如果未指定,则可以从
dataname
(例如文件路径的最后一部分)派生fromdate
(默认值:mindate)指示应忽略任何早于此日期时间的Python日期时间对象
todate
(默认值:maxdate)指示应忽略任何晚于此日期时间的Python日期时间对象
timeframe
(默认值:TimeFrame.Days)可能的值:
Ticks
,Seconds
,Minutes
,Days
,Weeks
,Months
和Years
compression
(默认值:1)每根K线实际包含的条形数。信息性。仅在数据重采样/重新播放时有效。 -
sessionstart
(默认值:无)数据的会话开始时间的指示。可以用于诸如重新取样之类的目的。
sessionend
(默认值:无)数据的会话结束时间的指示。可以用于诸如重新取样之类的目的
CSV 数据源常见参数#
参数(额外的通用参数):
headers
(默认值:True)指示传入的数据是否有一个初始的标题行
separator
(默认值:”,”)要考虑的分隔符,用于将每个 CSV 行进行标记化.. _generic-csv-datafeed:
GenericCSVData#
这个类提供了一个通用接口,允许解析几乎所有的 CSV 文件格式。
根据参数定义的顺序和字段存在性解析 CSV 文件
特定参数(或特定含义):
dataname
要解析的文件名或类似文件的对象
datetime
(默认值:0)包含日期(或日期时间)字段的列
time
(默认值:-1)包含时间字段的列,如果与日期时间字段分离(-1 表示不存在)
open
(默认值:1),high
(默认值:2),low
(默认值:3),close
(默认值:4),volume
(默认值:5),openinterest
(默认值:6) 含有对应字段的列索引如果传递了一个负值(例如:-1),表示该字段在CSV数据中不存在
nullvalue
(默认值:float(‘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”列存在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
)
…- 限制输入年份为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
)
- 通过子类化也可以使这些设定 永久化 ::```python
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')