Skip to main content

How to calculate the internal rate of return (IRR) and the net present value (NPV) of a stock portfolio with Google Sheets

As a long-term investor, I need to know how to evaluate the performance of my stock portfolio. A simple return on investment calculation is not a good indicator for long-term investment because it does not take into account the holding duration, and cash flows involved during that period. A return on investment of 80% after 20 years is not as impressive as it sounds after 1 year. In this post, I explain the idea of using Google Sheets to calculate the internal rate of return (IRR) and the net present value (NPV) of a stock portfolio.

Diagram of cash flows for a stock portfolio investment

 

Identify cash flows

As mentioned in the introduction of time value of money, present value, future value, internal rate of return, net present value, to calculate the internal rate of return (IRR) and the net present value (NPV), it is necessary to firstly identify cash flows. Cash flow is the money that is transferred from one entity to another entity. On the recipient side, the cash flow is positive. However, on the expedition side, the cash flow is negative.

In a stock portfolio, each cash flow is essentially a transaction. It could be either:

  • A DEPOSIT transaction: money is transferred from a pocket to a broker account
  • A WITHDRAW transaction: money is transferred from a broker account to a pocket
  • A BUY transaction: money is transferred from a broker account to the market in exchange for shares of a stock
  • A SELL transaction: money is transferred from the market to a broker account in exchange for shares of a stock
  • A DIVIDEND transaction: money is transferred from a paying-dividend company to a shareholder's broker account

Note

That leads to the question of how to manage stock transactions with Google Sheets. In the post, I have detailed how to use Google Sheets as a database to keep track of a portfolio's transactions. The rest of this guide is based on that model.

Manage stock transactions with Google Sheets

Depending on the chosen side, a cash flow is positive or negative.

  • If calculating internal rate of return (IRR) and net present value (NPV) for a stock in the portfolio, cash flows are all transactions related to that stock. They are BUY, SELL, and DIVIDEND transactions.
    • From the portfolio's perspective, cash flow is negative for a BUY transaction.
    • From the portfolio's perspective, cash flow is positive for a SELL and DIVIDEND transaction.
    • Note: If a stock is currently held in the portfolio, its current market value (shares * latest price) is considered as a positive cash flow because that is the amount that will be sent to the portfolio if that stock is immediately sold out.

Diagram of cash flows for a stock portfolio investment
  • If calculating internal rate of return (IRR) and net present value (NPV) for the whole portfolio, there are two options for identifying cash flows.
    • The first option is to consider the task as calculating internal rate of return (IRR) and net present value (NPV) for many stocks. Therefore cash flows are BUY, SELL, and DIVIDEND transactions for all stocks presented in the portfolio.
    • The second option is to view it from the pocket. Therefore cash flows are all DEPOSIT and WITHDRAW transactions.
      • From the pocket's perspective, cash flow is negative for a DEPOSIT transaction.
      • From the pocket's perspective, cash flow is positive for a WITHDRAW transaction.
    • Note: The portfolio's current value is considered as a positive cash flow because that is the amount that will be withdrawn to the pocket if the portfolio is immediately closed (sell all shares and withdraw all money).

Choose a discount rate

A discount rate is a next thing to identify. The discount rate is used to benchmark an investment. The resulted internal rate of return (IRR) is compared to the discount rate or the discount rate is used to calculate the net present value (NPV). There are many ways to choose a discount rate and the choice depends on personal preferences, for example:

  • A minimum required rate of return for an investment that one sets for herself/himself
  • An expected rate of return if investing in an alternative asset such as: saving account, real estate, buying a business, etc.
  • A reference rate of return of the market: S&P 500, CAC 40, etc.

As for myself, I set it to be 10% in the sample portfolio.

Apply XIRR and XNPV functions of Google Sheets

With the cash flows and the discount rate identified, the next step is to calculate the internal rate of return (IRR) and net present value (NPV) of a stock portfolio by applying the mathematical formulas introduced in the introduction post. However, as demonstrated by several examples in that introduction post, the task requires many repetitive calculations and investors don't generally have time to do those calculations manually. Instead, it is wiser to leverage the 4 available functions IRR, NPV, XIRR, and XNPV of the Google Sheets to calculate the internal rate of return (IRR) and net present value (NPV) for a stock portfolio.

  • The IRR and NPV functions are used if cash flows are regularly spaced. For example, an investor only makes transactions on the first day of every year. I think it is not a realistic scenario.
  • The XIRR and XNPV functions are used if cash flows are irregularly spaced. Transactions can be made on whatever day. The XIRR and XNPV functions require both date and amount for cash flows. They are the two functions that I use and explain in this series.

