第四章:利率衍生品定价
做市交易这行,说到底拼的是定价能力。你报出的价格,能不能既吸引对手盘,又让自己不亏钱?这背后就是一套严谨的定价逻辑。今天咱们聊聊利率衍生品里最核心的四个品种:IRS、国债期货、FRA和OAS。
我个人习惯,每次讲定价前都会先问自己一句:这个产品的现金流是什么?搞清楚了现金流,定价就完成了一半。
4.1 利率互换(IRS)定价
IRS说白了就是两笔现金流的交换。一方付固定,一方付浮动。定价的核心,就是算清楚这两笔现金流的现值,让它们相等。
我记得刚入行那会儿,带我的老交易员跟我说:“IRS定价,就是找那个让合约价值为零的固定利率。”这句话我记到现在。
PV固定端 = PV浮动端
固定利率 = (1 - DFn) / (Σ DFi × τi)
其中DF是贴现因子,τ是计息期限。你想想看,浮动端的现值其实就等于面值,因为浮动利率会重置到市场利率。所以定价就简化成了:
# 简化版IRS定价逻辑
def irs_swap_rate(discount_factors, tenors):
"""
discount_factors: 各期限贴现因子
tenors: 各期计息期限(年化)
"""
numerator = 1 - discount_factors[-1]
denominator = sum(df * tau for df, tau in zip(discount_factors, tenors))
return numerator / denominator
嗯,这里要注意:贴现因子怎么来?一般用OIS曲线。为什么?因为IRS的抵押品通常是现金,OIS利率最能反映抵押品的资金成本。我曾经在项目里遇到过直接用Libor曲线贴现的情况,结果定价偏差了2-3个基点——别小看这点偏差,做市商拼的就是这几个BP。
4.2 国债期货定价
国债期货的定价逻辑跟IRS不太一样。它涉及一个关键概念:转换因子。
为什么会引入转换因子?因为可交割券不止一只。交易所规定了一篮子可交割券,每只券的票息、期限都不同。转换因子就是把这些券“标准化”的工具。
我记得有一次做国债期货套利,发现CTD券(最便宜可交割券)切换了,但我没及时调整定价模型,结果亏了十几个BP。从那以后,我每次定价前都会先确认CTD券是哪只。
期货价格 = (最便宜可交割券价格 - 持有收益) / 转换因子
持有收益怎么算?说白了就是:你买入现券、持有到交割日这段时间的融资成本减去票息收入。
# 国债期货定价简化模型
def bond_future_price(ctd_price, conversion_factor, repo_rate, coupon, days_to_delivery):
"""
ctd_price: CTD券全价
conversion_factor: 转换因子
repo_rate: 回购利率
coupon: 票息率
days_to_delivery: 距交割日天数
"""
carry = ctd_price * repo_rate * days_to_delivery / 365 - coupon * days_to_delivery / 365
future_price = (ctd_price - carry) / conversion_factor
return future_price
4.3 远期利率协议(FRA)定价
FRA定价其实是最直观的。它就是一个远期开始的利率锁定合约。定价的核心是:无套利原则。
你想想看,如果我能用即期利率组合出一个远期利率,那FRA的定价就应该等于这个隐含远期利率。否则就有套利空间。
FRA利率 = ( (1 + RL × TL) / (1 + RS × TS) - 1 ) / (TL - TS)
其中RL是长期即期利率,RS是短期即期利率,T是期限。
我个人习惯用3M的FRA来对冲IRS的浮动端风险。为什么?因为IRS的浮动端通常也是3M重置,天然匹配。有一次我在做FRA报价时,发现市场报价跟理论值差了3个BP,仔细一查,原来是市场在定价某个央行动向的预期——这就是做市商的嗅觉。
# FRA定价示例
def fra_rate(short_rate, long_rate, short_tenor, long_tenor):
"""
short_rate: 短期即期利率
long_rate: 长期即期利率
short_tenor: 短期期限(年)
long_tenor: 长期期限(年)
"""
numerator = (1 + long_rate * long_tenor) / (1 + short_rate * short_tenor) - 1
denominator = long_tenor - short_tenor
return numerator / denominator
4.4 期权调整利差(OAS)
OAS是个有意思的东西。它衡量的是:剔除了期权影响后,信用债相对于国债的额外收益。
说白了,OAS就是回答一个问题:这只含权债,到底比国债多赚了多少?
我记得第一次算OAS时,用了蒙特卡洛模拟,跑了10万条路径,结果发现OAS是负的——这意味着市场认为这只债被高估了。后来我简化了模型,用二叉树也能算,精度差不了太多。
1. 构建利率二叉树(或蒙特卡洛路径)
2. 在每个节点判断是否行权
3. 用OAS作为常数利差,贴现所有现金流
4. 调整OAS,使理论价格等于市场价格
# OAS计算简化逻辑(二叉树法)
def calculate_oas(market_price, bond_cashflows, tree_rates, call_schedule):
"""
market_price: 市场价格
bond_cashflows: 各期现金流
tree_rates: 利率二叉树
call_schedule: 赎回条款
"""
def price_with_oas(oas):
# 在每期利率上加OAS
adjusted_rates = [r + oas for r in tree_rates]
# 用二叉树倒推价格
return binomial_tree_price(adjusted_rates, bond_cashflows, call_schedule)
# 用二分法求解OAS
return bisection(price_with_oas, target=market_price)
知识体系总览
下面这张图,是我自己整理的四类利率衍生品的定价逻辑。你看,它们都围绕一个核心:现金流贴现。区别在于:
- IRS:固定vs浮动,找平衡点
- 国债期货:转换因子+CTD,算持有收益
- FRA:无套利,隐含远期利率
- OAS:含权债,蒙特卡洛或二叉树
做市交易员的核心竞争力,就是能在几秒钟内,把这些定价逻辑跑通,然后报出有竞争力的价格。嗯,说到底,这行就是拼细节。
公众号:蓝海资料掘金营,微信deep3321