Key takeaways · 5
- A distribution day is a session where a major US index (S&P 500, Nasdaq Composite, or Dow) closes 0.2% or more below the prior session on volume above the prior session. The trailing 25-session count is the read.
- Distribution days age out two ways: after 25 trading sessions, or earlier if the index later closes 5% or more above the DD's own closing price within the window.
- The reading scale most practitioners use: 0 to 3 is normal, 4 to 5 is 'trim and stop adding', 6 or more is the IBD 'market in correction' call.
- The rule has a real failure mode. Independent backtests by Tom Bulkowski and by Quantifiable Edges found that DD clusters had no forward edge as a sell signal in uptrends. Treat the count as a breadth input, not a standalone trigger.
- tickerstance encodes both aging rules and carries the count as `breadth.distribution_days` at 15% weight inside the Breadth subscore.
Why tops are hard, and what DDs are for
Bottoms are loud. They feel like the world is ending. Tops are quiet. The hardest day of a swing trader's year isn't the crash session, it's the calm one a week later, where the chart still looks fine, leadership still looks fine, and there is no concrete reason to reduce risk. By the time the price action makes the regime change obvious — a clean break of the 50-day, a failed breakout, a hot sector going cold — most of the damage is already in.
The Distribution Day rule is William O'Neil's attempt to read the change while it is happening, not after. The premise is that institutions can't unload positions invisibly. When mutual funds, pensions, and large pools rotate out of equities, the footprint shows up as days where the index closes lower than the previous session on volume that was heavier than the previous session. Any one such day is noise. A cluster across two or three weeks is the signal.
What the rule is looking for. A close at least 0.2% below the prior session, on volume above the prior session, anywhere inside a trailing 25-session window.
The three rules
A session qualifies as a Distribution Day if all three conditions are true.
Magnitude. The closing price is at least 0.2% below the prior session's close. Rounding is not allowed. A -0.18% session does not count.
Volume. Total volume on the day is higher than the prior session's volume. A 1% down session on volume below the prior day is not a DD. It is a low-conviction sell-off. The volume increase is the institutional-commitment test; without it, the rule collapses into 'every red day'.
Index. The session is on the S&P 500, the Nasdaq Composite, or the Dow Jones Industrial Average. A DD on any one of those adds to that index's own count. The Nasdaq frequently leads because growth leadership tends to crack first.
There is no such thing as a 'stronger' DD. The count is one-per-session. A -3% session on a 50% volume jump and a -0.21% session on a 1% volume jump both add 1 to the count.
Two ways a distribution day leaves the count
A 25-session window with no aging would compound forever and stop meaning anything. The rule has two cancellation mechanisms.
The time clock. Every DD ages out after 25 trading sessions. Roughly a calendar month. If today is session 26 after a DD, that DD is no longer in the count.
The rally cancel. Any DD is cancelled before its 25-session expiry if the index later closes 5% or more above the DD's own closing price within the window. The reasoning is that a 5% rally on top of an old DD has clearly absorbed whatever selling pressure that day represented. Without the rally cancel, the count would stay elevated through obvious regime reversals like the March-April 2020 rebound, which would discredit the framework with false alarms.
tickerstance encodes both. The signal's meta payload exposes a `cancelledByRally` count alongside the net count, which is useful when a strong rally is 'cleaning' the count even though selling underneath has continued.
The 25-session clock and the 5% rally cancel. Either one removes a DD from the running count.
Reading the count
Zero to three. Healthy uptrend. Even strong rallies print one or two DDs. The count itself is not the story; the absence of a cluster is what matters.
Four to five. 'Uptrend Under Pressure' on IBD's Market Pulse. Trim, tighten stops, and stop adding new exposure. Not yet a regime call, but the cluster is real enough to take seriously.
Six and above. The IBD 'Market in Correction' call. Enough institutional offer flow that the framework treats the uptrend as broken and shifts to defensive.
These are bands, not bright-line thresholds. A 5-count against a still-rising 50-day moving average is far less informative than a 5-count against a 50-day that has already rolled over. Read the count against the trend it is overlaying, not in isolation.
The ladder IBD uses on its Market Pulse: 0-3 normal, 4-5 under pressure, 6+ correction.
When the rule works: January 4, 2008
By the end of 2007 the S&P 500 had been topping for months, with the October 9 closing high at 1,565.15 already in the rearview. Volume on down days had been ticking up through November and December. Then on January 4, 2008, the S&P 500 fell 2.46% on volume above the prior session, registering the sixth distribution day inside its 25-session window. IBD flipped its Market Pulse reading from 'Confirmed Uptrend' to 'Market in Correction' the same day.
What followed was nine months of grinding decline. Bear Stearns nearly failed in March, was force-married to JPMorgan, and produced the false Follow-Through Day the FTD article covers. Lehman failed in September. The S&P 500 bottomed at 666.79 in March 2009, down 57% from the 2007 high. The Distribution Day count had given practitioners months of warning to move defensive before the worst of it. This is what the rule looks like when it works.
When the rule is late: January 2022
The S&P 500 closed at its all-time high of 4,796.56 on January 3, 2022. By the time IBD downgraded the index to 'Market in Correction' on February 23, 2022, the S&P had logged only 2 distribution days and the Nasdaq 3 since the prior Follow-Through Day. The count never reached the textbook 6. Other tells got there first: the November 2021 trendline broke cleanly on January 5, and the Nasdaq closed below its 50-day moving average on heavy volume the same week.
The 2022 bear market took 282 days to bottom and cost the S&P 500 25%. The DD count was a useful confirmation of the move once it was underway, not a leading indicator of the top. A reader using the count alone would have been late by weeks. The lesson worth keeping is that the count is most informative when read against the trend structure, not used as a standalone trigger.
The honest critique
The Distribution Day rule has been quantitatively tested several times by people who like the IBD framework and by people who do not. Both groups land in roughly the same place.
Tom Bulkowski, in his 2010 work on the technique, tested 568 stocks across 2005-2010 and reported that a cluster of DDs within 21 calendar days had zero forward predictive value when price was already in an uptrend. The rule only 'worked' in his data when price was already declining, which is to say it confirmed what price had already shown. He also found that volume was statistically irrelevant in his test: light-volume DDs and heavy-volume DDs produced the same forward returns.
Rob Hanna at Quantifiable Edges ran an independent test on the S&P 500 over multiple decades. His finding: a literal 'sell on a DD cluster' rule had a negative equity curve. He inverted the rule and found that buying after a DD cluster had a small positive edge in uptrending markets, which is the opposite of how the rule is usually deployed.
Crystal Bull's 2013 review of IBD's Market Pulse across the 2007-2009 bear market documented 13 'Confirmed Uptrend' calls during that decline. Almost all of them failed and were reversed.
None of this is a hatchet job. The Distribution Day pattern is a real footprint of real institutional behavior. The data simply does not support the literal 'six DDs = bearish' use of it as a standalone tool. The most defensible use is as one breadth input among several inside a composite read.
Five mistakes that ruin the count
Rounding -0.18% up to a distribution day. The 0.2% cutoff does not round. Loosening it makes the count noisier without making it more informative.
Skipping the volume check. A red day on volume below the prior session is not a DD. The volume increase is the institutional-commitment test, and dropping it produces most of the false positives newer practitioners report.
Carrying stale DDs through obvious rebounds. A 5% rally above a prior DD's close cancels that DD. Without the rally cancel, the count stays elevated through clear reversals and the framework loses its own honesty.
Treating six as a trade trigger. Six is the IBD regime call, not a buy/sell signal on individual names. The shape of the cluster also matters: six DDs spread evenly across the window is a slow drip; six piled into a single ten-day stretch is an acceleration. The two read differently.
Trading the count instead of sizing on it. Base rates do not support 'sell at six' as a standalone trigger. They do support cutting position size and stopping new buys when the count clusters.
How tickerstance encodes it
tickerstance carries the count as `breadth.distribution_days` inside the Breadth subscore. The value is the net count after both aging rules apply. The signal's `meta` payload exposes the underlying count along with `cancelledByRally`, the number of candidate sessions removed mid-window by the 5% rally rule.
Weight: 15% inside Breadth. Pairs with `follow_through_day` at 15% as the entry-and-exit grammar of the breadth side of the score. Breadth itself is 30% of the headline Stance, so a count moving from 2 to 6 measurably pulls the daily read.
Where you see it. The Breadth detail card on the dashboard shows the current count. The methodology page shows the full composition.
Frequently asked questions
What is a distribution day?
A distribution day is a session where a major US index (S&P 500, Nasdaq Composite, or Dow Jones Industrial Average) closes 0.2% or more below the prior session on volume above the prior session. William O'Neil designed the rule to flag heavy-volume institutional selling inside a confirmed uptrend.
What percentage drop qualifies as a distribution day?
0.2% or more, with no rounding. A -0.19% session is not a DD. The cutoff has drifted over time: O'Neil's earliest version used 0.1% in the 1980s, and the 0.2% threshold has been IBD's stable definition for most of the last 25 years.
Why does volume matter for a distribution day?
Institutions cannot unload large positions invisibly. When mutual funds, pensions, and other large pools sell, the footprint shows up as volume above the prior session. A red day on light volume is a low-conviction sell-off, not the institutional rotation the rule is trying to detect.
How are distribution days cancelled or removed from the count?
Two ways. Time clock: each DD ages out after 25 trading sessions. Rally cancel: a DD is removed mid-window if the index later closes 5% or more above that DD's closing price. The rally cancel is what keeps the count from staying elevated through obvious regime reversals.
How many distribution days indicate a market correction?
Six or more is the IBD threshold for shifting Market Pulse to 'Market in Correction'. Four to five is the 'Under Pressure' band. Zero to three is normal in an uptrend. The bands are calibrated by IBD's decades of subscriber-facing publishing, not by a formal backtest.
Do distribution days reliably predict market tops?
Not on their own. Tom Bulkowski's 2010 test on 568 stocks found zero forward edge from DD clusters in uptrends. Rob Hanna at Quantifiable Edges reached the same conclusion on the S&P 500. The count is best read as one breadth input among several, not as a standalone sell trigger.
Which indexes count for distribution days?
The S&P 500, the Nasdaq Composite, and the Dow Jones Industrial Average. Each index carries its own count. The Nasdaq often leads because growth leadership tends to crack first and the Nasdaq is more concentrated in higher-beta names.
Where does tickerstance show the distribution day count?
On the Breadth detail card of the dashboard. The signal id is `breadth.distribution_days`. It carries 15% weight inside Breadth, which is 30% of the headline Stance score. The methodology page documents the full composition.