[R-SIG-Finance] IBrokers
Stephen Choularton
stephen at organicfoodmarkets.com.au
Wed Dec 8 22:06:18 CET 2010
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.
>>
>
>
More information about the R-SIG-Finance
mailing list