4. 远期利率协议定价

任务说明

给定即期利率曲线(连续复利),先计算各期限的远期利率,再对一份远期利率协议(FRA)做无套利定价。FRA 的现金流发生在合约期末,按名义本金 ×(参考利率 − 协议利率)× 期限折现到当前时点。

核心公式

  • 远期利率:f(T1,T2) = (r2·T2 − r1·T1) / (T2 − T1),其中 r 为连续复利即期利率。
  • FRA 价值(多头,支付固定协议利率 K):V = N·(f − K)·(T2 − T1)·e^(−r2·T2)。

完整代码

import math

# 即期利率曲线:期限(年) -> 连续复利即期利率
spot_curve = {
    0.5: 0.030,
    1.0: 0.032,
    1.5: 0.034,
    2.0: 0.036,
}

def forward_rate(t1, t2, curve):
    """由即期曲线计算 [t1, t2] 区间的连续复利远期利率"""
    r1 = curve[t1]
    r2 = curve[t2]
    return (r2 * t2 - r1 * t1) / (t2 - t1)

def fra_value(notional, K, t1, t2, curve):
    """FRA 多头价值:支付固定利率 K,收取浮动远期利率"""
    f = forward_rate(t1, t2, curve)
    r2 = curve[t2]
    tau = t2 - t1
    return notional * (f - K) * tau * math.exp(-r2 * t2)

# 示例:名义本金 100 万,1x2 FRA,协议利率 3.5%
N = 1_000_000
K = 0.035
t1, t2 = 1.0, 2.0

f = forward_rate(t1, t2, spot_curve)
v = fra_value(N, K, t1, t2, spot_curve)

print(f"1x2 远期利率 = {f:.6f}")
print(f"FRA 多头价值 = {v:.2f}")

# 无套利校验:当 K = f 时价值应为 0
v0 = fra_value(N, f, t1, t2, spot_curve)
print(f"K=f 时价值 = {v0:.10f}")

运行与验证

python fra_pricing.py

预期输出(由代码与给定输入唯一确定):

1x2 远期利率 = 0.040000
FRA 多头价值 = 4756.15
K=f 时价值 = 0.0000000000

判定通过条件:远期利率等于 4%(由 2 年期与 1 年期即期利率差推出);当协议利率等于远期利率时 FRA 价值为 0,说明定价满足无套利条件。

关键点

  • 远期利率由相邻两个即期利率共同决定,不能只用单一期限利率。
  • 折现使用期末即期利率 r2,因为 FRA 结算发生在 t2。
  • 若协议利率高于远期利率,多头价值为负,反之亦然。