本文へ移動
cccskills
無料GitHub で公開

credit-analysis

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

インストール方法を見る

含まれるファイル(1)

  • SKILL.md31.5 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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.py、tests/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_bp、rolling_mean_bp、rolling_std_bp、z_score、 historical_percentile、change_1p_bp、change_lookback_bp、signal。 signal 取 "rich"(利差偏低、偏贵)/ "neutral" / "cheap"(利差偏高、偏便宜)。

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

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,不影响 d2、 default_probability 和 credit_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(中国资产证券化分析网)

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

ADR/H-share/A-share cross-listing premium analysis — track pricing gaps between US-listed ADRs, HK-listed H-shares, and A-shares for arbitrage signals, dual-listing valuation, and delisting risk assessment.

日本語の概要は準備中です。原文の説明を表示しています。

HKUDS/Vibe-Trading3.5万2026年10月12日 更新

akshare

無料

AKShare financial data aggregator (18k+ stars). Free, no API key. Covers A-shares, US, HK, futures, macro, forex. Primary fallback for tushare and yfinance.

日本語の概要は準備中です。原文の説明を表示しています。

HKUDS/Vibe-Trading3.5万2026年10月12日 更新

alpha-zoo

無料

Browse and bench the bundled alpha zoos — prebuilt cross-sectional factor libraries (Kakushadze 101, GTJA 191, Qlib 158, Fama-French / Carhart). Use when the user asks "which alphas exist", wants metadata on a named alpha, or wants to run IC/IR on a whole zoo over a universe.

日本語の概要は準備中です。原文の説明を表示しています。

HKUDS/Vibe-Trading3.5万2026年10月12日 更新

A 股 ST/*ST 风险预测框架 — 基于最新中报/三季报或业绩预告/快报,预测下一财年是否会因营收、利润、净资产、分红不达标而被风险警示,并将新浪监管处罚记录作为独立证据面纳入风险等级。仅适用于 A 股,不预测财务造假。

日本語の概要は準備中です。原文の説明を表示しています。

HKUDS/Vibe-Trading3.5万2026年10月12日 更新

Asset allocation theory and optimizer usage — MPT / Black-Litterman / risk budgeting / all-weather strategy, including guides for 5 optimizers and rebalancing rules.

日本語の概要は準備中です。原文の説明を表示しています。

HKUDS/Vibe-Trading3.5万2026年10月12日 更新

Diagnose failed or underperforming backtests, locate the root cause, and fix the issue

日本語の概要は準備中です。原文の説明を表示しています。

HKUDS/Vibe-Trading3.5万2026年10月12日 更新

HKUDS のスキルをすべて見る

このスキルの問題を報告する