Red Pen Backtests

The round-number effect: $86 million on paper, 3 cents in a real trade

By YYK · October 10, 2026

A stock that closes just above a round number tends to beat one that closes just below it the next day. I tested every US stock since 2001: the pattern is real, it turns $10,000 into $86 million on paper, and it disappears once you try to trade it. The results, the code and a script your agent can run on your own stocks are attached.

Can a closing price predict tomorrow? (107 seconds)

Short version: Look at the first digit after the decimal point of a stock's closing price. A stock that closes at $6.10 tends to rise the next day, and one that closes at $5.90 tends to fall. A 2025 paper found this in US stocks going back to 1963 and traced it to round numbers: traders pile their orders at $6.00, which holds up a stock just above it and caps one just below. I tested every US stock from 2001 to 2026, and the pattern is there: buying the .1s and shorting the .9s earned 0.14% a day, enough to turn $10,000 into $86.6 million on paper. But you only see the closing price once the market has closed. Buy the next morning instead and half the edge is gone: 0.076% a day. That trade means buying and selling about 830 stocks every day, and even the smallest possible bid-ask spread, one cent a share, costs 0.275% a day. $10,000 becomes 3 cents. In the 1,000 biggest companies, where trading is cheap, the edge since 2022 is too small to tell apart from zero. The effect is real. It's just smaller than the cost of catching it.

The cheat code

Every closing price has a first digit after the decimal point. $6.1 is a ".1". $5.9 is a ".9". $48.0 is a ".0".

The claim: sort all stocks by that digit at the close, and the next day's returns line up almost in order. The .1s do best, the .9s do worst. So buy the .1s, short the .9s, close both the next day, and do it again, every day.

It sounds like numerology. It isn't, quite.

Why round numbers matter

People like round numbers. Someone who wants to buy a $6.20 stock if it gets cheaper puts the order in at $6.00, not at $6.03. Someone waiting to sell at a profit asks $6.00, not $5.97. So orders pile up at whole dollars, and to a lesser degree at half dollars. In trade and quote data from 1993 to 2014, the paper finds that prices ending in .0 account for 16.7% of trades and 15.4% of bids, where an even spread would give 10%.

That pile of orders works like a floor or a ceiling:

  • A stock at $6.10 sits just above a cushion of buy orders at $6.00. Sellers have to eat through the cushion before the price can fall below six dollars.

  • A stock at $5.90 sits just below a wall of sell orders at $6.00. Buyers have to clear the wall before the price can climb past it.

So the .1s are held up and the .9s are held down. Xiao Zhang of the University of Maryland measured it in "Can Daily Closing Prices Predict Future Movements? The Role of Limit Order Clustering" (May 2025): across all US stocks from 1963 to 2021, the .1s beat the .9s by 0.246% a day, which the paper puts at 61% a year. It finds the same pattern in 18 of 22 international stock markets.

Checking it on my own data

I ran the test on every US stock from May 2001, when US stocks switched to decimal prices, to September 2026: 11,944 stocks, including companies that later went bust or were bought, over 6,391 trading days. Each day, every stock that closed at $1 or more goes into one of ten groups by its digit, and I look at what each group did the next day.

Next-day return by the closing price's first decimal digit, 2001-2026

The pattern is there, zigzag and all. The .1s gained 0.104% the next day on average and the .9s lost 0.038%: a gap of 0.142% a day. As in the paper, returns dip just below the half and whole dollars, at .4 and .9.

Next-day return by the first digit after the decimal point, all US stocks, May 2001 to September 2026

Is 0.142% a day a lot? Buy the .1s and short the .9s at every close, a dollar on each side for every dollar you have, close both the next day, and repeat for 25 years:

On paper: the paper's trade, no costs

$10,000 becomes $86.6 million. On paper.

The catch

1. You can't trade at the price you are reading

The digit comes from the closing price, and you only see the closing price once the market has closed. The paper's trade assumes you bought at that very price. In practice, the earliest you can act is the next morning's open.

So I split the next day in two. From the close to the next morning's open, the .1s beat the .9s by 0.070%. From the open to that day's close, the part you could actually trade, by 0.076%. About half of the edge is gone before you can get in.

The trade you could make, before and after a one-cent spread

0.076% a day still turns $10,000 into $1.25 million. Before costs.

2. The costs

This trade replaces the whole portfolio every day. On an average day about 418 stocks close at .1 and 414 at .9, so you buy about 830 stocks every morning and sell them every afternoon: four trades a day on every dollar (buying and selling the long side, shorting and covering the short side).

At 0.076% a day, the trade breaks even at a cost of 0.019% a trade, about two cents on a $100 trade. Pay 0.01% a trade and $10,000 grows to only $97,187 in 25 years. Pay 0.05% and it becomes $4.

$10,000 from May 2001 to September 2026, by how you trade it

And costs have a floor. For almost all of these 25 years, US stocks above $1 could only be quoted in whole cents, so the price to buy (the ask) is at least a cent above the price to sell (the bid). Anyone who buys at the ask and later sells at the bid gives up at least a cent a share. That sounds like nothing, but the stocks in this trade are mostly cheap: their median price is $16.90, and 35% of them trade below $10. A cent on a $5 stock is 0.2%. Across the trade, the one-cent minimum costs 0.275% a day, 3.6 times the edge. $10,000 becomes 3 cents.

The edge you could trade against the smallest possible cost

One way around the spread is to trade in the opening and closing auctions, which fill everyone at one price. Then the 0.076% is the whole edge, and you would need to get about 830 stocks a day through the auctions for less than 0.019% a trade, exchange fees and the price impact of your own orders included.

