
Hello,

I have to build a function that takes a time serie and calculate the momentum. For each date of the serie, I have to build a loop to calculate it using the last few data.

My problem is that it takes one minute to compute and I need to run this function very often.
I would like to vectorize it, as much as possible. 

Can somebody help me? I have read the http://www.burns-stat.com/pages/Tutor/R_inferno.pdf tutorial but it seems I am not smart enough to vectorize this.

here is the code of my function:



momentum = function(price,H,N,HL) {

indicator = price                                            #creates the empty vector for the indicator
indicator[,1]=0

if ((H/N)==floor(H/N)) {                                    #Checks if length of subperiods is an integer
    
    for (i in 1:(length(indicator)-H)) {
        ph=last(price,H+1)                                #Horizon time data list
        horizonPerformance=as.numeric(last(ph))/as.numeric(first(ph))-1    #Performance over the time horizon
        for (j in 1:N) {
            phj=last(first(ph,(N-j+1)*H/N+1),H/N+1)                #subperiod data list
            periodPerf=as.numeric(last(phj))/as.numeric(first(phj))-1    #Performance over period j
            if (periodPerf*horizonPerformance>0)                #checks consistency with time horizon perf 
            indicator[length(indicator)-i+1,1]=indicator[length(indicator)-i+1,1]+sign(periodPerf)
        }
        price=last(price,-1)                                #shift the data list
    }

}

return(indicator)
}

_________________________________________________________________
Inédit ! Des Emoticônes Déjantées! Installez les dans votre Messenger ! 

	[[alternative HTML version deleted]]


