CtrlK
BlogDocsLog inGet started
Tessl Logo

credit-analysis

固收与信用分析:信用债评级、利差分析、违约风险评估、城投债研究、可转债定价与策略。

60

Quality

70%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./agent/src/skills/credit-analysis/SKILL.md
SKILL.md
Quality
Evals
Security

Credit Analysis Skill — 固收与信用分析

适用场景

当用户提出以下类型问题时,优先调用本 skill:

  • 债券定价、YTM 计算、久期/凸性分析
  • 企业信用评级、违约概率估算
  • 信用利差分析与交易策略
  • 城投债、ABS/MBS 信用评估
  • 利率风险管理(DV01、关键利率久期)
  • 中国固收市场结构分析

一、信用分析框架

1.1 信用评级体系

主体评级 vs 债项评级

类型定义评级对象
主体评级(Issuer Rating)发行人整体偿债能力企业、政府、金融机构
债项评级(Issue Rating)特定债券的信用质量具体债券,考虑抵押品、优先级、契约条款

债项评级可高于或低于主体评级(取决于担保结构)。

标准普尔 / 穆迪 / 中国评级对照

S&PMoody's中国评级含义
AAAAaaAAA最高信用质量,极低违约风险
AA+/AA/AA-Aa1/Aa2/Aa3AA+/AA/AA-高质量,极低违约风险
A+/A/A-A1/A2/A3A+/A/A-较高信用质量
BBB+/BBB/BBB-Baa1/Baa2/Baa3BBB+/BBB/BBB-投资级下限(IG/HY分水岭)
BB+及以下Ba1及以下BB+及以下高收益/投机级
DDD违约

中国特点:国内评级虚高,AA级在国内约等同于国际BBB-,需结合评级展望(正面/稳定/负面)综合判断。


1.2 Altman Z-Score 模型

用于预测企业财务困境,原始模型适用于上市制造业:

Z = 1.2×X1 + 1.4×X2 + 3.3×X3 + 0.6×X4 + 1.0×X5
变量计算公式含义
X1营运资本 / 总资产流动性
X2留存收益 / 总资产盈利积累
X3EBIT / 总资产盈利能力
X4股权市值 / 总负债账面值财务杠杆
X5销售收入 / 总资产资产效率

判断区间

  • Z > 2.99:安全区(低违约风险)
  • 1.81 < Z < 2.99:灰色区(需深入分析)
  • Z < 1.81:危险区(高违约风险)

改进版本

  • Z'(私有企业):X4改用股权账面值,临界值2.90/1.23
  • Z''(非制造业/新兴市场):去掉X5,临界值2.60/1.10

局限性

  • 基于历史数据,滞后性强
  • 不适用金融类企业(杠杆定义不同)
  • 中国市场需重新标定参数

1.3 Merton 结构化模型

将公司股权视为对公司资产的看涨期权(执行价格=债务面值):

核心假设

  • 公司资产价值 V 遵循几何布朗运动:dV = μV dt + σ_V V dW
  • 债务为零息债,面值 D,到期日 T
  • 违约仅在 T 时刻发生(欧式违约设定)

股权定价(BS公式)

E = V·N(d1) - D·e^(-rT)·N(d2)

d1 = [ln(V/D) + (r + σ_V²/2)T] / (σ_V·√T)
d2 = d1 - σ_V·√T

违约概率(风险中性)

PD = N(-d2)

距违约距离(DD, Distance to Default)

DD = [ln(V/D) + (μ - σ_V²/2)T] / (σ_V·√T)

信用利差估算

信用利差 ≈ -ln[N(d2) + (V/D·e^(rT))·N(-d1)] / T

参数估算方法(联立方程组):

  1. E = V·N(d1) - D·e^(-rT)·N(d2)
  2. σ_E·E = N(d1)·σ_V·V

1.4 KMV 模型(预期违约频率 EDF)

KMV 是 Merton 模型的商业化实现,由穆迪收购:

步骤

  1. 用股价和股权波动率反推资产价值 V 和资产波动率 σ_V
  2. 计算违约触发点(Default Point):DP = 短期债务 + 0.5×长期债务
  3. 计算距违约距离:DD = (V - DP) / (V × σ_V)
  4. 通过历史违约数据库将 DD 映射为 EDF(非正态映射)

