Momentum and mean reversion in S&P 500 stocks, 2000–2026

Research note and proof of concept · 8 November 2026 · Price data through 6 November 2026

Start with the overview below (about five minutes). The full report follows it.

Overview: the five-minute version

What we did

The requirements sheet listed four trading ideas. We reviewed all four, then built and ran a full test of the second one, momentum. Its question is simple: if a stock has recently been one of the S&P 500's biggest winners, does it keep beating the market? And do the biggest losers bounce back?

We started there because it can be tested with free data, decades of research exist to check our numbers against, and the same tools will serve the politician-trading idea later.

The short answer is no, not reliably. Between 2000 and 2026, recent winners kept winning in some years and fell behind in others. The effects were small, a few percent over a year, and too weak to tell apart from luck. No version of the strategy beat simply buying and holding SPY over the last ten years.

How the test works

How the test works, in four steps Step 1: sort every index stock by its recent return and mark the top tenth as winners and the bottom tenth as losers. Step 2: buy each group the next day and compare it with the average stock for a year. Step 3: repeat at every month-end from 2000 to 2026 and average the results. Step 4: choose settings using 2000 to 2015 and check them once on 2016 to 2026. 1. Rank Sort every index stock by its return over a recent window Winners top 10% Losers bottom 10% 2. Follow for a year Buy each group the next day and compare it with the average stock average stock winners losers next day 12 months later 3. Repeat and average Do this at every month-end from 2000 to 2026 (322 times) thin lines: single month-ends thick line: their average 4. Practice, then test Settings are chosen on the practice years and checked once on the test years. Practice: 2000–2015 Test: 2016–2026 2000 2016 2026
Figure A. How the test works. The lines in steps 2 and 3 are drawings to show the idea, not results.

On a typical recent month-end, about 460 index stocks had at least a year of price history. We:

  1. measure each stock's return over a recent window (we tried six, from one week to twelve months);
  2. sort the stocks and call the top 10%, about 46 of them, the winners, and the bottom 10% the losers;
  3. pretend to buy each group at the next day's close (you can't trade at the price you used to decide);
  4. follow both groups for a year and, each day, compare their return with the average of all 460 stocks.

We repeat this at every month-end from January 2000 to October 2026, 322 times in all, and average the results to see what typically happens next.

Three details keep the test honest:

What we found

1. The two periods disagree. Figure B follows the previous 12 months' top 10%. In the practice period they fell steadily behind the average stock, ending the year 4.4% behind; in the test period they ended 2.4% ahead. A pattern worth trading would point the same way in both, and neither result passes a standard significance test.

Line chart. Over the 12 months after being picked, previous 12-month winners fell steadily to 4.4% behind the average stock in 2000–2015, and rose to 2.4% ahead in 2016–2026.
Figure B. Average return of the previous 12 months' top 10% compared with the average S&P 500 stock, over the year after they were picked.

2. A few extreme years drive the averages. Figure C splits the same measure by the year the winners were picked. Most years land within a few percent of zero, either way. The practice-period loss comes mainly from winners picked in 2000, at the top of the dot-com bubble (42% behind), and in 2008–09, when the previous losers led the rebound (13–16% behind). Without those three years the practice average is +0.4%. Likewise, the test-period gain comes almost entirely from winners picked in 2023 and 2024; without them it is −0.3%.

Bar chart by year from 2000 to 2025. Most bars are within 10% of zero, positive and negative. Large exceptions: 2000 at minus 42%, 2008 at minus 13%, 2009 at minus 16%, 2004 at plus 11%, 2023 at plus 12% and 2024 at plus 13%.
Figure C. Return of the previous 12 months' top 10% compared with the average stock over the next 12 months, by the year they were picked (averaged over that year's month-ends). 2025 includes picks up to October, the latest with a full year of results.

3. Most winners do not keep winning. Over the six months after being picked, between 47 and 50 out of every 100 winners beat the average stock, about the same as for stocks in general (47 out of 100). Any gain on average comes from a handful that keep rising strongly.

4. Losers bounced back a little. The bottom 10% beat the average stock by up to about 4% over the next year in both periods, which fits the sheet's mean-reversion question. The evidence is weak, though, and the practice figure is flattered by missing data: losers that went bankrupt are not in the free price data.

5. As a strategy, nothing beat SPY. The setting that looked best in the practice period became a portfolio: each month, buy the previous week's top 10% in equal amounts and hold each batch for six months, after trading costs. A second version moved to cash whenever SPY was below its 200-day average. Figure D compares both with SPY and with owning every index stock equally.

