【量化课堂】因子研究系列之三 -- 技术因子

导语:不同因子的作用折射出每个宽客各自对于金融市场的理解,本文目的在于展现不同因子与市场表现帮助各位看官查看是否有所遗漏,同时提供因子提取和使用的简易实现代码。

本文是一系列因子研究中的第二篇文章。本系列的文章有:

【量化课堂】因子研究系列之一 -- 估值和资本结构因子

【量化课堂】因子研究系列之二 -- 成长因子

【量化课堂】因子研究系列之三 -- 技术因子

技术因子简介

技术因子由技术指标转化而来。一般而言,技术因子的提出是对应成长因子而言。不同于成长因子结合财务数据等基本面指标,技术因子侧重于根据市场行情中股价和换手率等指标反映市场行为反映,用以推断价格变动趋势。量化课堂中双均线策略海龟策略均值回归入门羊驼交易系统给出了一些简单利用技术指标的策略,基于协整的搬砖策略多头趋势回踩策略斗牛蛋卷二八轮动原版策略实现是基于技术指标(一般是价格)构建的更为复杂精巧的策略,而Hurst指数与应用(单股票)则是基于既有技术指标生成复杂的技术因子的策略。同时,大家也可以进一步查看 beta 和夏普率等相关内容,这些也都是基于往期价格生成的技术指标。

动量( Momentum )

动量指的是一段时期内证券价格向某一方向持续变动的趋势。以动量因子为主的单因子策略一般被定义为动量策略(Momentum Strategy),根据较早一定窗口期内资产收益情况做多表现优于同类的资产,做空表现差于同类的资产。单纯的动量策略使用往期回报数据来预测未来截面回报数据,所谓未来截面回报( Cross Section of Future Return) 讲的是一个时间点上不同投资产品的预测回报率。这东西怎么说呢,不少人在不同时间、不同市场上的不同产品上都发现了动量策略还挺好用的,但是据说中国不是这样的,至少我们之后会在下面的回测中看到一些结果表明我们股票市场好像这招不大好用。但是,即使他们观测到了动量还不错,然而也观测到了动量策略时不时崩溃了,而且一般连着几个月出问题(有兴趣阅读 2016 年 6 月 Journal of Financial Economic 上的文章 Momentum Crashes )。

简述一下动量策略就是在上一个观测的窗口期计算回报率(一般为观测期最后一天和第一天的收盘价差值再除以前一天的收盘价),然后计算排序,通过排序选择回报率最高的几只股票并持有。当然,“动量”和“反转”是一对绕不开的冤家,如果上述策略中选择的是回报排名最低几只就变成反转策略了,反转的直观理解就是跌的太多了要反弹。这里面就涉及到很多问题了:首先,观测的窗口期定多长时间;其次,到底选择多少只股票;第三,动量还是反转是个纠结的问题,那么到底选择最高的几只还是回报最低的几只;第四,调仓周期选择;以及其他,像什么是否动态调仓、每只股票仓位选择、调仓时入场时间和价格判断和出场条件等等。本文作为描述不同因子的基本表现,简化策略为对应 1 月、 3 月、 6 月和 12 月窗口期,月初调仓平均分仓,持有一个月内没停排的股票中 1% 或 5% 的股票。因为聚宽股票价格数据起始于 2005 年初,为了可比性我们统一使用 2006 年 2 月开始回测(要不 12 个月动量没法算了啊)。实际使用的动量指标为收盘价格在窗口期的增长率,计算公式为

, 越大表示观测期间股票收盘价格增长百分比越多。

通过回测我们观测到,好像市场体现出来的不是动量惯性而是反转现象。上一个月收益增长最高的股票在下一个月都跌回去,而上个月跌的最多的股票,在下一个月带来了不错的回报。 5% 最大一个月动量的策略回测结果表明,只有在大盘情况非常好的时候,上证股票才会体现出连续两月的上涨惯性,即第一月上涨后第二月仍然上涨。但是可以看出,这样涨幅的回报一直跑不赢大盘,在整体大盘形式不理想时表现出负收益。 5% 最小策略表现出,上一个月下跌最大的股票下个月带来了不错的回报率。结合最小 1% 和最小 5% 一个月动量一致反映出的内容,我们可以发现,在 2008 年前后的行情中,回报率对于反转信号并不十分敏感,但是随着 2008 年的市场洗礼后,市场对于一个月反转信号变得愈发敏感,似乎放大了信号的作用。这样的条件下,大盘走势较好时反弹更大,而大盘走势不好时,根据反转信号买入的股票跌幅远超大盘。

