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.

Research Negative results

Five things we tested this summer that do not work (and three of our own “no improvement” verdicts that were really “we could not tell”)

Results that do not pan out never get published anywhere, which is why everybody keeps testing the same five ideas. Here are the five we tested between August 31 and September 1, with their test statistics, their placebos, and their intervals. None of them passed. And while building the bar to judge them, we found something worse about our own earlier rejections.

First, the size of the scale

This history cannot resolve differences smaller than 2.8 points of annual return

With 186 rebalances and the variability they carry, the smallest effect this experiment can detect with confidence is 2.8 points of CAGR, or 0.7% per month. All factor research competes just below that threshold. It is like weighing a letter on a bathroom scale: a reading of zero does not mean the letter is weightless.

01Low volatility as a fifth factor → no

12 variants declared before looking at anything. All 12 come out worse, gross and net.

The idea is textbook: stocks that move less return more than their risk justifies. We tested six definitions (volatility over 252, 126 and 63 sessions, downside deviation over 252 and 63, and beta) at two weights. All twelve made the portfolio worse. The strongest t-statistic is −1.85, meaning the one result that comes close to significance points the wrong way.

But the two underlying reasons matter more than the numbers:

  • In our universe the factor sorts backward. Splitting the 500 into ten buckets, least to most volatile, the excess return runs: −0.99, −1.03, −0.39, −0.32, −0.47, +0.02, −0.17, +0.24, +0.55, +2.54. The anomaly does not fail to show up: it shows up inverted.
  • The engine already had volatility inside it. Our momentum is divided by 252-session volatility. This was not a new dimension: it was doubling down on one already present.

The one thing that did improve: portfolio volatility falls from 21.9% to 17.7%. But the maximum drawdown barely moves: from −36.8% to a range of −35.5% to −37.0%. You buy less daily noise, not fewer scares. The scare is market risk, and everybody eats it.

And a control worth copying: we tried adding a fifth factor carrying no information at all, pure noise, five times over. Simply by diluting the four that do measure something and adding turnover, that costs 1.11 points a year on average. Any fifth factor has to win that back before it starts contributing anything.

All of it in medicion_baja_volatilidad.json, generated by medir_baja_volatilidad.py. The base portfolio returns 17.09% gross and 16.40% net (10 bps per side) over that window.

02Post-earnings announcement drift at three months → no

The surprise gets paid on announcement day. After that there is no drift left.

PEAD is one of the most cited effects in the literature: after a positive earnings surprise, the stock supposedly keeps rising for weeks. The classic window (2 to 20 days) does not fit a portfolio that rebalances monthly; the 63-session window does fit, with 81% to 87% coverage. So that is the one we measured.

First we checked that the surprise itself was built correctly, because without that a “does not work” would be indistinguishable from a miscalculation. Sorted by surprise, the announcement window sorts perfectly: monotonicity of 1.00 across 24,321 events, with t = 5.21. The market pays for the surprise, and our calculation sees it.

What is not there is the drift afterward. The highest number in the entire study is t = 2.38, and with 84 cells tested the multiple-testing correction demands 3.43. Out of sample it collapses: the best cell chosen using data through 2018 gave t = 2.51, and from 2019 to 2026 it gives t = 0.15.

A +4.35 point result showed up and we rejected it

Adding a 20% weight on year-over-year surprise to the portfolio produced +4.35 points of annual return. That is exactly the kind of chart that gets published. Five reasons not to touch it, and the second is the one that decides:

1) The paired t is 1.74 against the 3.43 the bar requires. 2) There is no mechanism: the predictive power of that signal on its own is negative, and something that predicts backward cannot be winning by predicting; what it actually does is lower volatility and compound better. 3) The real difference is 2.1 points, the rest is compounding. 4) The placebo: p = 0.005 raw, and 0.42 once you pay for the 84 attempts. 5) It correlates +0.55 with our growth factor, so it is not even surprise.

And the literature points the same way: Martineau (Critical Finance Review, 2022) concludes that in large caps PEAD has not existed since 2006. Our universe is the S&P 500 — precisely where it is said to be dead.

In medicion_pead.json, generated by medir_pead.py: the validity check under prueba_de_validez_reaccion_en_el_anuncio, the attempt count under intentos, the out-of-sample test under fuera_de_muestra, and the placebo under placebo.

03Eleven redefinitions of our four factors → change nothing

Eleven reasonable ways to define momentum, value, quality and growth. None improves.

The list was closed and justified before a single result was seen. With eleven tests the bar is |t| ≥ 2.88. The highest that came back is 2.31, and it points against (removing sales-to-price from the Value factor makes things worse). In the improving direction, the best reaches 1.04.

