vn.py
首发于vn.py

vn.py快速入门4 - 海外市场IB

本文原载于vn.py社区微信公众号(vnpy -community)。

​IB,全称Interactive Brokers,中文名盈透证券,是全球公认第一的全品种零售经纪商,提供的金融品种包括:

  • 股票:美股、港股、欧股、A股(沪港通)等
  • 期货:CME、LME、HKFE、SGX等(没有国内期货)
  • 期权:上述股票和期货交易所的所有期权品种
  • 固收:常规交易所的债券以及非常规银行间的债券(打电话)
  • 外汇:纯ECN交易模式的杠杆外汇(银行间做市商)
  • 贵金属现货:和外汇一样的银行间杠杆市场

加上已有十多年历史早已成为行业标准的交易接口IB API,基本上说起外盘交易通道,IB就是当仁不让的第一选择了。

但需要额外强调的是,针对某些特定的交易市场或者需求,IB未必是最终的最优选择,但一定是最方便的。


准备账号

和其他接口不同的是,IB一共有三套账户体系:

  • Live Trading:实盘账户
  • Paper Trading:仿真账户
  • Demo Trading:演示账户

其中Paper Trading和Live Trading高度类似,提供接近实盘交易行情以及撮合成交(像CTP的第一套环境),而Demo Trading则只提供历史行情的回放,满足交易接口测试的需求(像CTP的第二套7X24小时环境)。

接下来的内容,我们以最容易获取的Demo Trading为例来讲解,首先前往IB官网下载TWS(Trader Work Station):interactivebrokers.com/,一般下载最新版本的TWS Latest。

安装后启动,看到以下界面:

点击底部的“Return to the demo”按钮,打开演示账户测试界面:

输入邮箱地址后,点击“Try Demo”按钮,即可登录进入演示账户的TWS界面:

点击右上角的齿轮图标(从右往左导数第五个),打开TWS配置对话框,在General页面,将“Current Language”设为English后,关闭并重启TWS。

然后进入到“API”->“Settings”来进行API接入相关的配置:

勾选“Enable ActiveX and Socket Clients”,允许外部程序接入TWS;

  1. 勾选“Download open orders on connection”,在外部程序连上TWS时获取所有未成交委托信息;
  2. 记录你的端口号“Socket Port”(我这里是7497),将用于后续从VN Trader发起到TWS的连接;
  3. 点击“OK”按钮,保存配置


接口登录

和其他大多数API接口直连经纪商服务器的模式不同,IB接口连接的是位于本地的交易客户端TWS,再由TWS负责连接到IB的服务器,因此在启动VN Trader前需要先启动TWS完成账户登录。

接下来照着入门1中的方法,启动VN Trader Pro,只加载“盈透证券”接口。

进入主界面后,点击菜单栏的“系统”->“连接IB”,看到对话框:

各个字段的填写如下:

  • TWS地址:127.0.0.1(本机IP地址)
  • TWS端口:7497(之前步骤)
  • 客户号:填写1即可(除非你有多个进程连接TWS

需要强调的是,和CTP等其他API从本地交易程序直连远端服务器的模式不同,IB API的连接是从本地交易程序(如VN Trader),到本地的客户端TWS,背后由TWS负责维护从本地到IB服务器的连接。

以上都填好后,点击“连接”按钮开始登录CTP服务器以及相关初始化操作,在右下角的日志监控组件中,可以看到初始化相关的日志信息输出:

登录初始化过程中有任何异常情况,日志信息中都会看到相应的文字输出,可以根据内容自行排查。看到“服务器时间”这条日志后,说明已经成功完成了初始化操作。

后续依旧会有一系列的信息通知,这些主要和IB账户相关的数据权限配置有关(说白了就是告诉你那些实时行情你没花钱买,现在获取不到),Demo Trading没有特别好的解决办法,推荐还是入金后申请Paper Trading。


查看合约

由于盈透证券支持的交易所以及合约资源实在太多,IB API无法提供和CTP或者币圈接口类似的全合约查询功能。用户需要前往盈透证券的官方网站,在其交易产品列表页面,自行寻找相关的合约信息:interactivebrokers.com.hk.

注意在VN Trader中,针对IB接口所使用的交易合约代码,是该合约在IB系统内的唯一标识符Conid,全称Contract Identifier,注意Conid为一串纯数字,不要和Symbol或者Description Name搞混。


订阅行情

在上一步中找到自己想要订阅行情的合约信息后,则可以在VN Trader界面左上角的交易组件框中,选择交易所、接口后,在代码框中输入合约代码后回车,即可订阅行情。

当收到最新行情Tick推送时,会显示在下方的深度报价中,IB接口的Tick推送的最高更新频率是每秒4笔。

订阅行情后,IB接口也会自动查询该合约的相关信息,此时再打开“帮助”->“合约查询”组件,即可看到该合约:

所有已订阅的行情信息,都会显示在右侧顶部的行情监控组件中,方便后续快速执行手动交易:

需要注意IB上的行情数据,除少量免费提供外(外汇、贵金属),其他大部分都需要在IB官网的后台管理系统中付费购买后,才能在VN Trader中订阅使用。如果行情订阅失败(Conid填错、没有购买等),在左下角的日志组件中也会有相应的内容输出,方便排查。


交易下单

知道最新行情的价格在哪里后,就可以进行买卖下单:

  1. 选择交易方向:要买(多)还是要卖(空)
  2. 开平留空不用选
  3. 选择价格类型:IB接口支持限价、市价
  4. 输入价格和数量后,点击“委托”按钮即可发出交易请求


委托成交

委托请求提交后,则会返回相应的委托回报信息,显示在委托组件中,显示当前这笔委托请求的最新状态:

注意委托组件分为两个:

  • “活动”:只显示当前处于可撤状态(提交中、未成交、部分成交)的委托信息
  • “委托”:显示所有的委托信息(包括可撤委托)

两个组件中,对于处于可撤状态的委托,均可双击该笔委托的单元格来实现撤单的功能(鼠标放置其上时会有文字提示)。或者也可以通过交易组件上的单击“全撤”按钮,来实现一键全撤VN Trader内当前所有可撤委托。

当委托发生成交后,VN Trader会收到成交推送的数据,并显示在成交监控组件中,用户可以通过每笔成交的委托号来实现和对应委托的映射。注意在实盘中,每笔委托可能和多笔反向来自其他投资者的委托发生成交,即一笔委托对应有多笔成交记录。


资金持仓

委托成交后,账户的资金情况将会发生变化,IB针对每个币种的资金提供独立的账号,可以通过账号名后缀来判断,注意其中的BASE是你的IB账户的基础币种账号。

IB接口提供实时推送更新的资金和持仓数据,在持仓方向上也采取净仓模式来计算:


实盘交易

当你已经对IB的Demo Trading测试环境足够熟悉后,可以开始用Paper Trading来进行仿真交易,或者使用Live Trading进行实盘交易,只需要在TWS登录的时候选择对应的账号即可。

除了TWS外,IB针对API交易还提供了一套更加轻量级的客户端IB Gateway,只有最简单的GUI界面用于显示日志,在资源占用和延时性能方面更有优势。


更多vn.py精华内容,请关注公众号:

发布于 2019-07-30

文章被以下专栏收录