与 Merton 的区别

  • 违约触发点不是全部债务,而是短期+半长期
  • DD→EDF 映射基于实证数据库,非正态分布假设
  • EDF 是真实世界概率,而非风险中性概率

EDF 参考区间(约):

  • EDF < 0.1%:投资级
  • 0.1%–1%:BBB-BB 级
  • 1%–5%:B 级
  • EDF > 5%:CCC 及以下

1.5 信用评分卡方法论

适用于零售信贷/ABS 底层资产分析:

建模流程

  1. 数据准备:收集历史贷款数据,定义违约标签(如逾期90天+)
  2. 特征工程:WOE(Weight of Evidence)编码
  3. 特征选择:IV值(Information Value)筛选,IV>0.02保留
  4. 模型训练:Logistic Regression(主流)、XGBoost
  5. 评分转换Score = A - B×ln(odds),通常基准分600,PDO=20

WOE 和 IV 计算

WOE_i = ln(好样本比例_i / 坏样本比例_i)
IV_i = (好样本比例_i - 坏样本比例_i) × WOE_i
总IV = Σ IV_i

IV 参考标准

  • IV < 0.02:无预测力
  • 0.02–0.1:弱预测力
  • 0.1–0.3:中等预测力
  • IV > 0.3:强预测力

二、固收产品分析

2.1 国债与政府债

收益率曲线分析

即期利率曲线(Zero Curve):各期限无风险零息债收益率,通过 Bootstrap 方法从附息债提取。

远期利率曲线(Forward Curve)

f(T1, T2) = [(1+r2)^T2 / (1+r1)^T1]^(1/(T2-T1)) - 1

期限利差

  • 10Y-2Y:经济周期预判指标,负值通常预示衰退
  • 10Y-1Y:流动性偏好衡量指标
  • 30Y-10Y:超长端供需判断

收益率曲线形态

形态特征经济含义
正斜率(Normal)长端>短端经济扩张预期
平坦(Flat)各期限相近经济转折点
倒挂(Inverted)短端>长端衰退信号
驼峰(Humped)中端最高流动性分层

中国国债收益率曲线特点

  • 基准曲线:中国国债(CGBs)+ 国开债(Policy Bank Bonds)
  • 关键点位:1Y/3Y/5Y/7Y/10Y/30Y
  • 10Y国债为核心基准利率

2.2 企业债分析

核心指标

票面利率(Coupon Rate):发行时约定,按面值计息。

到期收益率 YTM(Yield to Maturity): 使 债券现值 = 市场价格的内部收益率:

P = Σ [C/(1+y)^t] + F/(1+y)^n

其中 C=票息,F=面值,y=YTM,n=期数。

当期收益率(Current Yield)CY = 年票息 / 市场价格(忽略本金损益)

修正久期(Modified Duration)

MD = -dP/P ÷ dy = Macaulay Duration / (1+y/m)

含义:利率每变化1%,债券价格变化约MD%(反向)。

凸性(Convexity)

CX = [Σ t(t+1)·CF_t/(1+y)^(t+2)] / P
价格变化修正:ΔP/P ≈ -MD·Δy + 0.5·CX·(Δy)²

债券价格公式(实现)

定价函数是仓库里的实测代码,直接 import,不要在会话里重新手写

from src.quantlib.fixedincome import bond_price

bond_price(face=100, coupon_rate=0.05, ytm=0.04, n_periods=5, freq=1)
# -> 104.4518...   5年期、票息5%、YTM=4%、年付

两个约定在这里是显式参数,不是隐含假设:

  • compounding"discrete"(默认,每年 freq 次离散复利,即上面 P = Σ C/(1+y/m)^t 的形式)或 "continuous"
  • 日算基准:bond_price 按整数付息期贴现,因此返回的是付息日的价格(净价,应计为 0)。 非付息日结算要另加应计利息才是全价(脏价):
import datetime as dt
from src.quantlib.fixedincome import accrued_interest

