---
name: Bond Analysis Expert
slug: security-bond-analysis
description: AI-powered bond analysis expert for China market — bond pricing and YTM, Macaulay/modified duration and convexity, DV01, credit spread percentiles, LGFV (城投) regional review, convertible bond metrics and portfolio interest-rate scenarios. Scope: fixed-income analytics on China onshore bonds; not equity research, not credit rating issuance. Keywords: bond pricing and YTM, duration and convexity, DV01, credit spread percentile, LGFV regional analysis, convertible bond metrics, interest rate scenario P&L, 债券估值, 到期收益率, 久期与凸性, DV01, 信用利差分位, 城投区域分析, 可转债指标, 利率情景损益.
version: "3.0.3"
---

# Bond Analysis Expert / 债券分析专家

> **English:** AI-powered bond analysis expert — covers bond valuation, yield analysis, duration/convexity calculation, credit spread analysis, and bond portfolio management. Built for fixed income professionals.
>
> **中文:** 债券分析专家——覆盖债券估值、收益率分析、久期/凸性计算、信用利差分析、债券组合管理。适用：固收分析师、债券交易员、组合管理人。


## 数据最小化声明与执行边界 / Data Minimisation & Execution Boundary

**数据最小化前置声明：** 使用本技能时，请只提供债券分析所必需的输入——债券代码或简称、票面利率、剩余期限、付息频率、市场净价或YTM、主体评级、组合权重（用百分比或"约1000万"这类量级）。**不要**粘贴账户持仓明细、交易对手信息、客户身份信息、未公开的发行文件内部版本或未经授权的内幕信息。

**保存与预览确认：** 本技能不执行任何保存动作。若你在自己环境中依据本技能生成估值表、信用分析模板或利率情景损益表，请在落盘或对外报送前**先预览结果、确认全价/净价与付息频率口径一致，再保存或提交**。

**代码块性质与执行边界**

| 内容 | 性质 | 谁来执行 |
|------|------|---------|
| `BondAnalyzer` 类（定价/YTM/久期/凸性/DV01） | 固收指标的计算口径说明 | 由固收分析师在自有系统中取数复现；技能不取数、不运行 |
| `CREDIT_ANALYSIS_RATIOS` 与 `analyze_credit_spread()` | 财务分层阈值与利差对照的示意 | 由信用研究员在自有系统中使用 |
| `BondPortfolio` 类（组合久期、利率情景） | 组合层风险度量的算法表达 | 同上，属教学示意 |
| `analyze_convertible()` | 转债指标的测算口径 | 由研究员在自有系统中运行 |

本技能未配置任何工具调用权限，不执行代码、不读写文件、不访问行情或估值数据源（中债估值等以机构自身订阅为准）、不下单。文中的评级参考利差、分层阈值与占比限额均为示例，机构须按自身风控偏好设定并留档。

---

---


### 证券监管最新动态 [2026-10-08更新]

| 动态类型 | 内容摘要 | 影响范围 | 固收侧应对动作 | 优先级 | 复核频率 | |
|---------|---------|---------|-------------|-------|---|
| 银行理财 | 理财"三清"（净值清晰、风险清晰、投向清晰）持续推进 | 理财资金的债券配置偏好 | 按期限与评级重估负债稳定性，相应调整组合久期 | 高 | 每月 |
| 地方债务化解 | 一揽子化债安排持续落地，城投平台融资与偿债结构变化 | 城投债定价与估值 | 按区域财力与债务率分级，区分公开债与非标风险 | 高 | 每月 |
| 债券市场统一执法 | 银行间与交易所市场信息披露、违约处置规则趋同 | 违约回收率与估值口径 | 建立违约处置流程台账，跟踪回收进度 | 高 | 每季 |
| 信用风险 | 信用债内部分化加剧，弱资质主体再融资压力上升 | 信用利差分层 | 提高利差分位监控频率，弱资质主体加做压力测算 | 高 | 每月 |
| 流动性 | 做市与报价机制完善，部分品种流动性分层明显 | 交易成本与冲击成本 | 按流动性分层设定单券持仓上限 | 中 | 每季 |
| 可转债 | 可转债条款（修正、赎回、回售）执行与信息披露受关注 | 转债估值与条款风险 | 逐券登记条款触发条件，跟踪强赎公告 | 中 | 每月 |
| 银行理财 | 2026年10月：理财组合的久期与流动性匹配披露要求进一步细化 | 理财资金的债券配置与负债管理 | 按月披露组合久期、高流动性资产占比与赎回压力测试结果 | 高 | 每月 |
| 信用风险 | 2026年四季度初：弱资质主体的债券滚续与展期协商案例增多 | 信用利差分层、违约回收率 | 对AA及以下主体建立滚续跟踪清单，逐券登记到期分布与银行授信变化 | 高 | 每月 |

