13.5 XAPI版项目介绍

13.5 XAPI版项目介绍

在所有的MATLAB对接CTP方式中,这里以XAPI版为例进行介绍。

此项目最初是为了对接国外一款非常有名的软件一一OpenQuant的程序化交易平台而做的前期工作,同时为对接其他语言做了预留。

由于OpenQuant插件开发用的是C#,为了满足项目要求,首先要有C#版接口,考虑到还要为其他语言做准备,还必须要有C版接口。当时网络上没有C版接口开源,附属在一些C#版接口中的C版在对接其他语言时又不够方便,故C层与C#层另行开发。有部分网友希望能提供MATLAB版,但笔者在生产环境中井不使用MATL础进行交易,没有编写MEX版的动力。不过通过研究,可以使用更简化的方式满足用户的要求,也就是13.4节提到的C#版与MATLAB版对接原理。

Java版也是在网友的期盼中诞生的,当初是考虑到C#版对接MATLAB的方案只能在Windows下用,推出Java版对接MATLAB的方案就能在Linux中用了。可惜Java版的测试能用,但Java对接MATLAB的方案暂时还没有解决。

在飞马API和飞创X-Speed大力推广后,马上就接到了需要在OpenQuant中接入此两个接口的任务。按照CTP接口的写法依葫芦画瓢,很快就写出了其他接口,但很快就发现了局限性。

每套接口分C、C#、OpenQuant插件三个项目、CTP、Femas、XSpeed三套接口就9个项目,每次API官方接口一升级,就要同时升级对应的C、C#、OpenQuant插件三个项目。而每次OpenQuant官方接口升级, 3套API就得升级3套插件。有时因为发现一个Bug,9个项目同时要改,当API种类越来越多时,已经完全无法维护。在MATLAB中要做期货和证券时也遇到同样的问题,为股票和期货需要分别写不同的调用代码。所以决定做一套统一的接口,做到不同的API在其他语言中调用方法是一样的。因项目既能接多套API又能接多种语言,再加上以前的QuantBox其实是组织名,推广不易,所以重新更名为XAPI,目前已经升级到了第二代,叫XAPI2。

当前XAPI2有以下特点:

(1) 支持多API,己经支的有CTP、LTS、飞马、金仕达、通视等。

(2) 支持多语言或平台,如C#、C/C++、Java、Python、MATLAB、VBA、JavaScript等。

(3) 支持多操作系统,如Windows、Linux等。

(4) 支持多语言操作系统, 在英文操作系统和港台繁体操作系统上中文也显示正常。

另外要说明的是,XAPI版项目提供的C版本的特点是没有直接将C++版本的接口进行转换,而是做了一定的处理,就是简化逻辑,让其他语言对接CTP时能更简单。

首先来看CTP接口开发要注意的关键地方,其他网友公布的直接接口转换的封装都要自行处理这些烦琐细节,但XAPI版项目提供的C版都进了屏蔽。

(1) 请求ID,同一会话中严格单调递增。

(2) 报单引用,同一会话中严格单调递增。

(3) 发送请求流量控制,如果有在途的查询,则不允许发送新的查询。1秒钟最多允许发送一个查询。

(4) 部分期货公司要求先验证客户端授权然后才能登录。

(5) 登录成功后必须在结算单确认后才能下单。

(6) 行情与交易的流文件同目录可能引起数据紊乱。

(7) 接收到的响应需立即处理,否则会阻塞后面的数据接收。

XAPI2主要添加的功能如下:

(1) 报单、撒单直接发送,而其他的请求都先添加到发送队列,由发送线程去发送,发送失败后自动延时重发,解决了CTP有流控的问题。

(2) 收到响应后,直接存到队列中, 立即返回,然后其他线程从队列中取,解决了用户代码用时过久产生未知错误的问题。

(3) 维护请求ID与报单引用,自动加锁,不再纠结于细节, 不会出现重复报单。

(4) 自动进行连接、客户端授权、登录认证、结算单确认等工作,保证用户登录成功后就能直接下单。

(5) 断线重连后,行情与交易能重新登录认证,其中行情接口还能自动订阅断线前已经订阅的行情。

(6) 对行情与交易流文件自动分目录,解决了数据紊乱问题。