Reading media articles or posts online, a common term thrown around is drawdown but do you know what that is? Well, mostly it's a pain metric for investors. In this article we want to explain this term for our users, explain how it is calculated and what a drawdown chart would look like.
Robot has just looked at his portfolio performance which is in a serious drawdown
What does it mean ?
Drawdown is the percentage level of your current portfolio below the portfolio's highest performing level in history. If we take the returns of the SPY ETF as an example first we plot the highest performing level, this is termed the Rolling Maximum and also referred to as High Watermark). It will always be the highest point. Next we plot the cumulative or on-going performance.
Rolling maximum and cumulative performance line plots of the SPY ETF.
Once our first graph has been completed, we can calculate the percentage difference between each line. We plot it on a new graph, and this is our Drawdown. This is what is regularly referred to in media articles and forums.
Drawdown of the SPY ETF.
Other drawdown information
You will frequently see not only a graphical depiction like ours above, but regularly it will be shown as a table. The tabular output is helpful to show deeper drawdown statistics, if for example you want to get a sense of the frequency and length of drawdowns. Other metrics that are commonly used in conjunction with drawdowns are
number of drawdowns that occurred
worst drawdown %
time to recover from the worst drawdown
average length of drawdowns
Drawdowns are a pain measure and as such extra statistics like the above help investors judge what strategies to invest in. It helps provide a realistic expectation of what a user would have gone through emotionally if they had invested in that strategy in the past.
For any python coders out there
A quick code snippet for the python users out there who want to download some yahoo tickers for example, calculate returns and then show drawdowns.
1# Function to compute drawdowns of a time-series of returns2defdrawdown(my_returns):34 equity_perf = (1+my_returns).cumprod()
5 rolling_max = equity_perf.cummax()
6 drawdowns = (equity_perf - rolling_max)/rolling_max