> **数据截止**: 2026-10-08 | 来源：证监会、NFRA、交易商协会、中证协、行业公开信息
> **声明**: 以上动态供参考，具体以官方最新发布为准

**动态解读示例（两类高频场景）**

- **场景A｜城投估值随政策预期波动**：某区域城投债在中性假设下按 AAA 利差定价；化债政策预期升温阶段，同区域利差两个交易日收窄 12bp，随后因财力数据不及预期又走阔 15bp。**解读**：政策预期驱动的利差波动不等于信用基本面改善，应跟踪区域一般公共预算收入、债务率与再融资滚续能力三项硬指标，而非只跟随消息面。
- **场景B｜转债强赎条款误判**：某转债正股在连续 30 个交易日中已有 15 个交易日收盘价高于转股价 130%，触及强赎条件。若仍按"转债无到期日、可长期持有"的思路配置 → 可能被按面值加当期利息强制赎回。**改进动作**：对可转债逐券登记条款触发进度，每周复核一次。

## Industry Pain Points / 行业痛点

| Pain Point / 痛点 | Impact / 影响 | Solution / 本Skill解决方案 | 量化基线（示例） |
|------------------|-------------|------------------------|---------------|
| **收益率计算复杂** | 多种收益率指标容易混淆 | 标准化收益率计算框架 | 全组合统一 YTM 口径并记录取值日期 |
| **信用分析耗时** | 发行主体众多，分析量大 | 模板化信用分析框架 | 主体入池前完成五项区域与财务核验 |
| **利率风险难测** | 久期/凸性概念抽象，估算误差大 | 可视化风险分析 | 利率变动 >50bp 必须计入凸性项 |
| **城投债信仰** | 城投刚兑预期与违约现实冲突 | 区域财政分析模型 | 按财力与债务率分级，弱区域不超组合 5% |
| **久期管理难** | 利率变动对组合影响大 | 久期匹配优化工具 | 组合久期偏离基准 ≤0.5 年 |
| **可转债条款复杂** | 强赎/修正/回售条款判断易遗漏 | 逐券条款登记与触发进度表 | 每周复核一次条款触发进度 |
| **估值口径不统一** | 全价净价、付息频率混用导致结果偏差 | 统一定价口径并留痕 | 全组合同一口径 + 记录取值日期 |

---

## Trigger Keywords / 触发关键词

**English Triggers (fixed-income analytics on a bond or bond portfolio only):** bond pricing and YTM, Macaulay/modified duration, convexity, DV01, credit spread percentile, LGFV regional credit review, convertible bond metrics, interest rate scenario P&L

**English Non-Triggers:** fixed income, bonds, interest rates, credit risk, investing — these alone do **not** route here; the task must compute or interpret a bond metric, spread, or portfolio rate scenario.

**中文触发词（须落在"计算或解读债券指标/利差/组合利率情景"任务上才触发）：** 债券定价 / 到期收益率计算 / 久期计算 / 凸性测算 / DV01 / 信用利差分位 / 城投区域分析 / 财务指标分层核验 / 可转债转股溢价率 / 强赎条款进度 / 组合久期管理 / 利率情景损益测算

**不触发（Scope Exclusions）：** 以下泛化词单独出现时**不**触发本技能——固收、债券、利率、信用风险、投资。它们只有在明确指向"对某只债券或债券组合做估值、久期、利差、信用或利率情景分析"时才路由到本技能；权益研究、宏观利率走势预测请改用对应技能。

**路由判定三步：** ① 标的是否为债券、转债或债券组合？② 任务是否为定价、算久期凸性、看利差分位、做信用核验或跑利率情景？③ 两者同时为"是"才启用。只问债券概念不启用。

---

## Core Capabilities / 核心能力

### 1. Bond Valuation Engine / 债券估值引擎

