量化交易学习(十)backtrader基本概念4

今天这篇是backtrader文档的学习笔记。主要介绍了backtrader中对切片的支持以及线的概念。

官方文档链接: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

切片

Backtrader为了实现线的0和-1的索引方式,不支持对线(lines)对象进行切片操作。对于常规的Python可索引对象,我们可以这样写:

1
2
# 获取一个从头到尾的切片
myslice = self.my_sma[0:]

但是对于backtrader,索引0代表着当前时间的数据值,也就是最新的值,它之后已经没有数据了。

同样的对于下面的写法也是不支持的:

1
2
# 获取一个从头到尾的切片
myslice = self.my_sma[0:-1]

同样,0代表当前值的索引,-1代表前一个值的索引,与Python中的索引含义不同,不能这样写。

获取切片

虽然不能通过Python的标准语法获取切片,我们可以通过线的方法来获取切片:

其中,ago为起始时刻,size为以ago为基准向前获取数据的数量。

1
2
# 获取只有当前值的切片
myslice = self.my_sma.get(ago=0, size=1)

上面的代码会返回一个只有一个值的切片,其值为当前时刻对应的数据值。

获取从当前时刻往前10个值(也就是获取最近10个时刻对应的数据):

1
myslice = self.my_sma.get(size=10)  # ago 的默认值为0

这样获取的数组的数据的索引和常规Python的数组索引是一样的,它不再是线对象。数组最左边的值是最旧的,最右边的值是当前的。

获取忽略当前时刻的最近10个数据可以这样写:

1
myslice = self.my_sma.get(ago=-1, size=10)

江达小记