On 04/10/2010 5:29 PM, rivercode wrote:
Hi,

I am trying to create Bid/Ask for each second from a high volume stock and
the only way I have been able to solve this is using loops to create the
target matrix from the source tick data matrix.  Looping  is too slow and
not practical to use on multiple stocks. For example:

I would use loops, but something like this:

lastrow <- Bids[1,]
time <- [ some starting time ]
for (i in 2:400000) {
  thisrow <- Bids[i,]
  while (thisrow[,2] > time) {
    output lastrow for time
    time <- time + 1
  }
  lastrow <- thisrow
}

I don't see how that would be too slow, but if it was, just rewrite it in C.

Duncan Murdoch


Bids Matrix (a real one is 400,000++ length):

Bid       Time
10.03    11:05:03.124
10.04    11:05:03.348
10.05    11:05:04.010

One Second Bid Matrix (Bid price for every second of the day):

Bid       Second
10.02   11:05:03
??        11:05:04    <----Last bid price before 11:05:04.xxx, which is
11.04 at 11:05:03.348
The challenge is how to create the one second bid matrix, without looping
through the Bids Matrix to find the first timestamp that is greater than the
OneSecond  timestamp then getting the previous row price from
BidsMatrix...which would have been the bid at the beginning of that second. I am new to R, so need some help to do this “properly”.
#  OneSecond.  Matrix above called “One Second Bid Matrix”
#  BidsMatrix.  Matrix above called “Bids Matrix”

bidrow = 1

# looping through each second
for (sec in 1:length(OneSecond$Second) ) {
        t = as.POSIXlt(onesec$Second[sec],origin = "1970-01-01")
        sec.onesec = as.numeric(format(t, "%H%M%S")) # convert date/time to 
format
HHMMSS as a number
                        
          # Find bid for second, which is the last bid before a change in the
second
          for (r in bidrow:length(BidsMatrix$Price))
                {
                 # convert the BidsMatrix timestamp to number of format
%H%M%S bidTS = unlist(strsplit(as.character(BidsMatrix$Time[r]),
split="\\."))[1] # remove milliseconds
                 bidTS = gsub(":", "", bidTS) # remove ":" from time
                 bidTS = as.numeric(bidTS) # convert to number
if (bidTS > sec.onesec) {
                    onesec$Bid[sec] = bids$Price[r -1] # Price of previous bid
                    bidrow = r  # save bidrow as starting point to find next 
bid.
                    break
                  } #if
                
                }# for
        
}# for

Hope this is clear and  thanks for your help.

Chris


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to