Recommendations: 17
Here is a screen that might interest some. I have used the Sum of Weighted Ranks (SoWR) procedure described by BarryDTO (msg 205269). The ranks are either percent rank within an industry or within the whole market. And the usual population defining metrics are used. The GTR1s CAGR/GSD/Sharpe/AT results below are for the fifteen year period 19980102 to 201212131 for 21 days. Minimum liquidity is pav63p.a > 30 (approximately $400,000 per day in 2012): Stocks 1  3 1  5 1  10 1  30 CAGR 54.37 51.40 51.14 43.21 GSD 68.78 55.71 43.51 36.63 Sharpe 0.99 1.08 1.25 1.26 AT 9.18 8.74 8.17 7.56
Blender results for ten stocks for the same period: CAGR: 51.14 TR: 57159.09 GSD: 43.51 DD: 24.23 MDD: 57.93 UI(20): 14.61 Sharpe: 1.25 Beta: 1.12 TI(20): 41.33 AT: 8.17
The New screen and High Relative Value screen comparison. Both cover the ten year period, 1998 – 2007, with ten stocks and 0.3 friction: HRV NEW CAGR: 36.09 71.20 TR: 2087.18 22759.98 GSD: 22.10 44.99 DD(20): 10.02 24.11 MDD: 23.84 57.64 UI(20): 5.58 12.11 Sharpe: 1.44 1.53 Beta: 0.52 1.08 TI(20): 58.39 54.60 AT: 11.16 8.25
year ending HRV NEW 19981231 17.5 84.5 19991231 84.1 133.7 20001229 63.2 8.7 20011231 31.3 117.8 20021231 13.3 48.9 20031231 80.1 154.5 20041231 34.7 96.2 20051230 4.3 39.3 20061229 55.7 53.3 20071231 10.7 71.8
This new screen uses the Sum of Weighted Ranks to select stocks with desirable combinations of fundamental and momentum metrics. These variables are expressed as percentages within its industry: fcfps12m.s "[SI Free Cash Flow/Share 12m]" shrinsd.s "[SI Insider Ownership %]" shrinst.s "[SI Institutional Ownership %]" petog5f.s "[SI PE to EPS Growth 5 Years]" salesg5f.s "[SI SalesGrowth 5yr]" cpsq1.s "[SI Cash per Share Q1]"
These variables are expressed as whole market percentages: Vol(1,252), rrs(1,63), rrs(1,189) and the ratio of av10.a. to av63.a . The GTR1 version of this screen can be found at: http://gtr1.backtest.org/2011/?s19980102e20121231h21f.3::sty....
In case pasting is necessary: s19980102e20121231h21f.3::styp.a:ne30!31!32!33!34!35!38:fincd.a:ne45!46!47!48:pav63p.a:gt30:dspo:gt253:IND:gt0:linear(23,PEG,7,SG,150,FCF,7,CAPr,8,INSD,24,INST,31,VolRatio,12,Volit,60,RRS63,50,RRS189)tn20:Pr:aprc:IND:fincd.a:PEG:pcntl(petog5f.s,IND,step5,1):SG:pcntl(salesg5f.s,IND,step5,1):FCF:pcntl(ratio(fcfps12m.s,Pr),IND,step5,1):CAPr:pcntl(ratio(cpsq1.s,Pr),IND,step4,1):INSD:pcntl(shrinsd.s,IND,step5,1):INST:pcntl(shrinst.s,IND,step5,1):VolRatio:pcntl(ratio(av10.a,av63.a),1,step5,1):Volit:pcntl(vol(1,252),1,step5,1):RRS63:pcntl(rrs(1,63),1,step5,1):RRS189:pcntl(rrs(1,189),1,step5,1).
Command Translation Create [Pr]: [Actual closing Price; share_lag=1 days; quote_lag=1 days] Create [IND]: [Fama/French Industry Code; lag=1 days] Create [PEG]: [% Rank by [SI PE to EPS Growth 5 Years; lag=1 days] (Desc), grouped by [IND], at step5] Create [SG]: [% Rank by [SI SalesGrowth 5yr; lag=1 days] (Asc), grouped by [IND], at step5] Create [INSD]: [% Rank by [SI Insider Ownership %; lag=1 days] (Asc), grouped by [IND], at step5] Create [INST]: [% Rank by [SI Institutional Ownership %; lag=1 days] (Desc), grouped by [IND], at step5] Create [Volit]: [% Rank by [TR1Volatility over 252 periods; lag=1 days] (Desc) at step5] Create [RRS63]: [% Rank by [RRS over 63 days; lag=1 days] (Asc) at step5] Create [RRS189]: [% Rank by [RRS over 189 days; lag=1 days] (Asc) at step5] Create [FCF]: [% Rank by [[SI Free Cash Flow/Share 12m; lag=1 days]/[Pr]] (Asc), grouped by [IND], at step5] Create [CAPr]: [% Rank by [[SI Cash per Share Q1; lag=1 days]/[Pr]] (Asc), grouped by [IND], at step4] Create [VolRatio]: [% Rank by [[Actual Average daily Vol 10d; lag=1 days]/[Actual Average daily Vol 63d; lag=1 days]] (Asc) at step5] step0: [Security Type; lag=1 days] != 30,31,32,33,34,35,38 step1: [IND] != 45,46,47,48 step2: [Actual Price * (Average daily Vol 63d) as fullmkt Percent rank; lag=1 days] > 30 step3: [mkt Days Since security Opened for purchase] > 253 step4: [IND] > 0 step5: [23*[PEG] + 7*[SG] + 150*[FCF] + 7*[CAPr] + 8*[INSD] + 24*[INST] + 31*[VolRatio] + 12*[Volit] + 60*[RRS63] + 50*[RRS189]] Top param0; Long, Cash When Fewer Holding period = 21 mkt days; Fully rebalance every 1 periods
GSD, Sharpe, etc. need improving. Corrections, comments and suggestions would be appreciated.
John W