Note

  • For the XIRR function, cash flows can be entered in any order.
  • For the XNPV function, cash flows must be ordered ascending by time.

Interpret internal rate of return (IRR) and net present value (NPV)

Using internal rate of return (IRR) and net present value (NPV) helps me to evaluate the performance of my investment. Given my personal discount rate being 10%:

  • If the calculated internal rate of return (IRR) is less than 10% for a stock (or the whole portfolio), I can say that my investment into that stock (or the whole portfolio) does not meet my expectation. Otherwise, if it is greater than 10%, I am pleased with that performance.
  • If the calculated net present value (NPV) (with 10% discount rate) is negative for a stock (or the whole portfolio), I can say that my investment into that stock (or the whole portfolio) does not meet my expectation. Otherwise, if it is positive, I am pleased with that performance.

Conclusion

In this post, I have explained the idea of using Google Sheets functions to calculate internal rate of return (IRR) and net present value (NPV) for a stock portfolio at three levels: for a stock, for a group of stocks, and for the whole portfolio. The process consists mainly of three steps:

In the next posts, I will explain how to apply this idea with some ready-to-use examples and demos.

Series: how to calculate internal rate of return (IRR) and net present value (NPV) for a stock portfolio in Google Sheets

This series was suggested by an anonymous reader's comment on June 15, 2021. At first, I didn't have any clue about what she/he was talking about. After several months of researching about the concepts and formulas, then trying different functions of Google Sheets, I am delighted to finish the subject and to share it on this blog. I hope it is clear and easy to follow for the readers and if you find it useful, please support me a coffee. I appreciate it, thank you!

Thank you the Anonymous reader for your comment!

Comments

People also enjoyed…

Create personal stock portfolio tracker with Google Sheets and Google Data Studio

I have been investing in the stock market for a while. I was looking for a software tool that could help me better manage my portfolio, but, could not find one that satisfied my needs. One day, I discovered that the Google Sheets application has a built-in function called GOOGLEFINANCE which fetches current or historical prices of stocks into spreadsheets. So I thought it is totally possible to build my own personal portfolio tracker with Google Sheets. I can register my transactions in a sheet and use the pivot table, built-in functions such as GOOGLEFINANCE, and Apps Script to automate the computation for daily evolutions of my portfolio as well as the current position for each stock in my portfolio. I then drew some sort of charts within the spreadsheet to have some visual ideas of my portfolio. However, I quickly found it inconvenient to have the charts overlapped the table and to switch back and forth among sheets in the spreadsheet. That's when I came to know the existen

How to convert column index into letters with Google Apps Script

Although Google Sheets does not provide a ready-to-use function that takes a column index as an input and returns corresponding letters as output, we can still do the task by leveraging other built-in functions ADDRESS , REGEXEXTRACT , INDEX , SPLIT as shown in the post . However, in form of a formula, that solution is not applicable for scripting with Google Apps Script. In this post, we look at how to write a utility function with Google Apps Script that converts column index into corresponding letters. With the solution in the form of a formula , we don't even need to understand how column index and letters map each other. With apps script, we need to understand the mapping to come up with an algorithm. In a spreadsheet, columns are indexed alphabetically, starting from A. Obviously, the first 26 columns correspond to 26 alphabet characters, A to Z. The next 676 columns ( 26*26 ), from 27th to 702nd, are indexed with 2 letters. [AA, AB, ... AY, AZ], [BA, BB, ... BY, BZ],

Create a dividend income tracker with Google Sheets by simply using pivot tables

As my investment strategy is to buy stocks that pay regular and stable dividends during a long-term period, I need to monitor my dividends income by stocks, by months, and by years, so that I can answer quickly and exactly the following questions: How much dividend did I receive on a given month and a given year? How much dividend did I receive for a given stock in a given year? Have a given stock's annual dividend per share kept increasing gradually over years? Have a given stock's annual dividend yield been stable over years? In this post, I explain how to create a dividend tracker with Google Sheets. Manage stock transactions with Google Sheets Create dividend tracker with Google Sheets Track annual dividend amount of stocks Track dividend amount by month and by year Track annual dividend per share of stocks Track annual dividend yield of stocks Demo Conclusion References Manage stock transactions with Google Sheets I use a spreadsheet on Goo