Skip to content
Home » Blog » How to Calculate Your Investment Returns with XIRR in Singapore (2026 Guide)

How to Calculate Your Investment Returns with XIRR in Singapore (2026 Guide)

Last updated: September 2026 | SeaMoneyTips

Summary

XIRR (Extended Internal Rate of Return) is the most accurate way for Singapore investors to measure real investment returns when they make irregular deposits and withdrawals. Unlike simple percentage gains, XIRR accounts for the timing of every cash flow, giving you an annualised return you can compare fairly against CPF, Singapore Savings Bonds, or a dividend portfolio. This guide explains how XIRR works, how to calculate it in Excel, Google Sheets, or Python, and how to use it to judge whether your money is actually working hard enough in Singapore.

Why Simple Percentage Returns Mislead You

Most investors quote their returns as "I made 8% on my portfolio." That number is almost always wrong. If you added money throughout the year, your gain mixes contributions with growth, so a simple percentage overstates or understates what your invested capital actually earned.

Imagine you put SGD 10,000 into a fund in January, then add another SGD 10,000 in December. If your account is worth SGD 21,600 at year end, a simple return calculation says you made 8%. But your December deposit barely had time to earn anything, so the actual annualised return on your earlier money is higher or lower depending on exactly when each deposit landed.

Time-weighted return (TWR) strips out the effect of cash flows to measure only the manager's performance. XIRR, by contrast, uses the timing of your actual cash flows to compute the annualised rate you personally earned on every dollar. For a personal investor in Singapore juggling a Regular Savings Plan, CPF top-ups, and occasional lump sums, XIRR is the metric that answers the question you actually care about.

What XIRR Actually Measures

XIRR is the annualised discount rate that makes the net present value of all your cash flows equal to zero. In plain terms, it answers: "At what single annual rate would my money have needed to grow to produce exactly what I have today, given when each deposit and withdrawal happened?"

The Singapore Dollars you deposit are negative cash flows. Any money you take out, plus your final account value, are positive cash flows. XIRR finds the annual rate that balances the two. This matters for Singapore investors because almost nobody invests one lump sum and leaves it alone. A monthly RSP, a top-up to CPF, an annual SRS contribution, or a bonus invested in a Singapore Savings Bond all create uneven cash flows.

The key difference from a simple calculator: XIRR already includes the effect of the years between cash flows. Two investors can deposit exactly the same total amount and end with the same final balance, yet have completely different XIRR values, because one invested early and the other invested late.

How to Calculate XIRR in Excel and Google Sheets

Both Excel and Google Sheets have a built-in XIRR function, so you do not need to build the math yourself. The formula is:

Formula: =XIRR(values, dates, [guess])

Here is the exact setup for a Singapore investor example:

  1. Column A - dates. Enter the date of every cash flow in a single column in ascending order, such as 01/01/2026 for the first deposit.
  2. Column B - amounts. Enter deposits as negative numbers (-5000 for a SGD 5,000 deposit) and withdrawals or the current value as positive numbers.
  3. Add the current value. The last row should be today's date with your total portfolio value as a positive number. Without this final positive value, XIRR cannot compute a result.
  4. Run the function. Type =XIRR(B2:B13, A2:A13) and press Enter. The result is your annualised return as a decimal, so format it as a percentage.

Google Sheets handles this identically to Excel, and both let you skip the third argument (the guess) because they use a sensible default.

How to Calculate XIRR in Python

If you prefer a script, Python's numpy library includes an xirr function inside its financial module. Install it with pip install numpy-financial, then build two lists that must be exactly the same length: one for every cash flow date and one for the matching amount on that date. Deposits are negative numbers and the final portfolio value is positive.

import numpy_financial as npf
from datetime import date

dates = [date(2026, 1, 1), date(2026, 4, 1), date(2026, 9, 1), date(2026, 12, 31)]
amounts = [-5000, -1000, -1000, 7100]

rate = npf.xirr(amounts, dates)
print(round(rate * 100, 2), "%")

Run the script and it prints your annualised return as a percentage. The logic transfers to any language; what matters is that each date is paired with its exact amount and that the final row carries today's value. If you get an error, the most common cause is a mismatch in list lengths or a missing final positive value.

A Real-World XIRR Example in Singapore

