Skip to content
All library documents

Compounding Monthly Returns for Cumulative Performance and Drawdown

Article Quant Q&A · Author: Shirley

Summary

The document asks how to calculate cumulative performance from a sequence of monthly returns and why a maximum drawdown calculation appears inconsistent. It gives the standard multiplicative aggregation idea: each periodic return is converted to a growth factor, the factors are compounded through time, and subtracting one expresses cumulative performance as a return rather than a wealth index. A wealth index instead remains at its initial normalized level and compounds the factors without that subtraction.

The question arises because the author observes a drawdown minimum at an index whose reported drawdown seems small, and has seen both cumulative-return and wealth-index conventions in tutorials. The document provides no dataframe values, drawdown formula, or resolution of the reported anomaly, so it cannot diagnose the specific index. The distinction matters because drawdown is normally computed from a value or wealth series relative to its prior peak; consistent initialization and peak calculations are essential, while the two cumulative conventions differ by a constant offset.

Key ideas

  • Periodic returns compound by multiplying their growth factors over time.
  • Cumulative return subtracts the initial normalized wealth level from the compounded wealth index.
  • A wealth index compounds returns without subtracting one.
  • Maximum drawdown compares the series with its running peak, so consistent series conventions matter.

Tags

Full text
# Cumulative return calculation with monthly return


# Cumulative return calculation with monthly return












I am working on calculate the cumulative return and I have monthly return rate as input. So I found formula of cumulative return:

$$ \text{cumulative} = (1 + r_1) (1 + r_2)(1 + r_3) - 1 $$

so I used `(df+1).cumprod()-1` in my python code

while when I used the result to calculate maximum drawdown, it shows weird.

You can see I got max drawdown at '63' index while its drawdown is very low actually.

and I found some article and tutorial videos written the cumulative return as: `(df + 1).cumprod()`.

So which one is correct, what should I use to calculate maximum drawdown?

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.