IBrokers 启用延迟市场数据?

use*_*746 5 r ibrokers

我正在尝试从 IBrokers 下载数据,但目前出现错误。我不知道如何解决它。

注意:我没有订阅实时报价,但我确实收到了延迟的市场数据。

我的步骤是:

security = twsSTK("AAPL")
is.twsContract(security)
Run Code Online (Sandbox Code Playgroud)

1正确

security_copy= twsEquity('AAPL')
reqMktData(tws,security)
Run Code Online (Sandbox Code Playgroud)

错误输出:

TWS 消息:2 1 162 历史市场数据服务错误消息:ISLAND STK 无市场数据权限 TWS 消息:2 1 366 未找到代码 id:1 的历史数据查询 TWS 消息:2 1 10168 未订阅请求的市场数据。未启用延迟市场数据

历史数据功能似乎也有问题。

data_AAPL=reqHistoricalData(tws, security)
Run Code Online (Sandbox Code Playgroud)

我也尝试过链接中的示例

 IBrokersRef() # IBrokers Reference Card in PDF viewer
 tws <- twsConnect() # make a new connection to the TWS
 reqCurrentTime(tws) # check the server's timestamp
 contract <- twsEquity('IBKR','SMART','ISLAND') # equity specification
 reqHistoricalData(tws,contract) # request historical data
Run Code Online (Sandbox Code Playgroud)

结果:

等待 TWS 对 IBKR 的回复...失败。NULL 警告消息:在 errorHandler(con, verbose, OK = c(165, 300, 366, 2104, 2106, :
历史市场数据服务错误消息:没有 ISLAND 的市场数据权限

小智 1

根据 TWS 文档(此处),可以使用 reqMarketDataType(4) 获取延迟的市场数据。

话虽这么说,我建议使用 Ewald de Wit & Co 的 ib_insync 包。

下面是我用来获取延迟市场数据的代码示例:

from ib_insync import *

util.startLoop()

ib = IB()
ib.sleep(2)
ib.connect('127.0.0.1', port=7490, clientId=12) # NB: Non default port could be 7498 on your machine by default when using TWS

ib.reqMarketDataType(4) # This line is the one that counts to get delayed data without subscription if available
Run Code Online (Sandbox Code Playgroud)