What is Beat Rate?
Beat Rate tells you how often a fund outperformed its benchmark over rolling periods. If a fund has a 1Y Beat Rate of 75%, it means that in 75% of all possible 1-year holding periods, the fund delivered a higher return than Nifty 50. It answers a simple question: "If I picked a random 1-year window, what are the odds this fund beat the market?"
How We Compute It
For every trading day, we compute the rolling return for the fund AND the benchmark over the same window (e.g., 1 year). Then we count how often the fund's rolling return was higher than the benchmark's.
The rolling return for both fund and benchmark uses the same window and the same CAGR/absolute return formula. For windows > 1 year, both are annualized to CAGR. For shorter windows (3M, 6M), both are simple percentage returns.
SQL (simplified)
WITH rolling AS (
-- Fund rolling returns (ASOF JOIN for lookback)
SELECT a.scheme_code, a.date,
(POWER(a.nav/b.nav, 365.0/(a.date-b.date))-1)*100 AS ret
FROM nav_master a
ASOF JOIN nav_master b
ON a.scheme_code = b.scheme_code
AND b.date <= a.date - INTERVAL '365 days'
WHERE a.nav > 0 AND b.nav > 0
),
bench_rolling AS (
-- Benchmark rolling returns (same window)
SELECT ba.date,
(POWER(ba.nav/bb.nav, 365.0/(ba.date-bb.date))-1)*100 AS ret
FROM index_nav ba
ASOF JOIN index_nav bb
ON bb.index_name = ba.index_name
AND bb.date <= ba.date - INTERVAL '365 days'
WHERE ba.index_name = 'INDEX_NIFTY50'
)
SELECT scheme_code,
COUNT(*) FILTER (WHERE br.ret IS NOT NULL
AND r.ret > br.ret) * 100.0
/ NULLIF(COUNT(*) FILTER (WHERE br.ret IS NOT NULL), 0)
AS beat_rate
FROM rolling r
LEFT JOIN bench_rolling br ON r.date = br.date
GROUP BY scheme_code
Worked Example
Imagine Fund ABC and Nifty 50 with 1-year rolling returns computed on 10 trading days:
| Date | Fund ABC 1Y Return | Nifty 50 1Y Return | Fund Beats? |
|---|---|---|---|
| 2025-01-02 | 18.5% | 14.2% | Yes |
| 2025-01-03 | 17.8% | 15.0% | Yes |
| 2025-01-06 | 16.2% | 16.5% | No |
| 2025-01-07 | 15.9% | 16.1% | No |
| 2025-01-08 | 19.3% | 13.8% | Yes |
| 2025-01-09 | 20.1% | 12.5% | Yes |
| 2025-01-10 | 11.4% | 14.9% | No |
| 2025-01-13 | 22.0% | 15.5% | Yes |
| 2025-01-14 | 14.7% | 16.0% | No |
| 2025-01-15 | 18.9% | 13.1% | Yes |
Fund beats the benchmark in 6 out of 10 observations.
In practice, a full-history 1Y rolling beat rate is computed over 2,000+ observations, not 10. The example above is simplified to show the counting logic.
How to Interpret
- Beat Rate > 70%: The fund consistently outperforms the benchmark over this window. Strong outperformance.
- Beat Rate 50-70%: The fund beats the market more often than not, but not overwhelmingly.
- Beat Rate < 50%: The fund underperforms the benchmark more often than it beats it. Consider an index fund instead.
Important Notes
- Window matters: A fund might have a high 1Y beat rate but a lower 3Y beat rate (or vice versa). This happens when a fund does well in short bursts but mean-reverts over longer periods.
- Beat rate vs magnitude: A fund with 90% beat rate where it wins by 0.1% each time is less interesting than one with 60% beat rate where it wins by 5% on average. Beat rate tells you consistency, not magnitude. Use it alongside Avg Return and Alpha.
- Benchmark: Defaults to Nifty 50 but can be changed via the Benchmark dropdown. The beat rate uses the same rolling window as the one selected in the Rolling Returns view.
Related metrics
More Returns methodology from the MFPRO analytics tool: