21.3 测试数据的选择模式

    我们这里可以推测交易策略的测试需要依靠计算机来完成,所以我们有必要构建一个行情价格相关的数据库,如果你有更高的追求,则可进行历史性的经济统计工作。实际上,数据是现成的,其可从众多的平台当中被提取,它们包括:世界上所有于交易所交易的各类金融工具的日间行情高点、低点、收盘价、交易量以及未平仓合约(期货);同时,个股数据也是可用的,其可在互联网上被发现,此项过程是没有成本的(虽然有些不便);盘中数据(以点数计)可以从有限的供应商处购买,其中最知名的是CQG数据工会和交易数据平台;公司股票数据通常也可以从任何报价系统中输出。总之,一个完整的数据库是一项重要的资产,其可以在每天交易结束时自动更新相应的数据流。

    一些数据厂商意识到分析师希望使用数据进行测试,为此,他们专门创建了连续测试系列,其中,个股价格于拆分之时可以通过应用拆分比率将当期价格除以拆分前的数据价格的方式予以修正,因此3∶1的拆分比率则意味着拆分前的数据要除以3;如果之前的拆分比率为2∶1,那么,相关的数据就要除以6。

    期货数据每1~3个月就会到期,它们是于各期合约之间通过调整相关的缺口而循环运行的。供应商允许你指定如何且何时开始滚算,或者你也可以简单地选择默认的模式。图21-1给出了最近一期取暖油期货数据的循环情境,即它们每30天滚算一次。在很短的时间内,调整前和调整后的数据序列非常相似,但相关差值(diff)表明:缺口会导致每个月的价格发生急剧变化;同时,累积的缺口如果超过10年或20年,那就会生成巨大的数据量,如果没有对缺口进行调整,那这些缺口将带来暴利或损失。另外,分析师可以选择使用不同的数据格式进行测试,举例如下。

    图21-1 回调数据与最近期的合约的比较方式

    图21-2 测试1993年7月~1996年12月所有被使用的期货合约数据

    (1)单期整体合约 ,即对整体期货合约或一系列合约所进行的测试。使用完整期货合约是一个烦琐的过程,其可能会导致测试周期的重叠和测试结果的重复显现。图21-2显示了在1993年7月~1996年12月,因为没有谨慎使用所有的期货合约数据来进行测试,其导致测试结果出现了很大的偏差,其中,横坐标代表了7月、9月、12月和1月交割的期货市场的合约期限。由于存在18个月的持续期,所以,在1991年下半年,只有一半的合约可以被测试;相较于中期测试的6个合约而言,在1996年年底,可被测试的合约只有两份,图21-2b显示了每个时间框架之下的测试频率。

    (2)回调(或后调)的相关数据 ,即单期合约的数据于到期循环日在旧合约价格的基础上通过对循环期内新旧合约价格之间的差值进行调整所获取的资料素材,例如,如果在同一日期新合约的交易价格为80.00元,旧合约的价格为75.00元,那么所有数据在旧合约的价格上要增加5.00元;回到之前的合约,如果发现第三个合约所显示的价格为74.00元,而当前合约价格为78.00时,那么,前面三个合约的价格则需整体增加9.00元,即两个循环日价格调整值的总和。同时,在循环周期内,前面第三个合约价格高于第二个合约(81.00>78.00),那么,它的价格只增加2.00元,相关的总值为5.00元减去3.00元。总之,每份合约的调整幅度都是之前所有于周期内进行调整的数据的累计值,而数据回调的过程需要从最先的数值开始并且随着时间的推移而不断地运行。最后,旧数据要与实际价格相匹配,但是,最新数据则有所不同。

    在大多数系统当中,上述这种技术已经很普通了,尤其是当数据回溯到10年以上的时候,相应的调整结果与最先数据之间的差异则非常大——在极端情况下,调整后的价格甚至会变成负数。同时,使用价格百分比值所得到的计算结果相对于回调数据而言是无效的。

    另外,到期循环日可以是下列选项之一:

    a.固定日期,比如在交割月份的最后一天。对于利率、标准的农产品和其他一些商品交易而言,进入交割月后,保证金的要求会有显著的变化。而对于国债和欧洲美元货币对而言,6月到期的合约的滚算日一般是在5月的最后一天,9月到期合约的滚算日则是8月的最后一天,如此等等。对于指数市场而言,到期日可能是当月的第三个周五,而该合约的交易一直会活跃至交割日的前几天。软件供应商所提供的软件允许你选择合同到期前的第n天。

    b.交易量与持仓量所相关的日期是根据最近期交割月至下一个展期之间的时段而计算的,使用这种方法,滚动调整系列则代表了具有最大流动性的合约。

    (3)指数形式的数据序列 ,即每天的百分比回报被一个连续的系列来显示,这基本上就是一个股票指数的构建方式。如果铜价波动1.0%所对应的价格是0.9000~0.9090美元/磅,那么,相关指数值将增加1.0%,即从100升至101。当合约到期时,新合约的价格变动要与之前的价格进行比较。总之,指数形式的序列转换模式在比较两个市场行情和构建投资组合方面是很有用处的。

    (4)n日连续级数 ,即以同样的方式为伦敦金和现货金的远期市场行情报价(例如30天后交割)。一个30日远期系列可以创建任何形式的期货市场。其中,30日价格是通过于30日前的各交割日之间进行插值计算所得出的。前述这种类型的数据系列被称为永久性合约,其展示了自身所相关的一系列问题。展期合约不像近期合同那样易变,而其制定的价值则可构建一个比所能交易的价格更为平滑的系列。它的测试结果可能看起来风险更小,利润更少,但是,其识别趋势的可靠性则更高。这里最重要的是:相关测试将在价格序列之上进行,而这些价格实际上并没有出现。

    21.3.1 现货数据

    对于大多数期货市场来说,现货数据是可以获得的,但是,外汇交易却带来了一个特别的问题,与期货市场相比,外汇交易的利率要高得多,其中一些交易可能会很有趣,即使是第二或第三活跃的外汇市场工具欧元在芝加哥商品交易所的期货交易量也非常低,因此,其期货数据可能不如现货数据的表现好。然而,测试现货数据和依据期货数据进行交易的模式并不是一种可靠的方法。期货交易价格可以在现货的基础上出现溢价或折价,这种价格差异会在两国利率差和投机者的期望值之间波动;在极端情况下,现货市场的行情可能会上涨,而期货市场行情则会下跌。通过计算利率平价,我们可以从现货数据中创建近似的期货数据:这是两国在交叉汇率问题之上所形成的远期利率差,相关问题请参阅第2章,你可于其中了解更多的细节。

    21.3.2 数据系列调整模式所相关的问题

    在所有的测试方法当中,特别是应用顺势指标和动量指标时,回调数据、拆分数据以及将相关数据指数化的模式是最理想的,但是,在任何需要百分比值的计算过程中则不能使用。相对期货市场,尤其是能源期货市场而言,在循环日当天会出现很大的价差,这会导致原来的价格下降,因此,调整的价格序列于初始时刻可能是负值,而此种情境对移动平均的计算没有任何影响,但是,一个负数的百分比值可能会严重影响相关交易策略的决策方式。同时,此类问题对于回调的股票拆分情境来说则更为微妙,因为这些股票的价格似乎都是正确的,而且从不为负,例如,如果在过去的10年当中IBM公司股价已经拆分了两次(每次2∶1),那么,10年前的价格会以除4的形式向下调整;如果1990年的实际价格是每股50美元,那么,调整系列将显示为12.50美元。如果交易区间是2~50美元,那么,回调后的每股价格就会调整至0.50~12.50美元。但是,真正较低的价格波动的幅度可能比50美元所对应的比例要高,所以,价值12.50美元的股票行情将具有价值50美元股票的所有特征与属性。

    比较历史最高点和最低点不能用回调的数据系列。分析师通常会在测试前一年价格高点的过程当中发现一个重要的阻力位;然而,原来的价格已经被调整,其可能会高于或低于其原始点位。为了便于比较,我们有必要从另外一个没有回调的第二个序列开始于相同的日期内进行滚算,而当需要真正的历史价格时,我们则可以访问第二个数据序列。

    当进行交易时,指数化的数据序列可能会增添很多麻烦,因为所有的价格都必须转换为指数值,以便于根据策略进行评估,我们不能简单地使用指数化的数据序列进行测试,然后再使用这些价格数据序列进行交易。

    21.3.3 哪个数据序列是最好的

    如果所有的被调整的数据序列都有问题,那么哪个是最好的呢?它取决于实际交易的合约之中所构建的序列数据。在大多数情况下,它是一个与交易量或持仓量相关的且经过回调的滚算系列;同时,它也是最具流动性的。如果需要真正的价格,那么我们就应该使用第二序列。

    指数序列是非常好的,尽管其会使相关交易变得更为复杂。指数化的过程非常近似于波动率的调整模式,其可能使相应数据更易于使用,从而使相关参数的选择更具一致性。

    21.3.4 合成数据

    获取测试数据的最终答案是自己构建的,数据越多越好。如果我们可以创建具有和即将交易的数据的特征相同,但又有所不同的合成数据,那将会生成所需要的理想情境,多年以来,分析师和数学家都在努力地创建此类数据,相关的方法包括:

    ·蒙特卡罗法。 第一种方法是:使用蒙特卡罗模拟过程来扫描实际数据,进而寻找将数据划分为等值长度的方法,其通过发现最低自相关(一个数据区间对之前区间的依赖度)的周期,然后将实际数据重新随机排列成新的序列。不幸的是,其中混合的部分将长期地与牛市高峰期不可避免地以下滑的形式分开。在实际交易中,只有在之前的上涨趋势累积了较大的利润之后,价格才会达到高点。离散数据使相关两个事件不能相互依存的情境是不切实际的,因此,蒙特卡罗的方法被放弃了。

    ·随机数列及其分布形态。 数学上所创建的合成系列是以随机数开始的。研究表明:一系列简单的随机数字与大多数价格的变动情境非常相似,尤其是横盘行情运行期间。但是,价格走势并不呈现正态分布,而且,其上涨和下跌的情境比随机序列之中所发现的要长得多。由于政策因素、波动率的变化以及一定程度噪声水平的影响,真实的数据则存在季节性以及正偏的乖离性。同时,数理模式具有强大的功能,其可以生成10%的价格系列以及90%的噪声因子,从而映射相关的季节性乖离情境和对数形式的分布状态。

    在沃尔贝格的《专家交易系统》之中, [1] 我们可以找到一个更新的、更加复杂的且合成的数据构建方法,该技术利用高斯分布来显示倾斜的价格分布情境以及噪声的权重,其是一种围绕趋势变化的价格函数,但是,趋势结构本身是非线性的且需使用内核回归的形式构建。同时,用于验证合成数据与实际数据相比是否具有相同特征的一种方法被称为等分过程,其用来预测和实际数据具有相同符号的合成记录的百分比值,其他相关的方差、噪声因子以及统计数据的分布情境应该与之相匹配。

    合成数据是解决不同问题的理想方案,这也让人想起了两台计算机在下棋的情境:在这种情况下,一台计算机会创建一个数据串来愚弄另一台计算机,使其以为相应的数据是真实的;而第二台计算机也正在创建一个策略,它可以凭其知晓数据序列不是真实的,而是由系统结构所创建的。如果相关序列是真实的,那么它就会在一定程度上应用复杂性来抵制虚假性;如果它不是随机的,那么另一台计算机应该能够识别相关序列的创建过程,然后加以运用。总之,第二台计算机应该是赢家。

    [1] John R.Wolberg,Expert Trading Systems:Modeling Financial Markets Using Kernel Regression(New York:John Wiley & Sons,2000).