[R-SIG-Finance] Interactive Brokers
Noah Silverman
noahsilverman at ucla.edu
Thu Jul 14 20:39:02 CEST 2011
Guy,
That's a big help. Thanks!
I also started digging into the source code for the R library. Much of the information is buried in there.
--
Noah Silverman
UCLA Department of Statistics
8117 Math Sciences Building
Los Angeles, CA 90095
On Jul 14, 2011, at 11:23 AM, Guy Yollin wrote:
> Hi Noah,
>
> Of course Jeff Ryan is the ultimate authority on this subject and a number of his IBrokers presentations are kicking around the web.
>
> Nevertheless, here's a short script that I put together a while back to help me decipher the IBrokers messages. The script logs messages to a file; after a while, hit the escape key and the log file will be read and parsed a little bit.
>
> To go further, you can cross-reference some of this stuff with the IB API docs.
>
> Hope this helps.
>
> Best,
>
> G
>
>
> # initialize log file
> fn <- "IBlog.dat"
> if( file.exists(fn) )
> file.remove(fn)
>
> # log messages from IB
> library(IBrokers)
> tws <- twsConnect()
> equity1 <- twsEquity("SPY")
> reqMktData(tws, equity1, CALLBACK = NULL, file = fn)
> # hit the escape key after you've logged for a while
> twsDisconnect(tws)
>
> # read log file and make an xts object
> x <- read.table(file=fn,header=F,sep=" ",as.is=T,fill=T,strip.white = T)
> timeStamp.raw <- strptime(paste(x[,1],x[,2]), "%Y%m%d %H:%M:%OS")
> num.mat <- apply(x[!is.na(timeStamp.raw),-(1:2)],2,as.numeric)
> timeStamp <- timeStamp.raw[!is.na(timeStamp.raw)]
> IB.xts.all <- xts(num.mat,timeStamp)
> IB.xts <- xts(cbind(ID=num.mat[,3],MSG=num.mat[,1],tickType=num.mat[,4],parm1=num.mat[,5],parm2=num.mat[,6]),timeStamp)
> #
> # .twsIncomingMSG
> # TICK_PRICE = "1"
> # TICK_SIZE = "2"
> # ORDER_STATUS = "3"
> # ERR_MSG = "4"
> # TICK_GENERIC = "45"
> # TICK_STRING = "46"
> #
> # .twsTickType
> # BID_SIZE 0
> # BID 1
> # ASK 2
> # ASK_SIZE 3
> # LAST 4
> # LAST_SIZE 5
> # HIGH 6
> # LOW 7
> # VOLUME 8
> # CLOSE 9
> # OPEN 14
> # OPTION_HISTORICAL_VOL 23
> # LAST_TIMESTAMP 45
>
> # Trade messages
> # MSG=46,tickType=45 LAST_TIMESTAMP
> # MSG=2,tickType=8 VOLUME
> # MSG=2,tickType=5 LAST_SIZE
> # MSG=1,tickType=4 LAST
>
> # trade related messages
> trades.idx <- IB.xts[,"tickType"]==4 | IB.xts[,"tickType"]==5 | IB.xts[,"tickType"]==8 | IB.xts[,"tickType"]==45
> trades <- IB.xts[trades.idx,]
>
> # quote related messages
> ba.idx <- IB.xts[,"tickType"]==0 | IB.xts[,"tickType"]==1 | IB.xts[,"tickType"]==2 | IB.xts[,"tickType"]==3
> quotes <- IB.xts[ba.idx,]
>
> # plot sequence of trade related messages
> lastPrice <- IB.xts[IB.xts[,"tickType"]==4,]
> lastSize <- IB.xts[IB.xts[,"tickType"]==5,]
> Volume <- IB.xts[IB.xts[,"tickType"]==8,]
> lastTimeStamp <- IB.xts[IB.xts[,"tickType"]==45,]
>
> #pdf(width=8,height=4,file="IBmess.pdf")
> par(lab=c(5,1,7),yaxt="n")
> plot(lastPrice[,1],type="n",pch=18,col=2,ylim=c(0,1),yaxt="n",main="")
> title("IBroker Trade-related Messages")
> text(x=start(lastPrice)-0,y=seq(0.2,0.8,by=0.2),c("last","size","stamp","volume"),pos=2,xpd=NA)
> points(x=index(lastPrice),y=rep(0.2,nrow(lastPrice)),pch=18,col=2)
> points(x=index(lastSize),y=rep(0.4,nrow(lastSize)),pch=18,col=3)
> points(x=index(lastTimeStamp),rep(0.6,nrow(lastTimeStamp)),pch=18,col=4)
> points(x=index(Volume),y=rep(0.8,nrow(Volume)),type="p",pch=18,col=6)
> #dev.off()
>
>
> On 7/14/2011 10:12 AM, Noah Silverman wrote:
>> Hi,
>>
>> I'm just getting started on coding a script that will use the IBrokers package.
>>
>> I've worked through creating my own instance of the eWrapper list and understand how to create my own functions to handle incoming data.
>>
>> There are a few variables, "msg", "timestamp", etc. that appear to contain several pieces of data. (Perhaps they are lists or vectors?) I can't find any documentation as to the details of these variables. Subsequently, I don't know how to extract the desired information from them.
>>
>> Is there more detailed documentation of this somewhere?
>>
>> Thanks!
>>
>> --
>> Noah Silverman
>> UCLA Department of Statistics
>> 8117 Math Sciences Building
>> Los Angeles, CA 90095
>>
>> _______________________________________________
>> 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.
More information about the R-SIG-Finance
mailing list