量化交易学习(二十七)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 | cerebro.adddata(data) |
有以下两点需要注意:
-
添加数据源“实例”
-
MyStrategy “class”与将传递给它的参数(kwargs)一起添加。
MyStrategy 的实例化由 cerebro 在后台完成,“addstrategy”中的任何 kwargs 都将传递给它
用户可以根据需要添加任意数量的策略和数据源。平台不强制/限制策略如何相互通信以实现协调。
当然,Cerebro 还提供了额外的可能性:
- 决定预加载和运行模式:
1 | cerebro = bt.Cerebro(runonce=True, preload=True) |
这里有一个限制:runonce需要预加载(如果没有,则无法运行批处理操作)当然预加载Data Feeds不会强制执行runonce
- setbroker/ getbroker(以及broker属性)
如果需要,可以设置自定义经纪人。也可以访问实际的代理实例
绘图。在常规情况下,很简单:
1 | cerebro.run() |
绘图支持自定义参数
-
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) |
这一篇就到这里啦。欢迎大家点赞、转发、私信。还没有关注我的朋友可以关注 江达小记