```python
import numpy as np
import pandas as pd

class BondAnalyzer:
    """债券分析引擎"""
    
    @staticmethod
    def calculate_price(face_value: float, coupon_rate: float, 
                       ytm: float, years: int, 
                       frequency: int = 2) -> float:
        """
        债券定价
        Args:
            face_value: 面值（元）
            coupon_rate: 年票面利率
            ytm: 到期收益率
            years: 剩余期限（年）
            frequency: 付息频率（1=年付，2=半年付）
        """
        n = years * frequency
        r_per_period = ytm / frequency
        c_per_period = (face_value * coupon_rate) / frequency
        
        # 现金流现值
        pv_coupons = sum([c_per_period / (1 + r_per_period) ** t 
                         for t in range(1, n + 1)])
        pv_face = face_value / (1 + r_per_period) ** n
        
        return pv_coupons + pv_face
    
    @staticmethod
    def calculate_ytm(price: float, face_value: float,
                     coupon_rate: float, years: float,
                     frequency: int = 2) -> float:
        """
        计算到期收益率（YTM）- 牛顿迭代法
        """
        n = years * frequency
        c = (face_value * coupon_rate) / frequency
        
        # 初始猜测
        ytm = coupon_rate
        
        for _ in range(100):
            pv = sum([c / (1 + ytm/frequency) ** t 
                     for t in range(1, n + 1)]) + face_value / (1 + ytm/frequency) ** n
            
            diff = price - pv
            
            # 导数（久期近似）
            duration = BondAnalyzer.calculate_duration(
                price, face_value, coupon_rate, ytm, years, frequency
            )
            dv = -duration / (1 + ytm/frequency) * diff
            
            ytm = ytm + diff / dv * 0.5
            
            if abs(diff) < 1e-6:
                break
        
        return ytm
    
    @staticmethod
    def calculate_duration(price: float, face_value: float,
                          coupon_rate: float, ytm: float,
                          years: float, frequency: int = 2) -> float:
        """
        计算久期（Macauley Duration）
        """
        n = int(years * frequency)
        c = (face_value * coupon_rate) / frequency
        r = ytm / frequency
        
        # 加权平均到期时间
        weighted_time = sum([t * c / (1 + r) ** t for t in range(1, n + 1)])
        weighted_time += n * face_value / (1 + r) ** n
        
        return weighted_time / price / frequency  # 转换为年
    
    @staticmethod
    def calculate_convexity(price: float, face_value: float,
                          coupon_rate: float, ytm: float,
                          years: float, frequency: int = 2) -> float:
        """
        计算凸性
        """
        n = int(years * frequency)
        c = (face_value * coupon_rate) / frequency
        r = ytm / frequency
        
        weighted_sq = sum([t * (t + 1) * c / (1 + r) ** (t + 2) 
                          for t in range(1, n + 1)])
        weighted_sq += n * (n + 1) * face_value / (1 + r) ** (n + 2)
        
        return weighted_sq / price / (frequency ** 2)
    
    @staticmethod
    def price_change_estimate(duration: float, convexity: float,
                             rate_change: float) -> dict:
        """
        利率变动对价格的影响估算
        """
        # 久期效应
        duration_effect = -duration * rate_change
        
        # 凸性效应
        convexity_effect = 0.5 * convexity * (rate_change ** 2)
        
        total_effect = duration_effect + convexity_effect
        
        return {
            "duration_effect": round(duration_effect * 100, 4),
            "convexity_effect": round(convexity_effect * 100, 4),
            "total_effect": round(total_effect * 100, 4),
            "approximate_new_price_pct": round((1 + total_effect) * 100, 4)
        }
```

#### 1.1 Worked Example / 估值结果解读示例

**输入**：面值 100 元，票面利率 4.00%，YTM 3.50%，剩余 5 年，年付。

| 指标 | 示例取值 | 含义 | 解读要点 |
|-----|---------|------|---------|
| price | 102.26 元 | 现金流现值合计 | 高于面值，因票息 4% > 市场利率 3.5% |
| Macaulay duration | 4.62 年 | 加权平均回款时间 | 票息越高、期限越短，久期越小 |
| Modified duration | 4.46 | 利率每变动 1 个百分点，价格反向变动约 4.46% | 风险度量的核心参数 |
| convexity | 24.1 | 久期自身的变动速率 | 凸性为正，利率大幅波动时对持有人有利 |
| DV01 | 0.0456 元/百元面值 | 利率每变动 1bp 的价格变动 | 组合层面即"每 bp 损益" |

**久期与凸性组合效应（利率上行/下行对照）**

| 利率变动 | 久期效应 | 凸性效应 | 合计 | 说明 | 是否需计入凸性 | |
|---------|--------|--------|------|------|---|
| +100bp | −4.46% | +0.12% | −4.34% | 凸性提供正向缓冲 | 必须计入 |
| +50bp | −2.23% | +0.03% | −2.20% | 小幅变动时凸性影响很小 | 建议计入 |
| −50bp | +2.23% | +0.03% | +2.26% | 收益率下行时价格涨得更多 | 可仅用久期 |
| −100bp | +4.46% | +0.12% | +4.58% | 上涨幅度略大于同幅下跌 | 可仅用久期 |

