云子量化【盈透证券TWS API 官方文档翻译系列】2、第三方软件中使用TWS API的相关问题以及TWS API在Excel中的使用

为了使用IB盈透证券,第三方软件生产商会把TWS API整合到他们自己的平台中。正是由于TWS API的存在,一些知名的平台,比如Ninja Trader 或者 Multicharts可以和TWS进行交互,用于获取市场数据、下单和管理账户、组合的信息。

需要额外注意的是,很多的第三方API平台并不是对于所有的IBKR账户结构都兼容的。在开一个特殊的账户类型或者转化一个账户类型之前,先和软件生产商确认下。比如,很多的第三方的平台,如 NinjaTrader and TradeNavigator,不兼容IB连接的账户结构,所以,在使用第三方软件连接你的IB账户之前,先和软件生产商进行确认。

一个实现了TWS API接口的第三方软件的列表可以在 投资者的市场上找到。就像在上面表明的一样,在列表中的平台,并不代表是IB推荐的。如果你对其他的平台感兴趣,但是没有在这个列表中,你可以直接联系平台的生厂商获取更多的信息。

经常被问到的一些问题

下面是一些经常被问到的问题。所有的问题都涉及到TWS的典型的应用。注意,有些软件生厂商可能提供了额外的设置以便简化,如果下面没有涉及到你使用过程中面临的问题,可以和你的软件生厂商直接联系。

如何连接第三方交易平台到IB的TWS上

连接其他的第三方平台到TWS需要你先允许API连接,和原先的TWS设置一样。第三方的平台,应该至少提供配置host和port的地方,在很多情况下,第三方平台应该会和TWS是用同一台电脑,因此host ip 应该是127.0.0.1,port应该是7496或者7497,和TWS设定的一样。client id 可以填写任意大于等于0的整数。如下图所示:

sample_app_connect.png

当使用第三方软件连接TWS的时候,从哪里可以得到帮助

对于非IBKR开发的软件,IB不提供任何支持或者建议。大多数情况下,通过逆向工程去了解第三方软件如何使用我们的API的是不太现实的,所以,针对你的咨询,我们的支持同事提供的建议是很有限的。所以,建议你第一时间咨询第三方软件的支持团队。

我的软件开发商在他们那没有发现任何问题,并让我直接联系IB

当一个操作并没有如期实现的时候,有可能第三方平台和IB都没有问题,这可能是商业逻辑的问题。TWS的典型行为是或者执行一个要求的操作,或者返回一个能给你指出正确方向的解释性的信息。第三方软件公司需要在他们自己的用户界面上清楚的显示这些TWS的信息。没有一个相关的错误的信息提醒,我们的支持团队并不能给你任何建议。

如果认为错误是IB方面的,需要提供清楚明确的技术信息,包括错误的证据或者提供API信息输出文件。收集所有需要的信息不是一个容易的过程,也许需要非常熟悉我们的API。为了避免陷入两方的支持团队之间,请要求你的第三方软件的生产商直接联系我们,并提供尽可能多的信息。

TWS产生warning信息阻塞了我的订单的自动提交

TWS存在预防性的设置,用于检验订单的安全性。当存在任何的违反预防性设置的时候,TWS通常弹出警告信息或者通过API返回去错误信息。对于使用第三方软件下单的用户,如果没有是用IB的该品种的数据的话,TWS就是产生一个默认的警告:“你正在尝试提交一个订单,但是并没有用该品种的市场数据”.这个待检验的订单并不会自动提交,除非用户在TWS的软件中点击这个订单的提交按钮。

TWS的预防性设置可以通过TWS中的设置进行忽略。在File/Edit → Global Configuration → API → Precautions, and check the box中选择”Bypass Order Precautions for API Orders”。当进行过这个设置之后,第三方软件的API订单将不会被检查。

在第三方软件中我不能看到任何的数据

正如在我们的 Streaming Market Data 的页面中解释的那样,为了能够从TWS拉取市场信息,你需要获取你感兴趣的产品的实时的市场数据。

我已经订阅了实时的数据,但是在模拟交易中,我的用户名仍然不能够获取数据

确保你已经设置了 订阅数据共享

我获得一个信息说:“历史数据请求导致违反”

请参考我们历史数据限制 的页面。总体上提出了不要在太短的时间内请求太多的数据就不会报这个错误了。如果需要的市场信息太多,IB不够使用的话,可以找专门的数据提供商。

当尝试加载一个图表的时候,在第三方软件上显示”最后一天交易的图表是没有数据的“

当请求最后一天交易的市场数据的时候会返回这个信息。这个是我们软件的问题,不是第三方软件的问题,在我们TWS上请求同样的图表,也会返回一样的结果。可以联系我们的支持团队的市场信息部门寻求更多的信息。

no_eod_data.png

我获得一个”HMDS请求没有返回数据“的信息

有的时候在特定的请求日期之前的数据是不可得到的,原因如下:如果一个产品从2016年1月1日才开始有数据,但是你的第三方程序请求的日期在这之前开始,就会报这个错误。如果想要避免这个错误信息,就需要调整你的第三方软件的请求日期的参数。

我不能在第三方软件上画出CFD品种的图表,但是在TWS上显示是正常的。

除了指数类的CFD产品之外,CFD产品本身是没有市场数据的。TWS显示的是CFD的标的合约的数据,当你从TWS获取非指数的CFD的数据的时候,你将得到一个错误信息,让你获取它的标的合约的数据来替代。一些第三方的软件用户界面只允许你通过他们的图表下单,因为这些CFD的产品没有数据,并且也不能要求这些第三方的软件使用TWS类似的转换方法,也许你会发现,在这些第三方软件上在这些品种中是不能够下单的

我怎么使用第三方软件连接我的模拟交易账户

通过TWS API 连接到TWS是不能意识到你登录到TWS的是哪个用户名的。从这个角度看API的话,在实盘交易和模拟交易之间是不存在差别的。既然第三方的软件仅仅通过特定的地址和端口连接运行着的TWS,连接到模拟账户,仅仅需要你打开TWS,登录模拟账户中去,确保TWS的API设置是允许API连接的,然后从第三方软件连接到TWS就可以了。

我可以同时连接到我的实盘账户和模拟账户吗

对于我们来说,这是可以的。你可以同时打开两个TWS,登录不同的用户名和密码。确保每个TWS同时监听的是不同的端口。注意,也许你需要登录几个你的第三方软件,或者有一种方法告诉区别正在使用模拟账户和实盘账户。

第三方软件上显示的图表和TWS上显示的图表不一致

理论上来说是不可能的,如果第三方软件也是从TWS获取的历史数据的话。有些第三方软件绕开我们的历史数据限制,通过合并历史数据和实时数据,由于我们的实时市场数据并不是tick级别的,通过实时数据合成的bar很难和直接从我们历史数据获取的bar一样。

另外,你也可能是不小心的在比较不同的图表。比如,一个股票在NYSE交易所的图表绝不会和在ARCA交易所的图表一样。也许不经意间你在使用一边的数据查看交易,而实际上是中间价或者bid ask的另一边的数据;另一个通常的错误涉及到的是在TWS和第三方软件上,用不同的交易周期去对比。

可不可以从API上免费获取数据