Bar charts. 2000–2015: yearly return momentum 10.6%, momentum with trend filter 12.6%, equal-weight 10.8%, SPY 4.3%; worst fall 65.8%, 21.0%, 58.3%, 55.2%. 2016–2026: yearly return 13.1%, 6.7%, 12.6%, 14.4%; worst fall 37.8%, 31.1%, 39.9%, 33.7%.
Figure D. Average yearly return and worst fall from a peak for each portfolio, in each period. Trading costs are included.

In the test period the momentum portfolio returned 13.1% a year against SPY's 14.4%, and its worst fall from a peak was deeper (38% against 34%). The version with the cash rule had a smaller worst fall (31%) but returned only 6.7% a year. It tended to move to cash after the market had already dropped, then miss the quick rebounds (early 2019, 2020, 2025).

6. A good-looking result can still be misleading. In the practice period the momentum portfolio beat SPY by about 6 points a year, which looks like a discovery. But owning every index stock in equal amounts did just as well (Figure D, left). The gain came from equal weighting, which favored smaller index companies in those years, plus some help from the missing bankrupt companies, not from momentum. Checking every result against a benchmark built from the same data is what caught this. (Compared with RSP, a real equal-weight index fund, the missing data added about 1.8 points a year in the practice period and 0.7 in the test period.)

Against the requirements

The sheet asks for a return above buy-and-hold together with a smaller worst loss. In the test period no version met both. The momentum portfolio met neither, and the cash-rule version met only the second.

What this means, and what comes next

With free data, momentum in the 500 largest US stocks has not been strong or consistent enough to trade on its own since 2000. That is still useful: it rules out the simple version before any money goes in, and the tools can be reused. Next steps:

  1. Re-run with data that includes delisted companies (Norgate Data, Sharadar or CRSP), which removes the main weakness in the current data.
  2. Test a wider set of stocks, such as the Russell 1000 or 3000. Research generally finds momentum stronger among smaller companies.
  3. Use the same method on the politician-trading idea, with the date each trade was disclosed as the event, or on company insiders buying their own shares.

The full write-up follows: the review of all four ideas (Section 2), data (3), the model with formulas (4), all results tables (5) and limitations (7).

1. What we set out to do

The requirements sheet (notes/Modeling requirements.csv) lists four ideas:

Table 1. The four ideas as written in the sheet.
#IdeaQuestionStated requirement
1Next-day market directionCan data up to today's close predict the direction of tomorrow's open?Win rate of at least 75%, return above buy-and-hold, drawdown below buy-and-hold.
2MomentumDo last week's or last month's top S&P 500 performers keep rising? Do most of them? For how long? Do they mean revert, and when?Backtest; if trends persist for a certain time, test buying and selling after that time.
3Politician tradesHow do stocks move after politicians' trades become public? Does the move persist or fade?Same as idea 2, reusing what is learned there.
4Macro price floorCan CPI, PPI, rates, oil, bond yields and similar factors in a regression indicate a floor or direction for the S&P 500 or single stocks?Buy if the forecast is above the current price, sell or short if below. Maximize return, minimize drawdown.

The work had two parts: a critique of the four ideas (Section 2), and a proof of concept for the one with the best chance of producing a trustworthy answer with free data (Sections 3–5). We chose idea 2. It can be tested with free data, it has decades of academic research to compare against, and the machinery it needs (a historical index membership list, an event study and a backtester) is the same machinery idea 3 needs.

2. Review of the four ideas

2.1 Points that apply to all four

2.2 Idea by idea

