Home/Learn/Backtests/Piotroski F-Score

SledgeKey Backtests

We ran a Piotroski-style financial-strength screen honestly. It lost to the index.

Published July 31, 2026 · Window: January 2017 – July 2026 · Universe: NYSE + NASDAQ operating companies, point-in-time

Joseph Piotroski's 2000 paper asked a narrow question about cheap stocks. If you sort the market by price to book and buy the cheapest slice, you end up holding a lot of companies that are cheap for good reason, so he proposed a nine-point scorecard covering profitability, leverage, liquidity, and operating efficiency, and showed that the high-scoring end of the cheap bucket did far better than the low-scoring end. The scorecard has been part of the value investor's toolkit ever since, and it is one of the most requested things people want to test.

We tested a version of that idea over the last nine and a half years. The screen buys companies trading at or below 1.5 times book value that also clear four financial-strength tests at the same time: positive return on assets, positive operating cash flow, debt at or below half of equity, and a current ratio of at least 1.5. It holds the twenty largest qualifying companies in equal weight and rebalances once a year. What makes this run different from most published Piotroski backtests is the universe. Every company listed on each rebalance date was eligible, including the ones that were later acquired, sanctioned off the exchange, or delisted for any other reason, and any holding that left the market was booked out at its last traded price instead of being erased from the record.

Over this window the screen turned $100,000 into $362,249, a return of 14.39% a year. An S&P 500 index fund did slightly better over the same stretch, at 15.0% a year, and it got there with a much shallower worst-case drawdown.

Piotroski-style (honest)
14.39%/yr
$362,249 from $100,000
S&P 500 (SPY)
15.0%/yr
$381,033 over the same window
Total return
+262%
across nine and a half years
Max drawdown
-36.5%
peak to trough

Growth of $100,000 · 2017–2026

The Piotroski-style screen against the S&P 500, both starting from $100,000 in January 2017, with delisted companies kept in the strategy the whole way through.

Growth of $100,000, 2017 to 2026: a Piotroski-style financial-strength screen versus the S&P 500 Line chart. The Piotroski-style screen, run honestly with delisted companies kept in, ends at $362,249 (14.39% per year). The S&P 500 ends at $381,033 (15.0% per year). The index leads for most of the window, the screen closes much of the gap during 2024 and 2025, and the index finishes ahead. $100K $150K $200K $250K $300K $350K $400K 2017 2019 2021 2023 2025 S&P 500 $381.0K Piotroski-style $362.2K
View the data as a table (calendar year-end values)
YearPiotroski-style screenS&P 500
2017$118,547$119,085
2018$107,756$126,396
2019$122,041$146,987
2020$138,167$174,481
2021$173,049$217,771
2022$169,183$199,907
2023$204,170$228,834
2024$289,893$304,392
2025$332,296$347,832
2026$362,249$381,033

The exact screen

The full configuration is below exactly as it ran, so anyone who wants to reproduce the result or argue with it can start from the same table we did.

Value filterPrice to book of 1.5 or lower
ProfitabilityReturn on assets of 0% or higher (trailing twelve months)
Cash generationOperating cash flow of zero or higher (trailing twelve months)
LeverageDebt to equity of 0.5 or lower
LiquidityCurrent ratio of 1.5 or higher
Market cap$1 billion and up
SelectionThe 20 qualifying companies with the largest market cap at each rebalance
WeightingEqual weight, 10% maximum position size
RebalanceOnce a year (10 rebalances over the window)
Transaction cost0.10% per trade ($1,798 in modeled costs over the run)
Initial capital$100,000
BenchmarkSPY, the S&P 500, over the same window
UniverseNYSE + NASDAQ operating companies (no SPACs, REITs, ETFs, or funds). Point-in-time: eligibility at each rebalance reflects the companies listed on that date.
Delisting treatmentAny holding that later delisted was booked out at its frozen last traded price, never dropped from the history.

One thing deserves to be said plainly, because it is the most common mistake in backtests that carry Piotroski's name. This is a financial-strength screen built in his spirit, and it is not the nine-point F-Score itself. Only two of his nine points are plain levels, positive net income and positive operating cash flow, and a third compares operating cash flow against net income within the same year. The other six ask whether a company improved on its own prior year: return on assets, leverage, the current ratio, gross margin, asset turnover, and share count. A screen filters on levels, so the run above uses his value anchor plus level-based stand-ins for his profitability, leverage, and liquidity tests, then stops there. Read the result as evidence about that screen rather than a verdict on the published F-Score.

