FactSet_Building-an-Equity-Screen_FINAL
FactSet_Building-an-Equity-Screen_FINAL
What you will see is a number of pre-built investment screens, following specific strategies or themes.
This tutorial will focus on how to build a customized screen from scratch, therefore we would select
the Starter Screen in blue, as shown above. We will follow Joel Greenblatt’s Magic Formula (MF)
approach, applying some minor customizations to increase our output quality.
2. On Formulas and Codes
FactSet uses various libraries of codes and formulas, the most common of which include FactSet
Global Constituents (FG), FactSet Fundamental (FF) and FDS codes (these are featured in the Excel
add-in). You don’t necessarily need to know the codes in order to build a screen, however having an
understanding and ability to interpret their common structure will be helpful in your analysis.
Building an Equity Screen in FactSet
• A prefix (usually depends on the library name): e.g. FactSet Global is FG_, FactSet
Fundamental is FF_, and FDS codes in Excel start with FDS().
• The data item (the specific data point we are referring to), usually followed by parentheses and
relative date notions. For example, 0 signifies the most recent updated period. When using
yearly data, that would mean the most recent year-end. Negative one (-1) would indicate one
fiscal year prior to the most recently updated year. Additional arguments may include
frequency (D, W, Q, Y), and currency (USD)
You can learn more about code libraries and formulas in the Learning Center,
and using the Online Assistant. Simply click on the question mark icon in the
top right corner, and select “Online Assistant”.
3. Building a Screen
Once into the Starter Screen, you will see three major areas (or panes):
i. Criteria pane (universe builder)
ii. Format Results
iii. Results Output
To specify the screening criteria, you can either use the text search bar or the Formula Library
through the Browse Tool:
You can think of Criteria as the universe of companies you are going to screen on. Examples can be
an index, industry, region, market cap range, etc. In the Add Criteria box (highlighted in green above)
you can specify both qualitative and quantitative filters. Criteria can be implemented on inclusion or
exclusion basis, and you can also apply custom thresholds by using formulas (< for less, > for more,
= for equal).
To increase the effectiveness of a user-built screen, it’s best to narrow down our analysis to a specific
sector or industry group. Screens who are not sector-specific are harder to build and interpret. This
tutorial will group the screen output by industry and sector groups, following Greenblatt’s MF
Building an Equity Screen in FactSet
approach. 1 This approach essentially addresses two stock characteristics – low relative cost and high
quality (as measured by return on capital). The MF screen aims to find quality firms that are trading at
a discount, and is therefore in line with the value investing framework.
The Add Criteria box has type-ahead features, so start by typing in the Criteria pane (shown on the
next page). You’ll get a list of criteria in the drop-down menu organized by categories such as Index,
Industry, and Geography (see highlight below).
You can also use the browsing tool (yellow folder) to define the universe based on either qualitative or
quantitative data. You can browse the criteria in each category. When you click on the criteria, a
detailed description is provided to ensure you pick the correct one.
1
For more information on The Magic Formula (MF) method, you can refer to Greenblatt’s “The Little Book that Still Beats
the Market”.
Building an Equity Screen in FactSet
The criteria for our screen are as follows (the title reflects the type, and the cited text is the exact
name of the criterion):
Geography:
Include “North America > United States”
Industry:
Exclude “Factset > Utilities Sector (4700)”
Exclude “Factset > Finance Sector (4800)”
Market Cap:
Include “ FG_MKT_VALUE(USD)>1000”
Security:
Include “Stock > Share/Common/Ordinary”
4. Screen report columns
At this point, we can begin filter the companies in the universe based on the criteria.
User defined formulas – if you would like to calculate a metric yourself, you can set up a user
defined formula. For example, following Greenblatt’s approach to earnings yield, we will compute it as
equal to EBIT divided by Enterprise Value.
The specific columns we want are as follows:
- EBIT: FF_EBIT(QTR,0)
- EV: FF_ENTRPR_VAL(QTR,0)
- Earnings Yield (user defined): #P.EBIT//#P.EV*100, which is Row 1/Row 2 * 100 or EBIT/EV.
Note: Row references are “#P.P1 for Row 1, #P.P2 for Row 2, etc. To make row referencing
easier, double click on the row reference to relabel it. For instance, row 1 was relabeled
“EBIT” so it was referred to as #P.EBIT.
- Working Capital: FF_ASSETS_CURR(QTR,0)-FF_LIABS_CURR(QTR,0)
- Net PPE: FF_PPE_NET(QTR,0)
- Return on Capital: #P.EBIT_2//(#P.WRK_CAP+#P.PPE)*100 or EBIT/NWC + Net PPE
- Earnings yield rank
- ROC rank
- Overall rank
The last three criteria include a ranking function that is discussed on the next page.
Building an Equity Screen in FactSet
5. Ranking
The Rank tab allows you to incorporate the results of several data measures into a unified ranking
score. FactSet first applies individual rankings to each of the columns you’ve selected. Then, you can
create an overall ranking score for each security based on user assigned weightings.
To rank earnings yield or return on capital, simply type “RANK” in the Add Columns box followed by
the row reference in parenthesis. For instance, you’d type RANK(#P.EY) to rank the companies by
earnings yield. Since a higher earnings yield is better, nothing else needs to be done. However, if
we were using a factor like leverage where lower numbers are better, we’d want to include a negative
sign (-) inside the parenthesis so that low debt levels are ranked higher. Repeat the process for
return on capital by typing RANK(#P.ROC) in the Add Columns box.
In order to create a combined ranking for Earnings Yield and ROC, we can simply apply the RANK
function to both factors as follows:
RANK(–(#P.RANK_EY+#P.RANK_ROC))<=100S
Note that in this case, the factor combines the ranks of both earnings yield and return on invested
capital. The company with the best overall ranking will be assigned a value of 1. As a result, lower
values are better. To have that ranking represented in our factor, a negative sign has been inserted
before the two factors (blue). To view the 100 companies with the best (lowest) score, we’ve inserted
<=100S (grey). The “S” just simply means the smallest. We would use an “L” if we wanted to identify
the companies with the largest combined score.
• Grouping – group the report output by a specific category. You can apply multi-layer
groupings, for example first GICS Sector classification, and second GICS Industry Group
classification
• Sorting – sort by lowest to highest or vice versa. In this case, since a “1” indicates the best
combined score (high EY and high ROC), we’d want to sort from lowest to highest.
• Statistics – lets you observe Min, Max, Average, Median, Standard Deviation and other
statistical descriptors of a data column in your report. For example, in our screen the standard
deviation observed for Earnings Yield is 7.3, which suggests a lot of variability in the output. If
we were doing a more focused, industry-specific screen, that variation would likely be
narrower. The specific statistical metric you choose will be added both on the selected
grouping levels, and overall for the whole reporting universe.
• Filter – lets you see the distribution of a column, helpful in identifying outliers and data
extremums, which are important if you are interpreting industry or group averages, since they
affect the resulting calculation.
Simply drag the rectangular interval box with your mouse cursor to exclude outliers.
• Parameter View – the parameter view is an option for your report output that lets you observe
formulas for each variable. It is helpful when you are using custom formulas, or to make sure
that you have entered everything correctly in the screen building process. Simply click on the
icon located to the right in the Results pane.
Building an Equity Screen in FactSet
8. Other Features
This screen incorporated a ranking function, but there are a lot of other functions that can be used.
Some of the more common functions are discussed below.
Threshold:
Since the screen is looking for cheap stocks, we know that some of the stocks are broken companies
that will underperform. These are typically referred to as “value traps” since the stocks are cheap for
a reason. One way of weeding out these companies, is to integrate some measure of quality. That’s
why we used ROIC in the screen.
We’ve seen examples of how momentum can be used to identify companies (or even sectors) that
have begun to catch a bid. This, too, can be useful in avoiding value traps. In a screen like this, that
would involve using a factor like price strength. As an example, the following formula measures 9-
month price strength:
(P_PRICE(-1/0/0)-P_PRICE(-9/0/0))//P_PRICE(-9/0/0)*100
As with earnings yield and return on invested capital, we’d want to wrap a ranking function around
this formula. We would also need to update the overall ranking to include momentum. The updated
function would be RANK(-(#P.RANK_EY+#P.RANK_ROC+#P.RANK_MO))<=100S. The portion
highlighted in blue represents the addition of price momentum.
Building an Equity Screen in FactSet
Another possibility is to include a measure of balance sheet strength. For example, Alman’s Z-score
(“FF_ZSCORE”) uses financial statement date to predict if the company will go bankrupt in the next
two years. Generally, companies having scores of 1.8 or lower are considered headed for
bankruptcy. If you make this criterion too conservative, however, you may be stripping out some
stocks unnecessarily. In this case, you may use a threshold of, say, 2.5:
FF_ZSCORE(ANN_R,0) > 2.5
Note: You can remove qualitative criteria by simply right-clicking on them and selecting Delete. For
quantitative ones, you have the option to Edit the formula or Delete it completely.
Industry Average:
It’s common to compare a company to its industry. As an example, instead of looking for companies
that have a P/E less than a specific threshold, you may want to look for those trading at a P/E less
than their industry average. The formula provided below returns those companies that have a P/E
(blue) less than the P/E for their industry (grey). In this case, the industry classification used is the
Global Industry Classification System (GICS), which is Standard & Poor’s classification. They divide
companies into 11 sectors, 68 industries, and 157 sub-industries.
P_PRICE(0)/FE_ESTIMATE(EPS,MEDIAN,ANN_ROLL,+1,NOW,'')<GAVG(FG_GICS_INDUSTRY,P
_PRICE(0)/FE_ESTIMATE(EPS,MEDIAN,ANN_ROLL,+1,NOW,''))
Conditional Statements:
Finally, I’d note that conditional statements (if/then) can be integrated into screens in much the same
way as Excel. For instance, if you want to create a scoring system, where companies where ROA is
increasing, you could compare the current ROA (blue) to last year (grey) using a binary scoring (o or
1) as follows:
IF((FF_ROA(ANN,0)-FF_ROA(ANN,-1))>0,1,0)