期货量化交易模型模拟运行测试讲解——期货量化交易体系形成上半部分
今天只说前半段和后半段的优化。我们下次再谈。

量化交易模型的检验和评估通常使用过去的历史市场数据,但未来的市场趋势不可能是过去趋势的完全复制。所以在大多数情况下,交易模型的历史评价结果并不能代表模型未来的交易表现。无论是夏普比率还是最大资产退出指数,市场的不同变化都可能对指数产生很大的影响,导致模型的交易表现与历史表现出现较大偏差。比如起止时间不同,收益率就会不同,导致夏普比率和最大回撤值的变化。如果最大回撤发生在测试期的开始或结束附近,最大回撤的指标也会对测试期的开始和结束日期高度敏感。也就是说,在过去的历史考验中,哪些措施行之有效
模式以后不一定运行的好。因此,在对交易模型进行测试后,如果对评价指标满意,就应该开始在真实的市场环境中对模型进行模拟,以此来发现真实交易与历史测试结果是否存在偏差,并对模型策略进行修正。这一阶段的主要工作应包括以下四个部分。
样本内和样本外检测
在量化交易的实践中,投资者经常会陷入这样的尴尬境地:交易策略的回测表现很好,但在实盘交易中盈利却不尽如人意,甚至刚用实盘交易就亏损。这里必须指出,良好的历史回测结果并不意味着策略在未来仍然会产生稳定的利润,尤其是当投资者使用专业的量化交易时。
软件在对策略进行拟合和参数优化后,往往可以得到对历史行情匹配效果非常好的参数配置。但这种高度优化的策略往往缺乏泛化能力,导致实际交易结果与回测结果偏差较大。
图4-6显示了两个样本策略的权益变化曲线。两种策略正在进行回溯测试。
结果在表现上差不多,但在真实交易中差别很大,这是参数过拟合的结果。处理这个问题有几种方法:使用较长的历史数据进行回测,增强策略的可靠性;在设计策略时,刻意限制策略的自由度和参数个数,降低决策的可能性
过拟合提高泛化能力;历史数据分为两部分:样本内和样本外进行测试。
权益
有效战略〓-ineffective战略

图4-6有效策略和失败策略
在实践中,样本内和样本外检验的操作方法是:历史数据的前80%作为样本内数据,后20%作为样本外数据。基于样本内数据,对策略进行回测并优化参数。在获得令人满意的性能后,样本外数据用于性能验证。如果样本外各项评价指标的表现与样本内接近,那么该策略在盈利能力上具有一定的泛化能力和连续性,可以作为实盘交易的候选策略。
检验模型在企业运营中的信号闪烁和价格窃取行为。
所谓信号闪烁,就是模型在图表上显示的买卖信号时而出现,时而消失。这种情况说明模型策略在判断买卖交易的条件时使用了future函数。
所谓未来函数,是指可能参考未来数据的函数,即参考或利用当时尚未发生的数据来修正先前判断的函数。具体来说,在这个周期结束后显示的指标值,包括线段和交易提示信号,在未来出现新的数据后,可能会改变位置或完全消失。包含未来数据的指标的基本特征是
买卖信号是不确定的,通常是在某一天或某一时间发出一个买卖信号。如果在第二天或第二个时间继续下跌或上涨,信号会消失,但会在稍后的时间显示位置。比如一个策略定义为“当日k线收盘价大于均线时买入;相反“卖出”,因为日k线的收盘价是当天交易结束前的最新价格,它随着市场的变化而变化,日内交易收盘价和由此计算出的移动平均价也会变化。当最新价格非常接近移动平均价格时,日内交易的日收盘价会突然高于移动平均价格,低于移动平均价格,所以交易模型会在图表上发出一会儿买入信号,一会儿买入信号消失,一会儿卖出信号出现,也就是信号闪烁。
未来函数可以理解为:一个变量依赖于另一个变量提前变化。比如变量A和变量B,B变化使得A也变化,那么A是B的函数;但如果B是一个微小的变量,而A是一个较早的变量,A随B变化,那么A就是B的未来函数。
未来函数有三种类型:一是以“之”转为代表的型函数。大多数最常见的未来函数都属于这一类,包括之字形转向、波峰之前前m个ZG转向波的峰值、波谷之前前m个ZG转向波的峰值、波谷之前前m个ZG转向波的峰值、波谷之前前m个ZG转向波的峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值、峰值秒、峰值这部分函数存在引用未来数据的问题,但不像ZG函数那样明显,其中一些函数目前还存在争议。这些函数包括FFT傅立叶变换、BACKSET前向赋值WINNER、LWINNER等获利盘比例函数。成本也具有未来函数的性质,这有时会使信号漂移。三是使用跨期数据函数类。这是最隐蔽的方法,危害更大。比如在日线中引用本周周线或本月月线的数据时,本周或本月股价上涨时信号会成功,股价下跌时信号会自动消失。不能用公式测试来检验。我们经常把KD月、周、日看做买入信号,就属于这一类。使用这些函数的模型成功率看起来很高,其实是假的。
信号反复闪烁的问题会给模型设计者造成很大的困惑。一旦在策略中使用了未来函数,并且信号闪烁,公司中就会有连续的开仓和平仓。但用历史数据测试时,只会有一个信号,导致真实交易结果的测试结果差异很大。很多模型在测试中表现非常好,在实盘上运行令人惊讶,这是反复的交易信号造成的。

有两种方法可以解决信号闪烁问题。一种是用不可逆条件作为信号判断条件。比如策略规定“当一根k线的最高价高于某个固定价”时,模型发出买入信号。因为一根k线的最高价只能持续上涨,如果在某个时刻满足条件,那就一直满足,信号不会消失,所以不会出现信号闪烁。二是使变化的未来函数成为不再变化的已完成函数。因为未来函数有一个时间段。有些指标可能是短期内的未来函数,但不是稍长时期的未来函数。比如“收盘”在一天收市之前是不确定的,所以一个日周期的指数在分时周期中具有未来函数的特征,但是一旦收市,指数就是一个固定值,不会随明天和以后的市场而变化,所以指数在比一天周期更长的周期中不是未来函数。
所谓偷价行为,是指在开仓和平仓时,利用当时并不存在的进出条件。比如模型策略规定“如果最高价大于某个固定价格,就在开盘价买入”,所以虽然信号不会闪,但是当最高价大于某个价格时,价格已经比开盘价高了一定距离,再以开盘价买入是不可能的。但是,用历史数据检验模型时,图表上出现买入信号。有些偷价行为是隐蔽的,这里以“最高价大于某个固定价格买入”的策略为例。如果把这个策略作为车型的购买信号,似乎是没有问题的。但如果市场一开盘就跳空高于固定价格,那么用模型是不可能在这个固定价格买入的。此时模型的交易策略应改为“以开盘价和定盘价的最大值作为买入价”,以避免偷价的发生。
闪信号和偷价对短线交易模型的影响是致命的,投资者一定要鉴别模型信号的真伪。利用未来的数据,不花什么力气就能轻松达到看似很高的成功率,但发出的交易信号在实际操作中却一文不值,这是一种交易欺骗,实战中给投资者带来的惨痛损失和后果往往难以想象。
在实盘中检验模型的风险控制性能。
衡量量化交易模型最重要的风险指标包括最大回撤、夏普比率等。由于历史事件和未来市场事件在原因和波动强度上的差异,模型在各种复杂环境下风险控制的表现能力需要用实盘进行测试,以判断模型的一些风险指标如最大回撤等关键指标的波动范围是否与历史测试数据范围存在较大偏差。如果有偏差,找到原因并改正。


