Price Time Volume Investing

Timing Market Cycles using Methods of WD Gann, Elliott Wave, Geometry, Squares, Trend Lines

Price Time Volume Investing WD Gann Elliott Wave Charts of SP500 Angles

PTV-Investing Top 100 Growth Stocks Criteria

July 11th, 2008 at 3:00 pm by AndyAskey

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:   · No Comments

Leave A Comment

0 responses so far ↓

  • There are no comments yet...Kick things off by filling out the form below.