量化研究的套路——从人肉回测到人工智能
作者:俞江
套路1,人肉回测
1983年,理查德·丹尼斯招募了一群毫无交易经验的新手,像新加坡人养海龟那样对他们进行交易培训,史称“海龟交易实验”。海龟们使用了二个交易系统,都不太复杂,其中一个是四周高低点突破(就是突破前20日高点则开多单,突破前20日低点则开空单),两周(10日)退出。“海龟实易实验”的结局是,年化收益率80%,一共四年。
虽然那时候计算机还不够普及,但我相信丹尼斯一定在之前就对他的交易系统进行了长期观察甚至实盘验证。这种肉眼观察、人脑记忆的回测(Backtest)方式,我们就叫他是“人肉回测”吧。现在看起来“人肉回测”显得非常笨拙,不过他至少有一个好处,就是尝试次数有限,所以不会对数据挖掘过度。
套路2,参数已知
计算机普及了以后,回测一个交易策略常常是分分钟的事情,但是问题也出来了,举个例子,比如有个简单的双均线的策略,10日均线上穿20日均线就买入,10日均线下穿20日均线就卖出,俗称“金叉买,死叉卖”,那么这个策略可以表示为MA_CROSS(10, 20)。我用某支股票或指数近十年的数据进行回测之后,发现这个策略在这十年并不盈利,那么我肯定不会将它用于实盘,但这时我可能会想,要不要改一组参数,改成MA_CROSS(10, 30)再试试,这个不行,我再试试(20,40),甚至再加个过滤条件,直到摸索出高收益的模型为止。
这个流程大致相当于一个函数求极值的寻优过程,相当于已知这十年的数据,求收益率最高(或者夏普比率最高)的策略。这时的回测资产曲线可能会高耸入云,但一到实盘就一落千丈了,为什么,因为回测时的资产曲线根本就得不到,它是建立在一个假设条件之上的:假设十年前你就知道,在这十年中哪个策略最好。注意这里的策略指的是模式(Pattern)加参数(Parameter),二者都要提前知道,才能得到回测资产曲线,这不就是一部穿越剧么?
套路3,参数未知
为了解决上面的问题,在回测过程中,我们可以每隔一段时间(比如每年)训练一次,所谓训练简单的说就是把第一年的数据用不同参数的策略多回测几次,找一个表现最好的,比如说是(20,40)表现最好,那我们在第二年就使用MA_CROSS(20,40),到了第三年,再使用第二年表现最好的,以此类推。这样感觉好多了,因为我没有预先知道任何参数信息,每一年的参数都是通过“洒点”或者寻优得来的。但是问题还是没有完全解决,还是存在一些穿越性。大概相当于穿越了以后,虽然忘记了参数,但模式还是记得的。
套路4,模式未知
如果要求模式也不知道,那我们就把不同模式的不同参数都一起洒点就好了,比如经典的海龟策略TURTLE(20),再加上TURTLE(10), TURTLE(30), … , MA_CROSS(10,20), MA_CROSS(20,30), MA_CROSS(20,40)等等我们能想到的许多策略,这些策略一起进行“海选”,选出一个或几个最好的,或者分配他们的权重形成一个策略组合。到现在为止我们已经忘记了关于策略的所有的信息,包括模式和参数。唯一需要保证的,是十年前早就有了这么多算法,而不是这两年才发明的。
套路5,人工智能
我们在回测的流程中,总会用到一些超参数(hyperparameter),比如,训练集用1年还是5年,多长时间训练1次,是选择训练时表现最好的1个策略还是用前几个的加权,是分各行业板块选股还是一起处理,这都是没有经过严格验证的,如果这些超参数也是训练出来而不是手动设置的,那就算是向人工智能的方向发展了。
如果以后“强人工智能”发展起来了,我们可以让模型自己创造和重组算子,而不是由研究者来预设各种策略和洒点。最终的回测程序是,我们把交易数据、衍生数据、财务数据等等整理成整齐的面板数据输入进去,程序会在“绝对无知”的情况给出回测结果和一条真实可得的资产曲线。但有可能出现一种很尴尬的情况:这条曲线其实是无法稳定盈利的。如果真的出现了这种极端情况,那么说明我们是时候远离这个市场了,更何况能写出这么复杂程序的人,从事别的行业也许是对社会更大的贡献。