accrued = accrued_interest(
    face=100, coupon_rate=0.05, freq=2,
    last_coupon=dt.date(2024, 1, 15),
    settlement=dt.date(2024, 4, 15),
    next_coupon=dt.date(2024, 7, 15),
    day_count="30/360",   # ACT/365F(默认) | ACT/360 | ACT/ACT | 30/360 | 30E/360
)                          # -> 1.25
dirty_price = bond_price(100, 0.05, 0.04, 10, 2) + accrued

2.3 可转债(纯债部分)

可转债的转股期权部分详见 convertible-bond skill,本节聚焦纯债价值。

纯债价值(Bond Floor)

纯债价值 = Σ [票息/(1+r_straight)^t] + 面值/(1+r_straight)^n

其中 r_straight 为同评级同期限直债收益率。

转股溢价率与纯债溢价率

  • 转股溢价率 = (可转债价格 - 转股价值) / 转股价值
  • 纯债溢价率 = (可转债价格 - 纯债价值) / 纯债价值

下修条款信用含义: 下修转股价可能导致摊薄,需评估公司意愿(强赎冲动 vs 回售压力)。


2.4 ABS/MBS 分析

底层资产分析框架

资产质量指标

  • 加权平均票息(WAC)
  • 加权平均剩余期限(WAM)
  • 加权平均贷款价值比(LTV)
  • 历史逾期率(DPD 30/60/90+)
  • 累计违约率(CDR,Cumulative Default Rate)

早偿率模型

  • CPR(Conditional Prepayment Rate):年化早偿率
  • SMM(Single Monthly Mortality):月早偿率
    CPR = 1 - (1 - SMM)^12
    SMM = 1 - (1 - CPR)^(1/12)
  • PSA 模型:标准早偿假设(PSA100 = 前30个月线性增至6%/年,之后6%/年恒定)

分层结构(Tranche)分析

  • 优先级(Senior):最先受偿,评级最高
  • 夹层(Mezzanine):次级受偿
  • 劣后级(Equity/Junior):首先吸收损失,超额利差归属

关键风险指标

增信倍数 = (底层资产池规模 - 优先级规模) / 优先级规模
超额利差 = 底层资产池利率 - 优先级融资成本 - 服务费

2.5 城投债信用分析

城投债(LGFV,地方政府融资平台债)是中国固收市场特有品种。

分析框架

四维评估模型

维度核心指标权重
区域财政实力一般公共预算收入、GDP规模、财政自给率40%
平台层级省级>市级>区县级,级别越高隐性支持越强25%
平台地位是否唯一城投、资产注入力度、业务多元化20%
债务结构有息负债规模、短期债务占比、再融资压力15%

隐性债务风险信号

  • 城投货币资金/短期债务 < 0.5(流动性紧张)
  • EBITDA利息覆盖率 < 1(依赖外部融资付息)
  • 非标融资占比>30%(再融资风险高)
  • 区县级城投、弱区域(负债率>100%)

城投估值溢价结构(参考):

城投利率 ≈ 同期国债 + 流动性溢价(30-50bp) + 区域溢价(0-200bp) + 平台溢价(0-100bp)

政策风险:2023年城投化债政策后分化加剧,关注:

  • 一揽子化债进度
  • 平台转型(城投转企业)
  • 区域名单管理政策

三、利率风险管理

3.1 久期体系

Macaulay Duration(麦考利久期)

时间加权现金流现值之和,单位为"年":

D_mac = Σ [t × CF_t/(1+y)^t] / P

Modified Duration(修正久期)

利率敏感性度量:

D_mod = D_mac / (1 + y/m)
ΔP ≈ -D_mod × P × Δy

Effective Duration(有效久期)

适用于含权债券(可赎回债、MBS等):

D_eff = (P_down - P_up) / (2 × P_0 × Δy)

其中 P_down/P_up 为利率下移/上移Δy后的价格。

Dollar Duration(久期金额)

Dollar Duration = D_mod × P × 面值

3.2 凸性(Convexity)

衡量久期对利率的敏感性(二阶效应):

C = Σ [t(t+1) × CF_t/(1+y)^(t+2)] / P

价格精确估算:
ΔP/P ≈ -D_mod·Δy + 0.5·C·(Δy)²

凸性的价值:正凸性使债券在利率下行时涨幅大于预期(利率上行时跌幅小于预期),因此正凸性债券比负凸性债券(如可赎回债、MBS)更受青睐。


