Built and run by one person.

Rolling Returns

Return for every possible holding period, not just one start date.

Source data: AMFI daily NAV (38,000+ schemes, 37M+ rows since April 2006) + Nifty benchmark indices · Last updated: 2026-07-02
Live tool

Analyze any Indian mutual fund or portfolio across 30+ return, risk and benchmark metrics in the live MFPRO tool.

The Problem with Point-to-Point CAGR

CAGR (Compounded Annual Growth Rate) measures the compounded growth between two specific dates. Despite the word "average" in its name, there is no averaging happening. It is purely point-to-point: start NAV on date A, end NAV on date B, and the formula gives you the steady annual rate that would produce the same result.

The problem is that a single number from a single pair of dates is fragile. Shift your start date by a week and the CAGR can look meaningfully different, especially if markets moved sharply around that time. When comparing funds or measuring a fund against a benchmark, you don't want a number that jumps around based on an arbitrary date choice.

What Rolling Returns Answer

Rolling returns shift the question from a single data point to a distribution of outcomes. Instead of asking "what was the CAGR from January 2018 to January 2025?", rolling returns ask: "across the fund's entire history, what did a typical 1-year holding return? How consistent was it? How often did it go negative?"

The way this works: for every single trading day in the fund's history used as an end date, the system looks back exactly 1 year and computes the CAGR for that window. Do this for every possible end date and you get thousands of individual 1-year CAGRs. Then average them, find the median, find the worst and best, and count how many were negative. That is what the rolling returns table shows.

For example, a 1-year rolling return computed over 7 years of history will produce roughly 1,500-1,700 individual 1-year CAGR observations. The average of those is a far more reliable picture of what a 1-year holding typically looks like, unaffected by any single arbitrary date.

Two Periods: Rolling Window and Evaluation Period

Rolling returns involve two distinct time spans that are easy to confuse:

The statistics you see (average, median, % negative) are summaries across all the individual rolling observations within the evaluation period. A longer evaluation period means more observations and more reliable statistics.

Evaluation Period Must Be Longer Than the Rolling Window

The rolling window must fit meaningfully inside the evaluation period, otherwise there are too few observations to draw any conclusion.

If a fund launched in 2022 and you select a 5-year rolling window, there is barely enough history for even a single valid 5-year observation. The result would not be meaningful. As a rule of thumb: a 5-year rolling window needs at least 7 to 8 years of data to produce a useful distribution. A 3-year window needs at least 4 to 5 years. The number of observations in the table tells you how much data went into the calculation. Fewer observations means less reliability.

When evaluation period is shorter than or equal to the rolling window (e.g. 5Y rolling over Last 3Y), the Run button is disabled.

How It Works: Calendar Days, Not Trading Days

Rolling windows are defined in calendar days, not trading days. A "1 Year" window looks back exactly 365 calendar days from each end date, not 250 trading days.

Since markets are closed on weekends and holidays, the target date 365 days ago may not have a NAV. The system uses an ASOF JOIN, a database technique that finds the most recent available NAV on or before the target date. This is equivalent to using the last trading day before the target.

For example: if the end date is February 28, 2026, the system targets February 28, 2025. If that falls on a weekend, it uses the Friday NAV instead (say February 27, 2025). The CAGR is then computed over the actual calendar days between the two matched dates, not an assumed 365.

For 1Y+ windows: CAGR = (End NAV / Start NAV) ^ (365.25 / Actual Days) - 1
For sub-1Y windows (3M, 6M): Absolute Return = (End NAV / Start NAV - 1) x 100

Each window also has a minimum-gap threshold: the actual days between start and end NAV must exceed this minimum to be counted. This filters out cases where the ASOF match lands too close to the end date due to extended market closures.

Available Windows

Five rolling windows are available:

Window Look-back Min Gap Return Type
3 Months 91 calendar days 46 days Absolute %
6 Months 183 calendar days 92 days Absolute %
1 Year 365 calendar days 328 days CAGR (annualized)
3 Years 1,096 calendar days 986 days CAGR (annualized)
5 Years 1,826 calendar days 1,643 days CAGR (annualized)

The 3M and 6M windows use absolute (non-annualized) returns since annualizing short periods can be misleading. The 1Y, 3Y, and 5Y windows use CAGR.

What the Table Shows

For the selected window, each fund shows these summary statistics computed across all its rolling observations:

A fund with a high average CAGR but also a high % negative is high-return but inconsistent. A fund with a lower average but near-zero % negative is more reliable: you almost never lose money over that holding period regardless of when you invested.

The ASOF JOIN in Detail

The computation runs entirely in DuckDB SQL on the backend. For each trading day in a fund's history (the "end date"), the ASOF JOIN finds the most recent NAV that falls on or before the target start date. Simplified SQL:

SELECT
  t.fund,
  t.date AS end_date,
  p.date AS start_date,
  -- For 1Y+: annualized CAGR
  POWER(t.nav / p.nav, 365.25 / days_between) - 1
FROM nav_daily t
ASOF JOIN nav_daily p
  ON  t.fund = p.fund
  AND p.date <= t.date - INTERVAL 365 DAY
WHERE days_between >= 328

The ASOF JOIN is what makes this efficient. Instead of scanning all rows to find the nearest date, it directly matches the closest available NAV in a single pass.

Related metrics

More Returns methodology from the MFPRO analytics tool: