On 10/04/2010 02: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:
> 
> 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.  

Not sure that I understand, but here

 y = as.POSIXlt(runif(400000, 0, 8 * 60 * 60), origin="1970-01-01")

are 400,000 times over an 8 hour window, at sub-second intervals.  Order
these (order()), find the second in which each occurs
(floor(as.numeric())), identify the last record in each second (diff()
!= 0), including the last record of the day (c()), and keep only those (o[])

  o = order(y)
  i = o[ c(diff(floor(as.numeric(y)[o])) != 0, TRUE) ]

and view the time (two different ways)

> head(y[i])
[1] "1969-12-31 16:00:00 PST" "1969-12-31 16:00:01 PST"
[3] "1969-12-31 16:00:02 PST" "1969-12-31 16:00:03 PST"
[5] "1969-12-31 16:00:04 PST" "1969-12-31 16:00:05 PST"
> head(as.numeric(y)[i])
[1] 0.9551883 1.8336520 2.8745100 3.9695889 4.8229001 5.8056079

if y were a column of df, y <- df$y and after the above df[i,]

Martin


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


-- 
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793

______________________________________________
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