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.
composite_score is the weighted mean of available horizons, and horizons_used lists the horizons behind the figure:
- 3y and 5y both present. Composite: 0.4 × RAR_3y + 0.6 × RAR_5y; horizons_used: 3y,5y; rating_tier: full
- 3y only. Composite: 1.0 × RAR_3y; horizons_used: 3y; rating_tier: full
- 1y only, 12–35 gap-free months. Composite: 1.0 × RAR_1y; horizons_used: 1y; rating_tier: provisional
- Fewer than 12 gap-free months. The composite is blank; rating_status = insufficient_history; horizons_used and rating_tier stay blank
A fund with 36+ months of history is scored on its 3y and 5y horizons and receives a full rating. A fund with 12–35 months is scored on its 1y horizon and receives a provisional rating. In both cases the fund is ranked against peer composites whatever horizons those peers used, while scoring rests on its own horizons. 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.
The rank and the rating
composite_score is ranked inside the class's peer cell — the category_code and cohort 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 cohort and 1 the bottom fifth.
Where a cohort has fewer than min_portfolios (5) portfolios with a composite, only the measure is published: rating_status = cohort_below_minimum. n_portfolios shows the cohort 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.
- unclassified_category. The portfolio has no category to rank in; the composite is computed where history allows
- insufficient_history. Fewer than 12 gap-free months; the composite is blank
- cohort_below_minimum. The composite is computed, though the cohort contains fewer than five portfolios
- provisional. Rank and rating published from 12–35 months of history; rating_tier: provisional
- rated. Rank and rating published from 36+ months of history; rating_tier: full
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
- return_1y/3y/5y. Monthly total returns compounded and annualised geometrically for horizons above 12 months
- growth_10k_1y and its longer horizons. 10,000 × (1 + cumulative return over the window)
- stdev_1y and its longer horizons. Sample standard deviation of the window's monthly returns × √12
- sharpe_1y and its longer horizons. Mean(monthly return − rf) × 12 ÷ (stdev(monthly return − rf) × √12); rf is the month's mean daily EFFR ÷ 12; requires a rate for all months in the window
- max_drawdown_3y and max_drawdown_5y. Worst peak-to-trough of the compounded path, as negative percent; peak month, valley month, and distance appear alongside
- return_since_start. Compounded over the unbroken run from history_start_month
- investor_return_1y and its longer horizons. Money-weighted IRR (−opening net assets, −(sales − redemptions) per month, +closing net assets) annualised; computed at portfolio level and published to the classes; investor_return_status grades the 1y window
- risk_status. Values: no_monthly_returns / gap_in_series / insufficient_history / ok; return_1y is populated where the status reads ok
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:
- category. The class's peer cell as an equal-weighted monthly series over member portfolios. A month with fewer than 5 members counts as a gap. Available wherever the category has a year of shared history. For UITs, the peer cell is the remaining-term bucket by days to termination, shared by the rating and the peer engine.
- stated_index. The prospectus benchmark, available where our index-proxy map identifies a proxy fund whose share classes have returns in our data. Index comparisons run on proxy funds; index series remain unlicensed. benchmark_proxy on the analytics entry identifies the proxy fund and stays blank absent a resolved proxy.
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
- Backward-looking. The rating grades a realised track record within a peer group.
- Comparable within a cohort. A rating of 5 in two different categories indicates equal relative standing while staying silent on absolute return.