|
作者:babyquant
链接:https://zhuanlan.zhihu.com/p/30652198
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
很多人会问国内的量化跟国外的量化有什么不同?一些人经常问的问题是“文艺复兴有什么模型?DE Shaw用什么模型?Two Sigma用什么模型?Citadel用什么模型?”之类的,似乎在他们眼中模型才是最重要的。
事实上,目前市面上最常见的统计模型和机器学习模型的提出者,都不是这些基金的人,比如大家熟知的Support Vector Machine, Gradient Boosting Machine, Hidden Markove Model, Neural Network, Adaboost, Random Forest等等,都是学术界的人提出的。而这些模型很多时候大同小异。
比如参加Kaggle竞赛,虽然说获胜的是某某模型,但不代表那个模型就更牛逼。或许那个模型本身会更复杂一些,意味着它更灵活一些,拟合能力更强一些,而使用这个模型的人又比较多,这样自然有更大的概率来更好地逼近所谓“真实分布”。比如现在Xgboost大行其道,大家都去用,那么这个模型获胜的概率就更到,说的极端些,如果1000个参赛者900个用xgboost,总有人能调处逆天的参数,获胜的概率会很高。他们只会告诉你最牛逼的人用什么模型,不会告诉你其实最烂的也是用这个模型。
因此,使用量化模型做交易,重要的不是使用多么牛逼的模型,而是建模的客观严谨程度。比如研究股票,有10年数据,如果用这10年数据倒腾来倒腾去,先是发现2014年12月30日有个最大回撤,然后想办法去掉它,但又发现2015年9月有个大回撤,又要想办法去掉它,这么翻来覆去,最后虽然总有办法把这些回撤都去掉,弄一条好看的曲线,但这么做很难避免过度拟合。
机器学习有个原则是说样本外数据只能用一次。比如现在有10年股票数据,就应该用前8年做训练,包括交叉验证、滚动优化等等,有什么需要考虑的都要考虑,比如大盘股猛涨要考虑到,哪怕历史上很少发生;全市场大跌小盘股腰斩也要考虑;还有大面积停牌指数失真要考虑;熔断比较极端些但美国发生过所以也不妨考虑一下;没发生过的事情可以用蒙特卡罗、马尔可夫蒙特卡罗来模拟一下,比如股票价格符合几何布朗运动,多个股票一起的相关关系也要考虑一下;模拟大盘涨跌的话可以给股票价格变化的正态分布加个偏移等等。总之,在训练和验证阶段要尽量考虑全面一些。
其实现实交易中本质上就是滚动进行的,因此自回测优化的时候也应该滚动。有些人可能担心滚动优化计算量太大,但实际上并非如此。比如期货策略,每个品种每个策略的资金曲线都已经生成,从第一天到其中任何一天的曲线、盈亏、夏普比、胜率、回撤、回撤曲线的面积等等都可以计算出来,并且只是一次性计算,之后就可以很容易的进行滚动筛选了。这种滚动优化往往能发现全局优化发现不了的一些规律。
全局优化一般来说总能找到好看的曲线,因此市面上很多卖的策略并不靠谱,哪怕曲线很美,并且考虑了充分的交易费用。有人随便模拟100条曲线都能找到一条很好看的,但这是随机的,毫无预测力可言。当别人给你一条模拟曲线的时候,你不知道他是从多少条曲线中挑出来的。相比之下,滚动优化要生成好看的曲线则困难很多,虽然也不是最严谨的,但总比全局优化靠谱。
事实上,最严谨的方法也无法跟实盘比。国内量化CTA市场,说实话,有3年公开业绩曲线还比较好看的并不多见。再说,如果某人有3年还不错的业绩,如果是高频的那么已经发财了,如果是中低频的也已经募集了不少的资金,总之再投简历找工作的机率不是很高。这年头投简历找工作的一般业绩记录都不会长,长的也不会好,因此,还是需要提供一些历史回测数据的,回测太好别人认为你过度拟合,回测太烂又不要。总之,最好还是要滚动优化客观严谨一些,再挑一条好的,起码还有可信度吧。
|
|