Rolling Holding-Period Analysis
Evaluating long-horizon outcomes without treating overlapping windows as independent trials
QM012 · Portfolio Methods · Intermediate
Core idea. Rolling holding-period analysis asks how an investment or relative-performance outcome changes with the investor’s starting date over a fixed long horizon.
Use it for. Describing 5-, 10-, 15-, or 20-year terminal and path outcomes across all feasible historical start dates.
It does not establish. An IID probability of future success merely because a fraction of overlapping historical windows had a particular outcome.
The Question
A strategy may look attractive over the full sample and still disappoint investors who enter at particular dates. Long-horizon evaluation therefore asks a different question from a single inception-to-end backtest:
Across all feasible historical starting dates, what happened over a fixed holding period?
For monthly data, common horizons are 60, 120, 180, and 240 months, corresponding to 5, 10, 15, and 20 years.
Why It Matters
A single full-sample annualized return compresses decades of experience into one endpoint. Rolling holding-period analysis exposes start-date dependence.
But it introduces a statistical trap. Adjacent 10-year windows share 119 of 120 monthly returns. They are therefore highly overlapping observations, not independent Bernoulli trials. The long-horizon asset-return literature has long emphasized that overlapping multi-year observations alter the sampling problem (Richardson and Stock 1989; Hjalmarsson 2008).
The descriptive distribution is still useful. What changes is the interpretation.
Intuition
Imagine sliding a fixed-width window across a return history one month at a time.
For each start date, you can ask two different kinds of questions:
- Endpoint: Where did wealth finish after \(H\) months?
- Path: What happened between the start and finish—drawdown, relative drawdown, minimum wealth ratio, time underwater, or another path statistic?
Two windows can finish with the same terminal wealth and have very different investor experiences along the way.
The Method
Let monthly simple returns be \(r_1,\ldots,r_T\). For a holding period of \(H\) months and start index \(s\), define terminal gross growth as
\[ G_{s,H}=\prod_{j=s+1}^{s+H}(1+r_j), \]
for every feasible \(s\) such that \(s+H\le T\).
The number of overlapping rolling windows is
\[ N_H=T-H+1 \]
when the sample is represented as \(T\) sequential return observations and each contiguous block of \(H\) returns is used once.
A terminal cumulative return is
\[ R_{s,H}=G_{s,H}-1. \]
An annualized compound return for monthly data is
\[ CAGR_{s,H}=G_{s,H}^{12/H}-1. \]
Relative endpoint outcomes
For portfolio return \(r_{p,t}\) and benchmark return \(r_{b,t}\), define portfolio and benchmark growth inside the same window:
\[ G^p_{s,H}=\prod(1+r_{p,t}),\qquad G^b_{s,H}=\prod(1+r_{b,t}). \]
The terminal relative-wealth ratio is
\[ Q_{s,H}=\frac{G^p_{s,H}}{G^b_{s,H}}. \]
Then \(Q_{s,H}<1\) means the portfolio ended the holding period with less wealth than the benchmark, even though the portfolio itself may have made money in absolute terms.
Path versus Endpoint
Endpoint statistics use only the terminal state of each window. Path statistics use the sequence inside the window.
For example, if \(Q_{s,t}\) is the benchmark-relative wealth path within a rolling window, its benchmark-relative drawdown is based on the running maximum of \(Q\), not merely the terminal value. This distinction is developed in QM013 — Benchmark-Relative Portfolio Evaluation.
A strategy can therefore have:
- a satisfactory 10-year endpoint but a severe relative drawdown halfway through; or
- a disappointing 10-year endpoint despite relatively smooth interim behavior.
Neither summary substitutes for the other.
Overlapping Windows and Dependence
With a 10-year monthly horizon, the January 2000–December 2009 window and the February 2000–January 2010 window share 119 monthly observations. Their outcomes will mechanically be related.
Therefore a statement such as
“The strategy beat the benchmark in 72% of rolling 10-year windows”
is an empirical historical frequency over overlapping windows. It should not automatically be read as
“The probability of beating the benchmark over the next 10 years is 72%.”
The second statement requires a probabilistic model and an inference design that addresses dependence, nonstationarity, and the representativeness of the historical sample.
Rolling-window counts are excellent descriptive diagnostics of start-date sensitivity. They are not independent repeated experiments. Standard errors or binomial confidence intervals that assume IID windows are generally inappropriate without further justification.
If formal inference is required, consider dependence-aware methods appropriate to the estimand, including block-based resampling in QM006 — Block Bootstrap. Non-overlapping windows can be a useful robustness view, but they trade dependence reduction for a much smaller sample and do not automatically solve all long-horizon inference problems.
How to Interpret the Outcome Distribution
For each horizon \(H\), report the empirical distribution across starting dates rather than only a mean.
Useful summaries include:
- median and selected percentiles of terminal CAGR;
- minimum and maximum terminal outcome;
- fraction of windows with \(Q_{s,H}<1\) or another economically defined event;
- path statistics such as maximum absolute or relative drawdown within each window; and
- the actual calendar start dates associated with extreme outcomes.
The calendar dates matter because clusters of poor windows often share the same historical episode. A long run of adjacent “failures” may represent one prolonged regime rather than many independent events.
Financial / Economic Example
Suppose we have 300 monthly returns, or 25 years of data.
The number of overlapping windows is:
- 5 years (\(H=60\)): \(300-60+1=241\);
- 10 years (\(H=120\)): \(181\);
- 15 years (\(H=180\)): \(121\);
- 20 years (\(H=240\)): \(61\).
The 61 rolling 20-year outcomes do not provide 61 independent 20-year experiments. Neighboring windows differ by only one entering month and one exiting month.
The included synthetic example generates 300 deterministic monthly returns, computes each horizon’s window count, and compares endpoint returns with an intra-window drawdown statistic.
Implementation
import numpy as np
def rolling_growth(returns, horizon):
r = np.asarray(returns, float)
return np.array([
np.prod(1.0 + r[s:s+horizon])
for s in range(len(r) - horizon + 1)
])For real research, retain each window’s start date and end date. A table of values without the associated calendar period makes clustering and regime interpretation much harder.
Common Mistakes
Treating every rolling window as independent. Heavy overlap creates dependence by construction.
Reporting only the success frequency. Show magnitude and tail outcomes as well.
Mixing endpoint and path claims. Terminal underperformance and intra-window relative drawdown are different statistics.
Ignoring start dates. Extreme windows often cluster around a common historical episode.
Changing horizon after seeing the answer. If 5/10/15/20 years are economically motivated, define them before inspecting the full set of results.
When Not to Use It
Rolling holding periods are not a substitute for a genuine prospective test or for a structural model of future returns. They are also less informative when the available sample is only slightly longer than the horizon, because the number of distinct historical regimes is very small.
If the question is about one portfolio’s drawdown episodes rather than fixed-horizon start-date sensitivity, use QM008 — Drawdown, Underwater Duration, and Recovery.
Used in SlackQuant Research
- When Protection Works but the Portfolio Still Lags: evaluates long-horizon outcomes across rolling 5-, 10-, 15-, and 20-year holding periods rather than relying only on the full-sample result.
Reproducibility
The Python example verifies rolling-window counts and computes both endpoint and path quantities from a deterministic series. The accuracy gate explicitly prohibits IID-probability language for overlapping historical frequencies.