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。
- 若协议利率高于远期利率,多头价值为负,反之亦然。