DataCenter行情录制插件
基于TWS API
DataCenter可以通过TWS Api与Trader Workstation
/IB Gateway
建立TCP连接,从而实现全球范围内合约行情录制。
在启动之前,您需要先完成下面前置工作:
- 确保您的Linux服务器上安装有完整的
Java runtime
- 确保您的Linux服务器支持图形界面
- 下载并安装盈透客户端,您可以选择
Trader Workstation
或者IB Gateway
如果您对安装Java runtime
以及图形界面存在疑问,可以在常见问题页面查看Java和VNC的安装使用方法。
Trader Workstation
是完整的交易客户端,您可以在之上完成大部分账户管理以及交易操作;而IB Gateway
是一个轻量级代理,占用的资源更少,两者对于ThunderTrader来说可以提供完全一样的功能。
在Producer
/Deploy producer
页面新增libibkr_tws_data_collector_plugin_imp.so
插件实例。
client_id
是TWS的API接入ID,可以填写0,不同的接入端id不重合即可。host
是您TWS进程所在机器IP地址,如果与DataCenter同一台机器,则一般填写172.17.0.1
(从Docker容器内部访问localhost的代理地址);如果您使用的是TWS Workstation
,则Port
一般填写4001,如果是IB Gateway
则Port
一般填写7496
。
点击桌面图标启动Trader Workstation
或者IB Gateway
。
这里以Trader Workstation
为例,打开软件后,可以看到主界面。
Classic版:
或Mosaic版:
在菜单中找到全局设置,在API
菜单中完成必要的设置:
如上图所示,确保
Enable ActiveX and Socket Clients
选项被选中,而Read-Only API
选项取消选中,端口可以使用默认的7496。
确保Allow connections from localhost only
选项取消选中,在白名单中需要添加DataCenter的地址,通常为172.17.0.2
。
完成上述设置后,使用搜索功能找到需要录制行情的合约。
并且在右键菜单中的Financial Instrument Description
,找到合约的Exchange
和Contract ID
。
此时我们需要拼接生成ThunderTrader体系中的UniqueID,拼接规则如下:
ibkr.tws.${type}.${exchange}.${contract id}
type
:订阅类型,如果是l1
则代表L1行情(Top of book, L1),如果是l2
则代表深度行情(Market depth, L2),当前版本仅支持l1
。exchange
:交易所名称,区分大小写contract id
:合约ID,纯数字
这里以COMEX交易所的伦敦铜期货为例,经过拼接后的UniqueID为ibkr.tws.l1.COMEX.651096940
。
将我们需要订阅的所有合约整理为配置文件,格式为:
{
"instruments": [
"${UniqueID 1}",
"${UniqueID 2}",
"${UniqueID 3}",
...
"${UniqueID n}"
]
}
例如:
{
"instruments": [
"ibkr.tws.l1.COMEX.651096940",
"ibkr.tws.l1.COMEX.419743906",
"ibkr.tws.l1.COMEX.662922793",
"ibkr.tws.l1.COMEX.668631619",
"ibkr.tws.l1.COMEX.447766922",
"ibkr.tws.l1.COMEX.447585333"
]
}
并且通过Producer
/View producers
更新到插件配置中。
您可以在ThunderDevel
中查看录制的行情数据。
基于Client portal Gateway
DataCenter内置了盈透证券Client Portal Gateway
以及行情录制插件,您需要打开82
端口映射即可使用该功能。
$ mkdir ${your tick storage path}
$ sudo docker run --privileged -d \
-p ${your web UI port}:80 \
-p ${your IBKR authentication port}:82 \
-v ${your tick storage path}:/thunder-ticks \
thundertrader/datacenter:1.81
其中${your IBKR authentication port}
是您期望执行IBKR账户验证的端口。例如:
$ mkdir /home/my_ticks
$ sudo docker run --privileged -d \
-p 8080:80 \
-p 8082:82 \
-v /home/my_ticks:/thunder-ticks \
thundertrader/datacenter:1.81
您需要在DataCenter所在的机器上进行IBKR账号登录,以上述8082端口为例,在浏览器中打开http://localhost:8082/
登录IBKR账号完成授权。
使用IBKR discovery
寻找目标合约。该功能在Utilities
/IBKR discovery
选项卡下,您可以通过下列4个API寻找合约对应的conid
,详细使用文档可参考IBKR Instrument discovery。
API | 功能 |
---|---|
/trsrv/stocks |
查询Stock合约 |
/trsrv/futures |
查询Future合约 |
/iserver/secdef/search |
全市场搜索 |
/iserver/secdef/info |
查看合约详情 |
根据您希望录制的合约列表,生成配置信息。格式如下:
{
"instruments": [
"instrument unique names..."
]
}
例如:
{
"instruments": [
"ibkr.FUT.526262864",
"ibkr.FUT.526262961",
"ibkr.FUT.597391683",
"ibkr.FUT.597391689",
"ibkr.FUT.597391703",
"ibkr.FUT.597391723"
]
}
添加收集实例。选择libibkr_data_collector_plugin_imp.so
插件,其中gateway_host
填写localhost
, gateway_port
填写5000
,并点击SUBMIT
提交。
在Producers列表中,写入刚才生成的配置信息,并点击UPDATE
提交。
通过监控查询行情信息收集是否符合预期。
DataCenter在/ibkr_gateway
路径下导出了GatewayAPI接口,您可以直接进行访问查询所需要的合约信息:
$ curl -X GET -k "http://localhost:8080/ibkr_gateway/v1/api/trsrv/futures?symbols=ZS"|python3 -m json.tool|grep "conid"|awk -F' ' '{print "\"ibkr.FUT."$2}'|sed 's/,/",/g'
"ibkr.FUT.526262864",
"ibkr.FUT.526262961",
"ibkr.FUT.597391683",
"ibkr.FUT.597391689",
"ibkr.FUT.597391703",
"ibkr.FUT.597391723",
您可以在DevelStudio中查看录制的行情数据。
Engine行情&交易插件
敬请期待。