Bond Spread Analyzer — 国债/地方债利差分析行业模板
概述
从 Wind 等数据源导出的国债/地方债收益率时间序列表出发,构建完整的利差分析与策略输出工作流。
核心原则:基础数据表完全不动(Wind 每日自动向基础数据表插入新行,所有分析子表通过 INDEX/MATCH 按日期匹配取数,不依赖行位置),保留自动更新机制。
v2.0 新增模块
| 模块 | 功能 | 输出 |
|------|------|------|
| build_spreads.py | 基础利差表构建(v1.0) | Excel:期限利差 + 品种利差子表 |
| generate_strategy_abc.py | A/B/C 三方案策略对比 | Markdown + Excel 策略方案 sheet |
| generate_report.py | 公众号风格完整报告 | Markdown 报告(含市场概况+分析+策略) |
| plot_curves.py | 收益率曲线可视化 | PNG:曲线图 + 走势图 + 热力图 |
适用场景
- 农商行/城商行金融市场部日常利差跟踪
- 债券投顾方向跟岗学习与研究输出
- 固定收益研究的期限结构与品种配置策略生成
- 省联社/总行汇报的利差分析材料制作
- 公众号市场观点文章的底稿生成
源数据假设
基础数据表(如 "基础数据-自动更新")结构:
Row 3-5: 标题/说明行
Row 6: 表头行
A: 日期
B: 国债3年 C: 国债5年 D: 国债7年
E: 国债10年 F: 国债20年 G: 国债30年
H: 地方债3年 I: 地方债5年 J: 地方债7年
K: 地方债10年 L: 地方债20年 M: 地方债30年
N: DR007(可选)
Row 7: 辅助行(可选)
Row 8+: 每日数据(最新日期在 Row 8,由近及远)
完整工作流
快速开始(一键生成全部)
# 1. 构建利差分析表
python scripts/build_spreads.py \
--source "源文件.xlsx" \
--output "利差分析.xlsx"
# 2. 生成 A/B/C 策略方案(同时写入 Excel)
python scripts/generate_strategy_abc.py \
--source "源文件.xlsx" \
--output "策略方案.md" \
--write-excel "利差分析.xlsx"
# 3. 生成可视化图表
python scripts/plot_curves.py \
--source "源文件.xlsx" \
--output-dir ./charts
# 4. 生成完整公众号风格报告(含图表)
python scripts/generate_report.py \
--source "源文件.xlsx" \
--output "利差分析报告.md" \
--with-images ./charts/yield_curve.png ./charts/spread_trend.png ./charts/percentile_heatmap.png
模块详解
模块一:build_spreads.py — 基础利差表构建
生成两个新子表,基础数据表原封不动:
期限利差表(16个指标):
- 国债:5Y-3Y, 7Y-3Y, 10Y-3Y, 10Y-5Y, 10Y-7Y, 20Y-10Y, 30Y-10Y, 30Y-20Y
- 地方债:同上 8 个
品种利差表(6个指标):
- 品种利差 3年/5年/7年/10年/20年/30年(地方债 - 国债)
每张表包含:标题区、策略建议区(基于分位数)、表头、近3年分位数行、每日数据行。
模块二:generate_strategy_abc.py — A/B/C 方案策略对比
将单一策略升级为三方案对比框架:
| 方案 | 风险偏好 | 核心逻辑 | 适用场景 | |------|----------|----------|----------| | 方案A | 保守 | 仅极端分位数(<10%/>90%)微调 | 持有到期为主、稳健导向 | | 方案B(推荐) | 均衡 | 分位<30%做陡/>70%做平,适度调仓 | 大多数资金业务场景 | | 方案C | 激进 | 极端分位数大幅结构调整+骑乘 | 交易型资金、有衍生品对冲 |
每方案输出:操作方向、具体期限、仓位建议、预期收益、风险提示。 末尾根据极端分位数占比自动生成推荐结论。
模块三:generate_report.py — 公众号风格报告
整合输出完整 Markdown 报告:
- 市场概况(国债/地方债收益率表)
- 期限利差分析(含分位数表+档位标签)
- 品种利差分析(含配置建议)
- A/B/C 策略方案对比
- 图表展示(可选,嵌入 PNG)
- 推荐结论
模块四:plot_curves.py — 可视化
生成三张 PNG 图表:
yield_curve.png:国债/地方债收益率曲线对比(含品种利差填充)spread_trend.png:关键利差近3年走势(10Y-3Y、30Y-10Y、品种利差10年)percentile_heatmap.png:分位数热力图(绿→黄→红渐变)
颜色规范:遵循中国债市惯例(涨红跌绿),国债蓝、地方债橙。
依赖
openpyxl >= 3.1
matplotlib >= 3.7
安装:
pip install openpyxl matplotlib
关键公式模式
日期引用(INDEX/MATCH 按日期匹配)
=IF('基础数据-自动更新'!A8="","",'基础数据-自动更新'!A8)
利差计算(带 >0 检查处理缺失数据)
=IFERROR(IF(AND(
INDEX('基础数据-自动更新'!$C$8:$C$5000,MATCH($A9,'基础数据-自动更新'!$A$8:$A$5000,0))>0,
INDEX('基础数据-自动更新'!$E$8:$E$5000,MATCH($A9,'基础数据-自动更新'!$A$8:$A$5000,0))>0
), 减法, ""), "")
近3年分位数
=IF(ISNUMBER(B9),COUNTIF(B9:B757,"<="&B9)/COUNT(B9:B757),"")
格式规范
- 标题行:深蓝(#1F4E79),加粗,全宽合并,行高30
- 策略标题:白字(#FFFFFF)深蓝底(#2F5496)
- 策略详情:深色字(#333333)浅黄底(#FFF2CC)
- 数据表头:宋体11号加粗,灰底(#D9D9D9)
- 分位行:百分比格式(0.00%)
- 数据行:数值格式(0.0000),日期格式(yyyy-mm-dd)
- 冻结窗格:B7
分位数档位与策略映射
| 分位数范围 | 档位 | 期限利差策略 | 品种利差策略 | |-----------|------|-------------|-------------| | < 10% | 极窄 | 做陡 | 低配地方债转国债 | | 10%-30% | 偏窄 | 适度做陡 | 适度低配地方债 | | 30%-70% | 适中 | 标配 | 标配 | | 70%-90% | 偏宽 | 适度做平 | 适度超配国债 | | > 90% | 极宽 | 做平 | 超配国债 |
Resources
scripts/
build_spreads.py— 基础利差表构建脚本(545行)generate_strategy_abc.py— A/B/C 方案策略生成器generate_report.py— 公众号风格报告生成器plot_curves.py— 收益率曲线可视化工具
references/
usage_guide.md— 详细使用指南与 FAQstrategy_framework.md— 策略框架设计说明
使用示例
# 在 Python 中直接调用
from scripts.generate_strategy_abc import generate_abc_strategy
md = generate_abc_strategy(
source_path="国债地方债收益率.xlsx",
base_sheet="基础数据-自动更新",
output_md="策略方案.md",
output_excel="利差分析.xlsx",
)
print(md)
注意事项
- 基础数据表不可修改:所有子表通过公式引用,修改基础表结构会导致公式失效
- 分位数窗口:默认近3年约749个交易日,可根据数据频率调整
EST_WINDOW_DAYS - 策略为研究参考:A/B/C 方案基于历史分位数统计,不构成投资建议,需结合宏观面交叉验证
- Wind 数据格式:假设最新日期在 Row 8(由近及远排列),如格式不同需调整
calculate_percentiles中的行号 - 中文字体:可视化脚本自动检测 Microsoft YaHei / SimHei,如未安装将回退到英文标签
Scan to join WeChat group