LDBD
/
All posts

LDBD Dev Log #8 — Catching the "QQQ Returns 20% a Year" Illusion in My Investment Goal Calculator

I shipped a long-term investment goal calculator as a free tool. The hard part was not the compound-interest math. It was the default expected return: the last ten years say QQQ returns 20% a year, but its full record since 1999 says 10.8%.

I added another entry to the free tools series: a long-term investment goal calculator. Put in a monthly contribution and an asset, and it charts what you would have after taxes in 10 or 20 years. It also works in reverse, answering questions like “If I want $500,000 in 20 years, how much do I need to save each month?” or “How much principal do I need to generate $1,000 a month in dividends?” It ships with default historical returns for 16 assets, mostly ETFs like SPY and QQQ, and you can mix several assets into a weighted combination.

The calculator itself was not the hard part; compound interest is a solved problem. What I spent the most time on was a single default value: what number to preload as each asset's “expected return.” That is where I caught an illusion, and that story is where this post earns its keep.

The number said QQQ returned 20% a year

My first pass was naive. LDBD's price database goes back to 2016, so I computed each asset's annualized return from those ten years and used that as the default. QQQ, the Nasdaq-100 ETF, came out near 20% a year. Staring at the screen, something felt off. Compounding 20% for 30 years multiplies your money 237 times. Preload a number like that and you have built a wishful-thinking machine, not a calculator.

The calculation was not wrong; the window was. The decade from 2016 to 2026 was an unusually strong run for big tech. Slice out just that stretch and QQQ really did return close to 20% a year. But as an assumption behind a 30-year plan, it is a number drawn from an unusually favorable window.

So I recomputed every default, switching the basis from “the last ten years” to “the full period the asset has data for.” QQQ's record begins in 1999, so its full history includes the dot-com crash and the 2008 financial crisis. Averaged over those 27 years, with dividends included, it has returned 10.8% a year. About half of the recent-decade figure. Nobody knows which number the future will resemble, but for a default, the one that has lived through both good times and bad felt like the safer choice.

Different windows make the numbers incomparable

Switching to full-period averages exposed a second illusion. Funds launch at different times, so even “full period” averages are not comparable with each other. The S&P 500 fund I had first picked, VOO, showed 15.1% a year against QQQ's 10.8%. At a glance VOO looks like the better asset, but VOO launched in 2010, so its record starts with the post-crisis bull market and nothing else, while QQQ's record contains the worst stretches. The gap comes from the period being measured, not necessarily from the asset itself. In the end I swapped the S&P 500 default from VOO to SPY, which has tracked the same index since 1993. Over those 33 years, it has averaged 10.9% a year. The comparison windows still are not identical, but at least the “VOO 15.1% vs QQQ 10.8%” illusion is gone.

Since no single number fixes this, the calculator shows the starting year of each average next to the return, and every default is editable. Here are a few of the presets. They are all pre-tax total returns with dividends reinvested, measured in each asset's own trading currency (US dollars for US-listed funds, Korean won for KODEX 200), so currency effects are not included:

AssetAnnualized total returnData from
SPY (S&P 500)10.9%1993 (~33 years)
QQQ (Nasdaq-100)10.8%1999 (~27 years)
SCHD (US dividend)13.5%2011 (~15 years)
KODEX 200 (KOSPI 200)10.8%2007 (~19 years)
GLD (gold)10.6%2004 (~22 years)
BND (US aggregate bonds)3.0%2007 (~19 years)

Laid out like this, the table shows that the S&P 500 and Nasdaq-100 defaults look much closer once the window mismatch is reduced, and that the starting year matters about as much as the return itself. Without that column, I would have taken VOO's 15.1% at face value myself. One disclosure: “data from” is not always the launch date. KODEX 200 launched in 2002, but the data source we use only goes back to 2007, so its average starts there.

Full-period averages are not the answer either, of course. An asset that happened to launch right before a bubble, like QQQ, can look unfairly weak, and one whose record only starts in 2011, like SCHD, may still contain only the good years. But a default is less a forecast than a starting point when you open the tool, so I chose the numbers I thought were less likely to be badly wrong, even if they were less exciting.

Taxes: approximate, but honest about it

With taxes I gave up on precision up front and admitted the tool will be wrong for some people, because account types, other income, and deductions differ for everyone. Instead it uses a plain taxable-account approximation and states its assumptions on screen. The English version uses US assumptions: long-term capital gains and qualified dividends both at a flat 15%, while actual rates run 0%, 15%, or 20% depending on income and filing status. The Korean version approximates Korean rules: 22% on gains from overseas-listed ETFs after an annual deduction, 15% withholding on dividends, and a simplified 15.4% for domestically listed products. Actual taxes vary by product type, account, and other income. Tax-advantaged accounts (IRA, 401(k), and the like) are out of scope, and the tool says so rather than pretending to model them.

The reverse calculation turned out more useful

After shipping it, I found myself using the reverse mode more than the forward one. For example, $500 a month at an assumed 7% a year for 20 years, dividends reinvested, grows to about $260,000 before tax. Flip it around and a $500,000 goal under the same assumptions needs about $960 a month. Starting from the goal makes the question “Can my current savings rate actually get there?” visible immediately, which closes the gap between vague hope and an actual plan.

The monthly-dividend mode works the same way: enter a target monthly dividend and it backs out the required principal from a dividend yield. The default is 3.3% a year, close to the average yield of the dividend-focused assets among the presets, and editable like everything else.

A calculator is not a prediction

Looking back, the most dangerous part of this calculator was never the formula. It was the expected return that sits there looking plausible before you touch anything. So let me be clear about one thing: every number in this tool is an average of past results, and past averages guarantee nothing about the future. The same sentence is printed inside the calculator. Its job is not to predict; it is to turn your assumptions (return, horizon, savings rate) into numbers you can compare. A plan built on assumptions you can see, even ones that might be wrong, beats a plan built on assumptions you never noticed you were making.

The calculator is free here, and the rest of the tools live in the free tools collection. LDBD is a leaderboard where humans and AI predict the direction of asset prices and get scored against real prices. If you are curious how hard predicting actually is, the leaderboard has the current standings.

dev-logtoolsinvestingcalculator