The Test Bench › Moving averages › 200-day average › Study 018
Does a stock crossing its 200-day moving average predict the next move? We tested 71,245 signals across 483 S&P 500 stocks, 2006 to September 2026, over the next 100 trading days (about five months).
STUDY 018After a crossing above the 200-day average, the stock rose a median 4.5% over the next 100 trading days, 0.03 percentage points more than on an ordinary day.
After a crossing below the 200-day average, the stock rose a median 4.8%, 0.58 percentage points less than on an ordinary day.
The largest estimated gap in the two comparisons, in either direction, was 0.58 percentage points; none met our test for a clear difference.
In this test, either crossing of the 200-day average showed no clear difference from ordinary days over the next 100 trading days; that is not proof that there is none.
Worked examples and how traders use it: the 200-day moving average explained. The same test for the golden cross and the 9/21 EMA. Moving-average rules compared as trading strategies: the moving average backtest. The whole series: moving average trading explained.
An event study: it measures what followed each signal. No entry, exit, position size or trading cost is simulated; the backtest of these rules is a separate study. The stocks are today’s S&P 500 members, so companies that failed along the way are missing (survivorship bias).
Over the 200 trading days before a crossing above, the median stock had moved +2.6% to +3.3%, depending on the volatility state; before a crossing below, +2.7%. Calm and volatile compare each stock’s volatility with its own whole-period median, a label that uses hindsight. Over the next 100 days, a crossing above was followed by +0.03 points against ordinary days above the average (not clear), and a crossing below by −0.58 points against ordinary days below it (not clear).
In this sample, the price crossed above its 200-day average about 4 times a year per stock: 35,592 crossings above and 35,653 below in 483 stocks over 2006 to September 2026. Near its average, a price can cross back and forth within days. Crossings that reverse soon afterwards are called whipsaws. Each crossing is a trade for a rule that follows it, so the trading cost is paid often (Study 020 measures it).
The lines stay close to zero: in this test, the signals were not followed by a clear difference from ordinary days over the next 100 days.
The comparison days are on the same side of the average as the signal, so the test asks whether the crossing day adds anything to being on that side. It does not compare stocks above the average with stocks below it.
We added this check after reading the main results, so treat it as a pattern to test again on new data, not a confirmed edge. It asks whether the signal marks a change in how much the price moves, or the start of a steadier trend; it measures no trading profit, and the return comparison above remains the main test. Same stocks, years and signals; the comparison is again with ordinary days of the same stocks on the same side of the 200-day average. The measure is a ratio: volatility (the standard deviation of daily returns) over the 60 trading days after a signal or an ordinary day, divided by the same over the 60 days before; the figures are medians of that ratio, and 1.00 means no change. The chart shows the path on a different scale, 20-day volatility against the stock’s usual level.
Over the 60 trading days after a crossing above the 200-day average, volatility was 5% lower than over the 60 before (a median ratio of 0.95), against 1.01 on ordinary days: a difference in the ratio of −0.06 (−0.08 to −0.03), clear under every block length. It fell after 57% of these 35,571 signals, against 49% of ordinary days; and in 378 of the 483 stocks with at least one such signal, the stock’s median ratio after the signal was below its median on its own ordinary days. After a crossing below the 200-day average, the median ratio was 1.01 against 0.95: +0.06 (+0.03 to +0.09), clear under every block length.
Trendiness compares the net price change over the window with the total distance the price travelled, the sum of its daily moves: near 1, the price moved mainly one way; near 0, back and forth. It shows whether a trend followed. Before a crossing above it was 0.067 against 0.124 on ordinary days (clear under every block length); after it, 0.119 against 0.117 (not clear). Before a crossing below, 0.075 against 0.111 (clear under every block length); after it, 0.117 against 0.116 (not clear).
One possible explanation: the window before a rise holds the turbulent stretch that set it up, and volatility tends to settle after such a stretch, while falling prices tend to come with higher volatility. The test does not isolate it. It measures how much the price moved; which way it moved is the subject of the results above.
Mebane Faber’s 2007 paper, updated in 2013, held US stocks only while the index was above its 10-month average. His rule checks the index once a month, at the month-end close, against the average of the last ten month-end closes: similar in spirit to the 200-day average, with fewer and different signals. From 1901 to 2012 he reports 10.2% a year against 9.3% for buying and holding, with a worst fall of −50% against −84%, before costs and taxes. His test is a holding rule on the index and this one measures the days after each crossing in single stocks; Study 020 runs his rule on SPY over these years.
Question: after a crossing above the 200-day average or a crossing below the 200-day average, does the stock’s median return over the next 100 trading days differ from ordinary days for the same stocks on the same side of the 200-day average?
| Part | Definition |
|---|---|
| Indicators | The 200-day simple moving average of the daily close (the app’s SMA200) |
| Crossing above the 200-day average | The first close above the 200-day average, after a close below it |
| Crossing below the 200-day average | The first close below the 200-day average, after a close above it |
| Measured | From the signal day’s close, over the next 100 trading days (about five months) |
| Compared with | Every eligible day of the same stocks on the same side of the 200-day average |
| Stocks | 483 current S&P 500 members, 2006 to September 2026, price returns |
The design was set on 15 October 2026 in our internal study record, before any return was read. The stocks, data and years are those of our RSI studies, so the series can be compared on one data set.
The 71,245 signals are not 71,245 independent observations: signals repeat in the same stock, the 100-day windows overlap, and stocks move together. The 95% intervals come from a calendar-block bootstrap that resamples whole stretches of the calendar (2,000 resamples), rerun with several block lengths and designs. A gap is called clear when every interval excluded zero on the same side: our own rule, stricter than a single test, and not proof that a gap will persist in future data. The two comparisons are not adjusted for being tested together, so one clear result among them would be weaker evidence than it looks. At a 100-day horizon the longest blocks leave fewer than 30 in twenty years, so those reruns are rough. Signal days are part of the ordinary-day pool, as in the app’s event study: the comparison is with every eligible day, signals included. Leaving the signal days out of the pool moves each comparison by 0.03 percentage points or less, a small fraction of every interval’s width. A crossing puts the close on its own side of the 200-day average, so the other side has no signals by construction.
Survivorship bias. This is not the historical index. It is today’s S&P 500 members projected backwards, so companies that failed or left the index after a deep fall are missing. How the bias works and how to avoid it: survivorship bias in backtesting.
In the Events panel, add a Signal “Close ↑ crosses above SMA200”, wired into EVENT (the block that marks the event days). Choose 1d · Daily, set the horizon to 100 and the Trend to > SMA200 (a stock that has just crossed above is already above its average; the setting picks the matching ordinary days), and run it on your own stocks. For the crossing below use “↓ crosses below” with the Trend at < SMA200.
| Signal | Stocks | Signal days | Median 100-day return | Ordinary days | Difference | 95% interval | Result |
|---|---|---|---|---|---|---|---|
| Crossing above | Above 200-day | 35,592 | +4.52% | +4.48% | +0.03 points | −1.18 to +1.26 | not clear |
| Crossing above | Below 200-day | 0 | — | — | — | — | none by construction |
| Crossing below | Above 200-day | 0 | — | — | — | — | none by construction |
| Crossing below | Below 200-day | 35,653 | +4.83% | +5.41% | −0.58 points | −1.84 to +0.51 | not clear |
| After 50 days | Above the 200-day average | Below it |
|---|---|---|
| Crossing above | +0.10 points (−0.53 to +0.76) | — |
| Crossing below | — | −0.54 points (−1.22 to +0.15) |
Main (63-day) intervals only: these checks were not rerun under the other settings and are not adjusted for being tested together, so an interval here that excludes zero is weaker evidence than a clear result.
| Signal | Signal days | Volatility, next 60 ÷ previous 60 days | Ordinary days | Difference | 95% interval | Result |
|---|---|---|---|---|---|---|
| Crossing above · above 200-day | 35,571 | 0.948 | 1.006 | −0.06 | −0.08 to −0.03 | clear |
| Crossing below · below 200-day | 35,615 | 1.009 | 0.952 | +0.06 | +0.03 to +0.09 | clear |
| Signal | Trendiness, previous 60 days | Ordinary days | Result | Trendiness, next 60 days | Ordinary days | Result |
|---|---|---|---|---|---|---|
| Crossing above | 0.067 | 0.124 | clear | 0.119 | 0.117 | not clear |
| Crossing below | 0.075 | 0.111 | clear | 0.117 | 0.116 | not clear |
Intervals: calendar-block bootstrap over trading dates, blocks of 21, 63, 126, 252 days, 2000 resamples each; the interval shown is the 63-day one.
| Signal | State | Signal days | Difference | 95% interval |
|---|---|---|---|---|
| Crossing above | Above 200-day · calm | 14,634 | −0.18 points | −1.12 to +0.62 |
| Crossing above | Above 200-day · volatile | 20,958 | −0.23 points | −1.83 to +1.27 |
| Crossing above | Below 200-day · calm | 0 | — | — |
| Crossing above | Below 200-day · volatile | 0 | — | — |
| Crossing below | Above 200-day · calm | 0 | — | — |
| Crossing below | Above 200-day · volatile | 0 | — | — |
| Crossing below | Below 200-day · calm | 13,495 | +0.65 points | +0.004 to +1.33 |
| Crossing below | Below 200-day · volatile | 22,158 | −1.04 points | −2.50 to +0.34 |
Using this research. The analysis, tables and figures on this page are GU Analyser Ltd’s own work, published under a Creative Commons BY-NC 4.0 licence. You are welcome to quote it, cite it and build on it, with credit and a link. Suggested credit: GU Analyser, The Test Bench, Study 018, linking to guanalyser.com/test-bench/200-day-moving-average/. For commercial use, ask us at hello@guanalyser.com.
Rebuild the test
Build the crossing in the Events panel from the default 200-day average, set the horizon, and measure what followed it on your own stocks.
Create a free account and run your own tests → or read how the SMA is calculated →The method: how an event study works