3.3 DV01(基点价值)

利率变动1基点(0.01%)导致的价格变化:

DV01 = D_mod × P × 0.0001

组合层面:Portfolio DV01 = Σ (DV01_i × 持仓量_i)

用途:利率对冲比率计算

对冲比率 = DV01_被对冲头寸 / DV01_对冲工具

3.4 关键利率久期(Key Rate Duration, KRD)

衡量收益率曲线各关键期限平行移动1bp对价格的影响:

  • 常用关键点:1Y, 2Y, 3Y, 5Y, 7Y, 10Y, 20Y, 30Y
  • KRD_i = -ΔP/(P × Δy_i)(仅第i个关键利率变动1bp)
  • Σ KRD_i ≈ D_mod(各关键利率久期之和约等于修正久期)

应用

  • 识别组合对特定期限利率的暴露
  • 精确对冲非平行移动风险(扭曲/蝶式)

3.5 免疫策略

久期匹配(Duration Matching): 使资产组合久期 = 负债久期,对利率平行移动免疫。 条件:Σ (w_i × D_i) = D_liability

现金流匹配(Cash Flow Matching): 直接匹配每期现金流,彻底消除再投资风险,但灵活性差、成本高。

条件免疫(Contingent Immunization): 当组合价值超过安全底线时主动管理,跌至底线时切换为被动免疫。

再平衡频率

  • 久期随时间漂移,需定期(季度/月度)再平衡
  • 利率大幅变动(>50bp)后立即再平衡

四、信用利差分析

4.1 信用利差的构成

信用利差(Credit Spread)= 违约风险溢价 + 流动性溢价 + 税收溢价(部分市场)
组成部分影响因素量化方式
违约风险溢价评级、行业、财务状况、宏观周期CDS报价、模型测算
流动性溢价发行规模、剩余期限、市场深度买卖价差、换手率
税收溢价国债免税优惠(部分国家/投资者)利率差异分析

利差衡量基准

  • 国际市场:G-Spread(vs 国债)、I-Spread(vs 掉期)、Z-Spread(零息利差)、OAS(期权调整利差)
  • 中国市场:信用利差通常对比国债或AAA城投

OAS(Option-Adjusted Spread): 剥离嵌入期权价值后的信用利差,适用于含权债比较:

P = Σ CF_t / (1 + r_t + OAS)^t

4.2 信用利差曲线形态

正斜率(常见):长期利差 > 短期利差,反映期限不确定性叠加。

平坦/倒挂

  • 市场对长期信用风险乐观(平坦)
  • 短期流动性危机/再融资困境(倒挂),警示信号

信用利差与国债收益率的相关性

  • 经济扩张:信用利差收窄(风险偏好上升)
  • 经济衰退/信用事件:信用利差走阔
  • "逃向质量"效应:国债收益率下行+信用利差扩大,双重打击高收益债

4.3 信用利差变化的驱动因素

宏观因素

  • GDP增速、PMI:预期改善→利差收窄
  • 货币政策宽松:流动性溢价下降
  • 信用事件(违约潮):系统性利差走阔

行业因素

  • 行业政策(如地产调控、城投化债)
  • 行业景气周期
  • 再融资环境

个券因素

  • 评级调整(下调→利差跳升)
  • 财务数据变化
  • 到期压力(临近到期→流动性利差增加)

4.4 信用利差交易策略

利差压缩交易(Spread Tightening): 做多被低估(高利差)信用债,做空国债对冲利率风险。

  • 适用场景:经济复苏初期、央行宽松周期

利差扩大交易(Spread Widening): 做空信用债(通过CDS),做多国债。

  • 适用场景:经济下行、信用事件频发

跨评级利差交易: 做多高收益/做空投资级(利差压缩时),或相反。

蝶式利差交易(Butterfly): 做多中期、做空短端和长端,获利于信用曲线中段的相对价值。

中国特色工具

  • 信用风险缓释工具(CRMW/CDS):对冲信用风险
  • 国债期货:对冲利率久期风险

五、Python 实现(quantlib)

