Q500 Quant500 Daily Report
Español ← Back to Platform

This is Quant500: we score S&P 500 companies every market day from public SEC data. Free, no account — today's ranking.

Correction Data

We lowered our own published returns. The prices of the companies that collapsed were missing.

The price history we rebuild our portfolios from was missing 144 of the 498 companies that were in the S&P 500 in 2011. They were not missing at random: the missing ones were exactly the companies that left the index through decline or bankruptcy — the ones that would have hurt. We recovered them, and every one of our curves went down.

17.29% → 16.82%
The 20-stock multi-factor portfolio, before and after being able to price the companies that were missing. Same window, same code, same fundamentals: the only thing that differs between the two runs is the price file.

01Survivorship bias, in one sentence

If you reconstruct the past using the list of companies that are still trading today, you are running the experiment already knowing the answer. The ones that went bankrupt, the ones that collapsed, and the ones the index dropped for shrinking are not there: your algorithm cannot buy them, and therefore cannot be wrong about them either.

The result is not a calculation error. It is a plausible, attractive number that always leans the house's way. It is the most common flaw in every published backtest, and it is invisible unless somebody measures it.

02How much was missing, counted

We started by measuring the hole instead of estimating it. The real historical composition of the index is 201 monthly snapshots since 2010; each company present in a snapshot is one company-month. Out of 100,481 company-months, 11,002 had no price series.

And the hole was not spread evenly. Almost all of it sits at the beginning, which is exactly where it weighs most in a fifteen-year curve:

YearCompany-monthsWith pricesWithout
20116,0004,3701,630
20166,0535,267786
20216,0485,892156
20256,0216,01110

In 2011, out of roughly 500 companies in each monthly snapshot, more than 135 on average had no price. Counted company by company on the revision date, it is 144 of 498. Nearly all of them had been acquired, gone bankrupt, or been dropped from the index for size: Yahoo purges delisted names and never serves them again.

The count lives in datos/construido/huecos_de_precio_declarados.json, written by deslistadas_wayback/listar_huecos_de_precio.py. The 144-of-498 figure is in INVESTIGACION_FACTORES_2026-09-01.txt. The companies that still have no series, and why, are declared one by one in datos/construido/deslistadas_huecos_declarados.json: 177 entries, each with the reason for its gap.

03How 49 series were recovered without buying data

Archive.org keeps quote pages that no longer exist. The hard part is not finding them: it is proving whose they are.

A rescued price series is a file of dates and numbers. Nothing in it says who it belongs to. And tickers get recycled: different companies have traded under the same symbol in different decades. Loading the wrong series produces prices that are perfectly plausible and perfectly false, and that already happened to us once: a series that did not belong to that company spent four months of 2013 ranked number one in our multi-factor screen.

So identity is not decided by the symbol. It is decided against SEC filings: the forms insiders filed for that company carry a price and a date, and those prices have to land inside the rescued series, at the same scale. Each series also passes a traded-value check and a coverage check, and has to clear a minimum number of anchors.

Of 65 candidates reviewed, 49 made it in. Left out:

  • Two on insufficient identity (ODP and UA): not enough anchors and no guarantee of provenance. A series that cannot be proven does not go in, even when it is almost certainly the right one.
  • Fourteen for being too sparse: archive.org did not capture enough days. A series with holes distorts momentum and volatility, because the engine counts bars. They are declared by name, because they exist and they are real: the day there are more captures, they stop being a gap.

The verdicts, one per series with its checks, are in deslistadas_wayback/veredicto_historial_deslistadas.json (29 in, out of 31) and deslistadas_wayback/veredicto_cosecha_wayback.json (34 eligible, 14 set aside as sparse). The sparse ones are in deslistadas_wayback/deslistadas_ralas_declaradas.json. The scripts are cosechar_deslistadas.py, validar_deslistadas.py and integrar_deslistadas.py.

04What it did to the numbers

