历史回测平台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()
Date | Open | High | Low | Close | Volume | |
---|---|---|---|---|---|---|
0 | 1980-12-12 | 0.100453 | 0.100890 | 0.100453 | 0.100453 | 469033600 |
1 | 1980-12-15 | 0.095649 | 0.095649 | 0.095213 | 0.095213 | 175884800 |
2 | 1980-12-16 | 0.088661 | 0.088661 | 0.088224 | 0.088224 | 105728000 |
3 | 1980-12-17 | 0.090408 | 0.090845 | 0.090408 | 0.090408 | 86441600 |
4 | 1980-12-18 | 0.093029 | 0.093466 | 0.093029 | 0.093029 | 73449600 |
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)