盈透证券(Interactive Brokers), 简称IB, 全球知名的互联网券商,在IB 开立一个账户即可在其平台交易全球多种金融产品(股票,期货,外汇。。。)
中国很多小型的互联网券商(包括一些初创的小型的金融科技公司)大多都(不是全部)选择IB作为美股下游券商(通俗点讲就是:美股下单全都走IB通道)
大多选择IB除了IB的稳定可靠外,主要是费用成本的考虑(IB的收费较为合理,具体的收费标准IB官网有很详细的介绍)
一般对接IB有两种方式:
(1) IB API . API 支持多种语言的接口,例如:JAVA, C#,Python等。
API 的开发流程一般可归结为:API调用服务+TWS
(2) IB FIX. FIX 开发应该是业内最标准的方式(主要是因为FIX协议在全球的广泛使用)
FIX得开发流程一般可归结为:FIX实现服务+IB Gateway
因为FIX 是业内标准的解决方案,因此这几篇博文主要介绍IB FIX开发。
为了叙述的方便,现假设有一家中国小型的金融科技公司A,A 公司想对接IB,即A公司想通过IB来交易美股。
在A公司进行IB FIX开发之前,首先需要搭建FIX开发的测试环境,测试环境的搭建主要包括以下步骤:
(1)A公司首先需要在IB开立一个实盘账户(该账户资产必须保证在10000美元以上)
(2)A公司联系IB QA部门,向QA申请测试环境
(3)QA收到申请后,会检查A实盘账户的资金情况,若资金大于等于10000美元,QA会向
A 发送"FIX Intergration Information.pdf"文件(该文件相当于A用户需求的问卷调查)
这个问卷主要是IB想了解用户通过IB交易的金融产品的种类,用户的连接方式、断线后委托的处理方式等。
(4)上述文件填写完后,IB QA 会开立IB Gateway的测试账户名和密码,TWS的测试账号和密码。
(5) A公司开发人员下载IB Gateway 和TWS 软件,在IB Gateway 的安装路径下,将jts.ini文件用QA 提供的文件替换掉。
A公司开发人员用测试账号和密码登录 Gateway 和TWS,登录成功则代表测试环境搭建成功。 目前市场 FIX 协议版本基本都是 FIX.4.4;
FIX协议框架的选用:QuickFix/J 1.6.3 (QuickFIX/J 是实现了FIX协议所有版本及其功能的开源软件,100%使用JAVA实现。);
QuickFix/J: 主要有两大部分,一部分是Fix协议数据的解析,另外一部分是客户端跟服务器端建立连接并维持回话,传输数据。
对于大部分的 FIX 供应商,Quote 服务器为普通连接,Trade 服务器为 SSL/TSL 协议的加密连接;
如果是 SSL/TSL,若服务商证书是未受信任的,请求网站拿到证书 .cer 文件,需要为客户端创建一个保存所有信任证书的仓库,然后把服务端证书 .cer 文件导进这个仓库。这样,当客户端连接服务端时,会发现服务端的证书在自己的信任列表中,就可以正常通信了。
导入具体命令:
keytool -import -trustcacerts -alias -file ./server_key.cer -keystore ./client_ks
对于QuickFix/J框架,需要在配置文件中使用 SSL 协议的 Session下添加,如下配置:
SocketUseSSL=Y
SocketTrustStore=上面生成的client_ks文件路径
SocketTrustStorePassword=生成client_ks文件时,设置的密码
值得注意的是,登录不需要主动发起,每次连接上相应的服务器,QuickFix/J 会自动发起登录请求,但是用户名/密码需要自己在toAdmin 生命周期函数里设置进去。如下图,判断请求类型是否为登录,设置用户名/密码。
在 QuickFix/J 配置文件中有个DataDictionary字段,这个可以用来处理,有些服务商返回字段不符合 FIX.4.4 标准协议,QuickFix/J 报错的情况。