Backtrader通用 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 数据或类似文档对象的文档的名称)

除非您计划运行重采样,否则一些其他参数(例如namecompressiontimeframe )只是提供信息。

当然更重要的是新定义的参数的含义:

  • 包含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
)

推荐阅读

相关文章

Backtrader佣金计划

backtrader 的诞生是出于必要。我自己的...有一种感觉,我控制着自己的回溯测试平台,可以尝试新的想法。但是,在这样做并且从一开始就完全 open 采购它时,很明显它必须有一种方法来满足他人的需求和愿望。 作为未来的交易者,我本可以选择基于点的计算和每轮佣金的固定价格,但这将是一个错误。

Backtrader教程:经纪人 - 开仓作弊

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

BacktraderOCO订单

Release1.9.34.116 将 OCO (又名One Cancel Others)添加到回溯测试武器库中。 注意 这仅在回溯测试中实现,并且还没有针对即时代理的实现 注意 随版本1.9.36.116更新。盈透证券支持 StopTrail和 StopTrailLimit OCO。

Backtrader实际使用方式

最后,似乎已经付出了开发 backtrader是值得的。 在观察 last 周的欧洲市场时,似乎世界末日了,一位朋友问我是否可以看看我们图表包中的数据,看看与以前类似情况相比,下跌幅度如何。 当然可以,但我说我可以做的不仅仅是查看图表,因为我可以快速: 创建一个快速LegDown 指示器来测量跌落的范围。

Backtrader教程:日志记录 - 编写器

将以下内容写出到流中: csv 流,

Backtrader教程:数据馈送

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

Backtrader策略选择

最初的策略选择方法使用两个策略,手动注册和一个简单的[0, 1]列表来决定哪个是策略的目标。因为 Python 为元类提供了许多自省的可能性,所以实际上可以自动化该方法。

Backtrader卡尔曼等

注意 对以下指令的支持从提交开始 发布1.9.30.x 将是包含它的第1个版本 。 backtrader的原始目标之一是成为纯python,即:仅使用标准发行版中可用的软件包。只有一个例外是matplotlib在没有重新发明轮子的情况下进行绘图。

Backtrader笔记本内联绘图

在 Jupyter Notebook 中运行时,1.9.1.99 版添加了自动内联绘图。一些关于backtrader的问题表明人们在笔记本中使用该平台并支持这一点并将其设为默认行为应该使事情保持一致。

Backtrader 教程:佣金计划 - 扩展

佣金和相关功能由单个类CommissionInfo管理,该类主要通过调用broker.setcommission进行实例化。该概念仅限于具有保证金和每份合约固定佣金的期货以及具有基于价格/规模百分比的佣金的股票。不是最灵活的计划,即使它已经达到了目的。