AArcher / Quant Research中文

FACTOR / MOMENTUM-20D

First formal case · Dynamic study verified

20-Day Price Momentum Factor

The first complete study spanning point-in-time data boundaries, multi-horizon evidence, portfolio meaning, and reusable engineering components.

20Yhistory
4,839factor dates
904securities
5horizons
252rolling window

HYPOTHESIS

Research objective

Test whether stocks with stronger trailing 20-day performance retain higher future-return ranks, and whether that relationship persists across 1, 5, 10, 20, and 60 days and through time. Twenty days is the lookback window, not a fixed holding period.

Factor definition
Momentumi,t = Pi,t / Pi,t−20 − 1

Twenty days is the lookback window; validation spans forward 1 / 5 / 10 / 20 / 60 days.

METHOD

Research workflow

  1. 01Load continuous prices and the point-in-time eligibility matrix
  2. 02Calculate 20-day momentum before filtering the daily cross-section
  3. 03Calculate 1/5/10/20/60-day forward returns
  4. 04Produce IC, Rank IC, annual and rolling stability
  5. 05Test five-quantile monotonicity and membership turnover
  6. 06Build gross research portfolios from realized next-day returns

IMPLEMENTATION

Production implementation

The critical order is factor first, point-in-time eligibility second; reversing it would truncate lookback history around index entry.

research/momentum_20d_dynamic_20y.pyPYTHON
factor_raw = calculate_momentum_factor(
    price_df, window=20
)
factor_eligible = factor_raw.where(eligible_mask)

The eligibility mask controls daily ranking access; it does not define the factor.

01 / INFORMATION COEFFICIENT

What IC actually measures

One cross-sectional test per day: do factor ranks and future-return ranks move in the same direction?

Rank ICt = Corr(Rank(Factort), Rank(Returnt→t+h))
MethodMeasuresInputUse
PearsonLinear associationRaw valuesSupplementary IC
SpearmanMonotonic rank associationRanks firstPrimary Rank IC
KendallPairwise order agreementCompares pairsRobustness extension
HorizonRank IC meanRank ICIRPositive rate
1D−0.022136−0.10333646.05%
5D−0.027300−0.13523145.70%
10D−0.025614−0.13136946.57%
20D−0.032834−0.17098445.11%
60D−0.024181−0.13387045.87%

02 / STABILITY

Annual slices show dispersion; rolling windows show continuous change

A 252-observation window approximates one trading year. Cross-horizon values are aligned to the common end date 2026-05-08.

252-observation rolling Rank IC for 20-day momentum
Above zero is momentum-like and below zero reversal-like; repeated crossings expose regime dependence.

03 / MONOTONICITY

Quantiles translate correlation into a return gradient

Q1 is lowest momentum and Q5 highest. One day is mildly momentum-like; 5–60 days generally show an in-sample Q1-over-Q5 reversal.

Mean forward returns by 20-day momentum quantile
HorizonQ1Q5Q5−Q1
1D0.035989%0.055287%+0.019298%
5D0.272876%0.178727%−0.094149%
10D0.544002%0.368808%−0.175194%
20D1.226383%0.748503%−0.477880%
60D3.367177%2.933612%−0.433565%
Why this is not simply momentum failed

The direction can change with the prediction horizon. Twenty days is only the historical lookback; forward one day and forward twenty days test different questions.

04 / TURNOVER

Rank changes eventually become trading pressure

Membership turnover = 1 − overlap with the prior group / current group size. It is not traded-notional turnover, but it exposes cost sensitivity early.

19.06%Q1 · 1D
16.58%Q5 · 1D
42.42%Q1 · 5D
38.04%Q5 · 5D
81.29%Q1 · 20D
77.95%Q5 · 20D

05 / GROSS PORTFOLIOS

Use realized next-day returns instead of compounding overlapping forward returns

Rₚ,ₜ = Σwᵢ,ₜ₋₁Rᵢ,ₜ. Weights lag by one trading day; these are gross research portfolios without costs or fill constraints.

Cumulative NAV of Q1, Q5, and normalized reversal portfolios
Normalized reversal = 0.5×Q1−0.5×Q5 for 100% gross exposure; raw Q1−Q5 carries 200%.
Q12.270final NAV · 4.36% annual
Q56.232final NAV · 10.00% annual
Normalized reversal0.558final NAV · −2.99% annual

06 / ENGINEERING AFTER RESEARCH

Complete the factor first; extract abstractions from real repetition

The new components do not retrofit the first formal factor. They are independently verified and will be adopted from the next factor onward.

01

Selection

Top/Bottom percentile selection

02

Weighting

Equal weight plus an extensible registry

03

Holdings

Cadence, carry-forward, and execution lag

04

Returns

Strict weight/return alignment

05

Adoption

Preserve factor one; adopt from factor two

Verification evidence

Across the 20-year sample, old and new Q1/Q5 return series each contain 4,838 dates with zero maximum absolute difference. Top-20% ceil selection and quintile Q5 choose 54 versus 53 names when 266 are eligible; the 0.0185185 gap is definitional, not a bug.

EVIDENCE & LIMITS

Evidence and boundaries

Related strategy: Top-20% Equal-Weight Momentum →