Momentum and Trend Signals
From past-return signals to implementable portfolio decisions
QM010 · Portfolio Methods · Intermediate
Core idea. A momentum or trend signal converts an asset’s past price path into a rule for its next portfolio decision; the lookback, optional skip period, and execution clock are part of the method, not implementation trivia.
Use it for. Designing and auditing time-series or absolute-momentum rules, trend filters, and momentum-based allocation signals.
It does not establish. That momentum is universally profitable, that one lookback horizon is optimal, or that a signal observed at a period-end could have been traded at the same period-end price.
The Question
A rule such as “hold the asset when its 12-month return is positive” sounds simple. In a reproducible backtest, however, that sentence is incomplete.
A reviewer still needs to know:
- which return history is included in the signal;
- whether the most recent month is included or skipped;
- whether the rule uses an asset’s own history or its rank relative to other assets;
- when the signal becomes observable; and
- which subsequent return the signal is allowed to earn.
Momentum methods are therefore best defined as a signal plus an information clock plus a portfolio rule.
Why It Matters
Time-series momentum is based on an instrument’s own past return rather than its relative rank within a cross-section (Moskowitz et al. 2012). A basic trend-following implementation often uses the same sign logic: positive recent return implies a long or risk-on position, while negative recent return implies a short, cash, or defensive position depending on the mandate (Hurst et al. 2017).
Those ideas are related, but the labels are not interchangeable in every implementation. Trend following is a broader family that can also use moving-average crossovers, breakouts, filtered slopes, or other rules. Time-series momentum is one particularly transparent trend signal.
A second distinction is between absolute/time-series momentum and cross-sectional momentum. Absolute momentum asks whether an asset’s own signal clears a threshold. Cross-sectional momentum asks which assets have stronger signals than their peers. A strategy can use either rule, or combine them.
Intuition
Think of a momentum signal as a measurement taken at a decision date. The measurement looks backward; the portfolio acts forward.
If the measurement uses data through month \(t\), the portfolio should generally earn returns after the signal has been formed. Using the month-\(t\) closing price both to compute the signal and to claim an execution at that same closing price requires a separate timestamp-level justification. In monthly research, the clean default is to form the signal at the end of \(t\) and apply the resulting target to the next tradable holding period. This timing convention is developed more fully in QM007 — Portfolio Backtesting and Rebalancing.
The Method
A basic lookback return
Let \(P_t\) be an adjusted price or total-return index observed at decision date \(t\). For a lookback of \(h\) periods, define
\[ m_t^{(h)}=\frac{P_t}{P_{t-h}}-1. \]
Equivalently, if \(r_j\) denotes simple return,
\[ 1+m_t^{(h)}=\prod_{j=t-h+1}^{t}(1+r_j). \]
A simple absolute-momentum rule with threshold \(\theta\) is
\[ s_t=\mathbf 1\{m_t^{(h)}>\theta\}. \]
For a long/cash mandate, \(s_t=1\) might mean hold the risky asset and \(s_t=0\) hold cash. For a long/short mandate, a sign rule might instead map positive momentum to \(+1\) and negative momentum to \(-1\). The mapping is a portfolio-design choice and must be stated.
Optional skip-month convention
Sometimes the most recent period is deliberately omitted. Let \(s\ge 0\) be the number of skipped periods. A convenient definition is
\[ m_t^{(h,s)}=\frac{P_{t-s}}{P_{t-s-h}}-1. \]
With monthly data, \(s=1\) omits the most recent month from the formation window. The familiar cross-sectional momentum convention based on prior months 2–12 is an example of a skipped-recent-month construction in the Fama–French momentum portfolios (French, n.d.).
Some momentum designs include the most recent month; others intentionally skip it. The article or code should state the exact endpoints. Do not infer a 12–1 construction merely because a paper says “12-month momentum.”
Time-series versus cross-sectional decisions
For \(N\) assets, an own-history signal can be computed asset by asset:
\[ m_{i,t}^{(h)}=\frac{P_{i,t}}{P_{i,t-h}}-1. \]
An absolute rule compares \(m_{i,t}^{(h)}\) with a fixed threshold. A cross-sectional rule ranks \(m_{i,t}^{(h)}\) across \(i\) and selects, for example, the top \(K\) assets. The same return measurement can therefore support different portfolio decisions.
Signal-to-portfolio timing
A minimal monthly clock is
\[ \text{prices through }t \rightarrow \text{signal at }t \rightarrow \text{target weights} \rightarrow \text{execution after signal formation} \rightarrow \text{return over }t+1. \]
The exact execution timestamp depends on the data and trading convention. What matters is that the return credited to the strategy was not already embedded in the signal. See QM003 — Look-Ahead Bias and Data Leakage for the broader information-set problem.
Momentum and Trend Following
Time-series momentum and trend following overlap substantially but should not be collapsed into a single universal definition. Moskowitz, Ooi, and Pedersen document return continuation based on each instrument’s own past return (Moskowitz et al. 2012). Hurst, Ooi, and Pedersen describe basic trend following as time-series momentum while also placing it within the broader historical trend-following family (Hurst et al. 2017).
For applied work, a useful hierarchy is:
- trend following: the broad family of rules that respond to persistent directional price movement;
- time-series / absolute momentum: a trend rule driven by an asset’s own past return or excess return;
- cross-sectional momentum: a relative rule that ranks assets by past performance.
The taxonomy is useful only if the exact signal equation and portfolio mapping are also given.
How to Interpret the Result
A momentum backtest answers a conditional question: what happened under this particular signal definition, timing rule, universe, portfolio map, and cost assumption?
It does not establish that the chosen horizon is uniquely optimal. If 6-, 9-, and 12-month lookbacks all produce similar conclusions, the result is less dependent on one arbitrary parameter than if only one horizon works. Parameter sensitivity should therefore be treated as part of the evidence.
A good robustness table separates:
- signal horizon \(h\);
- skip period \(s\);
- threshold or ranking rule;
- rebalance frequency;
- execution convention; and
- portfolio sizing.
Changing several at once makes it difficult to identify why the result changed.
Financial / Economic Example
Suppose monthly prices are
\[ (100, 102, 101, 105, 107, 106, 110). \]
At the final date, a three-month lookback that includes the most recent month gives
\[ m^{(3,0)}=\frac{110}{105}-1\approx 4.76\%. \]
A three-month lookback with one skipped month gives
\[ m^{(3,1)}=\frac{106}{101}-1\approx 4.95\%. \]
Both are positive, but they are not the same signal. With a longer or more volatile series, the skip convention can change the sign and therefore the portfolio decision.
The included Python example computes both versions and demonstrates the next-period timing map.
The price path is synthetic. It is used only to make signal endpoints and timing auditable.
Implementation
A minimal implementation should expose lookback and skip parameters explicitly rather than hide them inside index offsets.
import numpy as np
def momentum(prices, lookback, skip=0):
prices = np.asarray(prices, dtype=float)
end = len(prices) - 1 - skip
start = end - lookback
if start < 0:
raise ValueError("not enough history")
return prices[end] / prices[start] - 1.0For a panel of assets, compute the signal using only information available at the decision date, then map the signal to target weights. Portfolio accounting, drift, and turnover belong to the next stage rather than to the signal definition itself.
Parameter Sensitivity
Momentum results can be sensitive to formation horizon and execution choices. That sensitivity should be shown rather than optimized away.
A disciplined workflow is:
- pre-specify a primary lookback and timing convention;
- define a small economically motivated sensitivity grid;
- hold the rest of the backtest fixed while varying one dimension;
- report whether the economic conclusion survives; and
- avoid selecting the winning horizon after inspecting the same test sample.
When many alternatives are searched, the problem becomes a broader model-selection and multiple-testing issue, not just a momentum implementation detail.
Common Mistakes
Confusing own-history and relative momentum. A top-\(K\) ranking is cross-sectional even if the score itself is an own-history return.
Leaving signal endpoints implicit. “12-month momentum” does not reveal whether the most recent month is included.
Using same-close execution without evidence. A close used to form the signal cannot automatically be assumed available before an order filled at that same close.
Treating trend following as one formula. Moving-average, breakout, sign-of-return, and regression-slope signals may belong to the same family but are not numerically equivalent.
Optimizing the lookback on the reported test sample. This converts a simple rule into a data-mined model-selection exercise.
When Not to Use It
Momentum is not appropriate merely because a price history exists. Avoid treating it as a default when the research question is fundamentally valuation-, carry-, macro-, or event-driven. It is also a poor diagnostic if the available history is too short to support the intended formation window or if the tradability clock is unknown.
If the goal is to evaluate an entire portfolio path rather than define the signal, use QM007 and QM009 — Turnover, Transaction Costs, and Net Performance as complementary methods.
Used in SlackQuant Research
- Diversify the Decisions, Not Just the Assets: momentum/trend logic is part of the dynamic allocation sleeve architecture.
- When Protection Works but the Portfolio Still Lags: the defensive rule uses a 12-month trend signal whose timing and horizon are central to interpretation.
Reproducibility
The article includes a deterministic Python example and a compact hands-on lab. The validation script checks lookback endpoints, skipped-period indexing, and that a signal is mapped to the subsequent holding period rather than retroactively to the formation return.