获取实时数据或者历史数据需要订阅level 1的市场数据。订阅另外的外汇、指数CFD、债券需要一个每月的费用。具体可以参考:http://interactivebrokers.github.io/tws-api/market_data.html

可以把TWS API 用在实验账户上吗

可以。把TWS API 连接到实验账户中是可能的,但是在实验账户中,不能够通过TWS API 获取实时市场数据和大部分品种的历史数据。

什么类型的API是可以使用的

TWS API ,拥有全部的功能,并且可以被所有的客户在交易中使用。

WT Web API,针对白名单的咨询师和引进的交易商使用,它提供实时数据和历史数据。

REST WebAPI,给第三方的公司和机构使用,它可以交易股票和外汇,可以获取市场数据快照,获取账户和机构的信息。

更多说明,可以参考: https://www.interactivebrokers.com/en/index.php?f=1325

注:感觉散户真可怜。

连接到TWS API 和 FIX/CTCI连接有什么区别

TWS API是连接TWS 或者 IB Gateway的接口。它提供非常多的功能,比如能够获取市场数据、下单、接收账户信息。TWS API 要求用户首先登录TWS 或者 IB Gateway,这两个都是独立的桌面应用程序。TWS API有一个每秒钟50次指令的限制。

FIX/CTCI连接可以配置连接IB Gateway或者直接连接到IB。不像TWS API, FIX/CTCI只能用于下单,不能用于获取市场信息。另外,FIX/CTCI具有每月最低佣金的限制。

在API已经连接了之后,我还可以使用另外的交易程序吗?比如IBKR移动版,WebTrader,TWS

为了一个账户能够同时连接到不同的交易平台上,需要在账户里面设置额外的用户名,使用不同的用户名登录不同的平台。额外的用户名可以在账户管理中免费创建。市场数据的订阅仅仅应用于单个用户名,每个用户名是单独收费的。

TWS API 可以用于其他的IBKR账户吗

大多数的第三方的API应用不支持所有的IBKR的账户结构,所以强烈建议在开立或者转换一个特定的IB账户类型之前,先咨询第三方软件生产商。

为什么API提交的订单没有在TWS中自动提交,而是有一个“T”字按钮紧邻着它?

通常有三种原因可能出现这种情况,第一种就是这个订单有错误,导致提交失败;第二种就是TWS有预防性的设置,如果触发了,就可能导致订单不会自动提交。如果想要关闭这种功能,可以在API的 Precautions中设置Bypass Order Precautions for API Orders ;第三种原因就是可能在发送订单的时候,参数transmit设置成了False,默认情况下是True.

IB是否允许自动登录TWS或者IB Gateway

很不幸的是,出于安全的考虑,这两个软件都不允许自动登录,都需要在界面中输入账户密码来登录。(最近的版本中,好像在每天重新重启的时候可以自动登录)

是否可以避免TWS的每日的自动退出

现在的TWS和IB Gateway可以实现自动的每日重启功能,不需要用户的额外验证。在周六晚上,服务器有一个重启,这个需要用户重新进行验证登录。如果在用户设置中选择了自动重启选项,那么周六晚上的服务器的重启将不会影响周日的继续使用了,只要在这个期间,这个用户名没有登录到Client Portal, TWS, 或者 IBKR mobile

是否推荐其他的第三方产品或者编程咨询

IBKR不推荐任何第三方的结构,但是维护了一个第三方的列表在投资者市场中。可以参考下面的链接:https://gdcdyn.interactivebrokers.com/Universal/servlet/MarketPlace.MarketPlaceServlet

使用API的时候连接TWS和IB Gateway是否存在区别

从API使用的角度来看,这两个是完全一样的。TWS额外提供给用户直接查看持仓,交易和市场数据,并提供一系列的工具用于交易、研究和分析。IB Gateway有一个简单的用户界面,仅仅用于修改设置。使用IB Gateway的优势在于它减少了40%的资源消耗,并且可以运行更长的时间,不需要自动关闭。可以参考初始化设置的文章。

可以运行 TWS 或者 IB Gateway在无头的服务器上吗

TWS 和 IB Gateway设置的都需要一个用户界面来输入账号密码,因为这个原因,无头或者不支持用户界面操作的服务器是不支持的。

我需要升级TWS API的吗

TWS提供很好的向后兼容,当更新TWS的新版本的时候,没有必要更新API。当新的API提供了新的功能的时候,才是更新API的时机。

在IB Gateway中数据指标是红色的,是哪里出错了吗

当和市场数据形成连接的时候,市场数据的指标会变成红色,直到数据请求完成了,这是正常的。如果长期不活跃,这些数据也有可能变成红色。(感觉翻译不太准,英文原文:It is normal for the market data farm connection indicator to stay red until a market data request is made from the API application. The farms can also turn red after extended inactivity.)

如何给API支持团队报告一个错误

当问题出现的时候,诊断特定的问题通常需要API的输出日志功能在TWS或者IB Gateway是允许的。在TWS中,需要在Global Configuration -> API -> Settings and checking the box 中,选择”Create API Message Log”, 然后 设置日志输出级别到 “Detail”。在IB Gateway,需要在Configure -> Settings -> API -> Settings中进行设置。如果日志输出是被允许的之后,如果问题出现了,他们可以通过 Ctrl-Alt-Q被上传,然后点击提交。请让API支持团队知道,日志已经上传了。

账户的历史持仓或者账户的历史价值是否可以通过API获取

因为API不能提供TWS中不能提供的信息,所以历史账户信息是不能获取的。它们可以在账户管理里面获取。

IBKR是否提供为自定义算法提供主机/托管服务

很不幸的是没有。托管是不提供的。

在MacOS中是否有Excel API

Excel API需要一个windows系统的excel。所以,在MacOS中,是没有的。

美国盈透证券优惠信息(新、老盈透用户均适用):

盈透证券优惠开户链接:https://www.e-investingguide.com/interactivebrokers

无论你是已经在盈透证券入金交易的老客户或者是正准备在盈透证券开户的新客户,如果你需要免除盈透证券每月10美元账户维护费以及降低盈透证券账户交易佣金水平(具体能优惠和降低多少,取决于你的交易量,已经入金交易的盈透用户也能挂靠降低佣金),都可以联系我,在IB盈透证券出入金及TWS软件使用、API接口使用、开立机构类账户(离岸对冲基金、家族办公室、自营交易集团)等方面遇到问题的也可以联系我询问。 可以发Email邮件联系我,我的邮箱地址是 giftlord@gmail.com

我的微信号:47268101 或者打开微信,直接扫描下方二维码添加我为好友即可咨询:

可以使用的Excel API

在windows系统中利用不同的技术手段,可以开发几个API供Excel使用。

重要提醒:示例表格应用程序在API下载的时候可以一块下载,他们只是给第三方的开发者简单展示这些API功能。它们没有强大的错误处理功能,也不打算用作生产级交易工具。

提供 Excel API 技术介绍的录制网络研讨会可从 IB 网站获得:录制的 Excel API 网络研讨会

Excel API的对比

RTDServerDDEActiveX
完整的 API 功能是的,在 API v975 中***是的
易于使用的公式是的一些功能
不使用 VBA是的一些功能
旨在不压倒 Excel是的
开源是的是的
市场数据刷新率250 毫秒250 毫秒1 秒
与 64 位 Excel 兼容的示例是*是的是**