本章的模型已经是仓库里的实测代码,位于 src/quantlib/fixedincome.py(债券数学 + 曲线拟合) 与 src/quantlib/credit.py(Altman Z / Merton-KMV / 利差)。两个模块都有对应的 tests/quantlib/test_fixedincome.pytests/quantlib/test_credit.py,久期与 DV01 是对 "重新定价 ±1bp" 逐点核过的。

直接 import 调用,不要在会话里重写这些公式。 手写一遍既拿不到测试保障,也不可复现。

一律的单位约定:利率与比率是小数(0.05 表示 5%),期限与时间跨度是, 久期/凸性的返回值是年 / 年²(不是付息期数),带 _bp 后缀的才是基点。

5.1 债券定价、久期与 DV01

from src.quantlib.fixedincome import (
    bond_price, ytm_solve, macaulay_duration, modified_duration,
    convexity, dv01, effective_duration,
)

face, coupon, ytm, n, freq = 100, 0.05, 0.04, 5, 1

price = bond_price(face, coupon, ytm, n, freq)          # 104.4518
ytm_solve(price, face, coupon, n, freq)                 # 0.04(价格反解 YTM)

macaulay_duration(face, coupon, ytm, n, freq)           # 4.5571 年
modified_duration(face, coupon, ytm, n, freq)           # 4.3818 年
convexity(face, coupon, ytm, n, freq)                   # 24.4766 年²
dv01(face, coupon, ytm, n, freq, par_amount=1_000_000)  # 457.69 元/bp

参数要点

参数说明
freq每年付息次数,1=年付、2=半年付。所有函数都接受,绝不写死
compounding"discrete"(默认)或 "continuous"。连续复利下修正久期恒等于 Macaulay 久期
par_amountdv01 的持仓面值,默认 100 万;对冲的市值按 par_amount * price / face
bracketytm_solve 的求根区间,默认 (-0.5, 10.0),覆盖所有可交易债券

含权债(可赎回债、MBS)的现金流会随利率移动,解析久期不适用,改用重新定价法:

d_eff = effective_duration(reprice=lambda y: my_oas_model(y), yield_level=0.04, bump=1e-4)

reprice 必须自带赎回/早偿逻辑;effective_duration 只负责 (P_down - P_up) / (2·P₀·Δy)

5.2 收益率曲线拟合(Nelson-Siegel / Svensson)

import numpy as np
from src.quantlib.fixedincome import fit_yield_curve, nelson_siegel, svensson

maturities = np.array([0.25, 0.5, 1, 2, 3, 5, 7, 10, 20, 30])
yields     = np.array([0.019, 0.020, 0.022, 0.024, 0.025, 0.027, 0.028, 0.029, 0.033, 0.035])

fit = fit_yield_curve(maturities, yields, model="svensson")
fit.params      # (beta0, beta1, beta2, beta3, lambda1, lambda2)
fit.rmse        # 拟合残差(小数,与输入同单位)
fit(4.5)        # 任意期限插值 -> 该点即期利率
fit([1, 5, 10]) # 也接受数组

fit_yield_curve 返回一个 CurveFit 对象(不是 (params, func) 元组):它本身可调用, 同时带 model / params / rmse 三个只读字段。model"nelson_siegel"(4 参数) 或 "svensson"(6 参数,双曲率因子)。

拟合方式是可分离最小二乘:给定衰减参数 λ 后 β 是线性的,用 OLS 精确求解, 只对 1~2 个 λ 做网格 + Nelder-Mead 搜索。这一点很要紧——对全部参数一起做单点起始的 L-BFGS-B(本 skill 早先模板的做法)连自己生成的曲线都还原不回来: 在 10 个期限的无噪 Nelson-Siegel 曲线上它停在 RMSE 6.4e-4(6.4bp), 而现在这个实现是 4.0e-14。

需要直接按参数取值(例如做因子分解、做情景模拟)时用底层函数:

nelson_siegel(tau=[1, 5, 10], beta0=0.045, beta1=-0.02, beta2=0.03, lambda1=2.5)
svensson(tau=5.0, beta0=0.05, beta1=-0.03, beta2=0.04, beta3=-0.02,
         lambda1=1.2, lambda2=8.0)

beta0 是水平因子(长端渐近利率),beta0 + beta1 是瞬时短端利率, beta2 / beta3 是曲率因子,lambda* 是衰减速度(年)。传标量返回标量,传数组返回数组。