Recommendations: 1
With a level of volatility that's almost 3x the SP500, that would make for one heckuva wild ride...

Recommendations: 0
If you add price>$5 and price*volume >100,000, I think you may find a massive dropoff in the return.

Recommendations: 0
I like the screen, thanks tpoto. It didn't suffer much when using a daily dollar volume (price * average 10 day volume) of $750K, which is what I use in all of my screens, with no minimum price. I'm fine with buying $2 stocks, as long as they are trading enough.
Also, taking out the two statements relating to FLOAT didn't change things much. Also took the dspo > 127 out here, just like to have as few lines as possible in the code.
http://gtr1.backtest.org/2011/?s::product(sprc,av10.a)gt7500...
Mark

Recommendations: 1
GSD, Sharpe, etc. need improving. Corrections, comments and suggestions would be appreciated.
Nice screen. BarryDTO quite rightly pointed out that the SoWR method has less (over)tuning possibilities, with the important exception of the weighting factors. I notice that this screen has some unusual and rather precise looking weights. John W  how did you arrive at these values and how robust/brittle are the results to changes in their values? I note that if you set them all to 1, except for the rrs weights to 2, then CAGR and GSD go down a little, Sharpe is a little better and DD improves
Mark

Recommendations: 10
I like the overall approach, in particular the use of "within industry" rankings.
suggestions would be appreciated
Here's a simple one: Why seek high volatility? If you leave that out at 20 stocks deep it gives higher CAGR, steadier returns (lower rolling six month downside deviation) and a slightly simpler screen. http://gtr1.backtest.org/2011/?s19980102e20121231h21i126f.3:... As a general rule, and contrary to much academic claptrap, less volatile stocks have better performance.
That list of weights sure does look like it has been pretty carefully [over?]tuned. To get an idea of how much that matters, I tried a detuned version with all the weights set to 1 except free cash flow which is clearly the heavy one. (that choice itself wasn't tuned, it's the only thing I tried)
At 20 stocks deep CAGR drops from 44 to 36 and pseudodowndev rises from 14 to 18 At 10 stocks deep CAGR drops from 51 to 41 and pseudodowndev rises from 19 to 25 So it looks like the tuning is giving both higher and steadier returns. To the extent that it's useful or harmless tuning, that's fine, but real life results won't be as good as either of those. One might also try a detuned version with (say) only two weightings of either "high" or "low" for all the different parameters. Maybe weight 1 for some and a single weight (2.5?) for all the others, something like that.
Have you tried a "no financials" version? Nothing to do with the financial crisis, but more because things like revenue and free cash flow don't mean nearly the same thing at a bank. There are similarly good reasons for perhaps considering noutilities and nomines/materials versions, as they are not the "plain product or service" firms for whom so many great metrics are useful (sales, cash flow, free cash flow, ROE).
This is fairly strongly slanted to being a growth/momentum shootforthe moon screen: sales growth, EPS growth, momentum. It would be interesting to contrast it with a companion value screen built the same way. Longer lookback momentum, more value parameters like current EY, average earnings last N years as a % of price, dividend yield, ROE.
Not sure if this will help, but unlagged company momentum works well, and so does lagged momentum for a single company. RRS is a lot like lagged momentum. One of the rankings potentially worth putting into the mix is a percentrank of simple nolag shortlookback RS of the industry versus other industries. This is the "salmon" approach: going against the stream as you want to deemphasize (allow weak) short term performance of a company within an industry having strong short term performance.
Jim

