[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