# [R-SIG-Finance] Vectorized local min/max finding

Joshua Ulrich josh.m.ulrich at gmail.com
Fri Mar 23 13:27:10 CET 2012

Here is how I would solve the problem using xts:

library(quantmod)
getSymbols("SPY")
SPY\$ma <- SMA(Cl(SPY),50)
SPY\$diff <- (Cl(SPY)-SPY\$ma)
SPY\$diff[1:50] <- 0
SPY\$grpLen <- ave(SPY\$diff, SPY\$group, FUN=length)
SPY\$grpMin <- ave(SPY\$diff, SPY\$group, FUN=min)
SPY\$grpMax <- ave(SPY\$diff, SPY\$group, FUN=max)

Best,
--

R/Finance 2012: Applied Finance with R
www.RinFinance.com

On Fri, Mar 23, 2012 at 5:07 AM, Paolo Giusti <gommoskipper at 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 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.