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
、Weeks
Days
和Months
Years
-
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')