Table 2. Main problems and suggested changes.
IdeaMain problemsSuggested change
1. Next-day direction SPY opens higher than the prior close a bit more than half the time, so the bar to beat is "always hold overnight", not a coin flip. Academic work has found that much of the US market's long-run return has come overnight rather than during the trading day. Trading twice a day makes costs a large share of any edge. Try to beat "always hold overnight" after costs. Candidate inputs: the day's return, the change in VIX, futures moves after the close, day of the week, earnings season.
2. Momentum Heavily researched already. Winners over the past week or month tend to reverse (Jegadeesh 1990; Lehmann 1990). Winners over the past 3–12 months tend to keep outperforming for 3–12 months (Jegadeesh & Titman 1993), then fade over several years (De Bondt & Thaler 1985). The biggest trap is using today's S&P 500 list for past years. Use historical membership. Measure each stock against the average stock, because in a bull market nearly everything rises. Pick the holding period with early data and test it once on later data.
3. Politician trades The STOCK Act allows trades to be disclosed up to 45 days after they happen. Using the trade date assumes information nobody had yet. Research is mixed (Ziobrowski et al. 2004 found outperformance; Eggers & Hainmueller 2013 did not). Amounts are reported in ranges, samples are small, and free data sources come and go. Use the disclosure date as the event. Compare against the NANC and KRUZ ETFs, which already follow these trades. Consider corporate insider purchases (SEC Form 4) as well: same idea, free data back decades, filed within two business days, and better research support (Cohen, Malloy & Pomorski 2012).
4. Macro price floor Regressing price levels on CPI or rate levels finds relationships that are not there, because any two series that trend over time look correlated. Economic data is published with a lag and later revised. Markets react to surprises relative to expectations, not to levels. Monthly data offers few independent observations, so a model with eight or more inputs will overfit. Prediction markets have too little history to backtest. Predict index returns over the next 3–12 months instead of price levels. Model the "floor" as a bad-case outcome, for example the 10th percentile of future returns given today's conditions. Use rate-hike odds implied by fed funds futures, which go back decades. This works best as an on/off risk filter for other strategies, not on its own.

2.3 Other ideas worth testing

3. Data

3.1 Which stocks count

A momentum test on "S&P 500 stocks" must use the stocks that were in the index at the time. Today's list contains only the companies that survived and grew, so testing past years with it builds in a large upward bias.

We used the historical membership file from github.com/fja05680/sp500, which records the full list of members on each date the list changed. On each date in our study, a stock is a candidate only if it was a member that day. Across 1999–2026, 1,103 distinct tickers were members at some point.

3.2 Prices

Daily prices adjusted for splits and dividends came from Yahoo Finance. Yahoo has a gap that matters here: it has no data for companies that no longer trade, whether acquired or bankrupt. We found prices for 724 of the 1,103 tickers. Table 3 shows what share of each year's members we could price.

Table 3. Share of index members on each date with usable price data (yearly average).
Year20002005201020152016202020252026
Coverage49%56%69%77%81%91%97%99%

Coverage is good from 2016 on, which is why 2016 onward became the out-of-sample test period. Three problems with tickers needed fixing first:

3.3 Survivorship bias

Even after these fixes, about half the members in 2000 and a fifth in 2016 are missing, mostly companies that were later acquired or went bankrupt. Two steps limit the damage:

  1. Every result is measured relative to the average stock in the same data. If the missing companies would have dragged down everyone's average, the comparison group is lifted by the same amount, and most of the bias cancels.
  2. We measure the bias directly. RSP is an ETF that holds every S&P 500 member at equal weight, including the ones that later disappeared. The gap between our equal-weight universe and RSP estimates the bias: about +1.8 percentage points a year in 2003–2015 and +0.7 a year from 2016 (Section 5.6).

Cash returns use the 13-week Treasury bill yield (Yahoo ticker ^IRX). The market benchmark is SPY, with dividends reinvested.

4. The momentum model

4.1 The question in testable form

The sheet asks whether recent top performers keep rising, whether most of them do, for how long, and whether and when they mean revert. In testable form:

At the end of each month, rank every eligible index member by its return over a recent window. Take the top 10% ("winners") and bottom 10% ("losers"). Over the following year, how does each group's return compare with the average eligible stock's, day by day? What share of each group beats the average?

This design is called an event study: the "event" is a stock landing in the top or bottom tenth, and we trace what happens afterwards. Repeating it every month from January 2000 to October 2026 gives 322 events of each kind for each lookback window.

4.2 Notation

4.3 Formation: ranking the stocks

Each stock's formation return is its price change over the window:

Ri,t = Pi, t−s / Pi, t−L − 1

We test six windows:

Table 4. Formation windows.
NameL (days)s (days)Why it is included
1w50"Last week's winners" from the sheet.
1m210"Last month's winners" from the sheet.
3m630Shortest window in Jegadeesh & Titman (1993).
6m1260Common middle choice.
12m2520Full-year return.
12-1m25221The standard academic signal: last 12 months excluding the most recent one, which avoids the short-term reversal effect.

Stocks in Ut are sorted by Ri,t. The top 10% form the winner group Wt and the bottom 10% the loser group Dt. That is about 31 stocks per group in 2000–2015 and 46 from 2016. Every window uses the same universe, so differences between windows come from the ranking alone.

4.4 Tracking what happens next

Prices at the close on day t are needed to compute the ranking, so nobody could trade at that close. Tracking therefore starts at the next day's close, t+1. Each stock's cumulative return h days later is:

ri(t, h) = Pi, t+1+h / Pi, t+1 − 1

If a stock's price history ends during the year (for example, it is taken over), its last price is carried forward, as if the position had been turned into cash at that price.

4.5 Measuring relative to the average stock

Each group's return is the simple average of its members' returns, which is what an equal-weighted portfolio bought on day t+1 and held without rebalancing would earn. From it we subtract the same average across the whole universe:

XW(t, h) = avgi ∈ Wt ri(t, h) − avgj ∈ Ut rj(t, h)

The same is done for losers. This excess return answers "did winners do better than the average stock?" rather than "did winners go up?". In a rising market almost everything goes up, so the second question says little about momentum. As explained in Section 3.3, subtracting the average from the same data also cancels most of the survivorship bias.

For the question "do most winners keep winning?", we also record the hit rate: the share of the group whose own return beats the universe average. We compute the same share for the whole universe as a baseline. That baseline sits below 50%, because single-stock returns are skewed: a few very large gains pull the average above what the typical stock earns.

4.6 Averaging over time and testing significance

The curves in Figure 1 are averages of X(t, h) across all formation dates in a period, plotted against h. For the grid in Tables 6–9 we read the average at five holding periods (1 week, 1, 3, 6 and 12 months) and test whether it differs from zero.

The test needs care. Formation dates are a month apart, but a 12-month holding period means consecutive observations share 11 months of returns, so they are far from independent. An ordinary t-statistic would overstate confidence badly. We use the Newey–West (1987) standard error, which allows for this overlap, with the number of lags set to the holding period in months. As a rule of thumb, a t-statistic above 2 in absolute value is evidence of a real effect, and one below 1.5 is consistent with noise.

4.7 Keeping the test honest: the split

The data is split into an in-sample period (formation dates from January 2000 to December 2015), used to explore and choose settings, and an out-of-sample period (January 2016 onward), looked at once with settings already fixed.

A simple date split still leaks. A stock picked in November 2015 and held for 12 months earns most of its return in 2016. We drop any in-sample observation whose holding window ends after 31 December 2015, so in-sample statistics never use 2016 prices. This is why the in-sample count falls from 191 months at a 1-month hold to 179 at a 12-month hold.

4.8 Choosing one setting

To turn the study into a strategy we need one formation window and one holding period. The script picks the pair with the highest in-sample t-statistic for winners from 24 candidates (6 windows × 4 holding periods of 1, 3, 6 or 12 months; the 1-week hold is left out because the portfolio trades monthly). It then applies a gate: if the best t-statistic is below 2, the result does not qualify as a strategy. Picking the best of 24 noisy numbers favors whichever had the luckiest draw, so a modest t-statistic for the winner of that contest means even less than it would for a single pre-chosen setting (see Bailey & López de Prado 2014). The backtest runs either way so the machinery and benchmarks can be checked.

4.9 Turning the signal into a portfolio

The portfolio follows Jegadeesh & Titman (1993). Each month a new cohort of winners is bought at equal weight and held for H months. At any time the portfolio therefore holds the last H cohorts, each with 1/H of the capital. At each monthly rebalance the target weight of stock i is:

wi = Σk=0…H−1 (1/H) · (1/|Wt−k|) · [i ∈ Wt−k]

where the bracket is 1 if the stock was a winner in that month's cohort and 0 otherwise.

Example. With H = 6 and 46 winners per month, each cohort holds 1/6 ≈ 16.7% of capital and each stock in a cohort gets 16.7% / 46 ≈ 0.36%. A stock that was a winner in three of the last six months holds about 1.09%. The portfolio holds up to 276 positions, usually fewer because of repeats.

Between rebalances weights drift with prices. At each rebalance the portfolio is reset to the target weights. Stocks that left the index stay in their cohort until it expires, as they would in a real account.

4.10 Trend filter

A second version applies a simple market filter aimed at the drawdown requirement. At each month-end, if SPY closes below its 200-day moving average, the target is 100% cash for that month. The 200-day setting is the conventional one and was not tuned. The filter was in cash in 30% of in-sample months and 17% of out-of-sample months (22 of 130).

4.11 Costs, cash and execution

4.12 Performance measures

