“Hold the top 30” is the default way every screen is written, and it carries an assumption nobody states: that the pool being ranked is roughly the same size each time.
It is not. Apply a realistic set of filters to the Nifty 500 — liquid enough to trade, not under surveillance, has twelve months of price history — and the surviving count moves substantially with market conditions. In a liquid, calm market a large majority qualify. After a drawdown, with turnover collapsed and surveillance flags spreading, far fewer do.
A top-30 screen holds 30 names either way. But 30 out of 450 is the top 7% of the universe, and 30 out of 200 is the top 15%. Those are different strategies wearing the same configuration.
Percentile selection holds the proportion fixed instead
The alternative is to select a share of the universe rather than a count. Ranked by score, keep the top decile — however many names that is.
The portfolio then grows when the investable universe is broad and shrinks when it narrows, which is the behaviour you want: a narrow market is one where fewer names deserve capital, and holding the same 30 regardless means quietly diluting into names that would not have made the cut in better conditions.
The cost is that position count varies, which some investors dislike for operational reasons. That is a legitimate preference — but it should be a preference, not an accident.
Normalisation: rank, z-score, or min-max?
Once you are blending several metrics into a composite, the normalisation choice matters more than most people expect, because each method fails differently.
Z-score — subtract the mean, divide by the standard deviation. Preserves magnitude, which is what you want when the size of the gap is informative. Its weakness is fat tails: one stock up 900% produces a z-score of six or eight, and in a composite that single value dominates every other factor for that name. Winsorizing helps; it does not eliminate the problem.
Rank — replace the value with its position in the ordering. Completely immune to outliers, because the 900% winner is simply “first”. The cost is that it discards magnitude: a stock beating the next by 200 percentage points and one beating it by 0.2 look identical. For momentum, where the tails are extreme and the ordering is what the literature documents, this is usually the better trade.
Min-max — rescale linearly to [0, 1]. Bounded, which is its main virtue in a blend: a factor scaled to [0, 1] cannot swamp another factor scaled to [0, 1], whereas a z-score can range from −8 to +8. Its weakness is that the endpoints are set by two observations, so a single extreme value compresses everyone else toward the middle.
The template mixes two deliberately: rank for momentum (fat-tailed, ordering is the signal) and min-max for turnover (a supporting factor that should tilt the score, not drive it). Using z-scores for both would let one enormous mover dominate; using rank for both would throw away the fact that liquidity differences are matters of degree.
Weight caps: absolute and relative
Having selected and scored, the last question is how large any single position may get.
An absolute cap — no name above 6% — is the obvious control and the one most people apply. It bounds single-name risk directly.
A relative cap is the more interesting one, and it is the rule NSE writes into its factor index methodology: a stock’s weight may not exceed a multiple of its own market-cap weight. Their construction is “the lower of 5% or 5× the stock’s weight in a cap-weighted index.”
The relative cap solves a problem the absolute cap cannot see. Suppose a ₹2,000 crore company posts the single best momentum score in the universe. An absolute 6% cap happily allows 6% of your book in it. But 6% of a large portfolio may represent many days of that stock’s entire traded volume — a position you can enter slowly and cannot exit at all in a hurry. The relative cap scales the ceiling to the company’s actual size in the market, so a small company gets a small allowance no matter how good its signal.
Applying both and taking the lower is what NSE does. It reads as belt-and-braces and is really two different risks: single-name concentration, and liquidity you cannot get out of.
Annotating without filtering
One more distinction the template demonstrates.
An event rule normally filters — keep only names with a recent event. The same rule can instead run in annotate mode, where every name passes through and simply carries a note of how long ago the event happened.
That matters for dividends specifically. A stock going ex-dividend drops by roughly the dividend amount on the ex-date. In a price series that looks exactly like a small loss, and in a momentum screen it depresses the score for no economic reason — the holder received the cash. Annotating each holding with days-since-ex-dividend does not change selection; it means that when you look at a position that dropped 2% on a particular day, you can see whether it was a decline or a distribution.
The general principle: not every signal should gate the portfolio. Some should just be visible.
Try it
The Top-Decile Momentum template selects the top 10% by a rank-and-min-max composite, annotates ex-dividend recency without filtering on it, and caps positions at the lower of 6% or 4× market-cap weight.
The comparison worth running: set the selection back to a fixed top 50 and compare the number of holdings over time against the percentile version. In steady markets the two will track. Where they diverge is where the fixed-count screen was quietly changing how concentrated your bet was.
Further reading
- Momentum investing in India: why the best signal skips last month is the strategy where a fixed top-30 count shifts meaning most between regimes
- Sector-neutral factors: why cross-sector ratio screens mislead covers the group-level cap that belongs next to the per-name one
- Selection and sizing decay at different speeds on how often these caps should actually be re-applied
Glossary: quantile sort, concentration limit, z-score, winsorization, market-cap weight.