5.3 Altman Z-Score 计算

from src.quantlib.credit import altman_z_score

z = altman_z_score(
    working_capital=200,      # X1 分子:流动资产 - 流动负债
    retained_earnings=300,    # X2 分子:留存收益
    ebit=150,                 # X3 分子:息税前利润
    equity_value=900,         # X4 分子:original 用股权市值,prime/double_prime 用账面净资产
    total_liabilities=600,    # X4 分母:全部负债的账面值
    total_assets=1000,        # X1/X2/X3/X5 的分母
    revenue=1200,             # X5 分子;double_prime 不需要,可省略
    model="original",         # original | prime | double_prime
)

z.z_score            # 3.255
z.zone               # "safe" | "grey" | "distress"
z.label_zh           # "安全区(低违约风险)"
z.components         # {"x1": 0.20, "x2": 0.30, "x3": 0.15, "x4": 1.50, "x5": 1.20}
z.safe_threshold     # 2.99
z.distress_threshold # 1.81

三个变体的系数与临界值在 ALTMAN_MODELS 里,与 §1.2 的表格一一对应:

model适用对象系数 (X1..X5)安全 / 危险
original上市制造业(Altman 1968)1.2 / 1.4 / 3.3 / 0.6 / 1.0> 2.99 / < 1.81
prime(Z')私有企业,X4 改用账面净资产0.717 / 0.847 / 3.107 / 0.420 / 0.998> 2.90 / < 1.23
double_prime(Z'')非制造业 / 新兴市场,去掉 X56.56 / 3.26 / 6.72 / 1.05 / —> 2.60 / < 1.10

X4 的分母是「全部负债」,不是「有息负债」。 §1.2 的变量表写的是"总负债账面值", 参数名 total_liabilities 与模型定义一致。用有息负债代入会系统性高估 Z 值。

同一份报表在三个变体下给出的分区可以不同(上例:original 安全区、prime 灰色区), 这正是重新标定的意义,不是矛盾。

5.4 信用利差分析

from src.quantlib.credit import credit_spread_analysis, spread_term_structure

df = credit_spread_analysis(
    bond_yields=bond_ytm_series,       # pd.Series,索引=日期
    risk_free_yields=cgb_ytm_series,   # 必须与上面同一个索引
    window=252,                        # 滚动窗口(交易日)
    lookback_periods=21,               # 慢速变化列的回溯期
    signal_z=1.5,                      # 触发 rich/cheap 的 |z| 阈值
    input_unit="percent",              # percent | decimal | bp
)

返回的 DataFrame 列固定为:spread_bprolling_mean_bprolling_std_bpz_scorehistorical_percentilechange_1p_bpchange_lookback_bpsignalsignal"rich"(利差偏低、偏贵)/ "neutral" / "cheap"(利差偏高、偏便宜)。

historical_percentile 是全样本排名,带前视偏差,不能当回测信号用。 它把每一行 和它之后的行一起排序——同一天的分位数会随着新数据到来而改变(实测:同一行在 50 行 切片上是 0.02,在 100 行上变成 0.01)。这是原模板的行为,保留是为了不静默改变口径。 z_scoresignal 走滚动窗口,是因果的,要做信号用这两个。

grid = spread_term_structure(
    issuers={"AAA城投": {1: 0.025, 3: 0.028, 5: 0.032},
             "AA城投":  {1: 0.032, 3: 0.041, 5: 0.055}},
    risk_free_curve={1: 0.020, 3: 0.022, 5: 0.025},
    input_unit="decimal",   # 注意默认值与上面那个函数不同
    decimals=1,
)
# 行=发行人,列=1Y_spread_bp / 3Y_spread_bp / 5Y_spread_bp

输入单位必须自己确认。 两个函数的历史默认值不一致:credit_spread_analysis 默认收益率是百分数3.2 表示 3.2%),spread_term_structure 默认是小数0.032)。 默认值保留了原模板的行为,但 input_unit 现在是显式参数——喂数据前先看清楚手里的序列是哪一种, 搞反就是 100 倍的利差。

5.5 Merton 结构化模型与 KMV