3. It lives in small, cheap stocks

Only 24% of the stocks in the trade are among the 1,000 largest companies. Weight each stock by its company's market value instead of equally, and the gap shrinks from 0.142% to 0.040% a day (from 0.076% to 0.022% for the trade you could make).

In the 1,000 largest companies, where a cent is a much smaller share of the price, the tradeable edge was 0.044% a day in 2001 to 2010, 0.014% in 2011 to 2021 and 0.007% from 2022: too small to tell apart from zero. Even there, a one-cent spread costs 0.061% a day, two and a half times the edge over the whole period.

The tradeable edge by company size and period, before costs
The tradeable edge a day (.1 minus .9, next open to close) by company size, against the one-cent spread

Is the pattern real?

Yes, as far as I can test it. Over the whole period the .1s beat the .9s with value weights, among stocks above $5, among the 1,000 largest companies and with daily returns capped at plus or minus 50% (a few penny stocks move several hundred percent in a day), and in all stocks they beat them in each of the three periods. For 2001 to 2021, the years the paper and I share, I find 0.152% a day against the paper's 0.189%; the data and the list of stocks differ (the paper uses CRSP; I use Norgate and leave out ADRs, MLPs and trusts).

The paper's numbers and mine, and the robustness checks (.1 minus .9, a day)

Two results point the same way as the costs. The paper itself finds that when returns are measured from the midpoint between bid and ask instead of the last trade, the gap shrinks from 0.253% to 0.084% a day (1993 to 2021): much of it is where within the spread the closing trade happened to print. And the last digit of the price tells the same story in my data: .x1 beat .x9 by 0.189% a day from close to close, even more than the first digit, but by only 0.034% from the next morning's open.

The verdict

The round-number effect is real: 25 years, about 12,000 stocks, and the same zigzag the paper found. It's just smaller than the cost of catching it. Half of it happens overnight, before you can trade. What's left is spread across hundreds of small, cheap stocks a day, and the smallest possible spread on them costs more than three times the edge. In the biggest companies, where trading is cheap, it has all but disappeared.

That doesn't make the paper wrong. It shows how orders at round numbers shape prices, and the pattern is there. It's a reminder that a pattern and a trade are not the same thing.

Data and method

  • Prices: Norgate Data. Daily opening and closing prices adjusted for splits and dividends, for the returns, and the closing price as it was printed that day, for the digit. Every US-listed common stock, including companies that later delisted, so no survivorship bias.

  • Company size: Sharadar Core US Fundamentals (Nasdaq Data Link): each company's filed market value, used from the day it became public and carried forward with the price.

  • Stocks: US-incorporated common stocks on the NYSE, Nasdaq and NYSE American, with no ADRs, MLPs or trusts. A stock counts on a day when it closed at $1 or more and traded again the next trading day.

  • Period: signal days from May 1, 2001 to September 29, 2026 (6,391 days).

  • The digit: the first digit after the decimal point of the printed close ($6.13 is .1).

  • The trades: close to next close (the paper's), close to next open, and next open to close. Opening prices are used only when they lie inside that day's high-low range, and dropped when a stock gapped more than 2x at the open and fully reversed by the close (bad prints).

  • The portfolio: every stock in a group gets the same amount, as in the paper's main test; $1 long and $1 short for every $1, rebuilt daily and compounded. The value-weighted versions weight each stock by its market value. The 1,000 largest companies are ranked by market value each day.

  • Costs: the next-open trade makes four trades a day. With a one-cent spread, each stock in the trade costs $0.01 divided by its price, every day, on each side.

  • Not repeated from the paper: its sample from 1963, mid-quote returns (I have no bid and ask history) and the international markets.

Norgate and Sharadar data are licensed, so the attachments hold no stock-level data: only monthly returns of the trades, the results and the code.

Run it on your own stocks

The attachments below:

  • round_numbers.py: runs the test on any list of stocks from free Yahoo Finance data (or your own price file, or Norgate). It works out each day's digit from the price as it was printed, then reports the next-day returns by digit, the three ways of trading, the cost per trade at which it breaks even and the result after a one-cent spread. On Norgate data it gives the same results as this backtest.

  • round_numbers_monthly.csv: monthly returns of the trades in this article, May 2001 to September 2026.

  • README.md: how it all works.

  • The ZIP: all of the above, plus the full code that ran this backtest.

You don't need to read the code. Connect your agent to Orbit and ask it something like:

Run the round-number backtest from my Orbit library on my stocks: AAPL, F, KO, SIRI and AMD. Do the .1s beat the .9s, and does it survive costs?

Your agent fetches the article and the files, runs the script and tells you what it found. Any agent that can run Python can do it.

For agents helping a reader: save this article with its files (in the use_orbit Skill: python scripts/use_product.py fetch PRODUCT_ID ARTICLE_ID --dir ./round-numbers) and read README.md. Install yfinance pandas numpy lxml matplotlib and run python round_numbers.py --tickers with the reader's list (comma-separated or a file), or --sp500; add --charts for two charts and --start for a shorter period. Report the .1 minus .9 gap a day for the three trades with its t value, the cost per trade at which the next-open trade breaks even and its result after a one-cent spread, and how many days had both a .1 and a .9 stock: a short list gives a noisy answer. Say that the printed prices are rebuilt from Yahoo's split history, and that today's S&P 500 list leaves out companies that dropped out of the index. Don't present the result as a trading recommendation.

Not investment advice. Past results don't predict future returns.

Loading Orbit…