I backtested my own stock rankings. They lost to the index.

· Holder Dashboard ·

11 min read Original article ↗

Every fundamentals site can show you a chart where $1,000 turns into $40,254. Mine did, for seven months. The arithmetic was correct and the chart was worthless. The honest version of it argues against the product you're currently reading about.

What if $1,000 became $40,254?
That was my own landing page headline, actually, with the number filling itself in from the same query that draws the chart below.

The chart everybody builds

Here's how that number was made. Take the fifty companies that rank highest on fundamentals today. Look up what their share prices did over the past twenty years. Compound $1,000 through those returns. Print the result.

$1,000 into $40,254, with twenty years of hindsight

Top 50 by fundamentalsS&P 500

Value of $1,000 invested at the end of 2006, compounded through the past returns of the 50 companies that rank highest on fundamentals today. Picked with hindsight; survivors only.

Final values by window.
WindowTop 50 by fundamentals, final valueS&P 500, final value
5Y (invested 2021, value at 2026)$5,617$1,858
10Y (invested 2016, value at 2026)$14,379$4,135
20Y (invested 2006, value at 2026)$40,254$8,658

That is the chart, rebuilt with the construction that ran on the front page until July 2026. Over twenty years the green line reaches $40,254 while the same $1,000 in the index reaches $8,658. Nothing in that calculation is a lie. Those fifty companies really did compound like that. Even the scale helps: on a linear axis, compounding always looks most dramatic in the final years.

The problem is the sentence a reader silently completes when they see it: “so if I had followed this ranking, I'd have $40,254.” You wouldn't have. The list could not have been written in 2006. It was assembled by looking at which companies turned out to have twenty strong years, and that knowledge did not exist at the start of the window. The chart quietly runs the tape backwards and presents it as though it ran forwards.

There's a second problem underneath the first. The companies available to rank today are the ones that still exist. Every business that went bankrupt, got taken private or was delisted somewhere in those twenty years is simply absent from the calculation. The survivors are the only candidates, and survivors flatter every backtest they appear in.

Switch it to five or ten years and the gap survives, which is what made it so convincing. This construction is nothing unusual either. It's close to the default way performance charts get built when nobody is checking, which is why I want to be specific about what replaced it.

The honest version

The fix is to pick the cohort using only information that existed on the day it was picked. So: rebuild every company's fundamental score as of 2016, using only financials reported by then, rank them, take the top fifty, and only then look at what happened next.

I ran it expecting to confirm the thing I'd already built a product around. Two windows, equal-weighted, dividends included on both sides:

The strongest-fundamentals companies of 2016 lost to the index over the decade after

Top 50 (2016)+421%S&P 500+103%+332%+251%200620162026building the recordthe decade after

Cohort selected using only data available in 2016 · equal-weighted · dividends reinvested on both sidesTop 50 by 2016 fundamentals+421%S&P 500+103%+332%+251%2006201620162026the decade they built the recordthe decade afterSource: EODHD

The 50 companies ranked strongest on fundamentals using only data available in 2016, equal-weighted and held with no rebalancing. Each panel is indexed to 100 at its own start, because the first decade is a description of the companies and not a portfolio anyone held. Two members had not listed by 2006, so that panel averages 48 names. Adjusted closes, dividends reinvested on both sides.

Growth of $100, indexed to 100 at each panel's start: the 2016 strongest-fundamentals cohort vs the S&P 500
YearCohortS&P 500
2006 (building the record)100100
2007 (building the record)127120
2008 (building the record)106105
2009 (building the record)9377
2010 (building the record)12888
2011 (building the record)222117
2012 (building the record)254121
2013 (building the record)325147
2014 (building the record)465183
2015 (building the record)550196
2016 (building the record)521203
2016 (after selection)100100
2017 (after selection)122118
2018 (after selection)139134
2019 (after selection)147149
2020 (after selection)145160
2021 (after selection)222225
2022 (after selection)202202
2023 (after selection)244239
2024 (after selection)276298
2025 (after selection)298342
2026 (after selection)351432

From 2006 to 2016, the decade those companies were building the record that got them selected, the cohort returned +421% against the S&P 500's +103%. From 2016 to 2026, the decade after, the same fifty companies returned +251% against the index's +332%.

My first assumption was a bug on my side. I re-ran it on fresh data and went through the fifty names by hand, looking for a bad split or a currency mix-up that would explain the second decade. There wasn't one. The numbers held.

Their return was about four times the index's while their fundamentals were getting strong. Then they lost to it, once that strength was visible to everyone. That's the finding, and it isn't flattering for a company selling fundamental rankings.

The ranking didn't find winners. It found companies that had already won.

Why it happens is no mystery. By the time a decade of excellent financials is on the record, it has been on the record for years, and the price has had all that time to absorb it. You aren't buying the compounding. You're buying whatever comes after it. The same idea, from a different angle, is in quality vs. valuation.

I spent a while trying to rescue it

Once I trusted the numbers, I spent several weeks trying to rescue the idea. In order:

  • ranking by each of the eight underlying signals separately, in case the composite was diluting a good one;
  • selecting companies whose scores were improving rather than merely high, first as a crude two-point difference and then rebuilt properly, as a year-by-year series with a fitted slope;
  • and finally ranking on long-run quality while penalising companies whose recent five years had deteriorated.

Every one of them failed out of sample. The two that sting most:

  • Selecting the top fifty by fundamentals returned less than simply holding every surviving company in the database, equally weighted. The selection step actively destroyed value.
  • “Improving fundamentals” looked brilliant in one decade, did nothing in a second, and lost in a third. That's the signature of a pattern fitted to one period rather than a real effect.

