Adjusting a ranking system for European (semiannually reporting) companies

Greetings all,

Let’s say you have a ranking system that you previously ran on US based universes. You now want to test the same ranking system on Europe based universes. I understand that this is not as straightforward as one would hope it is, as a lot of European stocks report semiannually instead of quarterly.

I understood from this post (European data now available on beta site - #47 by yuvaltaylor) that in the case of adjusting the lookback period, one way of approaching things is to double the amount of iterations for companies that report semiannually. This means that the standard ‘US factor’

loopsum("epsexclxor(ctr,qtr) > epsexclxor(ctr+4,qtr)",12,0)

becomes:

eval(interimmonths(0)=3,1,2)*loopsum("epsexclxor(ctr,qtr) > epsexclxor(ctr+4,qtr)",12,0)

to generalize to European (semiannual) stocks. Also, to compare semiannual statements with quarterlies, one way of approaching things is to adjust the standard factors of the form

opincq/asttotq

to:

eval(interimmonths(0)=3,1,0.5)*opincq/asttotq

Similarly, as discribed in this post (Extreme number of nodes (300)– does it damage the ranking system? - #5 by yuvaltaylor) you want to prevent using PQ and, in general, (ctr+1,qtr) in European ranking systems and instead use PYQ, TTM and (ctr+4,qtr) figures with the above mentioned adjustment. I believe this means that - for example - a standard stability factor of the form

loopsum("abs(EPSexclxor(ctr,qtr)-EPSexclxor(ctr+1,qtr))",12,0)/loopsum("EPSexclxor(ctr,qtr)",12,0)

would be adjusted to:

eval(interimmonths(0)=3,1,0.5)*loopsum("abs(EPSexclxor(ctr,qtr)-EPSexclxor(ctr+4,qtr))",12,0)/loopsum("EPSexclxor(ctr,qtr)",12,0)

I was wondering if others had encountered difficulties when looking for companies outside of the US. Are there other adjustments to take into account to adjust a ranking system for semiannually reporting companies?

Best,

Victor

Victor is correct. To summarize:

  1. Test every stock with InterimMonths(3). If it’s true, it’s a quarterly, if not it’s a semiannual.

  2. If a stock is semiannual, quarterly values for non-balance-sheet items should be divided by two to compare to other stocks. For example, a ranking mode that looks at quarterly free cash flow to assets might read Eval(InterimMonths(0)=3,1,0.5)*FCFQ/AstTotQ.

  3. If a stock is semiannual and you’re using LoopSum with a true/false statement and Ctr,Qtr, multiply the result by 2 to compare to other stocks. For example, a ranking node that measures consistency of growth might read Eval(InterimMonths(0)=3,1,2)*LoopSum(“EPSExclXor(Ctr,Qtr) > EPSExclXor(Ctr+4,Qtr)”,12,0).

  4. For semiannual companies, odd-numbered quarterly offsets will be NA, so avoid them whenever possible. This includes all the PQ factors.

The one thing that this does not address is semiannual vs quarterly estimates. There are a number of companies that report only semiannually but have quarterly estimates and actuals, especially for sales and EPS. For taking this into account, there’s a factor called ConsMonths. It returns either 3 or 6 depending on whether a company’s estimates are quarterly (3) or semiannual (6). My advice for users who rely on quarterly estimates is similar to my advice for users who rely on quarterly line items: use an Eval statement to divide all quarterly estimates and actuals by 2 if ConsMonths = 6.

1 Like