第13章 亲手试试
第 13 章 亲手试试
随书实操包
二维码已改为站内入口:请打开 mve-toolkit 专页 或直接 下载 zip。
引子:小苏的第一天
9 月 14 日,周一,苏晓第一天到金融市场部报到。
她是今年校招进来的投资助理,经济学硕士,论文写的是利率期限结构——但此刻站在工位前,她发现自己的工作电脑干净得像新买的一样:没有 Python,没有终端,连管理员权限都没有。部门 IT 的规定很清楚:工作机不装任何未经审批的软件。
师傅是王岚——第 11 章里那位一句话出归因报告的投资经理。晨会回来,王岚把一个文件夹拷到她桌面,说了三句话:「这是咱们部门在用的估值实操包。先把 START_HERE 打开,照着做。下班前,给我一份 FI-01 上周的周度归因报告。」
小苏打开文件夹,心里打鼓:不会编程,没有权限,一天之内出一份能进决策会的报告?王岚看出了她的表情,补了一句:「不用装引擎、不用写代码。本机装好 Cursor,打开文件夹就能问。遇到问题,先问它,再来问我。」走到门口,她又回头补了一句:「报告里每个数,我都会问从哪来——你最好现在就习惯。」
这个文件夹,就是随书配套的实操包——你手里的那一份,和小苏桌面上的一模一样。本章跟着她走一遍:从解压到第一张报表,从第一句话到一份完整报告,从示例数据到她自己的持仓。路上会踩几个坑,每个坑都值得踩——踩过坑的地方,才是真的学会的地方。
13.0 实操包:下载、安装与启动
小苏的实操包是王岚拷到她桌面上的——机构内部流转,U 盘一插,文件夹一拖,这是常态。你手里的这一份,从这本书来:扫一个码,下载一个 zip,解压到纯英文路径,本机安装 Cursor,用 Open Folder 打开解压根。包的出处不同,内容一模一样——同一个版本,同一条红线,同一个起点。启动.bat 可选,不是安装程序,也不等于「双击全包」。
这一节把「拿到包」到「打开包」之间的路走完,一共四步:下载、解压、打开、验证。顺利的话十几分钟。需要本机已装 Cursor;不需要管理员权限,不需要 pip install,不需要碰一行命令。走完之后,你就可以跟上小苏的步伐了。
包里有什么
先花一分钟看全景。实操包是一个 zip 文件,解压后是一个文件夹——没有安装程序,不写注册表,不在 C 盘留任何东西:
mve-handson/
├── 启动.bat ← 可选:检查路径,用本机 Cursor 打开本文件夹
├── START_HERE.md ← 入口文档,先读我
├── hello-valuation/ ← 打开预生成报表(不跑引擎)
├── .cursor/skills/ ← 预制技能:报表生成、日初简报、对冲试算、Carry 选券、指标查询、调仓建议、开放探索
├── cursor/ ← 占位说明:请自装官方 Cursor
├── mcp_python/ ← 便携 Python + 只读 MCP(无引擎 exe)
├── data/ ← 示例持仓、离线行情、离线资讯
├── mve_batches/ ← 已跑好的示例批次(书里数字的出处)
├── reports/ ← 你生成的报告都放这里
└── docs/ ← 使用说明与常见问题
记住三件事就够了。三个入口:START_HERE.md(图文引导)、Cursor Open Folder(本机自装的编辑器)、hello-valuation/(打开预生成页)。启动.bat 可选,只检查路径并帮你打开文件夹。四样组件:AI 编辑器(请自装 Cursor)、MVE 示例批次、便携 Python / 只读 MCP、离线资讯包。一层「不用拆」:mcp_python/ 是运行时——正常提问不用打开,出了问题看 docs/。
第一步:下载
打开随书实操包专页,你会看到一个文件:
| 项目 | 内容 |
|---|---|
| 文件名 | mve-toolkit-v1.0.zip |
| 大小 | 约 93 MB(另加本机 Cursor,约 1.8 GB) |
| 版本 | v1.0,与本书版次对应 |
第二步:解压
右键 zip 文件,「全部解压缩」,目标位置有一个讲究:纯英文、无空格的路径,比如 D:\mve-handson。
不要解压到桌面,也不要解压到「新建文件夹(2)」——路径里的中文和空格会让启动脚本退出,这是本章 §13.5 要讲的第一个坑,小苏踩过,你提前绕开。zip 本身约 93 MB;若本机还要装 Cursor,再预留约 2 GB。解压完成后,对照上一小节的目录结构看一眼:入口文件都在,解压就成功了。
第三步:启动
v1.0 不内置 Cursor,请先安装官方编辑器(https://cursor.com 或 https://help.mathema.com.cn),再用 Open Folder 打开解压后的本文件夹。启动.bat 可选:检查路径有没有中文和空格(有就弹窗退出),找到本机 Cursor 就帮你打开这个目录。它不安装任何东西,不碰注册表。
打开后,左侧文件树就是刚才那个文件夹。左下角的 MCP 指示灯变成绿色——绿灯亮,说明编辑器已经连上包内只读 MCP,能读到冻结批次。本包没有估值引擎 exe,不会在读者机上重跑估值。
这里要如实交代一件事:**这个包是「数据离线、AI 在线」的。**持仓、行情、批次、资讯全部内置,不依赖任何外部数据接口,三年后打开跑出来的数字和今天一模一样;但 AI 对话需要联网——编辑器要登录账号(或按 docs/ 里的指引配置你所在机构的模型网关)才能应答。如果你此刻在一台完全隔离内网的机器上:自检脚本、批次目录、CSV 核对照常可用,只是「问数」这一步要等回到能联网的环境。这不是设计的疏漏,是第 10 章那条分工的代价——AI 在引擎之上,而 AI 住在云端。
第四步:验证
环境通不通,一个问题见分晓。在编辑器的对话框里输入:
FI-01 这个组合现在有多少只券?总市值多少?久期多少?
预期回答是这样的:
组合 FI-01 当前持仓 32 只,总市值 64.00 亿元(面额 61.80 亿元),修正久期 4.78 年。数据来自估值批次 batch_20260904_210733(估值日 2026-09-04)。问句未要收益率可以不给;若给,应为 YIELD 1.52%(书中若写 YTM,即此字段)。
别急着高兴,再做最后一个动作——也是本书反复强调的那个动作:打开 mve_batches/batch_20260904_210733/output/aggregated/ 里的聚合 CSV,亲手找到这三个数。**对上了,环境就是通的;AI 答的数能在批次里找到,这本书的方法论就在你手里活了。**对不上,先别怀疑自己,查下面的常见问题表。面额不要当成市值。
五个场景的操作卡在 §13.3;场景五约 20 分钟。五个场景走完后,§13.3 另有一张开放探索卡,不进图 13-4。
常见问题(下载与安装)
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 下载慢或中断 | 网盘限速 | 换 https://help.mathema.com.cn 提供的镜像链接;或用下载工具续传 |
| 解压报错「路径过长」 | 解压层级太深 | 直接解压到盘符根目录(如 D:\) |
| 双击启动.bat 闪退 | 路径含中文/空格,或杀毒软件拦截 | 换纯英文路径;把文件夹加入杀毒软件白名单 |
| 启动后 MCP 指示灯红色 | 便携环境被杀软隔离 | 检查杀软隔离区,恢复并加白名单后重启 |
| 完全无外网,AI 不应答 | 「数据离线、AI 在线」 | 自检与批次查看照常;AI 对话需联网或配置机构模型网关(见 docs/) |
| 公司策略禁止运行 .bat | 机构安全策略 | 把 docs/ 里的手动启动命令交给 IT 部门审计后执行 |
运行中的问题(批次报错、CSV 格式、数字对不上)不在这里——那是小苏要踩的坑,§13.5 有一张完整的表等着。
环境通了。接下来的故事属于小苏:她会先带你认识这个文件夹里的每一样东西,跑出第一张报表,然后走完问数、诊断、成文、登记四步。你已经站在起跑线上了——跟上她。
13.1 开箱:解压即用,五分钟第一张报表
小苏双击打开文件夹,里面的结构出乎意料地简单——没有安装程序,没有注册表,没有「请先阅读三十页部署手册」,就是一个文件夹:
mve-handson/
├── 启动.bat ← 可选快捷方式(上一节已说明)
├── START_HERE.md ← 入口文档,先读我
├── hello-valuation/ ← 打开预生成报表(不跑引擎)
├── .cursor/skills/ ← 预制技能:报表生成、日初简报、对冲试算、Carry 选券、指标查询、调仓建议、开放探索
├── cursor/ ← 占位说明:请自装官方 Cursor
├── data/
│ ├── positions/ ← 示例持仓(已脱敏)
│ ├── market/ ← 离线行情快照
│ └── news/ ← 离线资讯样本
├── mve_batches/ ← 已跑好的示例批次
├── mcp_python/ ← 便携计算环境(免安装)
├── reports/ ← 生成的报告都放这里
└── docs/ ← 使用说明与常见问题
四样核心组件,第 11 章已经介绍过:Cursor 编辑器(和 AI 对话的地方)、MVE 示例批次(报告里的数字都从这里来)、MCP Python 计算库(实时试算能力)、离线资讯包(事先审过的资讯样本)。小苏需要知道的是它们的存在,不需要知道它们的原理。但她还是多问了一句:「这些批次是谁跑的?」王岚答:「上周五晚上,引擎自己跑的。你看到的每个数字,都是那次真实计算的产物——不是为这本书编的演示数据。」这个区别很重要:示例批次是「真实计算的留档」,不是「为了好看摆的样品」——所以书里的每个数字才都能溯源。
真正值得一提的是这套包的设计红线——**免 pip、离线数据、版本锁定、打开即问。**这几条不是为了图方便,是从失败里学来的。在机构环境里推广一套工具,经典的死法有五种:读者电脑不能联网,pip install 卡住;没有管理员权限,装不上 Python;Python 版本和依赖包冲突,报错信息像天书;数据接口的 token 过期,示例跑不起来;环境配了两个小时,读者在第一步就放弃。五种死法指向同一个教训:**让读者在第一天成功的唯一办法,是把「配环境」从任务清单里删掉。**所以实操包里,Python 是便携版、随包自带、版本锁定——你在任何一台 Windows 工作机上解压,得到的都是同一个版本;行情和资讯是离线文件,三年后打开这个包,批次里的数字和今天一模一样。Cursor 请本机自装,对话仍要登录账号。每个案例都标注了预期输出——对不上就知道是环境或口径出了问题,而不是自己理解错了。
小苏按 START_HERE 的指示,双击 hello-valuation 里的自检脚本。浏览器打开一份已经写好的 HTML——三只示例券的估值页:持仓清单、市值、久期,页脚挂着批次号。v1.0 不会在读者机上创建批次、逐笔估值;那几分钟的「二十四小时浓缩版」是作者侧预跑留下的结果。她后来知道:自检的目标是证明「包是完整的、预生成页打得开」,不是证明「本机装了引擎」。

这张报表的业务内容不重要,重要的是它的存在:**预生成页打得开,包就是完整的。**从双击到看见页,几十秒。小苏后来跟同学形容这一刻:「像新手机开机,看到主屏幕的那一下。」
为什么第一张报表用迷你组合,而不是直接上完整组合?因为自检的目标是验证环境,不是看业务——三只券、一条曲线、一个估值日,任何一环出问题,报错都指向唯一的地方。环境验证和业务体验分开,是实操包的另一条设计原则:先证明「能跑」,再开始「用」。很多工具把这两件事混在一起,结果是读者分不清卡在环境还是卡在操作,最后一起放弃。
13.2 读者路径:从第一句话到一份完整报告
环境通了,接下来是正经活:王岚要的那份周度归因报告。小苏打开 Cursor,照着 START_HERE 的第二条指示,开始了她和 AI 的第一段对话。这段对话有四步,也是本书给所有读者设计的路径——问数、诊断、成文、登记。
**第一步,问数——先建立信任。**这一步的顺序有讲究:不要一上来就要报告。先问一个你能独立验证的小问题,看 AI 答的数能不能在源数据里找到——能对上,再托付更大的任务。这是本书给所有 AI 工具的使用纪律:信任从一个小验证开始,不从一份漂亮的报告开始。小苏没敢直接要报告,先问了句简单的:
小苏:FI-01 这个组合现在有多少只券?总市值多少?久期多少?
AI:组合 FI-01 当前持仓 32 只,总市值 64.00 亿元(面额 61.80 亿元),修正久期 4.78 年。数据来自估值批次 batch_20260904_210733(估值日 2026-09-04)。
小苏照着批次号,在 mve_batches/ 里找到那个文件夹,打开 output 里的聚合 CSV——三个数都在,一模一样。**这是她第一次亲手验证「AI 答的数,能在批次里找到」。**信任不是被要求出来的,是被验证出来的。
她又多问了一句:
小苏:这个批次是什么时候跑的?
AI:上周五 21:05,日终批处理。批次的 input、config、行情快照都归档在同一个目录里,随时可以复算——重跑一遍,数字不变。
第 12 章讲的批次管理,她第一次摸到了实物。
第二步,诊断——对着数字找异常。
小苏:上周五个交易日,哪天亏得最多?为什么?
AI:本批逐日只有 09-03 至 09-04 一行,
WINDOW_PNLDAILY −496.91 万。09-02(周三)没有独立日行,按第 10 章纪律二标缺失,不许硬凑。周窗是 08-31 至 09-04,周损益 +411.76 万。
小苏注意到这个回答的结构:先给结论(哪天、多少),再给归因(哪一项、多少),最后给交叉印证(市场变动与组合久期方向一致)。三层都是批次里的数,AI 做的是把它们按「问题」的顺序摆好——这就是第 10 章说的「诊断」:数字是引擎的,定位是 AI 的。
**第三步,成文——把数字变成报告。**铺垫完成,小苏发出了王岚交代的那句话:
小苏:帮我生成上周固收组合 FI-01 的周度归因报告,风格正式一点,决策会要用。
接下来的四十秒,她看到了第 11 章场景一的全过程:AI 先确认口径(组合、时间窗 8 月 31 日至 9 月 4 日、Campisi 六项、批次号),再检查数据齐全性,再从批次取数,再编排成文,最后渲染出 HTML 和 PDF 各一份。报告附注里那行小字还在老位置:「本报告全部数字来自 MVE 估值批次 batch_20260904_210733,与估值系统同源;逐项可下钻至交易明细。」
小苏盯着屏幕想:同一份报告,估值岗的同事要做半天——找数、拼表、画图、写结论。她的四十秒里,AI 做的其实是「翻译和排版」,数字一个没算。这就是第 10 章的分工落在桌面上的样子。
**第四步,登记——让报告以后自动出。**小苏想起王岚说过这份报告每周都要,补了一句:
小苏:这份报告以后每周一早上自动出一份。
AI:已登记为周度配方。每周一批次跑完后自动重跑,报告输出到 reports/ 目录。登记之后不再经过 AI——数字由引擎量产,保证每期口径一致。
这一步初看不起眼,其实是四步里最接近「机构级」的一步。每周让 AI 重写一遍报告,每周就有一次幻觉的机会;登记成配方之后,脚本、参数、模板版本全部固定,AI 退出量产环节——创作环节享受 AI 的灵活,量产环节享受引擎的确定性。小苏后来向王岚汇报时特意提了这件事,王岚点头:「对,以后你每周一只需要核对一件事——批次号是不是新的。」

四步走完,小苏做了最后一个动作——也是本书反复强调的那个动作:她挑了报告里「骑乘效应 +19.83 万」这个数字,问:「这个数从哪来?」AI 给出批次号、指标名 ROLL_DOWN、估值日,并下钻到利率债贡献约 +19.09 万。从这一问开始,她已经在用这本书的全部内容了。
值得停一下,看这四步的顺序。不是「先学软件,再学业务」,而是反过来:先用大白话问数,建立「数字能溯源」的信任;再诊断,体会「AI 定位、引擎出数」的分工;再成文,拿到第一份属于自己的产出;最后登记,把一次性的产出变成每周自动的流程。信任、诊断、产出、量产——四步走完,工具就从「别人的系统」变成了「我的工作台」。
13.3 五个场景,挨个做一遍
第 11 章的五个场景,读别人做是一回事,自己做是另一回事。这一节是五个场景的详细操作卡:每个场景给入口问法、观察要点、预期输出、验证动作和常见卡点。建议按顺序做,全程约两小时——顺序是有讲究的:场景一建立「数字来自批次」的信任,场景二体会「同一批次反复用」,场景三接触「实时试算」这个第二种数字来源,场景四用恒等式校验收尾,场景五放在四之后,因为它复用一、三、四的验证动作。五个场景合起来,是这套工具的完整用法,也是全书方法论的一次实操复习。
**场景一 · 报表生成(约 20 分钟)。**入口问法就是小苏那句:「帮我生成上周固收组合 FI-01 的归因报告,风格正式一点。」观察要点有三个:AI 先确认口径再动手(组合、时间窗、归因框架、批次号,四样缺一不可);取数全部来自批次,AI 一个数都不算;结论只描述事实,不下投资判断。预期输出:reports/ 目录下新增 HTML(或 Markdown)一份,标题《固收组合 FI-01 周度归因报告(2026-08-31 至 09-04)》,核心页是 Campisi 六项表:曲线 +291.24 万、票息 +145.60 万、骑乘 +19.83 万、收敛 −44.75 万、凸性 +0.09 万、残差 −0.25 万,合计周损益 +411.76 万。验证动作:挑任意数字下钻到交易明细;再把报告和批次里的聚合 CSV 对一遍总数。然后做改稿练习:「分品种那张表加一列久期」——体会「改脚本、重渲染」和「重新生成」的区别:前者十秒出新版、数字不变,后者一切重来。常见卡点:本批没有 09-02 独立日行,AI 必须标缺失——那是第 10 章纪律二在工作,缺数明说,不许硬凑。
**场景二 · 日初简报(约 15 分钟)。**入口问法:「现在给我发一份今日简报。」观察要点:五个板块(隔夜要闻、市场变动、持仓盈亏、今日关注、策略建议)各自的数据来源——前四个来自批次与离线资讯包,策略建议只复用批次 KPI 与 hedge_whatif 入口(第 11 章板块五),AI 只做汇编和转述。特别注意板块一:资讯是离线的、事先审过的,AI 不联网抓新闻——它给每条资讯写的那句「与本组合的关系」,关联依据(持仓、集中度)也全部来自批次。取数卡上还可读到 FI-01 的 HS-VaR 1D:95 约 4126 万:这不是「全量持仓贯穿 250 日回看窗」的约 8616 万,因为窗里有建仓过程,平均敞口低于估值日全量。预期输出:一封 HTML 简报;如果实操包未配置邮箱,简报会以 HTML 文件形式生成在 reports/ 目录下,双击用浏览器打开即可——离线环境不依赖任何邮件网关。验证动作有两个:一是逐板块问「这块的数据从哪来」;二是把简报再发一遍——「把今早的简报再发我一份」,看 AI 回答「数据仍来自今早的批次,内容一致」。同一批次、同一口径,重发一百次数字也不会变——亲手验证这句话,比读十遍都有用。最后打开批次的 reports 目录,找到那封邮件的 HTML 原件:三个月后审计问「那天晨会的依据是什么」,答案就是它。
**场景三 · 对冲策略(约 30 分钟)。**入口问法:「FIX-03 久期太长了,帮我用国债期货和利率互换各做一套对冲方案,目标久期 5.0 以内,DV01 缺口算清楚。」观察要点:批次栏市值 46.66 亿、久期 6.01、DV01 281.50 万/bp;压到 5.0 的目标 DV01 约 233.32 万/bp,缺口 +48.18 万/bp(须缩短久期)。期货手数来自 MCP hedge_whatif:空 TF2609 139 手、空 T2609 532 手,HIST 价 106.45 / 109.47,CF=1,非 CTD。互换是分档试算——5 / 8 / 12 亿 Pay fixed 的 DV01 约 24.06 / 38.50 / 57.74 万/bp,闭合名义约 10.01 亿;12 亿会略超对冲。必做的追问:「为什么不全用 10 年期的 T?」——让 AI 调出 KRD 分布回答(风险主要在 7–10Y,T 权重大于 TF)。验证动作:挑三个数字问出处——缺口 48.18 万/bp(来自批次公式)、139 / 532 手(来自 hedge_whatif)、5 亿 IRS 24.06 万/bp(曲线年金,不是完整互换引擎)。常见卡点:试算不是已发生,不可混进批次 PnL;不要把口算手数当成 CTD 交割。
**场景四 · Carry 选券(约 20 分钟)。**入口问法:「帮我找当前市场上 Carry 最高的债券,2 亿资金,打算持有 3 个月。」观察要点:AI 先讲恒等式再动手——窗口总损益 = 曲线变动 + 票息 + 收敛 + 骑乘 + 凸性 + 残差,排序只排「票息 + 收敛 + 骑乘」三项;报告末尾的两条脚注(曲线口径与实际发生口径不同源、排序不含信用与流动性调整)值得逐字读一遍。预期输出:一份 Carry 选券说明。本包宇宙 = 本批 FI-01 持仓 32 只,不是全市场 86 只扫描池。利率债代理前列约是 230006.IB(~151 bp)、230004.IB(~141 bp);分期信用 184775.SH(~505 bp)不可与利率债直接比。240208.IB 已在持仓,不是本批第一。验证动作是五个场景里最硬的一个:让 AI 把 FI-01 窗口损益六项加总,看是否等于周损益 +411.76 万——六项加总等于窗口总损益,这是「数字来自引擎」最硬的一句证明。禁止把扫描池演示 Carry 加进已发生周损益。
场景五 · 调仓建议(约 20 分钟)。入口问法与第 11 章场景五第 1 问同一句:「用批次 batch_20260904_210733 给 FI-01 出一页调仓建议单:先盯曲线和持仓,再诊骑乘、Carry、利差从哪来,再议加券、减券、期货、IRS,每条带试算;不要下单。」观察要点:是否先报批次号;四条是否都有试算栏;页脚是否写非指令单。预期输出:reports/ 下一页建议单 HTML(或 Markdown 表),标题含批次号。验证:挑 Δ 最大的一格问出处;打开批次 CSV 核对批次栏任意一格。常见卡点:把建议单当成下单;把 FIX-03 的 139 / 532 手或 10.01 亿直接填进 FI-01;把扫描池演示 Carry 加进已发生 +411.76 万。FI-01 久期 4.78 低于 5.0,期货试算方向是做多(TF 约 96 / T 约 96),与 FIX-03 空头相反。
负例各一行,预期是拒绝或明说缺数:
- 「按你的判断直接下单。」→ 非指令单。
- 「ΔPnL 你先估一个整数。」→ 空格不许口算。
- 「批次还没跑完,先用昨天的数凑一版。」→ 缺数明说;建议单可以出,批次栏标缺失,试算栏要么不填要么标「无基准批次」。
- 「把对冲 skill 和选券 skill 合成一个策略。」→ 六个入口各干各的,场景五只编排建议单。

五个场景做完,建议回头做一件事:把五份产出物(归因报告、简报邮件、对冲方案、选券排序表、调仓建议单)摆在一起,挑出任意两个数字,验证它们能不能互相对上。对账只对批次栏。归因报告里的周收益,和简报里的持仓盈亏,口径是否一致?对冲方案里的组合 DV01,和归因报告里的曲线损失,能不能互相解释?建议单批次栏里的市值,能不能对回同一张 CSV?能对上,你就亲手摸到了第 12 章的地基——五个场景不是五个产品,是同一套口径的五个窗口,这句话只有亲手对过一次,才算真正读懂。
场景六 · 开放探索(约 15 分钟,附录卡)。 五个规定动作走完,可以自己写例子,摸本包和 _mcp.pyd 还能答什么。图 13-4 仍是五张规定卡,这一卡不进那张图。调用到 _mcp.pyd(查曲线、互换年金)即算摸到 Mathema 能力;这不是现场重跑引擎,也不是下单。入口问法整段复制:
本包是只读实操包。请只结合本包已注册的 MCP 工具和 _mcp.pyd 实际能做到的事,回答:Mathema MCP 在本包里还能做什么?给我 3~5 个应用场景。
每个场景写清三件事:
1)一句我能改数字再问的例子(期限、曲线或名义本金,任选一项可改);
2)用到哪项能力(读冻结批 CSV,或 curve_lookup / hedge_whatif 等、是否调用到 _mcp.pyd);
3)结果是「试算」还是「批次已发生」。试算不是下单,也不是引擎重跑。
可以鼓励我改期限、曲线或名义后再问一遍。不要编造本包没有的行情。做不到的请明确说不:CTD、波动率曲面/雪球、信用 CDS、现场重跑 354 笔或引擎 exe、把 CSV 当实时。bond_unit_whatif 是持仓 CSV 缩放,不是现场重定价。本包未挂独立的 FX 重定价入口;FX 持仓只认批次指标。
先列场景和例子,再列边界。每个数都要能核对。预期:AI 列出 3~5 个场景,每个带一句可改数字的问法、用到的工具,并声明「试算」或「批次已发生」。可试的包括:用 curve_lookup 查 FR007 / 国债的折现、零息、平价;用 hedge_whatif 改目标久期或互换名义。做不到的(CTD、波动率曲面、CDS、现场重跑引擎)应明确说不。不要编造本包没有的行情。
改完例子,可以接着问:
- FR007 改成 2Y,折现、零息、平价各是多少?标清这是试算。
- FIX-03 目标久期改成 4.5,互换名义和期货手数怎么变?试算,非 CTD。
- 本包能不能算 CTD,或把整批 354 笔当场重跑?不能的话,边界写清楚。
13.4 把示例持仓换成自己的
示例数据跑通了,下一个问题自然冒出来:**能不能看我自己的组合?**能——而且这才是实操包真正的用意:示例数据只是陪练,你的持仓才是正文。
整个过程三步:脱敏、改 CSV、跑批。
**第一步,脱敏。**机构数据不出内网是铁律,所以这一步在你的办公电脑上完成,不依赖任何外部工具。三板斧:代码替换——把真实债券代码换成虚构代码(如「24 国开 08」换成「BOND001」),但保留全部条款结构;金额缩放——所有面值、成交金额统一乘一个系数(比如 0.37),保留组合的相对结构;日期平移(可选)——把日期整体平移若干天。脱敏的原则只有一条:变的是身份,不变的是结构——条款、期限、票息分布原样保留,否则跑出来的结果没有参考意义。
以一只真实持仓为例。脱敏前:「22 国开 15,面值 8,000 万,票息 2.85%,2022-08-17 起息,2032-08-17 到期」。脱敏后:「BOND003,面值 2,960 万(8,000 万 × 0.37),票息 2.85%,起息日与到期日不变」。代码和金额变了,条款结构、期限、票息原样——跑出来的久期、DV01、归因结构,和真实组合严格成比例。
**第二步,改 CSV。**打开 data/positions/ 里的示例持仓文件,照着它的格式准备你自己的:每笔交易一行,必备字段包括交易 ID、产品类型、组合键、面值、票息、起息日、到期日;债券带上还本计划、调票面安排等条款字段。一个原则:条款字段宁多勿缺——缺了,引擎会报错;报错的含义,第 12 章讲过了。
第三步,跑批(需有引擎的工作区)。v1.0 随书包不内置估值引擎 exe。示例批次已经预跑、冻结在 mve_batches/batch_20260904_210733。换成自己的持仓后,必须在装了引擎的工作区重跑批次,再把新批次目录拷回包内(或换工作区提问)。包内 hello-valuation 只打开预生成页,不会替你跑这一步。改 CSV 可以在本包完成;跑出新数不行——现包是只读冻结批,单券试算只是按面额缩放已经算好的结果,不是现场重估。

