[R-SIG-Finance] IBrokers

Stephen Choularton stephen at organicfoodmarkets.com.au
Fri Dec 10 20:10:08 CET 2010


ok, I did get this to work:

AskPriceMSFT <- as.numeric(eWrapper$.Data$data[[1]][,3])
BidPriceAAPL <- as.numeric(eWrapper$.Data$data[[2]][,2])

which produced  "BidPriceAAPL: " "320.84"         "AskPriceMSFT: " "27.34"

I also also do this:

AskPriceMSFT <- as.numeric(eWrapper$.Data$data[['MSFT']][,3])

if I do this earlier in the code

names(eWrapper$.Data$data) <- eWrapper$.Data$symbols

No doubt I'll be back but thanks everyone


Stephen

Hi Jeff

Sorry to put this up again, but I am completely stuck.

How do I reference the second data object

BidPrice2 <- as.numeric(eWrapper$.Data$data[[2]][,5])  doesn't work.

Stephen Choularton Ph.D., FIoD

On 09/12/2010 8:06 AM, Stephen Choularton wrote:
> Hi Jeff
>
> Thanks, but when I try to reference the second data object using this 
> (which is all I can think of):
>
> BidPrice2 <- as.numeric(eWrapper$.Data$data[[2]][,5])
>
> The code runs but I don't get any info. eWrapper$.Data$data[[2]][,5] 
> appears to exist but to be empty.  Do I have to do something to place 
> the data into it?
>
> Plus does curMsg <- readBin(con, character(), 1) give me the ticker id?
>
>
>
> Stephen Choularton Ph.D., FIoD
> On 09/12/2010 4:07 AM, Jeff Ryan wrote:
>> Stephen,
>>
>> You're close.
>>
>> On Tue, Dec 7, 2010 at 1:13 PM, Stephen Choularton
>> <stephen at organicfoodmarkets.com.au>  wrote:
>>> So back again!
>>>
>>> I have two problem in converting my callback to two handle two 
>>> symbols so I
>>> can set up spreads.  (Or at least that's what I can see it at the 
>>> moment):
>>>
>>> When I run this using myCALLBACK function below:
>>>
>>> con = twsConnect()
>>>
>>> reqMktData(con, list(twsSTK("MSFT"),twsSTK("AAPL")),
>>>   event=eWrapper.data(1), CALLBACK=myCALLBACK)
>> The eWrapper needs to be set up to handle the number of contracts you
>> are watching.  You need: eWrapper.data(2), with 2 being the length of
>> the contracts you are watching.
>>
>> The ticker id is by default mapped to the order of the Contracts you
>> pass in. So MSFT is 1, AAPL is 2 ...
>>
>> HTH,
>> Jeff
>>> I get this
>>>
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      NA            
>>> "LastSize : "
>>> NA
>>> [13] "Volume: "    NA
>>> 2 -1 2104 Market data farm connection is OK:aufarm
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      NA            
>>> "LastSize : "
>>> NA
>>> [13] "Volume: "    NA
>>> 2 -1 2104 Market data farm connection is OK:usfarm
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      NA            
>>> "LastSize : "
>>> NA
>>> [13] "Volume: "    NA
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      NA            
>>> "LastSize : "
>>> NA
>>> [13] "Volume: "    NA
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      NA            
>>> "LastSize : "
>>> NA
>>> [13] "Volume: "    NA
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      "26.97"       
>>> "LastSize : "
>>> NA
>>> [13] "Volume: "    NA
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    NA
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   NA            "BidPrice: "  NA            
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   NA
>>>   [7] "AskSize: "   NA            "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "4"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343529"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "1435"        "BidPrice: "  "26.96"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.97"
>>>   [7] "AskSize: "   "828"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>>   [1] "BidSize: "   "970"         "BidPrice: "  "26.97"       
>>> "AskPrice: "
>>>   "26.98"
>>>   [7] "AskSize: "   "847"         "Last: "      "26.97"       
>>> "LastSize : "
>>> "2"
>>> [13] "Volume: "    "343550"
>>> Error in `*tmp*`[[id]] : subscript out of bounds
>>>
>>>
>>> I think what is happening is that the function fails on its first 
>>> attempt to
>>> get data on AAPT and the above data is on MSFT but I am quite unsure 
>>> as to
>>> what direction to take to amend the function.  Any pointers most 
>>> welcome.
>>>
>>> Secondly I need to be able to know which symbol I am dealing with.  The
>>> output for:
>>>
>>> reqMktData(con, list(twsEquity("MSFT"),twsEquity("AAPL")))
>>>
>>> is
>>>
>>> TWS Message: 2 -1 2104 Market data farm connection is OK:aufarm
>>> TWS Message: 2 -1 2104 Market data farm connection is OK:usfarm
>>> <20101208 05:55:28.974000>  id=1 symbol=MSFT Volume: 343560
>>> <20101208 05:55:28.978000>  id=1 symbol=MSFT highPrice: 27.09
>>> <20101208 05:55:28.983000>  id=1 symbol=MSFT lowPrice: 26.88
>>> <20101208 05:55:28.988000>  id=2 symbol=AAPL Volume: 79079
>>> <20101208 05:55:28.993000>  id=2 symbol=AAPL highPrice: 323.99
>>>
>>> and shows the symbol I need but when I try to find something that 
>>> refers to
>>> it in myCALLBACK I seem to fail.  Is it somewhere in the data 
>>> object?  Is it
>>> somewhere esle someone can point me to?
>>>
>>> Stephen Choularton Ph.D., FIoD
>>>
>>>
>>> On 07/12/2010 5:24 PM, Stephen Choularton wrote:
>>>> Just for the record I though I should post this as it did actually 
>>>> place
>>>> the order I was after:
>>>>
>>>> library(IBrokers)
>>>>
>>>> myCALLBACK<-
>>>> function(twsCon, eWrapper, timestamp, file, playback = 1, ...) {
>>>>
>>>>     con<- twsCon[[1]]
>>>>     traded<- FALSE
>>>>     while (TRUE) {
>>>>         socketSelect(list(con), FALSE, NULL)
>>>>         #data
>>>>     curMsg<- readBin(con, character(), 1)
>>>>     if (!is.null(timestamp)) {
>>>>         processMsg(curMsg, con, eWrapper, format(Sys.time(), 
>>>> timestamp),
>>>> file, ...)
>>>>     } else {
>>>>         processMsg(curMsg, con, eWrapper, timestamp, file, ...)
>>>>     }
>>>>     # EXTRACT DATA HERE
>>>>     BidSize<- as.numeric(eWrapper$.Data$data[[1]][,1])
>>>>     BidPrice<- as.numeric(eWrapper$.Data$data[[1]][,2])
>>>>     AskPrice<- as.numeric(eWrapper$.Data$data[[1]][,3])
>>>>     AskSize<-  as.numeric(eWrapper$.Data$data[[1]][,4])
>>>>     Last<- as.numeric(eWrapper$.Data$data[[1]][,5])
>>>>     LastSize<- as.numeric(eWrapper$.Data$data[[1]][,6])
>>>>         Volume<- as.numeric(eWrapper$.Data$data[[1]][,7])
>>>>     print(c("BidSize: ", BidSize, "BidPrice: ", BidPrice, 
>>>> "AskPrice: ",
>>>> AskPrice, "AskSize: ", AskSize, "Last: ", Last, "LastSize : ", 
>>>> LastSize ,
>>>> "Volume: ", Volume ))
>>>>     # TRADE LOGIC HERE
>>>>     if(!traded&&  !is.na(Last)&&  Last>= 49) {
>>>>
>>>>         print(c("inside the trading logic "))
>>>>         id<- reqIds(twsCon)
>>>>         #placeOrder(tws, twsEquity("CBA","ASX","AUD"), twsOrder(id, 
>>>> "BUY",
>>>> "1", "MKT"))
>>>>         traded<- TRUE
>>>>     }
>>>>     }
>>>> }
>>>>
>>>>
>>>>
>>>> con = twsConnect()
>>>>
>>>>
>>>>
>>>> #reqMktData(con, twsEquity("GOOG"), event=eWrapper.data(1),
>>>> CALLBACK=myCALLBACK)
>>>>
>>>>
>>>> reqMktData(con, twsEquity("CBA","ASX","AUD"),  event=eWrapper.data(1),
>>>> CALLBACK=myCALLBACK)
>>>>
>>>>
>>>>
>>>> closeAllConnections()
>>>>
>>>>
>>>> I imagine I will be back as I am actually trying to use this for 
>>>> spreads -
>>>> so now I have to move on and try two symbols, etc but for what it 
>>>> is worth
>>>> the code is there for anyone who wants to use it.
>>>>
>>>> Stephen Choularton Ph.D., FIoD
>>>>
>>>>
>>>> On 06/12/2010 10:17 AM, Jeff Ryan wrote:
>>>>> Stephen,
>>>>>
>>>>> Comments inline:
>>>>>
>>>>> On Sun, Dec 5, 2010 at 1:23 PM, Stephen Choularton
>>>>> <stephen at organicfoodmarkets.com.au>    wrote:
>>>>>> Hi
>>>>>>
>>>>>> If you read this list you will have noticed I have been working on
>>>>>> callbacks
>>>>>> and I finally got to some code that appears to work so I though I 
>>>>>> would
>>>>>> share it:
>>>>>>
>>>>>> library(IBrokers)
>>>>>>
>>>>>> myCALLBACK<-
>>>>>> function(twsCon, eWrapper, timestamp, file, playback = 1, ...) {
>>>>>>     con<- twsCon[[1]]
>>>>>>     twsOC<- twsConnect(2) # our order connection
>>>>>>     con2<- twsOC[[1]]
>>>>>>     ocWrapper<- eWrapper(TRUE)
>>>>>>     traded<- FALSE
>>>>>>     while (TRUE) {
>>>>>>         cons<- socketSelect(list(con, con2), FALSE, 0.01)
>>>>>>         if(cons[1]) { #data
>>>>>>             curMsg<- readBin(con, character(), 1)
>>>>>>             if (!is.null(timestamp)) {
>>>>>>                 processMsg(curMsg, con, eWrapper, format(Sys.time(),
>>>>>> timestamp), file, ...)
>>>>>>             } else {
>>>>>>                 processMsg(curMsg, con, eWrapper, timestamp, 
>>>>>> file, ...)
>>>>>>             }
>>>>>>         } else if(cons[2]) {
>>>>>>             curMsg<- readBin(con2, character(), 1)
>>>>>>             if (!is.null(timestamp)) {
>>>>>>                 processMsg(curMsg, con2, ocWrapper, 
>>>>>> format(Sys.time(),
>>>>>> timestamp), file, ...)
>>>>>>             } else {
>>>>>>                 processMsg(curMsg, con2, ocWrapper, timestamp, 
>>>>>> file, ...)
>>>>>>             }
>>>>>>         } # TRADE LOGIC HERE
>>>>>>         curBID<- as.numeric(eWrapper$.Data$data[[1]][3])
>>>>>>         if(!traded  ) { # add back on open:&&    
>>>>>> !is.na(curBID)&&    curBID>
>>>>>> 141.00
>>>>>>
>>>>>>             print(c("the cur bid is ", curBID))
>>>>>>             # IBrokers:::.placeOrder(twsOC, 
>>>>>> twsEquity("CBA","ASX","AUD"),
>>>>>> twsOrder(1053, "BUY", "0", "MKT"))
>>>>>>             traded<- TRUE
>>>>>>         }
>>>>>>     }
>>>>>>     twsDisconnect(twsOC)
>>>>>> }
>>>>>>
>>>>>> con = twsConnect(1)
>>>>>>
>>>>>> # contracts<-  list(twsSTK("MSFT"),twsSTK("AAPL")))
>>>>>>
>>>>>>
>>>>>> reqMktData(con, twsEquity("GOOG"), CALLBACK=myCALLBACK)
>>>>>>
>>>>>> twsDisconnect(con)
>>>>>>
>>>>>> However, even though I have tried to close down my twsCnnections, 
>>>>>> if I
>>>>>> run
>>>>>> the code twice I get a warning along the lines:
>>>>>>
>>>>>> unable to connect. client id already in use. retry with unique 
>>>>>> client id
>>>>>>
>>>>>> and R freezes.  Does anyone know how to solve the problem?
>>>>> R is likely "freezing" due to buffering on Windows (which you can 
>>>>> turn
>>>>> off in the GUI), but that isn't really the core issue.  You don't 
>>>>> need
>>>>> to have a second connection opened in the CALLBACK.  It is in the
>>>>> examples of one of my talks to illustrate having an external mkt data
>>>>> feed and IB execution.  If you are only looking at IB (for data and
>>>>> execution), DON'T use a second connection.  Seriously it is not 
>>>>> needed
>>>>> at all, and it is just making things more confusing I suspect.
>>>>>
>>>>>>  From there (on connection) close(con) or twsDisconnect(con) should
>>>>> indeed free up the client id. You can always go the route of
>>>>> closeAllConnections() route in R to 'start over'.
>>>>>
>>>>>> Incidentally I notice that the code gets  curBID<-
>>>>>> as.numeric(eWrapper$.Data$data[[1]][3]).  Does anyone know what the
>>>>>> appropriate indices are for the other data in eWrapper$.Data and 
>>>>>> what
>>>>>> that
>>>>>> data is?
>>>>>>
>>>>> As Mark points out in his reply, look at the source for the
>>>>> answers/hints:
>>>>>
>>>>> In order:  BidSize, BidPrice, AskPrice, AskSize, Last, LastSize and
>>>>> Volume.  The first four ordering mimic what it looks like when you
>>>>> stand in the pit on the floor and look at the CRTs (or your own 
>>>>> custom
>>>>> screen...) ;-)
>>>>>
>>>>>
>>>>> # from the source
>>>>>> eWrapper.data
>>>>> function (n)
>>>>> {
>>>>>      eW<- eWrapper(NULL)
>>>>>      eW$assign.Data("data", 
>>>>> rep(list(structure(.xts(matrix(rep(NA_real_,
>>>>>          7), nc = 7), 0), .Dimnames = list(NULL, c("BidSize",
>>>>>          "BidPrice", "AskPrice", "AskSize", "Last", "LastSize",
>>>>>          "Volume")))), n))
>>>>>      eW$tickPrice<- function(curMsg, msg, timestamp, file, ...) {
>>>>>          tickType = msg[3]
>>>>>          msg<- as.numeric(msg)
>>>>>          id<- msg[2]
>>>>>          data<- eW$get.Data("data")
>>>>>          attr(data[[id]], "index")<- as.numeric(Sys.time())
>>>>>          nr.data<- NROW(data[[id]])
>>>>>          if (tickType == .twsTickType$BID) {
>>>>>              data[[id]][nr.data, 1:2]<- msg[5:4]
>>>>>          }
>>>>>          else if (tickType == .twsTickType$ASK) {
>>>>>              data[[id]][nr.data, 3:4]<- msg[4:5]
>>>>>          }
>>>>>          else if (tickType == .twsTickType$LAST) {
>>>>>              data[[id]][nr.data, 5]<- msg[4]
>>>>>          }
>>>>>          eW$assign.Data("data", data)
>>>>>          c(curMsg, msg)
>>>>>      }
>>>>>      eW$tickSize<- function(curMsg, msg, timestamp, file, ...) {
>>>>>          data<- eW$get.Data("data")
>>>>>          tickType = msg[3]
>>>>>          msg<- as.numeric(msg)
>>>>>          id<- as.numeric(msg[2])
>>>>>          attr(data[[id]], "index")<- as.numeric(Sys.time())
>>>>>          nr.data<- NROW(data[[id]])
>>>>>          if (tickType == .twsTickType$BID_SIZE) {
>>>>>              data[[id]][nr.data, 1]<- msg[4]
>>>>>          }
>>>>>          else if (tickType == .twsTickType$ASK_SIZE) {
>>>>>              data[[id]][nr.data, 4]<- msg[4]
>>>>>          }
>>>>>          else if (tickType == .twsTickType$LAST_SIZE) {
>>>>>              data[[id]][nr.data, 6]<- msg[4]
>>>>>          }
>>>>>          else if (tickType == .twsTickType$VOLUME) {
>>>>>              data[[id]][nr.data, 7]<- msg[4]
>>>>>          }
>>>>>          eW$assign.Data("data", data)
>>>>>          c(curMsg, msg)
>>>>>      }
>>>>>      return(eW)
>>>>> }
>>>>> <environment: namespace:IBrokers>
>>>>>
>>>>> You can of course do whatever you like to make it more logical to 
>>>>> you.
>>>>>   Reading IBrokers source and the official Java source (yikes) is the
>>>>> way to get to a different end if you so require.
>>>>>
>>>>> Best,
>>>>> Jeff
>>>>>
>>>>>>
>>>>>> -- 
>>>>>> Stephen Choularton Ph.D., FIoD
>>>>>>
>>>>>> _______________________________________________
>>>>>> R-SIG-Finance at r-project.org mailing list
>>>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>>>>>> -- Subscriber-posting only. If you want to post, subscribe first.
>>>>>> -- Also note that this is not the r-help list where general R 
>>>>>> questions
>>>>>> should go.
>>>>>>
>>>>>
>>>> _______________________________________________
>>>> R-SIG-Finance at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>>>> -- Subscriber-posting only. If you want to post, subscribe first.
>>>> -- Also note that this is not the r-help list where general R 
>>>> questions
>>>> should go.
>>>>
>>>>
>>>>
>>>>
>>>> -----
>>>> No virus found in this message.
>>>> Checked by AVG - www.avg.com
>>>> Version: 10.0.1170 / Virus Database: 426/3301 - Release Date: 12/06/10
>>>>
>>>>
>>> _______________________________________________
>>> R-SIG-Finance at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>>> -- Subscriber-posting only. If you want to post, subscribe first.
>>> -- Also note that this is not the r-help list where general R questions
>>> should go.
>>>
>>
>>
>
> _______________________________________________
> R-SIG-Finance at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R 
> questions should go.
>
>
>
>
> -----
> No virus found in this message.
> Checked by AVG - www.avg.com
> Version: 10.0.1170 / Virus Database: 426/3303 - Release Date: 12/07/10
>
>



More information about the R-SIG-Finance mailing list