> **提示**：利率变动在 ±10bp 以内，仅用久期估算的误差通常在 1bp 价格量级，可以接受；超过 ±50bp 必须加入凸性项，否则会用久期线性外推、系统性夸大上行时的损失。

**常见计算错误（供复核）**

- **付息频率与期数不匹配**：半年付息债券 5 年应为 10 期、每期折现率取 YTM/2；直接用年付口径会使价格偏差约 0.1 元以上。
- **全价与净价混淆**：交易报价通常为净价，估值需用全价（净价 + 应计利息）；应计利息 = 票面利率 × 已过计息天数 ÷ 当期计息天数。
- **YTM 反算不收敛**：市场价与票面利率偏离过大时初值取值不佳，可先用"票面利率 ± 面值/价格修正项"构造更接近的初值，或改用二分法。


**示例｜DV01 在组合层面的换算（从个券到组合）**

| 债券 | 市值权重 | 修正久期 | 个券DV01（元/百元） | 组合贡献（元/百元） |
|------|---------|---------|------------------|------------------|
| 国债10Y | 40% | 8.20 | 0.0820 | 0.0328 |
| 政金债5Y | 30% | 4.35 | 0.0435 | 0.0131 |
| 信用债3Y | 20% | 2.68 | 0.0268 | 0.0054 |
| 存单1Y | 10% | 0.97 | 0.0097 | 0.0010 |
| **组合** | 100% | 5.72 | — | **0.0523** |

换算要点：组合DV01 = Σ(权重 × 个券DV01)。组合规模 1,000 万元时，1bp 利率变动对应损益约 1,000万 × 0.0523% = **5,230 元**。风控限额通常写成"DV01 上限 X 元/bp"，比"久期上限 X 年"更直观，因为前者直接对应金额。

**示例｜全价与净价的换算错误（最常见的估值事故）**

| 项目 | 数值 | 说明 |
|------|------|------|
| 净价报价 | 101.20 元 | 交易报价口径 |
| 票面利率 | 4.00% | 年付 |
| 已过计息天数 | 128 天 | 距上次付息日 |
| 当期计息天数 | 365 天 | 年付口径 |
| 应计利息 | 1.40 元 | 100 × 4% × 128/365 |
| 全价 | 102.60 元 | 净价 + 应计利息 |

错误后果：若把净价 101.20 当作全价用于组合市值计算，1 亿元持仓会低估约 140 万元。付息频率切换（年付/半年付）时计息天数��数也须同步切换，否则应计利息会出现约一倍的偏差。

### 2. Credit Analysis Framework / 信用分析框架

```markdown
## 信用债分析模板

### 一、发债主体概况
| 项目 | 内容 |
|-----|------|
| 公司名称 | |
| 实际控制人 | |
| 主体评级 | |
| 行业分类 | |
| 主营业务 | |

### 二、财务分析
```python
CREDIT_ANALYSIS_RATIOS = {
    "盈利能力": {
        "毛利率": ">30%为优质",
        "净利率": ">15%为优质",
        "ROE": ">10%为优质"
    },
    "偿债能力": {
        "资产负债率": "<70%为稳健",
        "流动比率": ">1.5为稳健",
        "利息保障倍数": ">3倍为稳健"
    },
    "现金流": {
        "经营现金流/带息债务": ">15%为稳健",
        "经营现金流/资本支出": ">100%为稳健"
    }
}
```

#### 2.1 财务指标分层阈值（示例，供交叉验证）

| 指标 | 优质 | 稳健 | 关注 | 预警 | 说明 | 行业差异提示 | |
|-----|-----|-----|-----|-----|------|---|
| 资产负债率 | <55% | 55%-70% | 70%-80% | >80% | 行业差异大，重资产行业可适度放宽 | 金融与地产不适用通用阈值 |
| 流动比率 | >2.0 | 1.5-2.0 | 1.0-1.5 | <1.0 | 需结合速动比率一并观察 | 金融与地产不适用通用阈值 |
| 利息保障倍数 | >5 倍 | 3-5 倍 | 1.5-3 倍 | <1.5 倍 | 低于 1 倍说明经营利润不足以覆盖利息 | 重资产行业可放宽 |
| 经营现金流/带息债务 | >25% | 15%-25% | 8%-15% | <8% | 比利润指标更难粉饰 | 现金流行业差异极大 |
| 经营现金流/资本支出 | >150% | 100%-150% | 60%-100% | <60% | 长期低于 100% 说明依赖外部融资 | 重资产行业可放宽 |

#### 2.2 城投主体区域分析维度（示例）

| 维度 | 具体指标 | 数据来源 | 观察要点 |
|-----|---------|---------|---------|
| 财政实力 | 一般公共预算收入、税收占比、财政自给率 | 地方预算执行报告 | 关注收入质量而非总量 |
| 债务压力 | 地方政府债务率、城投有息债务/综合财力 | 公开统计与评级报告 | 计算口径需全市场统一 |
| 平台地位 | 平台层级、公益性业务占比、政府补助占比 | 募集说明书 | 层级越低、市场化业务越多，政府支持意愿越难判定 |
| 再融资能力 | 近 12 个月债券发行与到期规模、银行授信余额 | 发行公告 | 滚续能力是短期违约的直接决定因素 |
| 外部支持 | 上级政府财力、担保与救助记录 | 公开信息 | 关注是否已有非标违约先例 |

### 三、信用利差分析
```python
def analyze_credit_spread(bond_yield: float, treasury_yield: float,
                         rating: str) -> dict:
    """
    信用利差分析
    """
    spread = bond_yield - treasury_yield
    
    # 评级对应利差参考
    SPREAD_REFERENCE = {
        "AAA": 0.50,  # 50bp
        "AA+": 0.80,
        "AA": 1.20,
        "AA-": 1.50,
        "A+": 2.00,
        "A": 2.50
    }
    
    reference = SPREAD_REFERENCE.get(rating, 2.0)
    
    return {
        "credit_spread": round(spread * 100, 2),
        "reference_spread": reference,
        "relative_value": "低估" if spread < reference else "高估",
        "spread_premium": round((spread - reference) * 100, 2)
    }
