Selecting The Target Stock Universe

Added on by Steve Auger.

As I outlined in the last post (overview), I will be performing several steps in this design-from-scratch ranking system project.  This post describes the first stage of the design process and is the most straightforward.  There are four items I am going to consider for the target universe:

  1. Choice of  standard Portfolio123 universe
  2. Minimum liquidity
  3. Minimum stock price
  4. Ranking system design process

Choice of  Standard Portfolio123 Universe

Since this is a brand new process I am inventing, I have decided to go with a fairly broad universe.  I don't like Over-the-counter (OTC) stocks and I also don't want Master Limited Partnerships (MLPs).  Therefore, my decision is to use the S&P 1500.  All stocks in this universe are listed on a major US exchange with (I believe) no MLPs and all companies are either U.S. companies or international companies with headquarters in the U.S. For me this is preferable to trying to filter out Chinese companies, a rather difficult task.


I normally design very high liquidity models with at least $5M $Volume per day, sometimes a lot higher. For this project I am going to drop my requirement down to $2M $Volume per day. The lower $Volume should give this ranking system better performance than I am accustomed to.  My portfolio design will use a buy rule of AvgDailyTot(60)>2,000,000 (minimum $2M $Volume per day on average).  But this is an average, and the filter only applies to the days preceding the trade, not the actual day of trade so one has to expect that the $Volume could be lower, either on trade day or while the stock is held.  Thus my target universe will be set to $1M, allowing stock liquidity to bounce around a little bit without dropping out of the universe.

Minimum Stock Price

I like to work with a minimum stock price of $2.  I find that this price gives very good performance in stock simulations without too much compromise on stock volatility.  I know most R2G models buy stocks down to $1 but I don't wish to go down that low.  That is my personal preference and I don't care to try to justify it.  If a developer is comfortable with buying stocks at $1 then that is OK.  You should keep in mind however that the stock price may drop down to penny stock status, and possibly fall off the exchange it is listed on.

So, if I set the minimum stock price at $2 as a portfolio buy rule then I will need to test below this price as the stock price may drop below $2.  For example, I don't want to buy at $2 and have to sell the next week because the stock price dropped to $1.95.  So I am going to set my minimum stock price for this exercise at $1.50 in the target universe.  As a general rule, I require the closing price to be above $1.50 and also a 60 day moving average to be above $1.50.  The moving average requirement is to prevent stocks with an unusual price around the lower price from being bought.

One additional check that I like to include is to make sure the stock has been around for awhile i.e. no IPOs.  For this filter I use Close(500)>1.

Ranking system design process

As a developer, I need to have a basic understanding of the ranking system design process up front.  This is important because I want to know how many stocks will be in each ranking bin which determines the reliability for the entire process. 

The first step is to enter all of the rules for the target universe into a screen as shown in the figure below.  The most recent date shows a total of 1440 stocks in the target universe.  By sampling various dates, I found a minimum of 1233 stocks at one point.  For the purpose of this analysis I am going to assume a minimum of 1200 stocks in the target universe, a little more conservative than the minimum number that I had found by sampling.

Out of curiosity I decided to repeat this experiment using the Buy rules for a potential port as shown in the figure below.  By sampling different dates, I found a minimum of 1100 stocks that fulfilled the rules.  As liquidity has increased over the years, my conclusion is that I could expect at least 1100 stocks that will meet portfolio liquidity buy rules at any given point in time in the future.

Now getting back to the target universe analysis...

I will be analyzing the 10 sectors independently, and testing with odd/even stock IDs.  Therefore, individual test universes have a minimum of  (1200 / 10) /2 = 60 stocks each.  I generally test at a rank of 80 and higher, therefore I will be testing 20% of each test universe or 60/5*0.2 = 12 stocks.  I don't know if this will be a sufficient number of stocks for test but I am going to proceed with this.  If I run into trouble there are some workarounds that I could use - I can't explain just now as I would be getting ahead of myself.

Below is a snapshot of the Test Universe with one sector specified.  Already I am below my estimate of 60 stocks in each test universe as I forgot to consider the variation in number of stocks between each sector.  Anyways, I will proceed on while keeping a close eye on this issue.  Note that I chose the Even stock-IDs as there are more stocks than the odd stock-IDs by ~50 stocks.

Donation box