Quantlib如何在ql.CallabilitySchedule()中添加赎回与回售权的日期及行权价
QuantLib含赎回、回售权债券的行权条款录入方法
ql.CallabilitySchedule本质是ql.Callability对象的有序集合,每个ql.Callability实例可独立指定行权类型(赎回/回售)、行权价格、行权日期,你只需将两类权利对应的所有行权条目统一加入集合即可,无需分开调用接口。
具体实现步骤
- 第一步:构造单条行权条款
每个行权日对应一条ql.Callability实例,核心参数如下:- 行权价格:用
ql.CallabilityPrice(价格数值, 价格类型)构造,一般传ql.Clean代表净价行权 - 行权类型:赎回权传
ql.Callability.Call(发行人权利),回售权传ql.Callability.Put(持有人权利) - 行权日期:QuantLib标准
ql.Date对象
- 行权价格:用
- 第二步:汇总生成
ql.CallabilitySchedule
把所有赎回、回售对应的ql.Callability实例放进同一个列表,直接传入ql.CallabilitySchedule构造函数即可。
代码示例
import QuantLib as ql # 基础环境配置(以国内银行间市场为例) calendar = ql.China(ql.China.IB) eval_date = ql.Date(15, 6, 2024) ql.Settings.instance().evaluationDate = eval_date # 存储所有行权条款的列表 callability_terms = [] # 示例1:添加赎回权:第3年末发行人可按100.2元净价赎回 call_date = ql.Date(15, 6, 2027) call_price = ql.CallabilityPrice(100.2, ql.Clean) call_term = ql.Callability(call_price, ql.Callability.Call, call_date) callability_terms.append(call_term) # 示例2:添加回售权:第2年末持有人可按100元净价回售 put_date = ql.Date(15, 6, 2026) put_price = ql.CallabilityPrice(100.0, ql.Clean) put_term = ql.Callability(put_price, ql.Callability.Put, put_date) callability_terms.append(put_term) # 生成同时包含赎回、回售权的行权时间表 callability_schedule = ql.CallabilitySchedule(callability_terms)
注意事项
如果存在多期行权的条款(比如逐年赎回、逐年回售),可以循环生成对应ql.Callability对象统一加入列表即可,QuantLib底层会自动根据每条条款的行权类型处理定价逻辑。
内容的提问来源于stack exchange,提问作者Vincent Lee
相关产品推荐
相关产品推荐

