Searching for systematic alpha in US small- and mid-cap equities: evidence from four research iterations
We built and tested four systematic stock-selection strategies for US small and mid caps, on point-in-time data that keeps the companies that later failed. The best beat its own universe by 2.6 points a year after costs, a gap too small to tell apart from luck, had almost no alpha beyond the standard factors, and trailed the S&P 500. None of the four found an edge we could rely on.
This is the full report. The short version covers the same ground in a few minutes.
A point-in-time study of profitability, shareholder distributions, momentum, market structure, and the limits of systematic stock selection. Pitfield St Research, 2026. All results are hypothetical backtests, net of estimated trading costs unless stated.
- V4, net return a year, 2017 to 2026
- 12.8%
- SPY, same months
- 14.8%
- V4 over its own universe, points a year
- +2.6t 1.00
- Factor-adjusted alpha, points a year
- +0.6t 0.27
1Executive summary
Between July and November 2026 we built and tested four versions of a systematic stock-selection strategy for US small- and mid-cap stocks. Each version was written down before its results were seen, run on point-in-time data that includes companies that later failed, charged for realistic trading costs, and judged against two yardsticks: the universe of stocks it was choosing from, and SPY, the S&P 500 fund an investor could simply buy instead.
None of the four versions established convincing, repeatable alpha after costs and after accounting for well-known risk factors. This report explains how we reached that conclusion, what each version taught us, and why we think the work is worth publishing anyway.
The main results:
- The final version, V4, picked better stocks than its own universe, but not well enough to matter. From March 2017 to September 2026 it returned 12.8% a year after costs, against 9.6% for the stocks it could choose from. That gap of about 2.6 points a year is not statistically distinguishable from zero (t = 1.0). Once standard factors are accounted for, very little is left: +0.6 points a year, with a t-statistic of 0.3. SPY returned 14.8% a year over the same months, with less volatility and a smaller drawdown.
- The earlier candidates looked better in the period that produced them, and then failed on earlier data. V2’s three best ideas beat their universes by 3.2 to 3.7 points a year in 2017-2026. None was significant once we accounted for how many ideas we had tested, and all three trailed SPY. Run without changes on 2012-2017 data, one failed outright and the other matched its universe. The third could not be tested on earlier data at all.
- Building a trustworthy history took more work than designing the strategies. A widely used free price dataset turned out not to include companies that had failed. A vendor history going back to 1962 could only support fundamental tests from about 2011. And a handful of bad records turned one historical test’s result into a meaningless +234% a year until we found and fixed them.
- Results changed a lot over time, but not in a way we could predict. None of the twelve market-regime effects we tested survived a correction for testing twelve at once. Every adaptive switching rule that actually switched did worse than simply holding the strategy.
- The universe mattered more than the stock picking. From 2017 to 2026, equal-weighted small and mid caps trailed SPY by about five to six points a year. That gap was larger than any stock-selection edge we measured.
Main findings
| Iteration | What was tested | Period | Against its own universe | Strategy vs SPY, a year | Verdict |
|---|---|---|---|---|---|
| V1 | Value screen with quality filters and momentum, $50m to $1bn companies | Mar 2017 to Oct 2026 | 4.6% vs 6.8%* | 4.6% vs 14.6%† | Failed every pre-set test |
| V2 · P8 | Rising operating profit, small caps | Mar 2017 to Oct 2026 | +3.5 (t 1.55) | 12.1% vs 14.5% | Not significant |
| V2 · K1 | Profitability composite, mid caps | Mar 2017 to Oct 2026 | +3.2 (t 1.33) | 12.5% vs 14.5% | Not significant |
| V2 · R1 | Net buyback yield, mid caps | Mar 2017 to Oct 2026 | +3.7 (t 1.88) | 12.4% vs 14.5% | Not significant |
| V3 · P8 | P8's frozen rules on earlier data | 2013 to Feb 2017 | −1.2 (−4.0 to +1.5) | 10.4% vs 14.2% | Falsified |
| V3 · K1 | K1's frozen rules on earlier data | 2012 to Feb 2017 | −0.1 (−3.7 to +3.6) | 12.7% vs 14.6% | No demonstrated advantage |
| V3 · R1 | R1's frozen rules on earlier data | None available | Not testable | n/a | Untested |
| Adaptive | Market regimes and switching rules for P8, K1 and R1 | 2017 to 2026 | 0 of 12 regime effects survive correction | Switching cost 1.6 to 5.9 points | No adaptive model justified |
| V4 | Profitability, share reduction and momentum, NYSE 20th to 80th percentile, capped daily trading | Mar 2017 to Sep 2026 | +2.6 (t 1.00) | 12.8% vs 14.8% | Tier 1 only; failed Tier 2 |
Net of estimated trading costs. Excess over the universe is the annualized average monthly difference, in percentage points, with its t-statistic or, for the historical tests, its 90% interval. *V1's protocol compared compound annual returns, so its row shows the strategy's and universe's compound returns. †V1 never measured SPY; this figure was computed for this report from SPY's dividend-adjusted price over the same dates. Each row has its own period, so rows should not be compared with each other directly.
2The question and why we asked it
The starting idea was simple. Smaller public companies are followed by fewer analysts, many institutions cannot own them in size, and information about them may reach prices more slowly. Hong, Lim and Stein (2000) found that momentum is strongest among small stocks with little analyst coverage, which fits that story. If the story holds, a careful, rules-based reading of company accounts might find mispriced stocks more easily among small and mid caps than among the largest companies.
We treated this as a hypothesis to test, not an assumption. Small caps do not necessarily outperform, and the research literature gave us reasons for caution before we wrote a line of code:
- Hou, Xue and Zhang (2020) re-tested 452 published anomalies while limiting the influence of the tiniest stocks. 65% of them failed the usual significance bar, and 82% failed a stricter one designed for a field that has tested so many ideas.
- Chen and Velikov (2023) estimated what anomalies earn after trading costs and after their discovery was published. The average came to about 4 basis points a month.
- Chen and Welch (2026), in a working paper, put the post-2005 median outside microcaps at about 7 basis points a month. The few survivors they identify are mostly profitability and financing signals.
- Krauss, Krüger and Beerstecher (2015) found that the Piotroski F-score, a well-known accounting screen, earned about 31% a year on paper in 2005-2015, and became virtually unprofitable once liquidity limits and trading costs were applied.
So the question we set ourselves was narrow and practical: using only information available at the time, can a systematic, long-only strategy select US small- and mid-cap stocks well enough to beat its own universe after costs, show alpha beyond standard factors, and ultimately beat a low-cost S&P 500 fund?
The last test matters most. An investor’s real alternative to a stock-selection strategy is not the strategy’s universe. It is an index fund. A strategy can pick better stocks than its universe and still lose to the index, if the universe itself lags.
- Jul to Oct 2026V1. A value screen built from practitioner books, backtested 2017 to 2026 with a frozen out-of-sample period. Failed.
- Nov 2026V2. 24 accounting signals from the academic literature, pre-registered. No signal significant; three candidates carried forward.
- Nov 2026V3. Diagnosis of V2, audits of two historical price sources, a rebuilt point-in-time history, and a frozen test of K1 and P8 on 2012 to 2017.
- Nov 2026Adaptive markets. Pre-specified regime tests and walk-forward switching rules. No regime effect survived; switching lost.
- Nov 2026V4. One universe, three signals, capped daily trading, frozen pass marks. Tier 1; failed Tier 2.
3Data and method
The full method is in the appendix. This section covers what a reader needs to follow the results.
Data sources:
- Prices from 2016. Consolidated daily bars from Alpaca, which keeps the histories of tickers that later stopped trading. After we chased down every unpriced delisting, between 97.1% and 100% of delisted exchange-listed stocks had prices in every year from 2016 to 2025.
- Prices before 2016. Daily histories from EODHD going back to 1962, for about 42,900 US common-stock codes, roughly two-thirds of them for companies no longer listed. We used the WIKI price dataset, once distributed through Quandl and now Nasdaq Data Link, only as an independent cross-check.
- Company accounts. Financial statement facts filed in XBRL with the SEC, each with the timestamp at which EDGAR accepted the filing, and SEC filing histories for company identity.
- Factors and size breakpoints. The Fama-French five factors plus momentum, and NYSE market-capitalization percentiles, from Kenneth French’s data library.
What “point in time” means here:
- A financial figure becomes usable on the trading day after the SEC accepted the filing that contained it. We use the value as first reported, never a later restatement.
- Market capitalization is the share count on the filing’s cover page multiplied by the day’s price.
- Companies that were delisted stay in the data until they leave, and their exit is settled at a delisting return:
- the deal price for a cash takeover;
- the observed price where the stock kept trading elsewhere;
- otherwise a conventional loss, stress-tested at harsher levels.
Trading costs:
- From V2 on: each trade pays half the estimated bid-ask spread plus a market-impact charge that grows with the square root of the trade’s size relative to the stock’s trading volume. The spread estimate comes from daily high, low and close prices (Abdi and Ranaldo, 2017). Unknown inputs default to expensive values.
- V1: a flat 1.0% or 0.5% per one-way trade, depending on company size.
How results are judged:
- Excess return. The strategy’s monthly return minus a benchmark’s, annualized. The main benchmark for stock selection is the equal-weighted universe of stocks the strategy was allowed to choose from, built with the same rules and costs.
- t-statistic. How far an average lies from zero, measured in standard errors. A value near 2 is the usual bar for a single test. We use Newey-West standard errors, which allow for correlation between neighbouring months.
- Interval. The range of values consistent with the data, from a bootstrap that resamples six-month blocks of history.
- Factor alpha. The return left over after regressing a strategy on the market, size, value, profitability, investment and momentum factors. A strategy can beat its universe simply by holding more of a known factor, so only alpha suggests something new.
- Multiple testing. When many ideas are tested, some will look good by chance. We used Holm’s method, which raises the bar for each test according to how many were run.
How we tried to keep ourselves honest:
- Each version’s rules, tests and pass marks were written down, and their files fingerprinted with SHA-256 hashes, before any of its returns were computed.
- Every run was logged, including failed and repeated runs.
- When a data error was found after a run, it was corrected only by a general rule written down before the rerun, and both runs were reported.
- No parameter was tuned to improve a backtest.
One limit runs through the whole study. The years 2017 to 2026 were examined by every version, so results from that period are exploratory, not out-of-sample. The only data no version had seen was 2012 to early 2017, which is why we spent so much effort rebuilding it.
4V1: a value screen for small companies
The first version came from a close reading of practitioner books on quantitative value and momentum investing:
- O’Shaughnessy’s What Works on Wall Street;
- Gray and Carlisle’s Quantitative Value;
- Gray and Vogel’s Quantitative Momentum;
- Fridson and Alvarez on financial statement analysis;
- Damodaran on valuation.
The design was a funnel, not a scoring formula, following Gray and Carlisle’s evidence that mixing quality with cheapness in one score does worse than ranking on cheapness alone.
- Universe. US common stocks on the NYSE, Nasdaq or NYSE American with a market value between $50 million and $1 billion.
- Price of at least $2.
- Median daily trading of at least $1 million.
- Revenue of at least $10 million.
- Up-to-date filings.
- Banks, insurers, utilities, REITs, ADRs and similar structures excluded.
- Hard filters. These removed:
- companies with late filings, auditor changes, restatements, going-concern warnings or material weaknesses;
- the worst 5% on accruals;
- the worst 5% on a distress model (Campbell, Hilscher and Szilagyi, 2008);
- the worst 10% on dilution;
- the 10% of stocks with the most extreme daily jumps.
- Value. The cheapest 20% of survivors on a composite of seven yields, including earnings, cash flow and book value relative to price or enterprise value.
- Momentum and quality within the cheap group. Positive 12-month momentum (skipping the most recent month), above-median six-month momentum, and a minimum Piotroski-style quality score.
- Portfolio. 20 names, equal-weighted, rebalanced at the end of February, May, August and November. If fewer than 10 names qualified, the rest stayed in Treasury bills.
The test:
- Data. Alpaca prices including dead tickers, so the first portfolio was formed in February 2017.
- Two periods:
- March 2017 to March 2020, used for development;
- March 2020 to October 2026, run once after the code was frozen.
- Pre-committed pass marks, set before either period was run:
- beat the equal-weighted universe by three points a year;
- beat it in at least 70% of rolling three-year windows;
- show that the filters cut losses at a cost of no more than one point a year;
- show that cheaper stocks earned more.
| Compound return a year, net of costs | Mar 2017 to Mar 2020 | Mar 2020 to Oct 2026 | Whole period |
|---|---|---|---|
| V1 strategy | −4.1% | 8.7% | 4.6% |
| Equal-weighted universe | −0.3% | 10.2% | 6.8% |
| IWM (Russell 2000 fund) | 3.8% | 10.9% | about 8.6% |
| SPY, computed for this report | 10.9% | 16.3% | 14.6% |
V1 failed every return test in both periods. Over the whole period it compounded at 4.6% a year after costs, against 6.8% for its equal-weighted universe.
Why it failed:
- The value premium was missing in this size band. Within the filtered universe, the cheapest tenth of stocks did not beat the most expensive tenth in either period. The rank correlation between cheapness and return was −0.85 in the first period and −0.37 in the second. Everything downstream of the value step started from a signal that did not pay.
- The filters protected, then cost.
- They helped in 2017-2019 and in the late-2018 sell-off.
- From 2020 they removed the stocks that rebounded hardest. Out of sample, the unfiltered version earned 13.1 points a year more.
- We did not adopt it. It was one of nine variants, chosen after seeing the answer, and it had lost badly in the first period.
- The funnel was too narrow. On most dates fewer than ten names survived every step, so about 18% of the portfolio sat in Treasury bills, and portfolio size settings made no difference.
- Turnover was far higher than planned. About 220% a year, against the 60-100% the design expected, cost about 2.5% a year.
- The rebalance date mattered more than the strategy. Out of sample, the same rules returned 8.7%, 20.7% or 5.4% a year depending only on which months the quarterly rebalances fell in. With nine names, timing luck dominates.
- It was defensive, not skilful.
- Market beta was 0.72. It lost 10% in the late-2018 sell-off against 26% for its universe, and gained 11% in 2022 when its universe lost 26%.
- It badly missed recoveries: +6% from March to December 2020 against +51%.
- Its factor-adjusted alpha out of sample was −3.8% a year (t = −0.77).
V1 taught us that a strategy assembled from sensible ingredients can still fail if its central signal does not work in the market where it is applied. That led us to the academic evidence on which signals had actually survived.
5V2: testing the academic signals
For V2 we reviewed 96 papers on anomalies, trading costs and the credibility of published results, and ranked the evidence before designing anything. Two families stood out as the most likely to survive in practice:
- Profitability, following Novy-Marx (2013) and Ball, Gerakos, Linnainmaa and Nikolaev (2015, 2016).
- Financing, meaning share issuance and buybacks. Fama and French (2008) found the net-issuance effect across all size groups, and Ikenberry, Lakonishok and Vermaelen (1995) documented the drift after buyback announcements.
Value had a contested recent record. Momentum was well documented but expensive to trade.
The pre-registration, written before any V2 return was computed:
-
Universe. US common stocks at or above $5, trading at least $1 million a day, with current filings, at least 13 months of prices and two fiscal years of accounts. Financials and utilities were excluded.
-
Size tiers, using that month’s NYSE market-cap percentiles:
- micro, below the 20th percentile;
- small, 20th to 50th, the primary tier, about 580 stocks a month;
- mid, 50th to 80th;
- large, above the 80th.
-
Signals. 19 accounting signals and 5 composites, all computed from SEC filings as known at each month-end:
- profitability levels and changes;
- cash flow;
- earnings quality (accruals, the Piotroski F-score, the Beneish M-score);
- share issuance and buybacks;
- asset growth and investment.
Valuation and momentum were tested afterwards as add-ons.
-
Portfolios. Each month, the top fifth of the tier on a signal, equal-weighted, bought at the next day’s average price and charged the cost model above at a $5 million account size.
-
Bar for success. Beat the equal-weighted tier after costs, with Holm-adjusted significance across all 24 tests.
The answer was clear.
- In the small tier, none of the 24 signals met the bar. The best, the year-on-year change in operating profit, beat its universe by 4.3 points a year with t = 1.98. After adjusting for 24 tests, its Holm p-value was 1.0, as was every other signal’s.
- No portfolio in any tier had a positive factor-adjusted alpha with a t-statistic above 2.
- Valuation subtracted. Among stocks with the strongest fundamentals, the cheapest third trailed the most expensive third by 10.8 points a year.
- Momentum added nothing after its costs.
- Microcaps were worse. Their whole universe earned about 0.1% a year after the costs of trading it (1.3% on the corrected data), and every high-turnover signal lost heavily to costs.
Three candidates carried forward. We wrote down the three most promising ideas as candidates for further testing:
- P8: rising operating profit, in small caps.
- K1: a profitability composite, in mid caps. It combined gross profitability, operating profitability, return on assets, operating cash flow and cash-based operating profitability.
- R1: net buyback yield, in mid caps. That is cash spent on repurchases minus cash raised from issuing stock, divided by market value.
These three were then run the way they would have to work in practice: with the previous month’s size breakpoints, which are known at the time, and on the corrected data.
| Corrected data, Mar 2017 to Oct 2026 | Compound return | Its universe | Excess, before costs | Excess, after costs | t | 95% interval | Costs a year | Factor alpha (t) |
|---|---|---|---|---|---|---|---|---|
| P8, small caps | 12.1% | 8.6% | +4.9 | +3.5 | 1.55 | −0.7 to +7.4 | 2.7% | +1.0 (0.36) |
| K1, mid caps | 12.5% | 8.8% | +3.3 | +3.2 | 1.33 | −1.7 to +7.9 | 1.0% | −1.1 (−0.52) |
| R1, mid caps | 12.4% | 8.8% | +4.0 | +3.7 | 1.88 | −0.3 to +7.5 | 1.2% | −0.4 (−0.23) |
| SPY | 14.5% |
All three picked better stocks than their universes before costs: by 4.9, 3.3 and 4.0 points a year. After costs they still led, by 3.2 to 3.7 points. None of these leads is statistically reliable. Each interval includes zero, and these were the best survivors of 72 signal-and-tier combinations, so a t-statistic near 1.9 is about what chance alone would produce. Factor-adjusted, none has alpha: +1.0, −1.1 and −0.4 points a year.
One more thing about R1. Measured against its own universe, its factor-adjusted excess was +2.9 points a year with a t-statistic of 2.6. That was the strongest single result in V2. Its contributions were also the most widely spread: 556 names, with the ten largest providing 38% of its stock-selection effect. But it was one result among many, and it had no independent period to confirm it.
Against SPY the picture is different. All three compounded more slowly than SPY, which returned 14.5% a year over the same holding periods, and all three were more volatile.
Where the gap to SPY came from. We traced it for the frozen versions of the three strategies. The corrected data move the stock-selection figures by under 0.2 points.
- The universe itself was the largest drag. The equal-weighted small and mid-cap universes trailed SPY by 2.7 and 3.4 points a year in arithmetic terms before any stock was picked:
- about 1.9 points from leaving out financials, utilities and the mega-cap weight that drives SPY;
- about 1 point from size itself.
- Costs took 1.0 to 2.8 points a year, most for P8, which traded the most.
- Higher volatility took another 0.7 to 1.7 points of compound growth.
- Factor loadings confirm it. All three loaded heavily on the size factor, which cost 1.5 to 3.1 points a year in a decade when large companies led.
The data were corrected along the way, and the conclusions survived.
- A company’s annual report tagged $2.5 billion of stock issued for an acquisition as negative cash proceeds. That one tag briefly made it the top-ranked buyback stock.
- Bad prints and spin-offs recorded as reverse splits created fake crashes.
- Two companies carried another company’s prices.
- About 400 dual-class companies were silently missing from the universe, because the SEC’s bulk data drop share counts that are reported by share class.
Each problem was fixed by a general rule and the strategies rerun. The three candidates’ results moved by between −0.15 and +0.08 points a year, and no conclusion changed. The figures above are the corrected ones.
6Rebuilding the history
By the end of V2, the years 2017 to 2026 had been looked at by every version and several redesigns. Any further result from that period would be shaped by what we already knew. The candidates needed a test on data that had played no part in choosing them, which meant going back before 2017, and doing so without the survivorship bias that makes old backtests look better than they were.
A free history that was not what it claimed
The obvious free source was the WIKI price dataset: 15.4 million daily rows for 3,199 tickers from 1962 to 2018. Where it overlapped our own data its prices matched on 99.6% of days. But no ticker in it ends before April 2014. The dataset holds the stocks that were listed around April 2014, with their history filled in backwards. Companies that failed, merged or went private earlier are simply absent; 27 of the 28 well-known pre-2014 exits we checked were missing. Its ticker count rises from 1,488 in 1996 to 3,065 in 2014, over years in which the real number of listed US companies roughly halved. A backtest on it would only ever have held survivors. We kept it as a cross-check and nothing more.
A long vendor history, and what it could and could not support
We then bought EODHD’s full daily histories: about 102 million rows from 1962 onward, including some 29,000 US stock codes that are no longer listed. Its returns agreed with WIKI to within 0.1% on 97.6% to 99.4% of days in 2000-2015, and with Alpaca on 98.2% to 99.4% of days in 2016-2026. The problems were not missing prices but identity and adjustment:
- delisted histories begin only in 1998-1999, so earlier years again contain mostly survivors;
- there is no historical exchange field, so a code labelled “NYSE” can include years of over-the-counter trading;
- 1,430 groups of codes carry identical prices, mostly one company under two tickers, and a few codes carry another company’s prices;
- in delisted series the “close” is often already split-adjusted, and the adjusted close usually leaves out dividends.
What we built
We built a separate historical database rather than patch the vendors’ files:
- Identity. A map of 21,440 SEC companies, built from 46,710 periodic filers and 3.77 million EDGAR filings, links each vendor code, ticker and listing to a company for dated windows. That is what handles reused tickers, renames and holding-company changes. In V1’s data, 409 of 4,186 apparent delistings turned out to be renames, where a company’s history had moved to its new ticker; treated as deaths, each would have been charged a delisting loss.
- Listing status. Because no vendor records historical exchange membership, listings were inferred from SEC registration and deregistration filings. Against the CRSP-based counts in Kenneth French’s library, our count of listed common stocks reaches 61-77% in 1999-2004, 81-88% in 2005-2007 and 83-99% in 2008-2015. Restricted to companies above the NYSE 20th percentile, the comparison that matters for these strategies, it is 94-106% from 2011.
- Corporate actions. Some spin-offs were recorded as reverse splits, leaving fake one-day crashes of more than 80% in large, liquid stocks. Some split adjustments landed on the wrong day. Rather than fix names one by one, we wrote general rules: price moves that reverse within days are merged; moves contradicted by a second source, moves on a vendor-switch day and jumps on tiny volume are treated as unknown; price levels are checked against an independent raw close; days with zero volume are not trading days.
- Market values. Market cap is the cover-page share count times price, split-adjusted, no more than 400 days old, with rules that reject implausible counts. Those rules found scale errors in 2,969 company-months of V2’s data. The larger gap was dual-class companies, about 7% of the liquid universe, which the SEC’s bulk data cannot see. We recovered their counts by reading the cover page of 11,455 filings, giving usable counts for 479 companies.
Why “data from 1962” does not mean a test from 1962
Prices alone are not enough for a fundamental strategy. It also needs the company’s accounts, as they were known at the time. Structured financial statements exist at the SEC only from XBRL adoption: 2009 for the largest filers and mid-2011 for everyone else. We measured two ways around that, and neither was good enough:
- taking the prior-year columns of the first XBRL filings carries restatement noise: 7.1% of operating-income figures changed by more than 5% between the original report and the next year’s comparative;
- parsing the older text filings with a reasonable parser got about half the values right, and only 16-36% of companies had every item right.
So the usable history is shaped like this: prices including dead companies from about 1999, a reliable listed universe from about 2005, and point-in-time accounts from about 2011. Before writing any test, we set readiness criteria for each candidate. No year passed in full. K1 was allowed a conditional window from January 2012, P8 from January 2013. R1 had none: in 2014 and 2016 its missing values fell disproportionately on fragile companies, which would bias any result.
How much a few bad records can matter
The first run of the historical test reported that K1 beat its universe by +234% a year. One company’s history had been linked, through a former name, to another security that printed $35,700 on 530 shares, and zero-volume bad prints sat in the benchmark. After fixing those by rule, a second run reported +15%, because zero-volume days set a stock’s measured trading volume to zero and the cost model then charged thousands of percent to sell it. The third run, with every rule written down in advance, gave −0.1%. P8’s result moved by at most 0.2 points across all three runs; K1’s moved because the errors sat in its benchmark. All three runs are kept on record.
7V3: testing on earlier years
The historical test ran V2’s frozen K1 and P8 rules, unchanged, on the rebuilt database. The windows were 2012 to February 2017 for K1, and 2013 to February 2017 for P8. The protocol, the sample rules, twenty sensitivity checks and the verdict rules were fingerprinted before any return was computed.
The verdict rule was set in advance:
- if the 90% interval for the strategy’s excess over its universe ended below the edge V2 had measured, the earlier data falsified that edge;
- if the interval still included it, the result was consistent but not confirmed.
Windows of four to five years cannot prove a small edge. At the tracking errors observed, they could reliably detect only edges of about 3.1 points a year (P8) and 4.6 points (K1). What they can do is reject an edge of V2’s size.
P8 failed. Over 2013 to early 2017, rising operating profit in small caps trailed its universe by 1.2 points a year after costs. Before costs its stock selection added nothing (−0.1 points). Its 90% interval of −4.0 to +1.5 rules out the +3.4 points V2 had found. Its factor-adjusted alpha against the universe was −2.8 points a year (t = −2.06). The verdict held in all three runs and in every sensitivity check except those that added companies without an exact market value, and even there the interval stayed below V2’s estimate.
K1 showed no advantage. The profitability composite matched its mid-cap universe: −0.1 points a year after costs and +0.1 before. Its interval of −3.7 to +3.6 only just includes V2’s +3.3, and 7 of the 20 sensitivity checks would have falsified it, including the most natural one: comparing it only with companies that had the data to be ranked. We classed it as consistent but not confirmed, on the edge of falsified.
R1 could not be tested. Its data did not pass the readiness criteria for any year before 2017, so it remains an idea supported by one sample only.
Neither tested strategy beat SPY. K1 trailed it by 1.5 points a year and P8 by 2.5, in a period when large companies did well.
Could the remaining data gaps explain these results? We checked each one:
- incomplete fundamentals;
- missing market values;
- delisted companies;
- unresolved corporate actions;
- listing and identity doubts;
- harsher execution.
None of them could produce an edge of the size V2 measured. Every interval in the sensitivity table ends below +4.3 points a year, and most end below +3.3. Delistings barely mattered: exits were rare in these portfolios, and even counting every exit as a total loss moved the results by under a point.
| Historical test | Window | Compound return | Its universe | SPY | Excess, before costs | Excess, after costs | 90% interval | V2's estimate | Verdict |
|---|---|---|---|---|---|---|---|---|---|
| K1, mid caps | Feb 2012 to Feb 2017 | 12.7% | 12.6% | 14.6% | +0.1 | −0.1 | −3.7 to +3.6 | +3.3 | Consistent, not confirmed |
| P8, small caps | Feb 2013 to Feb 2017 | 10.4% | 11.7% | 14.2% | −0.1 | −1.2 | −4.0 to +1.5 | +3.4 | Falsified |
8Do the results depend on market conditions?
Andrew Lo’s Adaptive Markets Hypothesis (Lo, 2004 and 2017; Lo and Zhang, 2024) offers a middle path between “markets are efficient” and “markets are full of free money”. In this view the profitability of a strategy changes as investors learn, compete and adapt. An edge can appear, fade and return as conditions and competition change.
That gave us a fair question to ask of V2’s three candidates. If their results varied over time, was the variation tied to identifiable market conditions? And if it was, could an investor have used that in real time?
What we tested
As before, everything was written down and fingerprinted before any result was computed.
Four market regimes, each a simple yes-or-no state known at the time of each portfolio decision:
| Regime | “Yes” state | Share of months in that state |
|---|---|---|
| Market direction | SPY up over the past 12 months | 86% |
| Volatility | SPY’s 63-day realized volatility above its five-year median | 52% |
| Interest rates | The 10-year Treasury yield up over 12 months | 65% |
| Size leadership | Small caps (IWM) beat SPY over 12 months | 30% |
Twelve tests: each of the three strategies under each of the four regimes. P-values came from a test that shifts the regime calendar against the return series, which preserves the slow-moving nature of both. Holm and Benjamini-Hochberg corrections were applied across the twelve.
Three switching rules, each simulated walk-forward from March 2020 to September 2026, with a one-month reporting lag and full trading costs for every switch:
- follow each strategy’s trailing 12-month excess;
- combine the regime signals;
- each period, pick whichever strategy had the best trailing three years.
What we found
Performance did change over time, a lot. P8 trailed its universe every year from 2017 to 2020, as it had in 2012-2016, and then beat it strongly from 2021: −1.5 points a year before 2022 against +8.6 after. Rolling 36-month excess swung across a range of 8.5 to 17 points for each strategy.
None of the regime effects survived correction. The closest was K1 doing better when rates were rising: +9.4 points a year, with a raw p-value of 0.019 but a Holm-adjusted p-value of 0.23. With twelve tests, about one raw p-value below 0.10 is expected by chance alone. There was one. Several regime states were also thin. The “down market” state had only 16 months, 13 of them in 2022 and 2023, so it largely measured one episode.
The results rested on a few months and a few names:
- Months. The best 5 of 116 months produced 79% to 87% of each strategy’s cumulative excess. Without them, each strategy was within a point of its universe. The share of months in which each beat its universe was 55% to 58%, not distinguishable from a coin toss.
- P8. The ten best names produced about 74% of P8’s stock-selection effect. The GameStop squeeze in January 2021 alone accounted for about 30% of it.
- K1. Its ten best names produced about 70% of its stock-selection effect.
- R1 was the exception, spread across hundreds of names.
Switching did not help. Every rule that actually changed position lost money against simply holding the strategy, by 1.6 to 5.9 points a year. The two results closest to significance were significantly worse, not better. The rules held the universe instead of P8 through its best month, and the best-of-three rule arrived after each strategy’s run was over. One rule never switched, because its signals never turned negative, so it matched the static strategy exactly.
Variation is not predictability
These results separate two claims that are easy to blur:
- That an edge varies over time. That was clearly true here, and it is what the Adaptive Markets Hypothesis expects.
- That the variation is predictable and exploitable. We found no evidence for that. With these sample sizes, swings of this kind are hard to tell apart from noise around a small average edge, and nothing we could observe at the time anticipated them.
One pattern is worth recording as a hypothesis only. Profitability (K1) did better when rates were rising in both 2017-2026 and 2012-2016. That is economically plausible: rising rates hurt long-duration, unprofitable growth stocks most. But it was not an expectation we wrote down in advance, and it failed the multiple-testing correction.
For a strategy whose edge may come and go, our conclusion was monitoring, not timing: decide in advance what evidence would retire it, and stop when that evidence arrives.
| Strategy | Regime | Excess when "yes" | Excess when "no" | Difference | p | Holm-adjusted p |
|---|---|---|---|---|---|---|
| P8 | Market up | +4.7 | −4.1 | +8.7 | 0.248 | 1.00 |
| P8 | High volatility | +3.9 | +3.0 | +0.9 | 0.876 | 1.00 |
| P8 | Rates rising | +3.8 | +2.9 | +0.9 | 0.876 | 1.00 |
| P8 | Small caps leading | +6.7 | +2.0 | +4.7 | 0.419 | 1.00 |
| K1 | Market up | +2.8 | +5.6 | −2.8 | 0.581 | 1.00 |
| K1 | High volatility | +3.1 | +3.3 | −0.2 | 0.952 | 1.00 |
| K1 | Rates rising | +6.5 | −2.9 | +9.4 | 0.019 | 0.23 |
| K1 | Small caps leading | +8.5 | +0.8 | +7.7 | 0.143 | 1.00 |
| R1 | Market up | +3.9 | +2.7 | +1.1 | 0.876 | 1.00 |
| R1 | High volatility | +5.2 | +2.1 | +3.1 | 0.486 | 1.00 |
| R1 | Rates rising | +5.7 | +0.1 | +5.6 | 0.200 | 1.00 |
| R1 | Small caps leading | +6.6 | +2.5 | +4.1 | 0.314 | 1.00 |
Net excess over each strategy's equal-weighted universe, in points a year, March 2017 to October 2026, corrected data. p from a circular-shift test that preserves the persistence of both series. Holm adjustment across all twelve tests.
9V4: one universe, three signals, realistic trading
V4 was a fresh design that drew on everything before it. It was specified, audited and frozen before any V4 return existed.
One universe instead of separate tiers
V2 ran separate small-cap and mid-cap portfolios. That left each fishing in a narrow pond, and it created needless trading: 43% to 57% of the stocks leaving a V2 portfolio left because they crossed a size boundary, not because their signal weakened.
V4 uses one universe: US common stocks on the NYSE, Nasdaq or NYSE American between the 20th and 80th percentiles of NYSE market capitalization, measured the month before.
-
The lower bound removes microcaps. That is where Hou, Xue and Zhang (2020) found most published anomalies concentrate, and where V2 found that costs consumed any edge.
-
The upper bound keeps the strategy away from the largest, most heavily researched companies.
-
A stock already held may stay while it sits between the 10th and 90th percentiles, so small moves in its size do not force a sale.
-
The hard rules apply to new and held names alike:
- price of at least $5;
- average daily trading of at least $1 million over 60 days;
- current filings;
- an exact point-in-time market value.
Financials and utilities are excluded.
-
In numbers, this gave 935 to 1,223 eligible companies a month, 85% to 97% of the comparable CRSP count.
Three signals, chosen and weighted in advance
- Operating profitability before R&D, 40%: operating income plus R&D expense, divided by total assets at the end of the same period. This follows the operating-profitability measure of Ball, Gerakos, Linnainmaa and Nikolaev (2015), who found it a stronger predictor of returns than gross profitability. As in their measure, R&D is added back, so spending on research does not count against current profitability.
- Net share reduction, 35%: the fall in split-adjusted shares outstanding over the past year. Each count passes plausibility checks, and implausible changes are treated as missing rather than ranked.
- Momentum, 25%: total return over the past twelve months, skipping the most recent month. This is the price-momentum effect documented by Jegadeesh and Titman (1993), in the convention used by the Fama-French momentum factor.
Each signal is converted to a percentile within its NYSE size group (small or mid), so small companies compete with small companies. The composite is the weighted average of the three percentiles, and a company needs all three to be ranked.
Why operating profitability, and not gross profitability
The original V4 draft used gross profitability, as in Novy-Marx (2013). Before any return was computed, a coverage study showed two problems with it.
It was missing for 22% of eligible companies, and not at random:
- energy companies, pre-revenue biotechs and many service businesses do not report a cost-of-revenue line;
- coverage was 34% in energy and 59% in health care;
- it was missing more often for companies that later failed (71% coverage) than for survivors (80%);
- requiring it would have quietly removed future failures from the ranked set, flattering the comparison with the universe.
Operating profitability, taken from the operating-income line companies themselves report, avoids most of that.
An accounting check before the freeze then tightened its definition:
- operating income, R&D and assets must all come from the same period;
- R&D is never assumed to be zero when a company that normally reports it leaves it out;
- a result where operating income plus R&D exceeds revenue is treated as an error.
That check found two problems in the first draft, and both were fixed before any return was computed:
- 17% of company-months had mixed inputs from different periods;
- missing R&D had been set to zero.
After the correction, all three signals were available for 85% to 88% of eligible companies each year from 2013, against 74% to 80% with gross profitability. Coverage was nearly equal for companies that later survived (86%), merged (83%) or failed (84%).
Portfolio and trading rules
- Portfolio. 40 stocks, equal-weighted, formed at the end of February, May, August and November.
- A stock enters from the top 15% of the ranking and stays while it remains in the top 30% and eligible.
- No more than 10 holdings in any Fama-French industry group.
- Execution:
- Trading starts the next session.
- Each day, a stock’s trades are capped at 5% of its average daily dollar volume, at that day’s average price.
- Purchases not completed within 10 trading days are cancelled, and the cash earns the Treasury bill rate.
- Sales are worked to completion.
- Each day’s trade pays the cost model above.
- Account size. The base account is $5 million, with $1 million and $25 million as stress tests.
Pass marks, set before the test
| Tier | Requirement | What it means |
|---|---|---|
| Tier 1 | Beat the coverage-matched universe after costs, positive factor-adjusted alpha, still beat the universe with costs doubled | A promising exploratory result. It is not statistical validation. |
| Tier 2 | Tier 1, plus significance after the multiple-testing correction, beating each single signal, no contradiction from 2012-2016, the same sign under every data check, and an explained concentration | Worth following on new data as it arrives |
| Tier 2A | Tier 2, plus beating SPY on compound return and Sharpe ratio | A candidate to beat the index |
| Tier 3 | At least 36 months of new data, collected after the rules were frozen, that beat both the universe and SPY | The strongest evidence there is. No backtest can reach it. |
Before the run we checked the trading engine against V2’s own simulator on a case both could run. Its monthly returns had a 0.988 correlation with V2’s, with the same average. The first full run stopped on a data error before producing any result: 34 takeovers had a recorded last price of zero. The correction was the one the frozen specification already required, so nothing about the strategy changed. We wrote the rule down before rerunning, and both runs are logged.
Results
From March 2017 to September 2026, 115 months net of all costs, V4 compounded at 12.8% a year:
- its coverage-matched universe returned 9.6%;
- the full eligible universe returned 9.4%;
- SPY returned 14.8%.
V4’s Sharpe ratio was 0.57 against SPY’s 0.79, and its worst month-end drawdown was −32% against −24%. Costs were modest, about 0.45% a year, because quarterly rebalancing with a retention buffer kept one-way turnover near 56% a year.
The primary test. The excess over the coverage-matched universe was +2.6 points a year:
- the t-statistic was 1.0;
- the 90% interval ran from −1.4 to +6.6;
- the one-sided p-value was 0.16, which became 0.80 after the Holm adjustment across the five pre-registered tests.
Before the test we had estimated that this sample could reliably detect an excess of about 3.2 to 5.2 points a year. The observed 2.6 sits inside the noise.
Factor-adjusted, almost nothing is left. V4’s alpha over Treasury bills against the six-factor model was +0.6 points a year (t = 0.27; 90% interval −3.0 to +4.2). Relative to its universe, V4 held more profitable companies (profitability loading +0.43), more recent winners (momentum +0.16) and slightly cheaper ones (value +0.15). Those are the tilts the design aimed for, and they account for most of the excess. What remained after removing them was +2.0 points a year (t = 0.96).
Did combining the signals help?
- It beat profitability alone and share reduction alone.
- It did not beat momentum alone, which earned +6.2 points a year over the same universe.
- But momentum alone was itself not significant (t = 1.19). It was far more volatile, and it turned over 141% of the portfolio a year at 1.6% in costs.
That doesn’t mean momentum alone is better. It means this test gave no evidence that combining the signals improved on it.
The verdict. V4 met all three Tier 1 conditions:
- excess over its universe +2.6;
- factor-adjusted alpha +0.6;
- excess with doubled costs +2.5.
It failed Tier 2 on two counts: the primary test was not significant, and the composite did not beat momentum alone. It also did not beat SPY. Tier 1 is a description of point estimates, not a statistical finding, and on our own rules a Tier 1 result goes no further. We did not run variations to rescue it.
| Mar 2017 to Sep 2026, net of costs | Compound return | Sharpe | Worst drawdown | Volatility | Turnover a year | Costs a year |
|---|---|---|---|---|---|---|
| V4 composite | 12.8% | 0.57 | −32% | 20.8% | 56% | 0.45% |
| Coverage-matched universe (primary benchmark) | 9.6% | 0.42 | −37% | 22.2% | 57% | 0.41% |
| Full eligible universe | 9.4% | 0.41 | −37% | 22.4% | 55% | 0.40% |
| Value-weighted universe | 9.8% | 0.44 | −34% | 20.9% | 39% | 0.23% |
| SPY | 14.8% | 0.79 | −24% | 16.3% | ||
| Profitability only | 10.8% | 0.52 | −28% | 18.6% | 47% | 0.40% |
| Share reduction only | 10.0% | 0.40 | −45% | 26.9% | 74% | 0.62% |
| Momentum only | 14.1% | 0.51 | −38% | 30.7% | 141% | 1.61% |
Turnover is one-way: dollars traded divided by two and by the average portfolio value, so the initial purchase counts as 50%. Drawdowns are measured at month-end marks.
| Pre-registered test (one-sided) | Estimate a year | t | p | Holm-adjusted p |
|---|---|---|---|---|
| V4 beats its coverage-matched universe | +2.6 | 1.00 | 0.159 | 0.80 |
| V4 beats profitability alone | +2.3 | 0.91 | 0.182 | 0.80 |
| V4 beats share reduction alone | +1.2 | 0.27 | 0.395 | 1.00 |
| V4 beats momentum alone | −3.7 | −0.61 | 0.730 | 1.00 |
| Factor-adjusted alpha above zero | +0.6 | 0.27 | 0.393 | 1.00 |
| Evidence tier | Condition | Result | Met |
|---|---|---|---|
| Tier 1 | Excess over the coverage-matched universe is positive | +2.6 points a year | Yes |
| Factor-adjusted alpha is positive | +0.6 points a year (t 0.27) | Yes | |
| Excess is still positive with costs doubled | +2.5 points a year | Yes | |
| Tier 2 | Primary test significant after the Holm adjustment | Holm-adjusted p 0.80 | No |
| Composite beats each single signal, or nearly matches it with better risk and diversification | Beats profitability and share reduction; not momentum | No | |
| 2012-2016 does not contradict the result | +3.3 points a year | Yes | |
| Same sign with dual-class companies excluded, with gross or cash-based profitability, and with verified 2012-2016 prices | All positive | Yes | |
| Concentration audited and explained | Audited; no data errors found | Done | |
| Tier 2A | Also beats SPY on compound return and Sharpe ratio | 12.8% vs 14.8%; 0.57 vs 0.79 | No |
Robustness, concentration and other periods
We ran every sensitivity listed in the protocol once, each against a benchmark built with the same rule. They fall into two groups.
Trading and data assumptions barely mattered. None of these moved the excess by more than 0.4 points:
- doubling costs;
- filling at the open instead of the day’s average price;
- a $1 million or $25 million account;
- harsher delisting losses;
- excluding dual-class companies;
- excluding months with flagged prices.
Execution was not the problem. At $25 million, $2.8 million of purchases went unfilled over 36 quarterly formations, and the excess changed by less than a tenth of a point.
Design timing and company size mattered a great deal:
-
Rebalancing dates. The same rules on the three possible quarterly calendars gave −0.8, +2.6 and +3.8 points a year. A spread of 4.6 points from timing alone is larger than the effect being measured. V1 showed the same thing.
-
Company size. Among small companies alone, V4 trailed its universe by 1.8 points a year. Including the largest companies raised the excess to +4.0, the only interval that excluded zero.
That last result is tempting, which is exactly why we didn’t act on it. Adopting it would mean choosing the best of many variants after seeing the answer. If it is ever pursued, it has to be a new version tested on data no version has seen.
The excess was concentrated:
- Without its ten largest contributors, V4’s stock-selection effect becomes slightly negative, −0.9 points a year.
- Without its five best months, the net excess is −0.75 points a year.
- The largest contributor, AppLovin in its 2023-2024 run, a simulated holding, accounted for about a third of the stock-selection effect.
We checked every one of those names and months for data errors. That covered price, split and identity flags, plus an independent second price source, and we found none. The gains were real moves in a handful of strongly profitable, rising companies. That is what a profitability-and-momentum composite is designed to catch, but the result depends on catching them.
Year by year, the excess over the universe came mostly from three years: 2021, 2023 and 2024. It was negative in 2019, 2020, 2025 and 2026. Rolling 36-month excess over the universe was positive in 78% of windows; against SPY, in 49%.
Other periods. On the conditional 2012-2017 history, V4 beat its universe by 3.4 points a year (90% interval −1.0 to +7.6) and returned 18.9% a year against SPY’s 15.5%. That does not contradict the main result, but it is four years of weaker data and is treated as exploratory, not as confirmation. From March 2022 the excess over the universe was +5.1 points a year, while V4 still trailed SPY slightly.
10What the four iterations show together
| How concentrated was the excess? | Share of total excess from the best 5 months | Excess without the best 5 months | Months beating the universe |
|---|---|---|---|
| V2 · P8 | 87% | +0.5 | 57% |
| V2 · K1 | 85% | +0.5 | 58% |
| V2 · R1 | 79% | +0.8 | 55% |
| V4 | 128% | −0.7 | 48% |
V2 figures cover 116 months, V4's 115. A share above 100% means the remaining months together subtracted from the total.
We sort the lessons by how much weight they can bear:
- Demonstrated: shown directly in our tests, within their limits.
- Interpretation: what we think the evidence means.
- Hypothesis: not yet tested.
1. Strong accounting characteristics did not translate into investable alpha. Demonstrated.
- Of V2’s 24 signals in the primary tier, none survived the multiple-testing correction.
- V4’s composite tilted clearly toward profitable, share-shrinking companies with momentum, and its factor-adjusted alpha was +0.6 points a year.
- Buying good companies is not the same as earning a return that the known factors do not already explain.
2. Stock-selection gains were absorbed by costs, volatility, market exposure and factor exposure. Demonstrated.
- P8 picked stocks that beat its universe by about 4.9 points a year before costs.
- Trading costs took about 2.7 points, its universe trailed SPY by about 2.7, and its extra volatility cost about 1.7 points of compound growth.
- It ended 2.4 points a year behind SPY: 12.1% against 14.5%.
3. A model can beat its universe and still lose to the market. Demonstrated for 2017-2026.
- Equal-weighted small and mid caps trailed SPY by about five to six points a year.
- V4’s universe returned 9.6% a year against SPY’s 14.8%.
- No stock-selection edge we measured was large enough to close a gap of that size.
4. Survivorship bias and corporate-action errors can produce badly misleading backtests. Demonstrated.
- A popular free dataset contained only survivors.
- Spin-offs recorded as reverse splits created fake 80% crashes.
- Renamed tickers looked like 409 bankruptcies.
- A single mislinked security turned a historical test result into +234% a year.
5. Point-in-time accounts and company identity are essential. Demonstrated.
- About 7% of the liquid universe, the dual-class companies, was invisible in standard bulk data.
- One mis-signed tag in an annual report made a company look like the market’s biggest buyer of its own shares.
- In our first draft of V4’s profitability measure, 17% of company-months mixed figures from different periods.
6. Concentration makes strategies look more persistent than they are. Demonstrated.
- In V2, the best 5 of 116 months produced 79-87% of the cumulative excess.
- In V4, removing the ten largest contributors turned the stock-selection effect negative.
- An annualized average hides this. A month-by-month and name-by-name breakdown shows it.
7. Results changed with market conditions, but we could not identify the changes in advance. Demonstrated, within the regimes we tested.
- No regime effect survived correction, and every switching rule that switched lost money.
- Interpretation: Lo’s adaptive view of markets fits the variation we saw. Our data cannot tell that from noise.
- Hypothesis: profitability does better when rates are rising.
8. More sophisticated combinations did not beat simpler strategies. Demonstrated in our tests.
- V1’s elaborate filters cost 13 points a year out of sample.
- Adding valuation to V2’s fundamentals lowered returns.
- V4’s three-signal composite did not beat momentum alone, though neither result was statistically reliable.
9. Correct data and careful testing mattered more than maximizing historical return. Interpretation.
- The highest backtest numbers in this project came from ideas we then rejected:
- V1’s unfiltered variant;
- P8 in 2021-2026;
- V4 with large companies included.
- Each was a selection made after seeing the answer, and each would have been easy to publish as a discovery.
10. These failures do not show that small- and mid-cap investing is ineffective. Interpretation.
- Our tests covered long-only, rules-based selection from public accounts and prices, rebalanced monthly or quarterly, over roughly 2012-2026, in a decade when large companies dominated.
- They say nothing about:
- fundamental research by people;
- activism or private information;
- longer holding periods;
- other decades, or other markets.
11Limitations
- The main sample is not out-of-sample. Every version examined 2017-2026, so its results are exploratory. Only the 2012-2017 history was untouched when the V2 candidates were tested on it, and that history only supports conditional, short windows.
- The samples are short. About ten years of monthly returns can reliably detect an excess of three to five points a year, not one or two. A real but small edge could hide in our results. A large one could not.
- Costs are estimates. Spreads are estimated from daily prices rather than measured from quotes, and market impact comes from a standard model. We charged nothing for taxes, borrowing or commissions, and we did not test short selling.
- The historical data are conditional.
- No year before 2017 met all of our readiness criteria.
- About 10% of mid-cap and 8% of small-cap company-months in 2012-2016 have price levels that no second source can confirm.
- Two spin-offs remain uncredited.
- Fundamental tests before about 2011 are not possible with free structured data.
- The benchmarks have their own limits.
- The factor model’s factors are built on a broader universe than ours.
- SPY is bought at the same fills as the strategies and charged no trading costs.
- Drawdowns are measured at month-ends, which understates intra-month falls for everything, SPY included. SPY fell about 34% intra-month in March 2020, against about 23-24% at month-end.
- Industry classification uses current SIC codes, because historical codes were not available to us.
- These are our designs. Other reasonable choices of universe, signal definition, weighting or schedule exist. We froze ours before testing precisely so that we could not pick among them by result, which also means we did not explore them.
12Implications for systematic small- and mid-cap investing
For anyone building or evaluating a systematic small- or mid-cap strategy, a few practical points follow from this work.
- Measure the universe against the index before measuring the strategy against the universe. In 2017-2026 the choice of pond cost more than stock selection could earn back. A strategy report that shows only excess over its own universe answers the less important question.
- Ask what the factors explain. Most of the selection effects we found were explained by known exposures: profitability, momentum, value, size and beta. Those exposures can be bought far more cheaply than a bespoke strategy.
- Insist on point-in-time, survivorship-free data, and audit it. The errors that mattered most were not exotic: survivor-only histories, spin-offs recorded as splits, renamed tickers, missing share classes, a mis-signed accounting tag. Each could have produced a publishable result on its own.
- Count the tests. We tested 72 signal-and-tier combinations in V2 alone. Against that many attempts, a t-statistic near 2 on the best survivor is expected by chance. Any honest summary has to say how many ideas were tried.
- Look at the months and the names. If removing five months or ten stocks erases a strategy’s edge, it is a strategy that has had a good run, not yet one with a durable edge.
- Trade less. The single most reliable improvement across versions was slower trading. V1 turned over about 220% a year and paid about 2.5% in costs. V4, with quarterly rebalancing, a retention buffer and a participation cap, turned over about 56% and paid about 0.45%.
- Treat a backtest as a hypothesis, not a track record. The evidence that counts comes after the rules are frozen, from data the designer has never seen.
13What we would test next
These are untested hypotheses. None of them is a finding.
- Net buyback yield in mid caps (R1).
- It was V2’s most broadly based result, and its factor-adjusted excess over its universe had a t-statistic of 2.6.
- It was never tested on independent data, because its earlier history did not pass our readiness checks.
- The only test still open to it is a prospective one, under frozen rules, with SPY tracked alongside.
- Profitability and interest rates.
- K1 did better when rates were rising in both periods we examined.
- It was not a prior expectation and did not survive correction, so it can only be tested on data still to come.
- Universe definition.
- V4’s excess rose when the largest companies were included and turned negative among small companies alone.
- Whether a profitability-and-momentum composite works better among larger, more liquid companies is a fair question for a new, pre-registered design. It is not a reason to change V4 after the fact.
- Longer history. A credible test before 2011 needs point-in-time financial statements that free sources do not provide. That means either licensed historical fundamentals or a far better parser for older text filings than the one we measured.
- Measured trading costs. Historical quote data would replace estimated spreads with measured ones, and would sharpen every net-of-cost result here, especially for smaller companies.
14Methodology appendix and references
A1. Universes
| Version | Universe | Hard rules |
|---|---|---|
| V1 | NYSE, Nasdaq and NYSE American common stocks, $50 million to $1 billion market value | Price at least $2. Median 20-day dollar volume at least $1 million. Revenue at least $10 million. 10-K within 15 months and 10-Q within 5. Two years of accounts and 13 months of prices. No financials, utilities, REITs, ADRs, partnerships, funds, SPACs or tracking stocks |
| V2 | Primary common stock of SEC filers, in tiers by that month’s NYSE market-cap percentiles: micro below the 20th, small 20th to 50th, mid 50th to 80th, large above | Price at least $5. Median 20-day dollar volume at least $1 million. Current filings. 13 months of prices and two fiscal years. No SIC 6000-6999 or 4900-4949. No partnerships |
| V4 | NYSE, Nasdaq and NYSE American common stocks between the NYSE 20th and 80th percentiles, from the previous month’s breakpoints. Holdings may stay between the 10th and 90th | Price at least $5. Mean 60-day dollar volume at least $1 million, counting days without a trade as zero. Current 10-K and 10-Q. 13 months of prices. An exact point-in-time market value. No SIC 6000-6999 or 4900-4949. No ADRs, 20-F or 40-F filers, preferreds, warrants, units, partnerships or OTC lines |
The V2 forward candidates use the previous month’s breakpoints. The pre-registered V2 tables use the same month’s.
A2. Market capitalization
- Shares. The cover-page count of shares outstanding from the latest 10-K or 10-Q, usable from the day after EDGAR acceptance and no more than 400 days old. It is split-adjusted to the trading date.
- Dual-class companies. The count is the sum across classes from the filing’s cover page, valued at the traded line’s price.
- Plausibility rules.
- A count outside 10,000 to 100 billion shares is rejected.
- A jump of more than 100 times is accepted only if a later, different count confirms it.
- A rejected count is replaced by the last accepted one, or else the company is excluded that month.
A3. When financial information is available
- Timing. Each XBRL fact is usable from the trading day after the EDGAR acceptance time of the filing that first reported it. Restated values never replace the original in the history.
- Flows. Trailing twelve months: the fiscal year plus the latest year-to-date minus the year-ago year-to-date.
- Balance-sheet items. From the latest balance sheet.
- “A year earlier”. The value as known twelve months before.
A4. Signal definitions
- V4 operating profitability.
- Definition: (operating income + R&D expense) / total assets at the end of the same period.
- Period: the latest four quarters when operating income (and R&D, for companies that report it) has been updated to the latest quarter and the balance sheet is dated within seven days of that quarter’s end. Otherwise, the latest fiscal year and its year-end assets.
- Missing R&D: a company that has reported R&D within 36 months but omits it for the period is treated as missing. A company that never reports R&D gets no add-back, except in R&D-intensive industries, where the value is treated as missing.
- Error check: a value where operating income plus R&D exceeds revenue is treated as missing.
- Reference: Ball, Gerakos, Linnainmaa and Nikolaev (2015) define (revenue − cost of goods sold − SG&A + R&D) / total assets. Our proxy uses the reported operating-income line instead, so it is after depreciation and other operating items.
- V4 net share reduction.
- Definition: 1 − (split-adjusted shares now / shares known 12 months earlier).
- Missing values: the count is missing when it is implausible, when the company’s identity changed, or when the share-class basis changed. It is also missing when a change beyond 2x is not corroborated by weighted-average shares, when it matches an unrecorded split factor, or when the count is stale.
- V4 momentum. Total return from twelve months before to one month before the formation date.
- V2 candidates.
- P8: (operating income now − a year earlier) / total assets a year earlier.
- K1: the average percentile of gross profitability, operating profitability, return on assets, operating cash flow over assets, and cash-based operating profitability.
- R1: (repurchases − equity issued) / market value, from cash-flow statement items. Negative values of these always-positive items are treated as tagging errors and dropped.
A5. Corporate actions and price cleaning
Returns are total returns, including dividends and adjusted for splits.
Before 2016, the history uses general rules, written down before each rerun:
- one-day moves that reverse within days are merged;
- a move is treated as unknown if WIKI contradicts it, if it falls on a vendor-switch day, if it comes on tiny volume, or if it is a tenfold break;
- price levels are checked against WIKI’s raw closes and rescaled where the vendor’s basis differs;
- zero-volume rows are not trading days;
- when a vendor line moves to a different instrument, the rest of that month’s return is frozen;
- a company-month claimed by two securities is excluded.
After 2016:
- 228 identified bad prints and corporate-action bridges were replaced with corrected returns;
- spin-offs recorded as reverse splits had the false split factor removed.
A6. Delisting returns
A delisted holding settles at its last close times one plus a delisting return:
- Cash mergers: the deal price where known, otherwise the last close.
- Stocks that kept trading after delisting on the same verified line: the price on the tenth trading day (2012-2016 history only).
- Performance-related or unexplained exits: −35%, with stress tests at −55% and −100%.
From 2017 the exit table is V2’s audited table.
A7. Rebalancing and execution
| V1 | V2 | V4 | |
|---|---|---|---|
| Formation | End of Feb, May, Aug, Nov | End of each month | End of Feb, May, Aug, Nov |
| Portfolio | 20 names, equal weight, T-bills if fewer than 10 qualify | Top fifth of the tier, equal weight | 40 names, equal weight, enter top 15%, keep top 30%, at most 10 per FF12 industry |
| Fill | Next session, average of open, high, low and close | Same | Same, capped at 5% of 60-day mean dollar volume per name per day; buys cancelled after 10 trading days; sells worked to completion |
| Cash | T-bill rate | T-bill rate | T-bill rate |
A8. Transaction costs
From V2 on, the cost of each trade is:
half spread + 0.5 × daily volatility × √(trade value / 20-day median dollar volume)
- Half spread: the Abdi-Ranaldo estimate over 63 trading days, clipped to 5-200 basis points.
- Volatility: 63-day.
- Unknown inputs: a 2% half spread, 60% annual volatility and $1 million of daily volume.
- Where it is applied: in V4, to each day’s executed slice.
Stress tests: costs doubled and fills at the open.
V1 charged a flat 1.0% per one-way trade below $250 million of market value and 0.5% above, stressed at two and three times.
A9. Lookahead and survivorship controls
- Every input is dated by when it was public.
- The size breakpoints come from the month before the decision, or the same month as pre-registered for V2’s tables.
- Delisted and later-merged companies stay in every universe until they exit.
- Benchmarks use the same eligibility, schedule, execution and costs as the strategies.
A10. Factor regressions
- Model: monthly net returns over the one-month Treasury bill rate, regressed on the Fama-French five factors plus momentum (Kenneth French data library).
- Standard errors: Newey-West with three lags.
- Active alpha: the same regression run on the strategy’s return minus its universe’s.
A11. Statistical inference
- Excess returns: monthly, non-overlapping, annualized by multiplying by twelve.
- t-statistics: Newey-West with three lags.
- Intervals: a circular block bootstrap with six-month blocks and 2,000 draws (seed fixed in advance). Intervals are 95% in V2’s pre-registration and 90% in the historical test and V4, as each protocol specified.
- Factor-alpha intervals in figure 10: for V4, from its regression. For the other versions they are derived from the reported t-statistic as alpha ± 1.645 × |alpha / t|.
- Direction of tests: one-sided where the hypothesis has a direction.
A12. Multiple comparisons
- V2: Holm across the 24 small-tier signals and composites, with a flag for t-statistics above 3 (Harvey, Liu and Zhu, 2016).
- Historical test: Holm across its two candidates.
- Adaptive Markets study: Holm and Benjamini-Hochberg across twelve regime tests; Holm across seven rule comparisons.
- V4: Holm across five pre-registered tests:
- beating the coverage-matched universe;
- beating each of the three single signals;
- positive factor-adjusted alpha.
A13. Out-of-sample limits
| Period | Status |
|---|---|
| 2017-2026 | Examined by V1, its redesigns, V2, V3’s diagnosis, the Adaptive Markets study and V4. Exploratory |
| 2012 to Feb 2017 | Untouched when K1 and P8 were tested on it. Conditional data, short windows |
| Before 2012 | No free point-in-time fundamentals |
| After the freeze | The only truly independent evidence. Not yet collected |
A14. Reproducibility
Each version kept:
- a written specification and pre-registration;
- SHA-256 fingerprints of its rules, code and input files, taken before results;
- an experiment log listing every run, including failed and repeated ones;
- data corrections as general rules written before the rerun, with both runs kept;
- monthly return series for every strategy, benchmark and sensitivity.
The vendor price data are licensed and are not redistributed. Every figure in this report is computed by us from them.
References
Academic papers:
- Abdi, F., and Ranaldo, A. (2017). A simple estimation of bid-ask spreads from daily close, high, and low prices. Review of Financial Studies 30(12), 4437-4480.
- Ball, R., Gerakos, J., Linnainmaa, J. T., and Nikolaev, V. (2015). Deflating profitability. Journal of Financial Economics 117(2), 225-248.
- Ball, R., Gerakos, J., Linnainmaa, J. T., and Nikolaev, V. (2016). Accruals, cash flows, and operating profitability in the cross section of stock returns. Journal of Financial Economics 121(1), 28-45.
- Benjamini, Y., and Hochberg, Y. (1995). Controlling the false discovery rate: a practical and powerful approach to multiple testing. Journal of the Royal Statistical Society, Series B 57(1), 289-300.
- Campbell, J. Y., Hilscher, J., and Szilagyi, J. (2008). In search of distress risk. Journal of Finance 63(6), 2899-2939.
- Chen, A. Y., and Velikov, M. (2023). Zeroing in on the expected returns of anomalies. Journal of Financial and Quantitative Analysis 58(3), 968-1004.
- Chen, A. Y., and Welch, I. (2026). What useful alphas? Working paper, arXiv:2607.06502.
- Chen, A. Y., and Zimmermann, T. (2022). Open source cross-sectional asset pricing. Critical Finance Review 11(2), 207-264.
- Fama, E. F., and French, K. R. (2008). Dissecting anomalies. Journal of Finance 63(4), 1653-1678.
- Fama, E. F., and French, K. R. (2015). A five-factor asset pricing model. Journal of Financial Economics 116(1), 1-22.
- Harvey, C. R., Liu, Y., and Zhu, H. (2016). … and the cross-section of expected returns. Review of Financial Studies 29(1), 5-68.
- Holm, S. (1979). A simple sequentially rejective multiple test procedure. Scandinavian Journal of Statistics 6(2), 65-70.
- Hong, H., Lim, T., and Stein, J. C. (2000). Bad news travels slowly: size, analyst coverage, and the profitability of momentum strategies. Journal of Finance 55(1), 265-295.
- Hou, K., Xue, C., and Zhang, L. (2020). Replicating anomalies. Review of Financial Studies 33(5), 2019-2133.
- Ikenberry, D., Lakonishok, J., and Vermaelen, T. (1995). Market underreaction to open market share repurchases. Journal of Financial Economics 39(2-3), 181-208.
- Jegadeesh, N., and Titman, S. (1993). Returns to buying winners and selling losers: implications for stock market efficiency. Journal of Finance 48(1), 65-91.
- Krauss, C., Krüger, T., and Beerstecher, D. (2015). The Piotroski F-score: a fundamental value strategy revisited from an investor’s perspective. IWQW Discussion Paper No. 13/2015, University of Erlangen-Nürnberg.
- Lo, A. W. (2004). The adaptive markets hypothesis: market efficiency from an evolutionary perspective. Journal of Portfolio Management 30(5), 15-29.
- Newey, W. K., and West, K. D. (1987). A simple, positive semi-definite, heteroskedasticity and autocorrelation consistent covariance matrix. Econometrica 55(3), 703-708.
- Novy-Marx, R. (2013). The other side of value: the gross profitability premium. Journal of Financial Economics 108(1), 1-28.
- Piotroski, J. D. (2000). Value investing: the use of historical financial statement information to separate winners from losers. Journal of Accounting Research 38 (Supplement), 1-41.
Books:
- Damodaran, A. (2025). Investment Valuation: Tools and Techniques for Determining the Value of Any Asset, 4th edition. Wiley.
- Fridson, M., and Alvarez, F. (2022). Financial Statement Analysis: A Practitioner’s Guide, 5th edition. Wiley.
- Gray, W. R., and Carlisle, T. E. (2012). Quantitative Value. Wiley.
- Gray, W. R., and Vogel, J. R. (2016). Quantitative Momentum. Wiley.
- Lo, A. W. (2017). Adaptive Markets: Financial Evolution at the Speed of Thought. Princeton University Press.
- Lo, A. W., and Zhang, R. (2024). The Adaptive Markets Hypothesis: An Evolutionary Approach to Understanding Financial System Dynamics. Oxford University Press.
- O’Shaughnessy, J. P. (2012). What Works on Wall Street, 4th edition. McGraw-Hill.
Data:
- Kenneth R. French, Data Library: Fama-French five factors, momentum factor, NYSE market-equity breakpoints.
- U.S. Securities and Exchange Commission, EDGAR: XBRL financial statement data and filing indexes.
- Alpaca Markets: consolidated daily bars, 2016 onward.
- EODHD: historical end-of-day prices, splits and dividends.
- Nasdaq Data Link: WIKI Prices, used for cross-checks only.
- Federal Reserve Bank of St. Louis, FRED: 10-year Treasury constant-maturity yield (DGS10).
Important information about hypothetical performance
About these results. Every return in this report is hypothetical. The results come from backtests: simulations of how rules would have traded on historical data.
The limits of simulated results:
- They are prepared with the benefit of hindsight.
- They depend on assumptions about fills and trading costs that real markets may not honour.
- They can be affected by errors in historical data, however carefully checked.
- Results from one period, or from rules chosen after studying similar data, may not repeat.
Several of the periods reported here had been examined repeatedly during the research, and we label them as exploratory.
What this report is not. It describes research findings. It is not investment advice, an offer, or a recommendation to buy or sell any security. Companies named in it are mentioned only to describe simulated holdings or data issues.
This note describes what the data showed over the period stated. It isn't a recommendation or a trade idea. We trade on our own research, but we don't publish what we trade.