量化策略七宗罪

HansiHuang   2019-04-13 17:27 1001 17

本文是基于德银报告的一篇学习笔记,列举了量化策略中常见的几种错误。

本文是基于德银报告的一篇学习笔记,列举了量化策略中常见的几种错误。量化是件很有意思的事情,好东西很多人不愿意拿出来无偿分享,特别是一些细节,但闭门造车往往会不知不觉的犯错误。说来也好笑,尚未见过回测看起来不行的策略(因为拿出来给人看的都是收益曲线飞到天上去的),那么多纸面上的量化策略,为何一上实盘很多往往不堪一击?回测中犯了一点点小错误没关系?不,很可能一丁点的疏忽,结论完全会被推翻。

 

一宗罪:幸存者偏差


如果用当前Russell 3000指数成分股回测过去30年信用风险因子(用Merton distance to default来量化)的表现,为统一标准,方便回测,剔除所有数据长度短于30年数据的股票,回测结果表明:信用风险越高,回报越好。



这是最简单的错误,目前的指数成分股中只有20%的股票在过去30年中始终是Russell 3000成分股。破产、退市、表现不佳的股票定期都会被剔除出。也就是说我们在拿过去30年中表现最好的那些公司进行回测,即便当时的信用风险高,当你知道谁会幸存下来时,在信用风险高,陷入困境时买入,当然收益非常高。若考虑进那些破产、退市、表现不佳的股票后,结论完全相反,投资高信用风险企业的收益率长期远低于信用稳健的企业。


二宗罪:前视偏差


上述的幸存者偏差实际上是前视偏差的一种特例,我们站在过去的时间点上无法得知哪些公司能幸存下来依旧是今天的指数成分股。在财务数据上很容易犯前视偏差的错误。比如,每个公司财务数据发布的时间点是不同的,在回测是应该根据每个公司数据发布的时间点去利用财务信息,而不是简单的假设2季度数据在6月30日以后即全部可用,亦不可设置一个统一的发布滞后时间。


更隐蔽的不容易发现的错误是财务/经济数据的修正。我们在下载历史宏观数据时往往得到的是终值,但很多发达国家GDP数据发布后要经过两次调整,各大公司财报的修正也是非常常见的。我们在回测的时间点上是无法得知终值的,只能利用初始值。这个情况在国内可能更少见些,也反映了数据质量上国外应该做得更好,在事后能进行大量修正。这么一点小修正不会影响结论?不,很多宏观数据初值拿来做回归都是不显著的,公司财务数据与否直接影响选股结果。


现实中还存在更为隐蔽的前视偏差。例如,美股中管理层可能决定进行裂股(也就是A股的高转送)来解决股价过高导致的流动性问题。也可能是缩股(若干股合成一股)来美化每股盈利等指标(EPS)。如果回测一个简单的策略,买标普500指数成分股中股价最低的50个股票,则过去25年的收益喜人,由此我们是否能得出低价“便宜”股未来收益更高呢?这个原理在A股有理论依据啊:牛市时大妈逐步消灭2元股,3元股,4元股…在大妈看来价格的绝对值一定程度上代表便宜程度。答案当然是否定的,如果要对这个策略进行回测,必须使用复权调整后的股价数据,下图中可以看到,这个策略基本无用,和标普指数走平。


三宗罪:讲故事

 

很多人喜欢没有任何数据开始讲故事,做量化的人喜欢拿着数据和结果讲故事。这两种情况很多时候是类似的,因为喜欢故事和解释的人,在做数据之前往往就已经有一个剧本,他要做的不过是找出演好剧本的“演员”(数据)罢了。我本身是做宏观的,深知故事的危害,要讲的故事,何愁找不出数据支持?


假如时间倒回1997,你在做策略,然后发现利润率这个指标非常灵验,只要买Russell3000成分股中高利润率的公司,过去10年躺着也能赚钱。量化太简单了!



按照这个策略投了2年,很不幸本金一不小心亏了70%。然后有人会告诉你,还看什么利润率,新经济将改变世界,买互联网公司就是赚钱,你这个策略早就不管用了。



于是你信以为真,买了互联网公司,结果是:继续亏。然后2年后又有人告诉你,互联网公司是泡沫,都一地鸡毛了,你还是应该重回经典,利润率还是要看的,过去2年这个指标不错啊,2年翻了6倍,泡沫破裂股灾阶段这个业绩亮瞎眼。



然后你又重回经典,决定矢志不渝的坚守利润率这个因子。然后过了10年,你发现你的收益曲线近乎是一条直线。




每天都在发现新的“好因子”,每天市场里都有人在寻找永动机,都是在浪费时间。所有发布出来的策略我还没见过表现回测不好的(回测表现都不好,自然不会拿出来)但这些故事对过去的解释非常动听,对未来的预测几乎没用。当我们做出和常识相悖亦或是和原来判断相符的结果时,最好别去讲故事,除非你想出去忽悠人。相关性和因果性在金融经济的世界里从来没有人能分清楚。讲故事的害处是越讲自己越信,最后发现掉沟里的人是自己。

