Black-Sholes模型是转债定价模型中最简单也最方便使用的一个。其思路是将转债拆分成债底 + 期权,并对两步分进行分别定价。其中债底用传统的贴现方法就可以得到,期权部分则是只考虑转股权,而且是将转股期权简化为一个欧式看涨期权。
其优点自然是方便、快速,而且正是由于简单,其运行的稳定性也最高。因此其被常用在:
1、各类Monitor中,尤其是实时监控的Monitor,基本只有BS模型能够正常运行。
2、计算转债各敏感系数,最常用的如Delta,代表着在对正股的敏感性。但实际Delta和其他的希腊字母都有一个缺陷,就是其仅对计算的那一瞬时有效(而当股价变了,Delta也不再准确),虽然还可以用Gamma等进行补救,但缺陷依然存在。
3、投行或审计的项目中,由于历史久、名气大、实现容易,BS模型也最常被用在这些场合。
缺点自然就是太简单了,没有考虑赎回权、下修和回售的博弈,但在乎这些的人自然也不会选BS公式。
BS模型的实现:
首先是一些准备工作。要引用一些必要的包库,不多解释:
作为输入变量,我们的转债条款用一个Dict(字典)变量来表示,如下:
计算债底:这里至少先需要一个现金流处理函数和一个贴现函数。前者是把转债的票息条款翻译成现金流(这里用两个list变量,没有继续用字典),后者把这些现金流贴现得到债底值。先来做第一个函数:
为什么函数命名时,前面加了一个“_”?实际Python在公用函数和私有函数之间太明显的区分,一般前面加一个“_”代表这是一个私有函数。显然,这个函数未来只是BS模型的一环,我们也不准备给予其外部接口。
贴现现金流的函数,比较简单(为什么没用金融计算库?这个库对转债来说,其实不太友好)。其中,enumerate函数是python中非常实用的迭代器,在不得不开始“for”的时候,enumerate往往比“for i in range(xxx)”更实用,也更清晰:
在上面准备好之后,计算债底的函数非常简单:
下面来准备期权部分。实际上,虽然数学上的重头戏在这一部分,但由于不用条款预处理等,实际上算期权比算债底简单得多。首先来准备BS公式(这个其实有现成的库,但由于太简单了,没必要引入那个库来拖时间):
一切准备就绪,下面用一个函数将上面的内容拼接起来,组成转债定价的函数。
内容非常容易理解,不多说。可以看到,最终可以直接算转债定价的函数非常简单,去掉啰嗦的注解实际只有8行。但前提是其中套了几个辅助函数,同时用了numpy和datetime两个常用库。这也是Python中比较鼓励的形式,尽量简化每一个函数,并尽量使用现成的库。
几处细节:
1、r是用无风险收益率还是用同等级\期限信用债收益率?教课书上是前者,实际要用后者。因为在期权定价推导的过程中,是假定买入期权 + 做空正股的对冲完成之后,这个组合没有风险,因此也应该有着无风险的收益率。但对于A股转债来说,这样的组合还是要承担债券发行人的信用风险的。一旦违约,连债底带转股期权都将不复存在。因此我们一般都用后者。
2、但同等条件下,r越高,期权价值越高,会不会导致信用偏弱的品种反而更有价值?不会,r对期权的影响远不如对债底的影响。
3
、为什么x(期权执行价)要等于转股价 * 到期赎回价 / 100 ?因为对于到期赎回价107元的转债来说,到期时如果平价没超过107元,投资者也不会转股。因此对于欧式期权来说,实际上转股价 * 到期赎回价 / 100才是期权执行价。
4、那到期赎回价高反而吃亏咯?当然不会,因为那将反映到债底上。