Backtrader-系列教程-02-环境配置
共 5793字,需浏览 12分钟
·
2021-10-02 19:19
Backtrader 环境配置
环境配置介绍
环境说明
依赖工具版本
手把手进行环境配置
操作系统的安装
Anaconda 的安装
Python 的安装
依赖库的安装
PyCharm 的安装
测试工程及环境
总结
教程小结
第三方库可视化结果展示
环境配置介绍
环境说明
Backtrader 是 Daniel Rodriguez 在 2015 年 1 月 10 发布在其 GitHub(https://github.com/mementum/backtrader) 上的一个开源项目。根据其发布的时间来看,当时主流的 Python 版本应该是 Pyhton 2,所以我们在看 Backtrader 代码的时候有很多特性是为了兼容 Python 2 而编写的。然后随着 Python 的不断迭代更新,截止目前撰文为止,最新的 Python 稳定版本是 Python 3.9.7,里面增加了很多新的特性。本次 Backtrader 的系列教程会使用 Python 3.9.7 来撰写,如果各位小伙伴有使用 Python 2(已经在 20200101正式停止维护)的,请尽快转入 Python 3 来使用。此处先列出需要使用的语言及库的相应版本,以方便大家统一环境配置,有利用尽快解决遇到的各种问题。
依赖工具版本
相应工具 | 版本号 | 下载链接 |
---|---|---|
Windows10 64 位 | 21H1 | https://msdn.itellyou.cn/ |
Aanconda3 64 位 | 2021.05 | https://repo.anaconda.com/archive/Anaconda3-2021.05-Windows-x86_64.exe |
Python3 | 3.9.7 | https://www.python.org/ftp/python/3.9.7/python-3.9.7-amd64.exe |
PyCharm | 2021.2.2 | https://www.jetbrains.com/pycharm/download/ |
Matplotlib | 3.2.2 | https://github.com/matplotlib/matplotlib |
Backtrader | 1.9.76.123 | https://github.com/mementum/backtrader |
AKShare | 1.1.51 | https://github.com/akfamily/akshare |
Backtrader_plotting | 2.0.0 | https://github.com/verybadsoldier/backtrader_plotting |
Pyfolio | 源码安装 | https://github.com/quantopian/pyfolio/ |
QuantStats | 0.0.36 | https://github.com/ranaroussi/quantstats |
严格安装上述的参数来配置本地环境,可以较快速的实现第一个测试策略,如果遇到问题,欢迎在知识星球《数据科学家》里面提问,一起解决问题。如果对环境配置比较陌生的小伙伴,可以在《数据科学家》看 Backtrader 的视频安装直播课,手把手完成环境配置。
手把手进行环境配置
操作系统的安装
本次 Backtrader 的系列教程会在 Windows 10 系统中进行撰写,如果您是 Mac 用户,可以创建虚拟机,其中 Windows 的镜像可以在 MSDN 的镜像站进行下载。由于兼容 AKShare 的需要,请确认您安装的操作系统的版本是 64 位。您可以打开 Windows 的命令提示符工具,在里面输入 systeminfo
,查看 系统类型
项目是x64
开头则是 64 位的 Windows 10,否则请重新安装正确的系统版本。如下图所示:
关于操作系统的具体安装过程这里不再赘述,请参考相关的安装文档!
Anaconda 的安装
首先要说明的是 Backtrader 和 AKShare 的安装和使用本身只需要有 Python 及相应软件就可以了,并不需要安装 Anaconda。此处推荐安装 Anaconda 是因为部分入门的小伙伴对环境配置不熟悉,通过安装 Anaconda 可以比较方便的解决环境配置的问题,此外 Anaconda 里面自带的 conda,可以用来管理我们的虚拟环境。如果觉得 Anaconda 安装包过于庞大,也可以安装 Miniconda 来简化。此处我们安装 Anaconda 主要解决的问题是需要一个 conda 的虚拟环境管理工具,所以无论是安装 Anaconda 或者 Miniconda 都可以满足我们的需求。下面以 Anaconda3 的安装为例子。
Anaconda 下载
各位小伙伴可以在 Anaconda 的官网下载相应的 64 位版本,但是由于官网提供的服务器在国外,下载速度较慢。这里推荐在清华大学提供的 Anaconda 镜像站下载相对应的 Anaconda3-2021.05-Windows-x86_64.exe
来安装,具体下载地址为:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/。下载到本地后,双击打开。
Anaconda 安装
点击 next
,然后
点击 I Agree
,然后
点击 Next
,然后
此处需要注意的是修改路径为 c:\anaconda3
,此处修改路径仅仅是为了后期方便查找相应的环境。点击 Next
,然后
此处勾选 Add Anaconda3 to my PATH environment variable
,配置系统的环境变量,方便调用相关的程序。点击 Install
,等安装完成就可以!
Anaconda 测试
安装完成后,需要首先测试下是否安装成功,可以打开 开始菜单
,搜索 anaconda
打开 Anaconda Prompt
后输入 python
如果可以成功进入到 Python 环境,则表示 Anaconda 安装成功。
Python 的安装
我们安装的 Anaconda 后,默认安装版本是 3.8.8,我们可以在 Anaconda Prompt
中输入 python
,后查看 Python 版本。但是根据我们此次的需求我们需要安装 Python 3.9.7,为了解决这个问题,此处我们采用创建虚拟环境的方式来管理不同的项目。
创建虚拟环境
可以打开 开始菜单
,搜索 anaconda
打开 Anaconda Prompt
,输入命令:conda create -n bt_tutotial python=3.9.7
在后面的提示符中输入 y
后,按回车键,
如果现实如上图所示 done
,我们就成功安装好了虚拟环境,进入我们创建的虚拟环境开始安装我们需要的库!
测试虚拟环境
下面通过 conda activate bt_tutorial
发现可以成功进入我们的虚拟环境
在虚拟环境中输入 python
发现显示的 Python 版本为 3.9.7
,我们已经成功安装 Python 的虚拟环境并且成功运行我们指定的 Python 版本。此后我们需要的 Python 及其依赖都会在改虚拟环境中进行。
依赖库的安装
本次我们需要安装的依赖库主要是 backtrader
和 akshare
,其中由于 backtrader
的问题,需要先安装指定版本的 matplotlib
,以免后期报错。此处为了加速相应库的安装,我们可以配置 pypi
在国内的镜像,此处推荐配置 pypi 的清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/,具体的配置方式可以打开镜像源的网址查看。
matplotlib 安装
在我们创建好的虚拟环境中输入 pip install matplotlib==3.2.2
,安回车键后,发现 Successfully installed
就说明成功安装 matplotlib
安装 backtrader 和 akshare
在我们创建好的虚拟环境中输入 pip install backtrader akshare
,一行命令就可以同时把 Backtrader 和 AKShare 安装到我们的虚拟环境中。
测试依赖库
在我们创建好的虚拟环境中输入 python
,进入相对应的 Python 虚拟环境,通过引入 akshare 和 backtrader 模块,调用 xx.__version__
属性来查看我们安装的依赖库的版本,其中依赖库需要注意是否已经安装最新版本,否则可能导致新加入的函数无法调用!
PyCharm 的安装
此处推荐使用 PyCharm 作为编写代码的 IDE,有条件的小伙伴可以使用专业版的 PyCharm,社区版的 PyCharm 也可以。此外也可以使用 Visual Studio Code。此处我们以专业版的 PyCharm 为例,因为 PyCharm 是一款专业的 IDE,对于程序的编辑,调试和源码查看都比较便利!
PyCharm 下载
先从 PyCharm 官网 https://www.jetbrains.com/pycharm/ 下载专业版或者社区版的 PyCharm,此处以专业版为例,下载后双击打开安装文件。
PyCharm 安装
点击 Next
点击 Next
此处勾选所有的选项,然后点击 Next
点击 Install
,完成安装即可
PyCharm 测试
双击打开安装好的 PyCharm,创建一个新的工程,File
-> New Project
,
打开工程文件创建选项卡,在 Location
中输入本次的工程名称为:bt_tutorial
,点击 Previously configured interpreter
点击 ...
,进入选项卡 Add Python Interpreter
中,继续点击 ...
在 c:\Anaconda3\env
路径中选择 bt_tutorial
文件夹下的 python.exe
然后点击 OK
,返回到页面
点击 Create
就创建好了我们需要的工程并配置好了我们需要虚拟环境!
测试工程及环境
创建工程中的文件
我们在右键单击创建好的工程文件夹,创建一个名为 bt_test
的 Python 文件
输入文件名并按回车键就可以创建好我们需要的 Python 文件
编写策略代码
在右侧界面就可以编辑我们需要的代码,此处我们测试在 AKShare 文档:https://www.akshare.xyz/demo.html#id4 中提供的代码,可以在上面下载
from datetime import datetime
import backtrader as bt # 升级到最新版
import matplotlib.pyplot as plt # 由于 Backtrader 的问题,此处要求 pip install matplotlib==3.2.2
import akshare as ak # 升级到最新版
import pandas as pd
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 利用 AKShare 获取股票的后复权数据,这里只获取前 6 列
stock_hfq_df = ak.stock_zh_a_hist(symbol="000001", adjust="hfq").iloc[:, :6]
# 处理字段命名,以符合 Backtrader 的要求
stock_hfq_df.columns = [
'date',
'open',
'close',
'high',
'low',
'volume',
]
# 把 date 作为日期索引,以符合 Backtrader 的要求
stock_hfq_df.index = pd.to_datetime(stock_hfq_df['date'])
class MyStrategy(bt.Strategy):
"""
主策略程序
"""
params = (("maperiod", 20),) # 全局设定交易策略的参数
def __init__(self):
"""
初始化函数
"""
self.data_close = self.datas[0].close # 指定价格序列
# 初始化交易指令、买卖价格和手续费
self.order = None
self.buy_price = None
self.buy_comm = None
# 添加移动均线指标
self.sma = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.maperiod
)
def next(self):
"""
执行逻辑
"""
if self.order: # 检查是否有指令等待执行,
return
# 检查是否持仓
if not self.position: # 没有持仓
if self.data_close[0] > self.sma[0]: # 执行买入条件判断:收盘价格上涨突破20日均线
self.order = self.buy(size=100) # 执行买入
else:
if self.data_close[0] < self.sma[0]: # 执行卖出条件判断:收盘价格跌破20日均线
self.order = self.sell(size=100) # 执行卖出
cerebro = bt.Cerebro() # 初始化回测系统
start_date = datetime(1991, 4, 3) # 回测开始时间
end_date = datetime(2020, 6, 16) # 回测结束时间
data = bt.feeds.PandasData(dataname=stock_hfq_df, fromdate=start_date, todate=end_date) # 加载数据
cerebro.adddata(data) # 将数据传入回测系统
cerebro.addstrategy(MyStrategy) # 将交易策略加载到回测系统中
start_cash = 1000000
cerebro.broker.setcash(start_cash) # 设置初始资本为 100000
cerebro.broker.setcommission(commission=0.002) # 设置交易手续费为 0.2%
cerebro.run() # 运行回测系统
port_value = cerebro.broker.getvalue() # 获取回测结束后的总资金
pnl = port_value - start_cash # 盈亏统计
print(f"初始资金: {start_cash}\n回测期间:{start_date.strftime('%Y%m%d')}:{end_date.strftime('%Y%m%d')}")
print(f"总资金: {round(port_value, 2)}")
print(f"净收益: {round(pnl, 2)}")
cerebro.plot(style='candlestick') # 画图
运行策略代码
在代码块中,右键单击
选择 Run bt_test
,就可以运行策略文件,运行后我们在输出控制台可以看到一些我需要的输出信息
查看输出信息
可视化策略结果
同时,Backtrader 也为利用内置的绘制功能,绘制可视化的策略结果图
总结
教程小结
本次教程主要从 Backtrader 的环境配置入手,介绍了如何在本地搭建合适的策略编写环境,并通过引入虚拟环境,来为不同的策略引入不同版本的 Python 和相应的依赖库,此方法有利于各位小伙伴以后利用不同的工具来编写自己的策略。由于图文的形式并不能够很形象的描述整个配置过程,后续会在知识星球《数据科学家》中以视频直播的形式为大家演示如何搭建合适的编程环境。
上述过程我们已经安装了必要的依赖库,但是还有一些第三方库可以帮我们在 Backtrader 原来的功能基础上,更好的对策略的结果进行分析及可视化。比如 backtrader_plotting
、pyfolio
、quantstats
等,这部分内容我们会在后续的文章及视频中讲解,尤其是 pyfolio
直接通过 pip
来安装会出错,我们需要通过源码来安装。
第三方库可视化结果展示
此处展示通过调用 backtrader_plotting
、pyfolio
、quantstats
等第三方库,我们可以计算更多的指标和获取更多的可视化图形!