Recommendations: 0
A quick answer on parameters. In an earlier version of the screen, I had Negative Values where one might expect positive one. I had 27*ROA where ROA was based on roay1.s percentile rank and 11*CR which was based on curry1.s percentile. My best guess is that a SoWR screen is very similar to multiple regression equation and this screen has a multicollinearty problem. Some of the independant variables are highly correlated and this will cause the tuned parameters to differ fom their expected values even to the extent of sign reversal. So the tuned parameters may be misleading outside of the model, but the descriptive model as a whole, remains valid. I cannot provide a link right now (Oops! Internet Explorer could not connect to gtr1.backtest.org), and I have guests arriving so I cannot comment further today, but will tomorrow. Thanks for the comments so far.
I would like to hear comments on the above explanation by staticians (or others) on this board.
John W
Happy Chinese New Year!

Recommendations: 3
Some of the independant variables are highly correlated and this will cause the tuned parameters to differ fom their expected values even to the extent of sign reversal. So the tuned parameters may be misleading outside of the model, but the descriptive model as a whole, remains valid.
I suspect you already know this, but it is worth reemphasizing  extensive tuning to fit historical data often leads to worse results going forwards than less tuned variants. I find what Bill Eckhardt has to say on the topic (albeit wrt futures trading) useful:
from http://www.futuresmag.com/2011/03/01/williameckhardtthema...
FM: Talk about the battle between optimization and curve fitting.
BE: By trying to improve your system you can make it worse. You can overfit to past data or maybe just do something that is statistically invalid. There is an idea, though it is not universally subscribed to, that you should not optimize your systems. That you should just figure out what are reasonable numbers and go with that. I don’t believe in that; we optimize all the time, but there is some truth to it in the sense that if you overfit, you are going to hurt yourself. Optimizing is a somewhat hazardous procedure, as is trading. And it has to be done with carefulness and deliberateness, and you have to make sure that you are not overfitting to past data.
FM: How do you ward off curvefitting?
BE: What most people use to ward it off is the insample/outofsample technique where they keep half their data for optimization and half their data for testing. That is an industry standard. We don’t do that; it wastes half of the data. We have our own proprietary techniques for overfitting that we actually just improved on a year ago. It is important to test for overfitting; if you don’t have your own test use the insample/outofsample [technique].
I can talk a little more about overfitting, if not my personal proprietary techniques. First of all I like the [term] overfitting rather than curvefitting because curvefitting is a term from nonlinear regression analysis. It is where you have a lot of data and you are fitting the data points to some curve. Well, you are not doing that with futures. Technically there is no curvefitting here; the term does not apply. But what you can do is you can overfit. The reason I like the term overfit rather than curvefit is that overfit shows that you also can underfit. The people who do not optimize are underfitting.
Now the two numbers that most determine if you are overfitting are the number of degrees of freedom in the system. Every time you need a number to define the system, like a certain number of days back, a certain distance in price, a certain threshold, anything like that is a degree of freedom. The more degrees of freedom that you have the more likely that you are to overfit. Now the other side of it is the number of trades you have. The more trades you have, the less you tend to overfit, so you can afford slightly more degrees of freedom. We don’t allow more than 12 degrees of freedom in any system. If you put more bells and whistles on your system it is easy to get 40 degrees of freedom but we hold it to 12. On the other side of that, for us to make a trade we have to have a sample of at least 1,800; we won’t make a trade unless we have 1,800 examples. That is our absolute minimum. Typically we would have 15,000 trades of a certain kind before we would make an inference as to whether we want to do it.
The reason you need so many is the heavy tail phenomena. It is not only that heavy tails cause extreme events, which can mess up your life, the real problem with the heavy tails is that they can weaken your ability to make proper inferences. Normal distribution people say that large samples kick in around 35. In other words, if you have a normal distribution and you are trying to estimate a mean, if you have more than 35 you’ve got a good estimate. [In] contrast, with the kind of distributions we have with futures trading you can have hundreds of samples and they could still be inadequate; that is why we go for 1,800 as a minimum. That is strictly a function of the fatness of tails of the distribution. You have to use robust statistical techniques and these robust statistical techniques are blunt instruments. [They] are data hogs, so both seem to be disadvantages but they have the advantages of tending to be correct.