The trap that nearly worked, written down here in case somebody ever shows you the chart: classic momentum, without dividing by volatility, leaves the portfolio at 17.30% net versus 16.40%. Almost a point a year more, if you only look at the curve. But its predictive power is worse and the sign flips with portfolio size: −0.85 at 10 positions, +0.81 at 20, +1.64 at 50. That is not a signal, that is the noise of twenty stocks.

And something came out that we did not know. An arithmetic average of four normalized scores does not split 25/25/25/25: it splits according to how much each one disperses. Here that is momentum 34.0%, growth 23.4%, value 22.2% and quality 20.3%. Actually equalizing them makes things worse: the portfolio drops from 17.09% gross to 16.05%, and from 16.40% net to 15.43%.

In medicion_definiciones_factores.json, generated by medir_definiciones_paso2_variantes.py. The split comes from dispersion_media_de_los_cuatro; the paired t-statistics from pruebas_pareadas.

04Net share issuance and accruals → cannot be decided

And this is where the one real lead of the whole study is.

A company issuing shares nonstop dilutes its owners; one buying them back does the opposite. The hypothesis was that this signal would be a close cousin of our value and quality factors, and would therefore add nothing. It was false: once you strip out the part already explained by our model, its predictive power does not collapse.

At a one-year horizon, 36-month net issuance sorts better than any of the four factors we use. But at 21 sessions, which is where the portfolio actually lives, it barely sorts at all. Out of that comes the only actionable thing from the whole summer, and it is not a new signal: it is changing when you trade, not what you buy. A portfolio rebalancing once a year measures something else. That is a new measurement, and it has not been run yet.

The false zero, which nearly published an invented figure

SEC data is served for up to 450 days, so if a company has not filed a new share count, today and a year ago return the same number and issuance comes out at exactly 0.00. Not because it issued nothing: because it did not report. 1,148 cases discarded on that basis.

A false zero breaks nothing. It blends in with the true zeros and shifts the result in silence. It is the kind of flaw that only surfaces if you go looking for it.

In medicion_emision_devengos.json, generated by medir_emision_devengos.py. The discards are counted under huecos_no_rellenados.

05FINRA short interest → cannot be decided

138,452 observations, no gaps, and still not enough.

FINRA publishes, free and twice a month, how many shares of each company are sold short. We hold 138,452 observations going back to December 2017, each with its real publication date and not one gap in the range.

The result: the conditional predictive power comes in at +0.0117 with t = 1.07, but the decile ladder is flat (monotonicity of 0.08). A positive number with no economic shape behind it is not a signal: it is an average. And the power gate finishes it off: with 102 rebalances, deciding the one percentage point we were looking for would take 2,135 observations, roughly 178 years.

The control everyone should copy. Every FINRA data point has two dates: the settlement date it refers to, and the date it was published, about nine days apart. Using the settlement date — that is, looking at the data before it existed — raises the result by 14%. Anyone measuring this without the publication date will publish a prettier number that is false.

Data in datos/construido/interes_corto_manifiesto.json and interes_corto_bruto.csv; measurement in medicion_interes_corto.json (medir_interes_corto.py) and the gate-by-gate verdict in veredicto_interes_corto.json.

06And the uncomfortable part: three of our own “no improvement” verdicts were “we could not tell”

This is the part we did not want to find.

To judge these five measurements we first wrote a bar: six gates in series — power, multiple testing, overlap, benchmark, cost, and chance — and, above all, three verdicts instead of two: PASS, FAIL, and CANNOT BE DECIDED.

The third one is half the value of the tool. “I found no effect” is not “I proved there is no effect”: if the sample never had the power to detect an effect of the size being looked for, the experiment says nothing in either direction.

We ran the six rejections this house had already made through it. Five had power below 55%, and three below 20%. The clear case is “lowering turnover does not improve net returns”: the effect in play was 0.93 points, and the smallest effect that experiment could detect was 2.86. Deciding it would take 146 years of data. Not changing the recipe is still correct, but out of prudence, not out of measurement. Writing “we measured turnover and it does not help” was an overclaim.

One of them is properly rejected for the right reason (risk overlays on the portfolio), and one is properly rejected for the wrong reason: sector neutrality. What supports that decision is the four points of annual return it costs, not its t-statistic. If somebody reopens the topic citing the t, the argument is lost.

Why we publish this

An investing blog that only publishes what worked ends up being a catalog of coincidences. Publication bias is not a problem confined to scientific journals: it is the reason so many strategies worked right up until the day you bought them.

And there is a practical consequence: if one of these five ever comes back with a t above 2 after testing N variants, then given this track record that would be more cause for suspicion than for celebration.

The bar is liston_estadistico.py, written on August 31 before any result was seen — a bar written after seeing the numbers is not a bar, it is a rationalization. Run python liston_estadistico.py --historicos and it reviews the earlier rejections on its own.

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.