社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【中金固收·可转债】说没用也有点用的转债定价:顺便聊聊转债研究员的Python技巧  20181122

中金固定收益研究 • 6 年前 • 2356 次点击  
作者
  分析员,SAC执业证书编号: S0080515120002

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

姬江帆分析员SAC执业证书编号  S0080511030008SFC 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行。但前提是其中套了几个辅助函数,同时用了numpydatetime两个常用库。这也是Python中比较鼓励的形式,尽量简化每一个函数,并尽量使用现成的库。

几处细节:

1r是用无风险收益率还是用同等级\期限信用债收益率?教课书上是前者,实际要用后者。因为在期权定价推导的过程中,是假定买入期权 + 做空正股的对冲完成之后,这个组合没有风险,因此也应该有着无风险的收益率。但对于A股转债来说,这样的组合还是要承担债券发行人的信用风险的。一旦违约,连债底带转股期权都将不复存在。因此我们一般都用后者。

2、但同等条件下,r越高,期权价值越高,会不会导致信用偏弱的品种反而更有价值?不会,r对期权的影响远不如对债底的影响。

3、为什么x(期权执行价)要等于转股价 * 到期赎回价 / 100 ?因为对于到期赎回价107元的转债来说,到期时如果平价没超过107元,投资者也不会转股。因此对于欧式期权来说,实际上转股价 * 到期赎回价 / 100才是期权执行价。

4、那到期赎回价高反而吃亏咯?当然不会,因为那将反映到债底上。



二叉树模型

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

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


可以看到基本和BS公式在结构上没有太大区别,但不再计算债底,而是先翻译转债的票息现金流。这些现金流的价值将在binomialTree这一步中一并计算。而这里的_cashFlowDictBS公式时写的_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)将每一条模拟路径下的转债价值汇总,求均值。

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

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


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


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


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


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


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

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



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


相关法律声明请参照:

http://www.cicc.com/portal/wechatdisclaimer_cn.xhtml





今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/YDMinyZFqK
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/26691
 
2356 次点击