*从 v973.07
开始提供 **API ActiveX 安装程序与从 v973.05
开始的 32 位和 64 位应用程序兼容 ***从 API v975 开始,有一个新的 DDE 套接字桥 API 通过套接字连接连接到 TWS

Microsoft Excel API 的局限性

根据设计,Microsoft Excel 将用户界面置于与其他应用程序的数据连接之上。因此,Excel 仅在处于”就绪”状态时才接收更新,并且可能会忽略发送的数据,例如,当向用户显示模式对话框、正在编辑单元格或 Excel 忙于执行其他操作时,这个时候可能会忽略数据的更新。引入了新的 Excel 实时数据服务器 (RTD) API 来帮助解决其中一些限制,但它们是 Excel 作为交易应用程序所固有的,而不是特定于 API 技术。

RTD Server for Excel

介绍

TWS RTD Server API是一个动态链接库,允许用户使用Microsoft Excel®通过API从TWS请求实时市场数据。TWS RTD 服务器 API 直接使用 C# API 客户端源,该源通过socket连接到 TWS。它允许通过按照特定语法在Excel单元格中输入公式,在Excel中显示流式实时(或15分钟延迟)市场数据。

注意:在当前阶段,TWS RTD服务器API仅支持顶级市场数据(Level I 数据)。不支持交易功能或其他数据类型。延迟数据和实时数据都通过TWS RTD服务器API支持。需要市场数据订阅才能请求流式实时市场数据。

您将需要什么

– 视窗操作系统

由于 TWS RTD Server API 技术直接引用 C# API 客户端源函数,因此仅在Windows 环境中受支持。

– API 版本 9.73.03+

您需要下载IB API Windows版本9.73.03或更高版本并安装在您的计算机上。安装 API 后,可以通过选中C:\TWS API\API_VersionNum.txt(默认情况下)来验证 API 版本。

– TWS(或IB网关)Build 963+

默认情况下,通过TWS RTD服务器发送的市场数据请求将自动请求所有可能的通用价格变动类型。请求的几种通用价格变动类型仅在 TWS 963 或更高版本中受支持。将任何带有默认通用价格变动列表的 RTD 市场数据请求发送到旧版本的 TWS 将触发”TwsRtdServer 错误”,指示发送了不正确的通用价格变动列表。确保TWS构建的963+是从IB网站下载的,并在后台继续运行,以便TWS RTD服务器API正常运行。

– 在TWS(或IB网关)中启用socket客户端

由于TWS RTD服务器API直接引用C#API源,因此RTD市场数据请求将通过socket发送。请确保在TWS中启用ActiveX和Socket Client设置。

另请注意您在TWS API设置中配置的socket端口。对于实时会话,TWS 将监听默认socket端口为7496,对于模拟会话,则为7497。TWS RTD Server 默认连接到端口7496连接参数部分将进一步讨论,您可以通过指定预定义的连接参数或使用rtd_complex_syntax字符串”port=”来自定义要连接的端口号。您可以根据需要使用任何有效的端口进行连接,并且只需确保尝试通过 API 连接到的端口与 TWS 正在监听的端口相同。

– 微软Excel®

安装 API 后,对于从 973.03 到 973.06 的 API 版本,在计算机上注册的预编译 RTD 库文件(位于C:\TWS API\source\csharpclient\TwsRtdServer\bin\Release\TwsRtdServer.dll)将默认为 32 位。如果您使用的是 64 位 Microsoft Excel,则需要将 RTD 服务器 dll 文件重新编译为 64 位,并通过使用 Visual Studio 重新生成 RTD 源解决方案来注册库。有关详细信息,请参阅TWS Excel API,其中包含实时数据服务器录制的网络研讨会。从 API v973.07 开始,RTD Server 的 API 安装程序应与 32 位和 64 位 Excel 兼容( 预期版本号)。

TWS RTD 服务器公式语法

客户可以通过在 Excel 电子表格单元格中输入以下公式和相应的参数来请求市场数据:

=RTD(**ProgID**, **Server**, **String1**, **String2**, ...)

参数

  • ProgID = “Tws.TwsRtdServerCtrl”
  • 服务器= “” (空字符串)
  • 字符串 1字符串 2, …是表示Ticker、 Topic、 Connection Parameters或其他复杂语法字符串的字符串列表。

注意:TWS RTD 服务器 API 公式不区分大小写。

有三种方法可以组成 RTD 公式:

语法示例

提供了一个资源丰富的语法示例页,用于演示使用不同语法按安全类型分类的 RTD 公式。

除了阅读书面文档外,您还可以观看TWS Excel API,其中包括实时数据服务器录制的网络研讨会,以获得更具互动性的教程视频。

输出信息速率限制

  • 请务必记住,50 条消息/秒的 API 限制适用于 RTD 服务器,其方式与其他基于socket的 API 技术相同。因此,Excel 电子表格每秒可以向 TWS 发送不超过 50 条消息。每个订阅或取消请求计为 1 条消息(不包括相反方向的消息)。因此,电子表格可以有数百个流式处理行情,但订阅必须随着时间的推移而分散,以便每秒不超过 50 个新订阅,否则电子表格可能会断开连接。

更改数据刷新率

常见错误疑难解答

简单语法

简单语法RTD公式的基本组件是ProgID, 服务器**,股票代码主题连接参数 (可选):

=RTD(ProgID, Server, Ticker, Topic, ConnectionParams...)

参数

  • ProgID = “Tws.TwsRtdServerCtrl”
  • 服务器= “” (空字符串)
股票

除了ProgIDServer之外,第一个字符串应该代表简单语法中的**Ticker。要正确定义合约Ticker,您需要先找到正确的合约属性。查找合同属性的最简单方法是直接查看TWS中的”合同描述”页面。

Ticker的语法应严格遵循以下顺序:

外汇合约:

“货币1.货币2/现金”

例如欧元。美元外汇可以定义为”欧元.美元/现金”

其他合同类型:

“品种名@交易所/PRIMEXCH/SECTYPE/到期/右派/行权价/货币”

例如,E-mini期货可定义为”ES@GLOBEX//FUT/201712///USD”

笔记:

*并非所有协定属性都需要指定。您可以将该字段留空,以使该字段未指定。按顺序,如果只需要在Ticker字符串的开头部分指定多个协定属性,则也可以按条目省略字符串的其余部分。例如,“IBM@SMART”不是指定”IBM@SMART/”,而足以正确定义合同。Ticker 字符串中有几个默认协定属性。如果未指定它们,它们将采用默认值,如下所示:

  • EXCHANGE = “SMART”
  • SECTYPE = “STK”
  • CURRENCY = “USD”

例如Ticker = “IBM” 与 “IBM@SMART//STK////USD” 相同。

查看更多语法示例

主题

第二个(或其他字符串)可以是Topic主题字符串定义您希望在公式单元格中接收的数据类型。主题可以在Ticker字符串中指定,也可以作为单独的字符串指定。

例如,下面的两个公式都从 ISLAND 交换请求 IBM 的出价大小,其中第一个公式在Ticker中包含Topic,第二个公式将Topic指定为单独的字符串:

