历史回测平台backtrader的快速上手


历史回测平台backtrader的快速上手

backtrader是目前全球范围内基于Python功能最完善的量化回测平台之一,有比较大的社区环境,所以很容易找到帮助。框架也很容易理解,对于一个回测需求,使用backtrader主要包含以下7个步骤。

  • 创立一个Cerebro,Cerebro是西班牙语大脑的意思,这一步就相当于创立一个大脑,后续把数据和策略放进大脑以后我们就可以得到分析结果。
  • 添加Data Feeds,这里是数据的输入,原始数据需要先做一些处理得到Cerebro能够读取的格式,Data Feeds可以添加pandas(PandasData)的DataFrame数据或者CSV(BackTraderCSVData)原始数据。
  • 添加策略
  • 添加其他内容,比如添加writer(addwriter),分析(addanalyzer)或者观察者(addobserver),这一步骤不是必须的。
  • 修改Broker信息,比如佣金,杠杆率等,这一步骤也不是必须的
  • 运行策略
  • 作图画出结果,以便后续修改策略和其他内容再进一步回测。

以下通过AAPL的历史数据来记录backtrader的快速上手流程。

导入所需的各种Python包

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)
import backtrader as bt
import pandas as pd
import datetime

创建一个Cerebro

cerebro = bt.Cerebro()

添加数据 data feed

这里的数据通过yfinance包从雅虎财经上获取,如何获取可以参考这里。以下通过pandas读取AAPL的历史数据。

aapl = pd.read_csv('AAPL_20211216.csv')
aapl.head()

DateOpenHighLowCloseVolume
01980-12-120.1004530.1008900.1004530.100453469033600
11980-12-150.0956490.0956490.0952130.095213175884800
21980-12-160.0886610.0886610.0882240.088224105728000
31980-12-170.0904080.0908450.0904080.09040886441600
41980-12-180.0930290.0934660.0930290.09302973449600

pandas读取上来的数据需要做一些处理,比如时间格式和整个dataframe的index设置。这里采用2009年1月1日开始到现在的天级历史数据作为data feed输入。

aapl['datetime'] = pd.to_datetime(aapl['Date'])
aapl.set_index('datetime', inplace=True)

aapl_daily = bt.feeds.PandasData(dataname = aapl,
                                fromdate = datetime.datetime(2009,1,1),
                                todate = datetime.datetime(2021,12,15))

添加Data Feed到Cerebro。

cerebro.adddata(aapl_daily)

添加策略

这里添加backtrader自带的默认空策略,仅用于展示功能。

cerebro.addstrategy(bt.Strategy)

运行回测

cerebro.run()

画出结果图

cerebro.plot(width=30, heigth=20)

Author: wenvenn
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source wenvenn !