What is stock market momentum?
Momentum is a price pattern: stocks with the best recent performance tend to keep performing better over the following months, and the worst ones tend to keep doing worse.
That clashes with the efficient market hypothesis. In its weak form, the hypothesis says that looking at past prices should not be enough to beat the market systematically. Momentum shows that it is enough, at least on average and with a particular risk we will get to further down.
It should not be confused with technical analysis. Academic momentum does not look for support levels or chart patterns: it ranks thousands of stocks by a single number and bets that the ranking persists. If you are curious why technical analysis can still work, I explained it in why technical analysis works, even though it shouldn't.
02How do you build a momentum strategy?
The standard version measures each stock's return from 12 months to 2 months ago, buys the winners and sells the losers, and repeats the process every month.
The 12–2 signal: eleven months of history, one month off
The last month is ignored because over short horizons prices tend to reverse.
Written as a formula, the signal of stock \(i\) in month \(t\) is:
$$MOM_{i,t} = \prod_{k=2}^{12} \left(1 + r_{i,t-k}\right) - 1$$Every piece of that formula has a reason: why it is a product and not a sum, why it starts at 12, and why it ends at 2. The next section derives it from scratch.
03The math of momentum, step by step
The formula multiplies returns because that is how a real investment grows, and it uses the 12-to-2-month window because it is the only band where winners keep winning: in the last month and beyond one year, prices tend to reverse.
This section explains why each part of the formula is the way it is, and then uses it to understand where the profit comes from, when it fails, and how the risk is managed. Each step builds on the previous one, and you need nothing more than algebra and a bit of probability.
STEP 0Prerequisites
Four probability tools show up throughout this section. If you already know them, feel free to skip this step.
Expectation. \(E[X]\) is the average value a random variable \(X\) takes if we repeat the experiment many times. For returns, \(E[r_i] = \mu_i\) is the expected average return of stock \(i\). Expectation is linear: \(E[aX + bY] = a\,E[X] + b\,E[Y]\).
Variance. It measures how far \(X\) strays from its average. Its square root, \(\sigma\), is the volatility.
$$\begin{aligned} \operatorname{Var}(X) &= E\left[(X - E[X])^2\right] \\ &= E[X^2] - E[X]^2 \\ \sigma_X &= \sqrt{\operatorname{Var}(X)} \end{aligned}$$Covariance. It measures whether two variables move together. It is positive if, when one is above its average, the other tends to be too, and negative if they tend to move in opposite directions.
$$\begin{aligned} &\operatorname{Cov}(X, Y) \\ &= E\left[(X - E[X])(Y - E[Y])\right] \\ &= E[XY] - E[X]\,E[Y] \end{aligned}$$From the last equality we get an identity used several times later on: \(E[XY] = \operatorname{Cov}(X,Y) + E[X]\,E[Y]\). Also, covariance is linear in each argument, so \(\operatorname{Cov}(X, Y + Z)\) equals \(\operatorname{Cov}(X,Y) + \operatorname{Cov}(X,Z)\); if \(X\) and \(Y\) are independent, \(\operatorname{Cov}(X,Y) = 0\); and \(\operatorname{Cov}(X,X) = \operatorname{Var}(X)\).
Autocovariance. It is the covariance of a series with itself shifted in time: \(\operatorname{Cov}(r_{t-1}, r_t)\). If it is positive, a good month tends to be followed by another good one: that is momentum. If it is negative, a good month tends to be followed by a bad one: that is reversal. The whole section revolves around the sign of this quantity.
Notation: \(P_{i,t}\) is the price of stock \(i\) at the close of month \(t\), \(D_{i,t}\) the dividends paid during that month, and \(r_{i,t}\) its monthly return. \(N\) is the number of stocks in the universe. We assume means and covariances do not change over time (stationarity): \(E[r_{i,t}] = \mu_i\) for every \(t\).
STEP 1From price to return
The idea of a return comes from compound interest. If you put capital \(C\) at a rate \(r\) for one period, at the end you have the capital plus the interest:
$$C + C\,r = C\,(1 + r)$$A stock works the same way, except we do not know the rate in advance: we measure it afterwards. At the start of the month you invest \(P_{i,t-1}\) dollars buying a share. At the end of the month you have two things: the share, now worth \(P_{i,t}\), and the dividends you collected, \(D_{i,t}\). The return \(r_{i,t}\) is defined as the rate that, applied to the initial capital, gives exactly what you have at the end:
$$P_{i,t-1}\,(1 + r_{i,t}) = P_{i,t} + D_{i,t}$$It is the same compound-interest equation, with \(C = P_{i,t-1}\) and the final amount equal to price plus dividends. Solving for \(r_{i,t}\), dividing both sides by \(P_{i,t-1}\) and subtracting 1:
A month's return is how much the investment grew, dividends included.
The term \(1 + r_{i,t}\) is the growth factor: if it equals 1.05, every dollar invested turned into 1.05 dollars. For example, if the share was worth 100, ended at 103 and paid a dividend of 2, then \(100\,(1 + r) = 105\), so \(r = 5\%\). Dividends are included because an investor cares about total return. A stock that falls 2% but paid a 3% dividend left a 1% gain.
STEP 2Why returns multiply
The momentum signal has to answer a single question: how much did this stock gain over the last eleven months? What we have is eleven separate monthly returns, one per month, and we need to combine them into a single number so we can rank the stocks. There are two ways that look reasonable: add them up or multiply the \(1 + r\) factors. This step shows that the product is the right one, and then why the sum, which looks simpler, gives the wrong answer.
Suppose you invest \(W_{t-k}\) dollars and reinvest everything every month. At the end of the first month you have \(W_{t-k}(1 + r_{t-k+1})\). That whole amount is what gets invested the following month, so at the end of the second month you have \(W_{t-k}(1 + r_{t-k+1})(1 + r_{t-k+2})\). Repeating the argument \(k\) times:
$$W_t = W_{t-k}\prod_{j=0}^{k-1}\left(1 + r_{i,t-j}\right)$$The symbol \(\prod\) is a product, just as \(\sum\) is a sum.
Now we want a single number that summarizes the \(k\) months: the cumulative return \(R\). It is defined just like in step 1, but treating the whole period as if it were one. It is the rate that, applied once to the initial capital, gives the final capital:
$$W_{t-k}\,(1 + R) = W_t$$Solving, dividing by \(W_{t-k}\) and subtracting 1:
$$R = \frac{W_t}{W_{t-k}} - 1$$And replacing \(W_t\) with the formula above, the initial capital cancels out:
The cumulative return over several months is the product of the \(1 + r\) factors, minus 1. It does not depend on how much you invested.
That \(W_{t-k}\) cancels out matters: the cumulative return does not depend on how much you invested, only on each month's return. And this is exactly the shape of the momentum signal, \(MOM = \prod(1 + r) - 1\), taking months \(t-12\) through \(t-2\). For example, with 100 dollars and two months of +10% and +5%, you end up with \(100 \times 1.10 \times 1.05 = 115.5\), so \(R = 115.5/100 - 1 = 15.5\%\): a bit more than the sum, 15%, because the second month's 5% also applies to the first month's gain.
There is a way to check this is correct. Without dividends, each factor \(1 + r\) is a ratio of consecutive prices, and in the product every intermediate price appears once on top and once on the bottom, so it cancels (this is called a telescoping product):
The product of the monthly returns is exactly the final price divided by the initial one.
Proof by induction of the telescoping product
Let \((a_k)_{k \geq 0}\) be a sequence of real numbers, all nonzero. We want to prove that, for every \(n \geq 1\), the proposition \(\mathcal{P}(n)\) holds:
$$\mathcal{P}(n):\quad \prod_{k=1}^{n}\frac{a_k}{a_{k-1}} = \frac{a_n}{a_0}$$Base case (\(n = 1\)). The product has a single factor:
$$\prod_{k=1}^{1}\frac{a_k}{a_{k-1}} = \frac{a_1}{a_0}$$which is exactly the right-hand side of \(\mathcal{P}(1)\). So \(\mathcal{P}(1)\) is true.
Inductive hypothesis. Fix any \(n \geq 1\) and assume \(\mathcal{P}(n)\) is true, that is:
$$\text{(IH)}\qquad \prod_{k=1}^{n}\frac{a_k}{a_{k-1}} = \frac{a_n}{a_0}$$Inductive claim. We want to prove, using (IH), that \(\mathcal{P}(n+1)\) is also true:
$$\prod_{k=1}^{n+1}\frac{a_k}{a_{k-1}} = \frac{a_{n+1}}{a_0}$$Inductive step. We start from the left-hand side of the claim and transform it until we reach the right-hand side.
(1) By definition of the product, the product up to \(n+1\) is the product up to \(n\) multiplied by factor number \(n+1\):
$$\prod_{k=1}^{n+1}\frac{a_k}{a_{k-1}} = \left(\prod_{k=1}^{n}\frac{a_k}{a_{k-1}}\right)\cdot\frac{a_{n+1}}{a_n}$$(2) The product in parentheses is exactly the left-hand side of (IH), so we replace it with \(\frac{a_n}{a_0}\):
$$\left(\prod_{k=1}^{n}\frac{a_k}{a_{k-1}}\right)\cdot\frac{a_{n+1}}{a_n} = \frac{a_n}{a_0}\cdot\frac{a_{n+1}}{a_n}$$(3) Since \(a_n \neq 0\), we can cancel it, because it appears once in the numerator and once in the denominator:
$$\frac{a_n}{a_0}\cdot\frac{a_{n+1}}{a_n} = \frac{a_n \cdot a_{n+1}}{a_0 \cdot a_n} = \frac{a_{n+1}}{a_0}$$Chaining (1), (2) and (3), the left-hand side of the claim equals \(\frac{a_{n+1}}{a_0}\), which is the right-hand side. So \(\mathcal{P}(n) \Rightarrow \mathcal{P}(n+1)\).
Conclusion. \(\mathcal{P}(1)\) holds, and for every \(n \geq 1\), if \(\mathcal{P}(n)\) holds then \(\mathcal{P}(n+1)\) holds. By the principle of induction, \(\mathcal{P}(n)\) is true for every \(n \geq 1\).
Applied to prices: for a period of \(m\) months ending at \(t\), define \(a_j = P_{i,t-m+j}\) for \(j = 0, 1, \dots, m\). Then \(a_0 = P_{i,t-m}\) is the initial price, \(a_m = P_{i,t}\) is the final one, and each factor is one month's \(1 + r\) (without dividends):
$$\begin{aligned} \frac{a_j}{a_{j-1}} &= \frac{P_{i,t-m+j}}{P_{i,t-m+j-1}} \\ &= 1 + r_{i,t-m+j} \end{aligned}$$By the previous result:
$$\begin{aligned} \prod_{j=1}^{m}(1 + r_{i,t-m+j}) &= \frac{a_m}{a_0} \\ &= \frac{P_{i,t}}{P_{i,t-m}} \end{aligned}$$Prices are always positive, so the nonzero condition is satisfied.
Both calculations land in the same place: the product of the \(1 + r\) factors equals the final price divided by the initial one. In other words, the signal formula measures exactly how much your money grew, which answers the question we started with.
So why not add? Let's see what the product has that the sum doesn't. With two months, expanding:
$$\begin{aligned} &(1 + r_1)(1 + r_2) \\ &= 1 + r_1 + r_2 + r_1 r_2 \end{aligned}$$Subtracting 1, the cumulative return is \(R = r_1 + r_2 + r_1 r_2\). So the actual return is the sum plus an extra term, \(r_1 r_2\). That term is interest on interest: what the first month's gain (or loss) earns in the second month. The simple sum ignores it, so it is not the actual return but an approximation, which only works well when returns are small and \(r_1 r_2\) is negligible.
The error matters most for volatile stocks. Take a stock that goes up by a percentage \(a\) and then down by the same \(a\), with \(r_1 = a\) and \(r_2 = -a\):
The sum ignores interest on interest: a stock that goes up and down by the same amount loses \(a^2\), and the sum doesn't see it.
The sum says the stock ended flat, but it actually lost \(a^2\). And that error grows with the square of \(a\): the more volatile the stock, the more the sum overstates it. With numbers:
| Stock | Month 1 | Month 2 | Sum | Actual return |
|---|---|---|---|---|
| A (stable) | +10% | −10% | 0% | 1.10 × 0.90 − 1 = −1% |
| B (volatile) | +50% | −50% | 0% | 1.50 × 0.50 − 1 = −25% |
That is the \(-a^2\) formula in action: \(-(0.10)^2 = -1\%\) and \(-(0.50)^2 = -25\%\). With the sum, A and B tie; with the product, B ends up much worse, which is what happened to whoever held it. If the momentum signal used the sum, it would rank volatile stocks higher than they deserve, and the strategy would buy losers disguised as winners.
STEP 3The log version
You don't need this step to compute the signal: the product from step 2 is enough. It is here because you will find the signal written with logarithms in many papers, and it is worth understanding why it is the same thing.
The problem is that products are awkward for statistics. Means, variances and regressions, like the ones in step 8, are built on sums. In step 2 we saw that adding simple returns gives the wrong number. What we need is a transformation that turns the product into a sum without losing accuracy, and that is exactly what the logarithm does.
The logarithm turns products into sums, because \(\ln(ab) = \ln a + \ln b\). Defining the log return \(\ell_{i,t} = \ln(1 + r_{i,t})\) and applying that property many times:
$$\begin{aligned} \ln\left(1 + R_{i,t}\right) &= \ln\prod_{k=2}^{12}\left(1 + r_{i,t-k}\right) \\ &= \sum_{k=2}^{12}\ln\left(1 + r_{i,t-k}\right) \\ &= \sum_{k=2}^{12}\ell_{i,t-k} \end{aligned}$$Careful: the logarithm changes the values. In general \(\ln(1 + R) \neq 1 + R\), and it is not even equal to \(R\), except approximately when \(R\) is small. So why is it valid to use \(\ln(1+R)\) as the signal instead of \(R\)? Because the signal is not used for its value: it is used to rank the stocks and form the deciles (step 7). Two different signals that produce the same ranking build exactly the same portfolios. What needs proving is that the logarithm preserves order.
First, that it is well defined. The logarithm only exists for positive numbers. Since a price is never negative, a stock can lose at most all its value: \(R \geq -1\), and unless the company goes bankrupt, \(R > -1\). So \(1 + R > 0\) and \(\ln(1 + R)\) exists.
Second, that it is strictly increasing. The derivative of the logarithm is positive over its whole domain, that is, for every \(x > 0\):
$$\frac{d}{dx}\ln x = \frac{1}{x} > 0$$By the mean value theorem, if \(0 \lt x \lt y\), there is a \(c\) between them such that \(\ln y - \ln x = \frac{1}{c}(y - x)\). Since \(\frac{1}{c} > 0\) and \(y - x > 0\), the product is positive: \(\ln y > \ln x\). That is, \(x \lt y \Rightarrow \ln x \lt \ln y\).
Third, that the converse also holds. If \(\ln x \lt \ln y\), it cannot be that \(x = y\) (they would give the same logarithm) nor \(x > y\) (by the above it would give \(\ln x > \ln y\)). That leaves only \(x \lt y\). Putting both directions together, and adding 1 to each side, which doesn't change the order either:
The logarithm changes the values of the signal, but not the order of the stocks. That is why it builds the same portfolios.
With numbers you can see the values change but the ranking doesn't:
| Stock | \(R\) | \(1 + R\) | \(\ln(1 + R)\) | Rank |
|---|---|---|---|---|
| A | +26.15% | 1.2615 | 0.2323 | 1.º |
| B | +10.00% | 1.1000 | 0.0953 | 2.º |
| C | −15.00% | 0.8500 | −0.1625 | 3.º |
The three columns have different numbers, but they rank the same way: A, B, C. What the logarithm does not preserve is distances (A is 16 points ahead of B in \(R\) and 0.137 in logs), but that doesn't matter, because the deciles are built from the order alone.
So ranking by cumulative return or by the sum of log returns gives exactly the same portfolios. Some papers use the log version because sums are easier to handle statistically. For small returns, also, \(\ln(1+r) \approx r\), so the sum of logs resembles the simple sum, but it is not equal: the logarithm corrects precisely the error the previous table showed.
STEP 4A complete worked example
A stock had these monthly returns. In month \(t-1\) it rose 8%, but that is ignored (step 6 explains why):
| Month | t−12 | t−11 | t−10 | t−9 | t−8 | t−7 | t−6 | t−5 | t−4 | t−3 | t−2 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| \(r\) | +4% | −2% | +6% | +3% | −1% | +5% | +2% | −3% | +7% | +1% | +2% |
| 100 dollars become | 104.00 | 101.92 | 108.04 | 111.28 | 110.16 | 115.67 | 117.99 | 114.45 | 122.46 | 123.68 | 126.15 |
The example stock's signal is 26.15%: more than the 24% that adding would give.
The simple sum would give 24%, which understates what the stock actually gained. With logs, \(\sum \ell = 0.2323\), and \(e^{0.2323} - 1 = 26.15\%\): the same result by the other route. This number is computed for every stock in the universe, and what gets used is each one's position in the ranking.
STEP 5Why the window starts at 12 months
Summary: where the 12–2 window comes from. The window doesn't come from a formula, but from decades of empirical studies that ranked thousands of stocks by past return and measured what they returned afterwards. Looking at the last month, winners flip. Looking at the last 2 to 12 months, they keep winning. Looking at 3 to 5 years, they flip again.
That is why the signal starts at \(t-12\) and ends at \(t-2\): it keeps the band where the trend continues and discards the last month, where prices tend to reverse. Part of that first reversal is the bid-ask bounce derived in step 6.
Two things should not be confused. The spread bounce appears between any two consecutive months and is worth cents: it is noise. The momentum trend is the 11-month cumulative return, tens of percent, and it is what predicts. Inside the window the noise cancels out (step 6); what remains is the trend.
The sign of the autocovariance of returns depends on the horizon. Momentum shows up only in an intermediate band:
Sign of the autocorrelation by horizon
Qualitative sketch: shows the sign of each effect, not its size
Why not more than 12 months. De Bondt and Thaler (1985) found that the stocks that fell the most over the past 3 to 5 years later outperform the ones that rose the most. Their interpretation is that the market overreacts: it pushes prices too far and corrects them over time. If the formation window spanned several years, the signal would mix momentum (which says "buy the winners") with this long-term reversal (which says "buy the losers"), and the two effects would partly cancel out. Twelve months is the longest horizon before the reversal kicks in.
STEP 6Why the window ends at t−2
Something similar happens at the other end. Jegadeesh (1990) and Lehmann (1990) showed that at one month (and at one week) returns have negative autocovariance: the stock that rose the most last month tends to fall a little the following month. If the signal included month \(t-1\), it would reward stocks that, because of this effect, are likely to fall right when you buy them.
Part of that reversal has nothing to do with what investors think: it is an artifact of how prices are recorded. To see it you need to understand how a stock is bought and sold.
Bid, ask and spread. In the market there are always people willing to buy and people willing to sell. The bid is the highest price some buyer offers to pay: if you want to sell right now, you sell at that price. The ask is the lowest price at which some seller agrees to sell: if you want to buy right now, you buy at that price. The ask is always a little higher than the bid, and the difference is called the spread, \(c\). For example: bid 99.95, ask 100.05 and spread \(c = 0.10\).
The "true" value. Between the bid and the ask is the midpoint, 100 in the example. We call it \(p^*_t\) and think of it as the real value of the stock in period \(t\): it is not a price anyone trades at, but the center around which trading happens. That value only changes when new information arrives, like an earnings report or a news item.
The price that gets recorded. The closing price in the data is the price of the period's last trade. If a buyer initiated that trade, it happened at the ask: half a spread above the true value, 100.05. If a seller initiated it, it happened at the bid: half a spread below, 99.95. Roll (1984) writes both possibilities in a single formula, with a variable \(q_t\) that indicates who made the last trade:
$$\begin{aligned} p_t &= p^*_t + \frac{c}{2}\,q_t \\ q_t &= \begin{cases} +1 & \text{buy (at the ask)} \\ -1 & \text{sell (at the bid)} \end{cases} \end{aligned}$$Why \(c/2\)? Because \(p^*_t\) sits right in the middle between the bid and the ask. By definition, the spread is the total distance between the two prices, and the true value is their average:
$$\begin{aligned} c &= \text{ask} - \text{bid} \\ p^*_t &= \frac{\text{ask} + \text{bid}}{2} \end{aligned}$$Subtracting, the distance from the center to each end is half the spread:
$$\begin{aligned} \text{ask} - p^*_t &= \text{ask} - \frac{\text{ask} + \text{bid}}{2} \\ &= \frac{\text{ask} - \text{bid}}{2} = \frac{c}{2} \\[6pt] p^*_t - \text{bid} &= \frac{\text{ask} + \text{bid}}{2} - \text{bid} \\ &= \frac{\text{ask} - \text{bid}}{2} = \frac{c}{2} \end{aligned}$$In other words, the spread is split equally on each side of the center: half a spread up takes you to the buying price (ask = \(p^*_t + c/2\)) and half a spread down to the selling price (bid = \(p^*_t - c/2\)). That is why \(q_t\) only needs to be \(+1\) or \(-1\): it picks which side of the center the recorded price moved to, and \(c/2\) says by how much. It is not a variance but a fixed distance, like the radius of an interval \([p^* - c/2,\ p^* + c/2]\) of width \(c\).
If \(q_t = +1\), the formula gives \(p^*_t + c/2\), which is the ask. If \(q_t = -1\), it gives \(p^*_t - c/2\), which is the bid. With the numbers from the example, \(100 \pm 0.05\).
The effect, without formulas. Suppose the true value stays put at 100 and the last trade of each day alternates between a buy and a sell. The recorded closes would be 100.05, 99.95, 100.05, 99.95, and so on. The daily changes would be −0.10, +0.10, −0.10: every drop is followed by a rise, and every rise by a drop.
The bid-ask bounce
The true value doesn't move, but the recorded price goes up and down
In reality it doesn't alternate so neatly, but the idea is the same: the recorded price carries a \(\pm c/2\) noise that goes back and forth. Roll's model measures how much fake reversal that noise produces. To do so it assumes two things:
- The true value is a random walk. Each period it changes due to new information, \(\varepsilon_t\): \(p^*_t = p^*_{t-1} + \varepsilon_t\). Since news can't be anticipated, one period's change says nothing about the next one's, so the covariance between changes \(\Delta p^*_t = \varepsilon_t\) of different periods is zero. The assumption is chosen on purpose: if the true value has no reversal at all, any reversal that shows up in the math has to come from the spread.
- Who trades last is like a coin flip. \(q_t\) is \(+1\) or \(-1\) with probability \(1/2\) each, regardless of what happened in earlier periods or what news came out. Yesterday's close being a buy says nothing about whether today's will be.
With these assumptions you can compute the covariance between today's price change and yesterday's. It comes out to \(-c^2/4\): negative, even though the true value has no reversal at all. The full derivation is in the expandable section; below is the same idea with an example.
The math: why the covariance is \(-c^2/4\)
With those assumptions, \(E[q_t] = \tfrac12(+1) + \tfrac12(-1) = 0\) and \(E[q_t^2] = \tfrac12(+1)^2 + \tfrac12(-1)^2 = 1\), so \(\operatorname{Var}(q_t) = 1 - 0^2 = 1\).
What we want to compute and why. In step 0 we saw that a reversal is a negative autocovariance: one period's change tends to go the opposite way of the previous period's. So the question is: in Roll's model, what is the covariance between today's price change and yesterday's? If it is negative, the model produces reversal even though the true value has none.
The two changes. The recorded price change in period \(t\) is the difference between two closes. Replacing each close with Roll's formula:
$$\begin{aligned} \Delta p_t &= p_t - p_{t-1} \\ &= \left(p^*_t + \tfrac{c}{2}q_t\right) \\ &\quad - \left(p^*_{t-1} + \tfrac{c}{2}q_{t-1}\right) \\ &= \Delta p^*_t + \frac{c}{2}\left(q_t - q_{t-1}\right) \end{aligned}$$The previous period's change, \(\Delta p_{t-1}\), is the same formula shifted one period back: where it said \(t\) it now says \(t-1\), and where it said \(t-1\) it now says \(t-2\):
$$\begin{aligned} \Delta p_{t-1} &= p_{t-1} - p_{t-2} \\ &= \Delta p^*_{t-1} + \frac{c}{2}\left(q_{t-1} - q_{t-2}\right) \end{aligned}$$Notice that \(q_{t-1}\) appears in both: with a minus sign in today's change and a plus sign in yesterday's. It is yesterday's close, which is both the end of yesterday's change and the start of today's. If that close landed high (at the ask), it pushed yesterday's change up and today's down. That is where the reversal will come from.
Two more properties of covariance. Besides the ones from step 0, we will use that constants factor out, \(\operatorname{Cov}(aX, bY) = ab\operatorname{Cov}(X,Y)\), and that covariance distributes like a product:
$$\begin{aligned} &\operatorname{Cov}(X_1 + X_2,\; Y_1 + Y_2) \\ &= \operatorname{Cov}(X_1, Y_1) + \operatorname{Cov}(X_1, Y_2) \\ &\quad + \operatorname{Cov}(X_2, Y_1) + \operatorname{Cov}(X_2, Y_2) \end{aligned}$$Both follow directly from the definition \(\operatorname{Cov}(X,Y) = E[XY] - E[X]E[Y]\) and the linearity of expectation.
Step a) Separate the parts. Each change has a true-value part (\(\Delta p^*\)) and a spread part (the one with the \(q\)s). Distributing, the covariance splits into four terms:
$$\begin{aligned} &\operatorname{Cov}\left(\Delta p_t, \Delta p_{t-1}\right) \\ &= \operatorname{Cov}\left(\Delta p^*_t,\; \Delta p^*_{t-1}\right) \\ &\quad + \operatorname{Cov}\left(\Delta p^*_t,\; \tfrac{c}{2}(q_{t-1} - q_{t-2})\right) \\ &\quad + \operatorname{Cov}\left(\tfrac{c}{2}(q_t - q_{t-1}),\; \Delta p^*_{t-1}\right) \\ &\quad + \operatorname{Cov}\Big(\tfrac{c}{2}(q_t - q_{t-1}), \\ &\qquad\qquad\ \tfrac{c}{2}(q_{t-1} - q_{t-2})\Big) \end{aligned}$$The first three are zero. The first, because the true value is a random walk and its changes in different periods have zero covariance. The second and third, because who trades last (the \(q\)s) is independent of the news (the \(\Delta p^*\)s), and independent variables have zero covariance. Only the fourth remains, from which we pull out the constants, \(\frac{c}{2}\cdot\frac{c}{2} = \frac{c^2}{4}\):
$$\begin{aligned} &\operatorname{Cov}\left(\Delta p_t, \Delta p_{t-1}\right) \\ &= \frac{c^2}{4}\operatorname{Cov}\left(q_t - q_{t-1},\; q_{t-1} - q_{t-2}\right) \end{aligned}$$Step b) Expand the remaining covariance. It distributes just like the product \((a - b)(c - d) = ac - ad - bc + bd\):
$$\begin{aligned} &\operatorname{Cov}\left(q_t - q_{t-1},\; q_{t-1} - q_{t-2}\right) \\ &= \operatorname{Cov}(q_t, q_{t-1}) \\ &\quad - \operatorname{Cov}(q_t, q_{t-2}) \\ &\quad - \operatorname{Cov}(q_{t-1}, q_{t-1}) \\ &\quad + \operatorname{Cov}(q_{t-1}, q_{t-2}) \end{aligned}$$Step c) See what survives. The \(q\)s of different periods are independent, so the first, second and fourth terms are zero. The third compares \(q_{t-1}\) with itself, and by step 0, \(\operatorname{Cov}(X, X) = \operatorname{Var}(X)\), which for \(q\) equals 1. It is the only term that survives, and it is precisely the shared close:
$$\begin{aligned} &\operatorname{Cov}\left(\Delta p_t, \Delta p_{t-1}\right) \\ &= \frac{c^2}{4}\left[0 - 0 - \operatorname{Var}(q_{t-1}) + 0\right] \\ &= -\frac{c^2}{4} \end{aligned}$$Even if the true value is unpredictable, the bid-ask bounce makes two consecutive price changes tend to go in opposite directions.
The example. Stock X never changes value: it is worth 100 the whole time. In the market you buy at 100.05 (ask) and sell at 99.95 (bid). Each month's closing price is the last trade's, which was sometimes a buy and sometimes a sell.
| Month end | Last trade | Recorded close | Change in the data |
|---|---|---|---|
| March | sell | 99.95 | |
| April | buy | 100.05 | +0.10 |
| May | sell | 99.95 | −0.10 |
In the data, X "rose" in April and "fell" in May. But the company didn't change: it is just the price bouncing between 99.95 and 100.05.
Now you build the portfolio on May 1.
- Without skipping April: the signal includes April's "rise", so X looks a bit more of a winner than it is. You buy it, and in May it "falls" 0.10. You lose exactly the fake rise that made you pick it.
- Skipping April: the signal looks only up to the end of March. April's fake rise has no say in whether you pick X. In May it may bounce up or down, but that no longer has anything to do with why you picked it.
With thousands of stocks, without skipping the month the strategy over-picks the ones that had a fake rise at the end, and those then fall. Skipping the month, that noise stops influencing the selection, and on average it cancels out.
The negative covariance, seen in data
400 simulated months of Roll's model, with a 10-cent spread. Each dot is a month: on the horizontal axis, how much the price changed the previous month; on the vertical axis, how much it changed that month.
True value (no spread)
Recorded price (with spread)
How to read the chart on the right. The dots don't pile up on one side: there are as many months where the price rose as where it fell. What matters is how yesterday's and today's changes combine. Counting the dots in each quadrant:
| Quadrant | Yesterday | Today | Dots |
|---|---|---|---|
| Top left | fell | rose | 121 |
| Bottom right | rose | fell | 121 |
| Top right | rose | rose | 81 |
| Bottom left | fell | fell | 77 |
There are more dots in the two "crossed" corners (242) than in the two "matching" ones (158). That is: it is more common for today's change to go the opposite way of yesterday's than the same way. That is what a negative covariance means, and it is why the line slopes down from left to right.
An honest caveat. This spread effect is small, a matter of cents, and it weighs mostly on small, illiquid stocks, where the spread is wider. The main reason to skip the month is the real one-month reversal documented by Jegadeesh (1990), which also has other causes, such as a large investor who needs cash, sells fast and pushes the price down for a few days. Roll's model is just one of those causes: the easiest to prove with math.
STEP 7Building the portfolio
Every month \(t\), \(MOM_{i,t}\) is computed for all stocks, they are ranked from highest to lowest and split into ten equal-sized groups, called deciles. Let \(\mathcal{W}_t\) be the set of stocks in the top decile (winners) and \(\mathcal{L}_t\) the set in the bottom one (losers); \(|\mathcal{W}_t|\) is the number of stocks it contains. If every stock has the same weight, each portfolio's return in the following month is the average of its stocks:
$$\begin{aligned} r_{\mathcal{W},t+1} &= \frac{1}{|\mathcal{W}_t|}\sum_{i\in\mathcal{W}_t} r_{i,t+1} \\ r_{\mathcal{L},t+1} &= \frac{1}{|\mathcal{L}_t|}\sum_{i\in\mathcal{L}_t} r_{i,t+1} \end{aligned}$$The most common alternative is to weight by market cap: each stock weighs \(w_i = ME_i / \sum_{j} ME_j\), where \(ME\) is its market value (price times shares outstanding) and the sum runs over the stocks in its decile. That way a large company weighs more, as in the S&P 500.
The strategy buys the winners and short-sells the losers. Short-selling means borrowing a share, selling it today and buying it back later to return it: you profit if the price falls. The strategy's return, called WML (Winners Minus Losers), is the difference:
The strategy returns what the winners return minus what the losers return.
What a weight is. A stock's weight is the fraction of your capital you put in it. If you have 1,000 dollars and put 100 in a stock, its weight is \(100/1000 = 0.1\), that is, 10%. A positive weight means you buy it; a negative weight, that you short it.
A portfolio's return is the average of its stocks' returns, weighted by their weights: \(r_{\text{portfolio}} = \sum_i w_i\, r_i\). If a stock weighs 10% and rises 5%, it contributes \(0.10 \times 5\% = 0.5\%\) to the portfolio.
Where \(1/|\mathcal{W}_t|\) comes from. \(|\mathcal{W}_t|\) is the number of stocks in the winner decile. If you split the capital equally among them, each one gets a fraction \(1/|\mathcal{W}_t|\). With 50 winners, each weighs \(1/50 = 2\%\). That is why the simple average in the formula above is the same as a sum with those weights:
$$\begin{aligned} r_{\mathcal{W},t+1} &= \frac{1}{|\mathcal{W}_t|}\sum_{i\in\mathcal{W}_t} r_{i,t+1} \\ &= \sum_{i\in\mathcal{W}_t} \frac{1}{|\mathcal{W}_t|}\, r_{i,t+1} \end{aligned}$$The same goes for the losers, but with a minus sign, because they are shorted: each one weighs \(-1/|\mathcal{L}_t|\). So the full strategy is a single sum over all stocks:
$$\begin{aligned} r_{WML,t+1} = {}&\sum_{i\in\mathcal{W}_t} \frac{+1}{|\mathcal{W}_t|}\, r_{i,t+1} \\ &+ \sum_{i\in\mathcal{L}_t} \frac{-1}{|\mathcal{L}_t|}\, r_{i,t+1} \end{aligned}$$A small example. With 2 winners and 2 losers, and 1,000 dollars:
| Stock | Group | Weight | Position | Return | Contribution |
|---|---|---|---|---|---|
| A | winner | \(+1/2\) | buy 500 | +6% | +3% |
| B | winner | \(+1/2\) | buy 500 | +2% | +1% |
| C | loser | \(-1/2\) | sell 500 | −4% | +2% |
| D | loser | \(-1/2\) | sell 500 | +2% | −1% |
| Total | 0 | +5% | |||
Look at C: it falls 4%, but since it is shorted, its contribution is \((-1/2)\times(-4\%) = +2\%\). You win when a loser keeps losing. D, on the other hand, rises 2% and makes you lose 1%. The result, +5%, is the same as the formula \(r_{\mathcal{W}} - r_{\mathcal{L}}\): the winners returned +4% on average, the losers −1%, and \(4\% - (-1\%) = 5\%\).
Why the weights add up to zero. Adding all the weights: \(\tfrac12 + \tfrac12 - \tfrac12 - \tfrac12 = 0\). In general, since both deciles have the same number of stocks, the buys add up to \(|\mathcal{W}_t|\cdot\frac{1}{|\mathcal{W}_t|} = 1\) and the sells to \(-1\). In money terms: the 1,000 dollars you raise by shorting C and D are what you use to buy A and B. That is why it is called a zero-cost portfolio.
Why its return is already an "excess" return. The risk-free rate, \(r_f\), is what you earn without taking any risk, for example with short-term US Treasury bills. It is the minimum bar: if you invest in stocks and they earn 10% when bills pay 4%, what you earned by choosing stocks is \(10\% - 4\% = 6\%\). That difference is called the excess return, and it is the usual way to measure how much risk pays.
The 4% is subtracted because it is what you gave up by putting your money in stocks instead of bills. In WML you don't put up any money of your own, so you gave up nothing. In formulas, \(r_f\) appears in both legs and cancels out:
The risk-free rate cancels out: WML's return is already an excess return.
That is why the difference between winners and losers is already an excess return, and nothing needs to be subtracted. In practice, the broker requires collateral to short-sell, so "zero cost" is a theoretical simplification, but it is the one papers use to compare strategies.
Holding the portfolio for several months. So far we built the portfolio and looked at it for one month. But the momentum signal doesn't just predict the next month: winners tend to keep winning for several months. That is why Jegadeesh and Titman tried holding each portfolio for \(K\) months (3, 6, 9 or 12) before rebuilding it. That creates a problem.
The problem: the starting month changes the result. Suppose \(K = 3\): you build the portfolio, leave it alone for 3 months and rebuild it. If you start in January, you rebuild in January, April, July and October. If you start in February, you rebuild in February, May, August and November. They are two strategies with the same rule but different portfolios, because January's stock ranking isn't the same as February's, and they will give different results.
So if a paper reports that the strategy returned 1% a month, is it because momentum works, or because it picked the starting month that turned out best? With a single rebalancing calendar there is no way to tell. Besides, the result would be at the mercy of what happened in those particular months: if April had a sharp rebound, the calendar that rebuilds in April suffers and the one that rebuilds in May doesn't.
The fix: use every calendar at once. With \(K = 3\) there are exactly three possible calendars, and any starting month falls into one of them:
| Calendar | Rebuilds in |
|---|---|
| A | Jan, Apr, Jul, Oct |
| B | Feb, May, Aug, Nov |
| C | Mar, Jun, Sep, Dec |
Each calendar is a chain of 3-month portfolios, one after another, continuing year after year. Instead of choosing one, all three are used together, each with a third of the capital. In practice that means each month a new portfolio is built with that month's ranking and held for 3 months, so in any given month three portfolios coexist, and they are always one from each calendar. In May, for example, the ones built in March (calendar C), April (A) and May (B) are active.
Overlapping portfolios with K = 3
Each bar is a portfolio: built with its month's ranking and held for 3 months
The month's return is the average of the \(K\) active portfolios:
With overlapping portfolios, each month's return is the average of the \(K\) active portfolios, one from each calendar.
The sum runs over the portfolios built this month (\(k = 0\)), last month (\(k = 1\)) and so on up to \(K-1\) months ago. Each one weighs \(1/K\).
This solves the problem: the result no longer depends on a chosen starting month, because it is the average of all possible calendars. And it brings a practical advantage: each month only the expiring portfolio is rebuilt, that is, \(1/K\) of the capital, instead of the whole portfolio at once. That reduces turnover and, therefore, transaction costs.
STEP 8Where does the profit come from?
We now know how to build the strategy. The next question is why it makes money. Lo and MacKinlay (1990) answered by decomposing the expected profit mathematically. To keep the math clean, they use a continuous version of WML: instead of buying only the top decile, each stock is weighted by how much it beat the market average in the previous period.
First, the market average. \(\bar r_t\) is the average return of the \(N\) stocks in the universe in month \(t\): add up all the returns and divide by the number of stocks.
$$\bar r_{t} = \frac{1}{N}\sum_{j=1}^{N} r_{j,t}$$With that, each stock's weight is defined as:
$$w_{i,t} = \frac{1}{N}\left(r_{i,t-1} - \bar r_{t-1}\right)$$- \(r_{i,t-1} - \bar r_{t-1}\) is how much stock \(i\) beat the market average last month.
- The \(\frac{1}{N}\) just shrinks that number. Careful: the weight is not an average. There is no sum, so nothing is being averaged: each stock has its own difference and its own weight. In \(\bar r_t\), on the other hand, the \(\frac{1}{N}\) goes with a sum, and there it does average.
For example, with 4 stocks that returned +6%, +2%, −1% and −3%, the average is 1%. The first beat the average by 5%, so its weight is \(5\%/4 = 1.25\%\).
A stock that beat the average has a positive weight (it is bought) and one that lagged the average has a negative weight (it is sold). The weights add up to zero, just like in WML. Let's see it step by step, adding up the weights of the \(N\) stocks.
(1) We replace each weight with its definition:
$$\sum_{i=1}^{N} w_{i,t} = \sum_{i=1}^{N} \frac{1}{N}\left(r_{i,t-1} - \bar r_{t-1}\right)$$(2) The \(\frac{1}{N}\) is the same in every term, so it comes out of the sum as a common factor:
$$= \frac{1}{N}\sum_{i=1}^{N}\left(r_{i,t-1} - \bar r_{t-1}\right)$$(3) The sum of a difference is the difference of the sums:
$$= \frac{1}{N}\left(\sum_{i=1}^{N} r_{i,t-1} - \sum_{i=1}^{N} \bar r_{t-1}\right)$$(4) \(\bar r_{t-1}\) does not depend on \(i\): it is the same number for every stock. Adding it \(N\) times gives \(N\bar r_{t-1}\):
$$= \frac{1}{N}\left(\sum_{i=1}^{N} r_{i,t-1} - N\bar r_{t-1}\right)$$(5) By the definition of the average, \(\bar r_{t-1} = \frac{1}{N}\sum_i r_{i,t-1}\). Multiplying both sides by \(N\), we get \(\sum_i r_{i,t-1} = N\bar r_{t-1}\). Substituting:
$$\begin{aligned} &= \frac{1}{N}\left(N\bar r_{t-1} - N\bar r_{t-1}\right) \\ &= \frac{1}{N}\cdot 0 = 0 \end{aligned}$$The weights add up to zero: what is bought is financed by what is sold.
The weights add up to zero because deviations from an average always offset each other: whatever some stocks are above it, others are below it. With the earlier example, the weights are 1.25%, 0.25%, −0.50% and −1.00%, and they add up to zero. In other words, what is bought is financed by what is sold.
The profit, step by step. The strategy's profit in month \(t\), which we call \(\pi_t\), is the portfolio's return: each stock contributes its weight times what it returned, just like in step 7.
$$\pi_t = \sum_{i=1}^{N} w_{i,t}\, r_{i,t}$$(1) We replace each weight with its definition:
$$\pi_t = \sum_{i=1}^{N} \frac{1}{N}\left(r_{i,t-1} - \bar r_{t-1}\right) r_{i,t}$$(2) The \(\frac{1}{N}\) is the same in every term, so it comes out of the sum as a common factor:
$$\pi_t = \frac{1}{N}\sum_{i=1}^{N} \left(r_{i,t-1} - \bar r_{t-1}\right) r_{i,t}$$(3) We distribute the product, \((a - b)\,c = ac - bc\), and split the sum in two, because the sum of a difference is the difference of the sums:
$$\begin{aligned} \pi_t = {}&\frac{1}{N}\sum_{i=1}^{N} r_{i,t-1}\, r_{i,t} \\ &- \frac{1}{N}\sum_{i=1}^{N} \bar r_{t-1}\, r_{i,t} \end{aligned}$$(4) \(\bar r_{t-1}\) is last month's average: a single number, the same for every stock. Since it doesn't depend on \(i\), it comes out of the second sum:
$$\begin{aligned} \pi_t = {}&\frac{1}{N}\sum_{i=1}^{N} r_{i,t-1}\, r_{i,t} \\ &- \bar r_{t-1}\cdot\frac{1}{N}\sum_{i=1}^{N} r_{i,t} \end{aligned}$$(5) \(\frac{1}{N}\sum_i r_{i,t}\) is exactly the definition of \(\bar r_t\), this month's average. Substituting:
The strategy's profit, written in terms of products of returns.
Checking with numbers. Last month the 4 stocks in the example returned +6%, +2%, −1% and −3% (average 1%), and this month +3%, +1%, 0% and −2% (average 0.5%). By the definition, with weights 1.25%, 0.25%, −0.5% and −1%:
$$\begin{aligned} \pi_t &= 0.0125\cdot0.03 \\ &\quad + 0.0025\cdot0.01 \\ &\quad + (-0.005)\cdot 0 \\ &\quad + (-0.01)\cdot(-0.02) \\ &= 0.0006 \end{aligned}$$By the final formula:
$$\begin{aligned} \pi_t &= \tfrac14\,(0.0018 + 0.0002 \\ &\qquad + 0 + 0.0006) \\ &\quad - 0.01\cdot 0.005 \\ &= 0.00065 - 0.00005 \\ &= 0.0006 \end{aligned}$$Both give 0.06%. The number is small because this strategy's weights are small, but what matters is that they match. This form is useful because the profit is now written with products of returns, and the expectation of a product can be written with covariances.
Now we take expectations and use \(E[XY] = \operatorname{Cov}(X,Y) + E[X]E[Y]\) on each product. To write it compactly, we call \(\Gamma\) the autocovariance matrix, whose \((i,j)\) element is \(\Gamma_{ij} = \operatorname{Cov}(r_{i,t-1}, r_{j,t})\): how much stock \(i\)'s return last month predicts stock \(j\)'s return this month. For the first term:
$$\begin{aligned} &E\left[r_{i,t-1}\,r_{i,t}\right] \\ &= \operatorname{Cov}(r_{i,t-1}, r_{i,t}) + \mu_i\,\mu_i \\ &= \Gamma_{ii} + \mu_i^2 \end{aligned}$$Why do both months have the same expectation? Because we assume each stock's mean doesn't change over time. That is the stationarity assumption from step 0: \(E[r_{i,t}] = \mu_i\) for every \(t\).
In the identity \(E[XY] = \operatorname{Cov}(X,Y) + E[X]\,E[Y]\), here \(X = r_{i,t-1}\) and \(Y = r_{i,t}\): the same stock in two different months. If its expected return is the same every month, \(E[r_{i,t-1}] = E[r_{i,t}] = \mu_i\), and the last term becomes \(\mu_i \cdot \mu_i = \mu_i^2\).
The assumption doesn't say the stock returns the same every month: one month it may rise 8% and another fall 5%. It says that what is expected on average is the same every month, like a coin that lands differently each time but always has the same probability of heads. It is assumed because, if the mean changed every month, there would be a different \(\mu_{i,t}\) for each month and none could be estimated: with a single data point per mean, there is nothing to average.
For the same reason, \(\Gamma_{ii}\) has no \(t\) subscript: the covariance between one month and the next is the same for any pair of consecutive months. In reality, a company's expected return does change over time, so the assumption is a reasonable approximation for periods that aren't too long, not an exact truth.
For the second term we need \(\operatorname{Cov}(\bar r_{t-1}, \bar r_t)\), the covariance between last month's market average and this month's. We derive it in five steps, proving each property from the definition \(\operatorname{Cov}(X,Y) = E[XY] - E[X]\,E[Y]\).
(1) Replace the averages with their definition. We use different indices, \(i\) and \(j\), because they are two independent sums:
$$\begin{aligned} &\operatorname{Cov}(\bar r_{t-1}, \bar r_t) \\ &= \operatorname{Cov}\left(\frac{1}{N}\sum_{i=1}^{N} r_{i,t-1},\; \frac{1}{N}\sum_{j=1}^{N} r_{j,t}\right) \end{aligned}$$(2) Pull out the constants. For constants \(a\) and \(b\), by linearity of expectation:
$$\begin{aligned} &\operatorname{Cov}(aX, bY) \\ &= E[aX\,bY] - E[aX]\,E[bY] \\ &= ab\,E[XY] - ab\,E[X]\,E[Y] \\ &= ab\,\operatorname{Cov}(X, Y) \end{aligned}$$With \(a = b = \frac{1}{N}\):
$$\begin{aligned} &\operatorname{Cov}(\bar r_{t-1}, \bar r_t) \\ &= \frac{1}{N^2}\operatorname{Cov}\left(\sum_{i=1}^{N} r_{i,t-1},\; \sum_{j=1}^{N} r_{j,t}\right) \end{aligned}$$(3) Distribute the covariance over the sums. Let \(X_i = r_{i,t-1}\) and \(Y_j = r_{j,t}\). The key is that the product of two sums is the double sum of all the products:
$$\left(\sum_{i=1}^{N} a_i\right)\left(\sum_{j=1}^{N} b_j\right) = \sum_{i=1}^{N}\sum_{j=1}^{N} a_i\, b_j$$Applying it to the definition of covariance:
$$\begin{aligned} &\operatorname{Cov}\Big(\sum_i X_i,\, \sum_j Y_j\Big) \\ &= E\Big[\sum_i X_i \sum_j Y_j\Big] \\ &\quad - E\Big[\sum_i X_i\Big]\,E\Big[\sum_j Y_j\Big] \\ &= E\Big[\sum_i\sum_j X_i Y_j\Big] \\ &\quad - \Big(\sum_i E[X_i]\Big)\Big(\sum_j E[Y_j]\Big) \\ &= \sum_i\sum_j E[X_i Y_j] \\ &\quad - \sum_i\sum_j E[X_i]\,E[Y_j] \\ &= \sum_i\sum_j \big(E[X_i Y_j] - E[X_i]\,E[Y_j]\big) \\ &= \sum_i\sum_j \operatorname{Cov}(X_i, Y_j) \end{aligned}$$- First equality: the definition of covariance.
- Second: the product of sums becomes a double sum, and the expectation of a sum is the sum of the expectations.
- Third: the expectation moves inside the double sum, and the product of the two sums of expectations also becomes a double sum.
- Fourth: both double sums run over the same pairs \((i,j)\), so they merge into one.
- Fifth: what's inside the parentheses is, by definition, \(\operatorname{Cov}(X_i, Y_j)\).
(4) Recognize \(\Gamma_{ij}\). By definition, \(\operatorname{Cov}(r_{i,t-1}, r_{j,t}) = \Gamma_{ij}\). Combining with step 2:
$$\operatorname{Cov}(\bar r_{t-1}, \bar r_t) = \frac{1}{N^2}\sum_{i=1}^{N}\sum_{j=1}^{N}\Gamma_{ij}$$That is \(N \times N\) terms: every stock from last month paired with every stock from this month. The diagonal ones, \(\Gamma_{ii}\), are each stock with itself; the off-diagonal ones, \(\Gamma_{ij}\) with \(i \neq j\), are cross terms.
(5) Write it with matrices. Let \(\iota\) be the vector of \(N\) ones. Component \(i\) of the vector \(\Gamma\iota\) is \((\Gamma\iota)_i = \sum_j \Gamma_{ij}\,\iota_j = \sum_j \Gamma_{ij}\). Multiplying on the left by \(\iota^\top\):
$$\iota^\top\Gamma\,\iota = \sum_{i=1}^{N}\iota_i\,(\Gamma\iota)_i = \sum_{i=1}^{N}\sum_{j=1}^{N}\Gamma_{ij}$$With an example where \(N = 3\). The vector of ones and its transpose are:
$$\iota = \begin{pmatrix}1\\1\\1\end{pmatrix} \qquad \iota^\top = \begin{pmatrix}1 & 1 & 1\end{pmatrix}$$\(\iota^\top\) is the same vector "lying down": the \(\top\) means transpose, turning a column into a row. Take any example matrix:
$$\Gamma = \begin{pmatrix}2 & 1 & 0\\ 3 & 4 & 1\\ 0 & 2 & 5\end{pmatrix}$$Adding up all its elements by hand, row by row: (2 + 1 + 0) + (3 + 4 + 1) + (0 + 2 + 5) = 18.
First, \(\Gamma\iota\) sums each row. When you multiply a matrix by a vector, each component of the result is a row of the matrix multiplied element-wise by the vector and summed. Since the vector is all ones, multiplying by 1 changes nothing, and only the row sum is left:
$$\Gamma\iota = \begin{pmatrix}2\cdot1 + 1\cdot1 + 0\cdot1\\ 3\cdot1 + 4\cdot1 + 1\cdot1\\ 0\cdot1 + 2\cdot1 + 5\cdot1\end{pmatrix} = \begin{pmatrix}3\\ 8\\ 7\end{pmatrix}$$That is what \((\Gamma\iota)_i = \sum_j \Gamma_{ij}\) says: component \(i\) is the sum of row \(i\).
Then, \(\iota^\top(\Gamma\iota)\) sums those results. A row times a column gives a single number: multiply element-wise and add. Again, multiplying by 1 changes nothing:
$$\begin{aligned} \iota^\top(\Gamma\iota) &= \begin{pmatrix}1 & 1 & 1\end{pmatrix}\begin{pmatrix}3\\8\\7\end{pmatrix} \\ &= 3 + 8 + 7 = 18 \end{aligned}$$So \(\iota^\top\Gamma\iota\) is the sum of all the elements of the matrix, and we get:
The covariance between yesterday's average and today's is the average of all the covariances between a stock from yesterday and one from today.
In words: the covariance between yesterday's market average and today's is the average of all possible covariances between a stock from yesterday and a stock from today.
The part with the means is still missing. By stationarity, \(E[\bar r_{t-1}] = E[\bar r_t] = \frac1N\sum_i \mu_i = \bar\mu\). Using \(E[XY] = \operatorname{Cov}(X,Y) + E[X]\,E[Y]\) again:
$$E[\bar r_{t-1}\,\bar r_t] = \frac{1}{N^2}\,\iota^\top\Gamma\,\iota + \bar\mu^2$$Putting both terms together:
$$\begin{aligned} E[\pi_t] = {}&\frac{1}{N}\sum_{i=1}^{N}\Gamma_{ii} + \frac{1}{N}\sum_{i=1}^{N}\mu_i^2 \\ &- \frac{1}{N^2}\,\iota^\top\Gamma\,\iota - \bar\mu^2 \end{aligned}$$Two rearrangements remain. They are independent of each other, and both have the same goal: regroup the four terms by what they mean economically.
Rearrangement 1: \(\frac{1}{N}\sum_i \mu_i^2 - \bar\mu^2\) is a variance. What we want to show is:
$$\frac{1}{N}\sum_{i=1}^{N}\mu_i^2 - \bar\mu^2 = \frac{1}{N}\sum_{i=1}^{N}(\mu_i - \bar\mu)^2$$The problem is that, on the left-hand side, \(\bar\mu^2\) isn't inside any sum: it is a standalone number. To merge it with the first term, we have to write it as a sum too.
A sum can contain something that doesn't depend on \(i\). \(\sum_{i=1}^{N} c\) means "add \(c\), \(N\) times":
$$\sum_{i=1}^{N} c = \underbrace{c + c + \cdots + c}_{N\text{ times}} = N\,c$$The index \(i\) only counts how many times you add; it doesn't have to appear inside. If you then divide by \(N\), you get back \(c\):
$$\frac{1}{N}\sum_{i=1}^{N} c = \frac{N\,c}{N} = c$$With numbers: if \(\bar\mu = 2\), then \(\bar\mu^2 = 4\), and with \(N = 3\), \(\frac{1}{3}(4 + 4 + 4) = 4\). It is the same 4, written differently.
Applied to the equation. The term is \(-\bar\mu^2\), a standalone number with a minus sign. We don't move it into the existing sum: we rewrite it with an expression that is worth exactly the same.
$$-\bar\mu^2 = -\frac{1}{N}\sum_{i=1}^{N}\bar\mu^2$$To get to the square \((\mu_i - \bar\mu)^2\) one more step is needed: write \(-\bar\mu^2\) as \(-2\bar\mu^2 + \bar\mu^2\), which is the same thing, and turn each piece into a sum.
- \(2\bar\mu^2 = 2\bar\mu\cdot\bar\mu\), and by the definition of the average, \(\bar\mu = \frac{1}{N}\sum_i\mu_i\). Since \(2\bar\mu\) doesn't depend on \(i\), it goes inside the sum: \(2\bar\mu^2 = \frac{1}{N}\sum_i 2\mu_i\bar\mu\).
- \(\bar\mu^2 = \frac{1}{N}\sum_i\bar\mu^2\), by what we just saw.
Now all three terms have the form \(\frac{1}{N}\sum_i(\ldots)\), and two sums over the same range of \(i\) merge into one, because \(\sum_i a_i - \sum_i b_i = \sum_i(a_i - b_i)\):
$$\begin{aligned} &\frac{1}{N}\sum_{i}\mu_i^2 - \bar\mu^2 \\ &= \frac{1}{N}\sum_{i}\mu_i^2 - 2\bar\mu^2 + \bar\mu^2 \\ &= \frac{1}{N}\sum_{i}\mu_i^2 - \frac{1}{N}\sum_{i}2\mu_i\bar\mu \\ &\quad + \frac{1}{N}\sum_{i}\bar\mu^2 \\ &= \frac{1}{N}\sum_{i}\left(\mu_i^2 - 2\mu_i\bar\mu + \bar\mu^2\right) \end{aligned}$$What's inside is a perfect square, \(a^2 - 2ab + b^2 = (a - b)^2\):
$$= \frac{1}{N}\sum_{i}(\mu_i - \bar\mu)^2$$It is the identity \(\operatorname{Var}(X) = E[X^2] - E[X]^2\) from step 0, applied to the stocks' means. It measures how different the means are across stocks, not how a single stock varies over time, and we call it \(\sigma^2_\mu = \frac1N\sum_i(\mu_i - \bar\mu)^2\).
Rearrangement 2: separate the diagonal of \(\Gamma\). We start again from the expected profit with its four terms:
$$\begin{aligned} E[\pi_t] = {}&\frac{1}{N}\sum_{i=1}^{N}\Gamma_{ii} + \frac{1}{N}\sum_{i=1}^{N}\mu_i^2 \\ &- \frac{1}{N^2}\,\iota^\top\Gamma\,\iota - \bar\mu^2 \end{aligned}$$(1) Name the trace. The trace of a matrix is, by definition, the sum of its diagonal:
$$\operatorname{tr}(\Gamma) = \sum_{i=1}^{N}\Gamma_{ii}$$So the first term is \(\frac{1}{N}\operatorname{tr}(\Gamma)\).
(2) Group the means. The second and fourth terms are the only ones with means. Together they form \(\frac{1}{N}\sum_i\mu_i^2 - \bar\mu^2\), which by rearrangement 1 is \(\sigma^2_\mu = \frac{1}{N}\sum_i(\mu_i - \bar\mu)^2\): the variance of the means across stocks. It doesn't measure how a stock varies month to month, but how different stocks are from each other in their expected return. We get:
$$E[\pi_t] = \frac{1}{N}\operatorname{tr}(\Gamma) - \frac{1}{N^2}\,\iota^\top\Gamma\,\iota + \sigma^2_\mu$$(3) Split the double sum into diagonal and the rest. We know that \(\iota^\top\Gamma\iota = \sum_i\sum_j\Gamma_{ij}\). For each fixed row \(i\), the sum over \(j\) runs through every column, and one of them is \(j = i\). Separating that term:
$$\sum_{j=1}^{N}\Gamma_{ij} = \Gamma_{ii} + \sum_{j \neq i}\Gamma_{ij}$$Summing that equality over every row \(i\):
$$\begin{aligned} &\sum_{i=1}^{N}\sum_{j=1}^{N}\Gamma_{ij} \\ &= \sum_{i=1}^{N}\Gamma_{ii} + \sum_{i=1}^{N}\sum_{j \neq i}\Gamma_{ij} \end{aligned}$$The first term on the right is the trace. We write the second as \(\sum_{i \neq j}\Gamma_{ij}\): the sum of all elements off the diagonal. So \(\iota^\top\Gamma\iota = \operatorname{tr}(\Gamma) + \sum_{i \neq j}\Gamma_{ij}\), and solving:
$$\sum_{i \neq j}\Gamma_{ij} = \iota^\top\Gamma\,\iota - \operatorname{tr}(\Gamma)$$So \(\iota^\top\Gamma\iota - \operatorname{tr}(\Gamma)\) isn't an arbitrary subtraction: it is the sum of the off-diagonal elements.
(4) Substitute into \(E[\pi_t]\). We plug \(\iota^\top\Gamma\iota = \operatorname{tr}(\Gamma) + \sum_{i \neq j}\Gamma_{ij}\) into the second term and distribute the \(-\frac{1}{N^2}\):
$$\begin{aligned} E[\pi_t] = {}&\frac{1}{N}\operatorname{tr}(\Gamma) \\ &- \frac{1}{N^2}\Big(\operatorname{tr}(\Gamma) + \sum_{i \neq j}\Gamma_{ij}\Big) \\ &+ \sigma^2_\mu \\ = {}&\frac{1}{N}\operatorname{tr}(\Gamma) - \frac{1}{N^2}\operatorname{tr}(\Gamma) \\ &- \frac{1}{N^2}\sum_{i \neq j}\Gamma_{ij} + \sigma^2_\mu \end{aligned}$$(5) Factor out the trace. The first two terms contain \(\operatorname{tr}(\Gamma)\). Using a common denominator, \(\frac{1}{N} = \frac{N}{N^2}\):
$$\begin{aligned} &\frac{1}{N}\operatorname{tr}(\Gamma) - \frac{1}{N^2}\operatorname{tr}(\Gamma) \\ &= \left(\frac{N}{N^2} - \frac{1}{N^2}\right)\operatorname{tr}(\Gamma) \\ &= \frac{N-1}{N^2}\operatorname{tr}(\Gamma) \end{aligned}$$Writing \(\sum_{i \neq j}\Gamma_{ij}\) back as \(\iota^\top\Gamma\iota - \operatorname{tr}(\Gamma)\), we get the Lo and MacKinlay decomposition. Before, the diagonal was split between two terms with opposite signs; now each part of \(\Gamma\) appears in a single place:
The expected profit comes from three sources: each stock continuing its own trend, some stocks predicting others, and some stocks always returning more than others.
Why the own term adds and the cross term subtracts. With two stocks, A and B, each cell of \(\Gamma\) says whether what happened to one stock last month predicts what happens to another this month, or to the same one. The matrix \(\Gamma\) is:
$$\begin{pmatrix} \operatorname{Cov}(A_{t-1}, A_t) & \operatorname{Cov}(A_{t-1}, B_t) \\[2pt] \operatorname{Cov}(B_{t-1}, A_t) & \operatorname{Cov}(B_{t-1}, B_t) \end{pmatrix}$$The diagonal is each stock with itself; off the diagonal, one stock with another. Since each stock's weight is its past return minus the average, \(w_{i,t} = \frac{1}{N}(r_{i,t-1} - \bar r_{t-1})\), the two kinds of cells push in opposite directions:
- \(+\Gamma_{ii}\), the own autocovariance. Stock \(i\)'s weight goes up when its own past return went up. If that past return predicts its future return, it gets more weight right when it is about to return more. It enters with a plus sign.
- \(-\Gamma_{ji}\), the cross-covariance. Stock \(i\)'s weight goes down when the past average goes up, because it is measured against it. If another stock \(j\)'s past predicts that \(i\) will rise, then when \(j\) did well, the average rose, \(i\)'s weight fell... and that is exactly when \(i\) rises. It gets less weight right when it is about to return more. It enters with a minus sign.
This is the Lo and MacKinlay decomposition. It says the expected profit comes from three sources, and each one maps to one of the theories in the debate:
| Term | What it means | Theory behind it |
|---|---|---|
| Own autocovariance | A stock that rose tends to keep rising. Adds to the profit if positive. | Behavioral: investors underreact to news. |
| Cross-covariances | One stock rising predicts others rising later (lead-lag effect). Subtracts from the profit if positive. | Slow diffusion of information across firms. |
| Dispersion of means | Some stocks always have higher expected returns, and having won in the past gives them away. Always adds. | Risk: winners would simply be riskier (Conrad and Kaul, 1998). |
The last term is never negative, because it is a variance. That means the strategy makes something even if returns were completely unpredictable over time: it is enough for some stocks to have higher means than others. That is why the evidence of long-term reversal matters so much for the debate. If all the profit came from \(\sigma^2_\mu\), winners would have a permanently higher mean and would keep winning forever. The fact that two to five years later they give back part of their gains indicates there is own autocovariance: a transitory component, consistent with the behavioral explanations.
STEP 9The math of a crash
To understand crashes you need the concept of beta.
What beta is. It measures how much a stock moves when the market moves. If the market rises 1%, a stock with beta \(\beta\) rises, on average, \(\beta\)%. Each stock has its own beta, computed from its historical returns: with \(\beta = 1.5\), for example, it rises 15% if the market rises 10%.
The one-factor model says each stock's return is its beta times the market plus an idiosyncratic component \(e_i\), with zero mean and independent of the market:
$$R^F_{i} = \beta_i\,R^F_{m} + e_i$$\(R^F\) is the cumulative return over the formation window \(F\) (months \(t-12\) to \(t-2\)). Each stock's return splits into two pieces:
- \(\beta_i\,R^F_m\): the part that comes from the market. If the market fell 20% and the stock has \(\beta = 1.5\), this part is \(1.5 \times (-20\%) = -30\%\). It happens to it for being in the stock market, like everyone else.
- \(e_i\): everything else, what is specific to the company. A good earnings report, a product that flopped, a lawsuit, a new CEO.
Stocks are ranked by \(R^F_i\), which has two parts: \(\beta_i R^F_m\) and \(e_i\). In a normal year, \(R^F_m\) is moderate and the ranking depends mostly on \(e_i\), what happened to each company. But if the market fell sharply, say \(R^F_m = -40\%\), the \(\beta_i R^F_m\) term takes over: a stock with \(\beta = 2\) fell 80% because of the market and one with \(\beta = 0.5\) only 20%. The ranking ends up sorting by beta. The losers are the high-beta stocks and the winners, the low-beta ones.
A portfolio's beta is the weighted average of its stocks' betas, so WML's (Winners Minus Losers) is the winners' beta minus the losers':
$$\beta_{WML} = \beta_{\mathcal{W}} - \beta_{\mathcal{L}} < 0$$Nobody decided to bet against the market, but the strategy ended up betting against the market. If the next month the market rebounds with a large return \(r_m^{+}\), the strategy loses approximately:
After a fall, the portfolio is left with a negative beta, and in the rebound it loses in proportion to that beta.
With \(\beta_{\mathcal{W}} = 0.6\), \(\beta_{\mathcal{L}} = 2.0\) and a 15% rebound, the loss is \((0.6 - 2.0)\times 15\% = -21\%\) in one month.
Daniel and Moskowitz (2016) add an effect that makes it worse. After a crisis, the losers tend to be highly leveraged companies. Merton (1974) showed that the stock of a leveraged company works like a call option on its assets: if the assets are worth less than the debt, the stock is worth almost nothing, but if they recover, the stock rises much more than proportionally. That makes the losers' beta increase precisely when the market goes up. They measure it with a regression where beta can change in bear markets (\(I_B = 1\) if the market fell over the past 24 months) and, within them, in up months (\(I_U = 1\) if the market rises that month):
What alpha (\(\alpha\)) is. Alpha tells you whether a strategy makes money from something of its own or just because it takes on risk. Any strategy that takes more risk earns more on average: there is nothing special about that. Alpha strips out the part of the profit explained by moving with the market, and what is left is what the strategy earns "on its own".
- Alpha ≈ 0: the profit was just risk. Nothing new.
- Alpha > 0: it earns more than risk explains. There is something real there.
In the equation below, alpha is the intercept: what the strategy returns in a month when the market didn't move. The formal definition comes from Jensen (1968), who used it to measure whether fund managers beat the market through skill or just by taking more risk; that is why it is called "Jensen's alpha". Carhart (1997) extended it to a four-factor model, the market, size, value and momentum itself, which is the standard version in momentum papers.
The switches turn terms on or off, so in each situation the total beta is different:
- Normal times: \(\beta_0\).
- After a fall, if the market keeps falling: \(\beta_0 + \beta_B\).
- After a fall, if the market rebounds: \(\beta_0 + \beta_B + \beta_{B,U}\).
What it tells us. A strongly negative \(\beta_{B,U}\) means that, right when the market rebounds after a fall, the strategy is betting heavily against the market. The more the market rises in that rebound, the more WML loses. That confirms with data what we explained above with the one-factor model: after a fall, the losers are high-beta stocks, the portfolio ends up with a negative beta, and the rebound hits it.
STEP 10Volatility scaling: where the rule comes from
If crashes are partly predictable, exposure can be reduced before they happen. To decide by how much, mean-variance theory is used. An investor chooses what fraction \(w\) of their capital to expose to the strategy. They like the expected return \(w\,\mu_t\) and dislike the variance \(w^2\sigma^2_t\), with a parameter \(\gamma\) measuring their risk aversion. They maximize:
$$\max_{w}\; U(w) = w\,\mu_t - \frac{\gamma}{2}\,w^2\sigma_t^2$$What \(\gamma\) is. It is risk aversion: how much uncertainty bothers the investor. The function being maximized has two parts:
$$U(w) = \underbrace{w\,\mu_t}_{\text{what they like}} - \underbrace{\frac{\gamma}{2}\,w^2\sigma_t^2}_{\text{what bothers them}}$$Why the 2. It is not that risk aversion is divided by something with economic meaning: the \(\frac{1}{2}\) is there for convenience. When differentiating, \(w^2\) gives \(2w\), and the \(\frac{1}{2}\) cancels that 2:
$$\begin{aligned} \frac{d}{dw}\left(\frac{\gamma}{2}\,w^2\sigma_t^2\right) &= \frac{\gamma}{2}\cdot 2w\,\sigma_t^2 \\ &= \gamma\,w\,\sigma_t^2 \end{aligned}$$That way the first-order condition comes out clean, \(\mu_t - \gamma\,w\,\sigma_t^2 = 0\), and the result has no stray 2. Without the \(\frac{1}{2}\), the optimum would be \(w^* = \frac{\mu_t}{2\gamma\sigma_t^2}\): the same conclusion, just with \(\gamma\) measured on a different scale.
It is an inverted parabola in \(w\), so the maximum is where the derivative is zero:
Optimal exposure grows with expected return and falls with variance.
Daniel and Moskowitz estimate \(\mu_t\) and \(\sigma_t\) every month and use the full rule. Barroso and Santa-Clara (2015) simplify it: they treat the mean as stable and choose the exposure so that the strategy's volatility is always a target value \(\sigma^*\):
By scaling the position by recent volatility, the strategy keeps a constant volatility.
How to read the result, line by line.
Line 1: the rule. \(w_t = \frac{\sigma^*}{\hat\sigma_t}\).
- \(\sigma^*\) is the volatility you want to have, chosen in advance: for example, 12% a year.
- \(\hat\sigma_t\) is the volatility the strategy has had recently, estimated with the last 6 months. The "hat" indicates it is an estimate, not the true value.
- \(w_t\) is the fraction of capital you put into the strategy this month.
If the strategy has been very volatile, \(\hat\sigma_t\) is large and \(w_t\) small: you invest less. If it has been calm, you invest more.
Lines 2 and 3: proof that volatility stays constant. What we want to see is how much volatility the scaled position has, \(w_t\, r_{WML,t+1}\). Std is the standard deviation: the square root of the variance, the same \(\sigma\) from step 0. In finance it is called volatility.
$$\operatorname{Std}(X) = \sqrt{\operatorname{Var}(X)} = \sigma_X$$We use a property of the standard deviation: multiplying a variable by a positive number multiplies its deviation by that same number.
$$\operatorname{Std}(aX) = a\operatorname{Std}(X), \quad a > 0$$It follows from the variance: \(\operatorname{Var}(aX) = a^2\operatorname{Var}(X)\), and taking the square root, \(\operatorname{Std}(aX) = a\operatorname{Std}(X)\). Since \(w_t\) is decided before the month starts, it is a fixed number, and we get \(\operatorname{Std}(w_t\, r_{WML,t+1}) = w_t\,\sigma_t\), where \(\sigma_t\) is the strategy's true volatility that month. Replacing \(w_t\) with the rule, \(w_t\,\sigma_t = \frac{\sigma^*}{\hat\sigma_t}\,\sigma_t \approx \sigma^*\). If the estimate is good, \(\hat\sigma_t \approx \sigma_t\), the two cancel and \(\sigma^*\) is left: the position has the volatility you wanted.
With numbers, with \(\sigma^* = 12\%\):
| Recent volatility \(\hat\sigma_t\) | Exposure \(w_t\) | Position volatility |
|---|---|---|
| 24% (nervous market) | 12/24 = 0.5: half | 0.5 × 24% = 12% |
| 12% | 12/12 = 1: all of it | 1 × 12% = 12% |
| 8% (calm market) | 12/8 = 1.5: with leverage | 1.5 × 8% = 12% |
It always comes out to 12%. The strategy doesn't change; how much is invested in it does, and that offsets the swings in volatility.
The "\(\approx\)" is honest: if volatility changes suddenly, the 6-month estimate arrives late, and that month the actual volatility isn't exactly \(\sigma^*\). That is why the rule reduces crashes but doesn't eliminate them entirely.
How \(\hat\sigma_t\) is estimated. With the daily returns of the last six months:
$$\hat\sigma^2_t = 21\cdot\frac{1}{126}\sum_{j=0}^{125} r^2_{WML,\,d-1-j}$$Each number has a reason:
- 126: six months have about 126 trading days, so \(\frac{1}{126}\sum r^2\) is the average daily variance.
- 21: a month has about 21 trading days. If daily returns are uncorrelated, the variance of a sum is the sum of the variances, because all cross-covariances are zero: \(\operatorname{Var}\left(\sum_{d=1}^{21} r_d\right) = 21\,\sigma_d^2\). Multiplying by 21 turns daily variance into monthly.
- \(r^2\) instead of \((r - \bar r)^2\): by the identity from step 0, \(\operatorname{Var}(r) = E[r^2] - E[r]^2\). The daily mean is so small (hundredths of a point) that \(E[r]^2\) is negligible.
- \(\sqrt{12}\): by the same argument, annual variance is 12 times monthly variance, so annual volatility is \(\sqrt{12}\) times monthly volatility. A 12% annual target is equivalent to \(12\%/\sqrt{12} \approx 3.46\%\) monthly.
Why does the Sharpe ratio, \(S = \mu/\sigma\), the return per unit of risk, improve? If volatility said nothing about future returns, scaling would only change the size of the bet and \(S\) would stay the same. But in momentum, high volatility anticipates low returns (those are the panic states from step 9). The rule shrinks the position right when \(\mu_t\) is worse and grows it when it is better, so it improves the average return per unit of risk. Barroso and Santa-Clara found it nearly doubles the Sharpe ratio.
STEP 11The time-series version
Everything above is cross-sectional momentum: a stock is bought if it did better than the others. Moskowitz, Ooi and Pedersen (2012) studied another version, which compares each asset to zero. If asset \(s\) rose over the last 12 months, it is bought; if it fell, it is sold:
Time-series momentum buys what rose over the last year and sells what fell, without comparing it to other assets.
The formula is the product of three parts:
1. \(\operatorname{sign}(r_{s,\,t-12:t})\): the direction. \(r_{s,\,t-12:t}\) is how much asset \(s\) returned over the last 12 months, and \(\operatorname{sign}\) keeps only the sign:
- If it rose, it is \(+1\): buy.
- If it fell, it is \(-1\): short.
It doesn't matter how much it rose, only whether it rose or fell.
2. \(\frac{40\%}{\sigma_{s,t}}\): the size. It is the same idea as step 10: scale the position by the asset's volatility, so that all of them contribute a similar amount of risk. A very volatile asset gets a small position, and a calm one a large one. Without this, the most volatile assets, like oil, would dominate the portfolio over calmer ones, like a bond. Moskowitz, Ooi and Pedersen chose 40% per asset because, combining many assets, the total portfolio ends up with a volatility of around 12% a year. \(\sigma_{s,t}\) is the asset's annualized volatility, estimated before month \(t+1\) with an average that gives more weight to recent days.
3. \(r_{s,t+1}\): what the asset returns the following month. It is what you win or lose, multiplied by the direction and the size.
Example. An asset with 20% volatility, so the size is \(40\%/20\% = 2\):
| Last 12 months | Direction | Next month | Result |
|---|---|---|---|
| Rose 15% | \(+1\), buy | rises 3% | \((+1)\cdot 2\cdot 3\% = +6\%\) |
| Fell 10% | \(-1\), sell | falls 2% | \((-1)\cdot 2\cdot(-2\%) = +4\%\) |
| Fell 10% | \(-1\), sell | rises 2% | \((-1)\cdot 2\cdot 2\% = -4\%\) |
The fundamental difference is the benchmark. In cross-sectional momentum, if the whole market falls, you still buy the stocks that fell the least. In the time-series version, if everything falls, you sell everything. That is why the latter tends to make money in long market declines, while the cross-sectional one suffers in rebounds.
04Does it really work? 200 years of evidence
Yes. Momentum shows up in the period in which it was discovered, in the decades that followed, and also in 19th-century data nobody had analyzed.
Jegadeesh and Titman (1993) showed that between 1965 and 1989 winners beat losers by about 1% a month. Carhart (1997) turned it into a standard factor and showed that much of what looked like fund manager skill was, in fact, momentum exposure. Moreover, momentum loads little on the known risks (market, size and value): almost all of its profit is left unexplained by them, which is why it is considered an anomaly and not disguised risk.
The strongest evidence came later. Geczy and Samonov reconstructed monthly US stock prices back to 1801 and found the premium there too, though smaller.
Momentum premium by period, US
Winner tercile minus loser tercile, average monthly return
That last fact matters. Long stretches of poor performance are not a sign that momentum "stopped working": they have been a normal part of the strategy for two centuries.
05Types of momentum: there isn't just one
The literature has found several ways to measure momentum, and some compete with the classic version to explain the same phenomenon.
| Variant | What it measures | Study |
|---|---|---|
| Cross-sectional (classic) | Relative return across stocks, t−12 to t−2 | Jegadeesh and Titman (1993) |
| Time-series | Whether the asset rose or fell relative to its own past | Moskowitz, Ooi and Pedersen (2012) |
| Industry | The sector's return, not the stock's | Moskowitz and Grinblatt (1999) |
| 52-week high | How close the price is to its annual high | George and Hwang (2004) |
| Intermediate | Return from 12 to 7 months ago | Novy-Marx (2012) |
| Residual | Return not explained by other factors | Blitz, Huij and Martens (2011) |
Why does momentum exist?
There is no consensus. Behavioral explanations dominate, but no theory explains all the facts at once.
Investors process information poorly
- Underreaction: they update their beliefs too slowly in response to news (Barberis, Shleifer and Vishny, 1998).
- Overconfidence: they take credit for their wins and push the price too far (Daniel, Hirshleifer and Subrahmanyam, 1998).
- Slow diffusion: information travels slowly, especially in small firms with little coverage (Hong, Lim and Stein, 2000).
- Disposition effect: they sell winners too fast and hold on to losers (Grinblatt and Han, 2005).
It is compensation for a hidden risk
- Growth risk: winners have riskier growth expectations (Johnson, 2002).
- Business cycle: the premium varies with macro variables (Chordia and Shivakumar, 2002).
- Market states: it only shows up after bull markets (Cooper, Gutierrez and Hameed, 2004).
- Time-varying betas: momentum reflects risk exposures that change over time (Kelly, Moskowitz and Pruitt, 2021).
One fact favors the behavioral version: two to five years later, part of the profit reverses. If momentum were just a risk premium, there would be no reason for it to be given back.
07When does it fail? Momentum crashes
Momentum loses big, and suddenly, when the market rebounds after a deep fall. The worst episodes in the US were 1932 and 2009.
Daniel and Moskowitz (2016) showed these crashes are not random: they happen in "panic states", with the market falling and volatility high. The mechanism is almost mechanical.
How a momentum crash unfolds
Four steps that repeat in 1932, 2009 and the 19th-century crashes
How the risk is reduced
Barroso and Santa-Clara (2015) proposed something simple: shrink the position when the strategy's recent volatility rises, and grow it when it falls. With that they nearly eliminated the crashes and nearly doubled the Sharpe ratio. Daniel and Moskowitz went a step further: they also forecast the expected return and roughly doubled the alpha.
The derivation of both rules is in steps 9 and 10 of the math section.
08Can it be applied to the S&P 500?
Yes, and without short-selling: about half the premium comes from buying winners, and the premium does not reliably depend on company size.
Israel and Moskowitz (2013) showed this with 86 years of data. The contrast with other factors is clear:
Where does each premium come from?
Approximate share contributed by the long and short legs, US
There is a tension in the literature: Fama and French (2012) and Hong, Lim and Stein (2000) find the premium shrinks in large caps. For an S&P 500 investor, the reasonable expectation is the effect, but smaller.
Transaction costs
Paper returns assume you buy and sell exactly at the closing price, paying nothing. In reality, every trade has costs:
- Commissions charged by the broker.
- The spread: you buy at the ask and sell at the bid, which is lower. It is the same \(c\) from step 6, seen as a cost.
- Price impact: if you buy a lot of a stock, your own buying pushes the price up before you are done.
- Cost of short-selling: you have to pay to borrow the shares.
A strategy "surviving costs" means that, after subtracting them, it still has a profit left. The math depends on how much it trades. Turnover is the fraction of the portfolio that changes each month:
$$r^{\text{net}} = r^{\text{gross}} - \text{turnover} \times \text{cost}$$An illustrative example, with round numbers: if the strategy returns 1% a month gross and changes 60% of the portfolio each month, at a cost of 0.5% per trade it loses \(0.6 \times 0.5\% = 0.3\%\) and keeps 0.7% net. If it trades small, illiquid stocks, at a cost of 1.5%, it loses 0.9% and keeps barely 0.1%. Momentum is especially sensitive because it turns over a lot: every month a good share of the winners and losers changes.
That is why costs are the main practical obstacle. Early studies, like Lesmond, Schill and Zhou (2004), concluded that costs ate up the entire profit. Using USD 1.7 trillion in real trades from an institutional manager, Frazzini, Israel and Moskowitz (2018) found costs an order of magnitude lower than estimated, and momentum survives even at scale. For a retail investor costs weigh more, but trading only very liquid stocks reduces them.
Did the premium disappear after publication?
Partly. It is the pattern of almost every known anomaly:
What's left of an anomaly after publication
Average return of 97 anomalies, base 100 = the paper's original sample
Is momentum a factor of its own?
Maybe not. A recent hypothesis says that stock momentum is, to a large extent, momentum in other factors.
Ehsani and Linnainmaa (2022) observed that almost every known factor (value, size, profitability) has its own inertia: if it performed well over the past year, it tends to keep performing well.
Factors have momentum too
Monthly return of the average factor depending on how the previous year went, in basis points
If they are right, momentum would not be a risk in itself but a way of riding the factors that have been winning. The debate is still open.
10What I take away from all this
- The effect is real. It shows up in 212 years of data and has withstood three decades of academic scrutiny.
- The risk is asymmetric. It wins little by little and loses all at once, especially in rebounds after crises. Controlling volatility helps a lot.
- It works in large caps, even without short-selling, but expect a smaller premium than in the papers.
For someone investing in the S&P 500, the practical takeaway is moderate: a tilt toward the stocks with the best performance over the past year, with infrequent rebalancing and volatility control, is consistent with the evidence. Expecting it to replicate the results of an academic long-short portfolio is not.
Frequently asked questions
What is stock market momentum?
It is the tendency of the stocks that rose the most over the past 3 to 12 months to keep outperforming the ones that fell the most over the following months. It was documented by Jegadeesh and Titman in 1993 and shows up in more than 200 years of US data.
Does the momentum strategy still work?
The evidence says yes, but with a smaller premium than historically. Published anomalies lose on average 58% of their returns after publication (McLean and Pontiff, 2016), and momentum had a weak decade in the 2000s.
What is a momentum crash?
It is a sharp, concentrated loss for the strategy. It happens when the market rebounds after a steep fall: the high-beta losers rise faster than the winners. The worst episodes in the US were in 1932 and 2009.
Can momentum be applied to the S&P 500 without short-selling?
Yes. Israel and Moskowitz (2013) show that about half the premium comes from the long leg and that it does not reliably depend on company size.
Why does the momentum signal skip the last month?
Because at one month returns tend to reverse (Jegadeesh, 1990) and because the bounce between the bid and ask prices creates an artificial negative autocorrelation of −c²/4 in price changes (Roll, 1984). Skipping month t−1 avoids mixing that reversal with momentum.
What is the difference between momentum and technical analysis?
Academic momentum ranks thousands of stocks by past return and buys the best ones, with fixed rules. Technical analysis looks for chart patterns in individual stocks. The former has decades of published evidence; the latter, much less.
Sources
- Jegadeesh, N. and Titman, S. (1993). Returns to buying winners and selling losers. The Journal of Finance, 48(1), 65–91.
- Carhart, M. (1997). On persistence in mutual fund performance. The Journal of Finance, 52(1), 57–82.
- Geczy, C. and Samonov, M. (2016). Two centuries of price-return momentum. Financial Analysts Journal, 72(5).
- Daniel, K. and Moskowitz, T. (2016). Momentum crashes. Journal of Financial Economics, 122(2), 221–247.
- Barroso, P. and Santa-Clara, P. (2015). Momentum has its moments. Journal of Financial Economics, 116(1), 111–120.
- Israel, R. and Moskowitz, T. (2013). The role of shorting, firm size, and time on market anomalies. Journal of Financial Economics, 108(2), 275–301.
- Frazzini, A., Israel, R. and Moskowitz, T. (2018). Trading costs. SSRN.
- McLean, R. D. and Pontiff, J. (2016). Does academic research destroy stock return predictability? The Journal of Finance, 71(1), 5–32.
- Ehsani, S. and Linnainmaa, J. (2022). Factor momentum and the momentum factor. The Journal of Finance, 77(3), 1877–1919.
- Roll, R. (1984). A simple implicit measure of the effective bid-ask spread in an efficient market. The Journal of Finance, 39(4), 1127–1139.
- Jegadeesh, N. (1990). Evidence of predictable behavior of security returns. The Journal of Finance, 45(3), 881–898.
- De Bondt, W. and Thaler, R. (1985). Does the stock market overreact? The Journal of Finance, 40(3), 793–805.
- Lehmann, B. (1990). Fads, martingales, and market efficiency. The Quarterly Journal of Economics, 105(1), 1–28.
- Merton, R. (1974). On the pricing of corporate debt: The risk structure of interest rates. The Journal of Finance, 29(2), 449–470.
- Jensen, M. C. (1968). The performance of mutual funds in the period 1945–1964. The Journal of Finance, 23(2), 389–416.
- Lo, A. and MacKinlay, A. C. (1990). When are contrarian profits due to stock market overreaction? The Review of Financial Studies, 3(2), 175–205.
- Moskowitz, T., Ooi, Y. H. and Pedersen, L. H. (2012). Time series momentum. Journal of Financial Economics, 104(2), 228–250.
This article is a review of academic literature for educational purposes and does not constitute financial advice. Past performance does not guarantee future results.