=RTD("Tws.TwsRtdServerCtrl",,"IBM@ISLAND BidSize")
=RTD("Tws.TwsRtdServerCtrl",,"IBM@ISLAND", "BidSize")

如果未定义Topic字符串,则主题将默认为*“Last”。*

例如,以下公式将从 Island exchange 请求 IBM 的最后价格:

=RTD("Tws.TwsRtdServerCtrl",,"IBM@ISLAND")

基本分笔报价类型

下表显示了可以为主题指定的可用基本价格变动类型的完整列表:

Tick NameTopic StringDescription
Bid Size“BidSize”Number of contracts (or lots) offered at the bid price.
Bid Price“Bid”Highest bid price for the contract.
Ask Price“Ask”Lowest offer price for the contract.
Ask Size“AskSize”Number of contracts (or lots) offered at the ask price.
Last Price“Last”Last price at which the contract traded.
Last Size“LastSize”Number of contracts or lots traded at the last price.
High“High”High price for the day.
Low“Low”Low price for the day.
Volume“Volume”Trading volume for the day for the selected contract (Volume for US Stocks are quoted in lots. The actual number of shares in volume can be calculated by multiplying 100).
Close Price“Close”The last available closing price for the previous day. For US Equities, we use corporate action processing to get the closing price, so the close price is adjusted to reflect forward and reverse splits and cash and stock dividends.
Open Price“Open”Today’s opening price. The official opening price requires a market data subscription to the native exchange of a contract.
Last Exchange“LastExch”The exchange where the Last Price is provided from.
Bid Exchange“BidExch”The exchange where the Bid Price is provided from.
Ask Exchange“AskExch”The exchange where the Ask Price is provided from.
Last Timestamp“LastTime”Time of the last trade (in UNIX time).
Halted“Halted”Indicates if a contract is halted. See Halted
Bid Implied Volatility“BidImpliedVol”Implied volatility calculated from option bid prices.
Bid Delta“BidDelta”Delta calculated from the option bid prices.
Bid Option Price“BidOptPrice”Current bid price for the option contract.
Bid PV Dividend“BidPvDividend”The present value of dividends expected on the option’s underlying.
Bid Gamma“BidGamma”The option gamma value calculated from the option bid prices.
Bid Vega“BidVega”The option vega value calculated from the option bid prices.
Bid Theta“BidTheta”The option theta value calculated from the option bid prices.
Bid Price of Underlying“BidUndPrice”The current bid price of the option underlying.
Ask Implied Volatility“AskImpliedVol”Implied volatility calculated from option ask prices.
Ask Delta“AskDelta”Delta calculated from the option ask prices.
Ask Option Price“AskOptPrice”Current ask price for the option contract.
Ask PV Dividend“AskPvDividend”The present value of dividends expected on the option’s underlying.
Ask Gamma“AskGamma”The option gamma value calculated from the option ask prices.
Ask Vega“AskVega”The option vega value calculated from the option ask prices.
Ask Theta“AskTheta”The option theta value calculated from the option ask prices.
Ask Price of Underlying“AskUndPrice”The current ask price of the option underlying.
Last Implied Volatility“LastImpliedVol”Implied volatility calculated from option last prices.
Last Delta“LastDelta”Delta calculated from the option last prices.
Last Option Price“LastOptPrice”Current last price for the option contract.
Last PV Dividend“LastPvDividend”The present value of dividends expected on the option’s underlying.
Last Gamma“LastGamma”The option gamma value calculated from the option last prices.
Last Vega“LastVega”The option vega value calculated from the option last prices.
Last Theta“LastTheta”The option theta value calculated from the option last prices.
Last Price of Underlying“LastUndPrice”The current last price of the option underlying.
Model Implied Volatility“ModelImpliedVol”Implied volatility calculated from option model prices.
Model Delta“ModelDelta”Delta calculated from the option model prices.
Model Option Price“ModelOptPrice”Current model price for the option contract.
Model PV Dividend“ModelPvDividend”The present value of dividends expected on the option’s underlying.
Model Gamma“ModelGamma”The option gamma value calculated from the option model prices.
Model Vega“ModelVega”The option vega value calculated from the option model prices.
Model Theta“ModelTheta”The option theta value calculated from the option model prices.
Model Price of Underlying“ModelUndPrice”The current model price of the option underlying.

注意:如果您没有相应的市场数据订阅,如果您请求上述实时价格变动类型,将显示”0″。如果您有兴趣,请参阅延迟逐笔报价类型需要 API 版本 9.73.05 或更高版本才能请求期权希腊语数据。

通用分时类型

TWS RTD 服务器 API 中还支持选择通用数据类型。要请求任何通用数据类型,您只需在 RTD 公式中将通用数据类型的名称指定为Topic字符串即可。

例如,以下公式将请求IBM@SMART的 52 周最高价:

=RTD("Tws.TwsRtdServerCtrl",,"IBM@SMART", "Week52Hi")

有关当前支持的通用逐笔报价类型的完整列表,请参见下表:

Generic Tick Type NameTopic StringDescriptionGeneric Tick Required
Auction Volume“AuctionVolume”The number of shares that would trade if no new orders were received and the auction were held now.225
Auction Imbalance“AuctionImbalance”The number of unmatched shares for the next auction; returns how many more shares are on one side of the auction than the other.225
Auction Price“AuctionPrice”The price at which the auction would occur if no new orders were received and the auction were held now. The indicative price for the auction.225
Regulatory Imbalance“RegulatoryImbalance”The imbalance that is used to determine which at-the-open or at-the-close orders can be entered following the publishing of the regulatory imbalance.225
PL Price“PlPrice”The PL Price, also known as the Mark Price, is the current theoretical calculated value of an instrument. Since it is a calculated value, it will typically have many digits of precision.232
Creditmanager Mark Price“CreditmanMarkPrice”Not currently available.221
Creditmanager Slow Mark Price“CreditmanSlowMarkPrice”Slow Mark Price update used in system calculations (same as Mark Price update in TWS Account Window -> Portfolio).619
Call Option Volume“CallOptionVolume”Call option volume for the trading day.100
Put Option Volume“PutOptionVolume”Put option volume for the trading day.100
Call Option Open Interest“CallOptionOpenInterest”Call option open interest.101
Put Option Open Interest“PutOptionOpenInterest”Put option open interest.101
Option Historical Volatility“OptionHistoricalVol”The 30-day historical volatility (currently for stocks).104
RT Historical Volatility“RTHistoricalVol”30-day real time historical volatility (Futures only).411
Option Implied Volatility“OptionImpliedVol”A prediction of how volatile an underlying will be in the future. The IB 30-day volatility is the at-market volatility estimated for a maturity thirty calendar days forward of the current trading day, and is based on option prices from two consecutive expiration months.106
Index Future Premium“IndexFuturePremium”The number of points that the index is over the cash index (Indeses only).162
Shortable“Shortable”Describes the level of difficulty with which the contract can be sold short. See Shortable .236
Fundamental Ratios“Fundamentals”Provides the available Reuter’s Fundamental Ratios. See fundamental_ratios_tags .258
Trade Count“TradeCount”Trade count for the day.293
Trade Rate“TradeRate”Trade count per minute.294
Volume Rate“VolumeRate”Volume per minute.295
Last RTH Trade“LastRthTrade”Last Regular Trading Hours traded price.318
IB Dividends“IBDividends”Contract’s dividends. See IB Dividends .456
Bond Factor Multipler“BondMultiplier”Not currenctly available.460
Average Volume“AvgVolume”The average daily trading volume over 90 days (multiply this value times 100).165
High 13 Weeks“Week13Hi”Highest price for the last 13 weeks.165
Low 13 Weeks“Week13Lo”Lowest price for the last 13 weeks.165
High 26 Weeks“Week26Hi”Highest price for the last 26 weeks.165
Low 26 Weeks“Week26Lo”Lowest price for the last 26 weeks.165
High 52 Weeks“Week52Hi”Highest price for the last 52 weeks.165
Low 52 Weeks“Week52Lo”Lowest price for the last 52 weeks.165
Short-Term Volume 3 Minutes“ShortTermVolume3Min”The past three minutes volume. Interpolation may be applied.595
Short-Term Volume 5 Minutes“ShortTermVolume5Min”The past five minutes volume. Interpolation may be applied.595
Short-Term Volume 10 Minutes“ShortTermVolume10Min”The past ten minutes volume. Interpolation may be applied.595
Futures Open Interest“FuturesOpenInterest”Total number of outstanding futures contracts (TWS Build 965+ is required)588
Average Option Volume“AvgOptVolume”Average volume of the corresponding option contracts (TWS Build 970+ is required)105

