MF Screener

Methodology

The exact statement of how each number is computed, and when it is refused rather than computed. New to these terms? Start with the glossary, which says what each number means in plain language.

Version 1.0.0Metrics as of 2026-10-31NAV 2006-04-01 to 2026-11-04

This is a research and analytics tool, not investment advice. Historical returns do not guarantee future returns.

Observation frequency and annualisation

Returns risk and peer metrics
month-end NAV and monthly returns
Maximum drawdown
daily NAV
Charts and nav history
daily NAV
Annualisation monthly
sqrt(12)
Why month end
Comparing a fund with its peers or a benchmark requires every series on the same dates. Funds publish on different days and index data often arrives month-end only, so aligning on daily NAV would mean either discarding the days that do not match everywhere or filling the gaps, and gaps are never filled here.
Why drawdown is daily
Drawdown measures the path rather than the endpoints, so a month-end sample steps over the trough. Through the 2020 crash a month-end grid put a typical equity fund at -23% against -34% on daily NAV. It needs no cross-series alignment, so it is the one metric that can use daily data without costing comparability.

The last NAV published in a calendar month is that month's observation, but only if it falls within 10 days of the month end. That excludes the running current month and any month where publication stopped early. Missing months stay missing: NAV is never forward-filled.

Risk-free rate

6.50% a year, converted geometrically to 0.5262% a month with (1 + annual) ** (1/12) - 1. A naive division by twelve would overstate the monthly hurdle. Change it with MF_RISK_FREE_ANNUAL in .env.

Formulas

Trailing CAGR over horizon h

CAGRh=(NAVTNAVT−h)1/h−1\mathrm{CAGR}_h = \left(\frac{NAV_T}{NAV_{T-h}}\right)^{1/h} - 1

NAV_T is the latest month-end NAV; NAV_{T-h} is the observation h years earlier, accepted only within 10 days of that month end.

Rolling CAGR of the window ending at t

rh(t)=(NAVtNAVt−12h)1/h−1r_h(t) = \left(\frac{NAV_t}{NAV_{t-12h}}\right)^{1/h} - 1

Sharpe ratio

Sharpe=Rf−Rrf‾σ(Rf)12\mathrm{Sharpe} = \frac{\overline{R_f - R_{rf}}}{\sigma(R_f)}\sqrt{12}

The denominator is total volatility, so upside variation is penalised too.

Sortino ratio

Sortino=Rf−Rrf‾σdown12\mathrm{Sortino} = \frac{\overline{R_f - R_{rf}}}{\sigma_{down}}\sqrt{12}

Downside deviation

σdown=∑Rf<Rrf(Rf−Rrf)2n−112\sigma_{down} = \sqrt{\frac{\sum_{R_f < R_{rf}} (R_f - R_{rf})^2}{n - 1}}\sqrt{12}

Only months below the risk-free rate contribute to the sum, but n is the full sample, which keeps this on the same scale as volatility.

Annualised volatility

σann=σ(Rf, ddof=1)12\sigma_{ann} = \sigma(R_f,\ ddof{=}1)\sqrt{12}

Tracking error

TE=σ(Rf−Rb, ddof=1)12\mathrm{TE} = \sigma(R_f - R_b,\ ddof{=}1)\sqrt{12}

Information ratio

IR=A‾σ(A, ddof=1)12,At=Rf,t−Rc,t\mathrm{IR} = \frac{\overline{A}}{\sigma(A,\ ddof{=}1)}\sqrt{12},\quad A_t = R_{f,t} - R_{c,t}

R_c is the comparison return: the leave-one-out peer average, or the mapped benchmark, depending on which information ratio is shown.

Alpha and beta regression

Rf−Rrf=αm+β(Rb−Rrf)+ε,α=(1+αm)12−1R_f - R_{rf} = \alpha_m + \beta (R_b - R_{rf}) + \varepsilon,\quad \alpha = (1+\alpha_m)^{12} - 1

Ordinary least squares on monthly excess returns; R-squared is reported alongside.

Alpha t-statistic

t=αmse(αm),se(αm)=σ^2(1n+xˉ2Sxx),σ^2=∑ε2n−2t = \frac{\alpha_m}{\mathrm{se}(\alpha_m)},\quad \mathrm{se}(\alpha_m) = \sqrt{\hat\sigma^2 \left(\frac{1}{n} + \frac{\bar{x}^2}{S_{xx}}\right)},\quad \hat\sigma^2 = \frac{\sum \varepsilon^2}{n-2}

Tests the monthly intercept alpha_m against zero, from the same OLS fit as alpha_beta; x_bar and S_xx are the mean and sum of squared deviations of the benchmark's monthly excess return. The t-statistic is on the monthly estimate, not the annualised alpha shown elsewhere, because annualising first would test a nonlinear transform of the estimate rather than the estimate itself. Null with reason 'zero_or_invalid_denominator' when the fit leaves no residual variance to estimate a standard error from.

Alpha p-value

p=Pr⁡(∣T∣>∣t∣),T∼tn−2p = \Pr(|T| > |t|),\quad T \sim t_{n-2}

Two-sided p-value of alpha_tstat against a Student's t distribution with n-2 degrees of freedom. See 'alpha_significance' below before filtering on this: screened across thousands of funds, this number is not corrected for multiple comparisons.

Maximum drawdown

MDD=min⁡t(NAVtmax⁡s≤tNAVs−1)\mathrm{MDD} = \min_t \left(\frac{NAV_t}{\max_{s \le t} NAV_s} - 1\right)

Computed on daily NAV, so an intra-month trough is captured. The series starts at any NAV redenomination, so the step itself is never counted as a fall.

Calmar ratio

Calmar=CAGRh∣MDDh∣\mathrm{Calmar} = \frac{\mathrm{CAGR}_h}{|\mathrm{MDD}_h|}

Excess return over peers

excess=CAGRfund−CAGR‾peers∖fund\text{excess} = \mathrm{CAGR}_{fund} - \overline{\mathrm{CAGR}}_{peers \setminus fund}

Ratio to peers

ratio=CAGRfundCAGR‾peers∖fund\text{ratio} = \frac{\mathrm{CAGR}_{fund}}{\overline{\mathrm{CAGR}}_{peers \setminus fund}}

Reported only when the peer average is positive; otherwise the excess is shown alone.

SIP return (XIRR)

0=∑iCFi(1+XIRR)di/3650 = \sum_i \frac{CF_i}{(1+\mathrm{XIRR})^{d_i/365}}

