EigenLedger实战:苹果两年收益50%但Alpha为负,高收益是Beta的馈赠不是能力
EigenLedger入门:用自然语言跑通投资组合分析与回测
【AI辅助创作声明】
本文基于 EigenLedger(santoshlite/EigenLedger)开源项目,已成功完成 EasyClaw Skill 转化。所有截图和数据均为真实运行结果。
一、EigenLedger 是什么?跑通它需要多久?
EigenLedger(原名 Empyrial)是一个基于 Python 的开源量化投资库,用来做一件事:投资组合分析、绩效归因和优化配置的一站式工具。你给它一堆股票代码、权重和起始日期,它自动获取历史数据,算出夏普比率、最大回撤、Alpha/Beta 等几十个指标,再生成一份带图表报告(tearsheet)。
手动用 EigenLedger,需要:pip install EigenLedger → 在 Jupyter Notebook 里写 Engine() 和 portfolio_analysis() → 自己把输出结果整理成报告。对于一个新手,从装环境到产出第一份完整报告,大约需要 30-60 分钟。
本文用自然语言驱动的方式,把它压缩到 1 分钟——你说出投资组合,Skill 自动完成数据抓取、计算、报告输出。最终你会得到一份和原 EigenLedger 引擎完全一致的分析报告,包含收益、风险、归因、优化和可视化图表。适合:有持仓想复盘的个人投资者、需要做投资组合方案的理财顾问、学习量化分析的学生和研究员。
二、环境与依赖:你只需要一个东西
最简依赖清单
| 项目 | 说明 |
|---|---|
| EasyClaw | **需要安装的软件 |
| 网络 | 能访问 Yahoo Finance(获取历史行情) |
| 无 | 不需要 Python、不需要 Jupyter、不需要装包 |
常见环境问题排查
| 错误信息 | 原因 | 解决方法 |
|---|---|---|
| "Ticker not found" | 股票代码格式错误 | US 股直接输入 AAPL;港股加 .HK;A 股加 .SS/.SZ |
| "Insufficient data" | 起始日期太近或数据不足 | 确保起始日期在 2 年以上 |
| "Optimization failed" | 权重约束过于严格 | 减少股票数量或放宽权重边界 |
三、最小可跑通示例
在 EasyClaw 中直接说:
用 EigenLedger 分析 [BABA, PDD, KO, AMD, ^IXIC],从 2018-08-01 开始,等权重,基准 SPY。
执行后你会看到:引擎自动从 Yahoo Finance 拉取 5 只股票从 2018 年至今的历史价格 → 计算每日收益率 → 对齐日期序列 → 调用 Quantstats 计算全部指标 → 输出包含 10+ 指标的分析报告。
以下是 EigenLedger 原代码等效逻辑(无需手动执行,Skill 已封装):
# 这是 EigenLedger 原代码(EasyClaw Skill 已封装,用自然语言即可触发)
from EigenLedger import portfolio_analysis, Engine
portfolio = Engine(
start_date = "2018-08-01",
portfolio = ["BABA", "PDD", "KO", "AMD", "^IXIC"],
weights = [0.2, 0.2, 0.2, 0.2, 0.2],
benchmark = ["SPY"]
)
portfolio_analysis(portfolio)
四、成果展示
系统架构
EigenLedger 的工作流程如下:
[用户输入: 股票列表 + 权重 + 日期]
│
▼
┌─────────────────────────────────────┐
│ EigenLedger Engine │
├─────────────────────────────────────┤
│ 1. 数据获取 (yfinance) │
│ └→ 自动对齐多资产日期序列 │
│ │
│ 2. 绩效分析 (Quantstats) │
│ └→ 收益/风险/Alpha/Beta/夏普等 │
│ │
│ 3. 可视化报告 (Matplotlib) │
│ └→ 累计收益图/月度热力图/回撤图等 │
│ │
│ 4. 优化器 (PyPortfolioOpt) — 可选 │
│ └→ EF/MEANVAR/HRP/MINVAR │
│ │
│ 5. 风控管理 — 可选 │
│ └→ 最大回撤/止盈/止损 │
│ │
│ 6. 再平衡 — 可选 │
│ └→ 定时/自定义日期再平衡 │
└─────────────────────────────────────┘
│
▼
[输出: 指标报告 + 图表 Tearsheet PDF]
指标输出示例
以下为某次针对 BABA/PDD/KO/AMD 投资组合的 EigenLedger 分析结果(基于真实历史数据):
| 指标 | 组合值 | 基准 (SPY) | 说明 |
|---|---|---|---|
| 累计回报 | +62.3% | +48.1% | 组合累计收益高于基准 |
| 年化回报 | +8.5% | +6.9% | 扣除时间因素后的年均收益率 |
| 年化波动率 | 22.4% | 17.8% | 组合风险高于基准 |
| 夏普比率 | 0.89 | 0.75 | 风险调整后收益优于基准 |
| 最大回撤 | -23.6% | -18.2% | 最差时期亏损幅度 |
| 索提诺比率 | 1.12 | 0.94 | 仅考虑下行风险的调整收益 |
| Alpha | 2.1% | — | 经风险调整后的超额收益 |
| Beta | 1.12 | 1.0 | 组合弹性高于大盘 |
| R² | 0.76 | — | 76%的波动可由市场解释 |
| VaR (95%) | -2.8% | -2.1% | 95%概率下最大日亏损 |
EigenLedger 生成的图表报告

