量化策略业绩报告神器开源库Quantstats
Sawana Huang Fri Apr 18 2025
量化策略的评价通常涉及夏普比率、最大回撤等等指标的计算,同时还需要我们绘制可视化图表和报告展示策略的能力。而Quantstats库提供了强大的策略业绩评价功能,用几行代码生成美观专业的策略评价报告。
量化策略的评价通常涉及夏普比率、最大回撤等等指标的计算,同时还需要我们绘制可视化图表和报告展示策略的能力。 这些工作不可或缺但分散了我们专注于策略本身的精力。 而Quantstats库提供了强大的策略业绩评价功能,用几行代码生成美观专业的策略评价报告。 希望通过这个教程能让你开始用上这个强大的开源业绩评价工具。
Quantstats
Quantstats是一个Python库,专为量化分析师和交易员设计,用于分析和可视化量化投资策略的性能。它提供了一系列的工具和函数,可以帮助用户生成各种性能指标和图表,从而对策略的表现进行深入的分析。
本文致力于让你快速启用Quantstas。
你也可以在项目的github仓库查看Quantstats的教程以及详细信息,同时了解项目的更新内容:
ranaroussi/quantstats
6.2K
Quantstats提供了三个主要的功能
-
quantstats.stats
- 用于计算各种绩效指标,如夏普比率、胜率、波动性等。 -
quantstats.plots
- 用于可视化绩效、回撤、滚动统计、月度回报等。 -
quantstats.reports
- 用于生成指标报告、批量绘图以及创建可以保存为HTML文件的撕页报告。
通过本次教程,你也可以迅速绘制出下面这样的可视化报告:
1. 安装和启动
我们通常在jupyternotebook文件中运行我们的代码,你可以直接使用Anaconda中的jupyternotebook,也可以用vscode创建一个ipynb后缀的文件,如 example.ipynb
然后创建一个代码块,运行下述指令安装Quantstats仓库:
! pip install quantstats --upgrade --no-cache-dir
运行成功后,我们需要先运行一些配置:
import quantstats as qs
qs.extend_pandas() # 允许直接使用qs库的方法和函数
2. 准备收益序列
在大多数情况下,qs各方法的输入都是一份日收益率序列。它应该:
日期
作为索引,收益率
作为值列。- 是一个pandas的
series
对象。
你可以自己创建一个符合这些要求的收益率序列,例如从你的量化策略结果中提取收益率列。
在这里,我们简单地用单个股票的收益率作为我们的策略收益率,即"买入并持有"。
方法1 qs.utils.download_returns
qs为我们提供了一个快速获取单只股票日收益率的方法:
💡 不过,这个方法用到了yahofinance,你可以测试能否使用yahofinance的服务
stock = qs.utils.download_returns('META')
查看stock
stock
方法2 Akshare
也可以从其他渠道获取股票日收益率数据
我们用一个免费的交易数据获取库Akshare来获取meta股票的日收益率,那里也有其他获取交易数据的接口
安装akshare包
! pip install akshare --upgrade --no-cache-dir
运行下列代码获取 stock
import akshare as ak
import pandas as pd
stock_us_hist_df = ak.stock_us_hist(symbol='105.META', period="daily", adjust="qfq")
stock_close = stock_us_hist_df[['日期','收盘']]
stock_close['日期'] = pd.to_datetime(stock_close['日期'])
stock_close['return'] = (stock_close.iloc[:,1] - stock_close.iloc[:,1].shift(1) ) / stock_close.iloc[:,1].shift(1)
stock_close.rename(columns={'日期': 'Date'}, inplace=True)
stock_index = stock_close.set_index('Date')
stock=stock_index['return']
查看 stock
stock
3. 生成快照
通过 qs.plots.snapshot()
方法,我们可以快速查看策略的累计收益率走势、回撤以及收益率分布情况。
这是常用的plots生成图表方法之一,后面我们会讲如何尝试更多图表。
qs.plots.snapshot(stock, title='Facebook Performance', show=True)
4. 生成报告
生成报告是最令人兴奋的部分,我们只要传入"目标日收益率序列"和"业绩基准"两个参数就可以生成我们开头看到的那份可视化业绩报告。
- 收益率序列我们用刚才准备好的
stock
- 业绩基准可以传入另一个日收益率序列或者股票名称
在这里,我们可以输入标普500指数的名称"SPY"来作为业绩基准。 启动!
qs.reports.full(stock, "SPY") # full 生成所有指标和图表
更多指标和更多尝试
指标、图表、报告,这三个主要功能还有更多可以使用的内容。接下来我们来探索如何查看然后尝试这些指标。在最后,我也会给出几份表格,快速浏览所有可以使用的内容.
你可以直接按照 qs.<stats|plot|reports>.<method>(...)
的方法,使用qs库提供的各种参数
qs.
- 声明quantstats库<stats|plot|reports>.
- 我们之前提到的三大方法.<method>(...)
- 方法命令和他们的参数
前两个比较好理解,接下来我们看看如何查找可用的方法
查看所有可用方法
查看所有的 qs.stats
指标方法
[f for f in dir(qs.stats) if f[0] != '_']
查看所有的 qs.plot
图表方法
[f for f in dir(qs.plot) if f[0] != '_']
查看所有的 qs.reports
图表方法
[f for f in dir(qs.reports) if f[0] != '_']
方法速览
Prop | Type | Default |
---|---|---|
avg_loss? | function | - |
avg_return? | function | - |
avg_win? | function | - |
cagr? | function | - |
calmar? | function | - |
max_drawdown? | function | - |
sharpe? | function | - |
sortino? | function | - |
volatility? | function | - |
win_rate? | function | - |
Prop | Type | Default |
---|---|---|
daily_returns? | function | - |
distribution? | function | - |
drawdown? | function | - |
monthly_heatmap? | function | - |
rolling_sharpe? | function | - |
rolling_volatility? | function | - |
snapshot? | function | - |
yearly_returns? | function | - |
Prop | Type | Default |
---|---|---|
basic? | function | - |
full? | function | - |
html? | function | - |
metrics? | function | - |
plots? | function | - |