The result against the index

Metric Piotroski-style screen S&P 500
Total return262.25%281.03%
Annual return (CAGR)14.39%15.00%
Final value$362,249$381,033
Sharpe ratio0.660.79
Volatility (ann.)19.49%16.26%
Max drawdown-36.53%-23.93%
Calmar ratio0.39n/a
Winning months78 of 115n/a
Total trades254n/a
Avg holding period713 daysn/a
Annual turnover100.1%n/a

The screen won 78 of its 115 months against the index's 75, and it still finished behind. That combination is what a high-volatility strategy looks like from the inside: frequent small wins interrupted by drops deep enough to undo them, which is also why the Sharpe ratio comes in at 0.66 against the index's 0.79.

A note on survivorship. Run this same screen the way most free backtesters quietly do, against only the companies still listed today, and it returns 16.39% a year and finishes ahead of the index by well over a point. Kept honest, with the companies that later delisted still eligible and still held to their last price, it makes 14.39% and finishes behind. Those two runs disagree about whether the strategy beats the market at all, and the entire disagreement is worth $65,092 on a $100,000 stake. We pulled that mechanism apart in detail on the midcap value backtest.

Something else is visible once you have run two strategies through the same harness. The Magic Formula screen we published earlier shows a survivorship gap of about 1.2 points a year. This screen, which shops further down into low price-to-book territory, shows 2.0 points. That direction makes sense, because the cheaper the corner of the market a screen buys in, the higher the rate at which its holdings get acquired, taken private, or delisted, and the more a database that quietly forgets those companies flatters the result. A survivor-only backtest is least trustworthy on exactly the strategies value investors most want to test.

The companies it held that later left the market

Nine of the names this screen held went on to leave the exchange, positions a survivor-only backtest never gets to take. Most of them were bought out, which is the ordinary fate of a cheap company with a clean balance sheet, and a few were foreign issuers whose US listings ended for policy or corporate reasons. The honest run had to live through every one of those exits, because the companies were in the book on the day they delisted.

MJNMead Johnson, acquired by Reckitt Benckiser · 2017-06
CEOCNOOC ADR, US listing ended under sanctions · 2021-03
YAlleghany, acquired by Berkshire Hathaway · 2022-10
CAJCanon ADR, US listing ended · 2023-03
QIWIRussian payments group, US listing ended · 2024-07

The four remaining exits are foreign issuers and recent delistings whose exact circumstances we are still confirming, so we have left them unnamed here rather than publish a reason we cannot yet stand behind. They are in the run and they are in the numbers above either way, which is the part that affects the result.

What this backtest does not prove

A page like this earns its credibility in this section, so here is what the numbers above do not establish.

The strategy lost to the index, and it was a rougher ride. Just over 14% a year for nine and a half years is a good absolute result, and it still fell short of simply owning the S&P 500, which returned more with a drawdown nearly thirteen points shallower and lower volatility throughout. Anyone reading this page as a market-beating system should keep looking. What the run shows is that financial strength expressed as a set of thresholds, applied to cheap large companies, did not clear the index over this particular decade.

This is a levels proxy, and the F-Score is mostly a change-based score. As described above, six of the nine original points ask whether a company improved on last year, which no screen filter can express. A faithful F-Score implementation would hold a different set of companies and could land anywhere relative to this result, so treat the two as cousins.

One window, one configuration. This is a single nine-and-a-half-year run across an era that punished value and rewarded megacap growth, the exact stretch where the S&P was hardest to beat. Different dates, market-cap bands, or thresholds will produce different results, and the size of the survivorship gap shifts with them too.

The largest-cap tiebreak is a real choice. When more than twenty companies clear all five filters, this run takes the twenty largest. That keeps the portfolio liquid and tradable, and it also tilts away from the small, deeply cheap names where Piotroski found his strongest results. A version that ranked by cheapness instead would be a different strategy with a different answer.

Frozen-price booking is conservative but imperfect. When a company delists, the run books the position out at its last traded price. For an acquisition that lands near the deal price, and for a forced delisting under sanctions the real proceeds to a retail holder can be much worse than the frozen mark. The modeled 0.10% per trade covers commissions and typical slippage at large-cap liquidity, and real execution in a stressed market runs worse than any flat assumption.

You can run this exact screen, or your own version of it, on the same survivorship-free point-in-time data and see how it holds up with the delisted names left in.

Run your own backtest · free, no card required