Capture Ratios With R and PerformanceAnalytics

Click to Download Workbook: Up-Down Capture Ratios

We all understand the market goes up and down sometimes. On average the market tends to move a bit more upward than downward. We can also note that individual assets also move up and down in price over time. The question here is how much of the gains during a bull market or the losses during a bear market are incurred with an asset or fund over a given time period? This is where capture ratios come in.

Intuition:

The down-capture ratio (or down-market capture ratio) is a measure of an asset or portfolio of assets (or fund) in down-markets. This metric is typically applied to a fund and used to evaluate an investment manager’s overall performance with respect to down-markets. So, did the fund manager perform well or poorly compared to a relative index during down-markets? Conversely, with the up-capture ratio, we are examining if the fund performed well compared to a benchmark index in up-markets. The down-capture ratio is calculated by dividing the compound return of the asset or fund returns when the market was down by the compound return of all negative returns of the market. Conversely, the up-capture ratio is calculated as the compound return of the asset or fund returns when the market was up by the compound return of all positive returns of the market.

Interpreting these numbers is quite simple. A ratio less than one is considered good. The rationale is if the ratio is .90, the asset or fund captured only a fraction of the market’s losses, or in this case 90%. Conversely, an up capture ratio greater than one indicates that the fund manager captured more gains than the benchmark index did.

Let’s examine the up-capture ratio and down-capture ratio within Excel to get a better understanding of the ratios are calculated.

1.) The first thing we need to do is obtain historical data for a benchmark and asset (specifically a fund). I selected a monthly periodicity.

2.) Calculate Monthly Returns for each (S&P 500 and fund of choice)

3.) Select only returns that are less than 0 for the S&P 500 in one column. In the next column where the S&P returns are less than  0, we display the corresponding asset returns when the market was down (VICEX in this case).

4.) In a separate column, select the benchmark returns that were greater than 0. The next column will have the asset returns that will correspond to the S&P returns when greater than 0.

5.) Finally, we can add one to each return and take the product of each of the columns to create a compounded annual sum for the benchmark and asset.

Down-Capture Ratio = CAGR Asset (Down-Market) / CAGR Benchmark (Down-Market)

Up-Capture Ratio = CAGR Asset (Up-Market) / CAGR Benchmark (Up-Market)

We can implement this very easily within R with the PerformanceAnalytics package.

First, we need to obtain prices via quantmod and calculate periodic returns.

Next, we can use built-in functions within the PerformanceAnalytics package to calculate the up-capture ratio and down-capture ratio.

Elaborating on the up number, down number, up percent, and down percent numbers:

Up Number: The number of periods that the investment was up when the benchmark was up, divided by the number of periods that the Benchmark was up.

Down Number: The number of periods that the investment was down when the benchmark was down, divided by the number of periods that the Benchmark was down.

Up Percent: A measure of the number of periods that the investment outperformed the benchmark when the benchmark was up, divided by the number of periods that the benchmark was up. The higher the better here.

Down Percent: A measure of the number of periods that the investment outperformed the benchmark when the benchmark was down, divided by the number of periods that the benchmark was down. The higher the better here also.

Ideally, we would like to see the downside capture low and upside capture high with respect to the prior.

Let’s examine each asset with respect to the S&P 500. Note I zoomed in on the graph for clarity purposes.

About the author

programmingforfinance

Hi, I'm Frank. I have a passion for coding and extend it primarily within the realm of Finance.

View all posts

1 Comment

  • table.CaptureRatios(portfolioReturns, portfolioReturns[,9], digits = 4)

    instead of

    table.CaptureRatios(combined_rets, portfolioReturns[,9], digits = 4)

    am I right

Leave a Reply

Your email address will not be published. Required fields are marked *