from src.quantlib.credit import (
    merton_model, merton_asset_solve, distance_to_default,
    kmv_default_point, kmv_distance_to_default, edf_reference_band,
)

m = merton_model(
    equity_value=100,   # 股权市值
    equity_vol=0.40,    # 股权年化波动率
    debt_face=100,      # 债务面值(简化为单笔零息债)
    risk_free=0.03,     # 连续复利无风险利率
    horizon=1.0,        # 债务到期年限
    asset_drift=None,   # 距违约距离用的资产漂移;None = 用 risk_free(风险中性口径)
)

m.asset_value           # 197.04  反推出的资产价值
m.asset_vol             # 0.2030  反推出的资产波动率
m.distance_to_default   # 3.3868  asset_drift=None 时等于 d2
m.default_probability   # 0.000354  风险中性违约概率 N(-d2)
m.credit_spread_bp      # 0.176 bp

联立方程(§1.3 的两式)在 merton_asset_solve 里解,且是在对数空间求解的, 所以根不会跑到负资产或负波动率上;不收敛会直接抛 ValueError,不会静默返回垃圾解。

Merton 与 KMV 的 DD 是两个不同的量,不要混用

# Merton:对数空间、带漂移与期限
distance_to_default(asset_value=200, asset_vol=0.25, default_point=100,
                    horizon=2.0, drift=0.06)

# KMV:线性缺口,无期限无漂移,违约点只含短债 + 部分长债
dp = kmv_default_point(short_term_debt=100, long_term_debt=200,
                       long_term_weight=0.5)      # -> 200
kmv_distance_to_default(asset_value=1000, asset_vol=0.25, default_point=dp)  # -> 3.2

edf_reference_band(3.2)   # -> (0.001, 0.01),即 §8 表里的 0.1%–1% 档

edf_reference_band 只是把 §8 那张"DD → EDF"经验表做成了查表函数。 真正的 KMV EDF 来自穆迪的专有违约数据库,这里的输出只能当量级校验, 绝不能当作已标定的违约概率报出去。

风险中性 vs 真实世界asset_drift 只影响 distance_to_default,不影响 d2default_probabilitycredit_spread——后三者按定义就是风险中性的。想看真实世界口径, 传一个预期资产回报进去,然后配 edf_reference_band 读档,不要拿 N(-dd) 当 EDF 报。


六、中国固收市场特色

6.1 市场结构

银行间市场 vs 交易所市场

维度银行间市场(CFETS)交易所市场(上交所/深交所)
监管机构人民银行证监会
主要参与者银行、保险、基金、外资券商、基金、个人投资者
交易方式询价(OTC)+ 匿名点击集中撮合 + 大宗交易
主要品种国债、政金债、信用债、ABS企业债、公司债、可转债
规模占比~90%(以交易量计)~10%
结算方式T+0/T+1(DVP)T+1
流动性高(国债/政金债)高(可转债)/低(纯债)

主要债券品种

品种发行主体监管/注册信用风险
国债(CGBs)财政部无限制无(主权信用)
地方政府债各省市政府财政部审批极低
政策性银行债(国开/农发/进出口)政策行无限制极低(准主权)
同业存单(NCD)银行央行低(银行信用)
超短期融资券(SCP)/ 短融(CP)/ 中票(MTN)非金融企业交易商协会(NAFMII)
企业债企业发改委中高
公司债上市公司证监会中高
城投债地方融资平台多元中高(隐性政府背书)
ABS/ABNSPVNAFMII/证监会取决于底层资产

6.2 城投债深度分析要点

一级市场分析(发行定价):

  1. 核查发行人层级和区域(省/市/区县)
  2. 审查主业占比(基础设施业务vs商业化业务比例)
  3. 评估区域一般公共预算收入和政府负债率
  4. 分析近3年城投流转资产的真实性(往来款异常)

二级市场分析(持仓估值):

  1. 跟踪利差变化(vs 同评级同期限)
  2. 关注舆情事件(技术性违约/商票逾期/评级下调)
  3. 监测再融资节奏(到期压力 vs 新发节奏)
  4. 关注区域政策(化债名单、债务置换进度)

