A tale of two returns

It was the best of times, it was the worst of times.

As you may have guessed, this is a mashup of a novel by Charles Dickens and an explanation of financial returns.

The key plot element of A Tale of Two Cities is that there are two men, Charles Darnay and Sydney Carton, who look almost identical.  They are different, but in some respects interchangeable.

Simple returns and log returns are different, but in some respects interchangeable.

Return definitions

Traditionally simple returns are denoted with a capital R and log returns with a lower-case r.  These are defined as:

Rt = (Pt – Pt-1) / Pt-1 = Pt / Pt-1 – 1

rt = log(Pt / Pt-1) = log(Pt) – log(Pt-1)

where Pt is the price of the asset at time t.  We are defining the return from time t-1 to time t.  The log function here is the natural logarithm.

R computation

In the R language if you have a vector of prices (for the same asset at different times), you can compute the simple returns with:

> R <- priceVec[-1] / priceVec[-length(priceVec)] - 1

It is slightly different if you have a price matrix (with times in the rows and assets along the columns):

> R <- priceMat[-1, ] / priceMat[-nrow(priceMat), ] - 1

For log returns you can do the same command in either case:

> r <- diff(log(prices))

Caveat: This assumes the positions are all long.  Read on for an explanation of returns for short positions.

Nomenclature

We have two similar concepts and we need to distinguish between them.  Unfortunately this is about as messy as the French revolution in which our Dickensian characters are embroiled.

First off, some would think that what we are calling “return” is an abbreviation of “rate of return”.

Table 1: Names for return concepts.

r R R+1
log simple total
continuously compounded net gross

I find it hard to believe that Table 1 lists all the words that are used.  Let me know if there are others.

Extreme care is needed. Some of these words are used inconsistently by different people.

The word “total” can (and in my experience more probably does) mean the return that includes dividends as well as prices.  A (simple) total return in this sense is:

Rt = (Pt + Dt – Pt-1) / Pt-1

where Dt is the dividend or interest that is paid between times t-1 and t.  This concept is sometimes expressed as the “overall” return.

The terms “gross” and “net” are more commonly used to mean something like before and after tax.

Take-away message: There is no magic potion.  You’ll need to threaten violence on whomever is speaking until they make clear what they mean.

Transmutation

It is easy to convert one type of return into the other.  Shortly we’ll see why that is useful.

To go from simple to log returns, do:

r = log(R + 1)

To go from log return to simple return, do:

R = exp(r) – 1

These formulas work exactly as is in R — whether the returns are vectors or matrices.

Figure 1: Comparison of simple and log returns.

Figure 1 compares simple and log returns.  It shows that log returns are always smaller than simple returns.  (You can remember which is smaller because the smallest possible simple return is -100%, that is minus infinity for the log return.)  For daily returns or intraday returns the differences between the two types are going to be trivial, generally.

Aggregation

The two types act very differently when it comes to aggregation.  Each has an advantage over the other:

  • simple returns aggregate across assets
  • log returns aggregate across time

The simple return of a portfolio is the weighted sum of the simple returns of the constituents of the portfolio.

The log return for a time period is the sum of the log returns of partitions of the time period.  For example the log return for a year is the sum of the log returns of the days within the year.

Time reversal

Physicists tend to think that time only goes one way.  In finance time can go backwards — you can short an asset.

Or you can think of it as having been misled so far.  What has been identified as the initial time in the return formulas should really be called the buying time, and what has been identified as the final time should be the selling time.  When we short an asset, the buying time is after the selling time.

The log return of a short position is the negative of the log return of the long position.  The relationship of the simple return of a short position relative to that of the long position is a little more complicated:

-R / (R + 1)

The computations we saw before in the R language assume that the positions are long and the times are in order.  When computing log returns of short positions, you can always just take the negative of the computation for the long positions.  For simple returns, you have some choices.

Foreign exchange

The return you experience for an asset that is priced in a foreign currency depends both on the return in the foreign currency and the return of that currency relative to your home currency.

There is a simple relationship for log returns: it is the sum of the log return of the asset in the foreign currency and the log return of the currency.  The formula for simple returns is slightly complicated.

If you have the return for euros per dollar, then what is the return for dollars per euro?  Again, it is easy for log returns: one is the negative of the other.

