Super newbie here and as per this thread am working on developing the code to back test a momentum strategy. I believe I was able to track down the code the author used on this page. Based on my rudimentary analysis of this code, I believe it will get me to an adjusted slope which is essentially an annualized exponential slope number * r-squared. Have I read that right?

P.S. There will be errors in here as I have not defined the periods.

//Determine the Adjusted Slope for each stock in the defined universe which is the exponential slope * R-squared for each stock in the defined universe.

public double GetSlope()

{

double n = this.periods -1;

double x, y;

double[] xVals;

double[] yVals;

xVals = new double[this.periods];

yVals = new double[this.periods];

for (int i = 0; i < this.periods ; i++)

{

x = ((int)n- i);

y = Math.Log(inputs[0].LookBack(i));

xVals = x;

yVals = y;

}

double rsquared, yintercept, slope;

LinearRegression(xVals,yVals,0,this.periods - 1,out rsquared, out yintercept,out slope);

double annualSlope;

double dayCount = 250;

annualSlope = ((Math.Pow(Math.Exp(slope), dayCount))-1) *100; // Annualized percentage

//

annualSlope = annualSlope *rsquared;

return annualSlope;

}

public static void LinearRegression(double[] xVals, double[] yVals,

int inclusiveStart, int exclusiveEnd,

out double rsquared, out double yintercept,

out double slope)

{

double sumOfX = 0;

double sumOfY = 0;

double sumOfXSq = 0;

double sumOfYSq = 0;

double ssX = 0;

double ssY = 0;

double sumCodeviates = 0;

double sCo = 0;

double count = exclusiveEnd - inclusiveStart;

for (int ctr = inclusiveStart; ctr < exclusiveEnd; ctr++)

{

double x = xVals[ctr];

double y = yVals[ctr];

sumCodeviates += x * y;

sumOfX += x;

sumOfY += y;

sumOfXSq += x * x;

sumOfYSq += y * y;

}

ssX = sumOfXSq - ((sumOfX * sumOfX) / count);

ssY = sumOfYSq - ((sumOfY * sumOfY) / count);

double RNumerator = (count * sumCodeviates) - (sumOfX * sumOfY);

double RDenom = (count * sumOfXSq - (sumOfX * sumOfX))

* (count * sumOfYSq - (sumOfY * sumOfY));

sCo = sumCodeviates - ((sumOfX * sumOfY) / count);

double meanX = sumOfX / count;

double meanY = sumOfY / count;

double dblR = RNumerator / Math.Sqrt(RDenom);

rsquared = dblR * dblR;

yintercept = meanY - ((sCo / ssX) * meanX);

slope = sCo / ssX;

}