默认情况下,将自动请求所有通用价格变动类型。用户只需直接指定主题作为通用刻度类型的名称,即可将数据填充到 Excel。

为了消耗更少的数据资源并使您的市场数据请求更有效率,您可以通过定义字符串*“genticks=id1,id2,…”*直接指定要请求的通用逐笔报价类型

例如,要请求 52 周最高价,只需要通用分时类型= 165。以下公式将仅请求通用分时类型= 165:

=RTD("Tws.TwsRtdServerCtrl",,"IBM@SMART", "Week52Hi", "genticks=165")
延迟逐笔报价类型

当实时流市场数据因缺少市场数据订阅而不可用时,延迟的数据将自动中继回来。要通过 RTD 请求延迟数据,您需要为主题指定延迟逐笔报价类型。下表显示了可用延迟逐笔报价类型的完整列表:

Tick NameTopic StringDescription
Delayed Bid Size“DelayedBidSize”Number of contracts (or lots) offered at the bid price.
Delayed Bid Price“DelayedBid”Highest bid price for the contract.
Delayed Ask Price“DelayedAsk”Lowest offer price for the contract.
Delayed Ask Size“DelayedAskSize”Number of contracts (or lots) offered at the ask price.
Delayed Last Price“DelayedLast”Last price at which the contract traded.
Delayed Last Size“DelayedLastSize”Number of contracts or lots traded at the last price.
Delayed High“DelayedHigh”High price for the day.
Delayed Low“DelayedLow”Low price for the day.
Delayed Volume“DelayedVolume”Trading volume for the day for the selected contract (Volume for US Stocks are quoted in lots. The actual number of shares in volume can be calculated by multiplying 100).
Delayed Close Price“DelayedClose”The last available closing price for the previous day. For US Equities, we use corporate action processing to get the closing price, so the close price is adjusted to reflect forward and reverse splits and cash and stock dividends.
Delayed Open Price“DelayedOpen”Today’s opening price. The official opening price requires a market data subscription to the native exchange of a contract.
Delayed Last Timestamp“DelayedLastTimestamp”Delayed time of the last trade (in UNIX time) (TWS Build 970+ is required).

例如,以下公式将从 Island Exchange 请求 IBM 的延迟买入价:

=RTD("Tws.TwsRtdServerCtrl",,"IBM@ISLAND", "DelayedBid")

注意延迟逐笔报价类型为延迟 15 分钟。在没有市场数据订阅的情况下请求实时即时报价类型将导致错误消息”请求的市场数据未订阅。显示延迟的市场数据…”

查看更多语法示例

连接参数

由于TWS RTD服务器API直接引用C#API客户端,因此它通过socket连接到TWS(或IB网关)与C#相同。主机 IP 地址套接字端口客户端 ID是启动socket连接的必需参数。

  • 主机 IP 地址是运行 TWS 的 IP 地址。对于本地连接,可以使用本地 IP 127.0.0.1。
  • socket端口是用于socket连接的端口。您可以在TWS API 设置中设置主机端口,并且需要将 API 连接到在 TWS 中设置的同一端口。
  • 客户端 ID是每个 API 连接的标识。TWS 最多可以维护 32 个 API 客户端同时连接,并且客户端 ID 用于区分每个连接。这最初旨在使API用户可以使用不同的策略同时运行多个API程序(即客户端)来单独交易。由于 TWS RTD 服务器 API 仅用于中继实时数据,因此无需使用多个客户端 ID。

如果用户未直接指定,则上述三个参数默认为以下值:

  • 主机= “127.0.0.1” (即 “localhost”)
  • 端口= “7496”
  • 客户端 ID = 整数.最大值 – 1

简单语法支持多个预定义的连接参数,这些参数可以在 RTD 公式中指定为单独的字符串(即 String2、String3…):

  • “paper”:改用 port=7497 进行连接(7497 是模拟TWS 会话 的默认端口)
  • “gw”:请改用 port=4001 进行连接(4001 是实盘 IB 网关会话的默认端口)
  • “gwpaper”:改用 port=4002 进行连接(4002 是模拟 IB 网关会话的默认端口)

例如,要在通过端口 7497 连接到使用模拟帐户记录的 TWS 时请求IBM@SMART的”高价”:

=RTD("Tws.TwsRtdServerCtrl",,"IBM@ISLAND", "High", "paper")

复杂语法

复杂语法提供了最大的灵活性,它允许用户单独自定义所有公式字符串,其中每个字符串仅表示一个参数。每个参数的出现顺序没有规则。

=RTD(ProgID, Server, String1, String2, String3...)

参数

  • ProgID = “Tws.TwsRtdServerCtrl”
  • 服务器= “” (空字符串)

例如,下面的公式将请求IBM@ISLAND的”询问大小”:

=RTD("Tws.TwsRtdServerCtrl",,"sym=IBM", "sec=STK", "exch=ISLAND", "qt=AskSize")

以下公式将请求 IBM 的买入价:

=RTD("Tws.TwsRtdServerCtrl",,"sym=ES", "sec=FUT", "exch=GLOBEX", "cur=USD", "exp=201712", "qt=Bid")
复杂语法字符串

有关可用复杂语法字符串的完整列表,请参阅下表:

