量化交易学习(十一)backtrader基本概念5
今天这篇是backtrader文档的学习笔记。主要介绍了backtrader线的概念。
官方文档链接:https://www.backtrader.com/docu/concepts
例子中的代码都需要导入以下库:
1 | # 导入backtrader |
线(Lines)的延迟索引
[]
操作符用于在next回调中获取数据值。线(Lines)对象还支持在init阶段通过延迟索引的线对象来获取数据。
现在想象这样一个策略逻辑,我们想把前一天的收盘价与均线的实际值作比较。我们不用每次在next函数中手工计算,直接生成一个预先准备好的线对象就可以了:
1 | class MyStrategy(bt.Strategy): |
在__init__函数中,线(Lines)对象使用(delay)的写法生成延迟索引的线对象副本:
- self.data.close(-1)创建了一个close线延迟一天的副本
- 在比较self.data.close(-1) > self.sma时又生成了另一个返回布尔值的线对象
线的耦合
()
操作符可以像上面那样通过delay值生成一个延迟版本的线对象。如果在使用()操作符时不提供delay值,将返回一个LinesCoupler线对象。这用于建立起与操作不同时间范围数据指标的耦合关系。
不同时间范围的数据源有着不同的长度,对它们操作的指标会复制数据的长度。例如:
- 日k线数据源一年有250根
- 周k线数据源一年有52根
假如要比较两条以上面两个数据源为基础均线,直接进行比较就会失败,因为不知道如何将日线与周线数据进行匹配。
对于用户来说,可以通过想象进行日期比较以找出日与周的对应关系,但是:
- 指标(Indicators)仅仅是数学公式,它不包含日期信息
- 指标在计算时并不关心环境信息,只要有足够的数据就会进行计算
而()
操作符可以解决这个问题:
1 | class MyStrategy(bt.Strategy): |
这里较大的时间范围指标 sma1 通过 sma1() 与日线耦合。 这将复制 sma1 生成的值并返回一个与 sma0 兼容的对象,有效地将 52 个周线柱分散到 250 个日柱线中