A few weeks ago I posted about using the Top 100 Growth Stocks list on the right sidebar for finding potential buys when the market turns up. I decided to parse though my C++ code to see what beer induced formula I came up with a few years ago. Here is a summary.
- FY EPS for the next few years greater than or equal to zero (no estimate available equals 0)
- Relative Strength greater than 90
- ROE greater than 15
- Average volume over 50k a day (probably too low)
- Within 20% of 52 week high
- Current Quarter EPS Growth greater than 25% or Upcoming Estimated Growth greater than 25%
- Current Quarter EPS Growth greater than previous Quarter EPS Growth
- TTM EPS Change greater than 0
- TTM Revenue Change greater than 0
- Current Quarter Revenue Growth Greater than 20% and greater than the previous Quarter
- Previous Quarter Revenue Growth Greater than 10%
- Insiders own at least 2%
Stocks making this far are assigned a value based on fundamental and technical criteria. I will provide my C++ code at the bottom for those who just gotta know. If you can’t read the code don’t worry about it.
After all the stocks are assigned a score they are sorted and the first 100 make the list (assuming 100 stock make the initial filtering). The bottom 10-15 change daily. The top 40-50 will be in the list for weeks/months at a time. (Or until the fundamentals change and they no longer make it through the filter.)
—————————–
C++ Algorithm for Assigning a Score to Stock Making it Through the Filter
SR = Relative Strength Rank
GR = Growth Rank
MR = Management Rank
aja.Rank = (float)Data[i].CalcData.SR;
aja.Rank += (float)Data[i].CalcData.GR;
if (Data[i].ROE > 40)
aja.Rank += 30.0;
else if (Data[i].ROE > 30)
aja.Rank += 20.0;
else if (Data[i].ROE > 20)
aja.Rank += 10.0;
if (Data[i].CalcData.MR >= 90)
aja.Rank += 30.0;
else if (Data[i].CalcData.MR >= 70)
aja.Rank += 15.0;
float shout = (Data[i].SIP.Shares.Q1*10000.0);
float shareout = shout * ((100.0 - Data[i].SIP.Inst)/100.0);
float perout = Data[i].AvgVol / shareout;
float peroutscore = 500.0 * perout;
if (peroutscore > 100.0)
peroutscore = 100.0;
aja.Rank += peroutscore;
aja.Rank += Data[i].TaLib.DI_Plus;
aja.Rank -= Data[i].TaLib.DI_Minus;
if (IsCanslim(HighFilter, Data[i])) {
aja.Rank += 60.0;
}
else if (IsCanslim(GrowthFilter, Data[i])) {
aja.Rank += 30.0;
}
if (Data[i].CalcData.OffHigh < -0.25)
aja.Rank -= 50.0;
else {
if (Data[i].Price > 50.0)
aja.Rank += 50.0;
else
aja.Rank += Data[i].Price;
}
if (Data[i].SIP.ForwardGrowth > 0.50)
aja.Rank += 50.0;
else if (Data[i].SIP.ForwardGrowth > -0.99)
aja.Rank += (Data[i].SIP.ForwardGrowth*100.0);
Post Modified: July 15th, 2008 at 11:28 pm
Tags: About · Growth StocksNo Comments
0 responses so far ↓
There are no comments yet...Kick things off by filling out the form below.