量化交易学习(二十八)backtrader文档cerebro(1)
今天这篇是backtrader文档的学习笔记。主要介绍了cerebro的概念。
官方文档链接:https://www.backtrader.com/docu/cerebro/
Cerebro
此类是 backtrader 的基石,因为它是以下功能的中心点:
1、收集所有输入(Data Feeds)、演员(Strategies)、观众(Observers)、评论家(Analyzers)和记录者(Writers),确保演出随时继续进行。
2、执行回测/或实时数据馈送/交易
3、返回结果
4、允许访问绘图设施
收集输入
1、首先创建一个大脑:
1 | cerebro = bt.Cerebro(**kwargs) |
支持一些控制执行的**kwargs
,请参阅参考资料(在后面可以将相同的参数应用于 run 方法)
2、添加数据源
最常见的模式是 cerebro.adddata(data)
,其中 data
是已经实例化的数据源。 例如:
1 | data = bt.BacktraderCSVData(dataname='mypath.days', timeframe=bt.TimeFrame.Days) |
重新采样和重播数据是可能的,并且遵循相同的模式:
1 | data = bt.BacktraderCSVData(dataname='mypath.min', timeframe=bt.TimeFrame.Minutes) |
或者:
1 | data = bt.BacktraderCSVData(dataname='mypath.min', timeframe=bt.TimeFrame.Minutes) |
该系统可以接受任意数量的数据源,包括将常规数据与重新采样和/或重放的数据混合。 当然,其中一些组合肯定是没有意义的,并且为了能够组合数据而有限制:时间对齐。 请参阅文档『数据 - 多个时间范围』、『数据重采样 - 重采样』和『数据 - 重播』部分。
3、添加策略
与已经是类实例的数据源不同,cerebro 直接采用 Strategy 类和传递给它的参数。 背后的基本原理:在优化场景中,该类将被实例化多次并传递不同的参数
即使没有运行优化,该模式仍然适用:
1 | cerebro.addstrategy(MyStrategy, myparam1=value1, myparam2=value2) |
优化时,必须将参数添加为可迭代对象。 有关详细说明,请参阅文档的『优化』部分。 基本模式:
1 | cerebro.optstrategy(MyStrategy, myparam1=range(10, 20)) |
这将运行 MyStrategy 10 次,myparam1 的值从 10 到 19(记住 Python 中的范围是半开的,不会达到 20)
4、其他元素
还可以添加一些其他元素来增强回测体验。 请参阅相应的部分。 方法有:
-
addwriter
-
addanalyzer
-
addobserver (or addobservermulti)
-
更换经纪人
Cerebro 将使用 backtrader 中的默认经纪人,但这可以被覆盖:
1 | broker = MyBroker() |
6、接收通知
如果数据源和/或代理发送通知(或创建通知的store提供商),它们将通过 Cerebro.notify_store
方法接收。 可通过三种方式处理这些通知
- 通过
addnotifycallback(callback)
调用向 cerebro 实例添加回调。 回调必须支持此函数签名:
1 | callback(msg, *args, **kwargs) |
收到的实际 msg
、*args
和 **kwargs
是由具体实现定义的(完全取决于data/broker/store),但一般来说,人们应该期望它们是可打印的,以允许接收和实验。
-
重写添加到 cerebro 实例的 Strategy 子类中的 notify_store 方法。
函数签名:notify_store(self, msg, *args, **kwargs)
-
创建 Cerebro 子类并覆盖 notify_store 方法(与策略中的签名相同)
这应该是最不推荐的方法。
这一篇就到这里啦。欢迎大家点赞、转发、私信。还没有关注我的朋友可以关注 江达小记