Table 5. Definitions used in the backtest tables.
MeasureDefinition
CAGRCompound annual growth rate: the constant yearly return that produces the same ending value.
VolatilityStandard deviation of daily returns × √252.
Sharpe ratioAverage daily return above the T-bill rate, divided by its standard deviation, × √252. Return per unit of risk.
Max drawdownLargest peak-to-trough fall in portfolio value.
Calmar ratioCAGR ÷ |max drawdown|. Return per unit of worst loss.
Up monthsShare of calendar months with a positive return.
Beat-SPY monthsShare of months in which the strategy returned more than SPY. The nearest equivalent to "win rate" for a monthly strategy.
Turnover / yrSum of absolute weight changes per year. 1.0 means the equivalent of the whole portfolio was bought and sold once.

5. Results

5.1 Event study

Four line charts. Top row: top-decile winners; bottom row: bottom-decile losers. Left column 2000–2015, right column 2016–2026. Each shows the average cumulative return relative to the equal-weight universe over the 12 months after formation, for the 1-week, 1-month, 6-month and 12-minus-1-month formation windows.
Figure 1. Average cumulative return relative to the equal-weighted universe, from the day after formation to 12 months later. Top: winners. Bottom: losers. Left: 2000–2015. Right: 2016–2026. Four of the six windows are drawn; all six are in Tables 6–9 and in the CSV files in reports/.

The two periods disagree. In 2000–2015, winners over 6 and 12 months fell behind the average stock steadily for the whole following year. Most of that comes from two episodes. Stocks picked as 12-month winners during 2000, near the top of the dot-com bubble, lagged the average stock by 42% over the following year. Winners picked during 2008 and 2009 lagged by 13–16% as the market rebounded in 2009 and the previous year's biggest losers rallied hardest, a pattern known as a momentum crash (Daniel & Moskowitz 2016). Leaving out formation dates in 2000, 2008 and 2009, the in-sample average for 12-month winners is close to zero (+0.4%). The out-of-sample gain is similarly concentrated: without winners picked in 2023 and 2024 it falls from +2.4% to −0.3%. Figure C in the overview shows the year-by-year results. From 2016, winners on every window pulled ahead slowly, and losers also beat the average slightly.

Table 6. How long the winners' relative gain lasts. "Peak day" is the trading day after formation at which the average excess return was highest; "none" means it never rose above zero.
Formation2000–2015 winners2016–2026 winners
Peak dayAt peakAt 12mPeak dayAt peakAt 12m
1w233+0.8%+0.7%218+1.2%+1.0%
1m233+0.7%+0.6%236+2.3%+2.1%
3m207+0.4%−0.2%228+2.4%+1.9%
6mnone—−2.6%244+2.9%+2.5%
12mnone—−4.4%223+2.7%+2.4%
12-1mnone—−4.3%204+2.6%+2.2%

Where winners did pull ahead, the gain built slowly for most of the year, peaking between trading days 204 and 244 (about 10 to 12 months), and little of it was given back within the year. These are small numbers, however: 2–3% over a year, before asking whether they are distinguishable from noise.

5.2 Formation × holding grid

Each cell is the average excess return over the holding period, with the Newey–West t-statistic in parentheses.

