数据源#

backtrader 中,有一组数据源解析器(截止到撰写时,全部为基于CSV的),让您可以从不同的源加载数据。

  • Yahoo(在线或已经保存到文件中)

  • VisualChart(请参阅 www.visualchart.com <http://www.visualchart.com> _)

  • Backtrader CSV(自有的用于测试的格式)

  • 通用的CSV支持

从:ref:快速入门`指南中可以明确地了解到您可以将数据源添加到 ``Cerebro` 实例中。数据源稍后将可在不同策略中使用:

  • 一个数组 self.datas (插入顺序)

  • 对数组对象的别名:

    • self.data和self.data0指向第一个元素

    • self.dataX指向数组中索引X的元素插入数据的工作方式的快速提醒:

```python import backtrader as bt import backtrader.feeds as btfeeds

data = btfeeds.YahooFinanceCSVData(dataname=’wheremydatacsvis.csv’)

cerebro = bt.Cerebro()

cerebro.adddata(data) # 可以传递一个 ‘name’ 参数用于绘图目的 ```

数据来源常见参数#

该数据来源可以直接从Yahoo下载数据并供系统使用。

参数:

  • dataname (默认值: None) 必须提供

    具体含义根据数据来源类型而变化(文件位置,代码标记,…) - name (默认值:’’)

    用于在绘图中作为装饰目的。如果未指定,则可以从 dataname (例如文件路径的最后一部分)派生

    • fromdate (默认值:mindate)

      指示应忽略任何早于此日期时间的Python日期时间对象

    • todate (默认值:maxdate)

      指示应忽略任何晚于此日期时间的Python日期时间对象

    • timeframe (默认值:TimeFrame.Days)

      可能的值: TicksSecondsMinutesDaysWeeksMonthsYears

    • compression (默认值:1)

      每根K线实际包含的条形数。信息性。仅在数据重采样/重新播放时有效。 - sessionstart (默认值:无)

      数据的会话开始时间的指示。可以用于诸如重新取样之类的目的。

    • sessionend (默认值:无)

      数据的会话结束时间的指示。可以用于诸如重新取样之类的目的

CSV 数据源常见参数#

参数(额外的通用参数):

  • headers (默认值:True)

    指示传入的数据是否有一个初始的标题行

  • separator (默认值:”,”)

    要考虑的分隔符,用于将每个 CSV 行进行标记化.. _generic-csv-datafeed:

GenericCSVData#

这个类提供了一个通用接口,允许解析几乎所有的 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”列存在The code:

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
)
通过子类化也可以使这些设定 永久化 ::```python

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')

```