NameString SyntaxDescription
Contract ID“conid=”The unique contract ID generated by IB. Can be found at TWS Contract Description .
Symbol“sym=”The contract symbol.
SecurityType“sec=”The type of security, e.g. ‘STK’, ‘FUT’ and so on.
LastTradeDateOrContractMonth“exp=”Format ‘YYYYMMDD’ is used for defining the Last Trade Date, while format ‘YYYYMM’ is used for defining the Contract Month.
Strike“strike=”The strike price for an option contract.
Right“right=”‘C’ or ‘P’ for an option contract.
Multiplier“mult=”The contract multiplier.
Exchange“exch=”The exchange where to get market data from. For equities, ‘SMART’ means top data from all possible exchanges.
PrimaryExchange“prim=”The primary exchange of the contract. It is mostly specified when an contract ambiguity occurs for equity symbols that are listed on multiple exchanges.
Currency“cur=”The currency the contract is traded in.
LocalSymbol“loc=”The local symbol of the contract. Note the Local Symbol is mostly used for futures and options, and is different from the Symbol.
TradingClass“tc=”The trading class of the contract.
Combo“cmb=”Combo contract has to be defined using Complex Syntax or Mixed Syntax. The syntax for defining the combo is: “cmb=###;###;” ,where combo legs are separated by ‘;’ and individual leg parameters are separated by ‘#’. See more Spread Samples .
DeltaNeutralContract“und=”Delta-Neutral Contract. The syntax for defining the delta-neutral contract is: “und=<##” , where delta-neutral contract parameters are separated by ‘#’.
MktDataOptions“opt=”Currently not supported.
GenericTickList“genticks=”A comma separated Ids of available Generic Tick Types.
Topic“qt=”Topic of market data request.
Host“host=”Host IP address.
Port“port=”Socket port.
ClientId“clientid=”The client ID for socket connection. Note that the client ID is used for identify multiple simultaneous API connections to the same TWS. It was originally designed for API users who would like to manage their strategies separately from different API programs. Since the TWS RTD Server API is currently only supported for real-time market data, there is no need to use multiple client IDs.
混合语法

复杂语法可以与简单语法混合使用,只有一个限制,即Ticker字符串必须是 RTD 公式中出现的第一个字符串(即 String1)。

=RTD(ProgID, Server, Ticker, String2, String3...)

参数

  • ProgID = “Tws.TwsRtdServerCtrl”
  • 服务器= “” (空字符串)

例如,以下公式将在通过自定义主机、端口和客户机 ID 进行连接时请求 IBM 的买入价:

=RTD("Tws.TwsRtdServerCtrl",,"IBM@SMART", "host=1.2.3.4", "port=1234", "clientId=1", "Bid")

查看更多语法示例

TWS RTD 服务器示例

本页演示了按安全类型和语法类型分类的 RTD 公式。在查看示例之前,请务必熟悉 RTD 公式的各种可用语法。

外汇对

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"EUR.USD/CASH", "Bid")

评论:外汇代码以”CURRENCY1.货币2/现金”。

– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"sym=EUR","cur=USD", "exch=IDEALPRO", "sec=CASH", "qt=Bid")

注释:对于复杂语法,外汇符号被定义为外币,货币被定义为基础货币。

– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"EUR.USD/CASH", "Bid", "port=1234", "clientId=1")

股票

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"IBM")

注释:使用默认值:交易所= “SMART”,货币= “USD”,安全类型= “STK”,主题= “最后”。

=RTD("Tws.TwsRtdServerCtrl",,"IBM@ISLAND", "Bid")

注释:直接指定Exchange意味着专门从该交易所请求数据。

=RTD("Tws.TwsRtdServerCtrl",,"BMO@SMART//////CAD", "Bid")

注释:货币 = “CAD” 对于在 TSE 上列出的 BMO 是必需的,但其余字段可以留空。

=RTD("Tws.TwsRtdServerCtrl",,"ABG.P@SMART//////EUR", "Close")

注释:简单语法也支持包含”.”的常用符号。

=RTD("Tws.TwsRtdServerCtrl",,"MSFT@SMART/ISLAND", "Ask")

注释:对于某些具有相同符号货币交换的智能路由股票合约,您还需要指定PrimaryExchange属性来唯一定义合约。这应该被定义为合约的原生交换,并且是所有股票的良好做法。

– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"sym=IBM", "sec=STK", "exch=SMART", "cur=USD", "qt=Volume")

评论:一般来说,使用符号证券类型=“STK”,货币交换足以定义股票。

=RTD("Tws.TwsRtdServerCtrl",,"sym=MSFT", "sec=STK", "exch=SMART", "cur=USD", "prim=ISLAND", "qt=Open")

注释:将PrimaryExchange指定为单独的字符串以解决协定多义性。

– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"MSFT@SMART", "prim=ISLAND", "qt=High", "paper")

注释:使用预定义的字符串*“paper”*连接到纸质TWS会话的默认端口7497。

指标

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"SPX@CBOE//IND", "Last")

注释:默认货币= 使用”美元”。

=RTD("Tws.TwsRtdServerCtrl",,"DAX@DTB//IND////EUR", "Last")
– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"sym=INDU","cur=USD", "exch=NYSE", "sec=IND", "qt=Close")
– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"DAX@DTB//IND", "cur=EUR", "qt=Last", "host=1.2.3.4")

差价合约

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"IBDE30@SMART//CFD////EUR", "Bid")
– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"sym=IBDE30","cur=EUR", "exch=SMART", "sec=CFD", "qt=ASK")
– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"IBDE30@SMART//CFD", "cur=EUR", "Bid", "gw")

备注:使用预定义的字符串*“gw”*连接到实时 IB 网关会话的默认端口 4001。

***注意:*只有指数差价合约数据可以通过API直接查询,但不能通过股票差价合约。如果您需要股票差价合约的数据,请直接请求标的股票数据。

期货

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"ES@GLOBEX//FUT/201712///USD", "Bid")

评论:使用标的品种LastTradeDateOrContractMonth来定义期货合约。

– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"loc=ESZ7","cur=USD", "exch=GLOBEX", "sec=FUT", "qt=Ask")

评论*:LastTradeDateOrContractMonth和基础交易品种可以替换为合约自己的交易品种,也称为LocalSymbol(*在 TWS 的合约描述对话框中称为交易品种)。本地符号在简单语法中不可用。

– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"DAX@DTB//FUT/201706///EUR", "mult=5", "Low")

注释:对于具有倍数乘数的期货(例如,DAX 有 5 和 25),简单语法不足以唯一地定义合约。混合语法可以帮助为乘法器添加加法规范。

选项

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"GOOG@SMART//OPT/20170421/C/835/USD", "Bid")

评论:使用品种,LastTradeDate或ContractMonth,RightStrike来定义期权合约。

– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"loc=C DBK DEC 20 1600", "cur=EUR", "exch=DTB", "sec=OPT", "qt=Close")

注释:使用LocalSymbol定义期权合约。

– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"SANT@MEFFRV//OPT/20190621/C/7.5/EUR", "mult=100", "tc=SANEU", "Close")

注释:对于具有多个乘数交易类的期权,简单语法不足以唯一地定义合约。混合语法可以帮助正确添加MultiplerTradingClass 的附加规范。

期货期权

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"ES@GLOBEX//FOP/20180316/C/1000/USD", "Close")

评论:期货期权遵循与传统期权合约相同的规则。

– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"loc=ESH8 C1000", "cur=USD", "exch=GLOBEX", "sec=FOP", "qt=Close")
– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"ES@GLOBEX//FOP/20180316/C/1000/USD", "mult=50", "tc=ES", "Close")

债券

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"912828C57@SMART//BOND", "Bid")

