返回题库

固收 Callable Bond Negative Convexity

Fi Callable Bond Negative Convexity

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

题目详情

评估某 10 年期可赎回债券,票面利率 5%,赎回条款允许发行人在 5 年后以面值赎回。假设同类不可赎回债券的当前到期收益率也为 5%。此可赎回债券为何在利率显著下降时呈现负凸度?

任务:利率下降时,债券价格上升,但可赎回债券的价格受赎回条款上限约束——发行人会在价格接近赎回价时赎回。投资者实际上卖出了一个看涨期权给发行人,限制了债券价格上涨空间,导致凸度转为负值。与不可赎回债券的正凸度形成对比。

英文原题

You are evaluating a 10-year callable bond with a coupon rate of 5% and a call provision that allows the issuer to redeem the bond at par after 5 years. Assume the current yield to maturity for similar non-callable bonds is also 5%.
Why does this callable bond exhibit negative convexity when interest rates fall significantly?

解析

问题分析

可赎回债券赋予发行方在特定日期以特定价格赎回债券的权利。当利率下降时,发行方更可能赎回(再融资),导致债券价格上涨空间受限——这就是负凸性。MBS(住房抵押贷款支持证券)是最典型的负凸性资产。

核心公式

有效凸性 = (P_up + P_down - 2*P_0) / (P_0 * Δy²)

对于可赎回债券:利率下降→提前赎回概率上升→P_up < 不含权债券→有效凸性 < 0。

double bondPV(const std::vector<double>& cf, const std::vector<double>& t, double y){
    double pv=0; for(size_t i=0;i<cf.size();++i) pv+=cf[i]/pow(1+y,t[i]); return pv; }
double duration(const std::vector<double>& cf, const std::vector<double>& t, double y){
    double pv=bondPV(cf,t,y), dur=0; for(size_t i=0;i<cf.size();++i) dur+=t[i]*cf[i]/pow(1+y,t[i]); return dur/pv; }

复杂度与边界

  • 时间复杂度:定价 O(利率树上节点数)
  • 空间复杂度:O(期限 * 状态数)
  • 边界条件:(1) 利率为 0 时赎回概率趋于 1 (2) 赎回保护期内不可赎回 (3) 通知期影响有效赎回日期

英文解析

Analysis

A callable bond grants the issuer the right to redeem the bond at a specified price (typically par) after a call protection period. When interest rates fall, the issuer becomes more likely to call the bond for refinancing, capping the bond's price appreciation -- this creates negative convexity. MBS (mortgage-backed securities) are the most prominent example of negatively convex assets.

The effective convexity formula: EffConv = (P_up + P_down - 2*P0) / (P0 * delta_y^2)

For a callable bond: when rates drop, call probability rises, P_up is less than the non-callable equivalent, so effective convexity < 0.

Solution

double bondPV(const std::vector<double>& cf, const std::vector<double>& t, double y){
    double pv=0; for(size_t i=0;i<cf.size();++i) pv+=cf[i]/pow(1+y,t[i]); return pv;
}
double effectiveDuration(const std::vector<double>& cf, const std::vector<double>& t,
                         double y, double dy, double callPrice){
    double P0 = std::min(bondPV(cf, t, y), callPrice);
    double P_up = std::min(bondPV(cf, t, y - dy), callPrice);
    double P_down = std::min(bondPV(cf, t, y + dy), callPrice);
    return (P_down - P_up) / (2 * P0 * dy);
}
double effectiveConvexity(const std::vector<double>& cf, const std::vector<double>& t,
                          double y, double dy, double callPrice){
    double P0 = std::min(bondPV(cf, t, y), callPrice);
    double P_up = std::min(bondPV(cf, t, y - dy), callPrice);
    double P_down = std::min(bondPV(cf, t, y + dy), callPrice);
    return (P_up + P_down - 2*P0) / (P0 * dy * dy);
}

When rates drop below the call threshold, P_up is capped at callPrice, making (P_up + P_down - 2*P0) negative, so convexity becomes negative.

Complexity & Edge Cases

  • Time complexity: O(tree nodes) for interest rate tree pricing; O(N) for simple cash flow PV
  • Space complexity: O(maturity * states) for tree-based models
  • Edge cases: (1) At zero interest rates, call probability approaches 1 -- bond price = call price. (2) During call protection period, the bond behaves like a non-callable bond. (3) Notice period affects the effective call date. (4) Make-whole call provisions have different economics -- issuer pays a premium that varies with rates.

Verification

For a 10-year 5% callable bond at par, call at par after year 5, dy = 25bps:

  • When y = 5%: P0 = 100, P_up approx 102.5 (not called), P_down approx 97.6 -- convexity positive
  • When y = 3%: P0 = min(117.6, 100) = 100 (called), P_up = 100, P_down = min(103.8, 100) = 100 -- convexity approx 0 or negative
  • The transition from positive to negative convexity occurs as rates cross the call threshold

Key Considerations

  • Negative convexity means the bond underperforms in both rising and falling rate environments relative to a non-callable bond
  • OAS (Option-Adjusted Spread) removes the embedded call option value to contrast callable vs. non-callable bonds fairly
  • For MBS, prepayment modeling (PSA, CPR) determines call probability -- faster prepayments = more negative convexity
  • Convexity hedging: investors holding negatively convex bonds may need to buy convexity via options or swaptions