5. 1 自动交易系统的功能
自动交易系统从经纪商或其他数据提供商那里获取最新的市场数据,运行交易算法生成指令,传送指令给经纪商以执行。有时,所有这些步骤都是自动的,就像电脑里安装的一个桌面应用程序一样。有时,只有部分过程是自动的,有些步骤需要手工操作。
全自动交易系统的优势是可将人为错误和延迟降到最低。对于高频交易系统,全自动交易系统是必不可少的,因为任何人工操作都会产生足以严重影响业绩的延迟。但是,全自动交易系统十分复杂且昂贵,通常需要专业程序员掌握Java 、σ 或c ++等高性能程序语言,以实现与经纪商的应用程序接口( API )对接。
对于低频量化交易策略,半自动交易系统即可:用Excel 或MATLAB 等程序生成指令,然后用经纪商提供的现成工具(如组合交易器或差价交易器)来传送指令。如果经纪商提供连接Excel 的动态数据交换功能(参见下文),就可以在Excel 中编写一个宏,通过运行宏将指令传送给经纪商。这样,就不需要用复杂的程序语言来编写应用程序。但是,这也就意味着你不得不完成一些手工操作,以备传送指令。
无论是半自动交易系统还是全自动交易系统,通常都需要输入一些经纪商或其他数据提供商不提供的数据。例如,实时数据流通常不提供的盈利预测或分红数据。很多网站都会免费提供这些非价格数据,不过通常是HTML 格式,不能直接使用。因此,自动交易系统必须能够在这些网页上检索、读取数据,并将其转换为策略可以使用的格式。这种网页检索和读取程序,可以轻易地安装到MATLAB (见第3 章例3. 1 ),以及Perl 之类的脚本语言里。
接下来,我们将讨论这两种交易系统的细节。我也会介绍如何聘请编程顾问,因为你也有可能找人帮忙来实现交易策略的自动化。
5.1. 1 建立半自动交易系统
半自动交易系统中(如图5-1 所示)一般用Excel 或MATLAB 等好用的软件生成指令。生成指令的程序通常就是回测程序,毕竟,所执行的量化交易策略就是回测的策略。当然,要记得更新输入的数据文件,以反映最新的数据。这项工作要么由能够直接进入网站检索所需数据的MATLAB 完成,要么由一个独立的程序来完成,如前面提到的HQuote 。在下面的例子中, MATLAB 仅用作将这些数据转换为合适的格式,以便策略程序生成指令。

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

全自动交易系统的运行需要经纪商提供API ,用于检索数据和传送指令。经纪商提供的API 通常适用于VB 、Java 、Ci* 或c++这些常见的编程语言,因此,自动交易系统也必须是用这几种语言编写的。很遗憾,据我所知,没有经纪商提供适用于MATLAB 的APio 因此,不能用MATLAB 构建自动交易系统中的指令传送模块。
从理论上讲,可以用Excel 电子表格和内置的宏来构建全自动交易系统,所要做的就是在宏中建立一个循环,这样就可以每天在适当的时间用动态数据交换链接更新单元格数据并传送指令。遗憾的是,通过动态数据交换链接进行数据升级的速度很慢,并且经纪商通常会限制每次更新的股票数量。(除非你在上一个交易月贡献了大笔佣金, Interactive Brokers 只允许更新100 只股票的数据。)同样,通过动态数据交换链接传送指令的速度也很慢。考虑到策略要反映一天中实时市场数据的变化,用电子表格来构建全自动交易系统并不可行。
TradeSta ti on 等经纪商可以提供进行完整回测和指令传送的平台。如果你使用这样的平台进行回测,只需对平台进行一定的配置,程序就能够将真正的指令发送到你的账户上了。这样,无论是进行回测还是自动执行交易,都不需要编写自己的软件了。但就像第3 章提到的,这种自营系统的缺点是,在构建策略时不如MATLAB 这样的多用途程序语言那么灵活。比如,如果要眼踪一个基于主成分分析的复杂的数学策略(如例7. 4 ),使用TradeStation 来做回测是非常困难的。Alphacet' s Discovery等更加先进的集合交易平台的确可以为回测和执行提供更多的算法,但价格也不是普通的独立交易员所能承受的。
聘请编程顾问
建立自动交易系统比进行策略回测需要更多的专业编程技巧。对于高频交易策略,交易执行速度是非常关键的。寻找一个编程顾问比自己建立交易执行系统要轻松不少。
聘请编程顾问并不需要花很多钱。请一个有经验的程序员,每小时一般是50 ~ 100 美元。有时可以事先就整个项目谈定一个固定价格,以我的经验,绝大多数独立交易员的编程项目在1 000~ 5 000 美元。如采开户的经纪商提供API ,经纪商通常会推荐一些熟悉它的API 的程序员。(例如, Interactive Brokers 就有一个网页,编程顾问可以在上面提供服务信息。)也可以在elitetrader. com 上寻找编程顾问(或发布需求信息〉。最后一招,可以在craigslist. org 上看到自由程序员发布的成百上千条自荐广告。但我觉得craigslist. org 上自由程序员的水平参差不齐,尤其是他们对金融市场和交易技术的了解不多,而这对于成功构建自动交易系统是很关键的。
聘请程序员还需要考虑一个问题z 策略如何保密?当然,你可以和他们签订保密协议(可在许多法律文件网站上免费下载〉,但在交易系统构建完成后,就算他们真的窃取了你的策咯并在其个人账户中运行,也是几乎无法发现的。有几种方法可以解决这个问题。
首先,我之前提到过,绝大多数你认为是独创的策略其实很多有经验的交易员都知道。所以,不论你是否愿意,其他人早已进行过相似策咯的交易,并影响了你的收益。再有一两个交易员参与进来也不会对收益产生灵多的影响,除非他是机构基金经理。
其次,如果你的策咯交易量巨大(如绝大多数期货交易策咯),你聘请的那性没有道德的编程顾问根本不会对你产生什么影响。
最后,你可以把编程工作拆分给不同的人去完成,也就是说,可以聘请不同的程序员分别完成自动交易系统不同部分的构建。如让一名程序员编写可用于不同策略的执行程序,让另一名程序员编写尚未输入参数的策略。这样,第一名程序员不知道策略,第二名程序员-没有执行策略所需的基础程序,并且两名程序员都不知道你的笨咯所使用的真实参数位。