盈透证券API在使用100个交易品种时落后于TWS

interactive brokers api lagging behind tws when using 100 symbols

本文关键字:交易品 TWS 100个 API      更新时间:2023-10-16

直到我开始在我的尖叫声上放置更多符号之前,我一直没有遇到这个问题。 我不认为这是一个处理问题,我的 cpu 一直很好,无论如何我都没有做任何超级花哨的事情(只是将数据存储到对象并经常写入 txt 文件)。

从使用 API 的第一天起,我注意到我必须在 while 循环中放置一个 sleep(1),以不断检查消息,如下所示:

PosixTestClient client;
client.connect( host, port, clientId);  
while( client.isConnected()) {
sleep(1);
client.processMessages();
}

如果我那里没有睡眠(1),它就会崩溃。 所以我想我的第一个问题是:这正常吗? 还是有什么问题?

我的下一个问题是...关于为什么与TWS数据相比,API数据可能存在滞后的任何提示? 我知道存在滞后,因为当数据进入 API 时,我会将其存储为字符串,然后每分钟将数据写入文本文件。 然后我返回我的文本文件并将其与 tws 中的图表进行比较......我注意到大约有 2 分钟的滞后! 我还注意到,在交易日的前半小时之后,当事情非常活跃时,它似乎变得更好(滞后消失了)。

那么......有什么建议吗?

你订阅了补充包吗? TWS API和API一样有100个引号的限制。您可以以 100 美元的价格购买额外的 30 个报价。

报价助推器 通过以每包 30.00 美元的价格购买每月报价补充包,增加同时报价窗口的限额。

每个补充包同时提供 100 个 I 级报价。补充包报价是您每月报价分配的附加内容,来自所有来源,包括佣金。 补充包报价可用于桌面系统和 API。 订阅后,报价立即可用,并将在您下次登录系统时显示。 取消的补充包订阅的数据在当前计费周期结束时仍然可用。 每个账户最多只能获得 10 个报价补充包。

所以... 在非常有帮助和友好的雅虎TWS API用户组的帮助下: https://groups.io/g/twsapi/messages

我能够找到答案,很简单:

减少睡眠时间! 在客户端之间没有睡眠的情况下运行它.proccessMessages() 会导致我的 CPU 运行得相当高,但我真正放松 CPU 所需要的只是睡一毫秒......不是整整一秒钟。 睡眠整整一秒钟会导致数据滞后(我怀疑 IB 会查询数据,然后在您调用 proccessMessages() 时将其"发送"给您,因此您需要足够频繁地调用它以保持领先于您收到的即时报价数据!

对于任何想要更详细地阅读它的人来说,这里是线程:https://groups.io/g/twsapi/topic/4702705#37186

手指交叉,它继续工作,但今天我得到了 100 个高交易量股票代码的良好数据,没有滞后:)