ETF Screener

Screen on-exchange ETFs by category with a five-factor score (valuation, dividend, scale, fee, liquidity) and automatically surface cheaper funds tracking the same index.

Five-factor scoring for on-exchange ETFs, with automatic cheaper same-index substitutes Set your category and thresholds; the tool scores every qualifying ETF across valuation, dividend, scale, fee and liquidity, then ranks them. For each pick it lists cheaper funds tracking the same index, flagging any scale or liquidity trade-off.

Screening criteria

~ %

How the five-factor score works

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:

  1. be strictly cheaper on fee;
  2. hold at least 100M CNY in scale;
  3. 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.

FAQ

Why are the scale and turnover filters computed locally?
The upstream API silently drops where-conditions on scale and turnover — querying "scale >= 10B CNY" returned 100 rows of which 98 violated it. This tool therefore only sends category conditions upstream and computes every numeric threshold locally, so results are actually correct.
Does a higher score mean I should buy it?
Not necessarily. The score compresses five quantifiable dimensions into a ranking; it does not forecast returns. A low valuation percentile can be a value trap, a high yield can come from a cyclical peak, and large scale does not imply upside. Treat it as a screening starting point, not a decision.
Why do ETFs on the same index perform differently?
Beyond fees, returns differ through IPO-allotment income, rebalancing execution, cash drag and tracking error. Fee is the most stable and controllable of these, which is why this tool compares it first.
Why only a few hundred ETFs instead of all of them?
The upstream returns at most 100 rows per query with no pagination, so the three largest categories take their top 100 by scale. This matches the product intent: very small ETFs carry liquidation risk and wide spreads and are not good screening candidates anyway.
How often does the data refresh?
The full pool is cached for 12 hours. ETF scale, valuation percentiles and fees move slowly, so once a day is enough. Adjusting your criteria during the cache window costs no API quota and recomputes instantly.