注释:可以通过将符号定义为 CUSIP 来指定绑定。货币= “USD” 在这里用作默认值。

– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"sym=912828C57","cur=USD", "exch=SMART", "sec=BOND", "qt=Bid")
=RTD("Tws.TwsRtdServerCtrl",,"conid=147554578", "exch=SMART", "qt=Ask")

注释:债券也可以使用ConIdExchange定义,就像任何安全类型一样。

– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"912828C57@SMART, "sec=BOND", "Bid", "gwpaper")

注释:使用预定义的字符串*“gwpaper”*连接到纸质 IB 网关会话的默认端口 4002。

共同基金

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"VINIX@FUNDSERV//FUND", "Close")
– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"sym=VINIX","cur=USD", "exch=FUNDSERV", "sec=FUND", "qt=Close")
– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"VINIX@FUNDSERV//FUND", "Bid", "host=1.2.3.4", "port=1234", "clientId=1")

商品

– 简单的语法
=RTD("Tws.TwsRtdServerCtrl",,"XAUUSD@SMART//CMDTY", "Bid")
– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"sym=XAUUSD","cur=USD", "exch=SMART", "sec=CMDTY", "qt=Ask")
– 混合语法
=RTD("Tws.TwsRtdServerCtrl",,"XAUUSD@SMART//CMDTY", "Last", "port=1234", "clientId=1")

传播

点差合约,也称为组合或组合,组合两个或多个工具。要定义组合合约,需要知道组合腿的合约 ID。ConId可以在TWS的“合同描述“页面中轻松找到。点差合约的符号可以是其中一个合约腿的符号,或者对于两条腿的组合,两条腿的符号可以用逗号分隔,如下面的示例所示。

简单语法不足以定义点差合约。您需要使用复杂语法混合语法。提醒一下,以下是用于定义组合腿的字符串公式:

“cmb=###;###;”

股票点差

买入 1 IBKR@SMART + 卖出 1 MCD@SMART:

– 复杂语法
=RTD("Tws.TwsRtdServerCtrl",,"sym=IBKR,MCD", "exch=SMART", "cur=USD", "sec=BAG", "cmb=43645865#1#BUY#SMART;9408#1#SELL#SMART;", "Bid")
– 混合语法
=RTD("tws.twsrtdserverctrl",,"IBKR,MCD@SMART//BAG////USD", "cmb=43645865#1#BUY#SMART;9408#1#SELL#SMART;", "Bid")

***注意:*EFP被简单地定义为库存和相应SSF的袋子合约,比率为100:1。

期货点差

买入 1 VXJ7@CFE + 卖出 1 VXK7@CFE:

– 复杂语法
=RTD("tws.twsrtdserverctrl",,"sym=VIX", "exch=CFE", "cur=USD", "sec=BAG", "cmb=249139906#1#BUY#CFE;252623425#1#SELL#CFE;", "Bid")
– 混合语法
=RTD("tws.twsrtdserverctrl",,"VIX@CFE//BAG////USD", "cmb=249139906#1#BUY#CFE;252623425#1#SELL#CFE;", "Bid")

期权点差

买入 1 DBK May19’17 15 CALL @DTB + Sell 1 DBK May19’17 16 CALL @DTB:

– 复杂语法
=RTD("tws.twsrtdserverctrl",,"sym=DBK", "exch=DTB", "cur=EUR", "sec=BAG", "cmb=270579950#1#BUY#DTB;270579957#1#SELL#DTB;", "Bid")
– 混合语法
=RTD("tws.twsrtdserverctrl",,"DBK@DTB//BAG////EUR", "cmb=270579950#1#BUY#DTB;270579957#1#SELL#DTB;", "Bid")

商品间期货价差

对于商品间期货,TWS 中的”本地符号”字段用于 TWS合约描述中的”符号”字段。

@NYMEX年5月买入1 CL + 卖出 1 BZ 2017年6月@NYMEX:

– 复杂语法
=RTD("tws.twsrtdserverctrl",,"sym=CL.BZ", "exch=NYMEX", "cur=USD", "sec=BAG", "cmb=55977404#1#BUY#NYMEX;55807026#1#SELL#NYMEX;", "Bid")
– 混合语法
=RTD("tws.twsrtdserverctrl",,"CL.BZ@NYMEX//BAG////USD", "cmb=55977404#1#BUY#NYMEX;55807026#1#SELL#NYMEX;", "Bid")

***注意:*请注意,商品间期货合约是交易所直接提供的点差合约,合约定义与常规组合合约不同。请确保所有合同属性均按照TWS合同描述页面指定。

更改数据刷新率

值得一提的是,我们的实时市场数据不是分笔数据,这意味着您将无法获得市场上发生的每一个价格变动。相反,实时数据以固定频率生成的快照形式给出:

产品频率
股票、期货及其他250 毫秒
美国期权100 毫秒
外汇对5 毫秒

Microsoft RTD 接口具有一个ThrottleInterval属性,用于确定数据刷新之间的间隔。默认情况下,该值设置为 2000 毫秒,这意味着 Excel 在两次检查更新之间至少等待 2000 毫秒。您可以手动将”限制间隔”更改为较小的值*,以提高实时数据的刷新率。

更改 ThrottleInterval 属性的最简单方法是通过 VBA:

  1. 在 Excel 中,通过按Alt_F11转到 Visual Basic Editor 窗口。
  2. 在 Visual Basic Editor 窗口中,单击”查看->即时窗口”或按住Ctrl_G以打开**“即时窗口”。**
  3. 在**”即时窗口”上,键入以下代码,然后单击**Enter :Application.RTD.ThrottleInterval=250
  4. 要验证它是否设置正确,请在**”即时窗口”上键入此行代码,然后单击Enter**:? Application.RTD.ThrottleInterval
  5. 验证下一行是否应显示 250。如果更改此值,则重新启动 Microsoft Excel 时,新值将保持不变。

警告随着限制间隔的降低,更新可能会非常频繁地出现,以至于 Excel 不断更新值并执行计算,Excel 最终可能会处于一种状态,即它永远不会让用户有机会执行任何操作,从而有效地进入挂起状态。如果发生这种情况,请将 Excel 限制间隔设置得更高。

RTD 的常见错误疑难解答

常见错误疑难解答

TwsRtdServer 错误:无法连接到 TWS。

触发此错误消息很可能是因为尚未针对 API socket连接正确配置 TWS。请确保在TWS中启用ActiveX和Socket Client设置。另请记住,默认情况下,TWS Rtd 服务器连接到socket端口 7496。如果在 TWS API 设置中配置的socket端口与 RTD 尝试连接到的端口不匹配,您将看到上述错误消息。有关详细信息,请参阅”您将需要什么”。

TwsRtd服务器错误:RTD服务器与TWS断开连接,导致单元停止更新

如果超过 50 条消息/秒的 API 消息速率,则可能会发生这种情况。每秒从 API 应用程序(如 RTD 服务器)发送到 TWS 的消息不超过 50 条(这不包括相反方向的消息)。每个股票代码订阅请求和订阅取消请求对应于 1 条消息。如果超过 50 条消息/秒的速率,TWS 最终将关闭连接。因此,要构建具有50个以上股票代码的RTD电子表格,必须将其构建为每秒最多只能进行50个新订阅或取消。

