【发布时间】:2015-02-14 05:10:06
【问题描述】:
我正在尝试使用 R 上的 IBrokers API 捕捉实时市场数据。
出于一个奇怪的原因,Microsoft (MSFT) 不起作用。
例如,这是有效的:
library("IBrokers")
tws <- twsConnect()
nms <- c("AAPL","YHOO")
reqMktData(tws, lapply(nms, twsSTK), tickGenerics="", snapshot=T)
twsDisconnect(tws)
但是,这不起作用:
library("IBrokers")
tws <- twsConnect()
nms <- c("AAPL","YHOO","MSFT")
reqMktData(tws, lapply(nms, twsSTK), tickGenerics="", snapshot=T)
twsDisconnect(tws)
错误信息如下:
2 3 200 The contract description specified for MSFT is ambiguous.
但是,这并不是一个模棱两可的代码,并且与 YHOO 和 AAPL 在同一个交易所。
有人知道我需要做什么来解决这个问题吗?谢谢。
【问题讨论】:
-
看
reqContractDetails(tws, twsSTK("MSFT", currency=""))。有多种工具的代码为“MSFT”。您可以将单个合同传递给reqMktData。例如reqContractDetails(tws, twsSTK("MSFT"))[[1]][["contract"]] -
我明白了,谢谢 GSEE。看起来第一个总是主要列表。另外两个在 AEB 交易所和 IBIS 交易所进行交易,这两个交易所都不在美国。你知道我怎样才能按照你的建议让它默认为第一个出来的吗?
-
谢谢 GSee。看起来正确的语法是:
reqMktData(tws,twsSTK("MSFT",exch="SMART", primary="NASDAQ", currency="USD"),tickGenerics="",snapshot=T)我想知道您是否对如何将其集成到上面的原始代码中提出了建议?它需要为每个标识符动态选择“primary”和“exch”。非常感谢!这真的很有帮助! -
你不能假设第一个就是你想要的。我认为如果您使用的最后一个合约是欧洲股票,那么如果您拨打
reqContractDetails,它将在第一个位置显示欧洲股票。我不能 100% 确定这一点,但我相当有信心返回合同的顺序会改变,甚至可能在同一个会话中。