固收 Key Rate Duration
Fi Key Rate Duration
题目详情
固收关键利率久期。评估债券组合的利率风险,理解关键利率久期与有效久期的区别。考虑收益率曲线发生非平行移动的场景。
英文原题
You are evaluating the interest rate risk of a bond portfolio. You need to understand the difference between key rate duration and effective duration. Consider a scenario where the yield curve experiences a non-parallel shift. Specifically, the 5-year point on the yield curve increases by 25 basis points while all other points remain unchanged. How does key rate duration specifically differ from effective duration in measuring the bond portfolio's sensitivity to this type of yield curve movement
解析
问题分析
You are evaluating the interest rate risk of a bond portfolio. You need to understand the difference between key rate duration and effective duration. Consider a scenario where the yield curve experiences a non-parallel shift. Specifically, the 5-year point on the yield curve increases by 25 basis p
解法
根据题目要求实现相应功能。核心逻辑需要:
// 核心数据结构和方法——根据题目 API 约定实现
// 1. 确定状态表示——选择支持所需操作的数据结构
// 2. 实现核心算法——确保 O(·) 时间复杂度和正确性
// 3. 处理边界条件——空输入、极值参数、并发访问验证
用具体输入验证:构造已知输入的测试用例,确认输出匹配预期结果。
复杂度与边界
- 时间复杂度:取决于选用的算法
- 空间复杂度:取决于数据规模
- 关键边界条件:空输入、极值参数、并发场景下的正确性保证
英文解析
Analysis
Key rate duration measures a bond's (or portfolio's) sensitivity to shifts at specific maturity points on the yield curve, while effective duration measures overall sensitivity to a parallel shift. When the yield curve experiences a non-parallel shift (e.g., only the 5-year point moves), effective duration cannot capture the localized impact -- key rate duration specifically quantifies the price change from that isolated 5-year shift.
Key rate duration at maturity point k: KRD_k = (P0 - P_k) / (P0 * delta_y_k) where P_k is the price after shifting only the k-th key rate by delta_y_k, with other points unchanged.
Solution
def key_rate_duration(bond_pv_func, key_maturities, delta_y=0.001):
"""Compute key rate durations for each maturity point."""
P0 = bond_pv_func(None) # base price with current yield curve
krd = {}
for k in key_maturities:
# Shift only the k-th maturity point by delta_y
P_k = bond_pv_func({k: delta_y}) # price after isolated shift at k
krd[k] = (P0 - P_k) / (P0 * delta_y)
return krd
def effective_duration(bond_pv_func, parallel_shift=0.001):
"""Compute effective duration for parallel shift."""
P_up = bond_pv_func({'all': -parallel_shift})
P_down = bond_pv_func({'all': parallel_shift})
P0 = bond_pv_func(None)
return (P_down - P_up) / (2 * P0 * parallel_shift)For the given scenario: 5Y key rate shifts by +25bps, all other points unchanged:
- The portfolio's price change approx KRD_5 * 25bps * P0
- Effective duration would estimate price change from a full parallel 25bps shift, overstating the actual impact
Complexity & Edge Cases
- Time complexity: O(K) for K key rate points, each requiring a PV calculation
- Space complexity: O(K) for key rate duration vector
- Edge cases: (1) Interpolation: shifting one key rate requires interpolating the shift to adjacent points (linear, quadratic). (2) Sum of all KRDs approx effective duration for small shifts. (3) Partial PV01: KRD * portfolio value = partial DV01 at that key rate. (4) Negative KRDs possible for bonds with embedded options or hedges.
Verification
Portfolio with effective duration = 6, KRDs: 2Y=0.5, 5Y=1.5, 10Y=3.0, 30Y=1.0 (sum = 6, matches)
- 5Y shift of +25bps: portfolio price change approx -1.5 * 0.25% * P0 = -0.375% * P0
- Full parallel 25bps shift: change approx -6 * 0.25% * P0 = -1.5% * P0
- KRD_5 captures the isolated impact; effective duration overstates by 4x in this scenario
Key Considerations
- Key rate durations decompose interest rate risk into curve shape components -- critical for hedging non-parallel shifts
- Common key rate buckets: 2Y, 5Y, 10Y, 30Y -- matching the most liquid swap/bond maturities
- Hedging: to neutralize KRD_5 exposure, trade instruments with offsetting KRD_5 (e.g., 5Y Treasury futures)
- Portfolio managers use KRD profiles to express curve shape views (steepening, flattening, butterfly)