四宗罪:高换手率


高换手率和信号短暂不稳定(闪烁信号)有关。很多人窃以为,高换手率有什么不好啊,说明策略灵敏,能捕捉到短线的机会,这不就是传说中的高频交易嘛,原来这么简单,回测来看确实收益高的下班半辈子都不用愁了。


凡是高于周为频率的策略都需要检查下这个问题,高换手率得出的回测结果可以做下压力测试,看下多少的冲击交易成本就会抹掉全部收益。即使是月这样的交易频率,高换手率也足以颠覆策略结果。看一则例子:每个月买入日本股市中分红率最高,且过去一个月表现最差的股票,同时做空分红率最低,且过去一个月表现最好的股票,这个策略在0交易成本下年化收益高达11%,0.1%的交易成本下降为7%,0.3%的交易成本下收益直接全部被抹掉,而且还是亏钱的。这个策略的问题就在于尽管是每个月交易,但是每个月股票池股票全不一样,换手率接近100%。


很多人会说:A股的手续费不是万三嘛,0.3%这个假设太猛了,不科学。假设一个A股的股票5块钱,最小报价单位0.01,也就是0.2%,这么说来,一点都不小。尤其是我们还未考虑更多的情形,如果你是基金经理,大单买入会对价格产生很大冲击,拆单买入很可能交易成本控制不太好,且需要一定时间完成交易,遇到市场单边波动怎么办?如果你在国外交易小盘股,流动性差的一周只有几笔成交怎么办?




那这是不是说我们交易频率越长越好?比如来个一年定期换一次股?这换手率总算低了吧?当然不是,市场变化瞬息万变,明知道某股票已经不符合某些条件,应当及时调出组合。每月交易一次,每次更换组合中3%的股票,比一年交易一次,每次更换36%的股票要好得多,虽然两者的年换手率均为36%。


微信图片_20190413184218.jpg


再来看一个高换手率交易的典型问题:每天收盘时买入当天表现最差的100个股票,卖出过去的持仓,持续每日交易,回报率喜人。这里的错误也是前视偏差,还没收盘我们不知道当天哪些股票表现最差,即使用程序化交易,这种策略也是停留在纸面。我们能做的是以每天开盘价买入昨天表现最差的100个股票。两个策略结果一对比,以开盘价买入的策略几乎一条直线。


微信图片_20190413184221.jpg


五宗罪:数据挖


Paul Romer在14年发了篇文章,历数经济学中的过度数学化,量化中又何尝不是,有时候为了数据平整而平整,强制把数据做平,出来的东西已经失去解释意义。神经网络迭代式能完整写下来的人有多少?不应该因为听上去高大上能忽悠人就直接套用X算法Y算法的去预测股价。当然除了这种过度数学化,也有犯低级数据挖掘错误的,还别说,国内券商的量化研报里还真的见过做样本内回测的。例子很简单,有100个因子,2009-2014年5年数据,逐个回测因子,选出6个表现最好的,等权重合成一个策略,再回测那5年数据,结果自然喜人。但如果在09年初,挑选出6个在04-09年表现最好的因子合成一个策略,用09-14年进行样本外回测后发现:直线一条。


微信图片_20190413184225.jpg


六宗罪:异常值偏差


在计算行业或者指数的一些指标时我们常常用成分股各自的指标取平均值。但这样的做法往往会受异常值的干扰,比如下图中的标普BMI韩国指数成分股的利润率。如果用平均值和剔除1%,2%极值的结果相差甚大。这是宏观数据中常有的问题,少数极值若不做预处理,会严重影响回归结果。


但去除极值往往损失一些信息,因此最好的办法是对数据进行微观层面的聚合然后再算总的指标。


微信图片_20190413184229.jpg


我们常看文章说香港市场低估,摆出全市场PB等历史数据加以佐证。乍一看似乎是很低,但两个问题值得问:PB是全市场各个公司PB的平均还是全市场的市值除以全市场公司的的账面价值?这两种算法的结果完全不同。如果是图省力的第一种做法,那对极值是如何处理的?


一种处理极值的通常做法是Inter-Quartile Range (IQR): 将数据三等分,设k=0.5,Q1,Q3分别为等分点,任何小于Q1− k(Q3 − Q1) , 或大于Q3 + k(Q3− Q1)的点均定义为极值。下图中用IQR处理过后的港股PB值在07年比互联网泡沫时期更贵,而普通处理的PB则在当时显得非常便宜。


微信图片_20190413184236.jpg


七宗罪:非对称性


做策略时往往假设2倍杠杆,即做多一组的同时做空另一组,以达到增加因子曝光的目的。但现实中做多和做空带来的收益是不对称的。以下图中美股的这些因子为例,多数因子多空的收益表现出非对称性。撇开做空的成本和现实可能性,在做策略时依然值得自问:是否值得做空?


微信图片_20190413184239.jpg