Cross-Sectional Momentum: The Equity-Native Version of the Trend Trade
The managed-futures industry is built on one idea: markets trend, so buy what is going up and sell what is going down, across dozens of futures markets at once. A CTA looks at gold, the Bund, soybeans, the yen, and asks each in turn — is this contract in an uptrend? That is time-series momentum: every market judged against its own past.
We do not trade futures. Our engine trades US equities, so the honest thing is not to claim a trend-following product we do not run, but to implement the question that is native to a stock universe. In a market of three thousand names all breathing the same macro air, “is it trending?” is nearly the same question three thousand times over — when the index rises, most stocks rise. The equity-native question is different and sharper: which names are beating their peers? That is cross-sectional momentum, and it is what the hero image above shows — a fleet of identical boats in identical wind, where the only signal that matters is relative position within the fleet.
The behavioral driver is the same one CTAs harvest — investors under-react to news, then herd into the move — but the implementation, the risks, and the failure modes are specific to equities. This article gives you the formula, the exact basket-selection code our engine runs, the measured performance of a momentum sleeve on our own point-in-time panels, and three uncomfortable findings the data handed us: the textbook refinement that did nothing, the hedge that hedged nothing, and the month the strategy lost a third of its value.
Time-Series vs Cross-Sectional: The Mapping
Both trades exploit the same anomaly. The difference is the benchmark each name is measured against:
| Time-series (CTA) | Cross-sectional (equities) | |
|---|---|---|
| Question | Is this market above its own past? | Is this stock beating its peers? |
| Universe | Dozens of futures markets | Thousands of stocks |
| Net exposure | Varies; can be flat or net short | Structurally near-neutral if long/short |
| Best environment | Sustained directional moves | Persistent leadership dispersion |
| Classic failure | Choppy, mean-reverting markets | Sharp leadership reversals |
The practical consequence: a cross-sectional book makes no market call. It can be fully invested through a bear market and still profit, provided the names it holds fall less than the names it shorts. That is a genuinely different risk than a CTA’s, and it is why the leadership rotations our market coverage tracks — like the broadening we documented in early July — matter more to this strategy than the index level does.
The Formula
The canonical academic definition is 12-1 momentum: the trailing twelve-month return, skipping the most recent month:
mom(i,t) = P(i, t−1 month) / P(i, t−12 months) − 1
rank all eligible stocks by mom(i,t) each month
long the top N (recent relative winners)
short the bottom N (recent relative losers)
hold until the next rebalance
The skipped month is not decoration. Over horizons of a few weeks, stocks tend to reverse rather than continue — a well-documented short-term effect driven by liquidity provision and bid-ask bounce. Including last month’s return therefore mixes a reversal signal into a continuation signal. The academic convention drops it to keep the two effects from cancelling.
That is the theory. We tested it on our own data, and it is the first place the textbook did not survive contact.
What the Momentum Signal Is Actually Worth
Using the same point-in-time panels and the same information-coefficient harness from the previous article — monthly rank correlation against next-month returns, over a production-spec universe (median about 2,660 liquid US names) — here is what each momentum definition measured:
| Definition | Mean IC | t-stat | % months positive |
|---|---|---|---|
| 12-1 momentum (skip last month) | 1.89% | 1.44 | 60.2% |
12-0 momentum (plain, our mom12) | 1.94% | 1.38 | 60.2% |
6-month momentum (our mom6) | 2.02% | 1.67 | 55.5% |
Two honest readings. First, the celebrated skip-month refinement bought us nothing — 1.89% versus 1.94% is a rounding error, and if anything the plain version scored higher. Our live composite uses the plain 6- and 12-month definitions, and this is the evidence for why we did not complicate them: a refinement that cannot demonstrate its value in your own data and universe is decoration you would have to maintain forever.
Second, and more importantly: momentum is the weakest factor we trade. Compare these t-statistics of 1.4 to 1.7 with the fundamental factors from the previous article — interest coverage at 6.08, net share issuance at 5.95, cash profitability at 6.49. By conventional standards these momentum readings are not even statistically significant. That is not a reason to discard momentum; it is a reason to be precise about its job. In our composite momentum is a regime driver, a fast-moving counterweight to slow fundamental signals that would otherwise buy value traps all the way down. It is a supporting instrument, and we should not pretend the data says otherwise.
The Implementation: From Score to Basket
A score is not a portfolio. Turning ranks into holdings is where a real engine earns its keep, and the code below is the actual selection logic our platform runs — note what it does not do, which is blindly take the top N every month:
def _select(order, rank, prev_held, n, buffer, exclude):
"""N names from `order`: keep prev-held names within rank < N+buffer,
then fill from the best non-held; never pick from `exclude`."""
kept = sorted(
(t for t in prev_held
if t not in exclude and rank.get(t, 1 << 30) < n + buffer),
key=lambda t: rank[t],
)[:n]
keptset = set(kept)
fill = [t for t in order if t not in keptset and t not in exclude][: n - len(kept)]
return sorted(kept + fill)
def _buffer(config):
if config.buffer is not None:
return config.buffer
return max(1, round(0.4 * config.n_long - 2)) # auto: 10 at N=30
This is rank hysteresis. A name you already hold is not sold the moment it slips out of the top 30 — it is kept while its rank stays inside 30 + buffer, which for a 30-name book means rank 40. Only when it falls past that line does it get replaced by the best name you do not own. The economics are simple: the difference in expected return between the 30th and 38th ranked stock is small, while the cost of selling one and buying the other is certain.
How much churn does that save? We ran the sleeve twice, changing only that parameter:
| Setting | Monthly turnover of the long book |
|---|---|
| No hysteresis (buffer = 0) | 34.5% |
| Production auto-buffer (10 at N=30) | 27.0% |
7.5 percentage points a month — a fifth of the trading eliminated — for a parameter that changes nothing about the investment thesis. Momentum is an inherently high-turnover strategy (replacing over a quarter of the book every month, versus a few percent for a value sleeve), which is exactly why this matters here more than anywhere else. Every avoided trade is spread and slippage you keep, a thread we pick up when we get to execution and market impact later in this series.
What the Sleeve Returned
We then ran the full sleeve: each month, rank the universe by 12-1 momentum, select 30 longs and 30 shorts through the real basket code above, hold equal-weight for the month, compound. The window is January 2017 through May 2026 — 113 months.
| Book | Total return (113 months, gross) | Annualized vol |
|---|---|---|
| Momentum longs (top 30) | +476.5% | 37.3% |
| Momentum shorts (bottom 30) | −75.6% | 44.1% |
| Long–short spread | +831.5% | 37.3% |
| SPY (same window) | +277.6% | — |
| QQQ (same window) | +516.5% | — |
The long book beat SPY by a wide margin and still trailed QQQ — a recurring pattern in this series, and a reminder that in a decade led by large-cap technology, the honest benchmark question is which index you should have been compared against. The short book fell 75.6%, confirming that the losers really did keep losing: the anomaly is genuine in both directions.
Now the third uncomfortable finding, hiding in the volatility column. The long-only book ran at 37.3% annualized volatility. The long-short book, supposedly hedged, also ran at 37.3%. Adding a short leg reduced volatility by essentially nothing. The reason is in the data: the short book is itself violently volatile (44.1%) and moves with the long book, correlation 0.59. Momentum losers are typically high-beta, damaged growth names, so shorting them does not hedge a portfolio of high-beta winners — it doubles down on the same factor bet from the other side. The spread earns more, but a market-neutral construction is not automatically a low-risk one.
The Risk: Crashes, Churn, and Crowding
Momentum crashes. This is the strategy’s signature failure and it is not subtle in our numbers. The long-short spread’s worst month was December 2022 at −37.1%, followed by August 2019 (−24.0%), October 2025 (−22.0%), June 2023 (−19.5%), and November 2024 (−19.3%). The monthly distribution is negatively skewed (−0.45) with fat tails (excess kurtosis 1.08) around a 61.1% win rate. That is the classic momentum profile: win often, lose enormously when you lose. These reversals cluster where theory predicts — at violent turns in leadership, typically when a beaten-down cohort rebounds hardest and the short book explodes upward while the crowded long book unwinds.
Turnover and costs. Even with hysteresis the book replaces 27% of its names monthly — roughly the entire portfolio over four months. A signal with a 1.9% information coefficient does not have much cushion to pay spreads, slippage, and market impact out of. This is the factor where implementation quality most directly determines whether a real edge survives to the P&L.
Crowding and decay. Momentum is the most widely known, most heavily productized anomaly in equities — dozens of ETFs run versions of the calculation above, on similar universes, rebalancing on similar calendars. Crowded factors are prone both to decay and to sharper unwinds when everyone reaches for the exit together. Monitoring live factor performance for evidence of decay, and deciding when a factor has earned retirement, is an operations discipline we take up near the end of this series; the rest of the curriculum is on the Macro & Strategy hub.
select_basket hysteresis — and writes its results to JSON; this article quotes only that file. Backtested results are hypothetical, gross of costs, cover 2017–2026, and are not a promise about the future.
The AlphaEdge Take
Cross-sectional momentum is the honest equity translation of the CTA trade: stop asking whether the market is trending and start ranking names against their peers — a question you can actually test on stock data. But our own measurements argue for humility about it. The textbook skip-month refinement added nothing (1.89% versus 1.94% information coefficient); the signal is the weakest in our factor set by a wide margin, with a t-statistic near 1.4 against roughly 6 for cash-flow quality; the short leg hedged almost none of the volatility because losers and winners move together; and the spread lost 37% in a single month when leadership turned. Trade it as a fast-moving complement to slow fundamental factors, damp its churn with rank hysteresis, and size it for the crash that is coming rather than the win rate that flatters it.