公众号致力于分享量化策略,培训视频,Python,程序化交易等相关内容如果你喜欢本文,麻烦分享与关注一下公众号非常感谢!
『正文』
ˇ
主连复权算法大揭秘
小的时候,笔者与父母每周会看一档名为“魔术揭秘”的电视节目,没有记错的话好像还是当时《正大综艺》,后来在网上搜了搜,如下图所示。e……mmmmm记忆力果然还在。
该节目当时主要是针对很多魔术,类似大变活人,枪打活人等等一些在当时属于国人“睁眼看魔术”的时代。毕竟那时候是1998年,别说互联网,手机还是有天线,那时候手机就叫做诺基亚或摩托罗拉,那时候的广告词还是呼机手机一个都不能少的时代。
每周看一集魔术揭秘的笔者,现在依稀记得魔术揭秘之后一家人在哪里得知真相大白后的感叹。魔术师们是怎么想出来的法子,让别人一眼看不出来的完美“超能力”。
该篇文章是在前几篇“主连复权与指数”差异化分析后对复权算法的研究,目前市面上笔者知道的商业化复权案例仅有三例——金字塔的等比例复权,TBQ的主连后复权,米筐卖的复权数据,该三个案例笔者身边都有人用以研究回测和实盘运行。首先,金字塔作为商业化软件很多年了就不多讲了。其次,TBQ是在之前10多年前基础上新开发的回测和实盘框架,并且加入了主连后复权的功能,当然还有很多其他功能,在更新迭代了软件功能基础上,也为指数数据回测准确性的痛点一次性解决。最后,米筐的复权数据是在VNPY陈总作为类似产品经理的基础上向米筐提出的一个数据需求,后经由前后的沟通协商最后搞出来的复权连续数据。
显而易见,复权数据是期货程序化交易的必需品。有的人你说,软件都提供了,或者我花钱买就可以了,费那么大劲自己复权干嘛啊?第一,对于笔者来说我知道了算法知道了逻辑,我心里才安心。毕竟是人都会犯错误,给你错误的数据,堂而皇之的用着,其实本来是对自己和对资管客户的不负责。第二,为日后某些工作提前做准备。
OK,阐述完笔者的唠叨,下面我们正式进入正题,主连复权算法的大揭秘。
首先说到复权,第一反应到的是股票的前复权和后复权,如下图所示:
我们在计算股票的复权的过程中,需要计算出复权因子,然后根据复权因子,乘以ohlc四个价格。但实际上,其实这已经并不是什么秘密了,然后在股票复权里,除了基本的复权因子逻辑和算法外,其实最核心关键的是“前收盘价”。这里的前收盘价其实与字面的前收盘价还有些许不同,而正是这些不同导致了正确与否。在除权当天,交易所会根据分红、配股、送股等等计算出除权后的价格,而这个价格在复权计算过程和算法计算中,都是要用到的因素且没有之一。有了这“前收盘价”才能正确计算出来。如下图所示:
2017年5月25日是浦发银行的除权日,在该日体现的前收盘价并不是像之前序列数据形成收盘价T+1对应关系,而是由15.47变为了11.75,这里的11.75也并不是开盘价的关系,而是根据分红派息送股等计算而来。如下图所示:
这里是2018年7月13日浦发银行又一次的除权,可以看到,这一次的9.47就跟上下任何一个价格没有相同了。究其原因请看下图所示:
该股票于2018年7月12日股权登记,进行10派1,相当于每一股派0.1元也就是1毛钱。7月12日的收盘价是9.57元,所以除权0.1,除权价格为9.47,也就将该价格定位为前收盘价,而不是简单的9.57去shift()。(shift是python里面panda包大家经常所用的一个T+X,T-X功能)
每一次的这种除权后的价格变为前收盘价,然后计算出来的涨跌幅,在进行1+涨跌幅的累乘,才是最正确的复权因子。
但是,在期货的世界里并不存在分红、配股和送股。所以这种方法是行不通,但是这种计算逻辑和思想是可以借鉴的,说白了,就是升贴水比例的一个折算。说归说,做归做,做对了归做对了还,这个比例折算也就是复权因子,具体应该如何搞?如下图所示:
2019年5月6日,EG进行换月,之前均是旧合约的序列数据,同时这也是EG历史上第一次换月,这里的复权因子=T-1旧合约收盘价 / T-1新合约收盘价(T日为换月日)。我们脑补一下,换月那天的复权价格其实既不是旧合约也不是新合约,因为复权过了,但是在之前的那天旧合约收盘价和新合约收盘价的比例关系是可以计算出来的,这个比例就是换月那天新合约所要调整的比例依据。这个依据要持续后面的每一分,每一秒,每一天。在5月6日前该比例或者说因子是0.977971,那么5月6日那天开盘的价格就都要根据这个比例相乘,得出复权价格。复权开(最高、最低、收)盘价=T日新合约开(最高、最低、收)盘价 * 复权因子,后面时间序列价格依次如此计算即可。
下面我们对照一下软件上面的复权数据和我们EXCEL计算的数据正确与否,如下图所示:
第二幅图是已经复权过的数据框,和上面截图的EXCEL数据框大家可以自行对照一下数据。本人对照过SS、EG、EB等日线的复权数据是100%正确的。之所谓对照这几个是因为这几个上市时间最长的就一年方便复权,因为后面的第二、第三、第N次复权每一次复权都涉及第一次的复权正确与否,因此我就找了时间最短的。
当然我介绍完后续的复权之后,大家有时间和精力也可以去对比时间更长的品种,目前截止发稿,笔者复权完铁矿石的主力合约,也是100%正确。(因为时间因素,8月29日研究出来的,没有用python封装好函数功能,所以用的EXCEL对比)
我们在上述复权因子的算法公式和逻辑介绍中阐述,是T-1旧合约收盘价 / T-1新合约收盘价(T日为换月日),第二次的复权依旧是上述公式,但是计算出来的是第二次复权的旧合约和新合约的折算比例,还没有包括第一次复权的因子也就是折算比例,因此,我们需要将第一次的复权因子也就是折算比例考虑进来,那么第二次复权因子=第一次折算比例*第二次折算比例。
同理依次往下,第三次、第四次…… 一直到最近依次复权因子计算都按照上述计算的逻辑和算法而来。
上述两幅图是笔者在SS品种小时K线第二次复权随便挑的日期复权数据,该数据也跟某软件平台复权数据是一样的。
综上所述,不论小时还是分钟,日K等数据周期下,该算法逻辑都可以100%正确复现出软件里面的复权连续数据,从而达到让我们线下回测研究或迁移别的平台数据验证等等需求。
后面笔者会跟慕总一起将该算法进行python封装,达到线下复权数据后研究的目得。最后不求一键三连,只求喜欢该文章的请大家加个关注和转发。再此感谢大家~~~
EXCEL复权操作图例说明:
End
祝点击在看的小伙伴,2020发大财