Quant Finance

What is Momentum?

The empirical tendency for assets that have recently outperformed to continue outperforming, and for underperformers to continue underperforming, over a 3-12 month horizon.

In Plain English

One of the most counterintuitive findings in empirical finance is that momentum works. Stocks that have outperformed their peers over the past 3 to 12 months tend to continue outperforming for another few months, while laggards tend to continue lagging. This flies in the face of the efficient market hypothesis, which would predict that past returns carry no information about future returns. Yet momentum is one of the most robust and replicated findings in all of academic finance — documented across asset classes, geographies, and time periods spanning over 200 years.

The behavioral explanation is that investors underreact to new information. When a company reports strong earnings, not everyone processes the news immediately. Some investors are slow to update, creating a gradual drift in prices that produces the momentum pattern. As more investors eventually recognize the signal, prices continue adjusting for months.

Cross-sectional momentum ranks stocks against each other: go long the top decile, short the bottom decile. Time-series (absolute) momentum asks a simpler question: is this asset above its own moving average, i.e., is it trending up? Both approaches capture related but distinct patterns.

The catch: momentum crashes. During market reversals — especially after sharp bear markets — recent winners often become the biggest losers as leverage unwinds. The March 2009 and 2020 recoveries both saw catastrophic momentum reversals. Managing momentum drawdowns requires either regime detection (reducing exposure during volatile markets) or portfolio construction techniques that limit crowding.

Narrative momentum — the kind VectorFin captures through earnings call embeddings — tends to lead price momentum. Management language becoming consistently more optimistic often precedes positive price momentum by a quarter or two, before sell-side analysts update their models.

Technical Definition

Cross-sectional momentum signal for stock i at time t:

MOM_\{i,t\} = r_\{i,t-12:t-1\} (12-1 momentum: cumulative return from 12 months ago to 1 month ago, skipping the most recent month to avoid short-term reversal contamination)

Standard implementation: rank stocks by MOM, form quintile or decile portfolios, long top decile / short bottom decile, rebalance monthly, equal-weight within groups.

Time-series momentum (Moskowitz, Ooi, Pedersen 2012):

Signal_\{i,t\} = sign(r_\{i,t-12:t\}) × (1/σ_i)

where the strategy goes long/short an asset based on whether its own trailing 12-month return is positive/negative, scaled by recent volatility.

Information decay: momentum signal IC (information coefficient) peaks at roughly 3-6 months forward horizon and decays to near zero by 24 months. The t+1 month reversal (short-term contrarian) is the flip side of the same microstructure phenomenon.

How VectorFin Uses This

VectorFin's sentiment_drift signal is a narrative momentum indicator: the cosine distance between consecutive earnings call embeddings, with sign indicating direction (positive drift = language becoming more optimistic). This signal leads price momentum because qualitative changes in management commentary typically precede quantitative changes in financial results.

The whystock_score composite incorporates both price momentum (12-1 month return) and sentiment momentum (sentiment_drift) as complementary factors. When both agree — price trending up AND management tone improving — the combined signal is substantially more predictive than either alone.

GET https://api.vectorfinancials.com/v1/signals/sentiment-drift/{ticker}?period=2024-Q3
GET https://api.vectorfinancials.com/v1/signals/whystock-score/{ticker}?date=2024-10-01

Code Example

import requests
import pandas as pd

API_BASE = "https://api.vectorfinancials.com"
API_KEY = "vf_your_api_key_here"

# Combine price momentum (from whystock_score components) with narrative momentum
tickers = ["NVDA", "AMD", "INTC", "QCOM", "AVGO", "TSM", "ASML", "AMAT", "LRCX", "KLAC"]

combined = []
for ticker in tickers:
    # Get composite score (includes price momentum)
    score_resp = requests.get(
        f"{API_BASE}/v1/signals/whystock-score/{ticker}",
        params={"date": "2024-10-01"},
        headers={"X-API-Key": API_KEY},
    )
    # Get sentiment drift
    drift_resp = requests.get(
        f"{API_BASE}/v1/signals/sentiment-drift/{ticker}",
        params={"period": "2024-Q3"},
        headers={"X-API-Key": API_KEY},
    )
    if score_resp.ok and drift_resp.ok:
        combined.append({
            "ticker": ticker,
            "price_momentum": score_resp.json()["components"]["momentum"],
            "sentiment_drift": drift_resp.json()["drift_score"],
        })

df = pd.DataFrame(combined)
# Conviction filter: both momentum signals agree
df["combined_signal"] = df["price_momentum"] * df["sentiment_drift"]
df = df.sort_values("combined_signal", ascending=False)
print("Momentum + narrative alignment ranking:")
print(df.to_string(index=False))

Put Momentum to work in your pipeline

Access AI-ready financial data — embeddings, signals, Iceberg tables.