最近IBKR在HK和JP地区强推PassKey验证密钥,要求8月31日前需要配置通行密钥才能进行交易。

image-20260826144057896
image-20260826144057896

但之前量化系统运行于Linux服务器的docker中,通过VNC输入验证码或是手机过2FA校验即可,而docker环境不断提示插入USB密钥,因此需要一个比较新的方法让PassKey校验穿透到服务器环境完成验证。

RDP登录

先手动配置RDP远程桌面,然后启动时需要勾选如下三个勾选框。

image-20260827145701986
image-20260827145701986

下载Stable版本IBKR Gateway

不建议下载和安装latest版本,总会有一些奇怪的bug。强烈建议下载并安装stable版本

穿透验证密钥

首先在本地登入ibkr网页,然后添加验证密钥到Windows本地。

配置后对于后续登入ibkr网页都不用掏手机了,某种意义上的便利了一些。

image-20260901221357752
image-20260901221357752

然后RDP即可拉起本机认证,输入密码即可穿透认证远程服务器的ib gateway实例。

image-20260826234956566
image-20260826234956566

脚本

在QuantAda的开源代码库中提供了IBC的启动脚本,只需要安装ib gateway stable版本并与IBC放置于同一个文件夹即可。

StartGateways.bat

image-20260901220321267
image-20260901220321267

强烈建议将该bat创建桌面快捷方式,这样双击就能运行了。

IBC在2026年9月1日被设置成了只读,作者已退休。如果后续用不了IBC的话,估计我会把资产都转移到富途等其他券商,目前开源框架已支持接入富途牛牛。

配置

  1. config.sample.ini 复制到 %USERPROFILE%\Documents\IBC\config-<实例名>.ini,例如 config-live.iniconfig-paper.ini 或任意业务名称。
    若多套新旧 Gateway 版本同时存在,可把配置放进数字版本子目录,例如 %USERPROFILE%\Documents\IBC\1045\config-live.ini;数字目录名会固定该实例使用的 Gateway 版本。
  2. 在受保护的副本中填写 IbLoginIdIbPassword
  3. 每个配置文件对应独立的设置目录和日志目录,目录名来自 config- 后的实例名。
  4. OverrideTwsApiPort 默认留空;如需指定端口,在实例副本中填写实际 Gateway API 端口。
  5. 在 Gateway API 设置中把 QuantAda 主机加入 TrustedIPs,并按实际端口限制防火墙来源。模板将未知来源连接设为拒绝。

批量启动

以下两种目录结构均可:

1
2
3
4
5
方案一:把 StartGateways.bat 放入 IBCWin-3.24.2 根目录

方案二:保持两个同级目录
Desktop\IBCWin-3.24.2
Desktop\ibc_windows\StartGateways.bat

方案二中,脚本会自动寻找同级唯一且包含 scripts\DisplayBannerAndLaunch.batIBCWin-* 目录。如果同级存在多个 IBC 版本,必须显式设置 IBC_PATH,避免自动选错 IBC 主程序。

然后运行:

1
StartGateways.bat

脚本会递归遍历 %USERPROFILE%\Documents\IBC\config-*.ini,为每个文件创建独立设置/日志目录并并行启动 IBC Gateway。直接放在配置根目录的文件使用 IBC_TWS_MAJOR_VRSN 或自动探测到的数值最高有效版本;位于数字目录下的文件优先使用该目录版本,因此新旧版本可以共存。版本探测同时兼容 Jts\ibgateway\<版本>\jars 和旧式 Jts\<版本>\jars 布局。交易模式由每个 INI 的 TradingMode 决定,批处理不会强制改成 live。IBC 安装根目录、Gateway 安装根目录、默认版本和配置目录分别可用 IBC_PATHIBC_TWS_PATHIBC_TWS_MAJOR_VRSNIBC_CONFIG_DIR 覆盖。

先用 StartGateways.bat /DRYRUN 检查发现的配置和路径。正常启动时脚本会根据 Java 命令行中的配置文件路径跳过已运行实例,并拒绝本次扫描中重复的实例键;任务计划程序仍应选择“如果任务已在运行则不启动新实例”。

额外配置

尽管

image-20260826235301554
image-20260826235301554

image-20260826235519950

开放端口

在windows服务器上,右键开始菜单,选择“终端管理员”,执行如下命令即可针对某IP开放4001端口。

1
2
3
4
5
6
7
8
9
10
$QuantAdaSourceIp = "xx.xx.xx.xx"
$RuleName = "QuantAda-IBKR-API-4001"
New-NetFirewallRule `
>> -DisplayName $RuleName ` :
>> -Direction Inbound `
>> -Action Allow `
>> -Protocol TCP `
>> -LocalPort 4001 `
>> -RemoteAddress $QuantAdaSourceIp `
>> -Profile Any

看到API客户端为已连接时,即配置完毕。

image-20260827002045406
image-20260827002045406