然后是全程最有意思的时刻:打开属于自己的批次,看自己组合的 Campisi 六项——票息贡献多少、曲线损益多少、骑乘多少;看 DV01 和 KRD 分布;看 VaR。很多读者在这一步会第一次发现一些「体感之外」的事实:以为收益主要来自票息,一看骑乘占了一半;以为久期风险集中在长端,一看 5-7 年段才是大头。这些发现不是 AI 的洞察,是你自己的持仓第一次被同一套口径照亮——以前它们散在交易系统、估值表、风控报表里,从来没有在同一个地方、用同一把尺子量过。
小苏走到这一步时,把部门一个真实小组合(脱敏后)跑了进去。她盯着归因表看了很久,说了一句话,被王岚记了下来:「以前这些数字是别人报表里的,现在是我问出来的。」王岚后来把这句话转述给部门负责人,补了一句自己的评论:「这套东西最大的变化,不是省时间,是把『看数的能力』从系统管理员手里,交还给了业务的人。」
一句提醒:示例批次的数字来自冻结批 CSV,换成自己的数据后,每个数字都要自己核一遍——先对口径(估值日、批次、净价全价),再对数字。建议的核对顺序是:先对总市值(和估值系统或托管表对),再对当日损益,再对归因六项的加总。总市值对不上,多半是价格或条款问题;总市值对、损益对不上,多半是现金流或口径问题;损益对、归因对不上,才轮到曲线和重定价的问题。这不是额外负担,这正是本书教的方法本身——第 3 章那张三类差异排查表,从此是你自己的工具了。
13.5 常见问题:报错了怎么办
小苏这一天踩了三个坑,一个比一个典型。把她的踩坑记和更多常见问题整理在这里——先记住总原则:**引擎报错是好事,报错清单就是工作清单。**这套工具的设计者把「出错」分成两类:环境的错(路径、编码、权限),一眼能修;口径的错(缺条款、缺价格),必须人补。两类错都会停下来告诉你,没有一类会悄悄绕过去——这正是它和「怎么都能跑出数」的工具最大的区别。
**坑一:路径里有中文和空格。**小苏一开始把实操包解压到了「桌面\新建文件夹(2)」下,自检脚本双击后闪退。她第一反应是包坏了,差点去找王岚。原因其实很小:引擎对路径中的中文和空格敏感。解法:换到纯英文、无空格的路径(如 D:\mve-handson),重跑即好。教训:金融工具大多出生在英文环境里,路径越朴素,麻烦越少。
**坑二:CSV 被 Excel「顺手」改了。**她用自己的数据时,用 Excel 编辑持仓文件后另存,批次跑失败。查日志发现两处问题:编码从 UTF-8 变成了 ANSI,日期从 2026-09-04 变成了 2026/9/4——Excel 的「智能」保存,把两样东西都悄悄改了。解法:CSV 用 UTF-8 编码保存,日期一律 YYYY-MM-DD;或者改完后用文本编辑器检查一遍再跑。教训:Excel 是最好的查看器,最差的保存器——看数据用它,改数据存盘前多一道检查。
**坑三:条款字段缺了一列。**她加的一只分期还本债忘了填还本计划,批次在该券处报错停止。报错信息直接写明:哪只券、缺哪个字段、影响哪些指标。补上字段,重跑,通过。她后来理解了第 12 章那句话——**引擎宁可停下来说清楚,也不愿悄悄按 100% 面值算一个错的数给她。**教训:报错清单不是失败清单,是补录清单。
更多常见问题,一张表:
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 双击脚本闪退 | 路径含中文/空格,或杀毒软件拦截 | 换纯英文路径;把目录加入杀毒白名单 |
| 自检报「找不到行情文件」 | market_data/ 被移动或重命名 | 恢复目录原名,保持各目录相对位置不变 |
| 批次跑失败 | 数据格式或条款问题 | 打开批次 logs/batch.log,从最后一屏往上找第一条 ERROR |
| 某只券没有估值结果 | 条款缺失或价格缺失 | 按报错清单补条款/补价格,重跑 |
| 数字和预期对不上 | 口径不一致 | 先对估值日、批次号、净价全价,再对数字 |
| AI 答非所问 | 问法缺口径 | 把组合号、时间窗、指标名说具体 |
| 报告里的数和 CSV 不一致 | 看了不同批次 | 核对报告附注的批次号与 CSV 所属批次 |
| 报告生成但图表空白 | 浏览器拦截了本地页面脚本 | 按浏览器提示允许,或用包内推荐的打开方式 |

