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

oR Ibrokers twsOPT uso

reqMktData(tws,twsOPT("AAPL110820C00390000")) 

resultado en: TWS Mensaje: 2 1 200 No existe una definición de seguridad se ha encontrado para la solicitud

¿Por qué?

reqMktData(tws,twsSTK("AAPL")) 

funciona bien.

La página de manual dice:

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

Los contratos de opción sobre la TWS tienen ciertas reglas que son diferentes a las solicitudes de datos estándar.

Se requiere el símbolo local. Esto se puede encontrar en la pantalla principal de TWS bajo los detalles del contrato, o a través de la web en www.interactivebrokers.com

Como se requiere el símbolo local, todos los demás valores son redundantes. Lo mejor es simplemente especificar el nombre local y dejar que el TWS administre la búsqueda.

+0

No estoy seguro de por qué está utilizando "AAPL110820C00390000 ! " ¿Por qué no estás usando "AAPL?" No creo que el valor que estás usando sea el nombre local correcto. – Soumendra

Respuesta

5

No está obteniendo el correcto local. El formato correcto utiliza un campo de seis caracteres de ancho (especificación OSI), y está intentando 5 y 4, respectivamente.

No es necesario que utilice local por supuesto, pero eso requiere más detalles en diferentes args a continuación.

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

Usted puede extraer el contrato a través de as.twsContract:

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

O simplemente llamar a la solicitud tal como se reqMktData:

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

## OR 

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

Ya veo. 6 lugares para cada teletipo ¡muchas gracias! – Pauly

5

Puede evitar este tipo de problemas mediante el uso de el paquete twsInstrument on R-Forge

library(twsInstrument) 

Cualquiera de estos obtener la 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) 

Todos los que le dará lo mismo:

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

Por desgracia, no se puede obtener los detalles del contrato de opciones que ya han expirado. No sé si esto es un problema con IBrokers, o si Interactive Brokers no lo soporte, pero conseguir los detalles del contrato de futuros ya expirado hay ningún problema

> 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

¡Bienvenido a SO, Garrett! –