回溯测试与真实环境的差异溯测试中的交易环境与真实的交易环境是有一定差异的,这种差异越大,回溯测试的结果用于判断策略效用的能力就越低下。因此,理解回溯测试与真实环境之间的差异问题,学习如何处理两者之间存在的差异,也是本书在讨论具体的量化交易策略之前需要讲解的内容。
回溯测试与真实环境之间差异的情况,大致可以分为两类。其中一类差异是可以通过人为设置回溯测试或者人为限定真实交易的手段而基本消除的。在这一类差异当中,实际交易时的买卖点与回溯测试下的买卖点不一致的问题是一个比较常见的例子。
具体来说,就是在中低频的量化交易策略研发中,回溯测试使用的数据往往不是价格进行一次变化就记录一次的分笔数据,而是记录一段时间内的开始价格、最高价格、最低价格、结束价格之类的二次处理后的数据。因此,如果真实交易中的买卖点发生在开始价格和结束价格之间的某一个时间点时, 是不能反映在二次处理数据所构造的回溯测试中的,也就会造成这两者买卖不一致的问题。
图3-6给出了一个交易日内买卖与回溯测试不符的实际案例。假设在这个例子中,研究人员在回溯测试中使用的数据是日度收盘价所组成的时间序列,测试的量化交易策略为“当价格超过10日均价时买入,当价格低于10日均价时卖出”。图3-6中给出的是某一交易日全天的价格走势,假设这一天的交易价格达到53.5以上时,则触发“价格超过10日均价”的条件需要买入。
从图3-6中可以看到,在回溯测试的流程中,由于当日价格报收于53,没有达到53.5,因此回溯测试时是判断该日没有交易行为的。但是查看实际的全天价格走势,可以发现价格一共三次突破了53.5,并又三次下跌到S3.5以下,如果采用回溯测试得到量化交易策略并全天候地应用于资产交易中,这一天其实已经买入并卖出了该资产三次了。
如果这里的资产是A股中交易的股票,那么情况可能更精,在交易日内第一次超过53.5时进行了买人操作之后,由于T+1的规定不能再在该日卖出,最后的结果是回溯测试中该日没有交易,但是实际上该8收盘后持有了股票仓位,这种差异将完全破坏掉回溯测试结果的可信程度。
对于如何处理这一类的差异, 作者给出以下三种可供参考的解决方案。
(1)在回溯测试时,使得回朔测试的环境尽量与真实的交易环境保持一致。在上面的例子中,就是将回溯测试使用的二手数据换成更为精确的分笔数据,从而模拟整个交易过程中都可以买卖的现实环境。
(2)在实际的交易过程中,尽量贴近回溯测试中的交易情况。以上面的例子面言,就是在实际交易中忽略每-日盘中的走势,只在收盘时判断交易与否。但是值得注意的是,由于得到收盘价的同时也就代表着当日交易的结束,完全按照收盘价进行交易决策会导致不能执行的问题,因此这种解决方案需要在实际收盘点提前一小段时间进行交易决策并执行。
(3)合理估计实际环境下的交易与回溯测试之间的差异,并在回溯测试过程中通过计算上的调整反映出这些差异。在上面的例子里,实际上就是估计出相对于回溯测试中的收盘交易而言,盘中交易会带来的收益和损失,并在回溯测试里加入对估计收益和损失的刻画。但是如果实际差异涉及A股市场7+1造成的建仓不符之类的问题,那么这种解决方案可能就不是一个很好的选择了。
此外,改变量化交易策略,使之能够适应这种回溯测试与真实环境之间的差异,也是一种在实际策略研发过程中可能会用到的处理手段。比如上面的例子中,可以在原始的量化交易策略判断买卖点时,加入合适的限定条件或者缓冲条件,从而解决频繁地来回买卖的问题。但是这种方法治标不治本,即使来回买卖的问题得到了缓解,但是回溯测试与真实环境之间的差异仍然会存在,如果希望将这种差异消除掉,可能仍然要结合上面所述的三种方案或者其他方案来完成。
对于这三种方案而言,作者建议在有能力的情况下,优先考虑第一种解决方案,即使很难获得相同样本期下的分笔数据,也尽量采用频率更高的数据来代替之前的数据,从而更好地逼近真实的交易环境。随后的选择才是第二种和第三种解决方案,这两者之间没有一个固定的更优选择,需要结合具体的量化交易策略、研究环境和交易环境进行人为判断。
当然,也存在着其他一些具有实际意义的操作方案,例如将第一种和第二种解决方案结合起来,同时更新回溯测试和实际环境中的交易行为。再以图3-5中所展示的例子来说明,完全在收盘时进行判断和买卖在现实环境中是不可能的。而由于在收盘之前的短暂时间进行交易的判断和执行稳定性较差,而且用来判断交易的数据点也不是收盘价,因此会存在较大的差异。在频率更高的样本数据无法获取的情况下,其实可以在回溯测试中改用开盘价进行研究,如果测试结果也可以得到合适的收益和风险情况,那么执行时就可以在开盘之后立即执行,这种情况下所使用的判别点就是当日的开盘价,差异仅存在于开盘和执行之间的时间差,而且这种差异较之前一种情况来说,一般会更小些。
需要说明的是,在本书后面介绍的所有量化择时策略与量化选股策略案例中,使用的都是收盘价等收盘时获取的数据。也就是说,回朔测试的模拟交易过程,都默认将收盘时刻作为进行交易决策的时间点。因此,对实际环境下的交易与回溯测试之间的差异进行估计从而判断出策略的实际效用,就成为一个本书没有具体分析但是实际上非常重要的研究组成部分。
在现实研究中,将本书所介绍的几个简单的交易策略全部更改为开盘时刻进行交易决策并不困难,相关的数据也比较容易得到,对此感兴趣的读者可以自行尝试。但是由于本书的目的是介绍量化交易策略研发的流程框架,实际案例仅作为辅助介绍的工具使用,因此也就依照一般的研究传统,将数据确定为收盘数据。
此外还可以额外地告诉读者,将自回归策略改为开盘时刻获取数据、计算模型并进行交易之后,本来盈利水平很高的策略不再具有显著的盈利能力。推进分析甚至多层推进分析没有检验出来的问题,在改变样本数据集之后得以呈现。因此这里再次申明,作者希望读者在阅读本书时,不要将关注的重点放在具体策略之上,本末倒置,熟悉研究框架、培养研究思路才是最为重要的。
另外一类回溯测试与真实环境之间的差异则是很难通过人为的修改和设置来消除的,其中最常见的是实际环境中会产生的交易成本。估计交易成本是量化交易策略从研发进人实际执行前一个必要的步骤,本书在第2章的研发流程中曾经谈到了交易成本问题,在后面的第14章中则会用一章的内容对其进行分析,因此这里不做过多阐述。
流动性也是一个时常会导致回溯测试产生重大缺陷的问题,这个问题在A股市场上同样格外明显,到目前为止,国内的A股市场仍然设置涨跌停板,如果某交易策略判断买入一只将会涨停的股票,在回溯测试中可以正常建仓,但是真实交易中可能由于当8的开盘时刻就涨停,因此实际上是没有机会买入这只股票的。将回溯测试使用的二次处理数据更换为更精确的数据,如分笔数据或者分钟数据、小时数据等来进行研究,可以在一定程度上减小这种情况下回溯测试与真实环境之间的差异。
当然这只是流动性缺失的一个比较极端的例子,在大部分存在流动性问题的情况下,可能会出现的结果是实际交易价格与回溯测试的虚拟交易价格不一致,研究者通常将这种差异也归为交易成本的一种, 并通过预估来尝试解决。总的来说,处理这一大类的差异主要还是采用前面提到的第三种方法,即合理估计实际环境下的交易与回溯测试之间的差异,并在回溯测试过程中通过计算上的调整反映出来。
此外,很难通过人为的修改和设置来消除的差异还包括量化交易从业者对于量化交易系统的整体判断和情感因素。诚然,量化交易策略的优点之一就是可以规避策略研发者的主观臆断、排除情绪化对于整个交易过程的干扰和影响,但是研究和控制量化交易策略的毕竟还是人,因此总体上的行为偏误依然会存在。
例如,量化交易员对于量化交易策略整体风险的承受能力,虽然在研发过程中,研究者可能会设定一个30%的警戒线,如果亏损达到30%,则判定策略失效并放弃策略,但是在实际的运行过程中,5% 的亏损已经让人惴惴不安,10%的亏损则让人开始怀疑策略的正确性并重新检验,20%的亏损可能就让人放弃坚持并修改策略了。有主观判断存在,就有偏误和差异存在,这是交易策略都固有的问题。