国内股权存续持仓穿透
- 简介
- 仅依赖MCP数据对国内PE母基金做四层持仓穿透,自动生成多Sheet客户组合报表。
- 触发词
- 穿透持仓,组合大表,母基金穿透,估值重算,RVPI瀑布
- 分发渠道
- ARK Engine
- 功能测试
- ✅ 通过 · 业务评审:✅ 通过
- 技能包文件
- lookthroughwskill/SKILL.md
SKILL.md 全文
Frontmatter
| name | 国内股权存续持仓穿透 |
|---|---|
| description | "只依据 MCP 数据源,对歌斐/国内 PE-FOF 母基金做「FUND层→子基金→直投→底层公司」四层穿透,产出可对客户呈现的多 sheet 组合大表。当用户提到「穿透持仓」「组合大表」「截止日估值」「T日/T-1口径」「母基金/客户组合」「母基金估值重算」「按股价调整账面估值」「分配 roll-forward」「子基金间投/母基金直投」「退出计划标签分类」「按退出标签拆RVPI」「收益倍数瀑布」,或要把歌斐/国内 PE 基金穿透成 LP 大会/客户呈现用的组合表时,使用本 skill——即使用户没明说「穿透」二字。本版为 MCP-only:无需 6 张导出源表,全部经国内产品 MCP 取数,并支持按指定截止日的股价+分配双重滚动重估。" |
PE 母基金穿透(MCP-only 版)
把一只母基金按「①上市估值替换 → ②子基金逐公司穿透 → ③FUND层净值 → ④退出标签合并分类 → ⑤三分类TOP → ⑥RVPI瀑布」六步,全部经 MCP 取数,产出可对客户呈现的多 sheet 工作簿。
与旧「6 张源表」版的根本区别:源表不再是必需品。query_advanced_info 已能返回子基金逐公司的剩余投资估值 + 退出计划标签 + 母基金穿透投资额,穿透比例可从 MCP 推导。源表仅在需要「逐标的对平审计」时才用(模式B)。---
零、运行模式
- 模式A(默认 · MCP-only):无源表,全部走 MCP。成品名加「MCP版」并标注数据截止日。
- 模式B(对平版):用户提供 6 张导出源表时,用源表覆盖 MCP 快照做逐标的对平。成品名「对平版」。
- 模式T(T-1 重估版):用户要「T日/T-1 口径」「更新累计分配和账面估值」「按股价调整」时,在模式A基础上叠加第七步:双重滚动重估(见第三节)。成品名「T-1 市价重估版」。
本文件主体描述模式A,第三节描述模式T的增量。
---
一、开工 checklist(自动,不再逐条问人)
1. 截止日
- 默认:触发日往前推 5 个工作日(周一至周五,暂不含法定节假日)。例:触发日 2026-07-07(周二) → 截止日 2026-06-30。
- 用户明说「T日/T-1」时:截止日 = 触发日前 1 个自然日(T-1),并核对该日是否为交易日。
- 取 MCP 实际可得、不晚于该目标日的最近报告期/快照。
- 成品页眉标注:
目标截止日 YYYY-MM-DD | 数据实际截止:季报 YYYY-MM-DD / 底层快照 YYYY-MM / 分配 YYYY-MM-DD / 市价口径日 YYYY-MM-DD。
fuzzy_query_domestic_project(关键词) 拿基金备案编号(如歌斐鸿本 = S67101、歌斐永弘 = S29709)。
- 若返回「该基金为内部载体或已结束基金」,去掉「歌斐」前缀重试(如「永弘」)。
query_pe_report(编号) 看 报告日期,再用 report_date= 试探更近的季度(如 2026-03-31)。返回「未找到相关数据」即确认无更新报告期,必须走 roll-forward 而非假装有新数。
4. 现金口径:MCP 无独立现金字段,直接用 query_pe_report.基金账面价值 作净 NAV,不做手工加回。
5. 客户种子:母基金整体穿透不需要。仅当用户明确要「某客户」穿透时,才追加输入「客户在该母基金的实缴/份额」,其余算法乘一个标量即可。---
二、六步穿透管线(MCP-only)
① 取基金层 + 组合层(对平底座)
query_pe_report(基金备案编号) 一次拿全:
- 基金层:认缴/实缴、累计已分配、基金账面价值(净NAV)、总价值 → DPI/净RVPI/TVPI;另有
最新分配数据截止日/最新累计分配/分配笔数(实时字段,roll-forward 用)。 - 子基金列表(每只):实缴、已实现、剩余账面估值(=母投子口径穿透RV,季报对平)、回流比例、估值倍数、认缴出资比例(=母投子实缴比)、最新分配截止日 / 最新累计分配。
- 直投项目(每个):投资成本、已实现、剩余估值、状态、退出计划文字。直投数量可能为 0(纯 FOF),此时③页为空表,且不存在「直投精确市价Δ」。
这三层互相对平,是全部成品的锚。子基金剩余账面估值合计 + 直投剩余估值合计 = 组合残值。
② 子基金逐公司穿透
对每只子基金 query_advanced_info(子基金简称),循环全分页(page=1..N,page_size 最大 50;返回体含「第 X 页 / 共 Y 页,共 N 家公司」)。每公司「间投投资组合」行提供:剩余投资估值、退出计划标签、上市板块、现股份数/ADS。
四个必守的坑:
1. 同一子基金挂多个母基金:返回鹏礼/鸿本/信熙/荣泽等多个来源,只取「来源基金」含目标母基金简称的行。
2. 同一公司跨多个子基金:按 公司简称+来源子基金 唯一键,不可合并(如百融云创同在华兴一期与高瓴一期)。
3. 标签取值:以 退出计划标签 为准(后续轮融资/拟IPO退出/择机减持/拟转让·回购退出/上市退出/其他退出),分数字段仅作排序辅助。
4. 可用排序剪枝省 token:返回按「累计投资估值」降序。一旦某条目该字段为 0/空且其子基金层 剩余投资估值 也为 0,其后各页必然全为 0(完全退出)。仍应抽查最后一页确认,但无需逐页精读中间页。
穿透比例 = 母投子实缴比 = query_pe_report.子基金.认缴出资比例(= 投资关系.母基金投资额 ÷ 间投组合.累计投资额,两路交叉验证一致)。
②.1 per-subfund 精确归一(核心,务必执行)
MCP 底层公司剩余投资估值是快照口径,与季报不一致(多数偏高,个别偏低)。直接加总不对平 NAV。必须按子基金归一:
公司归一穿透RV = 子基金季报RV(①的剩余账面估值) × ( 公司快照RV / 该子基金全部公司快照RV合计 )
- 分母须取该子基金全分页公司快照RV之和。
- 归一后:每只子基金分标签合计 = 该子基金季报RV(精确对平);全部子基金 + 直投 = 组合残值 = 对平 NAV。
- 定向剔除优先于等比例缩放:若月度观点明确某标的「已完成全部退出」,先把它整只从分母剔除、RV 归零,再对剩余标的归一。等比例缩放会错误地让已退出标的继续占残值。
- 若个别微型子基金(占比<5%)未逐公司取全,可按基金状态整体归入单一标签并标注「按状态估」。
③ FUND 层净值
- 净NAV =
query_pe_report.基金账面价值(含现金/费用/carry,不拆分、不加回)。 - 净RVPI = NAV ÷ 实缴;DPI = 已分配 ÷ 实缴;TVPI = 总价值 ÷ 实缴。
- 组合残值与净NAV的差额(基金层费用/负债/未投出现金)单列一行披露,不下推到标的层。
④ 退出标签合并分类(直投 + 间投)
把直投(季报精确 RV + 标签)和间投底层公司(②.1 归一后 RV + 标签)合并,按退出计划标签汇总。规范化到统一标签集:择机减持 / 拟IPO退出 / 后续轮融资 / 拟转让·回购 / 其他(上市退出→择机减持;其他退出且RV=0→忽略)。合并合计 = 组合残值。
分标签净RVPI = 该标签合并RV ÷ 组合残值 × 净RVPI(天然满足:分标签合计 = 净RVPI;各标签非负)。
⑤ 三分类 TOP
输出 择机减持 / 拟IPO退出 / 后续轮融资 三张 TOP sheet,每张列直投+间投公司,按归一后穿透RV降序,带来源、类型、穿透RV、较上版变动。
⑥ RVPI 瀑布
收口式瀑布:已分配DPI → +各退出标签净RVPI → TVPI合计。TVPI合计作红色整柱收口。柱序按各标签 RV 从大到小排,不要固定顺序。
---
三、模式T:双重滚动重估(分配 roll-forward + 股价重估)
用户要「T-1 口径」「更新累计分配和账面估值」时执行。两条腿必须都跑:分配只改变价值形态(TVPI 不变),股价才改变价值本身(TVPI 变动)。
第一腿:分配 roll-forward
MCP 只按报告期提供账面估值,但累计分配是实时字段。二者时点不一致,必须桥接:
T-1 账面估值 = 季报账面估值 − 季报后已发生的 LP 分配合计 T-1 累计分配 = query_pe_report.最新累计分配(直读,不推算) 总价值 = 二者之和,与季报总价值恒等 → TVPI 不变
必须做双桥交叉验证(这是本步最强的对平证据,通常能吻合到元级):
| 桥 | 算法 | 数据来源 |
|---|---|---|
| 基金层桥 | 季报NAV − Σ(LP分配明细中报告日之后的各笔) | LP分配明细 表 |
| 子基金层桥 | Σ(子基金最新累计分配 − 子基金季报已实现价值) + 基金层自有现金分配 | 子基金 最新累计分配 / 最新分配截止日 |
两桥差额 = 基金层自有现金分配(未投出资金等),单列披露。若两桥差额大得离谱(>10% 分配额),说明某处口径错了,回头查。
子基金层同步滚动:
子基金 T-1 残值 = 季报剩余账面估值 − 该子基金季报后新增分配 子基金 T-1 已实现 = 最新累计分配 子基金总估值与估值倍数守恒不变(可作校验)归一系数随之改用 T-1 残值重算。
第二腿:上市标的按截止日股价重估
只对「已上市未完全退出」标的做。已全额退出的(月度观点确认)不参与,其价值已转入 DPI。
方法选择:先验证,再选路
路径A(优先)— 股数法:市值 = 现股份数 × 截止日收盘价 × 汇率
仅当 query_advanced_info 返回了 现股份数/ADS,且通过下面的自洽性验证时使用。
自洽性验证(强制,不可跳过):
隐含单价 = MCP剩余投资估值 ÷ 现股份数 ÷ 期初汇率 比值 = 隐含单价 ÷ 期初实际收盘价
- 比值落在 0.90–1.10 → 股数法可用。
- 比值 ≈ 1/3 或 1/2 → 该字段记录的是普通股数而非 ADS,按 ADS 比例还原后再验一次(如 1 ADS = 3 普通股)。
- 比值 明显偏离 1(实测曾见 0.30 与 14.1)→ 股数法对该标的不可用,改走路径B,并在报告中列明该标的的比值与判定。
路径B(兜底,也是多数情况的实际选择)— 比价法:
截止日市值 = 期初(季报基准日)估值 × (P_截止日 ÷ P_期初) × (FX_截止日 ÷ FX_期初)
- 只需价格比值,绕开股数不同步问题,且对无股数字段的标的同样适用,可做到 100% 覆盖。
- 隐含前提:季报估值以期初日市价计。此前提对「含非上市业务」的标的不严格成立(见下方警告)。
允许两法并用:能验通的走股数法、验不通的走比价法,在报告中逐标的标注所用方法。这比全用一种更准确。
除权除息验证(强制)
用 fqt=0(不复权)价格重估持仓市值——因为现金分红时持股数不变,分红另计为收益;但送股/转增/拆股会改变持股数,此时不复权价格会虚增跌幅。
验证方法:同时取期初日的 fqt=0 与 fqt=1(前复权)价格并比较。
- 差异 0–2%(且方向为前复权更低)→ 现金分红,不复权口径正确。
- 差异 >10% → 疑似送转/拆股,须查分红送转记录并按比例调整股数。
从子基金层传导到母基金
必须在子基金层做重估,再穿透,不要在母基金穿透值上直接乘系数:
Δ子基金层 = Σ(标的重估市值 − 标的期初估值) Δ穿透至母基金 = Δ子基金层 × 母投子实缴比 T-1 市价重估后账面估值 = T-1 roll-forward 账面估值 + Σ各子基金 Δ穿透子基金新残值 = T-1 残值 + 该子基金 Δ穿透;归一系数用「新残值 ÷ 重估后快照合计」重算。
必须写进报告的三条口径警告
1. 市价口径日可能钉不住:query_valuation 的「数据截止日期」随查询日滚动,无法指定历史日;若用它取数,须标注「市价口径日=查询日,晚于目标截止日」。用行情接口按日取数则无此问题。
2. query_valuation 的「上市公司估值」常常等于 query_advanced_info 的快照值,即该字段不是独立的收盘价重估,只是快照 × 穿透比。发现两者逐一相同时,直接说明「本次无独立市价数据,须自行取行情重算」,不要把它当成市价。
3. 估值可能含非上市业务:若管理人月度观点提到某公司「分为上市主体与非上市业务两部分」,则其 MCP 估值不能整体套用该股票的涨跌幅,会高估波动。在报告中单独标注该标的及其对 NAV 的敏感度。
---
四、行情与汇率取数(东方财富历史行情接口)
WebFetch 直接取该接口会返回空;公开财经站的缓存页往往落后数周。用 Claude in Chrome 打开接口 URL,再 get_page_text 读 JSON,实测稳定且可精确到指定日期。
https://push2his.eastmoney.com/api/qt/stock/kline/get ?secid=<市场>.<代码> &fields1=f1&fields2=f51,f53 # f51=日期, f53=收盘价 &klt=101 # 日K &fqt=0 # 0=不复权(重估用), 1=前复权(验除权用) &beg=YYYYMMDD&end=YYYYMMDD # beg=end 可精确取单日
secid 前缀速查:
| 市场 | 前缀 | 示例 |
|---|---|---|
| 上交所 | 1. | 1.603259(药明康德) |
| 深交所/创业板 | 0. | 0.301091(深城交)、0.301236(软通动力) |
| 港交所 | 116. + 5位补零 | 116.06608(百融云创)、116.00780(同程艺龙) |
| 纽交所 | 106. | 106.BEKE(贝壳找房) |
| 纳斯达克 | 105. | 105.BZ(BOSS直聘) |
| 外汇 | 133. | 133.USDCNH、133.HKDCNH |
效率要点:用 browser_batch 把 navigate + get_page_text 成对批量提交,一次可跑 4–5 只标的;beg=end 单日取数可把每次返回压到一行,比取整段区间省 90% token。
汇率:港股用 HKDCNH、美股用 USDCNH,取期初与截止日两点算比值。人民币升值会放大外币持仓折人民币后的跌幅,不能省略。
---
五、成品工作簿/报告结构
模式A(多 sheet):
| sheet | 内容 | 口径 | |---|---|---| | 00_读我 | 口径分层、覆盖、近似声明、截止日 | — | | ①FUND层 | 认缴/实缴/已分配/NAV/DPI/RVPI/TVPI | 季报,对平 | | ②子基金层 | 季报RV/回流/倍数/母投子实缴比/归一系数 | 季报,对平 | | ③直投层 | 成本/已实现/剩余RV/状态/退出计划(无直投则空表并说明) | 季报,对平 | | ④合并退出标签分类 | 直投+间投按标签,合并RV/占比/净RVPI + 分子基金×分标签矩阵 | 归一,对平NAV | | ⑤⑥⑦ TOP三分类 | 择机减持/拟IPO/后续轮,公司按穿透RV降序 | 归一 | | ⑧RVPI瀑布 | DPI+分标签RVPI=TVPI,收口式柱图 | 归一 | | ⑨上市市价重估 | 逐标的期初估值 vs 截止日市值、Δ、调整后NAV/RVPI/TVPI | 市价 | | ⑩底层公司全表 | RV>0 的全部穿透记录,降序,带集中度统计 | 归一 |
模式T 额外加两页,且置于最前:
- ⚠ 口径验证页:股数法自洽性验证表(逐标的列 MCP估值/现股份数/隐含单价/期初实际价/比值/判定)、除权除息验证表、以及本次采用方法的声明。这页是对外呈现前的必读,不能省。
- ★ 三版对比页:A 季报口径 / B 分配 roll-forward / C 叠加市价重估,逐层列 DPI、RVPI、TVPI、组合残值、分标签 RV 的变动与归因。要讲清「A→B 只是形态转换 TVPI 不变,B→C 才是实质减值」。
---
六、口径与近似声明(必须写进读我页)
- FUND/子基金/直投三层 = 季报对平口径,可对客户呈现。
- 底层公司快照 = 管理人最新估值,与季报不同期,经归一后总额对平,标签结构以头部持仓为代理。
- T-1 账面估值是推算值(季报锚 + roll-forward),不是 MCP 直读;累计分配才是直读。必须把这两者的性质在表里分列标注。
- 市价重估须写明所用方法(股数法/比价法/两法并用)、价格来源、口径日、汇率,以及自洽性验证结果。
- MCP markdown 四舍五入到万元;明细合计与总额尾差应控制在千元级并说明。
- 底层被投公司财务细节受 LPA 约束不披露;美元库明确拒绝,国内库部分直投给 3 年财报。
- 单标的重估数值若验证未通过,明确写「方向与总量可靠,单标的数值不宜作为对客户的精确披露口径」,并说明补数路径(托管/LP 报告的实际持股数)。
---
七、Excel 技术要点(生成 xlsx 时)
1. 公式零错误:用 openpyxl 写公式后必跑 scripts/recalc.py 校验,errors=0 才算完成。
2. 瀑布图(openpyxl 无原生 waterfall,用堆积柱手工实现):
- 三系列:
base(隐形)、up(增量)、total(红,收口)。 - base 用
noFill占位;只在 up/total 系列开数值标签(showVal=True),否则标签糊成一片。 - 辅助数据列(base/up/total)必须可见——Excel 不绘制隐藏列里的数据;放远端列(如 T/U/V),但不要
hidden=True。 - 展示表只给「环节 / 增量(x)」,不要「起点」列。
0.000"x"。
4. 文件名:避免生僻中文导致下载路径编码问题时,另存一份 ASCII 名副本。
5. 沙箱不可用时的降级:若 Linux 沙箱起不来(openpyxl 跑不了),改用 Write 工具直接产出单文件 HTML 多标签页报告,内容、口径、对平校验与 xlsx 版完全一致,瀑布图用内联 SVG 手绘。要在交付时说明是降级产物,并提出沙箱恢复后可转 xlsx。---
八、关键 MCP 调用链(速查)
fuzzy_query_domestic_project(名称) → 基金备案编号 query_pe_report(编号) → 基金层 + LP分配明细 + 子基金列表(季报RV/认缴出资比例/最新累计分配) + 直投 query_pe_report(编号, report_date=更近季度) → 试探是否有更新报告期(返回"未找到"即确认无) query_advanced_info(子基金简称, page=1..N) → 逐公司: 剩余投资估值/退出计划标签/现股份数/上市板块/月度观点/来源基金 query_valuation(母基金简称) → 上市标的清单 + 穿透持有额(注意:常等于快照,非独立市价) [Chrome] push2his.eastmoney.com kline API → 指定日收盘价(fqt=0 重估 / fqt=1 验除权)+ 汇率→ 分配 roll-forward(双桥交叉验证) → 上市标的重估(先验股数自洽性,选股数法或比价法) → per-subfund 归一 → ④合并标签 → ⑤三分类TOP → ⑧瀑布 → ⑨市价重估页 → ⑩全表
---
九、已验证锚点
歌斐鸿本 S67101(2025-12-31 季报):实缴 12.076亿 | DPI 1.35x | 净RVPI 0.41x | TVPI 1.77x | 穿透比例交叉验证一致 | 分标签净RVPI合计=0.413x | 上市市价重估(2026-07-07):全部上市标的市价≈1.5亿(占NAV约30%),直投上市市价较季报低约405万,市价调整后 TVPI 1.762x。
歌斐永弘 S29709(纯 FOF,无直投,4只子基金):
- 季报口径(2025-12-31):实缴 11.819亿 | 分配 20.904亿 | NAV 9.049亿 | DPI 1.7688x / RVPI 0.7656x / TVPI 2.5343x | 组合残值 9.187亿。
- T-1 roll-forward(2026-07-27):分配 23.106亿(38笔) | NAV 6.847亿 | DPI 1.9550x / RVPI 0.5793x / TVPI 2.5343x 不变。双桥交叉验证:子基金层新增分配 2.049亿 + 基金层现金分配 1,522万 = LP 分配 2.201亿,与基金层桥吻合到元。
- T-1 市价重估:上市敞口净减值穿透 2,678万 → NAV 6.579亿 | RVPI 0.5567x / TVPI 2.5117x。10只上市标的8只下跌,仅药明康德 +37.5% 与贝壳 +0.9% 为正;人民币对美元升 3.0%、对港币升 3.8%。
- 反面教材(务必引以为戒):该基金 5 只有现股份数的标的,隐含单价与期初实际收盘价的比值分别为 药明康德 0.30(股数为大幅减持前旧数)、新世纪医疗 14.1(估值含非上市业务)、百融云创 0.68、深城交 0.78、贝壳 0.94(须先按 1 ADS=3 股还原)。另有 5 只股数字段为空。若不做自洽性验证直接用股数×股价,会产出看似精确、实则完全错误的结果。