本文原由作者于2016年5月29日首发于人大经济论坛,整理如下。
引言:
本系列帖子“量化小讲堂”,通过实际案例教初学者使用python、pandas进行金融数据处理,希望能对大家有帮助。
【所有系列文章汇总】请点击此处
微信:xbx_laoshi,量化交流Q群(快满):438143420,有问题欢迎交流。
文中用到的A股数据可在www.yucezhe.com下载,这里可以下载到所有股票、从上市日起的交易数据、财务数据、分钟数据、分笔数据、逐笔数据等。
逆天的反转策略在A股实证
策略简介
动量策略和反转策略的原理主要是基于股票市场中可能存在的动量效应或反转效应。
所谓动量效应,是指在一段时间内,股票会延续它过去的趋势。过去涨,接下来继续涨的概率比较大,也就是我们常说的强者恒强;过去跌,接下来就更可能继续跌。基于股票动量效应,我们可以通过买入过去收益率高的股票、卖出过去收益率低的股票来构建投资组合,这种构建投资组合的方法叫做动量策略。而反转效应恰好相反,反转效应认为在前一段时间表现较差的股票,在下一阶段反而会出现逆转。即过去一段时间收益率较低的股票在未来的收益率反而会高于过去收益率较高的股票。就像我们常说的超跌反弹。基于反转效应,投资者可以通过买入过去收益率低的股票、卖出过去收益率高的股票来获利,这种利用股价反转效应构造的投资策略称为反转策略。
接下来本文将详细说明两种策略的具体做法。
既然是选股策略,我们首先需要确定目标证券的范围,即确定一个股票池,以后两种策略就从这些股票池中选择股票,比如可以选择A股所有股票作为股票池。
接下来,由于要判断股票在某段时间内表现的好坏,我们要选定一个时间长度作为股票业绩的评价期,通常称为投资组合的排名期,比如可以选择3个月,然后计算所有股票在这3个月的累计收益率作为股票业绩的评价指标。接着,根据排名期计算的累计收益率,对所有股票进行升序或者降序排列,然后等分成若干组,其中累计收益率最大的一组称为赢家组合,累计收益率最小的一组称为输家组合。排名期之后的一段时间(比如1个月)作为赢家组合和输家组合的持有期限,如果持有的是赢家组合,则为动量策略,反之则为反转策略。在持有期结束后重新确定排名期,重复上述过程。
接下来,本文将采用 A股的实际数据,实证检验一下动量策略和反转策略的效果到底怎样。
实战
假设我们选择A股市场所有股票作为考虑的目标股票,回测的开始日期为2010年12月31日,结束日期为2015年12月31日(开始结束时间是参数,在程序中可以自行修改),排名期为3个月(也可以自行设置),即从2011年4月1号开始,每月的第一个交易日根据前三个月的累计收益率的排名换仓。
为了使结果更加可靠,本文剔除了在排名期内累计停牌超过(5*排名期月份数)天的股票。比如,如果排名期为3个月,就剔除在这3个月内累计停牌超过15天的股票,接着计算剩下的股票在排名期的累计收益率,然后根据累计收益率按升序排序,取排序后前5%(即累计收益率最低的5%)的股票作为反转策略的股票组合,后5%(即累计收益率最高的5%)的股票作为动量策略的股票组合。在下个月第一个交易日,剔除掉反转策略股票组合和动量策略股票组合中当天开盘涨停的股票,按等权重持有剩余的股票,持有期为1个月,计算这1个月内股票组合的收益率。下月初再根据前三个月的排名重复上述过程,最终可以得到动量策略和反转策略每天的日收益率曲线,进而计算出相应的资金曲线。
本文希望通过动量策略和反转策略在A股的实证,向大家介绍pandas的以下几个功能的运用:
1. 时间序列重采样resample()函数的用法
2. 数据分组函数groupby()函数的用法
3. 分组计算函数agg()函数的用法
下面上具体的程序。
程序
要验证动量策略和反转策略的实际效果,需要A股所有股票的历史交易数据,在www.yucezhe.com可以下载到所有股票历史至今的数据。如下图所示,每一行是每一天的数据:
数据有以下的字段:
【code】股票的代码,上证股票以sh开头,深证股票以sz开头
【date】交易日期
【open】开盘价
【high】最高价
【low】最低价
【close】收盘价
【change】涨跌幅,复权之后的真实涨跌幅,保证准确
【volume】成交量
【money】成交额
【traded_market_value】流通市值
【market_value】总市值
【turnover】换手率,成交量/流通股本
【adjust_price】后复权价,复权开始时间为股票上市日,精确到小数点后10位
【report_date】最近一期财务报告实际发布的日期
【report_type】最近一期财务报告的类型,3-31对应一季报,6-30对应半年报,9-30对应三季报,12-31对应年报
【PE_TTM】最近12个月市盈率,股价 / 最近12个月归属母公司的每股收益TTM
【PS_TTM】最近12个月市销率, 股价 / 最近12个月每股营业收入
【PC_TTM】最近12个月市现率, 股价 / 最近12个月每股经营现金流
【PB】市净率,股价 / 最近期财报每股净资产
下面是代码的截图,代码里面有详细的注释,有问题可以留言,附件中有程序的源码,回复即可下载。
将数据下载下来,运行代码,可以看到动量策略的年化收益率为-1%,最大回撤达到-61.8%,而反转策略的年化收益为37%,远远超过动量策略,并且最大回撤也比动量策略小很多。和大盘相比,在两者最大回撤差不多的情况下,反转策略的年化收益也远高于同期大盘的年化收益3.9%,说明中国的A股市场存在较为明显的反转效应,反转策略的实际效果要远好于动量策略。
其实在国外,惯性策略还是比较有效的,但在A股市场效果不好,可能和中国市场过分炒作有关。而反转策略在中国相当有效,是一个非常好的策略。建议大家可以修改程序中的一些参数,来找到最优化的反转策略。比如可以适当缩小选股范围,比如只在绩优股或者创业板股票中选取。也可以调整计算涨跌幅排序的时间,本文使用3个月,可以试试6个月、1个月。也可以缩短组合持有期。
扫描下图二维码,加邢不行私人微信,获取文中附件、代码、数据的下载链接。
扫描上方二维码加邢不行微信,或直接添加微信号:xbx_laoshi
关于《量化小讲堂》之后想看的内容,或者相关问题,可以加我微信xbx_laoshi、Q群(快满):438143420沟通。
网友评论