一个问题导致了GenericCSVData的实现,它可用于解析不同的 CSV 格式。
GitHub 中的问题,问题 #6清楚地表明需要有一些东西可以实际处理任何传入的 CSV数据馈送。
酱汁在参数声明中:
class GenericCSVData(feed.CSVDataBase):
params = (
('nullvalue', float('NaN')),
('dtformat', '%Y-%m-%d %H:%M:%S'),
('tmformat', '%H:%M:%S'),
('datetime', 0),
('time', -1),
('open', 1),
('high', 2),
('low', 3),
('close', 4),
('volume', 5),
('openinterest', 6),
)
因为该类继承自 CSVDataBase,所以可以使用一些标准参数:
fromdate(采用 datetime 对象来限制开始日期)todate(采用 datetime 对象)来限制结束日期)headers(默认值: True ,表示 CSV 数据是否有标题行)separator(默认:“,”,分隔字段的字符)dataname(具有 CSV 数据或类似文档对象的文档的名称)
除非您计划运行重采样,否则一些其他参数(例如name 、 compression和timeframe )只是提供信息。
当然更重要的是新定义的参数的含义:
包含
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 字段的默认值不存在)
这可能足以涵盖许多不同的 CSV 格式和缺少值。
涵盖以下要求的示例用法:
将输入限制在 2000 年
HLOC 顺序而不是 OHLC
缺失值替换为零 (0.0)
提供每日条形图,日期时间只是日期,格式为 YYYY-MM-DD
不存在未
openinterest栏
编码:
import datetime
import backtrader as bt
import backtrader.feeds as btfeed
...
...
data = btfeed.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
不存在未
openinterest栏
编码:
import datetime
import backtrader as bt
import backtrader.feeds as btfeed
...
...
data = btfeed.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
)