SQX Fund Rating methodology

The rating displayed on fund profiles, documented so a reader can reproduce it from the delivered files. Fields listed below are columns of the fund analytics or fund class periods file.

What the rating is

For a fund share class, the rating gives a measure and a 1–5 band. The underlying question: how well has this fund rewarded holders for the risk taken, compared with similar funds?

The rating is proprietary. Peer groups use the SQX fund category taxonomy. Inputs are the fund's filed monthly total returns (SEC N-PORT) and the NY Fed effective federal funds rate. The formula appears below and reproduces from the delivered files. The rating — its utility function, category system, and inputs — is independent of vendor ratings.

The measure

For horizons h in {1y, 3y, 5y}, on the fund analytics entry:

risk_adjusted_return_h = return_h − (γ / 2) × stdev_h² / 100

return_h (return_1y, return_3y, return_5y) is the annualised total return over the trailing h-year window. stdev_h (stdev_1y, stdev_3y, stdev_5y) is the annualised standard deviation of the monthly returns in that window. Both are in percent. The result appears on the entry as risk_adjusted_return_1y, risk_adjusted_return_3y and risk_adjusted_return_5y.

The result is a mean-variance certainty-equivalent return: the return minus a volatility penalty scaled by the risk aversion parameter γ, which is risk_aversion_gamma (2.0). At γ = 2, a 15% annual standard deviation subtracts 2.25 percentage points and a 5% standard deviation subtracts 0.25. The penalty is quadratic — doubling the volatility quadruples the penalty — so a high-return, high-volatility fund will trail a steadier fund of equal Sharpe ratio.

rating_tier states the history behind a class:

Each tier is ranked apart. A full-tier peer group blends 5y into its composites when more than blend_majority (0.5) of its portfolios carry 5y, each class counting 1/(its portfolio's classes in the group), the same fractional weight the rank uses. The rule is per class, so a class launched later scores on 3y beside a sibling that blends, and the portfolio's rank value is the mean of the two. composite_score is the result, and horizons_used lists the horizons behind it:

A 1-year return and an annualised 3-year return measure different periods. In a strong year every 1-year figure sits above every 3-year one, so ranking them together would put the funds with longer records at the bottom, so the tiers are ranked apart. Inside the full tier, 3y and the 3y/5y blend are both annualised returns over at least three years, so they share one ranking. The majority threshold keeps a few young funds from removing the 5y record from a group that mostly has one, and a few old funds from setting the measure for a group that mostly does not. The 1y stdev estimate (12 data points) is noisier than the 3y or 5y estimate, so provisional ratings move more between monthly runs than full ratings. Each class's risk_adjusted_return_1y, _3y and _5y are published whichever horizons its group ranks on.

The rank and the rating

composite_score is ranked inside the class's peer group — the category_code, cohort and rating_tier on the entry — using the ranking function shared by all statistics. A portfolio's value is the mean over its classes, fractionally weighted to keep funds with many share classes from dominating a category.

PctRank = FLOOR(99×(i−1)/(n−1)+1), where 1 is the best rank and 100 the worst.

Ties share the rank of the earliest occurrence. The quintile derives from the rank. composite_pct_rank is that percentile.

rating = 6 − quintile, so 5 is the top fifth of the peer group and 1 the bottom fifth.

Where a peer group has fewer than min_portfolios (5) portfolios with a composite, only the measure is published: rating_status = cohort_below_minimum. n_portfolios shows the peer group's size.

Rating status

rating_status is set to the highest-priority applicable value (priority from worst to best). No peer group outranks a short history: a class that can never be ranked says so whatever its depth, so a blank category_code always reads unclassified_category.

rating is populated when rating_status is provisional or rated. rating_tier separates the two: provisional for 1y-only composites, full for composites built on 3y or 5y horizons. Only classes with a return series appear in the files.

The risk measures

Fund analytics has a row per share class, keyed on the class ISIN in fund_isin, for classes with a return series at the analysis date.

Return sources

The return_source column identifies the source for the row. Horizons of a year or more always use filed monthly total returns. Short horizons (1d, 1w, 1m, 3m, YTD) use daily NAV where a close exists within nav_fresh_days (7) of the analysis date; otherwise they fall back to the monthly series.

A daily NAV change is a price return — distributions are excluded — so it understates total return for distributing funds.

Windows and gaps

All windows end at the class's own newest filed month (latest_return_month). Where a class is missing a month inside a window, that horizon is blank. months_available is the length of the unbroken run ending at the latest month.

Horizons go up to 5y; longer horizons will appear once series reach that depth.

Column definitions

Calendar years

Fund class periods includes a row per completed year (twelve months present), for the five most recent years: period_kind is calendar_year on those rows.

Comparands

Fund class periods also includes a row per class × horizon × comparand, where period_kind is trailing.

Columns: alpha (annualised Jensen's alpha on rf-excess returns), beta and r_squared (on raw monthly returns), upside_capture / downside_capture (geometric-mean fund return in the comparand's up/down months as a percentage of the comparand's own return; requires at least min_capture_months (3) such months).

comparand_type separates the two comparands:

Selecting the stated benchmark

A prospectus often lists several indexes. stated_benchmark follows a deterministic rule: take the newest prospectus at or before the analysis date among benchmarks attributed directly to the series, then those attributed to its prospectus document; a benchmark shared across documents drops out. Ties break by attribution precedence, then by index name. The selection stays stable across runs.

Read bounds

All windows end at the class's own newest filed month, which may lag the analysis date by up to max_filing_staleness_days (365). The flow and net-asset reads for investor return reach back from the oldest admissible anchor, rather than the analysis date. The year-to-date NAV base uses the year-end before the freshest close, which in the first week of January is the year-end fourteen months back.

Scope of the rating

Send your fund list. We return the underlying data: holdings, exposure, cost, liquidity, management.

Talk about coverage