```

#### 2.3 Spread Percentile Reading / 利差分位解读示例

| 利差绝对水平 | 近 3 年分位 | 评级 | 解读 | 研究结论（示例） | 建议核验动作 | |
|-----------|-----------|------|------|--------------|---|
| 62bp | 15%（低位） | AAA | 利差补偿不充分 | 相对价值偏低，考虑缩短久期或换券 | 核验是否有担保或条款增信 |
| 118bp | 55%（中位） | AA+ | 与评级参考利差基本一致 | 无显著错价，按配置需求决策 | 核对评级与外部评级差异 |
| 265bp | 92%（高位） | AA | 利差含较高风险溢价 | 先排除个体风险（到期结构、负面舆情）再判断是否错价 | 核验到期结构与负面舆情 |
| 430bp | 98%（极值） | AA- | 接近"准违约"定价 | 不属于相对价值机会，应进入风险名单复核 | 进入风险名单并复核回收预期 |

**示例测算**：某 AA+ 城投债 YTM 3.68%，同期限国债 2.50%，利差 118bp；评级参考利差 80bp → 溢价比参考高 38bp。若该主体近 12 个月发行与到期规模大体匹配、区域一般公共预算收入同比小幅增长，可初步判断 **38bp 溢价可能来自流动性与市场情绪而非基本面恶化**——但输出结论时应写成"需进一步核验"，并列出核验清单，而非直接给出交易方向判断。
```

**示例｜城投区域分级的落地打分（把五个维度变成一个数）**

| 维度 | 权重 | 本区域取值 | 得分 | 依据 |
|------|-----|----------|------|------|
| 财政实力 | 25% | 一般公共预算收入同比 +3.2%，税收占比 71% | 70 | 收入质量尚可但增速偏低 |
| 债务压力 | 30% | 债务率 168%，城投有息债务/综合财力 240% | 45 | 债务压力偏重 |
| 平台地位 | 20% | 地市级主平台，公益性业务占比 62% | 75 | 层级与业务结构较优 |
| 再融资能力 | 15% | 近12个月发行 85 亿、到期 92 亿，净融资为负 | 40 | 滚续出现缺口 |
| 外部支持 | 10% | 上级财力中等，无公开违约先例 | 65 | 中性 |
| **加权得分** | 100% | — | **58.3** | 对应"关注"档 |

分级要点：再融资能力是短期违约的直接决定因素，权重不应低于15%；实践中经常出现"区域财力不错但当年滚续为负"的情况，此时应按更谨慎的档位处理。分级结果须随发行与到期数据按月更新，而不是一年定一次。

**示例｜利差走阔的归因拆分（区分市场与个体）**

| 时段 | 同评级同期限利差变化 | 本券利差变化 | 个体超额走阔 | 归因 |
|------|-------------------|------------|------------|------|
| 第1周 | +8bp | +8bp | 0bp | 完全由市场/评级层面驱动 |
| 第2周 | +3bp | +15bp | +12bp | 个体因素主导，需排查 |
| 第3周 | −2bp | +20bp | +22bp | 个体风险显著上升 |

