半自动交易系统中(如图5-1所示)一般用Excel或MATLAB等好用的软件生成指令。生成指令的程序通常就是回测程序,毕竟,所执行的量化交易策略就是回测的策略。当然,要记得更新输入的数据文件,以反映最新的数据。这项工作要么由能够直接进入网站检索所需数据的MATLAB完成,要么由一个独立的程序来完成,如前面提到的HQuote,在下面的例子中,MATLAB仅用作将这些数据转换为合适的格式,以便策略程序生成指令。
图5-1 半自动交易系统
若最新数据是前一天的收盘价,数据更新比较容易,若是当天最新成交价,就比较困难。如果所需数据是最新成交价,经纪商或数据提供商就必须提供一个能够自动更新Excel输入文件的动态数据交换(DDE)链接。绝大多数为交易员提供服务的经纪商,都会提供这种动态数据交换链接,如Interactive Brokers, Genesis Securities和高盛REDIPlus等。许多自营交易公司会使用其中一家经纪商来执行交易,因此,你可以获得这些经纪商提供的全部实时数据和指令输入技术。
动态数据交换链接可以直接导入Excel电子表格,自动将实时数据写入单元格内。
不同经纪商的动态数据交换链接的格式不尽相同,但看起来都跟这个差不多:
=accountid ︳LAST!IBM
其中,LAST表示最新价格,IBM是股票代码。
可通过运行Excel宏(与表格关联的VB程序)或MATLAB程序来生成指令,它们可以检查表格中的信息和价格,运行交易算法,将指令写入另一个文本文件,文件每一行包含三项内容:股票代码、方向、数量。
例如:
(“IBM",“BUY",“100")
就可能是输出指令文件中的一行。有时,经纪商还需要其他信息,如当天有效或撤单前均有效。所有这些补充信息要写入指令文件的每一行。
在生成包含指令的文本义件后.就可以将指令文件上传给经纪商的组合交易器或差价交易器,以备传送。
组合交易器是可以向经纪商一次上传多只股票多个指令的应用程序。差价交易器是可以指定多对股票或证券及各对指令触发条件的应用程序。差价交易器在整个交易日中,能监控实时价格并检查是否满足触发条件。如果经纪商的动态数据交换链接允许传送指令,也可以运行一个Excel宏文件来扫描指令文件,并且可以将所有指令一次性传送到账户。
我的两个经纪商Interactive Brokers和REDIPIus,都有组合交易器和差价交易器,以及可以更新数据和传送指令的动态数据交换链接。(Interactive Brokers的差价交易器只能用于期货日历差价。股票差价可通过“通用组合”在某时刻指定股票配对来实现,不过期货和股票都有指令触发条件的持续监控。)
这里,介绍一下我是如何使用Interactive Brokers的组合交易器。每天开盘前,我运行一个MATLAB程序检索市场数据,运行交易算法,并将一组指令写入指令文件,指令文件往往超过1000行(相应地,超过1000个标签)。之后,我在交易页面启动组合交易器,并用组合交易器一次向账户上传包括所有指令的指令文件。有些指令可能在开盘时就被执行了,有些指令可能会在稍后被执行,有些可能没被执行。收盘前,我要点击按钮取消所有未执行的指令。最后,如果我想将所有头寸清仓,只需点击组合交易器里的另一个按钮生成相应的清仓指令即可。
我用REDIPlus的差价交易器来执行案例中的配对交易策略,因为可以在交易日的任何时候通过差价交易器下达指令,而无需等到收盘。同样,我在开盘前用MATLAB收集市场数据,运行配对交易算法,并写入所有配对股票的限价。(注意,这里的限价是对差价的限定,而不是单只股票。如果是限定单只股票,普通限价指令就能做到,不需要差价交易器。)之后,在已包含之前所选定配对的差价交易器中,我根据MATLAR的输出结果人工调整限价,其中交易器已经包含了我之前指定的所有配对股票。(实际上,这个步骤也可以自动完成:MATLAB可以把所有差价指令信息写入一个Excel文件,并上传到差价交易器。)点击另一个按钮就可以开始全天候监控股票价格和指令执行信息了。
我也会用REDIPIus的动态数据交换链接来传送另一个组合交易策略的指令。我先用MATLAB在每个Excel单元格里生成一个恰当的动态数据交换链接公式,这样每行标签下的数据就可以自动更新了。开盘后,我通过电子表格的宏检查每个数据标签并将其(连同电子表格中的其他指令信息)上传到REDIPIus的账户中。
一般来说,半自动交易系统适用于每天只需运行少数几次来生成一波或几波指令。即使经纪商的应用程序接口(API)提供用Excel VB宏传送指令的功能,要频繁运行程序来获取最新数据并生成一波又一波的指令,程序的速度会非常慢。这种情况,就必须建立全自动交易系统。