Table 7. Winners, in-sample (2000–2015).
Formation1w hold1m3m6m12m
1w−0.2 (−1.2)−0.3 (−1.4)−0.4 (−1.2)+0.7 (+0.9)+0.7 (+0.5)
1m−0.0 (−0.1)−0.3 (−1.4)−0.4 (−1.1)+0.0 (+0.0)+0.6 (+0.5)
3m−0.2 (−1.7)−0.2 (−0.9)−0.4 (−0.8)−0.1 (−0.1)−0.2 (−0.1)
6m−0.1 (−0.9)−0.2 (−0.6)−0.5 (−0.8)−0.7 (−0.5)−2.6 (−1.0)
12m−0.2 (−1.4)−0.3 (−0.9)−1.2 (−1.6)−2.8 (−1.8)−4.4 (−1.4)
12-1m−0.1 (−0.7)−0.2 (−0.6)−1.2 (−1.5)−2.8 (−1.8)−4.3 (−1.4)
Table 8. Winners, out-of-sample (2016–2026).
Formation1w hold1m3m6m12m
1w+0.2 (+1.3)+0.1 (+0.3)+0.1 (+0.3)+0.8 (+1.1)+1.0 (+0.8)
1m+0.1 (+0.6)−0.0 (−0.1)−0.1 (−0.2)+0.7 (+1.0)+2.1 (+1.3)
3m+0.1 (+0.3)−0.1 (−0.5)−0.1 (−0.1)+1.3 (+1.3)+1.9 (+1.2)
6m+0.0 (+0.1)+0.0 (+0.2)+0.4 (+0.7)+2.0 (+1.7)+2.5 (+1.3)
12m−0.0 (−0.2)+0.0 (+0.1)+0.3 (+0.4)+1.6 (+1.2)+2.4 (+1.1)
12-1m−0.1 (−0.3)+0.0 (+0.1)+0.4 (+0.6)+1.9 (+1.4)+2.2 (+1.1)
Table 9. Losers, both periods. Positive numbers mean losers beat the average stock (mean reversion).
Formation1w hold1m3m6m12m
In-sample, 2000–2015
1w+0.1 (+0.8)+0.3 (+0.9)+0.7 (+1.0)+0.5 (+0.5)+1.3 (+0.7)
1m+0.1 (+0.4)+0.1 (+0.4)+0.7 (+0.9)+1.0 (+0.8)+2.0 (+0.9)
3m+0.2 (+1.1)+0.5 (+1.3)+0.9 (+1.0)+1.8 (+1.0)+3.6 (+1.2)
6m+0.2 (+0.8)+0.5 (+1.1)+1.3 (+1.0)+2.0 (+0.8)+4.4 (+1.0)
12m+0.4 (+1.4)+0.4 (+0.9)+0.8 (+0.6)+1.7 (+0.6)+4.4 (+1.0)
12-1m+0.3 (+1.2)+0.3 (+0.6)+0.6 (+0.5)+1.2 (+0.5)+4.2 (+0.9)
Out-of-sample, 2016–2026
1w−0.0 (−0.2)+0.2 (+1.0)+0.5 (+1.2)+0.5 (+0.5)+2.0 (+1.2)
1m+0.1 (+0.7)+0.2 (+0.7)+0.5 (+1.3)+0.6 (+0.9)+1.2 (+0.8)
3m+0.2 (+1.0)+0.3 (+0.9)+0.5 (+1.0)+0.0 (+0.0)+0.7 (+0.3)
6m+0.1 (+0.5)+0.0 (+0.1)−0.3 (−0.6)−0.5 (−0.4)+1.1 (+0.4)
12m+0.4 (+1.4)+0.4 (+1.0)+0.7 (+0.7)+1.0 (+0.5)+3.5 (+0.9)
12-1m+0.4 (+1.5)+0.4 (+1.0)+0.7 (+0.7)+0.9 (+0.4)+3.5 (+0.9)

None of the 120 cells has a t-statistic above 2 in absolute value. The largest are −1.8 (12-month winners held 6 months, 2000–2015) and +1.7 (6-month winners held 6 months, 2016–2026). The in-sample sign pattern for winners (mostly negative) does not carry into the out-of-sample period (mostly positive). An effect that real money could rely on would show up in both. Losers beat the average in most cells of both periods, which looks like mean reversion, but the evidence is weak (t-statistics of 1.5 or less), and the in-sample figures are the ones most inflated by survivorship bias: losers that kept falling until they were delisted are missing from the data.

5.3 Do most winners keep winning?

Table 10. Share of winners whose own return beat the universe average over the holding period, 2016–2026. The last row is the same share for all eligible stocks.
Formation1w hold1m3m6m12m
1w51%49%47%47%45%
1m52%48%47%47%46%
3m51%48%46%47%45%
6m52%49%47%50%46%
12m51%48%47%47%47%
12-1m51%48%47%48%47%
All stocks50%49%49%47%46%

Winners beat the average about as often as any stock does. The modest average gain in Table 8 therefore comes from a minority of winners that keep going up strongly, not from most winners continuing. In 2000–2015 the share was lower still: 41–46% for 12-month holds.

5.4 The chosen setting

The highest in-sample t-statistic among the 24 candidates belonged to 1-week winners held for 6 months: +0.7% excess return, t = 0.9. That is far below the gate of 2, so no setting qualified as a strategy. Out of sample, the same setting returned +0.8% (t = 1.1). Results did not fall apart out of sample; there was simply nothing in-sample to begin with. The backtest below uses this setting to show the machinery and benchmarks at work.

5.5 Backtest

