Backtrader 量化回测实践(3)—— 主要对象理解

Backtrader 量化回测实践(3)—— 主要对象理解

在策略中使用的大部分数据形式:包括Indicator 、signal 、逻辑操作符、数学计算、切片访问的研究测试。
重新回顾一下使用的主要对象,理解对象的性质,如何在实践中应用 。

1.Data Feeds

首先是data ,数据对象的核心是Lines 。数据元素则是python的数据类型:float/ string / int

        print('data:')
        print(type(self.data))
        print(type(self.data.close))
        print(type(self.data.close[0]))

结果是:

data:
<class ‘backtrader.feeds.pandafeed.PandasData’>
<class ‘backtrader.linebuffer.LineBuffer’>
<class ‘float’>

2.Strategy

在策略中,将使用Indicator ,signal ,数据计算,数据切片的处理,数据处理之后的对象是什么类型,将影响在策略中如何合理使用这些对象。

(1)Indicator

最简单的Indicator ,就是是内置的方法,使用SMA指示器:

        # indicator
        self.sma1 = btind.SimpleMovingAverage(self.data.close, period=self.p.period2)
        self.sma2 = btind.SimpleMovingAverage(self.data.close, period=self.p.period1)

看一下sma1 和 sma2的数据类型

sma:
<class ‘backtrader.indicators.sma.SimpleMovingAverage’>
<class ‘backtrader.indicators.sma.SimpleMovingAverage’>

定义的指示器的SimpleMovingAverage 类型。
从源代码中,sma.py中,类的初始化部分,说明SimpleMovingAverage也是lines的子类:

self.lines[0] = Average(self.data, period=self.p.period)

初始化代码:

    def __init__(self):
        # Before super to ensure mixins (right-hand side in subclassing)
        # can see the assignment operation and operate on the line
        self.lines[0] = Average(self.data, period=self.p.period)

        super(MovingAverageSimple, self).__init__()

再看一下sma的长度:

print(self.sma1.buflen(),self.sma2.buflen(),self.data.close.buflen())

结果:

1217 1217 1217

参考Backtrader的数据类型说明

理解: data和sma 都是 一样的长度,实际上data是pandas的dataframe ,只不过data.close是索引为日期的dataframe ,而sma是索引为数字的dataframe 。都是在Backtrader中被重写定义了新的数据类型。
但是两者之间的数据关系,是一一对应的。
在next()中,数据的日期和sma数据是对应的。

print(self.data0.datetime.date(),self.sma1[0],self.signal[0])     

结果:

2016-02-19 23.8685 0.0

理解:
data0 :数据源0
self.data0.datetime.date():当前数据的索引datetime的值
sma1[0] :sma1当前的数据值
在next()执行过程中,同步移动。

(2)signal

在init中直接生成操作信号标志:

        # indicator signal 
        self.signal = btind.CrossOver(self.sma2,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值