通用 CSV 数据馈送

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(默认:浮动(’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
)

 

评论被关闭。