- 十年十倍:散户也可以学习的量化投资方法
- 金伟民
- 1879字
- 2024-11-03 23:34:53
第三节 量化择时回测
技术面量化择时
本案例中,笔者用了短均值、长均值、A1、A2、A3五个参数优化训练区,得到的五个参数分别是8天、29天、12%、0%、-10%。训练区年化收益率28.22%,观察区2016年收益率是0.60%,均是四个技术指标优化后的最佳值,而且最大回撤也是最小的。操作最频繁的BIAS策略,平均也就是1个月操作一次,最低的才1年操作一次。而且不管哪个策略,空仓天数最低也要在40%左右,如果不是简单的空仓,而是在空仓时买入债券或者货币基金等相对安全且流动性又好的品种,收益率将进一步提高。如表5-1所示:
表5-1 沪深300择时回测1(技术面)
细心的读者会发现,在同一天中,用MA、MACD、DMA、BIAS等四个指标判断的结果,有时一样有时不一样,那么我们可以用少数服从多数的办法来得到一个新的组合策略,如4个指标中有3个多的才做多,有3个空的才做空,2个多2个空维持原状。但是经过回算,在以上这个例子中,组合策略的结果还不如BIAS策略,这也说明了少数服从多数的策略也不完全是正确的。
MA(均线)策略是最常用的一种策略,但在使用中笔者发现,在震荡市,我们希望均线长一些,能过滤掉一些震荡噪音;而趋势明显的时候,我们又希望均线短一些,能尽快跟上趋势。那么问题来了,有没有一种智能的均线来满足上述的需求呢?答案是肯定的。卡夫曼(Kaufman)在他的著作《精明交易者》中提出了一种自适应均线,能满足这样的需求。
这里先引入一个概念,叫“价格变动速率e”,e的公式为:
e=|当天收盘价-N天前的收盘价|/Σ(|每天收盘价-前一天收盘价|)
从这个公式中可以看到,如果当天收盘价和N天前的收盘价相等时,e=0,也就是说,在这段时间里不管你的价格怎么波动,结果都为0,这个时候我们需要的是长均线;而当每天的收盘价均大于前一天的收盘价,或者每天的收盘价均小于前一天的收盘价时,分子和分母相等,等于1,这个时候就是趋势特别明显的时候,我们需要的是短均线,马上跟上趋势。
这个时候均线是日期序列的迭代,我们定义:
当天的自适应均线值=a×当天收盘价+(1-a)×前一天的自适应均线值
其中,a是e的函数,我们定义:
a=(c+d×e)b
这样e公式中的n和b、c、d四个参数是变量。在上述例子中,笔者还是拿2010年1月4日到2015年12月31日作为训练区,经过计算,得到的四个值分别是71天、-0.022、0.965、1,结果如表5-2所示。
表5-2 沪深300择时回测2(技术面)
续表
基本面量化择时(PE)
以上讲的都是用技术面来择时,其实基本面也可以用来择时。下面笔者还是用沪深300指数作为样本,用价值投资中最经典的指标——PE来择时。
先来看2007年1月4日—2016年9月30日近10年沪深300指数和对应的加权PE之间的关系,从图5-1中,我们可以看到基本是同步的,2015年指数的高点逼近2007年,但对应的PE只有一半都不到,这说明了市场认可的高点在不断下降。
图5-1 沪深300指数与对应的加权PE
我们还是观察2007—2015年的数据,用非对称PE来决定买入卖出条件:
低于N1买入,高于N2卖出,其中N1<N2。
经过优化,N1=9.6,N2=18.7,但因为在2012年前,PE从来没有小于过10,所以无法达到买入条件,到了2012年才有买入条件,一直到2015年PE才到了18.7的卖出条件,以后就一直没达到买入条件,直到2016年9月30日。从结果看,也只有2012—2015年是PE发挥出色的年份,所以简单用PE择时,很有可能要么好几年空仓,要么好几年满仓,很难达到我们的期望,如表5-3所示。
表5-3 沪深300择时回测3(PE策略)
我们设想把PE的中值动态化,然后减去一个下限作为买入的条件,加上一个上限作为卖出的条件。中值可以用20 PE的长均值,但如果仅仅用一个长均值依然会遇到问题,如2007年大涨,PE均值肯定是偏高的,2008年大跌,PE均值肯定是偏低的。所以,我们再引入一个参数“PE中值”来描述这种涨跌,如下:
PE中值=average(N1天PE)×(N2天涨幅)×A(其中A初始值为1)
买入条件:PE<PE中值+下限
卖出条件:PE>PE中值-上限
经过优化,当2007—2015年9年观察区最优时,N1=180,N2=60,A=4.4,下限=1.9,上限=5.8,结果如表5-4所示。
表5-4 沪深300择时回测4(优化PE策略)
虽然这不是一个最佳结果,但作为一个案例,可以说明传统的价值投资是如何在量化投资中得到进一步完善的。抛砖引玉,衷心希望大家可以用量化这个武器,使传统价值投资得到发扬光大。
操作中要谨防过度自信
除了技术面因子、基本面因子可以作为择时因子外,情绪指数、成交额、资金的流入流出、开户数等都可以作为择时的因子。当然模型计算得再好,都是过去的数据,千万不要从一个极端走到另一个极端。这里分享一个笔者亲身经历的反面案例。
2014年下半年,笔者一直在寻找择时因子,有一次突然想到,当时打新是需要资金的,大量资金的冻结导致了每次打新都会带来一波下跌,于是就想,既然抽走资金带来下跌,那么这些资金回来后会不会带来大盘的上涨呢?经过几年的数据回算,发现只要当天冻结资金释放超过3000亿元的,历史数据100%带来大盘上涨。反复算了几次,确实是100%上涨,没有一次下跌的。终于等来了一次释放资金超过3000亿元了,为了防止个股的风险,笔者都买了宽带指数分级B,第二天,随着3000亿元以上的资金释放,果然带来了大盘大涨,当然分级B也加倍大涨,晚上兴奋得睡不着觉。但到了第二次,一样3000亿元以上的资金释放,当天大盘就是不涨,反而下跌。到了下午,心里实在受不了了,一刀下去狠狠地全部“割肉”,但奇怪的是收盘又出现了反弹的迹象,当天的“割肉”几乎把上一次的盈利全部又还给了市场。晚上又一次睡不着了,但不是兴奋,而是后悔的睡不着了。
深刻的教训使笔者更加敬畏市场!在市场中,没有什么是不可能的,哪怕是过去100%成功的事情,都必须想到黑天鹅来了怎么办。