Wind 估值表增强分析技能
对证券投资基金/资管计划估值表执行四阶段增强:
- Wind 字段补全:为债券持仓新增列 —— 发行人名称、中债估值收益率、久期(行权口径修正久期)、主体评级、债项评级、是否为城投债、区域(省-市-区);并按需补充 YY 评级、债种分类(私募债/PPN/ABS/ABN/公募债)、城投债区域财政债务风险指标(5 项)、产业债发行主体性质(国企/央企/民企)
- 加权指标计算:以「市值占净值比例」为权重,计算加权中债估值收益率与加权久期,写入 Sheet2
- 产品杠杆率计算:总资产 / 净资产(市值口径),写入 Sheet2(监管上限 140%)
- 发行主体负面舆情核查:对去重后的发行主体,经 Wind Alice 分批查询近一年负面舆情,汇总写入 Sheet3
前置条件
- Wind Alice API Key(运行时配置,见下;技能文件内不包含任何 Key)
- 本机可联网;Node.js 18+(用于调用 Wind Alice CLI)
- Python 3 + openpyxl / xlrd(处理表格)
- Wind Alice CLI:
alice-financial-copilot技能安装后位于~/.workbuddy/skills/wind__skillhub/scripts/cli.mjs(若位置不同请按实际路径调整)
API Key 配置(运行时,不写入技能)
node <cli.mjs路径> apikey-set <WIND_ALICE_API_KEY>
node <cli.mjs路径> apikey-get # 验证(configured 为正常)
- Key 仅保存于
~/.wind-alice/config.env(Windows:%USERPROFILE%\.wind-alice\config.env) - ⚠️ 不要在技能文件、脚本、聊天记录中硬编码 Key;用毕可到 alice.wind.com.cn 设置页重置
执行流程
第 1 步:读取估值表,识别债券持仓
- 打开工作簿(注意:WPS 保存的"假 .xls"实为 xlsx,openpyxl 按扩展名拒绝,需先复制为
.xlsx扩展名再读) - 表结构约定:表头在第 4 行;持仓明细行 = 科目代码长度 > 12 且「数量」列 > 0
- 排除行:应计利息、估值增值、汇总行(数量为空)
第 2 步:转换 Wind 代码
| 科目代码前缀 | Wind 代码 |
|---|---|
| 110313 / 110319(上交所债券) | 6位代码 + .SH |
| 110431(深交所 ABS) | 6位代码 + .SZ |
| 110353 / 110358(银行间) | 债券名称(去括号) + .IB |
| 110471(未上市 ABS) | 通常 .SH,需在终端确认 |
第 3 步:Wind Alice 批量取数并回填
字段(Wind WSS 口径):
| 中文列 | 字段 | 备选 |
|---|---|---|
| 发行人名称 | issuer_fullname |
issuer |
| 中债估值收益率 | cnbd_ytm |
bd_valuation_yield、ytm_cnbd |
| 久期(行权口径·修正久期) | modified_duration |
duration(仅作核对,不得直接使用到期口径值) |
| 主体评级 | issuer_rating |
rating_imply |
| 债项评级 | rating |
bond_rating |
| 是否为城投债 | is_city_bond |
city_investment_bond、lczh |
| 区域 | province |
city、district |
| YY 评级 | yy_rating |
yy_rating_implied(YY 隐含评级) |
| 发行主体性质(产业债) | enterprise_nature |
actual_controller_type、company_nature |
⚠️ YY 评级数据可得性(2026-08-17 实测):YY 评级(瑞霆狗 Ratingdog,1-10 档,数字越大资质越弱,4-8 档有 +/- 细分,1-5 投资级/6-10 投机级)通常不在 Wind 结构化字段中,Wind WSS yy_rating 多返回空。经 Wind Alice 检索公开研报(YY 评级官方报告、中金/华泰/天风城投研报)仅能确认约 1/3 主体,其余标注"无公开数据"并附外部评级/中债隐含评级作参考;完整数据需 Ratingdog ODIN 系统/YY 评级 App 或 Wind 终端 YY 模块。城投/产业/金融三类评级不可跨类比较。
⚠️ 久期口径硬性约定(2026-08-14 起):所有债券的久期一律取行权口径的修正久期(按首个行权/回售/赎回日计算,与 Wind 终端默认口径一致;不含权债行权=到期,两者相同)。禁止直接使用到期口径(duration/麦考利久期)——永续债/含权债到期口径久期 ≈ (1+r)/r,可达十几至几十年(实测案例:25冀中能源MTN006 到期口径 18.44 年 vs 行权口径 2 年多),属"假久期",会严重高估产品久期。向 Alice 取数时必须在 prompt 中显式声明该口径。
调用约定(CLI 详细红线见 alice-financial-copilot 技能):
# 1) 冲突预检(本地,不消耗额度)
node cli.mjs check-conflict --prompt "<查询prompt>"
# 2) 主调用(阻塞等待,2-15 分钟;prompt 与预检完全一致)
node cli.mjs --no-wait --prompt "<查询prompt>"
- Prompt 要点:注明估值日期、列出债券 Wind 代码+名称、明确字段清单、要求以表格返回;必须在 prompt 中写明"久期取行权口径修正久期(含权债/永续债按首个行权日计算,勿用到期/永续口径)"
- 判定完成:stdout 出现
ALICE_FINANCIAL_COPILOT_DONE且promptHash=与本次一致 - 返回表格解析后回填新增列(L–R 列,7 个字段);回填后核对久期:若某只含权/永续债久期异常大(>5 年且明显偏离其行权剩余期限),判定为到期口径混入,须重新取数或人工修正
第 3.5 步:债种分类与城投/产业补充字段(2026-08-17 新增)
A. 私募/公募债分类(按科目代码前缀 + 名称自动判定,scripts/extract_bonds.py 已输出该列):
| 类型 | 判定规则 |
|---|---|
| 私募债 | 科目代码前缀 110319(上交所私募债) |
| PPN | 债券名称含 PPN(银行间定向工具) |
| ABS | 科目代码前缀 110431(深交所)/ 110471(未上市) |
| ABN | 债券名称含 ABN(银行间资产支持票据) |
| 公募债 | 其余(110313 企业债、110358 中票、110353 非 PPN 等) |
B. 城投债区域/主体风险指标(5 项判定,城投债专用):经 Wind Alice 查询(注明估值日与数据年度,如"2025 年区域财政数据"),命中记 Y、未命中记 N、无数据记 —:
| 指标 | 阈值 | 建议字段(Wind WSS 口径) | 备选 |
|---|---|---|---|
| 区域财政收入 | <30 亿元 | region_fiscal_revenue(区域一般公共预算收入) |
local_public_budget_revenue、gov_revenue |
| 宽口径债务率 | >600% | broad_debt_ratio((政府债务+城投有息债务)/综合财力) |
local_gov_debt_ratio |
| 财政自给率 | <35% | fiscal_self_sufficiency(一般公共预算收入/支出) |
fiscal_self_ratio |
| 主体短期债务 | >100 亿元 | short_term_debt |
short_debt |
| 主体非标融资 | >50 亿元 | non_standard_financing |
nonstandard_liabilities |
> 字段名若与 Wind 终端不一致,以终端实际字段为准;区域财政指标按最近完整年度查询(如 2025 年)。判定为"是否触发该风险红线",而非精确数值(精确数值可另附列)。
C. 产业债发行主体性质:对「是否为城投债=否」的债券,补充发行主体性质 —— 国企 / 央企 / 民企(字段 enterprise_nature / actual_controller_type,或经 Alice 查询实控人后归类:国务院国资委/中央企业=央企,地方国资委/地方国企=国企,无国资背景=民企)。
第 4 步:加权指标计算
- 权重 = 各债券「市值占净值%」(估值表 I 列);仅纳入有收益率/久期数据的债券
- 归一化权重 = w_i / Σw_i(Σw_i 应与估值表"其中债券投资 XX%"吻合,用于交叉验证)
- 加权中债估值收益率 = Σ(w_i×y_i)/Σw_i;加权久期 = Σ(w_i×d_i)/Σw_i(d_i 为行权口径修正久期)
- 非债券持仓(如信托计划)无中债估值/久期,不纳入,并在备注中说明
第 5 步:产品杠杆率计算
- 从估值表 Sheet1 底部定位「资产类合计」「负债类合计」「基金资产净值」三行(市值列 H)
- 杠杆率(%) = 总资产市值 / 基金资产净值市值 × 100(资管产品监管上限 140%)
- 负债占净资产比(%) = 总负债 / 基金资产净值 × 100
- 输出追加到 Sheet2「三、产品杠杆率」区块(可用
scripts/compute_leverage.py)
第 6 步:发行主体负面舆情核查
- 提取去重发行主体:从回填后的 Sheet1「发行人名称」列(L 列)取持仓行的发行人,去重
- 分批生成 prompt(每批 ≤5 家,避免超长;用
scripts/gen_sentiment_prompts.py自动生成)
- Prompt 模板要点:查询以下 N 家发行主体的负面舆情(近一年,含评级下调、债务违约或展期、诉讼仲裁、被执行人或失信、监管处罚、经营财务恶化、负面新闻等),每家主体如有负面舆情请列明类型、事件概述与大致时间,无负面舆情的注明无明显负面;以表格返回(主体名称、是否有负面舆情、负面类型、事件概述) - 逐批调用 Alice:每批
check-conflict→--no-wait阻塞等待(2-15 分钟/批,多批约需 10-40 分钟) - 读取结果:stdout 截断时读
reportFile=(~/.wind-alice/results/<taskId>.md)正文 - 汇总写入 Sheet3:表头「主体名称 | 是否有负面舆情 | 负面类型 | 事件概述 | 备注」,末行附汇总统计(明确负面/间接或有/无明显负面家数)
关键提示:
- 同名/近似主体甄别:检索结果常混入同名或同区域主体(如"寿光城投"≠"寿光滨海远景"、"昆明城投"≠"云南泰佳鑫"、"水发集团"≠"水发物流集团"),务必按全称核对,不要把其他主体的负面算到本主体
- 集团关联风险:主体本体无负面但母公司/控股股东负面多时(如水发物流集团),应在备注标注"关注集团信用承压"
- 间接/或有负面(关联方瑕疵、被担保方逾期)应单独归类,与主体自身负面区分
第 7 步:写入 Sheet2/Sheet3 并交付
- 通过本地 editor_sdk(tencent-local-office-edit 技能)写入:
sheet_add_sheet新建子表 →sheet_set_range_value_by_csv写入(CSV 必须规整二维表:每行列数一致,空单元格用连续逗号;Python 写文件用newline=''防空行)→save_file - 保存后按用户要求放置(如复制到桌面)
已知陷阱(务必遵守)
- Wind 云终端下 Excel 插件不可用:云化终端(WBox 直连云端)无本地数据服务,Excel/WPS 插件返回"无法读取数据!";Python API 若未授权返回 -40520005。云端 Alice 是通用且不依赖本地终端的取数通道。
- openpyxl 按扩展名拒读假 .xls:先复制为
.xlsx再 load_workbook。 - 应计利息/汇总行排除:必须用「数量>0」过滤,否则重复回填污染数据。
- csv 换行:Windows 下写 CSV 用
newline='',否则每行间出现空行导致 sheet_set_range_value_by_csv 报列数不一致。 - Alice 调用纪律:prompt 与预检必须完全一致;
--no-wait前台阻塞;不换措辞重试(会判相似任务 exit=76);完成标志是ALICE_FINANCIAL_COPILOT_DONE且 promptHash 一致;不要读 download/ 附件。 - 舆情主体甄别:严格按全称核对,排除同名主体;区分"本体负面/间接负面/或有负面/母公司关联负面"。
- 杠杆率口径:按市值口径(与估值表一致);定位汇总行按「资产类合计/负债类合计/基金资产净值」标签,勿用行号硬编码。
- win32com 后期绑定:Excel
SaveAs需位置参数(SaveAs(path, 51));PowerShell 工具在部分环境 stdout 被吞,Bash 运行 node 可看完整输出。 - 敏感信息:API Key 只存
~/.wind-alice/config.env,技能/脚本/交付物中不得出现。 - 久期必须用行权口径修正久期:永续债/含权债禁止用到期口径(麦考利)久期——到期口径对永续债 ≈ (1+r)/r,会给出十几至几十年(如 25冀中能源MTN006 到期 18.44 年 vs 行权 2 年多)的"假久期"。取数 prompt 显式声明行权口径,回填后对异常大久期做复核。
- YY 评级可得性:Wind 结构化字段通常无 YY 评级(实测 17 家主体仅 6 家可从公开研报确认);无数据时标注"无公开数据"并附外部评级/中债隐含评级,不得用外部评级冒充 YY 评级;城投/产业/金融三类 YY 评级不可跨类比较。
- 城投区域指标口径:宽口径债务率、财政自给率等按区域口径(政府+城投合并),须注明数据年度;主体短期债务/非标融资按发行主体合并报表;数据缺失标"—",不得臆造。
- 债种分类:私募/公募判定基于科目代码前缀与债券名称(PPN/ABN 关键词),勿仅凭"是否公开发行"猜断;同一科目代码段内可能存在 PPN/ABN,需以名称复核。
脚本
scripts/extract_bonds.py—— 读取估值表,输出债券清单(Wind 代码 + 名称 + 行列定位 + 债种分类:私募债/PPN/ABS/ABN/公募债),供构造 Alice promptscripts/gen_sentiment_prompts.py—— 从回填估值表提取去重发行主体,分批生成负面舆情查询 prompt(每批 ≤5 家)scripts/compute_weighted.py—— 从回填后的估值表计算加权指标,生成 Sheet2 CSVscripts/compute_leverage.py—— 从估值表汇总行计算产品杠杆率,生成 Sheet2 杠杆率区块 CSV- 用法见
使用说明.md