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