You are here:  Home » 量化交易与机器学习 » backtrader » 将数据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)可能值:TicksSecondsMinutesDaysWeeksMonthsYears
  • 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')