前面推荐了这么多工具——AKShare 拿数据、ta/TA-Lib 算指标、Zipline/Lean 回测策略、PyPortfolioOpt 优化仓位……
但回测完了,怎么判断策略到底好不好?
光看一个收益率数字远远不够。你需要:最大回撤多大?夏普比率多少?跑赢大盘了吗?在哪些月份亏了?
今天这个工具,一行代码帮你生成 30+ 张专业图表 + 完整分析报告。
项目地址:https://github.com/ranaroussi/quantstats[1]
⭐ 6,900+ Stars | Python | MIT 许可证 | 持续更新
它是什么?
QuantStats = 投资组合分析报告生成器。
给它一组收益率数据,它自动帮你:
你之前的工具:
Zipline / Lean → 回测策略,得到收益率序列
Backtesting.py → 回测策略,得到收益率序列
QuantStats:
收益率序列 → 一行代码 → 30+ 张图 + 完整报告
回测是做实验,QuantStats 是写实验报告。
快速上手
安装
pip install quantstats
一行生成报告
import quantstats as qs
# 下载苹果的历史数据
stock = qs.utils.download_returns('AAPL')
# 一行生成完整 HTML 报告(对标标普 500)
qs.reports.html(stock, "SPY", output="aapl_report.html")
就这 3 行。 打开 aapl_report.html,你会看到一份包含 30+ 张图表的专业分析报告。
报告里有什么?
1. 核心指标
# 不想生成 HTML?直接打印指标
qs.reports.metrics(stock, "SPY")
输出:
Strategy Benchmark
------------------------- ---------- ----------
Start Period 2015-01-02 2015-01-02
End Period 2026-04-01 2026-04-01
Cumulative Return 312.48% 198.65%
CAGR﹪ 14.23% 10.54%
Sharpe 0.89 0.72
Max Drawdown -39.72% -33.92%
Volatility (ann.) 30.21% 18.95%
Calmar 0.36 0.31
Best Day 11.98% 9.38%
Worst Day -12.86% -10.94%
Best Month 24.15% 12.82%
Worst Month -18.41% -12.35%
Win Rate 52.8% 54.1%
Avg Win 1.82% 1.12%
Avg Loss -1.73% -1.15%
以上为示例格式,实际数据取决于分析的股票和时间段。
2. 30+ 张图表
| |
|---|
| 累计收益曲线 | |
| 年度收益对比 | |
| 月度热力图 | |
| 回撤图 | |
| 日收益分布 | |
| 滚动夏普比率 | |
| 滚动波动率 | |
| 收益对比散点图 | |
| 最差 5 次回撤 | |
| 持仓期分析 | |
这些图表在专业基金的季报里都有——现在你一行代码就能生成。
实战:分析 A 股投资组合
场景 1:分析单只股票
import quantstats as qs
import akshare as ak
import pandas as pd
# 获取茅台数据
df = ak.stock_zh_a_hist(symbol="600519", period="daily",
start_date="20200101", end_date="20260401")
df.index = pd.to_datetime(df['日期'])
# 计算日收益率
returns = df['收盘'].pct_change().dropna()
# 生成报告
qs.reports.html(returns, output="maotai_report.html",
title="茅台投资分析报告")
print("报告已生成:maotai_report.html")
场景 2:分析你的投资组合
import quantstats as qs
import akshare as ak
import pandas as pd
import numpy as np
# 你的持仓
portfolio = {
"600519": 0.3, # 茅台 30%
"002594": 0.25, # 比亚迪 25%
"300750": 0.2, # 宁德时代 20%
"600036": 0.15, # 招商银行 15%
"000858": 0.1, # 五粮液 10%
}
# 获取每只股票的日收益率
all_returns = pd.DataFrame()
for code, weight in portfolio.items():
df = ak.stock_zh_a_hist(symbol=code, period="daily",
start_date="20240101", end_date="20260401")
df.index = pd.to_datetime(df['日期'])
all_returns[code] = df['收盘'].pct_change()
# 按权重计算组合收益率
weights = pd.Series(portfolio)
portfolio_returns = (all_returns * weights).sum(axis=1).dropna()
# 获取沪深300作为基准
hs300 = ak.index_zh_a_hist(symbol="000300", period="daily",
start_date="20240101", end_date="20260401")
hs300.index = pd.to_datetime(hs300['日期'])
benchmark = hs300['收盘'].pct_change().dropna()
# 生成对比报告
qs.reports.html(portfolio_returns, benchmark,
output="my_portfolio_report.html",
title="我的投资组合 vs 沪深300")
print("组合分析报告已生成!")
打开报告,你就能看到你的组合有没有跑赢沪深 300。
场景 3:配合回测工具使用
import quantstats as qs
import pandas as pd
# 假设你用 Zipline / Backtesting.py 回测完了
# 得到了一个 results DataFrame
# 从回测结果提取日收益率
results = pd.read_pickle('backtest_results.pickle')
strategy_returns = results['returns']
# 用 QuantStats 生成专业报告
qs.reports.html(strategy_returns, "SPY",
output="strategy_report.html",
title="双均线策略分析报告")
Zipline 回测 + QuantStats 报告 = 完整的策略评估流程。
三种输出方式
方式 1:完整 HTML 报告
qs.reports.html(returns, "SPY", output="report.html")
# 打开浏览器看一份完整的分析报告
方式 2:快速打印指标
qs.reports.metrics(returns, "SPY", display=True)
# 终端里直接看数字
方式 3:单独看某张图
# 只看累计收益
qs.plots.returns(returns, "SPY")
# 只看月度热力图
qs.plots.monthly_heatmap(returns)
# 只看回撤
qs.plots.drawdown(returns)
# 只看年度收益柱状图
qs.plots.yearly_returns(returns, "SPY")
# 只看滚动夏普
qs.plots.rolling_sharpe(returns)
它算了哪些指标?
一共 30+ 个指标,覆盖了专业投资分析的所有维度。
和系列其他工具的关系
完整量化投资流程(最终版):
1. 数据获取
AKShare / yfinance
2. 技术分析
ta / TA-Lib + mplfinance
3. 财务分析
FinanceToolkit
4. AI 分析
Qlib / AI Hedge Fund / FinRL
5. 策略回测
Zipline / Backtesting.py / Lean
6. 仓位优化
PyPortfolioOpt
7. 报告分析 ← QuantStats 在这里
QuantStats(一行生成专业报告)
8. 实盘交易
vnpy / Lean
QuantStats 是回测之后、实盘之前的关键一步——帮你判断策略值不值得上实盘。
和其他分析工具的区别
一句话:QuantStats 是目前最好用的 Python 投资分析报告工具。
PyFolio 已经停更了,QuantStats 是它的最佳替代。
局限性
| |
|---|
| 只做分析不做回测 | |
| 默认只支持美股数据下载 | |
| 基准对比有限 | 内置基准以美股 ETF 为主,A 股基准需自己准备 |
| 静态报告 | |
| 大数据量时图表较多 | |
建议用法
✅ 每次回测完都用 QuantStats 生成报告
✅ 定期分析你的投资组合表现
✅ 用 HTML 报告和朋友/团队分享分析结果
✅ 关注夏普比率 > 1、最大回撤 < 20% 的策略
❌ 不要只看收益率——回撤和夏普更重要
❌ 不要忽视滚动指标——策略可能前半段好后半段差
小结
QuantStats:
- 6,900+ Star,投资组合分析报告生成器
- 一行代码生成 30+ 张专业图表
- 计算 30+ 个风险收益指标
- 输出完整 HTML 报告(基金季报级别)
- 支持 vs 基准对比(标普500、沪深300…)
- 配合 Zipline/Lean/Backtesting.py 使用
- PyFolio 的最佳替代品
定位:回测之后的"质检报告"——帮你判断策略值不值得上实盘
⚠️ 免责声明:QuantStats 是投资分析工具,不构成投资建议。分析报告基于历史数据,过去的表现不代表未来收益。投资有风险,入市需谨慎。
回测做完了,报告也生成了——如果策略的夏普比率 > 1、最大回撤可控,那恭喜你,可以考虑小资金试试实盘了。
如果你是从头看到这里的读者,这个系列已经从数据获取一路讲到了策略评估——30+ 个工具,覆盖了散户量化投资的每一个环节。
明天介绍国产量化的另一座大山——QUANTAXIS:1 万 Star,Docker 一键部署,从数据到实盘全包了,堪称"把整个量化研究所搬到电脑上"
#QuantStats #投资分析 #回测报告 #夏普比率 #Python #量化 #开源 #GitHub