A concrete example makes the concept clear. Suppose you start a monthly RSP of SGD 1,000 on 1 January and your broker deducts the first SGD 1,000 that day. You make 12 deposits over the year, plus one lump sum of SGD 2,000 in July. By 31 December your account is worth SGD 15,300 after all deposits.

Your total invested is SGD 14,000, so a naive calculation would call your return (15,300 minus 14,000) divided by 14,000, about 9.3%. But because your July lump sum and later deposits did not work for the full year, the money that did work longer earned more per dollar. When you run XIRR over the real cash flow dates, the annualised return comes out higher, because each dollar is credited only for the time it was actually invested.

This is the practical value of the metric. Two identical starting balances and identical ending balances can hide very different performances depending on when the money arrived. XIRR reveals the true annual performance, which is why it is the standard institutional and analyst metric for irregular cash flow.

What XIRR Tells You About Your CPF and Other Accounts

Once you compute your XIRR, compare it against the alternatives available in Singapore. This is where the metric earns its keep. Your CPF Ordinary Account currently earns a floor interest rate with additional interest on lower balances, while your Special Account earns a higher floor rate. If your self-managed portfolio has an XIRR below your CPF Special Account rate after costs and taxes, then leaving money in CPF was the better risk-free choice for that portion.

The official CPF member pages on cpf.gov.sg explain the interest rates and earning rules for the Ordinary and Special accounts, which give you a concrete benchmark against which to judge your own XIRR. The same comparison applies to a Singapore Savings Bond ladder, where the return is certain if you hold to maturity as confirmed on mas.gov.sg, or to a dividend stock portfolio where your return is uncertain. XIRR lets you judge a few key things:

  • Is your active investing beating a risk-free Singapore government bond return?
  • Does your annualised return clear inflation plus the platform fees you pay?
  • Is a lump sum invested early beating a slow dollar-cost averaging plan?

Limitations and Pitfalls to Avoid

XIRR is powerful but not perfect. It assumes a single flat return across all years, which rarely matches reality. A portfolio that rises 20% in year one and falls 5% in year two will show an XIRR somewhere in between, hiding the volatility you actually experienced. Use it alongside a simple list of your cash flows rather than as the only number you track.

There are three common mistakes Singapore investors make with XIRR, all worth avoiding:

  • Forgetting the current portfolio value in the final row, which makes the function return an error or a nonsense number.
  • Mixing currencies in one calculation. Keep everything in SGD, or convert foreign holdings first, or the result is meaningless.
  • Ignoring fees and taxes. Platform charges, brokerage commissions, and dividend withholding reduce your real return, so subtract them from the final value before computing XIRR.

Frequently Asked Questions about XIRR

Is XIRR the same as the rate of return on my statement?

No. Your broker or fund statement usually shows a simple gain or a time-weighted return of the fund, not your personal annualised return. XIRR reflects your own cash flow timing, which is why two investors in the same fund can report different rates.

Do I need to include fees when using XIRR?

Yes. Brokerage commissions, platform fees, and dividend withholding all reduce what you keep. Subtract them from your final value before running XIRR, otherwise your result flatters your actual performance.

Can I use XIRR for my entire portfolio across brokers?

You can, as long as every cash flow is in the same currency. Mixing SGD and a foreign currency in one calculation distorts the result. Convert everything to SGD first, or run separate calculations per currency.

Key Takeaways

  • Simple percentage returns mislead you when you deposit money at different times; XIRR accounts for the timing of every cash flow.
  • Use the built-in XIRR function in Excel or Google Sheets with negative deposits and a positive final balance.
  • Compare your XIRR against CPF interest and Singapore government bond yields to judge whether active investing is worth the risk and fees.
  • Always subtract platform fees and taxes, and keep all amounts in SGD, before computing your annualised return.

Conclusion

Knowing your true annualised return is the difference between guessing and knowing whether your money is working hard enough in Singapore. XIRR is a free, underused tool that answers this precisely. Start by listing your cash flows, computing your run, and comparing the number against CPF and Singapore Savings Bond rates. For more context on how your XIRR fits a broader plan, read our guide to dollar cost averaging in Singapore and how CPF interest compounds over time.

About the Author
This article was written by the SeaMoneyTips Editorial Team, focused on personal finance education for Indonesia and Singapore readers. For inquiries, please contact us.

Leave a Reply

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