CF_i is -1 (one unit bought) at every month-end NAV in the window and the redemption value of the whole holding at the window's last month-end; d_i is actual calendar days since the first contribution, the same convention a spreadsheet's XIRR function uses. Solved with a bracketed root finder (Brent's method or an equivalent bisection), never a Newton guess, so a cash-flow series with no root in the bracket reports a named reason instead of a plausible wrong rate.

Basket correlation

ρi,j=corr(Ri,Rj) over matched months\rho_{i,j} = \mathrm{corr}(R_i, R_j)\ \text{over matched months}

Basket blended return

Rblend,t=∑iwiRi,tR_{blend,t} = \sum_i w_i R_{i,t}

Diversification benefit

∑iwiσann,i−σann,blend\sum_i w_i \sigma_{ann,i} - \sigma_{ann,blend}

The weighted average of each component's own annualised volatility, minus the blend's own annualised volatility - the reduction in risk diversification bought by holding several funds rather than the single riskiest one at the same total weight. It is zero when every component moves in lockstep (correlation 1) and positive whenever they do not, whatever the correlation. Correlation of returns is not portfolio overlap: two funds with entirely different holdings can still be highly correlated, and two funds with overlapping holdings can still show a low correlation.

Up and down capture

Capture=∏t∈S(1+Rf,t)−1∏t∈S(1+Rc,t)−1,S={t:Rc,t≷0}\mathrm{Capture} = \frac{\prod_{t \in S}(1+R_{f,t}) - 1}{\prod_{t \in S}(1+R_{c,t}) - 1},\quad S = \{t : R_{c,t} \gtrless 0\}

R_c is the leave-one-out sub-category peer average, the same comparison series the information ratio vs sub-category uses - never a benchmark. The up set is months the peer average rose, the down set months it fell; each ratio compounds the fund's return and the peer return separately over that set before dividing, rather than averaging a ratio month by month, so a single very negative month cannot dominate the result.

Worst calendar-year return

min⁡y∏t∈y(1+Rf,t)−1\min_y \prod_{t \in y}(1+R_{f,t}) - 1

Only complete (12-month) calendar years count, at least 3 of them; a fund's first and last year are almost always partial and are excluded rather than compared against a full year. 'positive_calendar_years_pct' is the share of those same complete years with a positive return.

Current peer quartile

quartile(t)=ntile4(rank(rolling_cagrh(t)) within sub-category at t)\mathrm{quartile}(t) = \mathrm{ntile}_4\big(\mathrm{rank}(\mathrm{rolling\_cagr}_h(t)) \text{ within sub-category at } t\big)

The fund's sub-category peers are ranked by trailing return at every month end (the same rolling series 'rolling_{h}y_median' summarises) and split into four equal-sized groups, 1 being the best-performing group. Computed at both 3y and 5y.

Quartile persistence over 3 years

1∣W∣∑t∈W1[quartile(t)=quartile(now)],W={t:now−5y<t≤now}\frac{1}{|W|}\sum_{t \in W} \mathbb{1}[\mathrm{quartile}(t) = \mathrm{quartile}(now)],\quad W = \{t : now - 5y < t \le now\}

Read off the fund's trailing 3-year quartile at every eligible month end in the last 5 years: the share matching the quartile it is in now is 'quartile_persistence_3y', the share in the top quartile is 'quartile_top_share_3y', and the count of month-to-month quartile changes is 'quartile_transitions_3y'. Past performance chasing is the error this exists to check.

Style exposure

min⁡w∑t(Rf,t−w⊤Rb,t)2s.t. w≥0, ∑w=1\min_w \sum_t (R_{f,t} - w^\top R_{b,t})^2 \quad\text{s.t. } w \ge 0,\ \textstyle\sum w = 1

R_b is the whole style-factor basis at once: every non-negative weight summing to one, chosen to minimise squared error against the fund's own monthly returns. Weights below 0.01% are dropped rather than shown as a false-precision exposure. Describes behaviour only - never read as a holdings statement.

Style drift over 3 years

1∣W∣−1∑i=1∣W∣−112∑b∣wi(b)−wi−1(b)∣,W=fitted 36-month windows ending in the last 3 years\frac{1}{|W|-1}\sum_{i=1}^{|W|-1} \tfrac{1}{2}\sum_b |w_i(b) - w_{i-1}(b)|,\quad W = \text{fitted 36-month windows ending in the last 3 years}

The single style_exposure fit repeated on every trailing 36-month window, stepped one month at a time, restricted to windows ending in the last 3 years. w_i(b) is the fitted weight on basis member b in window i; the mean is over each pair of consecutive windows that both clear the R-squared floor, so a window that fails the fit is dropped from the series with its reason rather than carrying the previous window's weights forward, and never bridged across in the drift calculation either.

Latest fund-family AUM

AUMfamily=∑c∈familyAUMc\mathrm{AUM}_{family} = \sum_{c \in family} \mathrm{AUM}_c

AUM_c is latest_aum for one scheme code; the family sums every code sharing this fund's fund_family_id (T2.1), so a Direct/Regular or Growth/IDCW split is not undercounted as several small funds.

AUM growth over 4 quarters

AUMfamily(t)AUMfamily(t−4q)−1\frac{\mathrm{AUM}_{family}(t)}{\mathrm{AUM}_{family}(t-4q)} - 1

aum_family_latest at the two AMFI-published quarters 4 apart, read from scheme_aum_history rather than parsed from the aum_quarter label.

AUM percentile in sub-category

ntile(rank(AUMfamily) within sub-category), 1.0=largest\mathrm{ntile}\big(\mathrm{rank}(\mathrm{AUM}_{family}) \text{ within sub-category}\big),\ 1.0 = \text{largest}

Percentile rank of aum_family_latest among peers in the fund's clean_sub_category, 1.0 being the largest fund by family AUM. A column to read beside the score rather than one of its components: asset bloat is a risk to weigh yourself, not one this score prices.

Standard deviations use the sample estimator (ddof = 1). Monthly statistics are annualised by sqrt(12); no metric mixes daily and monthly observations.

Peer universe

  • Direct plans only and Growth option only by default; plans and options are never mixed silently.
  • Active schemes only by default, which introduces survivorship bias in historical screening.
  • At least 5 eligible peers, otherwise the metric is null with reason 'insufficient_peer_universe'.
  • Peer averages exclude the fund being measured (leave-one-out); at least 2 peers must remain.
  • A ratio against a zero or negative peer return is reported as null; the percentage-point excess is still shown.

Defaults

Level
sub_category
Plan scope
direct
Option scope
growth
Active only
true
Aggregation
mean
Exclude self
true
Min peers
5

Survivorship bias, quantified

Every category aggregate (CAGR at 1, 3, 5 and 10 years) is computed twice: once over today's active schemes only, and once over every scheme in the category including ones that later closed or merged away. A category_key encodes which side it is with an active=y or active=n marker; the two keys for one category differ only in that marker.

GET /categories/{category_key}/metrics returns both sides as active_only and all_schemes, plus survivorship_gap_pp: the active-only CAGR minus the all-schemes CAGR at each horizon, in percentage points. A positive gap means the active-only average - the default shown everywhere else in this app - overstates the category by leaving out the funds that did not survive.

Minimum observations before a metric is computed

Rolling 1y point
12 months
Rolling 3y point
36 months
Rolling 5y point
60 months
Rolling 10y point
120 months
Rolling summary
12 valid windows (MF_MIN_ROLLING_WINDOWS)
Sip xirr
12 monthly contributions in the window
Rolling sip xirr median
12 valid windows (MF_MIN_ROLLING_WINDOWS), each itself requiring 12 contributions
Risk metrics
3y: 24 · 5y: 42 · 10y: 84
Alpha significance
Same floor as the risk metrics at that horizon, since alpha_tstat and alpha_pvalue come from the same regression as alpha and beta.
Capture ratios
Same floor as the risk metrics at that horizon: 24 months at 3y, 42 at 5y.
Calendar year summary
3 complete (12-month) calendar years
Quartile ranking
5 eligible peers in the sub-category at that month end (MF_MIN_PEERS), the same floor every other peer-relative metric uses; below it the month end is excluded rather than ranked on a thin universe.
Basket analysis
24 matched monthly observations across every basket member, the same 3-year floor the risk metrics use; below it the whole /basket response is null with reason 'insufficient_history'.
Style exposure
24 months shared with every member of the style-factor basis, and a fit explaining at least 50% of the fund's month-to-month movement (R-squared); below either, null with reason 'insufficient_observations' or 'style_basis_does_not_describe_this_fund'.
Style drift 3y
Each window needs 36 months and the same R-squared floor as style_exposure; the scalar itself needs at least 2 such windows ending in the last 3 years, otherwise null with reason 'insufficient_rolling_windows'.
Why risk metrics start at 3y
Rolling windows go down to one year because a 1-year window still yields a long series of overlapping observations. The peer-relative, benchmark-relative and risk metrics do not: a 1-year window holds about 10 matched monthly observations, too thin a sample for a beta, a Sharpe or a tracking error that a screener will sort on.
Aum growth 4q
5 distinct dated readings in scheme_aum_history (the horizon plus the one to grow from); below that, null with reason 'insufficient_aum_history'.
Aum percentile in sub category
5 eligible peers in the sub-category with a computed aum_family_latest (MF_MIN_PEERS), the same floor every other peer-relative metric uses; below it, null with reason 'insufficient_peer_universe'.

Below these thresholds the metric is null with a stated reason. Nothing is extrapolated, and NAV gaps are never forward-filled to manufacture an observation.

Alpha significance and multiple comparisons

Alpha reported without a standard error, screened across the full universe, is a multiple-comparisons machine: some funds clear any p-value threshold by chance alone, with no skill behind the number.

No multiple-comparisons correction (Bonferroni, Benjamini-Hochberg or otherwise) is applied anywhere in this project. The raw, uncorrected p-value is what is stored and filtered on; this section exists so the user sees the consequence of that choice instead of it being silent.

At the p < 0.05 threshold, about 5% of funds are expected to show a nominally significant alpha by chance alone even if none of them have true skill. Across the roughly 36,917 schemes in the metrics snapshot, that is on the order of 1,846 funds - a number worth holding in mind before treating a low p-value on its own as evidence of skill.

Alpha p-value is a filter for ruling funds out, not for ruling one in: a high p-value says the alpha estimate is indistinguishable from noise, but a low one is necessary, not sufficient, evidence of skill. Cross-check with R-squared (is the benchmark actually a good fit?) and with the same fund's alpha at another horizon before treating a single significant result as a finding.

Benchmarks

Policy
This project ships no index data. Import your own total-return index CSVs, or build a clearly-labelled proxy from an index fund's NAV. A proxy is net of that fund's expenses and tracking error, so it understates the index.
Currency rule
Fund NAVs are published in INR. A benchmark in any other currency is stored and displayed, but no benchmark-relative metric is computed against it: alpha, beta, tracking error, the benchmark information ratio and the benchmark excess return all stay null with reason 'benchmark_currency_mismatch'. This project performs no FX conversion, and the import refuses a CSV with no currency column rather than assuming INR. Where both an INR and a foreign series are configured for the same category, the INR one is always chosen.
Csv contract
date, benchmark_id, benchmark_name, currency and one of total_return_index or price. A total-return index is preferred: a growth-option NAV reinvests dividends, so a price index understates the benchmark and flatters the fund. Files are rejected whole, never partially imported.

Loaded series

  • Nifty 100 Quality 30INR · 61 monthsindex_fund_proxy:149254
  • Nifty 500 Momentum 50 (index-fund proxy)INR · 26 monthsindex_fund_proxy:152875
  • Nifty 500 (index-fund proxy)INR · 86 monthsindex_fund_proxy:147625
  • Nifty 500 Value 50 (index-fund proxy)INR · 42 monthsindex_fund_proxy:151739
  • Nifty 50 (large cap)INR · 166 monthsindex_fund_proxy:118581
  • Nifty 50 (index-fund proxy)INR · 247 monthsindex_fund_proxy:100484
  • Nifty BankINR · 57 monthsindex_fund_proxy:149804
  • Nifty ITINR · 51 monthsindex_fund_proxy:150468
  • Nifty Midcap 150INR · 69 monthsindex_fund_proxy:148726
  • Nifty Midcap 150 (index-fund proxy)INR · 86 monthsindex_fund_proxy:147622
  • Nifty PharmaINR · 47 monthsindex_fund_proxy:150930
  • Nifty Smallcap 250INR · 73 monthsindex_fund_proxy:148519
  • Nifty Smallcap 250 (index-fund proxy)INR · 86 monthsindex_fund_proxy:147623
  • S&P 500 INR (index-fund proxy)INR · 79 monthsindex_fund_proxy:148381

Why a value can be missing

Every blank on this site carries one of these reasons; click a blank to see which.

insufficient_history
The scheme does not have enough NAV history for this horizon.
insufficient_observations
Fewer monthly observations than the metric requires.
insufficient_rolling_windows
Fewer valid rolling windows than the configured minimum.
insufficient_peer_universe
Too few eligible peer schemes in the sub-category for this horizon.
benchmark_unavailable
No benchmark index data loaded for the mapped benchmark and period.
benchmark_not_mapped
No benchmark is mapped to this scheme: none is configured for the index or sub-category it follows, or the only candidate is an index-fund proxy built from this same fund, which would measure the fund against itself.
benchmark_currency_mismatch
The mapped benchmark is denominated in a different currency from the fund's NAV. Comparing them would measure the exchange rate as well as performance, so this metric is withheld until an INR-converted series is imported.
style_basis_does_not_describe_this_fund
The style-factor basis explains too little of this fund's month-to-month movement for the fitted weights to mean anything. That is the honest answer for a fund the basis does not cover, such as one investing outside India, or in gold or debt.
ter_not_published
No usable expense ratio for this scheme. TER comes from AMFI's daily per-AMC disclosures, which carry no AMFI scheme code, so it is matched by name and a value is never inferred from a similar one. A fund is also withheld when its disclosure contradicts itself, such as a Direct plan priced above the Regular plan it cannot cost more than.
all_navs_non_positive
Every NAV published for this scheme was zero or negative. AMFI files 0.00 as a matured scheme's terminal marker rather than as a price, so none of them can be used in a return and no metric can be computed. Rebuilding will not change this.
no_nav_history
The source carries this scheme in its master list but publishes no NAV history for it, so there is nothing to compute a return from.
too_few_month_end_observations
Fewer than two month-end NAV observations survive, so not even a single monthly return can be formed. A scheme that only ever traded inside one month lands here.
snapshot_predates_this_nav_history
NAV history is stored for this scheme but the metrics snapshot was built before it arrived. Run `make metrics` to include it.
no_overlapping_observations
Fund and comparison series have too few overlapping months.
zero_or_invalid_denominator
The metric's denominator is zero, so the ratio is undefined.
denominator_zero_or_negative
The peer/benchmark return used as denominator is zero or negative, so a ratio would be misleading. The percentage-point excess is shown instead.
start_observation_outside_tolerance
No NAV observation close enough to the required start month-end.
no_downside_observations
Not enough observations below the threshold to estimate downside deviation.
source_field_missing
The data source does not publish this field.
nav_gap_in_window
The NAV series has missing months inside the window.
nav_scale_discontinuity
The NAV series changes scale part-way through - a face-value redenomination or unit split filed as a raw NAV jump. Only the history after the break is comparable, and it is too short for this window.
sip_xirr_not_bracketed
No annualised rate between -99.99% and +2000% makes this SIP's cash flows net to zero, so no plausible XIRR exists for it. This is a bracketed solve, not a Newton guess, so a series like this reports a reason instead of a number that happened to be the nearest root a guess converged to.
tax_treatment_undetermined
Whether this scheme is equity-oriented for capital gains tax cannot be read off its category. Hybrid schemes whose mandate lets the equity share float across the 65% line - Balanced Advantage, Dynamic Asset Allocation, Multi Asset Allocation - are not guessed into either treatment.
exit_load_not_published
No exit load is stored for this scheme, so the after-tax-and-load figure is withheld rather than assumed to be zero. A fund with an unpublished load may still be inside its load period.
insufficient_aum_history
Fewer than five dated quarterly AUM readings are stored for this scheme, so a four-quarter change has nothing to measure from. AUM history accrues one quarter per master ingest and is never backfilled, so this fills in over time rather than being a fact about the fund.
not_recovered
The fund has not regained the NAV high it fell from inside this window, so there is no recovery date to measure days against. A large placeholder number would misstate a fall the fund may still be inside.
metric_not_computed
This component's metric is not in the stored snapshot at all - it was added to the weight table after the last metrics rebuild. Run `make metrics` to compute it; until then the component is named missing and its weight is redistributed.
coverage_below_floor
Fewer than half the weighted components could be computed for this fund, so no total is published. The components that exist are still shown with their own percentiles: read those instead of a total built on a fraction of the table.
enrichment_source_does_not_carry_this_fund
The enrichment source does not publish this fact for this scheme, so it is shown blank rather than assumed.
enrichment_source_unreachable
The enrichment source could not be reached, so this value is a blank, not a zero.
enrichment_value_stale
SEBI requires the riskometer to be republished monthly; the value shown is older than that and may no longer reflect the fund's current risk band.
holdings_not_loaded
No holdings are stored for this scheme. This project ships no holdings data and fetches none - the candidate source is unreachable and scraping AMC sites is refused - so a portfolio appears here only once one is imported with `make holdings-import`.
insufficient_holdings_months
Turnover is the change between two consecutive monthly portfolios, so it needs at least two disclosure months for this scheme. Only one is stored.
holdings_as_of_months_differ
The two funds' latest portfolios are more than a month apart. Overlapping a January portfolio with a June one would measure six months of trading as if it were a difference in holdings, so the pair is refused rather than reported.
holdings_asset_type_not_supplied
The imported file carries no asset_type for this scheme-month, so the equity share of the portfolio is unknown and cannot be cross-checked against the returns-based exposure estimate.

Metric catalog

MetricDefinitionBetterCaveat
Past return per year (1Y)
cagr_1y
Annualised trailing return from month-end NAV to month-end NAV.HigherPast return. It says nothing about future return, and it ignores risk taken.
Past return per year (3Y)
cagr_3y
Annualised trailing return from month-end NAV to month-end NAV.HigherPast return. It says nothing about future return, and it ignores risk taken.
Past return per year (5Y)
cagr_5y
Annualised trailing return from month-end NAV to month-end NAV.HigherPast return. It says nothing about future return, and it ignores risk taken.
Past return per year (10Y)
cagr_10y
Annualised trailing return from month-end NAV to month-end NAV.HigherPast return. It says nothing about future return, and it ignores risk taken.
Past return per year, monthly SIP (1Y)
sip_xirr_1y
Annualised return on a fixed monthly contribution made at each month-end NAV in the window, redeemed at the window's last observation.HigherNot the same number as trailing CAGR: it reflects the timing of monthly contributions, not a single lump sum in and out. Blank below 12 contributions or when no annualised rate prices the cash flows to zero.
Past return per year, monthly SIP (3Y)
sip_xirr_3y
Annualised return on a fixed monthly contribution made at each month-end NAV in the window, redeemed at the window's last observation.HigherNot the same number as trailing CAGR: it reflects the timing of monthly contributions, not a single lump sum in and out. Blank below 12 contributions or when no annualised rate prices the cash flows to zero.
Past return per year, monthly SIP (5Y)
sip_xirr_5y
Annualised return on a fixed monthly contribution made at each month-end NAV in the window, redeemed at the window's last observation.HigherNot the same number as trailing CAGR: it reflects the timing of monthly contributions, not a single lump sum in and out. Blank below 12 contributions or when no annualised rate prices the cash flows to zero.
Past return per year, monthly SIP (10Y)
sip_xirr_10y
Annualised return on a fixed monthly contribution made at each month-end NAV in the window, redeemed at the window's last observation.HigherNot the same number as trailing CAGR: it reflects the timing of monthly contributions, not a single lump sum in and out. Blank below 12 contributions or when no annualised rate prices the cash flows to zero.
Typical 3-year outcome, monthly SIP
rolling_sip_xirr_3y_median
Median SIP XIRR of every overlapping 3-year contribution window in the fund's history.HigherOverlapping windows are correlated, so this is not a sample of independent outcomes.
Typical 5-year outcome, monthly SIP
rolling_sip_xirr_5y_median
Median SIP XIRR of every overlapping 5-year contribution window in the fund's history.HigherOverlapping windows are correlated, so this is not a sample of independent outcomes.
Average 1-year outcome
rolling_1y_mean
mean of every overlapping 1-year annualised return in the fund's history.HigherOverlapping windows are correlated, so this is not a sample of independent outcomes.
Typical 1-year outcome
rolling_1y_median
median of every overlapping 1-year annualised return in the fund's history.HigherLess sensitive to one exceptional market phase than the mean.
Worst 1-year stretch on record
rolling_1y_min
minimum of every overlapping 1-year annualised return in the fund's history.HigherThe single worst window in the available history - not a floor on future outcomes.
Strongest 1-year stretch on record
rolling_1y_max
maximum of every overlapping 1-year annualised return in the fund's history.NeitherThe best window. Useful for range, useless as an expectation.
How much the outcome depended on start date
rolling_1y_std
dispersion of every overlapping 1-year annualised return in the fund's history.LowerStandard deviation across overlapping windows; windows share months, so it understates independence.
How often 1 years ended in profit
rolling_1y_positive_pct
positive % of every overlapping 1-year annualised return in the fund's history.HigherShare of windows with a return above zero, not above inflation.
How often it beat similar funds
rolling_1y_beat_category_pct
beat sub-category % of every overlapping 1-year annualised return in the fund's history.HigherCompared against the equal-weighted peer index, which is itself survivorship-affected.
How often it beat its index
rolling_1y_beat_benchmark_pct
beat benchmark % of every overlapping 1-year annualised return in the fund's history.HigherOnly as good as the mapped benchmark series.
Average 3-year outcome
rolling_3y_mean
mean of every overlapping 3-year annualised return in the fund's history.HigherOverlapping windows are correlated, so this is not a sample of independent outcomes.
Typical 3-year outcome
rolling_3y_median
median of every overlapping 3-year annualised return in the fund's history.HigherLess sensitive to one exceptional market phase than the mean.
Worst 3-year stretch on record
rolling_3y_min
minimum of every overlapping 3-year annualised return in the fund's history.HigherThe single worst window in the available history - not a floor on future outcomes.
Strongest 3-year stretch on record
rolling_3y_max
maximum of every overlapping 3-year annualised return in the fund's history.NeitherThe best window. Useful for range, useless as an expectation.
How much the outcome depended on start date
rolling_3y_std
dispersion of every overlapping 3-year annualised return in the fund's history.LowerStandard deviation across overlapping windows; windows share months, so it understates independence.
How often 3 years ended in profit
rolling_3y_positive_pct
positive % of every overlapping 3-year annualised return in the fund's history.HigherShare of windows with a return above zero, not above inflation.
How often it beat similar funds
rolling_3y_beat_category_pct
beat sub-category % of every overlapping 3-year annualised return in the fund's history.HigherCompared against the equal-weighted peer index, which is itself survivorship-affected.
How often it beat its index
rolling_3y_beat_benchmark_pct
beat benchmark % of every overlapping 3-year annualised return in the fund's history.HigherOnly as good as the mapped benchmark series.
Average 5-year outcome
rolling_5y_mean
mean of every overlapping 5-year annualised return in the fund's history.HigherOverlapping windows are correlated, so this is not a sample of independent outcomes.
Typical 5-year outcome
rolling_5y_median
median of every overlapping 5-year annualised return in the fund's history.HigherLess sensitive to one exceptional market phase than the mean.
Worst 5-year stretch on record
rolling_5y_min
minimum of every overlapping 5-year annualised return in the fund's history.HigherThe single worst window in the available history - not a floor on future outcomes.
Strongest 5-year stretch on record
rolling_5y_max
maximum of every overlapping 5-year annualised return in the fund's history.NeitherThe best window. Useful for range, useless as an expectation.
How much the outcome depended on start date
rolling_5y_std
dispersion of every overlapping 5-year annualised return in the fund's history.LowerStandard deviation across overlapping windows; windows share months, so it understates independence.
How often 5 years ended in profit
rolling_5y_positive_pct
positive % of every overlapping 5-year annualised return in the fund's history.HigherShare of windows with a return above zero, not above inflation.
How often it beat similar funds
rolling_5y_beat_category_pct
beat sub-category % of every overlapping 5-year annualised return in the fund's history.HigherCompared against the equal-weighted peer index, which is itself survivorship-affected.
How often it beat its index
rolling_5y_beat_benchmark_pct
beat benchmark % of every overlapping 5-year annualised return in the fund's history.HigherOnly as good as the mapped benchmark series.
Average 10-year outcome
rolling_10y_mean
mean of every overlapping 10-year annualised return in the fund's history.HigherOverlapping windows are correlated, so this is not a sample of independent outcomes.
Typical 10-year outcome
rolling_10y_median
median of every overlapping 10-year annualised return in the fund's history.HigherLess sensitive to one exceptional market phase than the mean.
Worst 10-year stretch on record
rolling_10y_min
minimum of every overlapping 10-year annualised return in the fund's history.HigherThe single worst window in the available history - not a floor on future outcomes.
Strongest 10-year stretch on record
rolling_10y_max
maximum of every overlapping 10-year annualised return in the fund's history.NeitherThe best window. Useful for range, useless as an expectation.
How much the outcome depended on start date
rolling_10y_std
dispersion of every overlapping 10-year annualised return in the fund's history.LowerStandard deviation across overlapping windows; windows share months, so it understates independence.
How often 10 years ended in profit
rolling_10y_positive_pct
positive % of every overlapping 10-year annualised return in the fund's history.HigherShare of windows with a return above zero, not above inflation.
How often it beat similar funds
rolling_10y_beat_category_pct
beat sub-category % of every overlapping 10-year annualised return in the fund's history.HigherCompared against the equal-weighted peer index, which is itself survivorship-affected.
How often it beat its index
rolling_10y_beat_benchmark_pct
beat benchmark % of every overlapping 10-year annualised return in the fund's history.HigherOnly as good as the mapped benchmark series.
Share of similar funds' good months captured
upside_capture_3y
Fund's compounded return over months its sub-category peer average rose, divided by the peer average's own compounded return over those same months.HigherAgainst the leave-one-out sub-category peer average, not a benchmark index - capture against peers and capture against a benchmark are different numbers.
Share of similar funds' bad months taken on
downside_capture_3y
Fund's compounded return over months its sub-category peer average fell, divided by the peer average's own compounded return over those same months.LowerBelow 1 means the fund lost less than peers when they fell, the desirable direction. Against the leave-one-out sub-category peer average, not a benchmark index - capture against peers and capture against a benchmark are different numbers.
Share of similar funds' good months captured
upside_capture_5y
Fund's compounded return over months its sub-category peer average rose, divided by the peer average's own compounded return over those same months.HigherAgainst the leave-one-out sub-category peer average, not a benchmark index - capture against peers and capture against a benchmark are different numbers.
Share of similar funds' bad months taken on
downside_capture_5y
Fund's compounded return over months its sub-category peer average fell, divided by the peer average's own compounded return over those same months.LowerBelow 1 means the fund lost less than peers when they fell, the desirable direction. Against the leave-one-out sub-category peer average, not a benchmark index - capture against peers and capture against a benchmark are different numbers.
Time taken to recover that fall
max_drawdown_5y_recovery_days
Calendar days from the trough of the worst peak-to-trough fall in the last 5 years to the first daily NAV that regained the pre-fall peak.LowerBlank, never a large number, when the fund has not yet regained that peak.
Worst full year it has had
worst_calendar_year_return
Lowest compounded return of any complete calendar year in the fund's history.HigherNeeds at least 3 complete (12-month) calendar years; the fund's first and last, almost always partial, are never counted.
Which year was the worst full year
worst_calendar_year
Calendar year of the fund's worst complete-year return.NeitherNeeds at least 3 complete (12-month) calendar years; the fund's first and last, almost always partial, are never counted.
Share of years that ended up
positive_calendar_years_pct
Share of complete calendar years with a positive compounded return.HigherNeeds at least 3 complete (12-month) calendar years; the fund's first and last, almost always partial, are never counted.
How much its investing style has shifted (3Y)
style_drift_3y
Mean turnover between consecutive rolling 36-month style-factor fits over the last 3 years: half the sum of absolute weight changes across the basis, so a complete switch from one factor to another reads as 1 and an unchanged mix as 0.LowerInferred from NAV, not from holdings - the same style-analysis basis as the exposure fit, and blank for the same reasons: too little shared history with the basis, or fewer than 2 windows in the last 3 years that clear the R-squared floor.
Rank group among similar funds today, on 3-year return (1 = top quarter)
quartile_now_3y
Quartile of the fund's trailing 3-year return inside its sub-category as of the snapshot date, 1 being the best-performing quarter of peers.LowerRanked inside the fund's own sub-category, requiring the same minimum peer count as every other peer-relative metric; blank below it.
Rank group among similar funds today (1 = top quarter)
quartile_now_5y
Quartile of the fund's trailing 5-year return inside its sub-category as of the snapshot date, 1 being the best-performing quarter of peers.LowerRanked inside the fund's own sub-category, requiring the same minimum peer count as every other peer-relative metric; blank below it.
How often it stayed in the same rank group
quartile_persistence_3y
Share of month ends in the last 5 years where the fund's trailing 3-year sub-category quartile matched the quartile it is in now.HigherRanked inside the fund's own sub-category, requiring the same minimum peer count as every other peer-relative metric; blank below it. Past performance chasing is the error this exists to check.
Time spent in the top quarter of similar funds
quartile_top_share_3y
Share of month ends in the last 5 years where the fund's trailing 3-year return ranked in the top quartile of its sub-category.HigherRanked inside the fund's own sub-category, requiring the same minimum peer count as every other peer-relative metric; blank below it.
How often its rank group changed
quartile_transitions_3y
Number of month-to-month changes in the fund's trailing 3-year sub-category quartile over the last 5 years.LowerRanked inside the fund's own sub-category, requiring the same minimum peer count as every other peer-relative metric; blank below it. Fewer changes means a more stable relative rank, not a better one.
Ahead of / behind similar funds (3Y)
fund_minus_category_3y
Fund CAGR minus the leave-one-out average CAGR of its peer universe.HigherPeers are today's surviving schemes; funds that closed are not in the average.
Times the similar-fund average (3Y)
fund_div_category_3y
Fund CAGR divided by the peer average CAGR.HigherUndefined and shown blank when the peer average is zero or negative.
Similar funds' average return (3Y)
category_return_3y
Average trailing CAGR of the peer universe, excluding this fund.NeitherEqual-weighted across schemes by default, not weighted by AUM.
Its index's return (3Y)
benchmark_return_3y
Trailing CAGR of the mapped benchmark over the same window as the fund.NeitherBlank when no benchmark series is loaded for the fund's category.
Ahead of / behind its index (3Y)
fund_minus_benchmark_3y
Fund CAGR minus the mapped benchmark's CAGR.HigherBlank when no benchmark series is loaded for the fund's category.
How reliably it beat similar funds (3Y)
information_ratio_vs_category_3y
Measures the consistency of monthly fund outperformance versus its sub-category peer return.HigherIt is not benchmark Information Ratio. The app uses an equal-weighted, leave-one-out peer return by default.
How reliably it beat its index (3Y)
information_ratio_vs_benchmark_3y
Mean monthly active return over its standard deviation, annualised, against the mapped benchmark.HigherA proxy benchmark is net of that index fund's costs, which flatters the fund slightly. Blank when the mapped benchmark is in another currency.
Return earned per unit of ups and downs (3Y)
sharpe_3y
Mean monthly return above the risk-free rate over the standard deviation of monthly returns, annualised.HigherPenalises upside volatility as much as downside.
Return earned per unit of downside (3Y)
sortino_3y
Excess return over downside deviation, annualised.HigherDownside deviation uses only months below the risk-free rate, so it rests on fewer observations.
How bumpy the ride was (3Y)
volatility_3y
Annualised standard deviation of monthly returns.LowerMonthly data smooths intra-month drawdowns.
How large the bad months were (3Y)
downside_deviation_3y
Annualised standard deviation of shortfalls below the monthly risk-free rate.LowerEstimated from below-threshold months only.
How closely it follows its index (3Y)
tracking_error_3y
Annualised standard deviation of the fund-minus-benchmark monthly return.LowerFor an active fund a low value means index-hugging, not skill. Blank when the mapped benchmark is in another currency.
Return the index does not explain (3Y)
alpha_3y
Annualised intercept of the fund's excess return regressed on the benchmark's excess return.HigherOnly meaningful against a benchmark the fund actually tracks; check R-squared and beta. Blank when the mapped benchmark is in another currency.
How hard it swings with the index (3Y)
beta_3y
Slope of the fund's excess return regressed on the benchmark's excess return: sensitivity to the benchmark.NeitherAbove 1 means it amplified the index, in both directions. Blank when the mapped benchmark is in another currency.
How much the index explains (3Y)
r_squared_3y
Share of the fund's excess return variance explained by that same regression.NeitherA low value means alpha and beta describe this fund poorly. Blank when the mapped benchmark is in another currency.
Strength of the evidence behind that leftover return (3Y)
alpha_tstat_3y
T-statistic of the monthly alpha estimate against zero, from the same regression's residual standard error.Neither No multiple-comparisons correction is applied: screened across the full universe, roughly 5% of funds are expected to clear p < 0.05 by chance alone even with zero true skill. See the methodology page for the expected false-positive count. Blank when the mapped benchmark is in another currency.
Odds this outperformance is chance (3Y)
alpha_pvalue_3y
Two-sided p-value of the alpha t-statistic against the t-distribution with n-2 degrees of freedom.Lower No multiple-comparisons correction is applied: screened across the full universe, roughly 5% of funds are expected to clear p < 0.05 by chance alone even with zero true skill. See the methodology page for the expected false-positive count. Blank when the mapped benchmark is in another currency.
Worst fall from a peak (3Y)
max_drawdown_3y
Worst peak-to-trough fall in daily NAV, carried as a negative number: -12% is a milder fall than -40%, which is why a higher value is the better one.HigherMeasured on daily NAV. The series starts at any NAV redenomination, so the step is never counted as a fall.
Return per unit of worst fall (3Y)
calmar_3y
Trailing CAGR divided by the absolute maximum drawdown.HigherUnstable when the drawdown is small.
Ahead of / behind similar funds (5Y)
fund_minus_category_5y
Fund CAGR minus the leave-one-out average CAGR of its peer universe.HigherPeers are today's surviving schemes; funds that closed are not in the average.
Times the similar-fund average (5Y)
fund_div_category_5y
Fund CAGR divided by the peer average CAGR.HigherUndefined and shown blank when the peer average is zero or negative.
Similar funds' average return (5Y)
category_return_5y
Average trailing CAGR of the peer universe, excluding this fund.NeitherEqual-weighted across schemes by default, not weighted by AUM.
Its index's return (5Y)
benchmark_return_5y
Trailing CAGR of the mapped benchmark over the same window as the fund.NeitherBlank when no benchmark series is loaded for the fund's category.
Ahead of / behind its index (5Y)
fund_minus_benchmark_5y
Fund CAGR minus the mapped benchmark's CAGR.HigherBlank when no benchmark series is loaded for the fund's category.
How reliably it beat similar funds (5Y)
information_ratio_vs_category_5y
Measures the consistency of monthly fund outperformance versus its sub-category peer return.HigherIt is not benchmark Information Ratio. The app uses an equal-weighted, leave-one-out peer return by default.
How reliably it beat its index (5Y)
information_ratio_vs_benchmark_5y
Mean monthly active return over its standard deviation, annualised, against the mapped benchmark.HigherA proxy benchmark is net of that index fund's costs, which flatters the fund slightly. Blank when the mapped benchmark is in another currency.
Return earned per unit of ups and downs (5Y)
sharpe_5y
Mean monthly return above the risk-free rate over the standard deviation of monthly returns, annualised.HigherPenalises upside volatility as much as downside.
Return earned per unit of downside (5Y)
sortino_5y
Excess return over downside deviation, annualised.HigherDownside deviation uses only months below the risk-free rate, so it rests on fewer observations.
How bumpy the ride was (5Y)
volatility_5y
Annualised standard deviation of monthly returns.LowerMonthly data smooths intra-month drawdowns.
How large the bad months were (5Y)
downside_deviation_5y
Annualised standard deviation of shortfalls below the monthly risk-free rate.LowerEstimated from below-threshold months only.
How closely it follows its index (5Y)
tracking_error_5y
Annualised standard deviation of the fund-minus-benchmark monthly return.LowerFor an active fund a low value means index-hugging, not skill. Blank when the mapped benchmark is in another currency.
Return the index does not explain (5Y)
alpha_5y
Annualised intercept of the fund's excess return regressed on the benchmark's excess return.HigherOnly meaningful against a benchmark the fund actually tracks; check R-squared and beta. Blank when the mapped benchmark is in another currency.
How hard it swings with the index (5Y)
beta_5y
Slope of the fund's excess return regressed on the benchmark's excess return: sensitivity to the benchmark.NeitherAbove 1 means it amplified the index, in both directions. Blank when the mapped benchmark is in another currency.
How much the index explains (5Y)
r_squared_5y
Share of the fund's excess return variance explained by that same regression.NeitherA low value means alpha and beta describe this fund poorly. Blank when the mapped benchmark is in another currency.
Strength of the evidence behind that leftover return (5Y)
alpha_tstat_5y
T-statistic of the monthly alpha estimate against zero, from the same regression's residual standard error.Neither No multiple-comparisons correction is applied: screened across the full universe, roughly 5% of funds are expected to clear p < 0.05 by chance alone even with zero true skill. See the methodology page for the expected false-positive count. Blank when the mapped benchmark is in another currency.
Odds this outperformance is chance (5Y)
alpha_pvalue_5y
Two-sided p-value of the alpha t-statistic against the t-distribution with n-2 degrees of freedom.Lower No multiple-comparisons correction is applied: screened across the full universe, roughly 5% of funds are expected to clear p < 0.05 by chance alone even with zero true skill. See the methodology page for the expected false-positive count. Blank when the mapped benchmark is in another currency.
Worst fall from a peak (5Y)
max_drawdown_5y
Worst peak-to-trough fall in daily NAV, carried as a negative number: -12% is a milder fall than -40%, which is why a higher value is the better one.HigherMeasured on daily NAV. The series starts at any NAV redenomination, so the step is never counted as a fall.
Return per unit of worst fall (5Y)
calmar_5y
Trailing CAGR divided by the absolute maximum drawdown.HigherUnstable when the drawdown is small.
Ahead of / behind similar funds (10Y)
fund_minus_category_10y
Fund CAGR minus the leave-one-out average CAGR of its peer universe.HigherPeers are today's surviving schemes; funds that closed are not in the average.
Times the similar-fund average (10Y)
fund_div_category_10y
Fund CAGR divided by the peer average CAGR.HigherUndefined and shown blank when the peer average is zero or negative.
Similar funds' average return (10Y)
category_return_10y
Average trailing CAGR of the peer universe, excluding this fund.NeitherEqual-weighted across schemes by default, not weighted by AUM.
Its index's return (10Y)
benchmark_return_10y
Trailing CAGR of the mapped benchmark over the same window as the fund.NeitherBlank when no benchmark series is loaded for the fund's category.
Ahead of / behind its index (10Y)
fund_minus_benchmark_10y
Fund CAGR minus the mapped benchmark's CAGR.HigherBlank when no benchmark series is loaded for the fund's category.
How reliably it beat similar funds (10Y)
information_ratio_vs_category_10y
Measures the consistency of monthly fund outperformance versus its sub-category peer return.HigherIt is not benchmark Information Ratio. The app uses an equal-weighted, leave-one-out peer return by default.
How reliably it beat its index (10Y)
information_ratio_vs_benchmark_10y
Mean monthly active return over its standard deviation, annualised, against the mapped benchmark.HigherA proxy benchmark is net of that index fund's costs, which flatters the fund slightly. Blank when the mapped benchmark is in another currency.
Return earned per unit of ups and downs (10Y)
sharpe_10y
Mean monthly return above the risk-free rate over the standard deviation of monthly returns, annualised.HigherPenalises upside volatility as much as downside.
Return earned per unit of downside (10Y)
sortino_10y
Excess return over downside deviation, annualised.HigherDownside deviation uses only months below the risk-free rate, so it rests on fewer observations.
How bumpy the ride was (10Y)
volatility_10y
Annualised standard deviation of monthly returns.LowerMonthly data smooths intra-month drawdowns.
How large the bad months were (10Y)
downside_deviation_10y
Annualised standard deviation of shortfalls below the monthly risk-free rate.LowerEstimated from below-threshold months only.
How closely it follows its index (10Y)
tracking_error_10y
Annualised standard deviation of the fund-minus-benchmark monthly return.LowerFor an active fund a low value means index-hugging, not skill. Blank when the mapped benchmark is in another currency.
Return the index does not explain (10Y)
alpha_10y
Annualised intercept of the fund's excess return regressed on the benchmark's excess return.HigherOnly meaningful against a benchmark the fund actually tracks; check R-squared and beta. Blank when the mapped benchmark is in another currency.
How hard it swings with the index (10Y)
beta_10y
Slope of the fund's excess return regressed on the benchmark's excess return: sensitivity to the benchmark.NeitherAbove 1 means it amplified the index, in both directions. Blank when the mapped benchmark is in another currency.
How much the index explains (10Y)
r_squared_10y
Share of the fund's excess return variance explained by that same regression.NeitherA low value means alpha and beta describe this fund poorly. Blank when the mapped benchmark is in another currency.
Strength of the evidence behind that leftover return (10Y)
alpha_tstat_10y
T-statistic of the monthly alpha estimate against zero, from the same regression's residual standard error.Neither No multiple-comparisons correction is applied: screened across the full universe, roughly 5% of funds are expected to clear p < 0.05 by chance alone even with zero true skill. See the methodology page for the expected false-positive count. Blank when the mapped benchmark is in another currency.
Odds this outperformance is chance (10Y)
alpha_pvalue_10y
Two-sided p-value of the alpha t-statistic against the t-distribution with n-2 degrees of freedom.Lower No multiple-comparisons correction is applied: screened across the full universe, roughly 5% of funds are expected to clear p < 0.05 by chance alone even with zero true skill. See the methodology page for the expected false-positive count. Blank when the mapped benchmark is in another currency.
Worst fall from a peak (10Y)
max_drawdown_10y
Worst peak-to-trough fall in daily NAV, carried as a negative number: -12% is a milder fall than -40%, which is why a higher value is the better one.HigherMeasured on daily NAV. The series starts at any NAV redenomination, so the step is never counted as a fall.
Return per unit of worst fall (10Y)
calmar_10y
Trailing CAGR divided by the absolute maximum drawdown.HigherUnstable when the drawdown is small.
Score against similar funds
score
Weighted percentile decomposition against the fund's own peer group, 0-100. Computed by the same scoring module GET /score/{scheme_code} returns in full.HigherA description of the past against a declared weight table, never a rating or a recommendation. It is a percentile inside one peer group, so it does not compare across groups: a fund scoring 80 among 34 small-cap funds and one scoring 60 among 16 US feeders are not ranked against each other. Blank where the peer group is too thin to rank in, or where the fund answers less than half the weight table.
How much of the score this fund could answer
score_coverage
Share of the composite score's weight table this fund could answer; the score is renormalised over it.NeitherA young fund answers less of the table, so its score rests on fewer measures. Below half the table no score is published at all.
Recent run, last year minus last month
momentum_12_1
Total return over the eleven months ending one month before the snapshot date.HigherThe most recent month is deliberately left out: it carries a short-term reversal that says nothing about the manager. Blank below eleven months of history.
Annual fee, already deducted from returns
expense_ratio
Total expense ratio for this scheme's plan, as disclosed by the AMC.LowerMatched to the scheme by name, since the disclosure carries no scheme code. The source covers only part of the industry, so a blank means not published, not zero. Returns already sit net of it, so it is not a second deduction.
How long this fund has existed
fund_age_years
Years between the first and the latest NAV published for the scheme.NeitherAMFI publishes no launch date; the first NAV date stands in for it.
Money in this exact plan (quarterly average)
latest_aum
This is AMFI quarterly average AUM for this exact scheme variant, such as Direct Growth.NeitherIt is not a current month-end AUM and does not include related Direct/Regular or Growth/IDCW variants.
Total money in the fund, all plans
aum_family_latest
Sum of latest_aum across every scheme code sharing this fund's fund_family_id (Direct/Regular, Growth/IDCW) - the figure comparable to a factsheet total.NeitherStill AMFI's SEBI-standardised quarterly average, so it will not match a month-end factsheet figure. Null where no variant in the family has a reported AUM.
Change in fund size over a year
aum_growth_4q
Growth in aum_family_latest over the last 4 AMFI-published quarters.NeitherNeeds 5 distinct quarterly AUM readings recorded for the fund's family; blank below that, such as for a fund newly tracked by this project.
Size compared with similar funds
aum_percentile_in_sub_category
Percentile rank of aum_family_latest inside the fund's clean_sub_category, 1.0 being the largest fund.LowerRanked on the family total, not this scheme code's own AUM. Requires the same minimum peer count as every other peer-relative metric; blank below it.
Price of one unit today
latest_nav
Latest published net asset value.NeitherFor a matured scheme this is its final frozen NAV.
Charge for selling early
exit_load_pct
Exit load charged on redemption inside the exit load period, per the SID.LowerThird-party enrichment, not AMFI. Blank when the source does not carry this scheme.
How long that early-exit charge applies
exit_load_period_days
Days after purchase during which the exit load applies.NeitherThird-party enrichment, not AMFI. Blank when the source does not carry this scheme.
Money cannot be withdrawn for
lock_in_days
Mandatory lock-in period from purchase, such as for ELSS schemes.NeitherThird-party enrichment, not AMFI. Blank when the source does not carry this scheme.
Smallest lump sum
min_investment
Minimum lump-sum investment stated in the SID.NeitherThird-party enrichment, not AMFI. Blank when the source does not carry this scheme.
Smallest monthly amount
min_sip
Minimum monthly SIP instalment stated in the SID.NeitherThird-party enrichment, not AMFI. Blank when the source does not carry this scheme.
Years the current manager has run it
manager_tenure_years
Years since the current fund manager's stated start date, derived at query time.NeitherThird-party enrichment, not AMFI. Blank when the source does not carry a start date.

Sources and attribution

Nav original
AMFI (Association of Mutual Funds in India), public records
Nav delivery
TigZig MF NAV API (api.tigzig.com/mf/v1)
Expense ratio
AMFI's daily per-AMC TER disclosures (amfiindia.com/ter-of-mf-schemes), latest day per scheme; matched to schemes by name.
Scheme attributes
Riskometer, exit load, lock-in, minimum investment/SIP, SID benchmark and fund manager: a third-party candidate source, observed unreachable on first contact and not yet confirmed reliable. Never used in a return, risk or ranking - a screener filter or display value only, blank with a named reason wherever the source could not be reached or does not carry the fact.
Attribution note
TigZig reformats and republishes AMFI data; it is not an authoritative source and is not affiliated with AMFI.

Limitations

  • Expense ratio comes from a separate scrape of AMFI's per-AMC TER disclosures, not from the NAV source. It is joined by exact fund name, covers part of the industry rather than all of it, and is blank wherever a fund was not published under a matching name or its disclosure contradicted itself.
  • AUM is AMFI's quarterly average per scheme code, not month-end AUM for the whole fund.
  • Scheme mergers and renames can split one economic fund across scheme codes.
  • SEBI re-categorisation means a fund's sub-category today may not be the one it ran under.
  • The default active-only universe excludes closed and merged schemes, biasing history upward.
  • Riskometer, exit load, lock-in, minimums, SID benchmark and fund manager come from an unproven third-party source and are never a return, risk or ranking input; manager tenure is computed from the manager's start date at query time, never stored.
  • Survivorship bias: this site publishes today's active schemes only, so historical screening here will not see funds that closed or merged. The API (make api) keeps them, and "Survivorship bias, quantified" above shows how it measures the gap per category.