What Universe do you use?

So I've been gone for > 1 yr Jan 2024 and coming back in order to look at OOS results from my previous Books/Strategies. And unfortunately 2024-2025 looks terrible for my long system, so I'm going back to the beginning.

What universes do you use? Here is a screen print of what I was using, but I am generally interested in what everyone is using. If you are excluding sectors, why? I previously excluded UTILs, REITS, INSURANCE, but is this a good idea? What about FINANCE?

The easy-to-trade universe is a great starting point. I don't exclude sectors, but I do have one rule of thumb: to avoid stocks that have never turned a profit: LoopMax ("OpInc (Ctr, Ann)", 10) > 0 or LoopMax ("OpInc (Ctr, Qtr)", 20) > 0. I also exclude M&A stocks: DaysFromMergerAnn = NA. For tax purposes you might want to use the following rule: !CoName("*LP"). You probably also want to exclude stocks with stale statements: StaleStmt = 0.

4 Likes

fwiw, a few I use

Universe(NOOTC) and Universe(MasterLP)=False and Universe($ADR)=False

!RBICS(30) OR RBICS(303015) //exclude 30 Financials, Real Estate, allow 303015 is finance software svcs subindustry

DaysLate <=5 //will exclude late filers usually, although I've had cases where sometimes they've filed and the system just hasn't recorded it, but there are companies in the dbase that haven't filed in a long time.

DaysFromMergerAnn = NA

Country("country codes") = False //if you want to exclude certain country codes

1 Like

Usually excluding stocks from China seems to improve sims: Country("CHN") = False

I use a loop to guarantee consistent liquidity. Like this example which checks the liquidity every 10 trading days for the last 50 days:
LoopMin("AvgDailyTot(10,CTR)",5,0,10,TRUE) > 50000

FYI - The loop above would give the same results as writing this way:
AvgDailyTot(10)>50000 AND AvgDailyTot(10,10)>50000 AND AvgDailyTot(10,20)>50000 AND AvgDailyTot(10,30)>50000 AND AvgDailyTot(10,40)>50000

Using AvgDailyTot(50) would have some where there was a big spike in liquidity (EPS released, etc) and then weeks of very little liquidity.

I also require at least $500k in sales in some strategies. This eliminates SPACs, exploration companies, biotech, etc.
Salesq >= .5

1 Like

Imo the first question is if you want to use a vanilla universe and filter it via buy/sell rules or if you want to create a more restrictive custom universe instead excluding sectors, illiquid names, LargeCaps etc. beforehand. The decision of course strongly impacts ranking and you have to test which way provides better signal/noise ratio. I prefer the latter (I start with North Atlantic Primary and put all my size, liquidity, sector filters in the universe instead of the buy/sell rules.

It also can be advisable to restrict exchanges to create a more realistic universe e.g. for IBKR. For ExUS I use the following in this regard:

Yuval, Do you do this within your universe or within your buy rules, or both? As I also eliminate via DaysFromMergerAnn = NA and StaleStmt = 0, but only within my Buy Rules and not within my universe... Perhaps I should include those rules within my universe...

I use 4 universes. The base one is a liquidity constrained NOOTC with Spread(0)/Close(0) < .01 added to further address liquidity.

Two versions exclude the Energy Sector. Some screens get a significant boost by doing this. Volatility also tends to decrease.

Two versions have Between(WeeksIntoQ, 0, 14) = TRUE. I was doing some research on earnings releases last year and the one somewhat creditable observation was this. Again for some screens.

Part of the development process is to see which universe works best with the rules as there can be quite a difference.

Cheers,
Rich

In simulations, I use all those in my universe rules. In the screens I use every day for my live trading I do not eliminate StaleStmt stocks, instead using a ShowVar command so that I can take held stocks with stale statements into account.

In general, a good rule of thumb is to put as many criteria as you can into your universe rules and to leave your buy rules relatively simple. The reason is that you don't want to rank a bunch of stocks that you're never going to buy.

2 Likes

100% agree

There are certain buy rules that if placed in the universe instead of my sim, cause a dramatic decrease in performance in my sims.
For example rules like: Pr4WRel%Chg > 0.6 or AltmanZOrg > -6

While other rules like AvgVol(20) > 50000, cause a dramatic increase if I put them in the universe instead of the sim.

I don't know why.

2 Likes

Yuval, your rule of thumb makes perfect sense, thanks! :+1:

Where I (and, I suspect, others) still get stuck is the cross-sector comparability issue if we do not exclude sectors. If every GICS sector stays in the universe, our ranking model can end up overweighting or underweighting groups that the market prices on different yardsticks. For example:

  • Banks & Insurers: price-to-book, return on equity
  • Energy E&P / Mining: EV/EBITDA, reserve life, proved reserves
  • Regulated Utilities: dividend yield, P/E on stable earnings
  • Equity & “infra” REITs: price-to-FFO, discount to NAV
  • Shipping & Airlines: net asset value vs. cycle-adjusted cash flow
  • Early-stage Biotech / Pharma: enterprise value vs. cash burn

When one factor (say, low P/E) is applied across the board, a portfolio can become a utility fund in disguise while skipping growth-stage biotechs that never show accounting earnings.

Thanks in advance for any ideas!

One thing to consider is if you use "force position into universe"... Also it might be important where in the universe the characteristic you want to filter out is concentrated...

To brainstorm: I would assume, if the characteric is evenly/randomly distributed across the universe (e.g. avgVol(20)>50k), putting it in the universe screen is better. If the characteric is highly cyclical, depends on market-regime or tends to concentrate in certain sectors (Like Pr4WkRel%chg or AltmanZ) is might mess too strongly with universe size and composition over time if put in there as a filter (better as buy/sell rules?)

Possible Conclusion: The more static the rule, the better it is to use it as a universe filter?

I do two things to mitigate this. First, I use SubSecCount < X in my buy rules. Second, I include in my ranking system a node that assigns values to each subsector. It looks like this: 1*RBICS(3015) + 2*RBICS(65) + 3*RBICS(3025) + . . .

1 Like

Any thought on that @yuvaltaylor ? Altman Z in my case seems to work better as a buy rule instead as a limitation into Universe...and I don't know why exactly neither

For a long time, I used universes with a minimal amount of filtering, then buy/sell rules on the ranked results. Now, for models that hold 20 stocks or more, I tend to favor filtering the starting universe with most or all of the buy rules before the remaining stocks are ranked. Either approach can work, so I suggest trying both approaches.

2 Likes

I use a mix depending on the circumstance. One caution is to select 'force positions into universe' so that it doesn't get kicked out just because liquidity temporarily dropped (assuming you use a liquidity filter at the universe level). Or some other reason that it drops out of the universe such as price going up high and suddenly marketcap is above the threshold where you normally buy stocks. But that doesn't mean you want to sell just because the stock is doing great.

3 Likes

Have you tried moving those universe rules into the buy rules one at a time to see how it affects the performance? I was very surprised how different it was in my sims.

Try it with fifty very different ranking systems and universes and see what happens. If something works better as a buy rule than as a universe rule in the majority of cases, does it also work better than not having a rule at all? I'd be surprised if both were the case, unless the rule excludes very few companies.

1 Like

" Have you tried moving those universe rules into the buy rules one at a time to see how it affects the performance? I was very surprised how different it was in my sims."

Interesting suggestion! I haven't tried a systematic 1:1 movement of each individual rule, so I will!

1 Like