分享

回测效果非常好的策略,实盘却不佳,原因何在?

 量化猫 2018-01-30

      从事量化策略研究的人都会遇到的问题,那就是一个看起来回测结果非常好的模型,但实盘起来却效果不佳,甚至是持续亏损,整得人压力很大。

实盘前的憧憬

实盘后的你

 

    所以这里从知乎等各大网站总结了量化策略研发时,比较容易常犯的错误,以期能够帮助刚入门的量化爱好者去更好的评估自己的量化模型。

      

      1. 数据源有误

      做量化策略的第一关应该是数据的清洗与处理。然而这一块反而容易被忽视。大家会觉得只要做好策略就行了。做股票研究的知道股票有除权除息,做期货研究的知道期货有合约换月的跳空,如果不对这些进行处理,你可能会做出特别赚钱的策略,但这个钱本身你是赚不到的,因为除权除息或者说合约换月的跳空,这部分价格的变动你是根本吃不到的。所以在开始策略研究钱,不妨多花点时间整理数据。


      2. 算错了。

      在做回测时,例如,某个负号在计算时漏掉了、百分号忘记除了、不同语言下迭代0和1起始点的混淆,等等等等,往往会给出一个好到觉得必将改变世界的结果。所以只要结果很好,一定先彻查是否有算错。

     检测手段是用期望为0的正态分布模拟资产回报率,首先使用历史数据估计出标准差,然后模拟n段测试期等长的回报序列,从而得到n个交易策略盈亏结果,如果实测结果在这n个结果的尾部两端,就说明结果过好或过坏。这是单资产的交易策略,如果是多资产,融合相应的组合流程即可。当然也存在一些变种,例如求得概率结果而非直观的盈亏结果等进行判断。


      3. 未来函数。

      最典型的未来函数就是买入当日涨停的个股,但在这只股票真正涨停前,没人知道它一定会涨停。

      未来函数的杀伤力在于,它会出现的不知不觉。例如一个著名的分析师语言:“在熊市末期积极建仓,在牛市末期卖出股票”,我要是知道这是末期了,我还听你这些话干什么啊。还比如做量化的时候对曲线的平滑、整体模型的估计、统计特征的提取等等,都应该注意未来函数的出现。要控制它的出现,唯一要做的就是小心,因为逻辑中的错误,比前面说的“算错了”更难以检查出来。经验是,在编制测试流程时严格按照时间顺序进行,样本内的计算就强迫自己彻底屏蔽样本外的数据。


      4. 存活者偏差。

     幸存者偏差(英语:survivorship bias),另译为“生存者偏差 ”或“存活者偏差”。常用俗语“死人不会说话”来解释其成因。 意思是指,当取得资讯之管道,仅来自于幸存者时(因为无从由死者获得来源)。

      如果你的股票池是过去十年表现最佳的个股,例如茅台,格力或万科等等,你怎么做回测,效果都不错。但未来这些股票如何,很难知道。如果把策略用在其他板块或者股票,效果又不佳,那说明该策略具有典型的幸存者偏差效应。特别需要值得注意的是用指数或者全市场样本进行长期交易策略测试的同志们,请一定小心指数成分股的变更和股票退市对策略的影响!

      还有一点需要注意的就是回测的样本太少,所以会依据较少样本得出错误的结论。这也是一种存活者偏差。


      5. 过拟合。

      给定一个假设空间H,一个假设h属于H,如果存在其他的假设h’属于H,使得在训练样例上h的错误率比h’小,但在整个实例分布上h’比h的错误率小,那么就说假设h过度拟合训练数据。过度拟合是量化策略回测最容易犯的错误,而且也是符合人性的。人性总是希望得到看起来最佳的效果,所以会通过参数寻优来寻找最佳参数。但得到的最佳参数只是正好符合了历史的价格运行,所以在未来是大概率会失效的。量化策略应当考虑奥卡姆剃刀原理,策略要尽可能简单,逻辑清楚。古语云大道至简,也正是这个道理。另外,还应该注意留足充分的样本外,模型必须通过严格的样本外测试。还有就是不要一味的追求追高收益,而更重要的反而是模型的有效性。


      6. 泛化能力。

      泛化能力(generalization ability)是指机器学习算法对新鲜样本的适应能力。学习的目的是学到隐含在数据对背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。因此泛化能力越强,适用的交易标的越多,且样本外盈利效果越强。 如何得到泛化能力强的模型?这就必须要深入理解市场,透过市场的表现现象,抓住本质。每一个策略都代表了研究者对策略的认知和理解,有些甚至需要通过真金白银的实战来获得,所以量化研究本身跟科学研究是类似的。要不停的提出想法,再去验证和评估想法,最后改进想法。     


      7. 真实交易环境限制。

     这里包括手续费,交易滑点,实际交易价格与测试价格的差别等等。在A股市场,手续费还是比较稳定,但期货市场则不是,经常会调整手续费。有的日内平今开始没有手续费,但突然某一天开始就收取手续费。这个时候,你的策略回测就必须要重新做,看看在新的手续费下,是否还能够盈利。交易滑点非常关键,特别是对日内的短周期策略。交易滑点的影响与交易周期的长短成反比。实际交易价格与测试价格的差别是指在测试时,大家都喜欢用收盘价,但实际交易时,都收盘了,你还怎么交易。所以要去评估这个差别带来的影响。  

      这里还得再提一下,为啥所有的量化策略都有容量限制。越短周期的策略,容量越小。这是因为量化的本质是追随市场,而不是主导市场。所以交易的冲击成本是非常重要的一个因素。从实际经验来说,交易的冲击成本会比你盘面上看到的那些成交量所感觉到的冲击成本大得多。一个日成交亿元的创业板股票,你成交个10%左右可能就需要打高好几个点。而冲击成本又是很难模拟和计算的,所以这才导致很难真正的评估实盘和回测的差别到底有多大。

    

      8. 策略周期。

      策略是有周期的,站在风口上,猪都会飞。在趋势行情下,盘整策略会亏,在盘整行情下,趋势策略会亏。所以有时候策略表现不好,并不一定是策略本身出了问题,而更可能是你的策略正好遇到回撤周期。但这个就是最磨人的,长时间的回撤会使人怀疑自己,骑虎难下。所以解决方案是多策略多品种组合,以防止过少策略出现的长时间回撤。


      9. 回测解决不了的问题


      回测本身的局限性,就导致它解决不了所有问题。实际成交都是纳秒级别的,而我们看到的回测数据,都是3s(股票)或者500ms(期货)的快照数据。其次,比如说你做一个套利交易,如果只成交了一条怎么办?回测中,你肯定是假设都成交了。还有高频交易,基本上只能够实盘测试。


      最后,要特别强调一点就是:一定要正确看待回测。对回测数据的分析,基本上大家关注的重点是年化收益,夏普,最大回测,收益回撤比等绩效指标。其实更重要的应该是:交易次数,如果交易次数太少,那么这个回测数据可信度不高;一定要分析大幅度盈利或者大幅度亏损的原因,只有你清楚这个原因,才能够在未来做到有的放矢;请记住做回测的目的不是为了证明交易策略多么优秀,盈利率如何的高,而是为了发现尽可能多的缺陷,包括程序的BUG和交易逻辑的不合理之处。


      欢迎大家留言积极讨论,如何更好地将回测结果接近实盘结果。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多