Recommendations: 11
I have used the Sum of Weighted Ranks (SoWR) procedure ...
Ah, someone other than tetranomad is looking at this approach  interesting. I thought I'd offer a few thoughts since my name is attached:
 Mungofitch indicated he thought high volatility was sought here; however, it's actually low volatity that is emphasized as any weight is applied to the criteria "Volit" (because of the opposite sort applied in the ranking). As you seemed to indicate and someone else noted, bringing down the volatility of screen results would be helpful. A simple run of your screen as is, but parameterizing the weight given to the Volit criteria indicates a weight of 70 seems to do the job:
http://gtr1.backtest.org/2011/?s19980102e20121231h21f0.3::st...
shows a 20stock CAGR/GSD/Sharpe of 34 / 23 / 1.44 (versus your original 43 / 37 / 1.26), and 10stock results of 36 / 24 / 1.40 (versus your 51 / 44 / 1.25)
 Tetranomad cautioned against optimizing against too many selection criteria and parameters. I've also said in earlier posts that I'm not a big fan of the "kitchen sink" approach to including selection criteria (I've seen the opposite opinion from others in recent posts, but hey, that's what makes a market!). Although 5 criteria may still be too many for my taste (and these 5 may not be the best ones), I looked at possible parameters for the following 5 criteria of those you included, since they seemed at first glance to be "most important": FCF, VolRatio, Volit, RRS63, RRS189. Here's a look at one screen using these (with further parameter optimization possible):
http://gtr1.backtest.org/2011/?s19980102e20121231h21f0.3::st...
shows 20stock results of 27 / 19 / 1.32 and 10stock results of 32 / 21 / 1.45 (worse than the screen above for 20 stocks, but better for 10 stocks).
 As I've described before, I have a preference for requiring a minimum dollar volume throughout the backtest period rather than a percentile dollar volume. Using $500,000 throughout the period reduces these results further:
http://gtr1.backtest.org/2011/?s19980102e20121231h21f0.3::st...
shows 20stock results of 23 / 19 / 1.16 and 10stock results of 28 / 21 / 1.29.
 I looked at ranking FCF across all stocks, rather than the within industry approach you used (and HRV uses). Results were worse by ranking across all stocks  I may have to relook at incorporating this into screens where I use various valuation criteria (as I did in the "Parsimony and Bang for Buck" post last year).
 I think it would be important to look at 19871997 results. I'm not sure if the industry codes in the gtr1 backtester (versus gtr1/2011) have the same value definitions for "pref(incd.s, incd.f)" as for fincd.a in the 2011 version, so I don't know if excluding your industry codes of 45 through 48 would be accomplished the same way. My interpretation of excluding these codes is that the following broad industries are excluded: Banking, Insurance, Real Estate, Finance. Perhaps others can comment on how to look at this "out of sample" period (and whether excluding all these industries is really appropriate). The gtr1 backtester would also need to use the appropriate field to capture FCF.
Those are my quick thoughts  thanks for presenting the screen.
Regards, Tim

Recommendations: 1
Mungofitch indicated he thought high volatility was sought here; however, it's actually low volatity that is emphasized as any weight is applied to the criteria "Volit" (because of the opposite sort applied in the ranking).
Sorry! Ingore my comments about that. I didn't spot the "sort descending"
Jim