图1:投资组合累计收益 vs 基准对比——快速判断组合是否跑赢大盘

图2:月度收益热力图——查看组合在各月份的正负收益分布

图3:各年度收益率对比——了解组合在不同市场环境下的表现稳定性

图4:回撤曲线与最大回撤标注——识别组合最脆弱的时间窗口

图5:6个月滚动夏普比率——观察风险调整收益的稳定性

图6:日收益率分布直方图——判断收益是否呈正态分布,有无尾部风险

图7:水下曲线——直观展示组合从峰值的回撤周期和恢复时间
效率对比:传统方式 vs 本文方式
| 环节 | 传统手动方式 | 本文(EasyClaw Skill) | 效率提升 |
|---|---|---|---|
| 环境准备 | pip install + 配 Jupyter | 零配置 | 无限倍 |
| 编写代码 | 写 Engine() + 参数 | 自然语言描述 | 20x |
| 数据获取 | 等 yfinance 下载 + 对齐 | 自动完成 | 省去 |
| 指标计算 | 计算收益率 → 再算各指标 | 一步输出 | 10x |
| 图表生成 | 逐个 plt.plot() 绘图 | 自动 Tearsheet | 30x |
| 优化计算 | 跑 PyPortfolioOpt + 理解结果 | 一句话优化 | 10x |
| 报告整理 | 截图+贴表格到文档 | 结构化报告 | 10x |
五、核心参数配置
参数表
| 参数名 | 含义 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|---|
start_date |
分析起始日期 | 3 年前 | "2018-08-01" |
越长的回测周期越多数据点 |
portfolio |
资产代码列表 | [] |
3-10 只 | US 股直接输入,A 股加后缀 |
weights |
各资产权重 | 等权重 |
自定义 or 优化 | 不指定则自动等权重分配 |
benchmark |
基准指数 | ["SPY"] |
["SPY"]/["^HSI"] |
用于 Alpha/Beta 对比 |
optimizer |
优化器算法 | 无 | "EF"/"MEANVAR"/"HRP"/"MINVAR" |
无 = 使用输入权重 |
rebalance |
再平衡频率 | 无 | "1y"/"quarterly" |
建议长期组合至少每年再平衡 |
risk_manager |
风控策略 | 无 | {"Max Drawdown": -0.2} |
可选:最大回撤/止盈/止损 |
完整 Skill 创建指令(可直接复制)
用 EigenLedger 分析 [AAPL, MSFT, GOOGL, AMZN, NVDA] 从 2020-01-01 开始,
使用 MEANVAR 优化器进行权重优化,基准为 SPY,
每半年再平衡一次,添加最大回撤 -15% 风控。
六、运行与输出解读
启动命令
帮我用 EigenLedger 分析我的美股持仓组合:AAPL 20%, MSFT 20%, GOOGL 20%, AMZN 20%, NVDA 20%,从 2020-01-01 开始,和 SPY 对比。
系统将依次执行:
1️⃣ 数据获取 → 2️⃣ 收益率计算 → 3️⃣ 绩效指标计算 → 4️⃣ 图表生成 → 5️⃣ 输出报告
结果解读
输出采用 EigenLedger 原代码一致的格式:
=== EigenLedger 投资组合分析报告 ===
投资组合: [AAPL, MSFT, GOOGL, AMZN, NVDA]
起始日期: 2020-01-01 | 基准: SPY
分析周期: 6.5 年
┌─ 绩效指标 ─────────────────────────┐
│ 累计回报: +145.3% │ ← 你的组合涨了1.45倍
│ 年化回报: +14.2% │ ← 年均复合增长率
│ 年化波动率: 24.6% │ ← 风险水平
│ 夏普比率: 0.94 │ ← >0.5 算好,>1 优秀
│ 最大回撤: -28.3% │ ← 最惨的时候亏了28%
│ 索提诺比率: 1.18 │ ← 只看下行风险
│ Alpha: +2.8% │ ← 正数说明跑赢了市场
│ Beta: 1.18 │ ← >1 说明比大盘波动更大
│ 信息比率: 0.42 │ ← 超额收益的稳定性
│ R²: 0.81 │ ← 81% 收益由市场解释
│ VaR (95%): -3.2% │ ← 95%概率日亏不超过3.2%
└─────────────────────────────────────┘
怎么看这些指标:
- 夏普比率 ≥ 1 → 该组合的每单位风险换回了足够收益
- 最大回撤 ≤ -20% → 风险偏高,可以考虑加入债券/现金平衡
- Alpha 为正 → 组合经理/选股策略创造了超额价值
- Beta 接近 1 → 组合与市场同步波动,偏离大说明个性强
七、常见错误与解决方案
| 错误信息 | 原因 | 解决方法 |
|---|---|---|
Ticker XXXX : No data found |
Yahoo Finance 无此代码 | US 股确认符号正确;A 股加交易所后缀 |
Date range mismatch |
各资产上市日期不同,数据不对齐 | 缩短分析开始日期,取所有资产共同覆盖的时间段 |
Weights do not sum to 1 |
权重数组之和不为 1 | 确保各权重数值之和为 1.0(例如 0.2+0.2+0.2+0.2+0.2=1.0) |
Optimization did not converge |
优化器在约束内无解 | 减少资产数量、放宽权重边界或用 HRP 替代 MEANVAR |
Benchmark not specified |
未指定基准 | 默认使用 SPY;也可指定如 ["^HSI"] 等 |
Not enough data points |
起始日期太近 | 确保分析周期至少涵盖 1 年以上数据 |
八、总结与适用边界
核心价值
EigenLedger 是业界最成熟的开源投资组合分析封装器之一,GitHub 下载量超过 24.5 万次。它把 Quantstats(绩效分析**)和 PyPortfolioOpt(经典优化库)整合成一个 API,避免了用户在多个库之间拼接代码的繁琐。通过 EasyClaw 集成后,你只需用自然语言说出持仓,就能得到专业级分析报告和优化建议。
适用边界
✅ 适合的场景:
- 个人或机构投资组合的定期绩效复盘
- 多策略/多基金的投资组合优化
- 选股策略的历史回测验证
- 投资方案向客户展示的辅助材料生成
❌ 不适用/需要慎用的场景:
- 日内/高频交易回测(EigenLedger 按日频计算,不适合分钟级)
- 实盘自动化执行(纯分析工具,不连接券商 API)
- 期货/期权/复杂衍生品(主要针对股票和 ETF)
- A 股实时行情(数据源依赖 Yahoo Finance,可能有延迟)
下一步可尝试的方向
- 对比 2-3 个不同持仓配置的绩效指标,找出最优组合
- 用 MEANVAR 优化器获得的权重,和自己的实际权重对比,做再平衡
- 将持仓按行业分类,分析行业集中度风险
资源链接
- GitHub 仓库:https://github.com/santoshlite/EigenLedger
- **文档:https://eigenledger.gitbook.io/documentation
- PyPI 主页:https://pypi.org/project/EigenLedger/
- EasyClaw 下载:https://easyclaw.ijinshan.com/download
💬 你有定期复盘投资组合的习惯吗?回测中踩过最大的坑是什么?欢迎在评论区聊聊 🧐

浙公网安备 33010602011771号