TwsRtdServer 错误:未找到请求的安全定义。

触发此错误消息以指示 TWS 找不到 RTD 公式中提供的协定定义。通常,这是由不正确的协定属性定义或拼写错误引起的。建议您参考一些语法示例,并在 RTD 公式中找出问题所在。

TwsRtdServer 错误:为 SYMBOL 指定的协定描述不明确。

此错误消息指示您提供的协定定义不是唯一定义单个协定。它主要针对在多个主要交易所上市的股票代码(如 MSFT 和 CSCO)触发。指定主要交换将解决此问题。请参阅MSFT 的语法示例

TwsRtdServer 错误:请求的市场数据未订阅。显示延迟的市场数据…

当您尝试请求实时报价类型时,将显示错误消息,而由于缺少市场数据订阅,因此只有延迟数据可用。您需要通过账户管理订阅市场数据,或者请求延迟逐笔报价类型

TwsRtd服务器错误:验证请求时出错:-‘zd’:原因 – 不正确的通用勾选列表

如 您将需要什么中所述,TWS Build 963+ 是必需的,因为默认情况下 RTD 请求的一些通用刻度类型在较旧的 TWS 构建中不受支持。将TWS升级到963以上的任何内部版本将解决此问题。

一些数据显示,在请求许多证券的数据时为”0″

这很可能是因为您已经超出了市场数据线的限制。您可以通过转到TWS并同时按住**Ctrl_Alt_=**来验证这是否是原因。这应该显示一个小的弹出窗口,并指示允许的最大市场数据行以及当前订阅的顶部市场数据计数。如果订阅的次数超过允许的最大值,则某些数据点将显示”0″。

rtd_maxdataline.PNG

DDE socket API

动态数据交换协议是 Microsoft 开发的一种进程间通信方法,用于在同一台计算机上运行的 Windows 应用程序之间建立通信。DDE API可用于Windows计算机,以创建Microsoft Excel与TWS或IB网关之间的通信方式。

盈透证券不提供任何编程帮助,因此强烈建议任何愿意使用TWS DDE API的人熟悉所涉及的技术,如DDE协议和VBA。

从API v975开始,提供了一个新的DDE API,它通过一个DDE套接字桥连接到TWS,该桥接使用开源Java-DDE互操作性库JDDE。与传统的 DDE API 相比,较新的 API 具有一些优势:

  • 与 32 位或 64 位 TWS 兼容(旧版 DDE API 仅与 32 位 TWS 兼容)
  • 与其他基于套接字的 API 匹配的附加功能,特别是在多个账户结构方面
  • 全方位的市场数据分时类型

DDE socket API 与为旧版 DDE API 创建的电子表格完全向后兼容
与旧版 DDE API 不同,要在 Excel DDE 电子表格中使用的用户名由独立启动的 DDE 服务器确定,而不是由 TWS 中使用的用户名
确定。默认用户名是 twsserver,但这可以在 runDdeSocketBridge.bat 文件中进行更改。Windows v975+ 安装的 API 附带的文件夹 C:\TWS API\samples\DdeSocketBridge 包含新 DDE 连接的源代码。


DDE socket bridge API 的要求

  • 视窗操作系统
  • 微软Excel
  • TWS API v975 或更高版本已安装到 C: 驱动器
  • Excel 必须设置为逗号和句点的美国约定。也就是说,逗号表示千,句点表示小数。
  • 已安装的最新 Java 版本

启动 DDE 服务器的步骤
  1. 启动TWS或IB网关
  2. 如果将 TWS 与 API 配合使用,则必须在以下位置启用基于套接字的连接:全局配置 -> API ->设置 ->”启用 ActiveX 和套接字客户端”启用 API 连接
  3. 请注意全局配置 -> API -> 设置 -> 套接字端口中的套接字端口设置。DDESocketBridge 的默认值为7496
  4. 导航到 C:\TWS API\samples\DdeSocketBridge。如果您启动runDdeSocketBridge.bat直接它将默认套接字端口7496,Excel公式用户twsserver。
    • DdeSocketBridge 使用的默认套接字端口7496和/或默认用户名twsserver可以通过修改 runDdeSocketBridge 来更改.bat如下所示:java-Djava.library.path=。-jar DdeSocketBridge.jar -p{已在 API 设置中设置的socket端口} -s{TWS 登录用户名或任何其他字符串} -c{要与 TWS 连接的客户端 ID}
  5. 应该有一个弹出窗口显示**“已连接!”,**确认 DDESocketBridge 已连接到 TWS。如果不是,请检查 API 是否已启用,以及socket端口是否设置正确。
  6. 如果使用正确的语法输入公式,Excel 电子表格现在可以连接到 DDE API。一个很好的起点是教程
    说明:应该使用的默认用户名是twsserver
    有一个新的示例电子表格位于:C:\TWS API\samples\Excel\newTwsDDE.xls

笔记:

  • 在同一台计算机上运行的其他使用DDE的程序可能会干扰Excel和TWS之间的通信,并导致Excel在发出初始请求后”挂起”或”冻结”。此问题的唯一解决方案是使用 DDE 逐个关闭其他程序以找到罪魁祸首。已知导致此问题的程序包括Google Chrome,Microsoft OneNote,Skype和Adobe Creative Cloud。
  • 运行 DDE Bridge 时,如果命令提示符屏幕在打开后闪烁并消失,请在操作系统上安装最新版本,https://www.java.com/en/download/。

传统 DDE API 描述如下:传统 DDE API

ActiveX for Excel API

ActiveX API 包装了 C#/.NET API,并作为开源项目 TWSLib 提供。建议直接考虑使用 C# API,因为它提供了与 .NET 框架的无缝集成。

与RTDServer或DDE相比,使用ActiveX for Excel API的一个可能优点是,ActiveX确实提供了与其他基于socket的技术(C#,Java,C++,Python)相同数量的功能。ActiveX Excel API 的缺点是,与其他 Excel API 相比,它更难编程,并且不如非基于 Excel 套接字的 API 应用程序可靠。

请参阅Excel API 比较

ActiveX 示例电子表格

API 安装中包含一个示例 ActiveX for Excel 电子表格,并将其安装到 C:\TWS API\samples\Excel\TwsActiveX.xls。电子表格和随附的 ActiveX 控件是为 32 位版本的 Excel for API 版本构建的,直到 973.05。对于 API 版本 973.05+,提供的已安装的 ActiveX 控件和 Excel 电子表格示例将适用于 32 位或 64 位应用程序。如果使用 ActiveX API 的版本 9.73,则建议使用版本973.07或更高版本。

重要:请注意,随 API 提供的示例 ActiveX 电子表格仅用于演示 API 功能,而不是用于交易的生产级工具。虽然它设计了几乎所有API函数的示例,但它没有必要的功能来处理交易过程中可能发生的问题,例如断开连接,错误代码或以稳健的方式丢弃事件。

原文出处:

云子量化, https://www.yunjinqi.top/article/69

云子量化, https://www.yunjinqi.top/article/70

Be the first to comment on "云子量化【盈透证券TWS API 官方文档翻译系列】2、第三方软件中使用TWS API的相关问题以及TWS API在Excel中的使用"

Leave a comment