将数据Data Feeds添加到 Cerebro实例中 – backtrader中文教程
backtrader
附带一组数据馈送解析器(在编写所有基于 CSV 的时侯),让您从不同来源加载数据。
- 雅虎(在线或已保存到文件)
- VisualChart(见www.visualchart.com)
- Backtrader CSV(用于测试的自定义格式)
- 通用 CSV 支持
从快速入门指南中,您应该清楚地将数据馈送添加到 Cerebro
实例。数据馈送稍后将可用于以下方面的不同策略:
- 一个数组 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
数据馈送常用参数
该数据馈送可以直接从雅虎下载数据并馈送到系统中。
参数:
dataname
(默认:无)必须提供含义因数据馈送类型(文件位置、股票代码……)而异name
(默认:”)用于绘图中的装饰目的。如果未指定,它可能来自dataname
(例如:文件路径的最后一部分)fromdate
(默认:mindate)Python datetime 对象,指示应忽略此之前的任何日期时间todate
(默认:最大日期)Python datetime 对象,指示应忽略此之后的任何日期时间timeframe
(默认值:TimeFrame.Days)可能值:Ticks
,Seconds
,Minutes
,Days
,Weeks
,Months
和Years
compression
(默认值:1)每个柱的实际柱数。内容丰富。仅对数据重采样/重放有效。sessionstart
(默认:None)指示数据的会话开始时间。可以被类用于重采样等目的sessionend
(默认:None)数据会话结束时间的指示。可以被类用于重采样等目的
CSV 数据馈送 常用参数
参数(除常用参数外):
headers
(默认:True)指示传递的数据是否具有初始标题行separator
(默认: ”,”)用于标记每个 CSV 行的分隔符
通用CSV数据
这个类公开了一个通用接口,允许解析几乎所有的 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
不存在列中
编码:
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')