Zweig Breadth Thrust indicator: the 10-day rule and its rare signals
The Zweig Breadth Thrust fires when the 10-day exponential average of the share of advancing stocks rises from below 0.40 to above 0.615 within ten trading days. Signals are rare, so the record is a few dozen events, too few to measure an edge; test it as a filter on a higher-frequency rule, not as a strategy on its own.
By Soren Huang · Published · updated · Editorial policy
Contents
- What is the Zweig Breadth Thrust indicator?
- How do you calculate the Zweig Breadth Thrust?
- How rare are breadth thrust signals, and why does rarity matter?
- How reliable is the signal? What a few dozen cases can and cannot show
- What does a momentum stand-in test on ES show?
- How should you test a breadth thrust rule yourself?
- Frequently asked questions
- References
What is the Zweig Breadth Thrust indicator?
The Zweig Breadth Thrust indicator is a market-breadth signal. It fires when the 10-day exponential average of the share of advancing stocks climbs from below 0.40 to above 0.615 within ten trading days. Signals are rare, because the market must swing from broad selling to broad buying very fast.
Market breadth is a count of how many stocks took part in a move, as opposed to how far an index moved. An index can rise on a few large companies while most stocks fall; breadth shows that gap. The Zweig Breadth Thrust, named after its originator, reads one breadth number: the share of listed stocks that closed higher. When that share, smoothed over ten days, goes from fewer than four in ten stocks rising to more than six in ten, the whole market has turned in less than two weeks. The idea is that such a wide and sudden turn has usually come near the start of a longer advance.
Two features set this indicator apart from the tools in technical analysis tools and indicators you can test. It uses advance and decline counts, not prices, so you need breadth data, not only bars. And it is an event, not a daily reading: most of the time it says nothing at all. The rest of this article follows one claim through: an indicator that fires a handful of times per decade cannot be graded as a strategy from its own record, so its place is as a filter on a rule that trades more often. The wider family is covered in market breadth indicators and how to test them.
How do you calculate the Zweig Breadth Thrust?
The calculation is three steps in a fixed order: a daily ratio, a 10-day smoothing, and a day count between two thresholds. You need, for each trading day, the number of advancing issues and declining issues on the exchange you follow.
- Daily ratio. Divide advancing issues by the sum of advancing and declining issues. Unchanged issues are left out. The result sits between 0 and 1.
- Smooth with a 10-day exponential moving average. An exponential moving average (EMA) is an average that gives the most recent days more weight than older days, so it reacts faster than a simple average of the last ten values. The smoothed line is what the thresholds are applied to.
- Count the days between thresholds. Find the last close of the smoothed line below 0.40. Then find the first close above 0.615 after it. Count the trading days from the first point to the second. Ten or fewer is a signal; more than ten is not.
Hypothetical example
Suppose 1,200 issues advance and 1,800 decline on a weak day. The ratio is 1,200 ÷ 3,000 = 0.40. A week later a strong day has 2,400 advancers and 600 decliners: 2,400 ÷ 3,000 = 0.80. The smoothed line will not jump straight to 0.80, because the EMA still carries weight from the weak days. For the line to cross 0.615 within ten days of its last close below 0.40, most of those ten days must look like the strong day. That is why the rule is so demanding.
Two details change the count of signals you get. The first is the issue list: an exchange's full list includes funds and preferred shares, and some analysts count only common stocks, which gives a different ratio on the same day. The second is the starting value of the EMA, which matters for the first weeks of a series. Write down both choices before you count signals, so a later change does not quietly alter the record.
How rare are breadth thrust signals, and why does rarity matter?
A rule that fires a handful of times per decade produces a record so small that one or two outcomes decide it, while daily indicators on the same history produce hundreds of testable trades. The thrust needs a near-complete swing in breadth inside two weeks. Markets do that only after a sharp sell-off that reverses hard, and such reversals are uncommon. Years can pass without a single signal.
Rarity is not a flaw in the idea, but it limits what you can learn from it. Compare it with indicators that give a value every day. A KD (Stochastic) indicator crossover rule or a MACD signal line rule on daily bars generates trades every few weeks; an RSI rule that enters below 30 and exits above 50 does the same. Over ten years those rules give hundreds of completed trades. The breadth thrust gives a few. Both records come from the same ten years of history, but one is evidence and the other is a short list of anecdotes.
| Property | Zweig Breadth Thrust | Daily indicator rule (KD, MACD, RSI) |
|---|---|---|
| Data needed | Advance and decline counts | Price bars only |
| Signals over a decade | A handful | Hundreds |
| What decides the record | One or two outcomes | The average over many trades |
| How to grade it | Against random dates, as a filter | Out-of-sample trades, walk-forward |
| Role in a system | Condition that allows or blocks trades | Entry and exit on its own |
This is the same lesson that runs through what testing shows about intraday indicators: the indicator with the best story is not the one with the most evidence. A rule you can test a thousand times tells you more about itself than a rule you can test a dozen times, even when the dozen all went well.
How reliable is the signal? What a few dozen cases can and cannot show
With a few dozen signals the uncertainty of the average outcome stays wide, so a high hit rate after a breadth thrust is a hint about market behaviour, not a measured edge you can size a position on. Published studies of the thrust report that the index was higher some months later in most cases. That may well be true. The question is how far you can trust an average built from so few cases.
Think of weighing a coin by flipping it. Ten flips with seven heads tell you almost nothing; four hundred flips with 280 heads tell you the coin is bent. The average outcome after a signal behaves the same way. One formula is worth keeping:
uncertainty of the average outcome = spread of single outcomes ÷ √N
Here the spread of single outcomes is how far individual results typically sit from their average (the standard deviation), N is the number of signals, and √N is its square root. Because the square root grows slowly, you need four times as many signals to halve the uncertainty.
Hypothetical example
Suppose the index return over the 60 trading days after a signal averages +4 percent, and single outcomes typically sit 8 percentage points from that average. With 10 signals the uncertainty is about 8 ÷ 3.2 ≈ 2.5 points, so the true average could be anywhere from about +1.5 to +6.5 percent, and a worse outcome is not ruled out. With 30 signals it is about 8 ÷ 5.5 ≈ 1.5 points. With 400 signals it is 8 ÷ 20 = 0.4 points. Only the last figure is tight enough to call a measured edge, and no breadth-thrust record is that long.
There is a second problem on top of the small sample. The thresholds 0.40 and 0.615 and the ten-day window were chosen by looking at past data. Any pair of thresholds that produced a good-looking record could have been kept, so part of the record is the choice, not the market. Bailey, Borwein, López de Prado and Zhu (2014) show that the more variants were compared, the longer the history needed before the best one can be separated from luck; Harvey and Liu (2015) propose discounting a result for the number of tests behind it. A rare-event rule has neither the history nor the event count to pay that discount.
What does a momentum stand-in test on ES show?
Because breadth data and futures bars are different things, the run behind this article tested a plain Momentum rule on ES daily bars as a stand-in for the thrust idea, and the result is one kept candidate out of 1,024 tried, picked after the fact for its return against its drawdown, which flatters it. The stand-in keeps the spirit of the thrust, a fast change in direction, but uses price alone, so it fires often enough to count.
The search ran in AlphaPrime (Valynox) on E-mini S&P 500 daily bars from 2019-01-02 to 2025-06-30, long and short, one contract, with a Momentum rule as the only entry and exit, no stop, no target and no filters. Every one of the 1,024 candidates was charged $20 commission and $25 slippage per trade. The box below is the kept candidate as the report lists it.
Source: AlphaPrime product engine (CPU), run 2026-10-31. ES daily bars, 2019-01-02 to 2025-06-30, long and short, 1 contract, $20 commission and $25 slippage per trade.
| Number | Result |
|---|---|
| Net profit (closed trades) | $91,147.5 |
| Max drawdown | $45,397.5 |
| Trades | 242 |
| Win rate | 54.13% |
| Profit factor | 1.286 |
| Average trade | $376.64 |
| Time in market | 74.52% |


