The scoring model
Every ETF is scored 0-100 on five dimensions within the pool that passed your filters, then weighted by your chosen profile:
- Valuation — mapped directly from the PE historical percentile:
score = (1 − PE percentile) × 100. A PE percentile already says where today's valuation sits in its own history, so "cheap" is an absolute notion and is not ranked against peers. Bond and money-market ETFs have no PE and receive the neutral midpoint of 50 — neither rewarded nor penalised for a metric that does not apply.
- Dividend — percentile of dividend yield within the pool; higher is better.
- Scale — percentile of
log(scale). The log matters because ETF scale is heavy-tailed (the largest fund is 91.9B CNY, the smallest 7M — four orders of magnitude); a linear rank would squash the entire middle of the market into a few points.
- Fee — percentile of fee, inverted (lower fee scores higher).
- Liquidity — percentile of
log(20-day turnover), log for the same reason.
Tied values share an average rank, so identical inputs always produce identical scores regardless of row order.
What each column means
Every column comes straight from the underlying ETF data:
- Score — the weighted result of the five dimension scores (0-100). It ranks ETFs within a single screening run only; never compare scores computed under different filters.
- Fee (cost) — annual management + custody fee, deducted straight from fund assets. It is the most certain long-run cost: the gap between 0.50% and 0.15% compounds to roughly 3.5% over ten years.
- Scale (scope) — net asset value of the fund. Very small ETFs risk liquidation and trade with thin books and wide spreads; large scale usually means complete holdings and stable tracking.
- Dividend yield (yielD) — trailing-12-month distribution divided by price. Dividend and value ETFs tend to be higher, growth ETFs lower. Beware: a high yield can be manufactured by a falling price, or reflect a one-off cyclical payout.
- Valuation percentile (PE/PB) — where today's PE (or PB) sits within the index's own history: 0% = cheapest on record, 100% = most expensive. This is the core "is it cheap?" gauge and the basis of the valuation score.
- Premium/discount — how far the exchange price deviates from the fund's indicative NAV (IOPV):
premium = (price − NAV) ÷ NAV × 100%. A premium (positive) means you pay more than NAV — an upfront cost; a discount (negative) means you pay less. On-exchange ETFs normally stay within ±0.5%; cross-border / QDII funds can show large premiums when creation and redemption are restricted or time zones differ, so avoid chasing them.
- 20-day turnover — traded value over the last 20 sessions (raw unit is CNY; the table shows 100M CNY). It proxies liquidity: the busier the book, the closer to NAV you can trade and the lower your market impact.
Apart from Score, which the model computes, every column is raw upstream data with no adjustment, so you can reconcile it against fund-company NAV disclosures and annual reports.
About same-index substitutes
A single index is often tracked by many funds (CSI 500 has roughly ten). Since the holdings are near-identical, fee becomes the main controllable driver of long-run returns.
But fee alone is a trap. A 0.20% fund with 90M CNY in assets is not automatically better than a 0.60% fund with 31.6B — the small one carries liquidation risk and its bid-ask spread can easily exceed the fee saved.
So a substitute must:
- be strictly cheaper on fee;
- hold at least 100M CNY in scale;
- have at least 5M CNY of 20-day turnover.
Qualifying substitutes show their scale multiple and a verdict: larger scale plus lower fee is flagged Strictly better, while weaker scale or liquidity is flagged Trade-off so you can decide.
Data notes
The pool covers the 100 largest funds in each of the three big categories (broad-based, sector, style) plus every fund in global, bond, commodity and money-market categories — roughly 400-600 ETFs — cached for 12 hours. Funds below 200M CNY are excluded by default (liquidation risk and spreads). All numeric filtering (scale, liquidity, valuation, dividend, fee) runs locally on the server.