Academic re-test — Jegadeesh & Titman (1993)
Momentum is the empirical observation that stocks which have outperformed over the past several months tend to keep outperforming over the next few months. Jegadeesh and Titman's 1993 paper formalized the test of this effect, and it's been one of the most-replicated findings in equity finance ever since.
The number of US-listed stocks eligible for inclusion in the formation ranking grew substantially over the test window, from roughly 720 tickers in late 1992 to roughly 4,150 by the end of 2025. This is what survivorship bias looks like in the underlying data: the early years draw from a smaller, more concentrated subset of the market than the later years do. The line below shows the J=6 / K=6 (no-skip) strategy's eligible universe at each formation date — other strategies' counts differ by under 5% across the window. Returns in the early 1990s tend to be higher and more volatile than the long-run average for exactly this reason: the smaller universe produced higher cross-sectional dispersion. The methodology disclosure below addresses how the engine handles this.
When Jegadeesh and Titman wrote this paper in 1993, they were testing a question that sounds simple but had no good answer at the time. If a stock has gone up a lot over the last six months, is it more likely to keep going up, or is it about to revert back down? The reigning theory among economists was that markets are efficient and past prices tell you nothing about future ones, so any momentum should be quickly arbitraged away. But a lot of practitioners on Wall Street believed the opposite, that recent winners tend to keep winning for a while, and recent losers keep losing. The two views could not both be right.
So the authors built a clean experiment. They sorted every stock on the New York and American exchanges by how much it had returned over the past three to twelve months, depending on the test. They put the top performers into a winner portfolio and the worst performers into a loser portfolio, then tracked both forward over the next three to twelve months. If markets were truly efficient, the two portfolios should perform about the same going forward. If momentum was real, the winners should keep beating the losers.
Across every combination of formation period and holding period they tried, the winners outperformed the losers, and the gap was statistically significant. The strongest result came from forming portfolios on twelve months of past returns and holding them for three months, which generated about one percent per month of excess return. That number became one of the most-cited findings in modern finance and kicked off a thirty-year debate about whether momentum is a real anomaly, a risk premium for some hidden factor, or just an artifact of how the data is sliced. The fact that you are reading our re-test today is part of that conversation.
At each month \(t\), the engine works on a universe \(\mathcal{U}_t\) of every US-listed stock that was actively traded on the NYSE or Nasdaq during that month, with at least \(J\) months of prior price history available. Across the full 33-year window the universe touches 4,322 distinct tickers in total, but the count of eligible stocks at any given month varies substantially, growing from roughly 720 in late 1992 to roughly 4,150 by the end of 2025 (see the universe-ramp chart above). For each stock \(i \in \mathcal{U}_t\), the engine computes the cumulative log return over the formation window of length \(J\):
The cross-section is then ranked. The winner portfolio \(W_t\) is the top decile of that ranking, the bottom decile is the loser portfolio \(L_t\), and the remaining 80% of the universe is discarded for the purposes of this strategy:
Where \(Q_{0.90}\) is the 90th percentile of the cross-sectional return distribution at month \(t\). The winner portfolio size \(N = |W_t|\) tracks the eligible universe at month \(t\): roughly 72 stocks per month at the start of the test in late 1992, growing to roughly 415 stocks per month by 2025 as the eligible universe filled out.
Within each portfolio every stock is equal-weighted at \(w_i = 1/N\). The portfolio is held for \(K\) months, during which the realized monthly return at each holding-period month \(\tau \in \{t, t+1, \dots, t+K-1\}\) is:
The second term applies a one-way transaction cost of \(c = 25\) basis points at the formation date \(\tau = t\), doubled to account for both the entry trade at \(t\) and the implicit exit at \(t+K\). When the holding period ends, the engine re-runs the ranking on the new month's data and rolls into the next decile.
A given strategy is identified by the triple \((J, K, \text{Panel})\). Panel A starts the holding period the day after the formation window closes. Panel B inserts a one-week skip \(\delta\) between the formation and holding windows to control for short-term reversal contamination. Across all rebalances, the strategy's per-period return is the time-series average of the realized monthly returns:
Where \(T \approx 397\) is the number of monthly observations across the 33-year window from January 1993 to the current month. Cross-sectional returns are winsorized to \([-50\%, +100\%]\) per the architect's correction, which removes the influence of split-adjustment artifacts and bankruptcy-induced extreme prints without distorting the central tendency.
The null hypothesis is that the strategy generates no excess return relative to the universe mean. The test statistic is a Newey-West HAC-corrected \(t\)-statistic with optimal lag \(L = \lfloor 4\,(T/100)^{2/9} \rfloor\), accounting for the autocorrelation that arises from overlapping holding periods when \(K > 1\):
Where \(\widehat{\gamma}_\ell\) is the lag-\(\ell\) autocovariance of the monthly return series. The Sharpe ratio is the same expected return divided by the standard deviation of monthly returns, annualized by \(\sqrt{12}\):
Every symbol used above, in plain language:
Sixteen \((J, K)\) combinations \(\times\) two panels = 32 distinct strategies. Each cell below is one row in the results grid above.
For an example strategy with \(J = 6\) and \(K = 3\): the formation window looks back 6 months, the portfolio is held for 3 months, then the engine re-ranks and rolls forward. The cycle repeats every \(K\) months across the full 33-year window.