Table 11. Backtest results. Costs 10 bp per side, trades at the next day's close, cash earns T-bills. In-sample runs from February 2000 to December 2015, out-of-sample from January 2016 to 6 November 2026.
StrategyCAGRVolSharpeMax DDCalmarUp mo.Beat SPYTurn­over
In-sample, 2000–2015
Momentum10.6%25.4%0.46−65.8%0.1659%59%3.8
Momentum + trend filter12.6%14.1%0.79−21.0%0.6072%60%3.2
S&P 500 equal-weight10.8%21.4%0.51−58.3%0.1964%62%0.8
SPY buy & hold4.3%20.1%0.23−55.2%0.0859%——
Out-of-sample, 2016–2026
Momentum13.1%19.4%0.62−37.8%0.3564%47%4.0
Momentum + trend filter6.7%14.1%0.37−31.1%0.2265%42%4.9
S&P 500 equal-weight12.6%18.3%0.62−39.9%0.3266%44%0.7
SPY buy & hold14.4%17.7%0.72−33.7%0.4369%——
Line chart of growth of one dollar from January 2016 to November 2026 on a log scale for four strategies, with a drawdown chart below. SPY buy and hold ends highest at about 4.29 dollars, equal-weight at 3.63, momentum close to it, and momentum with trend filter lowest at 2.01.
Figure 2. Out-of-sample growth of $1 (log scale) and drawdown from previous peak, January 2016 to November 2026. The flat stretches in the trend-filtered line are months spent in cash.

Three things stand out.

