Hi all

I have a few series with high-frequency tick data. The series is recorded at
millisecond resolution, and a data file can span anything from a few hours
to a calendar month.

Here is an example of one file:

2007-10-23 00:00:36.139|1.419|1.4192
2007-10-23 00:00:42.629|1.4191|0
2007-10-23 00:01:03.109|1.419|0
2007-10-23 00:01:08.109|0|1.4191

I load the file in as follows:

eurusd <- read.zoo(file="data/eurusd_EBS_11_07.dat",
    sep="|", FUN=as.POSIXct,
    col.names=c("time","bid","ask"))

# Replace zero ticks with NA, and thus locf
coredata(eurusd)[,"bid"][coredata(eurusd)[,"bid"]==0] = NA
coredata(eurusd)[,"ask"][coredata(eurusd)[,"ask"]==0] = NA
eurusd <- na.locf(eurusd)

I have a couple of questions:

1. I can see that as.POSIXct() can deal with millisecond resolution, but zoo
doesnt seem to use the millis portion of the timestamp as an index variable.
I tried to use a function as follows:

convertDate <- function(x) {
    # 2007-11-23 14:48:43.140
    as.POSIXct(strptime(x, "%Y-%m-%d %H:%M:%OS"))
}

and then used this as the FUN argument in read.zoo(), but it still complains
that index values must be unique. Is it possible to use a high-resolution
index (milliseconds or an even finer recorded granularity)?

2. What I would like to do with the data, is extract and aggregate
sub-series. So for the tick data above, if I wanted to check for diurnal
seasonality, I would like to be able to extract as a daily series, the
interarrival times of the ticks. I can  do this in a primitive way by:

# Extract data for 12/11/07
ts <- eurusd[as.Date(time(eurusd))=="2007-11-12"]

plot(time(ts)[2:length(time(ts))], diff(time(ts)), type='h',
 main="EBS EUR/USD Tick Interarrival Times\n12-11-2007",
 xlab="Time", ylab="Interrarival Time (sec)")


Is it possible to do this in a neater way? I tried using rollapply() to get
a daily rolling window, but wasnt successful.

Thanks in advance
Rory

	[[alternative HTML version deleted]]