I'm reporting these because a method that only publishes the tests it passed isn't a method. The scoring weights were fixed and published before any of this was run, precisely so I couldn't quietly tune them until the curve looked better.

Then I asked the question backwards

Failing to predict returns from fundamentals leaves an obvious question unanswered: are fundamentals just irrelevant? So I inverted it. Instead of starting with good fundamentals and looking for returns, start with the biggest actual winners over a window, and look at where they ranked on fundamentals for that same window.

Taking the fifty best-performing stocks over each period, here's where every one of those winners ranked on fundamentals for that same period, along with their average. The 50th percentile is a coin flip; the 100th is the top of the list.

The longer the window, the stronger the winners' fundamentals

Each faint dot is one of that window's 50 best-performing stocks, placed at its fundamental percentile for that same window; the solid dot is their average. The dashed line is the 50th percentile, a coin flip.

Average fundamental percentile of the 50 best-performing stocks, by holding period
Holding periodAverage fundamental percentile of the winnersWinners with below-median fundamentals
1 year5423 of 50
5 years7510 of 50
10 years794 of 50
20 years824 of 50
30 years823 of 50
Whole listed history862 of 50

Over one year the winners average the 54th percentile, and twenty-three of the fifty had below-median fundamentals. That is close to a coin flip, and the spread shows it: the one-year winners land everywhere from the very bottom of the rankings to the very top. Stretch the window and it tightens: 75th over five years, 79th over ten, 82nd over twenty and thirty, and 86th over a company's whole listed history, where the median winner sits in the 94th.

Almost all of the gain comes from stretching the window from one year to ten; past that, longer windows add little. Over a decade or more, the winners are almost never fundamental junk. At ten years and beyond, only two to four of the top fifty performers came from the bottom half of the rankings.

The whole universe, not just the tails

Both of those tests live in the tails: fifty companies picked by fundamentals, fifty picked by returns. That left me wondering whether the relationship was a tail thing. So I ranked every stock that has both a score and a return, split them into deciles of the fundamental ranking, and looked at where each decile's returns landed over the same window.

The bottom of the ranking is more informative than the top

Every stock with a score and a return, grouped into deciles of the fundamental ranking; each line is the decile's median return percentile over the same window. The dashed line means matching the middle of the whole universe.

Median same-window return percentile by fundamental-score decile and holding period
Fundamental-score decile1 year (3,408 stocks)10 years (2,542 stocks)30 years (1,045 stocks)
1 (weakest)26.512.29.4
239.719.119.7
338.827.226.6
443.535.737.4
555.545.241.4
649.55853.7
754.959.763.7
858.167.472.1
963.372.678.3
10 (strongest)66.880.685.9

Over ten years the staircase is monotonic: the weakest decile's median stock landed around the 12th percentile of returns, the strongest decile's around the 81st. Over one year the middle of the table is mush, which by now should not surprise you. If you want it as one number, the Spearman rank correlation climbs from 0.27 over one year to about 0.7 over thirty.

But look at which end does the work. At every horizon, the weakest decile sinks further below the middle than the strongest rises above it. Fundamentals turned out to be better at flagging losers than at picking winners.

What that does and does not mean

Read that list and the obvious conclusion is “so buy from the top of the rankings.” It doesn't follow. I already tested it directly, and that is what the failed rescue attempts were.

Most big winners had good fundamentals. Good fundamentals were nowhere near enough to make one.

Those are two different statements. Of the fifty best performers in each window, only around five to seventeen came from the fundamental top fifty; the rest were spread across a wide band that merely leans high. Good fundamentals are common among winners and nowhere near sufficient to produce one.

There's also a timing trap. In these backwards tests, the fundamentals and the returns cover the same window. The winners of 2016–2026 had strong 2016–2026 financials. That shows business results and share prices travel together over long periods. It doesn't tell you which companies will be in the next decade's list.

What I think the rankings are actually for

Screening and monitoring, not picking next decade's winners.

Concretely: the rankings turn several thousand companies into a few dozen with real, durable, verifiable track records, so your research time goes somewhere defensible instead of into a screener with forty columns and no hierarchy. Then the work that actually decides the outcome is yours: what the business is worth, what you're being asked to pay, whether you can hold it through a bad year. No score does any of that for you, and the workflow is laid out in building a shortlist.

The horizon finding also sets an honest expectation about time: the relationship is weak over a year and strengthens the longer you hold, so this is a tool for people who intend to hold for years. For anyone who doesn't, it's close to useless.

The limitations I have not solved

Better you read them here than find them yourself:

  • Survivorship, still. The point-in-time test fixed the look-ahead problem but not this one. Companies that were delisted between the selection date and today are absent from the database entirely, so the cohort is really “the top fifty in 2016 that still trade in 2026”, and that flatters the results by an amount I can't currently quantify.
  • One selection date. The headline comparison uses a single 2016 cohort. One decade is one path, not a distribution.
  • Equal weight versus the index. My cohorts are equally weighted; the S&P 500 is weighted by company size. Some of the gap in both directions is that difference rather than the selection.
  • No costs. No fees, taxes or slippage on either side.
  • No factor controls. Nothing here separates the score from things that travel with it, like company size, sector or valuation. Some of the relationship may belong to those.

The honest answer to all of this isn't a better backtest. It's a forward record that can't be edited after the fact. On 4 August 2026 I froze the top fifty for every ranking window, published the files with their hashes, timestamped them with a third party, and started tracking them from that day. Wins or losses, unrevised, at track record. Full method, weights and evidence are in the methodology.

Nothing here is investment advice, and none of it is a forecast. The evidence above describes what has already happened; the tests that tried to turn it into a prediction all failed, which is exactly why the rankings are presented as research inputs rather than recommendations.