量化交易学习(二十九)backtrader文档cerebro(2)
今天这篇是backtrader文档的学习笔记。主要介绍了cerebro的概念。
官方文档链接:https://www.backtrader.com/docu/cerebro/
执行回测
回测由run方法执行,它由多个选项(也可以在实例化时指定)来决定如何执行:
1 | result = cerebro.run(**kwargs) |
具体可使用的参数可以参考文档来确定,这里就不赘述了。
标准观察者
cerebro(除非另有说明)会自动实例化三个标准观察者
- 跟踪现金(cash)和价值(投资组合 value)的经纪人观察者
- 显示每笔交易的情况的交易观察者
- 记录操作何时执行的买入/卖出观察者
如果希望有更简洁的绘图,只需使用 stdstats=False 禁用它们
返回结果
cerebro 返回它在回测期间创建的策略的实例。 这允许分析他们做了什么,因为策略中的所有元素都是可访问的:
1 | result = cerebro.run(**kwargs) |
run返回的结果格式会根据是否使用优化而有所不同(用optstrategy添加了策略):
- 所有策略均通过 addstrategy 添加
结果将是回测期间运行的实例的列表 - 使用 optstrategy 添加了 1 个或多个策略
结果将是列表的列表。 每个内部列表将包含每次优化运行后的策略
注意:优化的默认行为已更改为仅返回系统中存在的分析器,以使跨计算机内核的消息传递更轻松。
如果希望完整的策略集作为返回值,则将参数 optreturn 设置为 False
访问绘图器
另外,如果安装了 matplotlib,则可以绘制策略。 通常的写法是:
1 | cerebro.plot() |
具体参数请参阅文档中绘图部分。
回测逻辑
回测流程的简要概述:
1、 发送任何市场通知
2、 要求数据源提供下一组价格tick/bar数据
数据源通过查看可用数据源接下来提供的日期时间来同步。 新周期中未交易的数据源仍提供旧数据点,而有新数据的数据源则提供新的数据点(以及指标的计算)
该逻辑旨在轻松同步多个数据源以及不同时间范围的数据源
3、 通知策略在队列中的经纪人发出的订单、交易和现金/价值的通知
4、 告诉经纪商接受队列中的订单并使用新数据执行挂单
5、 调用策略的 next 方法让策略评估新数据(并且可能发出在经纪商中排队的订单)
根据阶段的不同,可能是 prenext 或 nextstart在满足策略/指标的最短周期要求之前执行,
在策略内部,策略还将输出观察者(observers)、指标(indicators)、分析者(analyzers)和其他活跃元素
6、 告诉任何写入器(writers)将数据写入其目标
需要考虑的重要事项:
在上面的步骤 1 中,当数据源传送新的一组柱形图时,这些柱形图将被关闭。 这意味着数据已经发生了。
因此,步骤 4 中策略发出的订单无法使用步骤 1 中的数据执行。
这意味着订单将以 x + 1 的概念执行。其中 x 是执行订单的柱时刻,x + 1 是下一个柱时刻,这是可能的订单执行的最早时刻
这一篇就到这里啦。欢迎大家点赞、转发、私信。还没有关注我的朋友可以关注 江达小记