添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

分析员, SAC 执业证书编号: S0080515120002

联系人, SAC 执业证书编号: S0080117080049

姬江帆 分析员 SAC 执业证书编号 S0080511030008 SFC CE Ref: BDF391

转债理论定价一直是个略显尴尬的话题。在没有真正进入转债市场时,几乎所有人最先了解到的都是其定价机制(尽管可能并不深入),毕竟这是最容易在学校里讲授的内容。但在真正来到这个市场之后,又很快发现理论上的定价其实并不重要。毕竟价格是交易出来的,不是模型跑出来的。而在转债只数不多的年代,投资者结构和供给形势 —— 这些不可量化的因素,又很大程度上决定着转债的定价方式。这使得不少人在职业初期就绕过了定价模型的学习。

不过,过于轻视也有失偏颇。一方面,掌握定价模型有助于更快理解转债这一产品,而掌握了这一工具,也有助于分析市场。例如对于转债估值水平的衡量来说,最纵向可比的指标,依然是隐含波动率。无论如何改造溢价率、债底溢价率、 YTM 这些指标,都无法将其纵向可比性抬高到与隐含波动率相同的水平。再如评价这种对正股、债底的敏感性,除了 印象流 以外,由定价模型衍生出的敏感系数计算也是有价值的工具。再比如转债市场的情景分析时,有 Monte-Carlo 模拟模型总比没有更好。另一方面,市场也在变化,转债已经基本走出小众市场的范畴,年金、社保、 QFII 、权益投资者等等群体都已经加入到这一市场。未来理性、可量化的成分将肉眼可见地变多,此时定价模型的戏份也会提高。因此,我们在此对转债常用的定价模型及其实现方法进行介绍,并顺带聊一聊转债研究员可能会用到的 Python 技巧。当然,这里并非 Python 入门介绍,我们仅对一些需要解释的技巧进行讲解。

Black-Sholes 模型 是转债定价模型中最简单也最方便使用的一个。其思路是将转债拆分成债底 + 期权,并对两步分进行分别定价。其中债底用传统的贴现方法就可以得到,期权部分则是只考虑转股权,而且是将转股期权简化为一个欧式看涨期权。

二叉树模型 在实战中有些高不成、低不就。显然在理论上讲,二叉树可以解决提前转股的问题。但就 A 股的转债定价而言,真的需要这样的设定吗?有实战经验的投资者知道,基本上转债的转股都发生在赎回触发之后(也有不带赎回条款的,是到期决定转股与否,博汇接近于这样的处理,还有 14 宝钢 EB )。日常可能出现零星的负溢价,从而诱导投资者小批量转股。而以二叉树模型的设定,外加 A 股转债有票息、实际无分红(因为分红之后转股价会调整),基本不会出现期权价值小于当场转股的可能(数学上亦可证明)。因此,这一理论上的优势,结合实战经验考虑,也显得有些多此一举。同时,这个模型对于赎回压制、回售保护也无法给出很好的刻画。而该模型的 低不就 就显得更加明显,相比 BS 公式其运行速度不在同一量级。总之,这些特性使得二叉树模型在 A 股转债领域的实际应用价值降低。

模拟法是最精巧也最慢的定价模型。经典的计算过程是: 1 )模拟股价; 2 )计算到期日的转债价值; 3 )从到期日开始逆推转债在其他日期的价值,此时需要额外的两个工作,一是用最小二乘法预估继续持有转债的价值(从而与直接转股进行对比,做出决策),二是看转债过去 N 日的路径,若触发赎回、回售条款,则进行相应处理; 4 )将每一条模拟路径下的转债价值汇总,求均值。但结合实战经验考虑,实际可以更加简单。

Monte-Carlo 模拟法 应用的场合?由于计算慢,对计算机消耗大,一般太讲究实效性的场合不会用。但其最大的优点在于能够考虑赎回条款对转债估值的压制,以及回售条款的保护性。它让投资者可能更加合理地考虑某些假设情况下转债的走势(跟涨能力、保护性),因此我们常用它来给转债做情景分析。

无论什么模型,自身的局限性自不必说。但仅就其有用的方面来讲,上述内容还远未完成(虽然篇幅已经不小)。不仅包括隐含波动率的计算、其他敏感系数的计算、情景分析的应用这些明面上的内容。实际算法还有很大的优化空间,但为表述清晰我们也不在此深入讨论。此外,我们在实际分析市场的过程中,还会考虑转债稀释以及转股给市场带来的冲击,不同品种下修倾向的假设,限于可以留在未来讨论。

Black-Scholes 模型

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 、那到期赎回价高反而吃亏咯?当然不会,因为那将反映到债底上。

二叉树模型

二叉树是一种数值解法,需要先生成风险中性空间下的股价树,然后逐层倒推完成定价。而转债由于票息和本金的存在,也让这个稍稍复杂一些。模型推导不在此重复,优缺点也不再老生常谈,我们直接进入实现步骤。

BS 公式不同,这里我们不妨先看看最终的函数:

可以看到基本和 BS 公式在结构上没有太大区别,但不再计算债底,而是先翻译转债的票息现金流。这些现金流的价值将在 binomialTree 这一步中一并计算。而这里的 _cashFlowDict BS 公式时写的 _cashFlowCalc 有点区别,后者的时间都是以年为单位的,这里转换成以天为单位的,方便其在 Tree 中计算(因为树中的每一层代表一天)。同时,为了引用方便, _cashFlowDict 将返回一个字典变量,而非两个 list 。此外,为了方便在其他函数里调用,避免套 if ,我们还做了一个十分简单的 cashFlowGenerator 函数,该函数在有票息支付的日子里返回票息(或者本金),否则返回 0.