风险预警信号(红线)

  • 货币资金/短期债务 < 0.3
  • 非标融资/有息负债 > 40%
  • 商票逾期被纳入系统(票据失信名单)
  • 所在区域城投整体再融资受阻
  • 管理层人事变动叠加区域评级负面展望

6.3 理财/资管产品信用分析

净值化转型后的底层穿透分析

  • 混合型理财:需分别评估权益端(市值波动)和固收端(信用风险)
  • 固收+策略:主体80%+债券,20%-以内权益/可转债
  • FOF型理财:两层嵌套穿透,需评估底层基金持仓

流动性分析框架

产品层面流动性 = f(底层资产流动性, 赎回条款, 摊余成本法 vs 市值法)
  • 摊余成本法:价格稳定但隐藏风险(不适用净值化产品)
  • 市值法:反映真实价值,但波动暴露可能引发赎回潮

底层信用评估步骤

  1. 获取债券持仓明细(季报/半年报披露)
  2. 按评级/行业/城投/非城投分类
  3. 计算加权信用利差
  4. 识别集中度风险(单券 > 5%为高集中度)
  5. 评估流动性梯度(高流动→低流动覆盖度)

6.4 违约案例分析方法论

违约类型

类型特征中国典型案例
流动性违约资产健康但现金流断裂部分中小房企
技术性违约触发条款(交叉违约/加速到期)多见于弱资质主体
经营性违约主业恶化导致还款能力下降永煤、华晨(2020)
欺诈性违约财务造假/资产腾挪康美药业、蓝盛博

违约前沿信号(Precursor Signals)

财务层面:
  - 应收账款/总资产 异常增高(虚增收入)
  - 货币资金余额高但受限比例高
  - 商誉/无形资产占比持续增大
  - 关联方交易占比异常

市场层面:
  - 二级市场价格持续下跌(跌破90)
  - 信用利差快速走阔(单周>50bp)
  - 主承销商更换或不参与后续发行
  - CDS报价(如有)快速上升

评级层面:
  - 评级列入负面观察
  - 多家评级机构下调
  - 展望由稳定下调至负面

事后分析框架(Post-Default Analysis)

  1. 违约触发时点与资金流向重构
  2. 资产负债表"真实性"评估(区分真实资产 vs 账面资产)
  3. 债权优先级梳理(担保顺序、抵质押品)
  4. 处置预期回收率估算(Recovery Rate)
  5. 系统性风险传染路径(交叉持有、同类主体)

中国市场回收率参考

  • 城投债(技术性违约后化解):接近100%
  • 房企违约:约20%-50%(取决于土储质量)
  • 工业企业违约:约30%-60%
  • 金融机构(非银):约40%-70%(监管介入程度)

七、与其他 Skill 的关联

相关 Skill互补关系
convertible-bond可转债转股期权部分由 convertible-bond skill 处理,本 skill 负责纯债定价和信用风险
macro-analysis宏观利率环境和信用周期判断由 macro skill 提供输入
risk-management组合层面信用风险(VaR/CVaR)参考 risk-management skill
equity-fundamental信用分析与股权估值共享财务报表分析框架,Altman Z-Score两侧均适用

八、快速参考

常用公式速查

YTM 近似公式:
  YTM ≈ [C + (F-P)/n] / [(F+P)/2]

久期与价格变化:
  ΔP ≈ -D_mod × P × Δy + 0.5 × CX × P × (Δy)²

DV01 = D_mod × P × 0.0001 × 持仓面值

信用利差 = 债券YTM - 同期限国债YTM

Z-Score 风险信号:
  Z > 2.99 → 安全   1.81 < Z < 2.99 → 灰色   Z < 1.81 → 危险

违约距离 DD → EDF:
  DD > 4: EDF < 0.1%
  DD 2-4: EDF 0.1%-1%
  DD 1-2: EDF 1%-5%
  DD < 1: EDF > 5%

中国固收数据源

数据类型推荐来源
国债收益率曲线中央结算公司(CCDC)、财政部官网
信用债行情Wind、DM数据
城投财务数据发债主体年报、Wind
评级报告中诚信、联合资信、东方金诚官网
违约数据Wind、中国债券信息网(chinamoney.com.cn)
ABS数据CNABS(中国资产证券化分析网)
Repository
HKUDS/Vibe-Trading
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.