2011-08-17 35 views
5
reqMktData(tws,twsOPT("AAPL 110820C00390000")) 

řIbrokers twsOPT用法

reqMktData(tws,twsOPT("AAPL110820C00390000")) 

结果: TWS消息:2 1 200无安全性的定义已经发现针对该请求

为什么呢?

reqMktData(tws,twsSTK("AAPL")) 

工作正常。

的手册页说:

twsOption(local, 
      expiry="", 
      strike="", 
      right="", 
      exch="SMART", 
      primary="", 
      currency='USD', 
      symbol='', 
      multiplier="100", 
      include_expired='0', 
      conId=0) 

在TWS期权合约有一定的规则,它比标准的数据请求不同。

本地符号是必需的。这可以在合同详细信息的主TWS屏幕上找到,或通过网站www.interactivebrokers.com找到。

由于需要本地符号,所有其他值都是多余的。最好简单地指定本地名称并让TWS管理查找。

+0

“AAPL110820C00390000 !”你为什么不使用“AAPL?”我不认为你使用的价值是正确的本地名称。 – Soumendra

回答

5

你没有得到本地正确。正确的格式使用六个字符宽的字段(OSI规范),并且您分别尝试5和4。

当然你不需要使用本地,但是这需要不同参数的更多细节。

> reqContractDetails(ibg, twsOPT("AAPL 110820C00390000")) 
[[1]] 
List of 18 
    $ version  : chr "6" 
    $ contract  :List of 16 
..$ conId   : chr "86896934" 
..$ symbol   : chr "AAPL" 
..$ sectype  : chr "OPT" 
..$ exch   : chr "SMART" 
..$ primary  : chr "" 
..$ expiry   : chr "20110819" 
..$ strike   : chr "390.0" 
..$ currency  : chr "USD" 
..$ right   : chr "C" 
..$ local   : chr "AAPL 110820C00390000" 
..$ multiplier  : chr "100" 
..$ combo_legs_desc: chr "" 
..$ comboleg  : chr "" 
..$ include_expired: chr "" 
..$ secIdType  : chr "" 
..$ secId   : chr "" 
..- attr(*, "class")= chr "twsContract" 
$ marketName : chr "AAPL" 
$ tradingClass : chr "AAPL" 
$ conId   : chr "86896934" 
$ minTick  : chr "0.01" 
$ orderTypes : chr [1:44] "ACTIVETIM" "ADJUST" "ALERT" "ALGO" ... 
$ validExchanges: chr [1:12] "SMART" "AMEX" "BATS" "BOX" ... 
$ priceMagnifier: chr "1" 
$ underConId : chr "265598" 
$ longName  : chr "APPLE INC" 
$ contractMonth : chr "201108" 
$ industry  : chr "Technology" 
$ category  : chr "Computers" 
$ subcategory : chr "Computers" 
$ timeZoneId : chr "EST" 
$ tradingHours : chr "20110817:0930-1600;20110818:0930-1600" 
$ liquidHours : chr "20110817:0930-1600;20110818:0930-1600" 

您可以使用as.twsContract提取合同:

as.twsContract(reqContractDetails(ibg, twsOPT("AAPL 110820C00390000"))) 

,还是直接致电reqMktData请求视为是:

reqMktData(ibg, twsOPT("AAPL 110820C00390000")) 

## OR 

reqMktData(ibg, twsOPT("",symbol="AAPL",right="C", strike="390", expiry="201108")) 
+0

我明白了。每个股票代码有6个名额。非常感谢你! – Pauly

5

您可以通过避免这些类型的问题twsInstrument包on R-Forge

library(twsInstrument) 

所有的这些都将获得twsContract

getContract("AAPL 111217P00390000") 
getContract("AAPL  111217P00390000") #number of spaces does not matter 
getContract("AAPL20111217P00390000") #year can be 4 digits or 2 
getContract("AAPL_111217P00390000") 
getContract("AAPL111217P00390000") 
getContract("AAPL111217P390") 
getContract("AAPL_111217P390") 
getContract("AAPL_20111217P390") 
getContract("AAPL_111217P390.00") 

#by conId 
getContract("93189601") 
getContract(93189601) 

所有这些都会给你同样的事情:

> getContract(93189601) 
List of 16 
$ conId   : chr "93189601" 
$ symbol   : chr "AAPL" 
$ sectype  : chr "OPT" 
$ exch   : chr "SMART" 
$ primary  : chr "" 
$ expiry   : chr "20111216" 
$ strike   : chr "390" 
$ currency  : chr "USD" 
$ right   : chr "P" 
$ local   : chr "AAPL 111217P00390000" 
$ multiplier  : chr "100" 
$ combo_legs_desc: chr "" 
$ comboleg  : chr "" 
$ include_expired: chr "" 
$ secIdType  : chr "" 
$ secId   : chr "" 

不幸的是,你不能得到合同细节对于已经已经过期选项。我不知道这是否与IBrokers一个问题,或者如果盈透证券不支持它,但得到的合同细节已经过期期货是我不知道为什么你正在使用没有问题

> getContract("ESM1") 
Connected with clientId 100. 
Trying to resolve error in contract details. Using include_expired=1 
Contract details request complete. Disconnected. 
List of 16 
$ conId   : chr "73462897" 
$ symbol   : chr "ES" 
$ sectype  : chr "FUT" 
$ exch   : chr "GLOBEX" 
$ primary  : chr "" 
$ expiry   : chr "20110617" 
$ strike   : chr "0" 
$ currency  : chr "USD" 
$ right   : chr "" 
$ local   : chr "ESM1" 
$ multiplier  : chr "50" 
$ combo_legs_desc: chr "" 
$ comboleg  : chr "" 
$ include_expired: chr "1" 
$ secIdType  : chr "" 
$ secId   : chr "" 
+1

欢迎来到SO,Garrett! –