Backtrader教程:数据馈送

  |  

backtrader 附带一组 Data Feed 解析器(在编写所有基于CSV时),可让您从不同的来源加载数据。

  • 雅虎(在线或已保存到档)

  • 视觉图表(见 www.visualchart.com

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

  • 通用 CSV 支持

从快速入门指南中可以清楚地看出,您向实例添加了data feedsCerebrodata 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 (默认值:时间范围。天)

    潜在值:TicksSeconds、、MinutesWeeksDaysMonthsYears

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

推荐阅读

相关文章

Backtrader改进代码

时不时地,带有 backtrader 代码的示例会在互联网上弹出。在我看来,有几个是中国人。最新的一个在这里: 标题是: backtrader-学习笔记2,这显然(感谢谷歌)翻译成 backtrader- 学习笔记2。

Backtrader同步不同市场

使用次数越多, backtrader 必须面对的想法和意外场景的混合就越多。对于每个新平台,一个挑战是要看看平台是否能够达到开发开始时设置的期望,灵活性和易用性是目标,Python被选为基石。 工单#76 提出了一个问题,即是否可以完成具有不同交易日历的同步市场。

Backtrader回溯

在一些关于改进的ShapeRatio的提示之后, backtrader 已将此分析仪添加到其武器库中。 文献位于: 从对数回报的好处开始,并遵循在SharpeRatio方程的分母中具有标准偏差的副作用,本文档开发了该分析仪的公式和期望。

Backtrader跨越数字

《backtrader》的发布1.9.27.105纠正了一个疏忽。这是一个疏忽,因为拼图的所有部分都已到位,但启动并不是在所有角落都进行的。 该机制使用一个名为的属性_mindatas,因此让我们将其称为: mindatas。 社区问了这个问题,答案并不是很到位。

Backtrader交叉回溯测试陷阱

在backtrader 社区中 ,倾向于重复的事情是,用户解释了拷贝在例如 TradingView 中获得的回溯测试结果的意愿,这些天非常流行,或者其他一些回溯测试平台。

Backtrader开场作弊

“发布”1.9.44.116 添加了对 Cheat-On-Open的支持。这似乎是那些全力以赴的人的需求功能,他们在酒吧 close 后进行了计算,但希望与 open 价格相匹配。 当开盘价跳空(上涨或下跌,取决于是否buysell有效)并且现金不足以进行全面运营时,这样的用例就会失败。这将强制代理拒绝该操作。

Backtrader买入/卖出箭头

backtrader 旨在尝试提供易用性。创建指针和其他常见嫌疑人应该很容易。 当然,定制现有项目也应该是交易的一部分。 社区中的一个主题,BuySell Arrows,它起源于从问题迁移而来的,就是一个很好的例子。

Backtrader教程:策略 - 信号

操作 backtrader 也是可能的,而无需编写策略。虽然这是首选方式,但由于构成机器的对象层次结构,使用信号也是可能的。

Backtrader信贷利息

在某些情况下,真实经纪人的现金金额可能会减少,因为资产操作包括利率。例子: 卖空股票 交易所买卖基金包括多头和空头 这意味着不仅交易构成了系统的盈利能力,因为信贷上的利息在帐户上佔有一席之地。 为了涵盖这种情况, backtrader 包括(从发佈1.8.8.96开始)功能来考虑这一点。

Backtrader教程:数据馈送 - 多个时间帧

有时投资决策是使用不同的时间框架做出的: 每周评估趋势 每天运行条目 或者5分钟对60分钟。 这意味着需要组合多个时间帧的数据backtrader 来支持这种组合。 对它的本机支持已经内置。