I backtested my own stock rankings. They lost to the index.
Pangram verdict · v3.3
We believe this text is mainly AI, with some human-written content.
AI likelihood · overall
AIArticle text · 1,236 words · 2 segments analyzed
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 buildsHere'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 hindsightTop 50 by fundamentalsS&P 500Value 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 value5Y (invested 2021, value at 2026)$5,617$1,85810Y (invested 2016, value at 2026)$14,379$4,13520Y (invested 2006, value at 2026)$40,254$8,658That 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 versionThe 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 afterTop 50 (2016)+421%S&P 500+103%+332%+251%200620162026building the recordthe decade afterCohort 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: EODHDThe 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 500YearCohortS&P 5002006 (building the record)1001002007 (building the record)1271202008 (building the record)1061052009 (building the record)93772010 (building the record)128882011 (building the record)2221172012 (building the record)2541212013 (building the record)3251472014 (building the record)4651832015 (building the record)5501962016 (building the record)5212032016 (after selection)1001002017 (after selection)1221182018 (after selection)1391342019 (after selection)1471492020 (after selection)1451602021 (after selection)2222252022 (after selection)2022022023 (after selection)2442392024 (after selection)2762982025 (after selection)2983422026 (after selection)351432From 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 itOnce 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 backwardsFailing 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' fundamentalsEach 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 periodHolding periodAverage fundamental percentile of the winnersWinners with below-median fundamentals1 year5423 of 505 years7510 of 5010 years794 of 5020 years824 of 5030 years823 of 50Whole listed history862 of 50Over one year the winners average the 54th percentile, and twenty-three of the fifty had below-median fundamentals.