量化交易学习(二十七)backtrader平台运行概念4cerebro

今天这篇是backtrader文档的学习笔记。主要介绍了数据源的概念。

官方文档链接:https://www.backtrader.com/docu/operating/#a-cerebro

cerebro

一旦数据源可用并且策略已定义,Cerebro 实例就会将所有内容组合在一起并执行操作。实例化一个cerebro很容易:

1
cerebro = bt.Cerebro()

如果没有什么特别的要求,cerebro会采用默认值初始化。

  • 创建默认经纪人

  • 不收取佣金

  • 数据源将被预加载

  • 默认执行模式是runonce(批量操作),速度更快
    所有指标必须支持runonce全速模式。平台中包含的内容确实如此。
    自定义指标不需要实现 runonce 功能。Cerebro会进行模拟,这意味着那些非 runonce 兼容的指标将运行得更慢。但大多数系统仍然会以批处理模式运行。

向cerebro中添加数据源和策略之后就可以运行了:

1
2
3
cerebro.adddata(data)
cerebro.addstrategy(MyStrategy, period=25)
cerebro.run()

有以下两点需要注意:

  • 添加数据源“实例”

  • MyStrategy “class”与将传递给它的参数(kwargs)一起添加。

    MyStrategy 的实例化由 cerebro 在后台完成,“addstrategy”中的任何 kwargs 都将传递给它

用户可以根据需要添加任意数量的策略和数据源。平台不强制/限制策略如何相互通信以实现协调。

当然,Cerebro 还提供了额外的可能性:

  • 决定预加载和运行模式:
1
cerebro = bt.Cerebro(runonce=True, preload=True)

这里有一个限制:runonce需要预加载(如果没有,则无法运行批处理操作)当然预加载Data Feeds不会强制执行runonce

  • setbroker/ getbroker(以及broker属性)

如果需要,可以设置自定义经纪人。也可以访问实际的代理实例

绘图。在常规情况下,很简单:

1
2
cerebro.run()
cerebro.plot()

绘图支持自定义参数

  • numfigs=1
    如果一张图表太密集,可以分为几个图表查看

  • plotter=None
    可以传递自定义plot实例,这样 cerebro 就不会实例化默认plotter实例了

  • **kwargs 标准关键字参数 这些参数将被传递给plotter。

  • 策略优化。

如上所述,Cerebro 获取一个 Strategy 派生类(不是实例)以及在实例化时传递给它的关键字参数,这将在调用“run”时发生。

这样做是为了实现优化。同一策略类将根据需要使用新参数实例化多次。如果一个实例被传递给大脑……就不能实现这样的优化了。

策略优化可以这样写:

1
cerebro.optstrategy(MyStrategy, period=xrange(10, 20))

如果使用额外参数开发更复杂的策略,则它们都可以传递给optstrategy。不必经过优化的参数可以直接传递,而最终用户无需创建仅包含一个值的虚拟可迭代对象。例如:

1
cerebro.optstrategy(MyStrategy, period=xrange(10, 20), factor=3.5)

这一篇就到这里啦。欢迎大家点赞、转发、私信。还没有关注我的朋友可以关注 江达小记

江达小记