量化交易学习(六)backtrader基本概念3

今天这篇是backtrader文档的学习笔记。主要介绍了线(Lines)的概念。

官方文档链接:https://www.backtrader.com/docu/concepts

例子中的代码都需要导入以下库:

1
2
3
4
5
6
# 导入backtrader
import backtrader as bt
# 导入指标库
import backtrader.indicators as btind
# 导入数据源库
import backtrader.feeds as btfeeds

线的长度

线是一系列点的集合,随着策略不断地执行点的数量会不断增长,因此,在任何时刻都可以用Python语言的len函数来获取线的长度。

对于已经预加载的数据源,也可以用buflen来获取长度,它会返回实际数据源k线柱的数量。

len与buflen的区别:

  • len返回已经处理了多少k线柱
  • buflen返回所有已经被加载的k线柱的数量

如果两者返回相同的值,说明所有预加载的k线柱都被处理了。

线和参数的继承

参数的继承

继承应该按预期工作:

  • 支持多重继承
  • 基类的参数被继承
  • 如果多个基类定义了相同的参数,则使用继承列表中最后一个类的默认值
  • 如果在子类中重新定义了相同的参数,新的默认值将接管基类的默认值

线的继承

  • 支持多重继承
  • 所有基类的线都被继承。如果相同的名字在基类中被使用了不止一次,那么一条线只能有一个版本

索引:0与-1

线是由一组点组成的,在代码可以用get和set函数以0为索引起始点进行访问。

在策略中只能获取值,在指标中可以设置值。

在前面的策略示例中,我们简要地看到了在next方法中以0为索引对线的访问:

1
2
3
def next(self):
if self.movav.lines.sma[0] > self.data.lines.close[0]:
print('Simple Moving Average is greater than the closing price')

事实上对于索引为0的情况,可以省略索引:

1
2
if self.movav.lines.sma > self.data.lines.close:
...

在python语言中,用-1索引访问数组或可迭代对象时,访问的是数组或可迭代对象的最后一个值。

而在backtrader中,-1代表当前值的前一个值。因此在比较今天的收盘价与昨天的收盘价时可以这样写:

1
2
3
def next(self):
if self.data.close[0] > self.data.close[-1]:
print('Closing price is higher today')

以此类推,-2、-3分别是前天及大前天的索引。

这一篇就到这里啦。欢迎大家点赞、转发、私信。

江达小记