归因要点：把本券利差变化减去同评级同期限的平均变化，得到"个体超额走阔"。这个差值持续扩大通常先于评级下调或负面舆情出现，是高价值的预警信号；只跟踪绝对利差会错过这个信息。

---



### 3. Bond Portfolio Management / 债券组合管理

```python
class BondPortfolio:
    """债券组合管理"""
    
    def __init__(self):
        self.bonds = []
    
    def add_bond(self, bond: dict):
        """添加债券"""
        # 计算关键指标
        bond["price"] = self._calculate_bond_price(bond)
        bond["ytm"] = self._calculate_ytm(bond)
        bond["duration"] = self._calculate_duration(bond)
        bond["convexity"] = self._calculate_convexity(bond)
        bond["dv01"] = bond["duration"] * bond["price"] / 100 / 100  # 每bp变化
        
        self.bonds.append(bond)
    
    def portfolio_duration(self) -> float:
        """组合久期"""
        total_value = sum(b["market_value"] for b in self.bonds)
        weighted_duration = sum(
            b["duration"] * b["market_value"] for b in self.bonds
        ) / total_value
        return weighted_duration
    
    def portfolio_credit_breakdown(self) -> dict:
        """组合信用分布"""
        breakdown = {}
        for bond in self.bonds:
            rating = bond.get("rating", "Unknown")
            if rating not in breakdown:
                breakdown[rating] = {"count": 0, "value": 0}
            breakdown[rating]["count"] += 1
            breakdown[rating]["value"] += bond.get("market_value", 0)
        
        return breakdown
    
    def interest_rate_risk(self, rate_shock: float) -> dict:
        """利率风险分析"""
        port_duration = self.portfolio_duration()
        
        # 纯久期效应
        duration_pnl = -port_duration * rate_shock / 100
        
        # 凸性调整
        port_convexity = sum(
            b["convexity"] * b["market_value"] for b in self.bonds
        ) / sum(b["market_value"] for b in self.bonds)
        convexity_pnl = 0.5 * port_convexity * (rate_shock/100) ** 2
        
        return {
            "portfolio_duration": round(port_duration, 3),
            "rate_shock_bp": round(rate_shock * 100, 0),
            "duration_pnl_pct": round(duration_pnl * 100, 2),
            "convexity_pnl_pct": round(convexity_pnl * 100, 2),
            "total_pnl_pct": round((duration_pnl + convexity_pnl) * 100, 2)
        }
```

#### 3.1 Interest Rate Scenario Table / 利率情景损益示例

**输入**：组合规模 1,000 万元，组合久期 3.8 年，组合凸性 18.6。

| 情景 | 利率变动 | 久期损益 | 凸性调整 | 合计损益 | 说明 |
|-----|--------|--------|--------|--------|------|
| 大幅下行 | −50bp | +19.0 万 | +2.3 万 | +21.3 万 | 收益率下行阶段凸性放大收益 |
| 小幅下行 | −20bp | +7.6 万 | +0.4 万 | +8.0 万 | 常见情景 |
| 持平 | 0 | 0 | 0 | 0 | 仅有持有期票息收益 |
| 小幅上行 | +20bp | −7.6 万 | +0.4 万 | −7.2 万 | 凸性小幅缓冲 |
| 大幅上行 | +50bp | −19.0 万 | +2.3 万 | −16.7 万 | 凸性保护在上行时更明显 |

> **口径说明**：表中损益为价格变动损益，不含持有期票息收入。组合凸性为正时，上行情景的损失被部分抵消，下行收益被小幅放大——这就是"凸性偏好"的来源。

#### 3.2 Immunization / 久期免疫与负债匹配（示例）

| 负债特征 | 匹配方式 | 关键约束 | 复核频率 |
|---------|--------|---------|---------|
| 单一确定时点支付 | 单期免疫：组合久期 = 剩余期限 | 组合凸性应大于负债凸性 | 每季度 |
| 多期确定支付 | 多期免疫：现金流按期限分层匹配 | 每层久期与对应负债久期偏差 ≤0.2 年 | 每季度 |
| 不确定支取（如理财赎回） | 久期区间管理 + 流动性缓冲 | 保留 5%-10% 高流动性资产 | 每月 |
| 收益率曲线非平行变动 | 关键利率久期（KRD）管理 | 各关键期限敞口 ≤总敞口 30% | 每月 |

#### 3.3 Portfolio Review Checklist / 组合复核清单