Questions

The material in this post is fairly pedestrian, and most people in finance at least sort of know a lot of it.  So why is this information so hard for a novice to find?

Epilogue

A Tale of Two Cities ends with Carton taking the place of Darnay in prison and at the guillotine.  He does this for the woman that they both love who chose Darnay and not Carton to marry.  The final sentence of the novel is the thoughts of Carton just before he is executed:

It is a far, far better thing I do, than I have ever done; it is a far, far better rest that I go to, than I have ever known.

Update 2012 July 30

See also “Returns with negative asset values”.

Appendix R

To create Figure 1 for your own consumption with R you might do commands like:

> retseq <- seq(-.75, .75, length=100)
> plot(retseq, log(retseq + 1), type='l')
> abline(0,1, lty=2)

The commands that actually created Figure 1 were:

> retseq <- seq(-.75, .75, length=100)
> plot(retseq, log(retseq + 1), type="l",
+    axes=FALSE, col="blue", lwd=3, xlab="Simple return",
+    ylab="Log return")
> axis(1, at=c(-.5, 0, .5), label=c("-50%", "0%", "50%"))
> axis(2, at=c(-1, -.5, 0, .5),
+    label=c("-100%", "-50%", "0%", "50%"))
> box()
> abline(0,1, lty=2, col="gold")

This entry was posted in Quant finance, R language and tagged , , , , , , , , , , , , . Bookmark the permalink.

