阅读了知乎的问答,很有感触,总结下个人思考与观点。框架
这是一个很扎心的问题,不少从业者,都面临着这个拷问,固然也包括我。我将尝试从量化投资的整个流程,从理论和经验上去定性分析,出现这个问题的各类缘由,避免这些坑,期待实盘与回测尽量一致。在分析的时候,主要基于实现CTA趋势跟踪策略的视角出发,而且兼顾股票和其余常见的投资策略。机器学习
1、猜测与假设
使用趋势跟踪策略的时候,一个基本的猜测就是,咱们即将交易的品种是存在趋势的,趋势产生以后,会持续一段时间,才会反转。至于什么是趋势,这是个高深的问题,在之后的系列文章中,将会详细梳理。函数
若是基于价值投资策略,一个基本的猜测就是,当股票的价格比较低,低于自身的内在价值的时候,股票价格会在必定时间内向内在价值收敛。学习
若是是基于套利策略,一个基本的猜测就是,一个品种或者多个品种之间的价差会处在必定的合理范围以内,当价差过高的时候,就会下跌,当价差过小的时候,就会升高。测试
任何量化投资的策略,其实都有必定的猜测与假设,包括那些基于机器学习、深度学习的量化投资策略,只是有些策略基于的猜测与假设,比较直观,符合现有的认知体系,你们容易接受;有些基于的猜测与假设,超出咱们的认知范围,是黑匣子,你们无法理解。优化
坑一、基于黑匣子的猜测与假设的策略,让咱们更加怀疑实盘不如回测的表现
我对因而基于经济、金融理论产生的策略仍是基于数据驱动产生的策略自己并无偏见,可是,基于数据驱动产生的策略,尤为是那些黑匣子,在实盘的时候,因为超出了咱们的认知,咱们更容易产生不自信的感受,以为实盘表现很差。spa
2、数据
当咱们有了猜测,作出了假设以后,就须要相应的历史数据去验证咱们的猜测与假设是否正确。在收集数据的时候,最早遇到的就是数据缺失与数据谬误。设计
坑二、数据缺失或者数据谬误
当一个品种的数据,出现缺失或者有些数据出现错误的时候,会形成咱们的回测结果不许确,有可能会出现实盘比回测差不少的状况。图片
举个例子吧,今天刚发现,某个数据提供商,提供的豆二的指数数据,在2017年5月31日,价格接近于先后两天的两倍,若是咱们基于这些数据产生交易信号,产生的回测结果你敢信吗?开发
在咱们作回测的时候,能保证交易数据的精确就尽量保证交易数据的精确。可是清洗数据是要花费很大精力的一件事情,有的公司专门雇佣员工去作数据清洗,保证数据的完善与精确。权衡利弊取舍,若是不能保证数据很精确,就尝试开发一些容错性高的策略,比方说,中长期的趋势跟踪策略。
坑三、股票或者品种缺失(幸存者误差)
股票有上市与退市,期货品种也有。若是你在回测的时候只考虑如今的股票,好比你作一个基于沪深300指数的策略,考虑的是如今的300指成分股,那么,你就犯了幸存者误差,没有考虑到在过去被剔除沪深300指数的那些股票,这些股票之因此被剔除,极可能是表现很差,若是你忽略了这个因素,那么,你回测出来的结果和实际上就可能存在很大的差异。
坑四、只考虑了真实的价格因素
回测的目的是要尽量接近现实的实际的世界。在股票交易中,有分成派息致使的价格跳空,若是忽略分成派息,有可能形成低估策略的盈利能力,忽略股票的合并,有可能形成高估策略的盈利能力;因此,在回测的时候,最好是使用复权价,好比前复权价,按照回测终点的值,向前复权(这时候若是资金量比较小,要精确到1手,也可能产生比较大的偏差)。
在期货交易中,由于每一个期货品种有多个期货合约,而且每一个期货合约的上市与退市时间之间的间隔都比较短,回测通常须要好几年的时间,须要把历史上的期货合约按照必定的规则去链接起来,造成一个长的时间序列。国内通常使用指数合约,主力连续合约,通过各类方法复权的主力连续合约,若是使用主力连续合约没有通过复权,在每次换月的时候,可能存在很大的跳空,也会影响回测的质量。
坑五、回测的时候使用了并不能实际交易的数据
好比股票回测的时候使用指数,期货回测的时候使用指数合约,这些在历史当中,都是不可以直接进行交易的,使用指数回测,会产生回测的偏差。
3、回测过程当中的那些坑
当咱们使用了质量比较好的数据以后,可能还面临着很多的问题。
坑六、使用将来信息
使用将来函数、在今天能够获取明天的收盘价,在这个bar没有结束的时候,能够获取到最高点和最低点,都是错误的利用了将来信息。
更隐蔽一些的将来信息多是信息的发布与信息的统计时点是不一致的,好比在每一年年初,获得了公司的年报,而实际上,通常是第一季度末,上市公司才会发布年报。
还有由于使用的会不断变更的信息形成的信号闪烁,好比,在基于当前bar的close价格产生信号的时候,若是在实盘交易中,你的量化框架是每一个tick更新一次close价格,而且每一个tick驱动一次你的策略,那么,你就可能会发生信号闪烁,形成在一个bar里面来回产生开仓或者平仓信号,这些在回测的过程当中通常不会出现问题,可是到模拟交易或者实盘交易的时候,问题会很严重。
坑七、没有考虑流动性及冲击成本
有的时候,股票或者期货交易不活跃,成交量很是少,若是你的资金很是小,只占成交量的一少部分还无所谓,若是你的资金量很是大,就有可能成交不了,或者即便成交了,也会形成冲击成本很是大。
因此,正常在回测的时候,应该考虑在交易成本中加入市场冲击成本,即滑点。
坑八、没有考虑交易费用
若是作的交易频率比较高,交易费用可能就占到策略盈利的一大部分,若是忽略交易费用,一个通常的策略均可能表现得很是好,致使高估策略得盈利能力,使得实际交易的时候,实盘表现比较差。
坑九、使用过多的条件去过滤交易信号(过拟合方式之一)
当基于过去的历史数据来看的话,对于任何长度的bar数据,我均可以增长条件,直到每一个bar的判断都准确,我能够实现,每一个bar开盘买卖,每一个bar都赚钱,可是,有意义吗?实盘可以实现吗?并不能。因此,这提醒咱们,在设计量化策略的时候,用的条件要适当,过多就会过拟合,过少又会致使拟合不住,没能好好把握住规律,策略表现比较差。
4、回测后的那些坑
坑十、过分优化参数,选择参数孤岛上的策略(过拟合方式之一)
当咱们交易策略写出来以后,在单个参数对上测试过以后,若是没有上述的种种问题,咱们可能就要进入策略开发的下一个步骤-参数优化了。
当进行参数优化以后,遍历不少参数对以后,会发现,有的参数对表现比较好,有的参数对表现比较差,若是咱们简简单单,挑选一个表现特别好的参数对,颇有可能在将来实盘交易的时候,咱们策略的表现没有实际上好。
参数优化的目的并非要挑选出盈利最高,夏普率最高的参数对,而是让咱们去尝试发现这个策略是否事参数敏感的,在必定范围内,不一样参数的表现是否稳定,即策略是否具备稳定性。
5、实盘中的问题
坑十一、用很短一段的时间去衡量策略表现是否好
若是是开发的日内策略,交易频率很是高,可能短短的一段时间就能看出策略表现怎么样;若是是中长期策略,有可能半年或者一年内,策略表现都很是通常,比过去几年的表现差多了,咱们可以说,这个策略在实盘中没有回测好吗?衡量一个策略的好坏,也是须要用必定的时间去积累必定的交易数量以后,才能作出判断的。
坑十二、市场环境变化,策略失效
不存在永远可以带来超额利润的策略,稍微逆向思考一下就知道了。
咱们开发出来的策略也同样,在将来表现好很差,可能有一部分运气的因素。若是偏偏是由于市场环境变化,市场参与者结构发生改变,过去蕴含的规律消失或者改变了,咱们的策略就可能持续产生亏损,表现离实盘差距很是多。
总结:
在咱们提出猜测和假设后,用质量比较高的数据,编写正确的策略,科学的回测,在回测的时候尽量和真实的交易环境保持一致,而且基于咱们的猜测与假设,分析策略适应的市场环境,在实盘的时候,分析当前的市场环境,并判断是否适合咱们的策略运行。
文章转载自:https://zhuanlan.zhihu.com/p/164583899
广告时间:在csdn上开了一个付费专栏,有兴趣能够订阅下: