R Ibrokers twsOPT usage
Asked Answered
C

2

5
reqMktData(tws,twsOPT("AAPL 110820C00390000"))

or

reqMktData(tws,twsOPT("AAPL110820C00390000"))

result in: TWS Message: 2 1 200 No security definition has been found for the request

Why?

reqMktData(tws,twsSTK("AAPL"))

works fine.

The manpage says:

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

Option contracts on the TWS have certain rules which are different than standard data requests.

The local symbol is required. This can be found on the main TWS screen under contract details, or via the web at www.interactivebrokers.com

Since the local symbol is required, all other values are redundant. It is best to simply specify the local name and let the TWS manage the lookup.

Chur answered 17/8, 2011 at 3:57 Comment(1)
I am not sure why you are using "AAPL110820C00390000!" Why are you not using "AAPL?" I don't think the value you are using is the correct local name.Histone
Z
5

You are not getting the local correct. The correct format uses a field six characters wide (OSI spec), and you are trying 5 and 4, respectively.

You aren't required to use local of course, but that requires more details across different args then.

> 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"

You can either extract the contract using as.twsContract:

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

Or just call the reqMktData request as is:

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

## OR

reqMktData(ibg, twsOPT("",symbol="AAPL",right="C", strike="390", expiry="201108"))
Zebada answered 17/8, 2011 at 14:25 Comment(0)
T
5

You can avoid these types of problems by using the twsInstrument package on R-Forge

library(twsInstrument)

Any of these will get the 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) 

All of those will give you the same thing:

> 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 ""

Unfortunately, you cannot get contract details for options that have already expired. I don't know if this is a problem with IBrokers, or if Interactive Brokers doesn't support it, but getting contract details for already expired futures is no problem

> 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 ""
Taskmaster answered 27/9, 2011 at 21:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.