Magic Formula
Rank every stock by how cheap it is (earnings yield) and how good the business is (return on capital), combine the two ranks, and mechanically own the best ~20โ30 for a year.
The thesis โ why it works
Greenblatt compressed Buffett-style investing into two numbers: buy above-average businesses at below-average prices.
- Cheapness โ Earnings Yield = EBIT รท Enterprise Value. (EBIT and EV, not P/E, so it is neutral to debt and tax.)
- Quality โ Return on Capital = EBIT รท (Net Working Capital + Net Fixed Assets). High = the business turns capital into profit efficiently.
Rank the entire market on each metric separately, add the two rank numbers, and buy the names with the best combined rank. It is mechanical, unemotional, and diversified. In the book's backtests it beat the market handsomely over the long run โ the catch is that it underperforms often enough, and for long enough, that most people quit. That discomfort is the edge.
When to use it
- You want a rules-based value approach with minimal stock-by-stock judgment.
- You can hold 20โ30 names and rebalance roughly once a year.
- You can sit through 1โ2 year stretches of trailing the index without abandoning ship.
When to avoid it
- You want a concentrated, high-conviction portfolio.
- You can't tolerate tracking error versus the benchmark.
- Your horizon is short โ the formula needs multiple years to express itself.
The screen (Screener.in)
The pure formula ranks the whole market; Screener.in filters. So we filter down to a strong shortlist, then sort within it.
| Criterion | Rule | Why |
|---|---|---|
| Market cap | > โน500 Cr |
avoid illiquid micro-caps |
| Return on capital employed | > 25% |
the "good business" leg |
| Earnings yield | > 8% |
the "cheap price" leg |
| Sector | exclude banks / NBFCs / utilities | EBIT-over-capital is distorted for financials |
Copyable Screener.in query:
Market Capitalization > 500 AND
Return on capital employed > 25 AND
Earnings yield > 8
If your Screener view doesn't expose Earnings yield, substitute
Price to Earning < 15as a cheapness proxy. ROCE is Screener's closest field to Greenblatt's Return on Capital.
The procedure
- Run the query on Screener.in.
- Delete financials, utilities, and anything you genuinely can't understand.
- Rank the survivors two ways โ by ROCE (highโlow) and by earnings yield (highโlow) โ add each stock's two rank numbers, and sort ascending.
- Buy the top 20โ30, roughly equal-weighted. Stagger entries (e.g. 5โ7 names every couple of months) so you're not timing one day.
- Hold each name ~1 year, then rebalance into the fresh list.
Decision & risk rules
- Position size: equal weight, ~3โ5% each โ diversification is the whole point.
- Holding period: ~1 year per name; in a taxable account, mind long- vs short-term capital-gains timing.
- Rebalance: annually; replace names that dropped off the list.
- Discipline: don't override individual picks you happen to dislike โ cherry-picking breaks the mechanical edge.
- Exit / invalidation: the position's "thesis" is simply its rank; if it no longer makes the list at rebalance, it goes.
Common mistakes
- Cherry-picking names you "like" โ destroys the statistical edge.
- Too few stocks โ reintroduces single-name risk the method is designed to average out.
- Quitting after a bad year โ the historical outperformance lives on the far side of that pain.
- Leaving financials in โ their capital structure distorts both metrics.
Further reading
- Joel Greenblatt, The Little Book That Still Beats the Market.
- magicformulainvesting.com (the original US screener).
Educational only โ not investment advice. Run the screen and decide for yourself.