[R-SIG-Finance] Interactive Brokers

Guy Yollin gyollin at r-programming.org
Thu Jul 14 20:23:39 CEST 2011


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



More information about the R-SIG-Finance mailing list