IBrokers - reqMktData приводит к ошибке, говорящей о том, что тикер неоднозначен

Я пытаюсь получить рыночные данные в реальном времени, используя API IBrokers на R.

По странной причине 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.

Кто-нибудь знает, что мне нужно сделать, чтобы обойти эту проблему? Спасибо.


person Trexion Kameha    schedule 15.12.2014    source источник
comment
Посмотрите на reqContractDetails(tws, twsSTK("MSFT", currency="")). Есть несколько инструментов с тикером MSFT. Вы можете передать один контракт reqMktData. например reqContractDetails(tws, twsSTK("MSFT"))[[1]][["contract"]]   -  person GSee    schedule 16.12.2014
comment
Понятно, спасибо GSEE. Похоже, что первый всегда является основным списком. Два других торгуются на бирже AEB и бирже IBIS, обе из которых не находятся в Соединенных Штатах. Вы знаете, как я могу сделать его по умолчанию первым, который выходит, согласно вашему предложению?   -  person Trexion Kameha    schedule 16.12.2014
comment
Спасибо Gsee. Похоже, правильный синтаксис будет таким: reqMktData(tws,twsSTK("MSFT",exch="SMART", primary="NASDAQ", currency="USD"),tickGenerics="",snapshot=T) Мне интересно, есть ли у вас предложение о том, как я могу интегрировать его в исходный код выше? Это потребует динамического выбора основного и обменного для каждого идентификатора. Спасибо много! Это действительно полезно!   -  person Trexion Kameha    schedule 16.12.2014
comment
Вы не можете предполагать, что первый — тот, который вам нужен. Я думаю, что если последний контракт, с которым вы работали, был европейской акцией, то если вы назовете reqContractDetails, она покажет европейскую акцию в первом слоте. Я не уверен в этом на 100%, но я вполне уверен, что порядок, в котором возвращаются контракты, изменится, возможно, даже в том же сеансе.   -  person GSee    schedule 16.12.2014


Ответы (2)


Чтобы обойти это, я просто указал фондовую биржу для отдельных тикеров, которые неоднозначно торгуются на NASDAQ.

tickers_nasdaq<-c("MSFT","INTC","CSCO")
reqMktData(tws, lapply(tickers_nasdaq, twsSTK, exch = "SMART", primary="NASDAQ", currency = "USD"), tickGenerics="", snapshot=T)

Очевидно, что это не идеально, но, по крайней мере, это работает.

person Trexion Kameha    schedule 18.12.2014

Ответ позже...
Вам не следует указывать основной обмен, потому что у вас будут проблемы с другими символами, вместо этого укажите m_localSymbol на вашем contract() то же значение, что и m_symbol в этот случай: MSFT

https://www.interactivebrokers.com/en/software/api/apiguide/java/contract.htm

person Pedro Lobito    schedule 02.11.2016