最大1%

最小1%

最大5%

最小5%

在一些对北美市场的分析中,较长的观测期的动量指标对于当前股票市场回报的预测也较为有效,很多文献表示过去一年的动量是有效的。相反,反转信号的传递时间较短,一般为一个月反转。但是我们看到,当然之前不少国内研究也都发现了,A股中观测期超过一个月的长窗口动量仍然没有效果(其实是有效果的,不好的效果)。而反转的效果在观测期超过一个月后,仍然好用,而且比一个月反转的信号带来的回报更高,回测等技术指标也稍有改善。

进一步观测回测结果细节,可以发现,三个月的动量其实比一个月的动量表现稍微好一点,或者说三个月的动量表现虽差,但是没有一个月动量差。观测最小 5% 的三个月动量策略,即三个月反转策略,其回报率始终超过大盘,同时在 2015 年之后表现出了与一个月反转相似的情况,即收益增加同时波动幅度变大。

最大1%

最小1%

最大5%

最小5%

对比三个月反转( 5% 最小三个月动能)的超高回测回报率,六个月的最小动能表现没有那么惊艳。没有逐一测试一月与六月最小动能中其他时间节点的回测结果,但我们可以保守的推断,窗口长度为一个月到六个月之间存在一个时间长度,使得该长度的窗口期最小动能策略达到回测回报率最大。这是针对一个月持仓周期策略发现的性质,如果调仓周期变了,不同时间窗口的影响变动也会随之变动。

最大1%

最小1%

最大5%

最小5%

对比一个月动量、三个月动量、六个月动量和十二个月动量表现可以看出,动量基本上表现都不好,但是随着观测时间的拉长,长期动量最大的股票变现稍有好转。这与逻辑相符,长期股票回报率较好的公司,应该会由较大几率带来高回报。针对没有出现超过大盘的回报率这一结果,可能由于持仓期等设定与长期观测动量策略的矛盾导致。对比一个月反转、三个月反转、六个月反转和十二个月反转,可以看出 5% 最小动量策略回测收益率率先增大再减小。反转对于一个月持仓的回报率,其最有效的观测期可能存在与 1 到 6 个月之间。

最大1%

最小1%

最大5%

最小5%

动量策略有点“追涨杀跌”的意味,而大家直觉的反映应该都是比较短期的,国内的研究也发现国内股票市场中动量有效性在几周内还有点,长了就看出不了。这些文献呢,推测这种现象可能是由于我们的市场投资的行为模式与经典文献中北美市场里不同导致的。另一点需要突出强调的是,在经典文献中一般给出间隔月(Gap Month)的概念,例如使用的是去年 1 月初到 11 月底之间的动量,空过12月,分析这个 11 月动量与第二年 1月份回报的关系。因为部分文献表明这一个月的引入会带来短期反复现象( Short-term Reversal),但在本文中简化的观测回测中,我们没有进一步处理这个问题。

换手率指在一定时间内市场中股票转手买卖的频率,是反映股票流通性强弱的指标之一。换手率的计算方式是一个时间窗口内(一个月)的股票交易数量除以期末的的流通股票数量。最明显的现象就是,如果一支股票的换手率较高,说明这支股票表现的比较活跃,投资者对它的参与(关注)度的较高。也有一些研究专注于分析换手率在什么情况表明由主力机构进入(或撤了),什么样的换手率情况表明由机构持仓运作等等,这里不展开讨论。

从交易的逻辑上而言,供过于求则价格上涨,供小于求则价格下降。那么一只股票的换手率过低表明交易双方参与较少,可以理解为这样的一个价位上,价格较为被市场认可,因此没有过多的交易产生。当然,这要在市场流动性充足,不存在大量提取流动性的假设下。通过回测我们可以看出,最大5%换手率的策略除了在 2008 年之前的行情中还略有正向收益,在 2008 年之后很少能维持正的收益。这表明,在买入的时间节点中,换手率最大的情况可能隐含着不好的因素。或者,在前一个期限内股票利好已经完全释放,表现反映在较大的换手率中,那么之后的时间中该股票的回报率将不会很大。对比而言换手率最小的 5%,很可能是在热门板块(或个股)轮动过程中获益。前期没有被关注的股票,在下一期被炒作带来的回报。这一逻辑在牛市时较容易被情绪化交易引起,可以看出回测结果仅在 2015 年行情过程中带来超额回报的扩大。

