多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

债券投资组合管理实战:久期、信用利差与杠杆的协同策略

债券投资组合管理实战:久期、信用利差与杠杆的协同策略 简介这是一份围绕债券投资组合管理策略的培训课件共64页PPT适合金融专业学生、债券投资初学者以及需要搭建组合管理框架的从业者无论是课堂教学还是机构内训都适用。课件从有效市场假说讲起区分弱式、半强式与强式有效市场并认识不同市场假设下的投资目标差异在此基础上消极策略强调风险匹配积极策略追求超额回报。压缩包内仅1个PPT文件整体约340KB但内容结构相当完整依次覆盖策略选择、消极管理含负债管理、免疫策略与现金流匹配、积极管理含收益率曲线变动、或有免疫策略、期限分析与久期应用等模块既保留理论框架也包含例题讲解。目前已有108人学习下载适合作为培训教案或自学补充材料。通过学习读者可掌握债券组合的构建逻辑与风险控制方法理解如何利用免疫与现金流匹配规避利率风险也可借鉴积极策略思路在控制风险的同时获取超额回报为实际投资决策提供参考。1. 债券投资组合管理不只是调久期先把收益归因和约束条件想清楚做债券投资的人很容易陷入一个误区以为组合管理的核心就是预测利率、调久期。但实际上利率判断只是其中一环真正的债券投资组合管理是一个多约束、多目标的动态决策过程。那些管理规模上百亿的账户每天做的事情不是赌方向而是在收益率、回撤、流动性、信用风险、监管指标之间做权衡并持续做再平衡。这篇文章就是一套完整的债券投资组合管理策略培训讲义的落地版把从基准构建、利率策略、信用策略、杠杆控制到组合监控的闭环讲透适合从银行理财、保险资管到公募固收的广大从业者也适合刚开始做债券投资、想把管理动作体系化的投资经理。很多人对债券组合管理的认知停留在“久期越长涨得越多”可实盘里最反直觉的一点是同样的久期敞口不同的曲线结构判断和骑乘选择最终收益差距可能超过50个bp。这篇文章的核心目的就是帮你把组合管理从单一指标驱动改造成一套期限结构、信用定价、流动性预算、约束优化协同的框架。2. 债券组合管理的基准与约束先定坐标再谈策略2.1 为什么基准不是业绩比较基准而是策略的起点在做任何债券组合策略之前第一件事不是看多还是看空不是买长还是买短而是把基准定清楚。这里的基准有两层含义一是业绩比较基准比如中债综合财富指数、中债国债总财富指数这决定了你的相对排名怎么算二是策略构建的锚基准比如你是以中债-国债总指数还是以中债-信用债总指数为起点这决定了你能承受的信用风险敞口和流动性要求。我一般会先做基准拆解。比如以中债-新综合财富指数为例它的久期大概是4到5年票息大约3%到4%含有利率债和信用债的成分。把自己的组合和它对比时要拆成久期贡献、曲线贡献、信用贡献、个券选择贡献四个部分这样才能搞清楚相对于基准你的收益究竟是从哪里来的。如果只看综合收益率你根本不知道是自己运气好赶上了牛市还是主动管理真的产生了alpha。import numpy as np import pandas as pd # 模拟一个简单的业绩归因数据框单位为% # 组合和基准的收益拆解为久期效应、曲线效应、信用利差效应、个券选择效应 attribution_data pd.DataFrame({ 效应类别: [久期效应, 曲线效应, 信用利差效应, 个券选择效应], 组合贡献: [0.85, 0.32, 1.21, 0.45], 基准贡献: [0.90, 0.15, 0.55, 0.05], 超额收益: [-0.05, 0.17, 0.66, 0.40] }) attribution_data[超额占比] (attribution_data[超额收益] / attribution_data[超额收益].sum() * 100).round(1) print(attribution_data)上面的归因框架中如果超额收益里有很大一块来自信用利差效应那说明这部分其实是你承担信用风险换来的并不是通过利率判断或者选券获得的能力。这也是归因分析最重要的意义把收益的来源按风险因子拆开管理者才能知道自己究竟赚的是什么钱。2.2 构建组合的三个硬约束条件债券组合管理在设定基准之后必须明确三个约束久期偏离区间、信用等级准入、流动性预算。久期偏离区间一般会结合自身的负债端稳定性和行情判断来设定。比如保险资金负债端稳定可以给更大的久期偏离比如正负1.5年而开放式债基要考虑赎回压力偏离就压到正负0.5年以内。信用等级准入更清晰银行理财的信用债投资基本会限定在AA及以上而同业存单等等同AAA评级的资产也要有上限控制不能因为流动性好就超出比例。流动性预算容易被忽略但它恰恰是组合管理的生死线。我一般会把流动性资产分三层第一层是利率债和AAA同存作为一级流动性储备占比不低于5%保证极端行情下可以当天变现第二层是高等级信用债占比20%到30%作为常规再平衡的弹药库第三层是长期限或者低流动性的信用债这部分占比往下压不能超过组合净资产的一半否则一旦遭遇赎回潮只能被迫卖资产把浮亏变实亏。注意流动性和收益本来就是同源的。一个组合如果把流动性都消耗在票息上那它在市场反转的时候就不再有主动权。不要拿流动性换收益因为流动性是一种可以让你继续留在场内的期权。3. 利率策略的实战框架久期、骑乘与曲线交易的参数化执行3.1 久期管理的目标不是预测利率而是控制风险预算在债券组合管理策略里久期策略是最基础也最需要纪律性的一环。这里的核心是把久期当成一种预算管理而不是方向押注。比如你管理的组合规模是50亿投资指引里规定的久期区间是1到5年如果中性久期是3年那么你的风险预算是正负2年。换算成DV01的话50亿乘以0.0001乘以组合久期3年就是基础的利率风险敞口每调整1年久期组合的DV01变化是50万元也就是说利率上升1个bp组合净值一天亏5万元。明白这层关系之后就可以把久期决策变成一个系统化的步骤先判断宏观基本面的方向再看市场隐含的降息/加息概率最后才谈要不要动久期。如果基本面数据比如PMI在荣枯线下方、社融增速持续下行指向货币宽松周期那组合久期可以在区间上沿附近操作比如用国债期货对冲掉部分底仓久期或者在收益率曲线陡峭化时用长端现券做多。# 计算组合DV01的简化逻辑 portfolio_nav 5_000_000_000 # 组合净值50亿 dv01_per_year_old 500_000 # 每调整1年久期DV01变化约50万元 # 久期从3年调至4.5年时组合DV01的增量 duration_change 4.5 - 3.0 dv01_move duration_change * dv01_per_year_old print(f久期从3年调整到4.5年DV01增加 {dv01_move/10000:.1f} 万元) print(f利率上行10bp时组合净值变动约 {dv01_move/10000 * 10:.1f} 万元)上面这个计算逻辑时刻提醒我们久期是一项动用风险预算的行为。在牛尾阶段不能看着收益率还在往下就一路加久期要先评估收益率已经隐含了多少降息预期再看看自己的组合有没有浮盈垫。久期管理做得好的投资经理不是在利率拐点时加得最多的人而是在确定性最高的阶段把仓位、久期和套保工具配合得最顺畅的人。3.2 骑乘策略的参数化执行曲线形态、静态利率与风险收益比骑乘策略是债券组合管理里最经典也最常用的策略它的本质就是赚收益率曲线形态的钱当曲线陡峭时买入剩余期限比目标久期更长的债券、持有至目标久期处卖出收益来自两方面一是吃票息二是期限缩短带来的收益率下移对应价格上涨。执行骑乘策略时关键参数有三个曲线的斜率、静态利率的持有收益、以及卖出的可行性。比如当前1年期国债收益率是1.4%3年期国债收益率是1.8%5年期收益率是2.1%曲线斜率在1年-5年段大约70bp。如果目标久期只有1年且未来一年内没有大幅加息预期那买入3年期国债并持有一年到期时债券剩余期限为2年。假设届时两年期收益率不变那么收益包含当前三年期票息1.8%加上两年期收益率从1.65%附近下行至1.4%所产生的价差收益整体年化收益大约2.3%到2.5%远高于直接买1年期国债的1.4%。这种执行并不是任何时候都合适关键是看骑乘区间段的利差是否大于资金成本和目标期限的静态收益率。-- 假设有一段债券行情数据表bond_yield_curve -- 字段maturity_term(期限), bond_yield(到期收益率), settlement_date(日期) -- 骑乘策略筛选找到曲线斜率大于50bp的相邻期限段 SELECT a.maturity_term AS term_start, b.maturity_term AS term_end, ROUND(b.bond_yield - a.bond_yield, 4) AS curve_slope_bp, b.bond_yield AS yield_for_riding FROM bond_yield_curve a JOIN bond_yield_curve b ON b.settlement_date a.settlement_date AND b.maturity_term a.maturity_term 2 WHERE a.settlement_date 2025-06-30 AND (b.bond_yield - a.bond_yield) * 100 50 ORDER BY curve_slope_bp DESC;骑乘策略的执行细节在于骑乘结束后卖出债券的那一瞬间能不能按理论价格成交。如果这个期限段交易量很小、买卖价差很宽那骑乘算出来的收益就是纸上富贵。我在实际管理时会尽量选择国债、国开债或者流动性好的高等级信用债来做骑乘避免为了赚几十bp的曲线收益把自己卡在流动性陷阱里。3.3 收益率曲线交易子弹型、哑铃型与阶梯型的参数和适用场景曲线交易可以看作骑乘策略的升级版核心是在不改变组合整体久期的前提下通过调整组合在期限轴上的分布来获取收益率曲线整体形态变化带来的额外收益。三种常见组合结构——子弹型、哑铃型、阶梯型——各有各的参数含义。子弹型组合把所有仓位集中在某一期限段比如全部放在3年到5年优点是可以最大化单一期限的信誉。当收益率曲线整体下移时子弹型组合在集中期限附近的价格弹性最大但缺点是若曲线变陡短端跌幅有限、长端不一定跟跌。哑铃型则是把资金分布在短端和长端两端比如30%在1年以内70%在10年以上组合久期仍然控制在5年左右短端提供流动性和票息安全垫长端提供资本利得弹性。曲线变平或者说长端利率下行更快时哑铃型表现会更好。阶梯型是平均分布在多个期限段比如1年、3年、5年、7年、10年各配置20%它的特点是平滑、不去赌曲线形态稳定性最好。参数上无论选哪种结构都要保持组合久期占目标久期的比例在90%到110%之间偏离过大就变成了变相加久期而不是纯粹的曲线策略。具体选哪种形态我会看收益率曲线未来12个月的预期变化。如果预期曲线走平选哑铃型预期曲线变陡选中短端的子弹型预期曲线形态多变又看不清方向就用阶梯型。4. 信用策略与杠杆的配合如何让收益来源分散又不失控4.1 信用利差压缩与走阔的判断指标债券组合管理里信用策略的收益弹性比利率策略更大但信用风险的尾部杀伤力也最致命。做信用策略前先要分清你说的信用策略是赚信用利差压缩的钱还是赚信用资质下沉的评级溢价。很多组合亏大钱就是把“利差压缩”错做成了“资质下沉”。而利差判断又有两套框架一是用AAA中短期票据与同期限国债的利差作为流动性溢价和信用风险的综合性定价指标二是用AA与AAA的等级利差判断市场风险偏好的变化方向。实操中我一般跟踪三类指标信用利差绝对水平分位数、信用利差变动趋势近20日、60日均线、以及信用债成交活跃度。绝对水平到了历史分位数的80%以上时说明信用债的票息保护已经很厚可以逐步加仓高等级信用债到了历史分位数的20%以下时即使还有利差压缩空间性价比也已经不合适因为票息保护不足一旦反弹会被打得措手不及。import pandas as pd # 信用利差分位数计算示例 # 假设credit_spread_series是历史信用利差时间序列单位bp # 当前利差是75bp历史序列从2018年至今 historical_spreads pd.Series([...]) # 这一行需要替换为真实的历史利差数据 current_spread 75 percentile_rank (historical_spreads current_spread).mean() print(f当前信用利差{current_spread}bp处于历史{percentile_rank*100:.1f}%分位) # 分位数 0.8 说明债市风险偏好较低可考虑逐步配置高等级信用债 # 分位数 0.25 说明利差已被压缩得很充分谨慎追涨4.2 杠杆策略的边界资金成本、回购期限与集中度管理杠杆在债券组合管理中是一个放大器它可以放大票息也可以放大回撤。做杠杆策略之前要算清楚一个账组合加杠杆后的静态收益等于基础票息收益加上杠杆息差即借入资金成本与债券票息的差值。正常来说10年国开债利率如果只有2.4%隔夜回购利率可能在1.8%左右那把杠杆加上去用隔夜资金买国开债息差空间也就60bp。这个息差还要扣除交易成本实际落到组合里就是40到50bp。但杠杆最大的风险不是息差收窄而是负债端的稳定性。一旦资金面收紧隔夜回购利率在一周内从1.8%飙升到3.0%你会发现利差消失只是第一步紧接着你可能被迫降价卖债还钱造成亏损的自我实现。所以我做杠杆管理时有个铁律预期回购利率与债券票息的利差底线必须不低于30bp其次单一资金方的融入比例不能超过总融入量的30%避免被某个资金方卡脖子第三隔夜资金占比不能超过总融入资金的一半至少一半要使用7天以上的期限来滚。这样的组合短期上可能牺牲一点收益但在资金面波动的时候能保住组合的稳定性。4.3 信用债的分散标准行业、主体与个券上限信用策略不是买一只好债的事而是一个组合层面的分散问题。分散的标准有三个行业、主体、个券。行业分散上单一行业债券投资占比不超过组合净资产的20%这样某一行业信用事件爆发时不至于伤筋动骨。主体分散下设两个维度一是发债主体集中度单一主体不超过组合净资产的5%二是关联方合并口径同一个集团旗下多家子公司合计不能超过8%。个券层面更直白单只债券不超过组合净资产的3%。举一个常用的操作规则。如果组合净资产10亿那单一主体上限就是5000万单券上限是3000万。市场上有一些中等规模城投或者产业债收益率比同等级高不少但发行量只有几个亿如果组合资金量大很容易在投了几千万之后就触及单券3%的上限。如果你因为看好这只债而突破这个限制那本质上你已经不是在管理一个组合而是在做一笔单边的信用押注。这种押注偶尔能赢但没有可持续性。5. 多策略组合的落地与再平衡把策略装进一个可执行的框架5.1 策略配制比例与触发条件把利率策略、信用策略、杠杆策略放到同一个组合里最关键的是设定每类策略的资金占比和触发条件不能先决定方向再找策略。我一般会这样做先把组合分成两层一层是底仓占比60%到70%主要作用是跟上基准、获取稳定票息底仓的配置以高等级信用债和利率债为主不做频繁交易另一层是策略仓占比30%到40%用来执行骑乘、曲线交易、信用利差交易等主动策略这层仓位更灵活可以在触发条件出现时动起来。策略仓内部再按信号机制分好比例。比如当信用利差分位数高于80%时信用策略仓的上限是策略仓总规模的50%当收益率曲线斜率处于1年-5年段的历史高位时骑乘策略可以占50%以上当资金面预期转松存单利率开始下行、隔夜回购利率低于政策利率20bp以上杠杆策略仓位可以提高。每个触发条件都要配套一个退出条件。比如隔夜回购利率连续三天低于政策利率20bp时开始加杠杆一旦隔夜回购利率重回政策利率上方就要在两周内把杠杆降回常态水平。// 策略触发条件判断的更简化版本用伪代码表达 // 目的是说明策略不是主观决定的而是由多组条件同时满足触发的 function checkRidingStrategy(conditions) { const slopeBp conditions.curveSlopeBp; // 1Y-3Y曲线利差 const targetDuration conditions.targetDuration; // 组合目标久期 const currentDuration conditions.currentDuration; // 当前组合久期 if (slopeBp 40 // 1Y-3Y段足够陡 Math.abs(currentDuration - targetDuration) 0.8 // 久期偏离在安全窗口内 conditions.tradeVolumeIndex 0.7) { // 该期限段成交活跃度足够 return 执行骑乘策略; } else { return 继续等待无骑乘信号; } }触发条件的设定不能太多否则策略仓会被切得太碎难以管理。我最多同时启用三个主动策略每个策略的仓位最小占比在10%以上这样才值得花精力去跟踪和再平衡。5.2 再平衡的节奏与成本控制再平衡是组合管理中一直要做但执行起来不容易的部分。节奏上分两种一种是时间驱动比如每月底做一次常规再平衡另一种是事件驱动比如收益率突破一定阈值、信用利差大幅跳升或组合久期偏离区间触发即时调整。前者保证了组合不漂移后者保证了风险不被突破。再平衡的执行难点在于成本控制。每一次买卖都有交易成本、冲击成本和税收成本视产品类型而定。频繁做小幅再平衡一年下来交易成本可能吃掉大部分策略超额收益。所以我一般会给再平衡设一个有效区间比如组合久期偏离目标0.2年以内不动超过0.2年才开始调整单次调整久期不超过0.4年。把动作做钝一点不追求每一步都精准反而最终收益表现更好。因为债券市场的趋势通常有惯性你晚一周调整付出的机会成本比频繁微调所产生的交易成本要低得多。提示再平衡不是追求最优而是追求不失控。用阈值触发再平衡可以避免情绪化交易造成的损失。5.3 组合监控体系用一个台账把组合看全组合监控不能说空话。每个持仓债券都需要维护一个台账字段至少包含债券代码、债券简称、中债估值净价、到期收益率、剩余期限、久期、凸性、信用评级中债/外部评级、所属行业、持有面值、成本价、浮盈亏、剩余额度、流动性分类。这些字段每周更新一次如果市场波动加大就改为日频更新。多策略组合有了台账才能做压力测试、假设分析、评级变动预警和提前赎回计划。比如重庆某只AA级城投债收益率突然跳升50bp你先查台账看看自己有没有持仓、持仓量多大、该债券的行业集中度是否已经超限然后决定是补仓降成本还是止损走人。没有台账你的所有决策就都是凭感觉。6. 债券组合管理的进阶技巧用压力测试预演组合的尾部风险管理债券组合到了进阶阶段看的不是谁在牛市里赚得多而是谁在振荡市和熊市里回撤控制得住。压力测试就是一个可以提前预演组合尾部风险的工具它不需要太复杂的模型但需要按真实持仓来计算不能拿组合久期这种粗指标去笼统估算。压力测试的常见场景分三档。第一档是轻度压力假设收益率曲线上行20bp信用利差走阔15bp测算组合净值的损失幅度第二档是中度压力假设收益率曲线上行50bp信用利差走阔40bp同时伴随资金利率上升80bp导致杠杆成本抬升第三档是重度压力假设收益率曲线上行100bp信用利差走阔80bp且部分信用债丧失流动性买卖价差扩大到20bp以上甚至无买盘。做压力测试时要把杠杆成本纳入一起测算。特别是依赖隔夜回购加杠杆的组合资金利率上升不仅减少了息差收入还可能在保证金和质押券估值上形成双重打击。# 组合压力测试的核心计算脚本 # 用持仓级别数据计算组合在不同利率情景下的净值损失 import pandas as pd # holdings模拟持仓表字段包括市值、久期、信用利差敏感度、杠杆资金成本 # 这里用模拟数据展示计算逻辑实际使用时应读取组合台账 holdings pd.DataFrame({ 债券类型: [国债, 国开债, AAA中票, AA城投债, 杠杆回购资金], 市值(亿): [2.0, 1.5, 1.0, 0.5, -1.2], 久期: [6.5, 4.2, 3.1, 2.4, 0], 利差久期: [0, 0, 2.8, 3.5, 0], }) rate_shock 0.30 # 收益率曲线上行30bp spread_shock 0.25 # 信用利差走阔25bp # 利率冲击损失 市值 * 久期 * 利率变动幅度 rate_loss (holdings[holdings[债券类型] ! 杠杆回购资金][市值(亿)] * holdings[久期] * rate_shock).sum() # 信用冲击损失 信用债市值 * 利差久期 * 利差变动幅度 credit_assets holdings[holdings[利差久期] 0] spread_loss (credit_assets[市值(亿)] * credit_assets[利差久期] * spread_shock).sum() total_loss rate_loss spread_loss print(f利率冲击30bp利差冲击25bp组合净值损失约{total_loss:.3f}亿元)脚本运行出来以后还要做一步人工分析如果重度压力场景下的损失超过了组合一个月能承受的极限比如总资产的2%那就得考虑提前降低组合久期或减配信用债哪怕这意味着放弃一部分预期收益。这比真的碰到利率上行时被动卖券要好得多。压力测试不需要天天做但每次组合久期或信用结构发生较大变化时都要重新测算一次并把测试结果记录在案。一个成熟的投资经理拿到压力测试结果后不是简单看一眼数字而是会问自己如果这个场景真的发生了我在市场上能不能按模型假设的价格卖出去如果不能那模型给出的损失数字就偏乐观了。所以重度压力场景里我习惯额外再打个八折流动性折扣让压力值真正变成可执行的风险边界。本文还有配套的精品资源点击获取
返回列表