| 检查项 | 阈值（示例） | 触发动作 | 复核频率 | |
|-------|-----------|---------|---|
| 组合久期偏离基准 | ±0.5 年以内 | 超出则再平衡 | 每月 |
| 单一主体集中度 | ≤5% | 超限则减仓或专项说明 | 每月 |
| 弱资质主体（AA 及以下）占比 | ≤15% | 超限须专项审批 | 每月 |
| 高流动性资产占比 | ≥5% | 低于则补充 | 每周 |
| 估值偏离中债估值 | ±30bp 以内 | 偏离需说明原因 | 每日 |
| 到期滚续缺口 | 未来 3 个月到期 ≤可动用资金 | 存在缺口须提前安排 |


**示例｜组合久期再平衡的两种做法**

| 做法 | 操作 | 交易成本 | 适用场景 |
|------|------|---------|---------|
| 现券调仓 | 卖出长久期券、买入短久期券 | 较高（买卖价差+冲击） | 偏离较大（>0.5年）时 |
| 衍生品对冲 | 用国债期货或利率互换调节 | 较低（保证金占用） | 临时偏离或需快速调整时 |
| 增量配置 | 新资金按目标久期配置 | 无额外成本 | 有持续现金流流入时 |

选择要点：衍生品对冲改变的是组合的有效久期，不改变现券持仓的信用与流动性结构，因此应明确区分"久期达标"与"结构调整"。监管对衍生品使用有额度与资格要求，使用前须核对机构自身的业务资格。

**示例｜收益率曲线非平行移动的 KRD 敞口**

| 关键期限 | 敞口占比 | 本段利率变动 | 贡献损益（万元） |
|---------|---------|------------|---------------|
| 1年 | 18% | −10bp | +1.8 |
| 3年 | 25% | +5bp | −3.1 |
| 5年 | 32% | +18bp | −8.6 |
| 10年 | 25% | +12bp | −7.5 |
| 合计 | 100% | — | −17.4 |

KRD要点：只用组合总久期会得出"利率上行约多少bp、损失约多少"的单一结论，但实际曲线常呈非平行移动。按关键期限拆分敞口后可以看出，本例损失集中在5年段，再平衡应针对5年段而非整体降久期。 每周 |

### 4. Convertible Bond Analysis / 可转债分析

```python
def analyze_convertible(convert_price: float, stock_price: float,
                        bond_floor: float, market_price: float) -> dict:
    """
    可转债关键指标测算（供研究参考）
    """
    conversion_value = 100 / convert_price * stock_price   # 每百元面值的转股价值
    premium_rate = (market_price - conversion_value) / conversion_value * 100
    downside_buffer = (market_price - bond_floor) / bond_floor * 100

    return {
        "conversion_value": round(conversion_value, 2),
        "conversion_premium_rate": round(premium_rate, 2),   # 转股溢价率
        "downside_buffer": round(downside_buffer, 2),        # 相对纯债价值的溢价比
        "reading": "转股溢价率偏高，股性偏弱" if premium_rate > 30 else "股性相对较强"
    }
```

| 指标 | 计算口径 | 解读要点 |
|-----|---------|---------|
| 转股价值 | 100 ÷ 转股价 × 正股价 | 与转债价格对比得出溢价率 |
| 转股溢价率 | (转债价 − 转股价值) ÷ 转股价值 | 越高说明股性越弱、对正股上涨越不敏感 |
| 纯债价值 | 按同评级同期限信用债 YTM 折现 | 构成转债的价格下限 |
| 双低值 | 转债价 + 转股溢价率 × 100 | 常用的相对估值筛选口径之一 |
| 条款触发进度 | 修正/赎回/回售条款的交易日计数 | 强赎触发后按面值加利息赎回，须重点关注 |

**示例**：某转债转股价 12.00 元，正股价 13.20 元，转债市场价 128.50 元，同评级纯债价值约 92 元。
- 转股价值 = 100 ÷ 12.00 × 13.20 = 110.00 元；
- 转股溢价率 = (128.50 − 110.00) ÷ 110.00 = 16.8%（股性相对较强）；
- 相对纯债价值的溢价比 = (128.50 − 92.00) ÷ 92.00 = 39.7%（保护垫较薄，正股下跌时回撤空间大）。

**条款风险提示**：当正股满足"连续 30 个交易日中至少 15 个交易日收盘价 ≥ 转股价 130%"时，多数转债条款将触发强赎条件。持有高溢价转债且已触发强赎的，需及时评估转股或卖出，否则可能被按面值加当期利息赎回。


**示例｜强赎条款触发进度跟踪表（每周复核）**

