当前位置:首页>python>6.9K Star!用 Python 一行生成专业级投资组合分析报告

6.9K Star!用 Python 一行生成专业级投资组合分析报告

  • 2026-10-11 08:38:01
6.9K Star!用 Python 一行生成专业级投资组合分析报告

前面推荐了这么多工具——AKShare 拿数据、ta/TA-Lib 算指标、Zipline/Lean 回测策略、PyPortfolioOpt 优化仓位……

但回测完了,怎么判断策略到底好不好?

光看一个收益率数字远远不够。你需要:最大回撤多大?夏普比率多少?跑赢大盘了吗?在哪些月份亏了?

今天这个工具,一行代码帮你生成 30+ 张专业图表 + 完整分析报告。

项目地址:https://github.com/ranaroussi/quantstats[1]

⭐ 6,900+ Stars | Python | MIT 许可证 | 持续更新


它是什么?

QuantStats = 投资组合分析报告生成器。

给它一组收益率数据,它自动帮你:

  1. 计算 30+ 个风险收益指标
  2. 生成 30+ 张专业图表
  3. 输出完整的 HTML 报告(像基金季报一样)
  4. 和基准(比如沪深 300、标普 500)对比
你之前的工具:
  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+ 张图表

图表类型
说明
累计收益曲线
你的策略 vs 基准,一目了然
年度收益对比
每年赚了多少,柱状图对比
月度热力图
哪些月份赚、哪些月份亏
回撤图
每次回撤的深度和时长
日收益分布
收益率的分布直方图
滚动夏普比率
策略的稳定性随时间变化
滚动波动率
风险随时间怎么变
收益对比散点图
策略 vs 基准的日收益散点
最差 5 次回撤
最大的 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)

它算了哪些指标?

类别
指标
说明
收益
CAGR、总收益、年化收益
赚了多少
风险
波动率、最大回撤、VaR、CVaR
风险有多大
效率
夏普比率、Sortino、Calmar
收益/风险性价比
对比
Alpha、Beta、信息比率
对比基准表现
稳定性
胜率、盈亏比、最长回撤期
策略稳不稳
分布
偏度、峰度、正态性检验
收益分布特征

一共 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
Zipline 内置
Backtrader 内置
PyFolio
专注度
专做报告
回测附带
回测附带
专做报告
图表数
30+
5-10
5-10
20+
HTML 报告
✅ 一行生成
❌
❌
✅
独立使用
✅
❌ 需要 Zipline
❌ 需要 Backtrader
⚠️ 依赖过时
维护状态
✅ 活跃
⚠️
⚠️
❌ 已停更
安装
简单
复杂
中等
复杂
一句话:QuantStats 是目前最好用的 Python 投资分析报告工具。
PyFolio 已经停更了,QuantStats 是它的最佳替代。

局限性

局限
说明
只做分析不做回测
需要配合回测工具使用
默认只支持美股数据下载
A 股需要自己用 AKShare 获取后传入
基准对比有限
内置基准以美股 ETF 为主,A 股基准需自己准备
静态报告
生成的是静态 HTML,不是交互式仪表板
大数据量时图表较多
30+ 张图全生成可能需要几秒

建议用法

✅ 每次回测完都用 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

最新文章

随机文章