Read these numbers for what they are. The 242 trades give the stand-in a record roughly ten times longer than a breadth-thrust record over the same years, which is the point of using a stand-in. The win rate of 54.13% and profit factor of 1.286 describe one candidate chosen because it looked best among 1,024 by one measure; the other candidates mostly looked worse, and the best of many always carries a selection bonus. The max drawdown of $45,397.5 is about half the net profit of $91,147.5, which is a large share of the gain to sit through. None of this says that momentum earned that money or that a reader can expect it. It says that a price-based rule in the same family can be tested with enough trades to be judged, where the breadth thrust itself cannot. The rest of the candidates stay sorted alongside the kept one in the strategy databank, so the spread of results the search produced can be read, not only its top.
How should you test a breadth thrust rule yourself?
Write the thresholds and holding period down before you look at outcomes, count the signals, compare the result against random dates, and treat any rule with fewer than about 30 events as a filter to combine with a higher-frequency rule rather than a strategy on its own. The order matters more than any single step, because a rare-event test is easy to bend without noticing.
- Write the rule first. Thresholds (0.40 and 0.615, or your own), EMA length, issue list, and the horizons you will measure (for example 20, 60 and 120 trading days). Changing any of these after seeing the outcomes turns the test into a search.
- Run on breadth data and count signals. Note the count before reading a single outcome. If it is under about 30, you already know the result will be a hint, not a measurement.
- Measure the outcome after each signal at the fixed horizons. Use the index or futures series you would actually trade, and include the cost of the trade.
- Compare with the same horizons from random dates. Draw many sets of dates, as many as you have signals, from the same history, and measure the same horizons. If the signal dates do not clearly beat the random sets, the record is the market's general drift, not the signal. Brock, Lakonishok and LeBaron (1992) used this kind of comparison against simulated series to judge simple trading rules.
- Decide the role. Fewer than about 30 events: use the thrust as a condition that allows a higher-frequency rule to trade, and test that combination with its hundreds of trades. More: test it as a standalone rule with the usual out-of-sample split.
The filter route is where the stand-in test from the previous section becomes useful. A Momentum or MACD rule on daily bars supplies the trades; the breadth state supplies a condition, such as trading long only in the months after a thrust. The combined rule has enough trades to grade, and its grading is a comparison: the daily rule with the filter against the same rule without it. When the combined rule goes through strategy validation, AlphaPrime grades it against thresholds fixed before the run and stops the later checks as soon as one fails, which keeps a rare-event filter from being judged by the one check it happened to pass. The method for the split itself is in how to split in-sample and out-of-sample data.
The first thing to do is small. Take a daily advance and decline series for the exchange you follow, compute the 10-day EMA of advancers ÷ (advancers + decliners), and count how many times it went from below 0.40 to above 0.615 within ten trading days. Write that count down before you look at what the market did afterwards. The number itself tells you which of the two test routes above applies.
Frequently asked questions
How is the Zweig Breadth Thrust calculated?
Each trading day, divide the number of advancing issues by the sum of advancing and declining issues. Smooth that ratio with a 10-day exponential moving average. A signal occurs when the smoothed line moves from a close below 0.40 to a close above 0.615 within ten trading days or fewer. The issue list you use and the starting value of the average both change the count of signals, so fix them before you start.
When was the last Zweig Breadth Thrust signal?
The date depends on which exchange's advance and decline counts you use and whether you include all issues or only common stocks, so two sources can disagree by a signal or two. The reliable way to know is to compute the 10-day EMA from a daily breadth series yourself and find the most recent crossing from below 0.40 to above 0.615 inside ten days. Because the rule fires only a handful of times per decade, gaps of several years between signals are normal.
How accurate is the Zweig Breadth Thrust?
Published records report that the index was higher some months after most signals. The record is only a few dozen events, and the uncertainty of an average shrinks with the square root of the event count, so a few dozen cases leave a wide range around any hit rate. Treat the high hit rate as a hint about market behaviour, and compare the signal dates with random dates from the same history before giving it any weight.
Can you backtest a breadth thrust on futures?
Not directly from futures bars, because the rule needs daily counts of advancing and declining stocks. You can compute the signal from a breadth series and then measure what an index future such as ES did after each signal date, with commission and slippage included. The test in this article used a price-based Momentum rule as a stand-in, because it produces enough trades to be judged, where the thrust itself does not.
Should I trade the breadth thrust as a standalone strategy?
With fewer than about 30 signals in the record, the average outcome is too uncertain to size a position on. A more useful role is as a filter: a condition that allows a daily rule, such as a Momentum or MACD rule, to take long trades for a set period after a signal. The combined rule has hundreds of trades, so it can be graded out-of-sample against the same rule without the filter.
References
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.
- Harvey, C. R., & Liu, Y. (2015). Backtesting. The Journal of Portfolio Management, 42(1), 13–28.
- Brock, W., Lakonishok, J., & LeBaron, B. (1992). Simple Technical Trading Rules and the Stochastic Properties of Stock Returns. The Journal of Finance, 47(5), 1731–1764.

