量化交易学习(六)backtrader基本概念3
今天这篇是backtrader文档的学习笔记。主要介绍了线(Lines)的概念。
官方文档链接:https://www.backtrader.com/docu/concepts
例子中的代码都需要导入以下库:
1 | # 导入backtrader |
线的长度
线是一系列点的集合,随着策略不断地执行点的数量会不断增长,因此,在任何时刻都可以用Python语言的len函数来获取线的长度。
对于已经预加载的数据源,也可以用buflen来获取长度,它会返回实际数据源k线柱的数量。
len与buflen的区别:
- len返回已经处理了多少k线柱
- buflen返回所有已经被加载的k线柱的数量
如果两者返回相同的值,说明所有预加载的k线柱都被处理了。
线和参数的继承
参数的继承
继承应该按预期工作:
- 支持多重继承
- 基类的参数被继承
- 如果多个基类定义了相同的参数,则使用继承列表中最后一个类的默认值
- 如果在子类中重新定义了相同的参数,新的默认值将接管基类的默认值
线的继承
- 支持多重继承
- 所有基类的线都被继承。如果相同的名字在基类中被使用了不止一次,那么一条线只能有一个版本
索引:0与-1
线是由一组点组成的,在代码可以用get和set函数以0为索引起始点进行访问。
在策略中只能获取值,在指标中可以设置值。
在前面的策略示例中,我们简要地看到了在next方法中以0为索引对线的访问:
1 | def next(self): |
事实上对于索引为0的情况,可以省略索引:
1 | if self.movav.lines.sma > self.data.lines.close: |
在python语言中,用-1索引访问数组或可迭代对象时,访问的是数组或可迭代对象的最后一个值。
而在backtrader中,-1代表当前值的前一个值。因此在比较今天的收盘价与昨天的收盘价时可以这样写:
1 | def next(self): |
以此类推,-2、-3分别是前天及大前天的索引。
这一篇就到这里啦。欢迎大家点赞、转发、私信。