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