Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R Ibrokers twsOPT usage

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.

like image 669
Pauly Avatar asked Aug 17 '11 03:08

Pauly


People also ask

What is ibrokers TWS?

The TWS, in turn, is connected to the IB data centers and thus, all the communication is routed via the TWS. The IBrokers R package enables a user to write his strategy in R and helps it get executed via the IB TWS.

What is the ibrokers R package?

The IBrokers R package enables a user to write his strategy in R and helps it get executed via the IB TWS. Below is the flow structure diagram. To retrieve data from the IB TWS, the IBrokers R package includes five important functions. reqContractDetails: retrieves detailed product information.

What is IB TWS in R?

The TWS, in turn, is connected to the IB data centers and thus, all the communication is routed via the TWS. The IBrokers R package enables a user to write his strategy in R and helps it get executed via the IB TWS. Below is the flow structure diagram.

Where can I learn more about trading using R on ibrokers?

Interactive Brokers in collaboration with QuantInsti® hosted a webinar, “Trading using R on Interactive Brokers” which was held on 2nd March 2017 and conducted by Anil Yadav, Director at QuantInsti®. You can click on the link provided above to learn more about the IBrokers package.


2 Answers

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"))
like image 160
Jeff R Avatar answered Nov 10 '22 05:11

Jeff R


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 ""
like image 28
GSee Avatar answered Nov 10 '22 06:11

GSee