本快速开始指南将通过示例逐步展示如何从一个简单的脚本发展为一个完整的交易系统。在此基础上,系统还可以绘制回测结果和优化。
注意: 快速入门指南中使用的数据文件会不定期更新,这意味着调整后的收盘价会发生变化,其他组件也会随之改变。因此,实际输出可能与文档编写时的内容有所不同。
在开始具体示例之前,我们要先了解两个概念:线(Lines)和索引0。
线(Lines) #
在backtrader中,数据源、指标和策略都由“线”(Lines)组成。
一条线(Line)由一系列点组成,这些点连在一起形成了一条线。在市场分析中,一个数据源通常每天包含以下几个点:
- 开盘价 (Open)
- 最高价 (High)
- 最低价 (Low)
- 收盘价 (Close)
- 成交量 (Volume)
- 未平仓合约 (OpenInterest)
例如,沿时间轴上的“开盘价”形成了一条线(Line)。因此,一个数据源通常包含6条线。如果再考虑“日期时间” (DateTime)(作为单个点的实际参考),就可以得到7条线(Line)。
在指标中,这些线也同样重要。例如,简单移动平均线(SMA)计算一定周期内的收盘价平均值,并将这些平均值形成一条新的线。通过使用不同的指标,我们可以生成更多的线,用于分析和决策。
索引0 #
在访问一条线中的值时,当前值使用索引0访问。而“最后”一个输出值使用索引-1访问,这与Python中的迭代器约定一致(线可以迭代,因此是一种迭代器)。在Python中,索引-1用于访问迭代器或数组中的“最后”一项。
在backtrader中,索引0表示当前时刻,索引-1表示最后一个输出值。例如,如果我们在初始化过程中创建了一个简单移动平均线(Simple Moving Average):
self.sma = SimpleMovingAverage(...)
访问当前移动平均值的最简单方法是:
av = self.sma[0]
无需知道处理了多少根K线/分钟/天/月,因为“0”唯一标识当前时刻。
按照Python的传统,使用-1访问“最后”一个输出值:
previous_value = self.sma[-1]
依此类推,较早的输出值可以使用-2、-3等索引访问。这种方式可以方便地访问过去的值,以进行比较或计算。
理解这些基本概念后,我们可以开始逐步构建从简单示例到完整策略的交易系统。接下来的部分将展示如何从一个简单的脚本逐步发展为一个功能齐全的交易系统,包括创建策略、定义指标、实现交易逻辑以及最终的回测和优化。