查日志的方法值得单独说一句。批次失败时,打开批次目录里的 logs/batch.log,从最后一屏往上翻,找第一条 ERROR——引擎的报错是「人话」:它会说「交易 BOND007:缺少还本计划字段 amortization_schedule,跳过该券估值」,而不是一串神秘代码。会读报错,是这套工具唯一需要「学」的东西,而它的学习成本是十分钟。
还有一个心态要专门调整。用惯了对答如流的 AI,第一次遇到引擎报错,很多人的直觉是「这工具不行」。请反过来想:一个从不出错的估值系统,只有两种可能——要么它从不说真话,要么你还没碰到它不敢说的部分。报错是引擎在替你守住口径的边界;它今天拦下的一只缺条款的券,就是下个月对账会上少的一笔糊涂账。
13.6 下班之前
下午五点十分,小苏把报告发给了王岚——FI-01 上周的周度归因报告,HTML 加 PDF,附注里挂着批次号。王岚看完回了两个字:「存档。」隔了一分钟又发来一句:「明天开始,这份报告每周一你负责盯。配方已经登记了,你只需要核对批次号。」
小苏合上电脑前,最后看了一眼桌上的文件夹。早上它还是一个让她打鼓的黑盒子,现在她知道里面每个目录是干什么的:批次是证据包,行情是快照,报告是配方的产物,报错是朋友。
第一天,小苏走完了:开箱、问数、诊断、出报告、溯源、踩坑、解决、换成自己的数据。她没有写一行代码,没有装引擎、没有 pip,但她做成了一件以前要麻烦估值岗半天的事——而且每个数字都答得上「从哪来」。
从实操包到生产环境,距离没有想象中远:示例数据换成真实数据(13.4 已经做过),个人电脑换成日终批后流程(第 12 章的二十四小时),单机换成部门共享——**但口径不变,问法不变,「从哪来」的答案不变。**如果要在机构里正式落地,第 12 章的三种方式(嵌入行内系统、独立平台部署、补齐既有平台)各自对应不同的起点:科技能力强、想自己掌控流程的,选嵌入;没有估值系统、从零起步的,选独立部署;已有系统但有缺口的,选补齐。无论哪条路,第一步都一样——带一组真实持仓来,用你们的数据看结果。实操包是缩小版的生产环境:流程是真的,口径是真的,只有数据是假的。
一个月后,小苏成了部门里默认的「批次管理员」——不是因为她学会了编程,而是因为她最习惯问那句话:「这个数从哪来?」新同事来问报告,她的标准回答是王岚那句话的翻版:「先问它,再来问我;问它的时候,记得问出处。」问出处的习惯,就这样从一个人传到另一个人——这大概是一套口径最好的推广方式:不靠发文,靠示范。
本章小结
回到引子的问题:一个不会编程、没有权限的新人,一天之内能交出一份能进决策会的报告吗?
小苏的答案是:能——不是因为她是高手,是因为工具把门槛压到了「会提问题」。开箱即用,绿色软件标准把「环境」从任务清单里删掉;四步路径,问数、诊断、成文、登记,每一步都有验证动作;五个场景挨个做一遍,每个场景都有「挑一个数字问出处」的硬验证;五个场景之外,另有一张开放探索卡:自己写例子,摸 _mcp.pyd 的边界,试算与已发生必须分开;示例持仓换成自己的,脱敏三板斧,变的是身份、不变的是结构;报错了不慌,报错清单就是工作清单——错得清楚,好过错得安静。这几件事串起来,就是一条从「读者」到「用户」的最短路径。
这一章没有新概念,只有一件事:**亲手做一遍。**书读到这里,估值、绩效、归因、风险的口径之争你都懂了;但只有亲手把一个数字从批次里挖出来,「这个数字从哪来」才从知识变成肌肉。这套工具把「专业」拆成了两层:数字的严谨由引擎守住,提问的自由留给人。你要做的,只是会提问、会溯源、会读报错——三件事都不需要编程。
全书总结:这个数字从哪来
合上本书之前,回到书名。
全书从四个问题开始:为什么我的估值和中债估值差了 2 分钱?为什么风控说的 VaR 和我算的不一样?为什么这个月的归因报告和上个月的接不上?为什么「今天赚了 200 万,这 200 万从哪来」答不上?
四个问题指向同一件事:金融机构的估值、绩效、归因、风险,长期以来是割裂的——每个环节都对,但对不到一起。这本书没有用教科书的顺序回答它们,而是跟着问题走:先看清数字怎么产生(估值、绩效、归因、风险),再看清中国市场的特殊条款(分期还本、可转债、IFRS9),再划清 AI 的边界,最后落到一套引擎和一双手上。
现在可以给出完整的答案了。一个数字的旅程,要过五道关口,每道关口都是一道口径选择题:
它从条款来——现金流是合同写出来的,分期还本、阶梯票息、强赎回售,系统对条款的理解差一分,估值就差一截;条款不是附属信息,条款就是估值本身(第 3、7、8 章)。它从曲线来——折现率是政策选择不是技术事实,半个基点的曲线差异就是 2 分钱;差异不是错误,是口径的账单(第 3 章)。它从口径来——绩效、风险、会计数字都是定义出来的,定义不同,数字就不同;成熟的管理不追求差异为零,追求每一分差异都能说出出处(第 4、6、9 章)。它从同源计算来——损益拆解的前提是同一批持仓、同一张快照、同一套条款处理,在两个时点各估一次;归因不是估值的下游产品,是估值的第二次使用(第 5、12 章)。它从批次来——批次号、指标名、估值日,让每个数字可追溯、可复算;可复现,是机构级工具和个人玩具的分界线(第 10、12 章)。
五道关口串起来,就是全书的主线:**估值、绩效、归因、风险,四个环节必须同一套数字口径。**统一口径不是技术口号,是业务刚需——没有它,月末对账是考古,审计质询是灾难,决策会上报表互相打架;有了它,「这 200 万从哪来」三分钟答完,AI 的每个数字都能当场验证,新人的第一天就能出报告。第 1 章说「割裂的代价」,到这里可以说出它的反面了:统一的红利——对账会从三小时到二十分钟,报告从半天到四十秒,审计质询从翻档案到打开一个文件夹。这些不是效率数字,是信任的生产力。
AI 的位置也清楚了:**在引擎之上,不在引擎之内。**AI 问数、诊断、成文,引擎产生数字,人负责判断和签字。AI 不是第二套数——它是同一套数的新界面。这个分工回答的是 AI 时代金融机构最焦虑的问题:效率和责任能不能兼得?答案是能,条件是各司其职——让 AI 做它擅长的(理解问题、调用工具、组织语言),让引擎做它擅长的(按口径计算、留痕、可复算),让人做只有人能做的(选择口径、判断、签字)。审计师小周那句话,可以作为全书的验收标准:「AI 写的不是答案,除非它能带我找到那个数。」这本书的全部内容,就是让每个数字都能带人找到它。
书末的技术附录收录了全部公式——估值、绩效、归因、风险,从现值到 Campisi 到 VaR。正文里刻意一个公式都没有放。这不是回避数学,是一种立场:**公式是口径的精确化,先理解「为什么是这个口径」,公式才有意义。**需要的时候,附录 A 到 F 在那里。
最后一个动作留给你。打开实操包,随便找一份报告,挑出任意一个数字,问:「这个数从哪来?」
然后沿着批次号、指标名、估值日,自己走一遍——从报告到 CSV,从 CSV 到批次目录,从批次目录到那天晚上的行情快照和条款字段。这条路不长,三分钟;但它是一个金融数字从「报表上的墨水」变回「可复核的事实」的全程。全书十三章,归根结底就是为了让你能走完这三分钟——并且知道每一步在看什么。
走通的那一刻,这本书就是你的了——而那个数字,从此也就是你的了。它从哪来,你亲眼见过。