Perhaps the following would work for you:

diffs <- sin(1:20)  # Some random data
crosses <- which(sign(diffs[1:(length(diffs)-1)] * diffs[2:length(diffs)])
<= 0)+1

1) length(crosses)
2) diff(crosses)
3) sapply(2:length(crosses), function(k)
min(diffs[crosses[k-1]:(crosses[k]-1)]))

Matthew Clegg

On Fri, Mar 23, 2012 at 6:07 AM, Paolo Giusti <gommoskipper@gmail.com>wrote:

> I am trying to find a vectorized solution (if there is one) to a simple
> problem.
>
> I have a vector of values representing the close prices of a security
> and another vector of their moving average.
> I construct a simple "distance" object of their difference:
>
> diff <- close - ma
>
> Now I would like to calculate some simple statistics like:
>
> 1. The number of times the diff crosses the '0' line
> 2. The duration between each cross (number of samples)
> 3. The min and max values of diff between each cross.
>
> This is easy to do using "for loops" but really slow. Given this is a
> really basic problem I'm hoping that there a faster solution.
>
> Thank you
> Paolo
>
> _______________________________________________
> R-SIG-Finance@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.
>



-- 
Matthew Clegg
matthewcleggphd@gmail.com

	[[alternative HTML version deleted]]