48 Responses to A tale of two returns

  1. Pingback: Lesestunde 04.10.2010 | ECONinfo

  2. Pat says:

    [Comment by Mark Breman but erased in a hardware crash.]

    Hi Pat,

    “I find it hard to believe that Table 1 lists all the words that are used. Let me know if there are others.”

    The quantmod package uses the term “arithmetic” for simple returns.

    Kind regards,

    -Mark-

  3. Zeno Adams says:

    Pat,

    I also often hear (and use myself) the terms “discrete return” (for simple return) and “continuous return” (for log return), indicating the underlying assumption about the frequency of return payments.

    Zeno

  4. Charles Ward says:

    I thought that Latane et al had used “holding period return” for 1+R but I am unsure whether it has remained in popular use.

  5. louis says:

    In Matlab if you have a vector of prices (for the same asset at different times),
    you can compute the simple returns with:

    >> now = 2:length(prices);
    >> returns = prices(now)./prices(now-1) – 1;
    >> plot(returns’)

    It is slightly different if you have a price matrix (with times in the columns and assets along the rows):
    >> returns = prices(:,now)./prices(:,now-1) – 1;

    For log returns you can do the same command in either case:
    >> plot(diff(log(prices’)))

    To reproduce figure 1:
    >> retseq = [-.75:98:.75];
    >> plot(retseq, log(retseq + 1), ‘b’); hold
    >> plot(retseq, retseq, ‘y -‘); hold
    >> xlabel(‘Simple return’);
    >> ylabel(‘Log Return’);

  6. Pat says:

    Louis,

    Thanks for adding the Matlab code. I see the potential for confusion if the Matlab convention is assets along rows while the R convention is assets along columns.

    Others who know other languages are encouraged to add the computations for the two types of returns similar to what Louis has done for Matlab.

    • louis says:

      My pleasure. The convention might actually be my personal preference. Other than this, I tried to keep it similar to your R. I would also suggest that Freemat is an open source alternative to paying for matlab.

      • louis says:

        that is,
        returns = prices(now,:)./prices(now-1,:) – 1; works as ./ is an element by element operation

  7. Pingback: Geometric Efficient Frontier « Systematic Investor

  8. Sergiusz says:

    I realise I’m commenting on an old post but I’ve come across this post via google and other might as well. It’s important to distinguish short selling and simply selling an instrument.

    Simply put, I think the
    -R/(1+R)
    is the correct formula if you are selling an instrument and buying it back at a later time with the proceeds you got from selling it in the first place. However, note that you cannot lose more than you invested in this case.

    When short selling a stock, you can lose more than you invested. In fact the downside is unbounded. The return in this case is simply the negative of the long position: -R

    • Pat says:

      Sergiusz,

      I don’t understand where -R/(1+R) comes from. Can you explain?

      This subject is a bit related to the negative net asset value post.

      • sergiusz says:

        It’s quoted from the blog post under time reversal as the way to calculate the proportional return for a short position.

        Sergiusz

        • Pat says:

          Of course. I guess I should read my own stuff periodically.

          I see what you are saying now.

          I think the “right” way is to always look at the changes to the net asset value of the portfolio. That is simple, and really what I think people have in mind. But even that is subject to a discussion of how much cash is really backing the portfolio.

  9. Jim Goodwin says:

    You wrote, “So why is this information so hard for a novice to find?”

    (Amen + Thanks)^n. I have one question.

    People write all the time about how this security or index is “correlated” with that one, without specifying exactly what they are correlating. I’ve been using simple returns but should I be using log returns? Is there one right answer? If not, how does one decide which to use?

    Thanks
    jg

    • Pat says:

      Jim,

      That’s a great question. This is finance so I think the answer has to be that there isn’t one right answer. But I think if there were one right answer it would be log returns.

      My thinking is that we have reason to believe that log returns have a symmetric distribution and correlations are more sensible for symmetric distributions than skewed ones.

      But it is important to remember that all of this is just modeling. A better question than ‘What is “right”?’ is ‘What is best for the particular application that I’m doing?’

  10. Pingback: Volatility estimation and time-adjusted returns | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  11. Pingback: Popular posts 2012 May | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  12. Pingback: A slice of S&P 500 skewness history | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  13. Pingback: Popular posts 2012 March | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  14. Pingback: Alpha decay in portfolios | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  15. Pingback: The volatility mystery continues | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  16. Pingback: The mystery of volatility estimates from daily versus monthly returns | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  17. Pingback: The distribution of financial returns made simple | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  18. Pingback: Replacing market indices | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  19. Pingback: Cross-sectional skewness and kurtosis: stocks and portfolios | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  20. Pingback: Popular posts 2012 April | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  21. Pingback: Popular posts 2012 August | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  22. Pingback: Popular posts 2012 June | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  23. Pingback: S&P 500 correlations up to date | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  24. Pingback: Blog year 2012 in review | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  25. Pingback: A pictorial history of US large cap correlation | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  26. Pingback: The half variance approximation for mean returns | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  27. Pingback: Another tale of two returns | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  28. Pingback: garch models caught in the spotlight | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  29. Pingback: What is volatility? | Portfolio Probe | Generate random portfolios. Fund management software by Burns Statistics

  30. Pingback: A Gentle Introduction to Finance using R: Efficient Frontier and CAPM – Part 1 – Data Shenanigans

  31. Pingback: A Gentle Introduction to Finance using R: Efficient Frontier and CAPM – Part 1 – Mubashir Qasim

  32. Pingback: A Gentle Introduction to Finance using R: Efficient Frontier and CAPM – Part 1 – Import Knowledge

  33. Hassan Rabi says:

    If I have a series of returns; say for last 20 years, how to convert that simple return to log return? I know the formula r=log(R+1) to convert but I have several negative return in my series. Thanks.

    • Pat says:

      Negative returns are fine as long as they are not below -1.

      An easy mistake is to try to apply the formula when the returns are expressed in percent.

  34. MM says:

    “The simple return of a portfolio is the weighted sum of the simple returns of the constituents of the portfolio”

    Why I can’t prove this:

    Using p_i_t the price of asset i at time t,
    Pt = sum p_i_t with equal weights

    but Rt = (Pt / Pt-1) – 1
    is not
    sum R_i_t

    sum R_i_t = sum (p_i_t / p_i_t-1) – 1

  35. Pingback: Lessons learned building an ML trading system that turned $5k into $200k - TechBits

  36. Pingback: Hacker News :- Lessons learned building an ML trading system that turned $5k into $200k | G-NEWS |

  37. Pingback: การคำนวณ Rate Return จากราคาหุ้นย้อนหลัง 10 ปีด้วย Python – I'm Aoddy.

  38. Pingback: การคำนวณ Rate Return จากราคาหุ้นย้อนหลัง 10 ปีด้วย Python | I'm Aoddy.

  39. Pingback: log returns vs simple returns 3days - trustrose.com

  40. Pingback: Lessons learned building an ML trading system that turned $5k into $200k (2019) - My Blog

Leave a Reply

Your email address will not be published.