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.
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.
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.
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.
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.
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"))
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 ""
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With