最大1%

最小1%

最大5%

最小5%

换手率变动使用上一期的换手率减去当期换手率,如果 TRC 越大表示一个月期间换手率下降越多,相反如果 TRC 越小表明一个月中换手率增长越大。对比换手率的回测结果,我们看到换手率变动与换手率展现了相似的逻辑。最大 5% TRC获得超过大盘的回报率,最小 5%TRC 获得负的收益率。这表明当一个月中换手率变小了,可能还能获得与大盘相似的平均回报率。但是当这个月该股表现出放量情况,很可能导致后续一个月内负的回报率出现。

同样,对于换手率变动需要结合个股的具体情况,作为陪家长看股票节目多年的我,听到什么“底部放量”之类的表述磨的耳朵都起茧子了。但是对于换手率变动,对应的以及其变动,确实应该结合更多的其他因子一起分析。例如,没有其他因子支撑的换手率变动,看起来很异常不是。

最大1%

最小1%

最大5%

最小5%

波动率是过去的一个月中股票的日收益率的方差,期中日收益率为当前收盘价除以上一个交易日收盘价后减 1 ,或者表述为当前收盘价与前一天收盘价之差除以前一天收盘价。需要注意的是,这里使用的是收益率而不是股票价格,收益率的好处就是可以排除股票价格本身的影响。例如,100 块的股票变动 10 块,而另一个股票从 10 块涨到 20 块。如果按照价格方差计算两者可能差不多,但是按照收益率方差后一种情况就能明显区别于前一种情况得到较高的因子值。波动率一般用来测度股票价格的风险,实际上两日的收益率可以看作价格变动的一阶关系描述,那么波动率就是价格变动的二阶描述。我们可以看出收益率表述的价格变化本身,而二阶条件描述的是价格变动的变化情况,比如说一月股票日收益率方差是股票价格过去一个月变动的变动情况的概括。通过上述的描述可以看出,价格变动的累计加总(累计正负两个方向的价格变动)描述了股票价格的总体不确定性,而总体不确定性被用术语“风险”表述。当然,也有更加具体的梳理推导表达了价格均值和风险与股票估值的关系,较常见的就是均值方差模型。在本文中,该因子取一个月的日收益率方差,粗略计算使用的是用前22个交易日收盘价计算的21个日收益率,并以这组数据为样本来计算方差。因此,该指标越大表示在过去的约一个月中,该股票的价格波动越大,而 Volatility 越小表明该股票上月价格波动越小。

通过回测我们可以看出,风险(Volatility 因子)大的股票收益率很差,而 Volatility 因子较小的回测收益率还不错。既有的很多研究也表明和我们的回测结果相同的现象。较早有理论说,你这风险这么大,不应该给出来一点风险补偿不是,要不没人买你们家股票啊。但是,大量的经验证明,包括很多北美市场的经验(不只股票市场)也包括我们在 A 股的回测,嘿嘿,风险没有带来溢价,而低风险股票可能有更好的回报。CAPM 理论给出了一个解释,就是证券的很多风险都是可以靠合理配置被中和掉的,那么既然能被中和掉就不应该产生收益,而真正产生风险补偿的是不能被中和的部分。基于这个理论的一个猜想就是,高波动率的股票不仅承受了太多“多余”的风险,也没有获得风险补偿,所以收益自然就烂了。专业的认识给出了好多种其他猜测,也可以参见用户 Gyro 发表的量化投资趣谈:低风险股票回报更低还是更高?

最大1%

最小1%

最大5%

最小5%

方差变动( VARC )这个因子表示股票两期收益率方差的变动,是日收益率方差的变动,表述为价格变动的变动的变动,乱么?已有的研究已经开始构建更加复杂的指标了(比如一篇比较有代表性的研究,Martellini 和 Ziemann 发表在 Review of Financial Studies 上的 Improved Estimates of Higher-order Comoments and Implications),据说因为收益率表现的不是正态分布,那么锋度(Kurtosis)和偏度(Skewness)(分别是一组数据样本的四阶条件和三阶条件下的指标)的指标可能会提供更好的预测。但是人家流氓有文化,使用复杂技术指标有理论(数学模型)推导。我们这里呢,仅构建一个方差变动指标,展示其回测现象,近给出一些逻辑描述。 VARC 较大说明收益率的方差变大了,可以理解该股风险增大,VARC 较小表明该股收益率波动变小。

