在量化交易策略的研发过程中,存在许多需要注意的事项。如果忽视了这些问题,轻则造成量化交易策略的优化结果与实际要求存在偏差,重则直接导致最后的量化交易策略没有任何实际用处,甚至造成真实的损失。
在这些事项中,首先需要注意的是量化交易策略研发中是否存在未来信息的问题,如果对历史数据进行建模和优化的过程中包含了未来信息,那么应该重新构建研发模型,规避掉所有的未来信息,保证量化交易策略与实际相符。
所谓未来信息问题,就是指基于历史数据进行回溯测试的过程中,使用交易完成之后的信息来决定交易本身。为了更为直观地说明何为未来信息,这里给出了一个用来解释的示意图,如图3-1所示。
在图3-1中,回溯测试能够使用的样本数据包括A阶段的数据和B阶段的数据,假设模型判断出一个买卖点在A和B之间,那么B阶段所有的信息对于这一个买卖点而言都是发生在未来的信息,因此在判断交易的时刻,B阶段的所有信息都是无法得知的。
在量化交易策略正常执行的过程中,买卖、仓位等策略组成部分的判断都是基于之前所有可以获取的数据得到的,也就不存在未来信息的问题。但是在进行回溯测试的时候,由于我们已经得到了超越买卖点的数据信息,也就是图3-1中B阶段的信息,因此就可能发生将B阶段的未来信息用以判断买卖点这样一种不符合实际交易逻辑的情况。
在国内的一些资料当中,描述这种问题更常见的名称是未来函数,作者猜测这样的习惯可能源于国内交易者对于技术指标的深入研究。在编写技术指标函数的时候,往往会由于疏忽等问题出现这种使用不应该出现的未来信息的情况。而
在国外的一些文献和资料当中,比较常见的说法还包括前视偏差。相较于未来函数而言,作者认为这一名称的覆盖面更加广泛-些, 因为在一个较为完整的量化交易策略研发过程当中,函数只是其中的一部分。而前视偏差则比较形象地说明了这个问题,站在图3-1中的买卖点上,B阶段的信息都是时间前进后才能得到的,这样所造成的偏差就会让未来的信息进入交易决策本身。
使用K线图当前柱的最高价、最低价判断买卖点是一个比较常见的使用未来信息的情况。举例而言,当一个建仓策略为“若今日的最低价高于上一日的收盘价,则在今日的最低价买入”时,就是一个很典型的含有未来信息的交易策略。在该策略中,买卖决策依赖于两个重要的价格信息:一个是上一日的收盘价;另一个是今日的最低价。上一日的收盘价显然是没有问题的,是一个从当日开始交易时就已经获得的信息。但是今日的最低价就是一个比较明显的未来信息或者说未来函数,因为不到今日收盘,是不可能确定当日的最低价的,要求在最低价买入是一个在现实中不可能完成的任务。不过在回溯测试过程中,由于已经在做决策时得到了关于当日最低价的信息,因此就有可能错误地将今日最低价当作可用信息并用来确定买卖决策。
还有其他一些关于未来信息错误使用的例子,比较知名的如“ 在牛市中持有股票"。实际上,除非具有预判牛市来临时间点的技术手段,否则这种说法往往只是牛市确认之后的事后诸葛亮。当一波牛市已经形成甚至走完的时候,再说出初期建仓之类的意见已经没有任何实际操作意义,而在牛市刚刚开始的时候,交易员常常无法准确地判定这到底是牛市的开始、持续的盘整还是前一波下跌途中的波动,也就无从谈起牛市持有股票了。
另外一个例子则更偏技术一些, 当研究人员使用整个样本的数据进行优化并得到一个量化交易策略之后,使用该量化交易策略在全样本的整体回溯测试中判断买点、卖点、仓位大小等设置就属于引入了未来信息。这时的未来信息问题不在于量化交易策略本身,而在于量化交易策略的研究过程。用上面的示意图3-1来进行说明,就是优化量化交易策略时,无差别地使用了A阶段和B阶段的数据,但是最终优化得到的量化交易策略,又放到整个样本中进行回溯测试并得到了A和B之间的买卖点。因此在回溯测试的过程中,该买卖点的确认就使用了B阶段的信息,也就是未来的信息。
由于未来信息对于回溯测试的可靠性具有负面影响,因此在实际的策略研发过程中是需要极力规避的。最直接的办法莫过于将研发完成的量化交易策略放入实际环境中进行模拟交易或者实盘交易,原因在于实际交易中判断策略执行的时间点总是现在,因此必然是无法得到未来的信息的。如果在回朔测试过程中不慎加入了未来信息,具有相同结构的量化交易策略在实际的交易中也必将暴露出来。
但是在实际的策略研发过程中,由于量化交易策略会经历频繁的变更,因此全部采取实际检验的方法有时是难以达到的。在有些回溯测试的情形下,可以人为地将数据样本分成两个部分并分开存储,使用其中一个部分进行量化交易策略的优化工作,然后将优化完成的策略放入另外一个部分的样本数据进行模拟运行。这种强制分开储存数据的做法,其实也是在效仿实际运行中未来数据的绝对不可得。如果在实际的研发工作中数据分开存储也因为工作量过大面不易完成,那么似乎也只能依靠量化交易策略研究人员自身的逻辑思考和判别能力来规避未来信息了。
虽然这里给出了一些办法用来规避未来信息,但是仍然存在一些未来 信息的种类是难以发觉甚至是难以避免的,例如在其他资料中讨论较多的存活者偏差。存活者偏差是指在某一个数据集当中,由于时间的推移,集合中之前包含的一部分成员由于无法存活而离开数据集,而在回溯测试时参照的是最后的存活成员,因此提前剔除了表现不好的非存活成员,造成了未来信息的问题。
依然使用图3-1来进行说明,研究人员在回溯测试时得到的数据是B阶段末尾所有存活成员的数据,但是在箭头所指向的买卖点时,所能见到的成员中还包括一些在B阶段离开的成员。回溯测试中由于数据集的问题直接把这些在B阶段表现不佳的成员进行了排除,就是滥用了B阶段才能得到的信息,从而虛假地提升了量化交易策略的回溯测试成绩。
这种问题常常发生在选股策略当中,一些股票数据库实际上已经根据当前的信息剔除了之前由于退市等问题而消失的股票的数据,使用这些数据库的数据进行回溯测试就会产生存活者偏差的问题。例如“买入价格极低的股票”这一策略,在获得的数据具有存活者偏差的情况下,能够在测试中建仓的都是之后会存活下来的股票,在价格很难更低的前提下上涨的可能性很高,因此回溯测试的结果往往不切实际的优秀。一些指数、股票分类的调整等情况,也可能会导致存活者偏差的产生。
由于完全排除存活者偏差问题的数据库通常价格更高甚至无法得到,依靠研究人员在时间轴上自行收集数据组建数据库的做法又耗时耗力,因此在这类情况下完全规避存活者偏差是非常困难的。