The same walk-forward was run twice. The only degree of freedom between the two runs is the price file.

PortfolioBeforeAfterChange
Multi-factor 1018.17%17.27%−0.90 pp
Multi-factor 2017.29%16.82%−0.47 pp
Multi-factor 5014.57%14.31%−0.26 pp

All of them went down. Not one went up, which is what we expected: the missing series belonged to the companies that did badly.

The figure the site publishes today for multi-factor 20 is 16.75%, not the 16.82% in the table. That is not a hidden discrepancy: the table is the controlled comparison — two runs with exactly one thing different — while 16.75% is what comes out of the site's full daily cycle, with the day's prices and everything else refreshed too. They are two different experiments, which is why the last decimal differs.

The before and after are measured by deslistadas_wayback/medir_impacto_deslistadas.py, which runs regenerar_carteras_honesto.py twice without touching a line of it and compares the metrics the site publishes. The figures are collected in INVESTIGACION_FACTORES_2026-09-01.txt. The live number comes from carteras.json and is visible on the portfolio's own page.

05And this is the second half of the bias, not the first

The other half was already paid for. In August we fixed a different and worse problem: the backtest used the list of S&P 500 members as of today applied backward, which let it buy in 2021 a company the index did not admit until 2025 — and the index admitted it precisely because by then it had already gone up. The case that explains everything: AppLovin held 21 company-months in the portfolio and did not join the index until September 2025, after rising 1,365%.

Fixing it cost, over the window measured:

PortfolioToday's universeReal universeChange
Multi-factor 2039.26%25.93%−13.33 pp
Momentum 2037.14%18.16%−18.98 pp
Value 1019.45%21.46%+2.01 pp
Equal-weighted market13.24%10.63%−2.61 pp

Thirteen points of annual return that were never there. And look at Value 10: it improves once the bias is removed. Not every factor benefits from being allowed to buy future winners, and that is exactly what makes the measurement believable.

The full table for all 20 portfolios is in efecto_universo_pit.txt. One caveat that goes with it: those −13.33 points are measured over a 4.94-year window (59 rebalances, August 2021 to July 2026), not over the full fifteen years. Over the long window the effect cannot be isolated, because the universe change was applied at the same time as the sample extension. It cannot be separated, and we are not going to invent it.

06What did not change: not a single position

Zero portfolios changed composition. The companies the portfolio holds today are exactly the same before and after the fix. The only thing that changed is what we claim about the past.

Why the worse number is the right one

Lowering a published return is the kind of thing that has no commercial upside whatsoever. Nobody arrives at a finance site looking for the smaller number.

But a figure inflated by survivorship bias is not slightly optimistic: it is a number describing a world in which companies do not go bankrupt. If you ever put money behind a curve, the only one that helps you is the one that includes the names that failed.

The model portfolio, weekly in your inbox

Every Saturday, its week in one minute: how it went, the best and the worst, and which insiders bought with their own money. Plus, the day the model is rebuilt, which stocks come in and which go out. A simulation, not advice. At most one email a week, no ads, no account; one-click unsubscribe. Made by one person: Pol Gracia.

A model portfolio with simulated results, not a personalized recommendation. Your email is used for this only: privacy.

Next: What the S&P 500 is · today's ranking · all the guides.

One email, and only when something happens

The account is free, and there is one switch in your profile. With it on, you get an alert the day an executive buys shares in their own company on the open market for more than $250,000 — Form 4 transaction code P — with the link to the filing at the SEC. There is no newsletter, no weekly roundup, no site news: if there are no buys, there is no email. One click turns it on, one click turns it off.

Create free account

This is not investment advice. Quant500 publishes data and its historical reconstruction. No figure on this page is a suggestion to buy or sell, none of it accounts for your personal situation, and none of it promises anything about the future. Past performance, measured well or measured badly, does not predict future performance.

Published September 1, 2026. Every figure names the file it comes from; those files live in the site's repository and every measurement can be rerun with the same scripts.