22.1 计算机的应用和滥用情境

    在运行自动化程序之前,你要确保相关的报告系统是合理、简洁和有效的;否则,你的新计算机只会加速进入混乱状态。

    ——罗伯特·汤森 [1] (Robert Townsend)

    计算机是不能代替思考的。在正确信息输入的条件下,它们擅长一遍又一遍地执行同样烦琐的任务,然后快速准确地提供测试结果。然而,即便是技术尚未达到《星球大战》(Star Wars)、《星际旅行》(Star Trek)甚至是韦尔斯的《世界大战》(The War of the Worlds)中所描绘的阶段,但是自图表→订单录入→系统的开发,计算机已成为一个交易的重要组成部分。本节将探讨那些好的以及不好的计算机问题的处理方法。

    当选择计算机时,速率和容量不再是一个问题,即使是基本模型也有足够的能力来解决所有问题,更不必说那些专业的程序。同时,存储所有股票实时数据的模式于初始时刻就存在一个问题,但因为有服务器,所以计算机可以很容易地处理,就连笔记本电脑也可以存储百万兆字节且执行多项任务。不过,我们最好还是购买高端硬件,进而确保所购买商品的使用寿命得以延续。

    20世纪80年代,一代计算机的平均寿命大约是10年,然而,技术进步已使之减少到大约3年;如果觉得过时,你可以在1年后就更换计算机。计算机逐年变得更快且更加复杂。据说计算机的容量和速度每年要翻两倍半。

    因为不是每个人都知道如何编辑计算机,所以软件公司已经开发了用户友好型的关键性软件包和相应程序,其是通过点击鼠标和选择菜单的方式来驱动的;相关技术把廉价而强大的硬件和精细的用户友好型软件这两个因素结合在一起,从而使个人和机构投资者对其产生很大的依赖性。一般来说,开发软件分为两组:

    (1)日间市场行情分析——于相关交易日结束之时更新价格、设置订单;

    (2)盘中交易平台——为用户提供在线数据反馈和实时执行。

    上述两种类型的软件能够进入相关的交易策略,同时测试它们的历史数据。相应软件的日间数据也被称为结束日数据,其被认为是“离线”模式,它们会被那些愿意于市场收盘评估之后准备订单,以便在第二天植入订单而不必经常观察行情的交易商所使用。然而,盘中交易平台要复杂得多,价格也更昂贵,其需要主动反馈数据、提供实时图形并随着价格模式的日间变化情境相应生成交易信号,它可以根据每个价格图点或基于用户所定义的棒线规模(例如30分钟图)而确定相应的交易方法。

    22.1.1 数据的获取方式

    每日的历史数据能够很容易地从各类交易软件当中获取。我们甚至可以购买相关的收费软件来自主开发,或者也可以在datavendors.com等网站方便地找到相应的数据表格,然而,其中缺少CQG交易平台和其他重要平台的资料——在这里,交易者可以看到25年来美国股票和期货市场的历史数据,但其不能提供欧洲市场及亚洲市场的相关数据。更多的数据和市场信息的获得总是需要支付额外的费用。专门的数据供应商(如数据服务和商品信息系统公司)通过大量的测试且通过交易平台向数据购买者提供服务,从而使这些数据能够更容易地被购买者所使用。

    如果需要期货数据,那么我们需要检查相应的数据供应商所提供的连续数据集,这对测试来说是十分必要的。在第21章中,我们讨论了逆向调整的类型,而在此,你需要了解那些数据调整的具体方式,以便它适应你的交易方式。

    当天的数据可以从几个主要的数据提供商那里获得,如CQG数据公司、蜱虫数据公司、彭博社等。然而,彭博社并没有提供自动下载和更新数据的功能。另外,诸如TradeStation、Thomson-Reuters(路透社)、MetaStock一类的盘中交易的平台可以提供完整的交易策略且于交易信号出现时生成新的订单,而且一键式购买模式已经成为一种交易策略。虽然我们已经可以从芝加哥商品交易所获取大部分可用的实时数据,但是从你的交易策略软件中所读取的格式不一定相同。你可能会通过购买正确格式的数据而使交易策略能够更加容易地被实现。

    如果你使用的是实时价格图表或者是带有实时数据的交易平台,那么这些数据可以下载为文本文件以便用于历史测试。我们可以从下拉菜单找到“数据导出”功能并将数据录入指定路径或者单击右键显示屏幕上的价格。

    1.数据的准确性

    我们惊讶地发现,即使是每天公开的数据,其对于不同的数据供应商而言所提供的价格也可能是不一致的。虽然大多数结算价格是相同的,但是高点和低点会有些许不同,而这对于大多数开发商来说并不重要,但是,对于ETF基金公司或上市基金公司所发布的计算数值而言,其需要使用多个数据源来解决相关的差异问题,有时收盘价会有很大的误差,所以相关用户需要对一些较大且异常的数据变动进行有效的检查。

    即使相应历史数据已经被使用很多年,然而,你可能会发现一些较短周期的数据序列当中会出现小数点级别的变动情境。历史数据会以图像的形式显示出来,这将会暴露出一些有问题的数据。但是,一些较小的误差项可能永远不会被发现。

    与源自不同供应商的数据相结合的模式也可能带来相关的问题,即一个数据源可以将相应价格记录为135.50,而另一个数据源则记录为13550或1355。

    2.数据的修正模式

    虽然实时数据包含的数据量是巨大的,但由于实时数据有好有坏,所以它们有时候并不是十分好用。在过去,期货市场的价格是以公开喊价,同时由相关职员于数据输入机中予以记录的方式而生成的,那么,报价错误则是普遍存在的。现在,几乎所有的东西都是电子化的,所以价格的形成变得更加精确,但其并不总是完美的。当使用高频数据时(例如瞬时数据),由于访问速度的限制,并非所有的瞬时信息都会流入你的计算机。在其他情况下,于一个有效的市场当中,你所收到的数据可能相对较晚,抑或是收到有所缺失的数据集。

    由于一些市场仍可能处在公开喊价阶段,甚至会有计算机出错的情况,那么我们就需要检查数据的完整性。日常数据的简单检查应包括:

    (1)异常值。这些数据点相对于以前数据而言的波动率大于4%(或预设的百分比)。

    (2)日期的缺失。连续超过4天没有数据,那么此种情境须被记录为一个潜在的问题。

    (3)高点-低点行情波幅以外的开盘价和收盘价是不可能存在的,数据应予以修正或删除。

    对于盘中数据而言,一些额外的检查是:

    (4)数据的频率,将每5分钟内的点数均值和瞬时电流频率进行比较,从而寻找期间丢失的数据。

    (5)盘中波动异常剧烈,在几秒钟内形成价格跳涨或跳跌,那么相关情境可能是由于数据错误或一个大额订单所生成的,其不能被很容易地消化。

    从这里我们可以很明显看出困境是能源市场的数据修正是极其困难的,其价格只在公开喊价的过程中形成。如果你开发了一个基于数据修正的系统,然后你将该策略应用于日内的现场交易,那么你会发现由于价格的不真实,相应系统会生成大量额外的交易信号。如此,按照你的理论来说,有利可图的生成会充斥着糟糕的交易,相应的净损失会替代预期的利润。对前述问题的解决方案是使用原始的、未经修正的数据,从而迫使系统对价格的移动不那么敏感。

    22.1.2 标准化的技术在系统中的使用

    策略开发程序所提供的广泛的标准化技术是以指标和预编系统的形式而存在的。我们可以选择随机震荡指标或RSI指标、均线系统以及于第N天破位的交易系统,同时将它们以不同的方式与计算周期结合在一起,例如应用10日或40日平滑均线,甚至使用30分钟、1小时或1天的数据,这些现有的技术可以满足大多数的需求。然而,它已经表明顺势系统的交易利润是在价格趋势当中生成的,而不是通过应用趋势线公式的方法形成的,趋势生成的速度比交易方法更重要。我们可以添加一个震荡或动量指标来确定入场的时机,这也是一个广泛的概念,它需要满足一系列的指标模式。另外,形成一个交易策略应该是将相关技术结合起来,进而匹配相关的时间框架和风险结构。在掌握专业编程以及应用标准化工具之前,你需要学习很多相关的知识。

    22.1.3 通过编程来实现新的理念

    如今计算机编程人才已不再稀缺,但是对于高技术含量人才的需求还是很大的,有时,这类人才的雇用工资要相对昂贵一些。然而,许多人已经精通电子表格和一些简单的编程任务,所以我们可以用编程的方法去验证相关策略是不是一个优秀的想法。幸运的是,通过数据管理,复杂的数据输入和订单输入的方式已经可以在交易开发软件部分进行相应的编程,例如,相应函数可以在交易中实现于收盘价做空或在125点止损的指令。另外,系统不仅要对实际所需的策略和交易清单进行编码,还要自动生成业绩汇总表,这对大规模回测起到了很好的作用。最重要的是,相应软件阻止你预测明天的价格,以便决定是否在今天买入或卖出。在本书中,有许多关于Excel电子表格和交易平台的实际案例,任何人都能够编辑简单的交易平台且将其变为Basic语言、C语言或其他的语言指令。

    软件开发的流行模式是尽可能多地尝试使用第三方软件,例如,经过优化之后运行(已经形成了数百行的测试结果,其中每一行都是参数值的组合)的程序可以将测试结果保存到电子表格中,而相应结果的测试细节可以用于排序、编写、分析,或者应用电子表格程序中的工具对其进行绘制。如果保存了一系列回测结果的数据,则可将它们在电子表格中进行比较分析,从而可以求得均值和方差并找到稳健型的交易策略。应用比较流行的平台(例如TradeStation和Metastock)的方式对于一些用户组、支持组和实时通信而言可以提供很大帮助。有些公司能够为测试系统提供具有替代性质的统计方法,而其他公司则会附加一个投资组合的程序。我们可以在购买这些程序之前检查这些服务是否满足你的需求。

    22.1.4 过于强大的计算机能量

    对于计算机来说,我们可以很容易地因之而解决寻找理想交易系统的问题,但是我们不能这样做。在第21章中,我们讨论了一个于良好前提下发现成功交易系统的过程。另外,你可以让所有的指标、趋势计算、基础数据和交易规则生成一个大型的图表画面,同时令计算机使用蛮力优化模式、神经网络或遗传算法来发现最优的投资组合情境,但是,现在你应该知道一个过度拟合的解是无效的。应用更大功率计算机的模式确实可以使数据处理显得更快,但是,其并不一定能找到一个有效的交易系统。换言之,能量越少就意味着应该事先找出解决问题办法来应对相关的问题,但是,无论如何,此方法都应该被仔细地论证。

    22.1.5 回顾以往情境

    尽可能多地应用数据模式的优势已被充分地讨论了:由于它反映的是各种更为宽泛的市场条件,因此所获取的、更多的数据可以使测试结果变得更加稳定,但是经常有人担心旧的数据不代表当前的状况,而实际的情况是,除非在数据结构上的相应变化情境使得旧数据无效,抑或是回测的时间变长或者已获取更多更优秀的数据,否则,获取更多系统数据的模式可以使你能够更长久地存活并且在当前的市场表现良好。如果过去一段时间的波动率较低,那么至少应该在这段时间内,相关交易策略不会展现相应的损失情境。价格运行模式似乎从来没有重复过,但是过去的价格特征可以被不断重现。

    22.1.6 模拟交易

    当集合所有的优秀想法去开发一个新的交易策略时,该策略需要保存除样本测试之外的最新数据。然而,在测试完成之前,该数据至少已经被使用了一次,也可以说被使用多次。不管你多么小心都会出现,该系统已经通过微调策略和参数的方法使相应数据产生过度拟合的情况。由于对数据过度拟合是在无意识之间产生的,所以从实际交易中所获取的收益情境也将会不同于测试的结果。

    最安全的方法是进行一段时间的模拟交易。你只有每天监控程序,才能在真实的市场条件下看到它的净值变动模式;在这样做之前,业绩的期望值则必须记录在案。同时,你应该知道交易频率、持有期、盈利交易的百分比、利润的规模和损失的规模,以便比较测试的结果。

    当系统发布它的第一份业绩报告时,我们总能松一口气,然而,它是最重要的概括性质的文件。当进行模拟交易时,你应该假设相应订单应该在盘中信号出现后5分钟之内以最差的价格成交或者在收盘时以最高的价格成交,那么在现实中,你可以在问题发生之前发现且可以节省很多钱。在不事先监控相关业绩之前,你不要在新系统之上进行交易,其后,你可开始少量地做单。

    22.1.7 本该运行但却没有运行的程序

    使所有交易策略都尽可能地认真运行的模式是一件困难的工作。相应的交易规则需要合乎逻辑并且被明确地定义。另外,交易策略的制定需要有足够的数据去测试。同时,你的尝试需要证明四件事情:

    (1)该策略是否有利可图;

    (2)该策略是否盈利;

    (3)该策略是否被有效地实施;

    (4)整个过程是否花费太长时间或执行成本是否过高。

    当然,最好的测试结果可以证明相关策略是成功的,但是从第一次的尝试开始,最可能出现的结果并不是最好的。如果你确信某种方法是有效的,只是结果不够好,那么策略执行过程中的每一步都需要被检查。交易策略应慢慢地被建立起来,在执行下一步策略之前,你必须检验每一步操作的合理性,因为在你运行系统至结束日之前,你永远不会知道整个组合最终是否会盈利。如果添加的新算法和功能存在恶性循环的情况,那么就应该停止运行相关策略,直到问题得以解决。

    22.1.8 纵向或整体的解决方案

    对于系统的开发有两个可以被使用的理念:若从纵向角度举例,其好比使用单个积木,一个搭在另一个之上并完成整个系统的统一结构;从整体的角度出发,其类似于在一个拼图框之中,将所有的图块通过一个特殊的方式拼成。完全集成的方法利用了特征之间的相关性,比如以趋势的计算速度以及阻止新订单一类的过滤指标,在价格波动太大时结束当前交易且予以清算。而如果滤除更多的交易,那么行情趋势的运行速度就会发生变化并很有可能在价格波动较小的市场工具当中获利。趋势速度和过滤阈值是相互依存的,因此你必须一起测试这两个参数。

    在使用纵向的方法解决问题时,其主要方法是先测试,并且认定相关策略有利可图,同时没有其他任何特征。在这种情况下,若计算周期在40天以上,同时于趋势回测时发现策略的运行是成功的,那么接下来的工作就是在选定的趋势周期中对波动阈值进行测试。因此,波动阈值的设定取决于特定的趋势,而且其间波动情境是否明显也会被很容易地查看出来。

    当纵向的解决方案显示价格波动对构建策略没有帮助时,那么你会有一个成功的综合性解决方案吗?当顺势交易本身不盈利,但被选择的交易于确定波动过滤指标时是有利可图的,那么这种不盈利就会生成。一些分析师认为这需要一个更复杂的解决方案,对其他人来说,这个方案也许是过度拟合的。我们可以通过测试盈利交易所占的百分比值去寻找相应的答案,这种方法在第21章中被称为稳健性。如果合并后的参数的盈利测试的百分比值好于仅应用顺势交易系统测试的百分比值,那么波动率的特征情境对于相关策略来说则是一种改进模式。

    1.显而易见的或者是复杂的解决方法

    一个显而易见的策略是很容易被理解的,它是应用图表模式并且通过在图表上显示或以模式组合的方式来解析相关策略的。那么在生成一个交易信号之后,一个深知交易规则的交易者可以通过查看屏幕上的价格来确认于相关点位之上该信号是否产生。

    而一个复杂的交易系统则不是很透明的。图表模式过滤了价格波动和成交量,然后,其对同一行业的其他股票和标准普尔500指数的价格运行模式加以确认,但是这项工作很难由手工计算来完成。如果基本的前提是:一个趋势是基于三角函数曲线的一部分情境,那么就不是任何人都可以凭直觉感知在哪一个价格区间进行交易。

    复杂的解决方法可能是错误的,并且也许没有人知道这一解决方法是错误的,那么解决方案则更难以被创建,特别是如何调整相应的交易方案。我们并不能直观地通过研究图表上的信号来加以确认。接受某种解决方案的前提是基于其对历史数据和盈利能力的测试。若一个复杂的解决方案被认为是成功的,而当它一旦出错之时,我们则很难对其进行修正。

    2.隔离问题的模式

    一些导致测试结果令人失望的常见原因是:

    (1)交易策略被错误地解析。当某些交易策略被编程时,我们需要为满足策略的不确定性而做出相应的选择,例如该策略只有在成交量确认的前提下才能执行下单这一操作指令,所以当这个策略被编程时,只有当今天的成交量大于昨天的成交量时才能确认。由于成交量指标存在不确定性,所以只有在今天的成交量大于过去10天的成交量均值时,系统才可以下达订单。

    (2)相应技术指标在测试的参数值范围内不起作用。我们最初的理念是找到一个中期趋势,从而避免持有期间过长,或者找到一个具有高风险、交易周期非常短且波动率巨大的短线交易。然而,在15~70天的范围内,没有一个参数值有效且1%~3%的止损机制似乎也是无效的。

    系统并不总是像预期想象的那样工作。事实证明:中期持有策略的灵活性较高,也就是说,有时,价格的移动可能持续了1~2周或者两个月。相同趋势周期不可能被同时捕捉,而若是存在负面的测试结果,那就是一种重要的反馈情境,在损失扩大之前,其有助于构造一个更优秀的交易策略。毕竟,若是事先知道答案,那就不必要创造什么策略了。

    并不是找到一个单一的、中等速度的趋势就万事大吉了,你必须将长期趋势和中期趋势相结合。由经济政策决定的较长时间周期能够确定行情的基本方向,经过计算的中等长度的周期将在这一趋势当中捕获更短的移动周期,同时避免与基本方向相悖的交易情境。你要花时间去理解在没有一种趋势的情况下,两种趋势情境是如何运行的,这可以提高对行情运行模式的理解且可在同一时间找到一个成功的交易策略。

    (3)某种测试在一些市场是有效的,但在其他市场中可能是无效的。一些市场的行情有更清晰的趋势,而另一些市场存在更多的随机干扰项。并非所有的市场都可以采用相同的策略,但是,同一行业的股票在所有市场中都应按照相同的方式运行。但是,你不要期望对雷声公司(Raytheon)和IBM公司的股票采取同样的交易方式,或者对英特尔公司和通用电气公司的股票采取相同的交易策略,但是,两家无线电话公司或两家汽车制造商则可以采用相似的策略。在期货市场中,最长的趋势一般表现在债券市场,而股指市场的波动率最大。你应该密切关注相似的市场所产生的不同情境,同时你要预期不同的金融市场具有各自不同的特征。

    3.在实践中不起作用的交易策略并不意味着它在理论上行不通

    如果更一般的问题不是问题,那么,你就需要看得更加深远一些。

    你做过假设吗? 当最初的想法得到验证时,它可能是通过选择的数据来完成的,这代表了最有可能成功的市场情境。它可能在特定类型的市场当中工作,但其可能会在其他的时段内失效。你可以通过过滤过高或过低波动率所相关的周期或隔离高相关性区间的方式在其他市场行情之中分离出同一类型的价格运行模式。

    忽略一些较大的亏损。 长期资本会犯下使几大损失合理化的错误,而这些错误会使股票价格的最大跌幅于历史数据的测试过程当中不再出现。如果这些损失被消除,那么预期风险就会降低很多,并且在进行杠杆化交易的过程中,利润将按比例得以增加。虽然同样的事件没有再次发生,可是不同的情况所造成的损失一样大。由于某些组合具有的高杠杆和头寸巨多的特征,如果相关成分动摇了整个金融系统,其相应价格将会一起下跌。如果出了什么状况,但历史数据却没有表现出足够的风险,那么市场之间的相关性就会增加。同时,更多的市场参与者将导致更加不稳定的价格波动情境且减少了多样化投资组合自身的保护能力。重大的历史损失不容忽视,但是其可以作为一种可能的且罕见的事件去接受,更多的关于这个重要问题的探讨会在第22.2节中介绍。

    市场波动所致。 如果今年是1996年,其间股票市场行情稳步走高,而一个新的开发系统可能在交易标准普尔指数或纳斯达克100指数时非常有利可图。随着时间推移至2000年,该系统在同一牛市行情中继续运行,但是市场波动性却显著地增加。如果系统在2000年执行与1996年一样的策略,交易同等数量的纳斯达克合约,那么敞口波动率会提高6倍且每份合约的价格自600涨至4000。在此情况下,个人的交易风险则必须通过止损和改变头寸规模来规避并需要考虑哪些原因导致了价格波动情境的变化,例如,于包括大豆和纳斯达克期货在内的多元化投资组合中,大豆行情则保持在一个窄幅的波动区间之内,而纳斯达克指数的波动率却在持续地增长。那么历史性的测试是否能够随着时间的推移阐明这种急剧变化的不平衡情境呢?

    未能意识到金融市场行情是不断变化的。 行情的波动率不仅会随着价格的上涨而增加,同时随着市场参与程度的增加,价格模式也会发生变化。从市场参与者增加的角度出发,你应该考虑到此种情境将会对短期价格运动带来更多的干扰。经济政策仍然可以造就主要趋势,但是大资金交易者或小资金交易者采取类似或相反交易策略的模式将导致理论上的市场效率低下,同时会增加不稳定的价格波动率。所谓净效应是指顺势交易系统需要更长的时间来识别趋势的变化,它在未来时刻的进场和离场情境会导致净利润的减少。另外,于长时间的测试过程之中,相应系统将表现出明显的衰退迹象。

    22.1.9 采取控制措施

    为了使策略取得成功,创造或者获取一个异常复杂的系统的方式并不十分必要。诸如长期趋势或二元移动平均交叉系统之类的简单指标体系也可以获取相当大的盈利。一个简易型的顺势指标同样适用于标准普尔指数或纳斯达克指数,如此,你就不会于2000年持有泡沫巨大的科技股的多方头寸,同时也可规避2008年次贷危机所造成的最大损失。虽然大多数财务经理和经纪人都在鼓励客户继续持有那些头寸,并且宣称相应损失情境只是暂时的,但是继续向上破位的行情趋势已经明显地减弱了。对市场行情的“预测”是不会具体到某一点位的,所持有的头寸应该在难以预测的事件发生之前被平掉,若是太晚平仓的话,那就会产生巨大的损失。即使是被动型投资者,他们也需要认识到金钱对其来说比经纪人更重要。积极主动的策略可能会导致一个小小的交易契机被错过,但是它也可以避免一个巨大的损失。

    [1] Robert Townsend,Up the Organization(New York:Knopf,1970),36.