The in-sample momentum result is not momentum. In 2000–2015 the momentum portfolio beat SPY by about 6 percentage points a year. Taken alone, that looks like a discovery. But the plain equal-weighted universe did the same (10.8% against momentum's 10.6%). The gap over SPY came from equal weighting, which favored smaller index members after the 2000 technology peak, and from survivorship bias. Without the equal-weight benchmark, this backtest would have been badly misread.

Out of sample, nothing beat SPY. Momentum and equal-weight both trailed SPY by 1–2 points a year, during a decade when the largest companies led the market.

The trend filter's in-sample success did not carry over. In 2000–2015 it cut the worst drawdown from −66% to −21% because it was in cash for much of the 2001–02 and 2008–09 bear markets. From 2016 the market's sharp falls reversed quickly (late 2018, March 2020, April 2025). The filter went to cash after much of the fall had already happened and missed part of each rebound. Its return fell to 6.7% a year, while its worst drawdown (−31.1%) was only slightly smaller than SPY's (−33.7%).

5.6 Survivorship check

Table 12. Our equal-weighted universe against RSP, the real equal-weight S&P 500 ETF, over the same days. RSP starts trading in May 2003.
PeriodOur universeRSPEstimated bias
May 2003 – Dec 201512.4%10.6%+1.8 pts/yr
Jan 2016 – Nov 202612.6%11.9%+0.7 pts/yr

RSP's annual fee (about 0.2%) and quarterly rebalancing explain a small part of each gap, so the true bias is somewhat smaller than shown. The bias is real but much smaller than the equal-weight effect. It is also concentrated where we expected: the early years with the worst coverage. Results measured relative to our own universe (Sections 5.1–5.3) are less affected than raw returns.

5.7 Against the requirements

Ideas 1 and 4 in the sheet ask for a return above buy-and-hold and a drawdown below it. Applying the same test to the out-of-sample results:

Table 13. Out-of-sample results against the buy-and-hold requirements (SPY: 14.4% CAGR, −33.7% max drawdown).
StrategyReturn above SPY?Drawdown below SPY?
MomentumNo (13.1%)No (−37.8%)
Momentum + trend filterNo (6.7%)Yes (−31.1%)
S&P 500 equal-weightNo (12.6%)No (−39.9%)

6. Answers to the questions in the sheet

Does the stock continue to rise? Relative to the average S&P 500 stock, not reliably. From 2000 to 2015, 6- and 12-month winners did worse than average over the next year. From 2016 they did 2–2.5% better over a year. Neither result is statistically reliable.

Do most stocks continue to rise? No. Fewer than half of the winners beat the average stock in any holding period beyond a week, about the same share as for stocks in general.

For how long? When winners did pull ahead (2016–2026), the gain built slowly for about 10–12 months. There was no clean point at which the trend stopped.

Does the stock mean revert? Do most? How long until? Losers beat the average stock by 0.7–4.4% over the following year in both periods, which points toward mean reversion, but none of these results is statistically reliable. Last week's and last month's winners showed at most a weak reversal: in 2000–2015 they lagged the average by 0.3–0.4% over the next one to three months (t-statistics between −1.1 and −1.4), and from 2016 there was none. In older US data, short-term reversal is a well-documented effect.

Buying and then selling after that time. The best in-sample combination was not strong enough to justify trading. Out of sample, the momentum portfolio trailed SPY by 1.3 points a year with a deeper drawdown.

7. Limitations

8. Next steps

  1. Survivorship-free data. Re-run with a dataset that includes delisted companies (Norgate Data, Sharadar, or CRSP for academic users). This is the most important step before any result is trusted with money.
  2. A broader universe. Extend to the Russell 1000 or 3000, where the academic evidence for momentum is stronger.
  3. Volatility-scaled momentum in place of the SPY trend filter.
  4. Reuse the event study for idea 3. Replace "month-end" with the disclosure date of each politician's trade, or each corporate insider purchase, and keep the rest of the method unchanged.
  5. Record these results in the "Results" column of the requirements sheet, together with the pass/fail tests from Section 2.1.

Appendix A: Reproducing the results

uv sync
uv run python -I scripts/fetch_data.py       # first run ~3 min; cached in data/cache/
uv run python -I scripts/momentum_study.py   # ~30 s; tables to the terminal, charts and CSVs to reports/
uv run python -I scripts/momentum_study.py --cost-bps 25   # stress trading costs
Table 14. Where things are.
PathContents
src/macrolab/universe.pyHistorical index membership, ticker renames, excluded recycled tickers.
src/macrolab/prices.pyYahoo download and cache, bad-price cleaning, coverage report.
src/macrolab/momentum.pyFormation signals, event study, period split, Newey–West tests, grid.
src/macrolab/backtest.pyOverlapping-cohort weights and the daily portfolio simulation.
src/macrolab/metrics.pyCAGR, Sharpe, drawdown, Calmar, monthly win rates, turnover.
src/macrolab/plots.pyThe two figures.
scripts/momentum_study.pyRuns the whole study end to end.
reports/*.csvEvery number in Tables 6–13, plus the full daily curves behind Figure 1.

Appendix B: Parameters

Table 15. Settings used for every result in this note.
SettingValueWhere
Formation windows1w, 1m, 3m, 6m, 12m, 12-1mmomentum.FORMATIONS
Holding periods5, 21, 63, 126, 252 trading daysmomentum.HOLDINGS
Group sizeTop and bottom 10%momentum.DECILE
Minimum price history252 trading daysmomentum.MIN_HISTORY
Execution delay1 trading daymomentum.EXEC_LAG
In-sample / out-of-sample2000-01-01 to 2015-12-31 / 2016-01-01 onwardmomentum_study.PERIODS
Significance gatet > 2momentum_study.main
Trading cost10 bp per side--cost-bps
Trend filterSPY above its 200-day average at month-endmomentum_study.TREND_SMA_DAYS
Bad-print threshold75% one-day move that reverses next dayprices.clean_closes

References

  1. Bailey, D. H. and López de Prado, M. (2014). The deflated Sharpe ratio: correcting for selection bias, backtest overfitting, and non-normality. Journal of Portfolio Management 40(5), 94–107.
  2. Barroso, P. and Santa-Clara, P. (2015). Momentum has its moments. Journal of Financial Economics 116(1), 111–120.
  3. Cohen, L., Malloy, C. and Pomorski, L. (2012). Decoding inside information. Journal of Finance 67(3), 1009–1043.
  4. Daniel, K. and Moskowitz, T. J. (2016). Momentum crashes. Journal of Financial Economics 122(2), 221–247.
  5. De Bondt, W. F. M. and Thaler, R. (1985). Does the stock market overreact? Journal of Finance 40(3), 793–805.
  6. Eggers, A. C. and Hainmueller, J. (2013). Capitol losses: the mediocre performance of congressional stock portfolios. Journal of Politics 75(2), 535–551.
  7. Faber, M. T. (2007). A quantitative approach to tactical asset allocation. Journal of Wealth Management 9(4), 69–79.
  8. Jegadeesh, N. (1990). Evidence of predictable behavior of security returns. Journal of Finance 45(3), 881–898.
  9. Jegadeesh, N. and Titman, S. (1993). Returns to buying winners and selling losers: implications for stock market efficiency. Journal of Finance 48(1), 65–91.
  10. Lehmann, B. N. (1990). Fads, martingales, and market efficiency. Quarterly Journal of Economics 105(1), 1–28.
  11. Newey, W. K. and West, K. D. (1987). A simple, positive semi-definite, heteroskedasticity and autocorrelation consistent covariance matrix. Econometrica 55(3), 703–708.
  12. Ziobrowski, A. J., Cheng, P., Boyd, J. W. and Ziobrowski, B. J. (2004). Abnormal returns from the common stock investments of the U.S. Senate. Journal of Financial and Quantitative Analysis 39(4), 661–676.