返回题库

固收 Immunization Duration Matching

Fi Immunization Duration Matching

专题
Algorithmic Programming / 算法编程
难度
L2
来源
MyntBit

题目详情

固收免疫化久久期匹配。养老基金有一笔 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 terms

Complexity & 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