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 组合弹性高于大盘
0.76 76%的波动可由市场解释
VaR (95%) -2.8% -2.1% 95%概率下最大日亏损

EigenLedger 生成的图表报告

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

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

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

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

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

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

水下曲线(Underwater Plot)
图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,可能有延迟)

下一步可尝试的方向

  1. 对比 2-3 个不同持仓配置的绩效指标,找出最优组合
  2. 用 MEANVAR 优化器获得的权重,和自己的实际权重对比,做再平衡
  3. 将持仓按行业分类,分析行业集中度风险

资源链接


💬 你有定期复盘投资组合的习惯吗?回测中踩过最大的坑是什么?欢迎在评论区聊聊 🧐

posted @ 2026-07-28 15:46  PC修复电脑医生  阅读(5)  评论(0)    收藏  举报