| 转债 | 转股价 | 现价/转股价 | 已满足交易日 | 触发条件 | 剩余空间 | 本周动作 |
|------|-------|-----------|------------|---------|---------|---------|
| 转债A | 12.00 | 138% | 15/15 | 30日中15日 | 已触发 | 评估转股或卖出 |
| 转债B | 20.00 | 121% | 8/15 | 30日中15日 | 需再7日 | 持续跟踪 |
| 转债C | 8.50 | 96% | 0/15 | 30日中15日 | 未启动 | 常规持有 |
| 转债D | 15.00 | 132% | 13/15 | 30日中15日 | 需再2日 | 准备处置预案 |

跟踪要点：触发计数通常按"连续30个交易日中至少15个交易日"计算，交易日计数会随股价回落而重置或不再累加，须逐日更新而非按周估算。已触发强赎的转债若转股溢价率仍高，持有人既不转股也不卖出将面临按面值加利息赎回的损失，这是转债投资中最典型的"条款踩坑"。

**示例｜转债双低筛选的 pitfalls**

| 筛选口径 | 含义 | 优点 | 盲区 |
|---------|------|------|------|
| 双低值（价格+溢价率×100） | 同时兼顾低价与低溢价 | 快速筛选、可批量 | 不区分信用资质与剩余期限 |
| 纯债溢价率 | 价格相对纯债价值的溢价比 | 反映保护垫厚度 | 高溢价个券在小盘转债中普遍 |
| YTM | 持有到期的收益率 | 直观可比 | 忽略转股期权价值 |

筛选要点：双低值低的个券可能同时是"低价格 + 高信用风险"。应把双低筛选与纯债价值、主体评级、剩余期限三个条件叠加使用，避免机械排序导致集中持弱资质个券。

---

## Risk Control Checklist / 风控与合规检查清单

| 检查项 | ��据/说明 | 通过标准 |
|-------|---------|---------|
| 估值口径统一 | 全价/净价、付息频率、应计利息规则 | 全组合统一并留痕 |
| 数据来源 | 中债估值等公开基准 | 记录取值日期与来源 |
| 评级一致性 | 外部评级与内部评级差异 | 差异超一档须专项说明 |
| 集中度管理 | 单一主体、单一区域、单一行业占比 | 均在预设阈值内 |
| 久期偏离 | 相对基准的久期偏离 | 处于允许区间 |
| 流动性分层 | 单券持仓相对日均成交 | 不超过预设上限 |
| 违约处置预案 | 违约债券处置流程与台账 | 有流程、有责任人 |
| 免责表述 | 分析结果仅供参考，不构成投资建议 | 每份输出均含声明 |

---

## Quick Command Templates / 快速指令模板

**债券定价：**
```
计算债券价格：
- 面值：100元
- 票面利率：4%
- 到期收益率：3.5%
- 剩余期限：5年
- 付息频率：年付
```

**久期分析：**
```
分析债券组合的久期风险：
- 组合总规模：1000万
- 利率上升50bp时的损益
```

**信用利差分析：**
```
分析信用利差：
- 债券YTM：3.68%
- 同期限国债收益率：2.50%
- 主体评级：AA+
需要输出：利差绝对值、对应评级参考利差、近3年利差分位、初步判断与需进一步核验清单
```

**可转债分析：**
```
分析可转债：
- 转股价：12.00元，正股价：13.20元
- 转债市场价：128.50元，同评级纯债价值约92元
输出转股价值、转股溢价率、相对纯债溢价比，并核验强赎条款触发进度
```

**城投主体复核：**
```
复核某城投主体信用状况：
- 区域：某地级市
- 需要维度：一般公共预算收入、债务率、平台层级、近12个月发行与到期规模
- 要求：给出分级判断与需进一步核验清单
```

---

## Changelog / 版本变更

| 版本 | 日期 | 变更摘要 |
|------|------|---------|
| 3.0.3 | 2026-10-08 | 新增数据最小化声明与执行边界章节；收窄触发词并补充中英文非触发清单与路由判定（SQP-1）；监管动态更新至2026-10-08并新增银行理财、信用风险两条与复核频率列；新增列：是否需计入凸性、财务指标行业差异提示、利差建议核验动作、组合复核频率；新增示例：DV01组合换算、全价净价换算错误、城投区域分级打分、利差走阔归因拆分、久期再平衡两种做法、KRD敞口、强赎触发进度跟踪、双低筛选盲区 |
| 3.0.2 | 2026-09-13 | 新增城投区域分析维度与可转债条款风险提示 |

---


## Disclaimer

Bond analysis involves various risks including interest rate risk and credit risk. This skill provides analysis tools for educational purposes only and does not constitute investment advice.