下面看 binomialTree 函数:

步骤非常容易理解,这里又需要用到两个内部函数,分别是 _underlyingTree _calcOptionTree 。前者是生成股价数,后者是在树上计算转债定价。

二叉树模型在实战中有些高不成、低不就。 显然在理论上讲,二叉树可以解决提前转股的问题。但就 A 股的转债定价而言,真的需要这样的设定吗?有实战经验的投资者知道,基本上转债的转股都发生在赎回触发之后(也有不带赎回条款的,是到期决定转股与否,博汇接近于这样的处理,还有 14 宝钢 EB )。日常可能出现零星的负溢价,从而诱导投资者小批量转股。而以二叉树模型的设定,外加 A 股转债有票息、实际无分红(因为分红之后转股价会调整),基本不会出现期权价值小于当场转股的可能(数学上亦可证明)。 因此,这一理论上的优势,结合实战经验考虑,也显得有些多此一举。同时,这个模型对于赎回压制、回售保护也无法给出很好的刻画。而该模型的 低不就 就显得更加明显,相比 BS 公式其运行速度不在同一量级。总之,这些特性使得二叉树模型在 A 股转债领域的实际应用价值降低。

但改一改能不能更有用? 能。如果结合经验考虑,转债在转股期内,平价如果达到 150 (震荡市或者熊市可能 140 )基本都会触发赎回条款,回售期内平价低于 50 也会触及回售条款。因此,如果把路径依赖的赎回、回售条款简化成平价突破 150 或跌破 50 触发的,二叉树也将具备一定处理附加条款的能力,成为穷人版的 Monte-Carlo 模拟模型。但由于缺乏严谨性,我们不在此展示实现方法(实际改一改 _calcOptionTree 的最后几行就可以)。

Monte-Carlo 算法

模拟法是最精巧也最慢的定价模型。 经典的计算过程是: 1 )模拟股价; 2 )计算到期日的转债价值; 3 )从到期日开始逆推转债在其他日期的价值,此时需要额外的两个工作,一是用最小二乘法预估继续持有转债的价值(从而与直接转股进行对比,做出决策),二是看转债过去 N 日的路径,若触发赎回、回售条款,则进行相应处理; 4 )将每一条模拟路径下的转债价值汇总,求均值。

但结合实战经验考虑,实际可以更加简单。 这个模型最耗时耗力的步骤也在第三步,尤其是用最小二乘法预估继续持有转债的价值这里。但和二叉树模型一样,投资者知道,一般不触发赎回条款,投资者不会也没有必要转股。因此我们完全可以跳过这一步骤,只需要考虑该路径是否会提前触发赎回条款、回售条款,从而做相应的处理即可。

实现方法上,我们仍先展示最终的函数,再拆解中间的过程:

整个过程看起来和二叉树很像。其中,模拟股价这里,利用 numpy cumprod (累积相乘)效果会比用循环来逐日生成效果要好得多,没理由不用。这个模拟函数如下:

模拟好股价之后,开始逐条路径分析。实际上就是分析其会不会提前触发附加条款(这里只处理回售和赎回条款,对下修的处理需要进一步做假设,可以以后再讨论)。于是需要两个内部函数 _processRecall _processResell 来分别判断赎回和回售条款各自的触发情况。所返回的 isBeRecall, thisRowEndTime, thisRowValue 三个变量,分别是是否触发(一个 0 1 的变量)、触发时间和触发后转债在该时间获得的现金流(对于赎回来说是假设立即转股,这个现金流就是平价,对于回售来说就是回售价)。这两个函数如下:

但为避免内部函数过长,提高维护和阅读难度,我们又做了三个小的辅助函数,分别是 _sliceInMC _isResell 以及 _isRecall 。其中 _sliceInMC 是将路径切片,拿出来分析条款的触发情况,只有一行(其实也没有必要写),但避免了丑陋的切片操作暴露在上级函数中。 _isRecall _isResell 是根据条款分析赎回、回售是否触发,是则返回 1 ,否则返回 0

最后,对于每条路径的现金流,除了条款触发(或者到期)之外,票息也需要考虑。但由于提前触发附加条款的可能性存在,票息、本金是否支付也将有变化。这里,我们还需要一个内部辅助函数,来计算每一条路径下现金流的现值,如下所示。至此 Monte-Carlo 模拟法已经完成。

Monte-Carlo 模拟法应用的场合? 由于计算慢,对计算机消耗大,一般太讲究实效性的场合不会用。但其最大的优点在于能够考虑赎回条款对转债估值的压制,以及回售条款的保护性。它让投资者可能更加合理地考虑某些假设情况下转债的走势(跟涨能力、保护性),因此我们常用它来给转债做情景分析。

写在最后: 无论什么模型,自身的局限性自不必说。但仅就其有用的方面来讲,上述内容还远未完成(虽然篇幅已经不小)。不仅包括隐含波动率的计算、其他敏感系数的计算、情景分析的应用这些明面上的内容。实际算法还有很大的优化空间,但为表述清晰我们也不在此深入讨论。此外,我们在实际分析市场的过程中,还会考虑转债稀释以及转股给市场带来的冲击,不同品种下修倾向的假设,限于可以留在未来讨论。

报告原文请见 2018 11 22 日中金固定收益研究发表的研究报告 《中金公司*杨冰,姬江帆:专题研究*说没用也有点用的转债定价:顺便聊聊转债研究员的Python技巧

相关法律声明请参照: 返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。