通过回测我们可以发现,在最小 1% 处,无论是 VAR 变动最大和最小的股票收益率都不怎么样。可以简单理解为股票收益率上升或下降的变动在上一期已经基本完成,很可能接下来的一期该股票进入盘整阶段,那么对应下一期收益率当然会较差。对比 5% 的策略,其最小和最大策略基本上都略强于大盘,但是这样的趋势仅在最近一些年份才体现出来,在 2008 年或更早的年份就很少体现出这样的现象。对此,或许近年来对于上期的部分波动较大,但不是最大部分的股票,在下一期可能还在大家关注的范围内,利好或利空没有完全释放,在新热点出现资金转移前,仍然带动原有焦点对象有些许上涨。当然,上述的部分解释仅为合理推测,可能该因子没啥用,或者可能有用但具体的使用方法并不是简单的单因子排序策略,有兴趣的宽客可以进一步挖掘该因子的潜力。

最大1%

最小1%

最大5%

最小5%

震荡变量是潘凡的一份因子分析材料中提到的技术因子,但是在其进一步分析因子有效性,以及对冗余因子进行剔除后,该指标也没有纳入其最终使用的有效因子之中。我们根据该材料给出的指标对这个技术因子进行计算。这个指标在该材料中的表述,“根据市场经验:横有多长,竖有多高。”就直觉而言,可以简单表述为月波动范围除以月平均价格乘以 2,感觉上是方差与动量两者的结合产物,。不过这个因子表现一般,这里简单展示一下。我们根据公式可以看出,该因子一定大于 0,那么该因子越大表明本月震荡幅度越大,越小表明本月震荡越小。当然这里的震荡仅是一个概述,具体月中波动的很多详情信息在这个因子中难以反映。

可以看出无论是最大还是最小策略,FLUC 因子表现的都不怎么样,就 5% 策略而言,我们看到最大 5% 策略在十年中稍微跑赢大盘一点,对应最小 5% 也差不多,本来该单因子对于回报的预测就很一般,这个指标表现不好的另一点在于最大和最小策略出来的结果没有区分度。

最大1%

最小1%

最大5%

最小5%

小结

因子提取与单因子回测的系列内容这里第一个阶段已经结束,为大家展现了一些可能大家知道或不知道的现象。在代码中我们给出了每种因子的提取方式,进一步也给出了每个因子排序的指标,同时给出了多因子合并成一个DataFrame的方法,只要简单修改就能组成三篇文献中所有因子和因子排序数值的数据(可能因为避免程序矛盾部分原始因子值没有保留在最后合并DataFrame中,寻找到对应因子,删去‘del’对应的语句就解决了)。

在进行系列材料整理的过程中,作者也认识到更多之前没有见到过的因子,但没有一一加入。我们会在稍后整理一下社区中较好的因子相关材料做一个汇总,各位朋友可以在本文后留言附加链接推荐自己或他人的因子相关内容的帖子。从数据而言,聚宽仅股票财务数据就包括市值数据(12项)、资产负载数据(84项)、现金流数据(57项)、利润数据(41项)和财务指标数据(34项),这些都可以作为因子,而且可以根据个人理解生成其他因子,有兴趣的朋友可以广泛尝试。

单因子的回测结果暴露出单因子策略的很多问题,比如很多因子的识别过程可能和产业、板块或市值相结合,再比如很多因子的表现并不是线性的,仅知道因子最大和最小的 5% 的回测效果并不能认识它的全貌。这也是不少宽友们给出的建议,我们会在之后的系列文章中,结合当前的一些主流处理方法,进一步展现因子在历史数据中的表现细节。以前留言的内容我们已经记录,在下一阶段的因子处理中各位朋友还有什么建议可以在本文后留言,我们在能力范围内尽量实现;)。

函数和变量说明书

到JoinQuant查看策略并与作者交流讨论:【量化课堂】因子研究系列之三 -- 技术因子

·  已收录至专栏  ·
JoinQuant聚宽的原创专栏
160篇文章, 20730人关注
进入专栏