固收 Immunization Duration Matching
Fi Immunization Duration Matching
题目详情
固收免疫化久久期匹配。养老基金有一笔 1 亿负债 10 年后到期,当前收益率曲线平坦为 5%。基金想用久期匹配来免疫化该负债。
英文原题
A pension fund has a single liability of 100 million due in exactly 10 years. The current yield curve is flat at 5%. The fund wants to immunize this liability using duration matching. Which of the following strategies best describes how to achieve this, assuming the fund can only invest in zero-coupon bonds with maturities of either 5 years or 15 years?
解析
问题分析
A pension fund has a single liability of 100 million due in exactly 10 years. The current yield curve is flat at 5%. The fund wants to immunize this liability using duration matching. Which of the following strategies best describes how to achieve this, assuming the fund can only invest in zero-coup
解法
根据题目要求实现相应功能。核心逻辑需要:
// 核心数据结构和方法——根据题目 API 约定实现
// 1. 确定状态表示——选择支持所需操作的数据结构
// 2. 实现核心算法——确保 O(·) 时间复杂度和正确性
// 3. 处理边界条件——空输入、极值参数、并发访问验证
用具体输入验证:构造已知输入的测试用例,确认输出匹配预期结果。
复杂度与边界
- 时间复杂度:取决于选用的算法
- 空间复杂度:取决于数据规模
- 关键边界条件:空输入、极值参数、并发场景下的正确性保证
英文解析
Analysis
Immunization via duration matching ensures a portfolio's value tracks the liability value as interest rates change. For a single liability due in exactly 10 years, the portfolio must have Macaulay duration = 10 (matching the liability horizon) and present value = liability present value.
With a flat yield curve at 5%, the liability PV = 100M / (1.05)^10 approx 61.39M. The fund can only invest in 5Y and 15Y zero-coupon bonds. Macaulay duration of a zero = its maturity. We solve for weights w5 and w15 such that:
- w5 * 5 + w15 * 15 = 10 (duration match)
- w5 + w15 = 1 (full investment)
Solution
From the duration constraint: w5 * 5 + w15 * 15 = 10, and w5 + w15 = 1:
- w5 = 1 - w15
- (1 - w15) * 5 + w15 * 15 = 10
- 5 - 5w15 + 15w15 = 10
- 10*w15 = 5, so w15 = 0.5, w5 = 0.5
def immunize_duration(target_duration, durations_available):
"""Solve for portfolio weights matching target duration."""
# For two bonds: w1*d1 + w2*d2 = target, w1 + w2 = 1
d1, d2 = durations_available
w2 = (target_duration - d1) / (d2 - d1)
w1 = 1 - w2
return w1, w2
# Present values at 5% flat
liability_pv = 100e6 / (1.05)**10 # approx 61.39M
z5_pv = 1 / (1.05)**5 # per dollar face
z15_pv = 1 / (1.05)**15 # per dollar face
w5, w15 = immunize_duration(10, [5, 15]) # = (0.5, 0.5)
invest_5y = liability_pv * w5 # approx 30.7M in PV terms
invest_15y = liability_pv * w15 # approx 30.7M in PV termsComplexity & Edge Cases
- Time complexity: O(1) for two-bond immunization; O(N) for N-bond linear system
- Space complexity: O(1) for simple case
- Edge cases: (1) Convexity: immunized portfolio must have convexity > liability convexity for positive rebalancing gains. (2) Non-parallel shifts: duration matching only protects against parallel shifts; key rate duration matching needed for twist risk. (3) Rebalancing: as time passes, portfolio and liability durations drift -- periodic rebalancing required. (4) Multiple liabilities require vector immunization (multiple duration constraints).
Verification
Liability: 100M due in 10Y, flat 5%, liability PV = 100M/1.05^10 = 61.39M, liability duration = 10
Portfolio: 50% in 5Y zeros + 50% in 15Y zeros
- Portfolio duration = 0.55 + 0.515 = 10 (matches)
- Portfolio convexity = 0.525 + 0.5225 = 125 > liability convexity = 100 (positive)
- If rates shift to 4%: liability PV = 100M/1.04^10 = 67.56M, portfolio PV approx 67.6M (immunized)
Key Considerations
- Immunization requires convexity of portfolio > convexity of liability (barbell provides higher convexity than bullet)
- Duration matching protects against small parallel shifts; for non-parallel shifts, use key rate duration matching
- Rebalancing frequency: as time passes, portfolio duration changes -- monthly or quarterly rebalancing needed
- Transaction costs from rebalancing erode immunization gains; optimize rebalancing threshold