HSawana9

量化策略业绩报告神器开源库Quantstats

Sawana Huang Fri Apr 18 2025

量化策略的评价通常涉及夏普比率、最大回撤等等指标的计算,同时还需要我们绘制可视化图表和报告展示策略的能力。而Quantstats库提供了强大的策略业绩评价功能,用几行代码生成美观专业的策略评价报告。

量化策略的评价通常涉及夏普比率、最大回撤等等指标的计算,同时还需要我们绘制可视化图表和报告展示策略的能力。 这些工作不可或缺但分散了我们专注于策略本身的精力。 而Quantstats库提供了强大的策略业绩评价功能,用几行代码生成美观专业的策略评价报告。 希望通过这个教程能让你开始用上这个强大的开源业绩评价工具。

Quantstats

Quantstats是一个Python库,专为量化分析师和交易员设计,用于分析和可视化量化投资策略的性能。它提供了一系列的工具和函数,可以帮助用户生成各种性能指标和图表,从而对策略的表现进行深入的分析。

本文致力于让你快速启用Quantstas。

你也可以在项目的github仓库查看Quantstats的教程以及详细信息,同时了解项目的更新内容:

GitHubranaroussi/quantstats

6.2K

Quantstats提供了三个主要的功能

  1. quantstats.stats - 用于计算各种绩效指标,如夏普比率、胜率、波动性等。

  2. quantstats.plots - 用于可视化绩效、回撤、滚动统计、月度回报等。

  3. 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 股票数据文档

安装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] != '_']

方法速览

PropTypeDefault
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
-
PropTypeDefault
daily_returns?
function
-
distribution?
function
-
drawdown?
function
-
monthly_heatmap?
function
-
rolling_sharpe?
function
-
rolling_volatility?
function
-
snapshot?
function
-
yearly_returns?
function
-
PropTypeDefault
basic?
function
-
full?
function
-
html?
function
-
metrics?
function
-
plots?
function
-
作者:Sawana Huang
发布时间:2025年4月18日

声明: 本文采用CC BY-NC-SA 4.0许可协议,转载请注明出处。