Insights
Cross-Sectional Momentum Stock Data With Fixed Baskets
Alphanume Team · August 5, 2026
Cross-sectional momentum stock data is backtestable when each published basket is stored as it existed at rebalance. The Quant Galore Momentum Index supplies 10 ranked constituents per monthly date, with concentration and turnover left for the researcher to model.
Cross-sectional momentum ranks stocks against one another and holds the leaders. Alphanume's endpoint GET /v1/quant-galore-momentum-index returns the maintained monthly baskets from a deeply liquid US equity universe whose members have at least six consecutive weeks of listed weekly option expirations. Each rebalance has exactly 10 stocks.
The response contains date, ticker, and rank, where rank 1 is the strongest momentum name in that basket. It contains no weights, prices, returns, benchmark values, or execution costs. That narrow contract is useful because it separates the published selection record from whatever portfolio implementation a researcher chooses.
Treat each basket as fixed
Field or rule | Meaning | Audit |
|---|---|---|
date | Monthly rebalance date | Expect 10 rows for every complete date |
ticker | Constituent selected on that date | Retain later delisted or merged names |
rank | Ordering from 1 through 10 | Check uniqueness and full rank set |
publication time | 4:05 PM New York time | Use the next eligible session for a tradeable implementation |
Historical baskets remain fixed after publication, so later failures stay in the months when they were selected. That removes reconstruction bias from the selection list. The outcome side still needs a survivorship-complete price source and dated identifier history. A fixed basket cannot repair missing delisting returns in another dataset.
The cross-sectional versus time-series momentum explainer is a useful conceptual companion. This dataset implements the cross-sectional side as a published basket.
Pull the full monthly history
The route accepts exact date or date ranges and returns rows ordered by date descending, then numeric rank ascending. It does not paginate. Query the intended window, group by date, and reject any incomplete rebalance before calculating performance. A missing row can reflect tier restrictions or a partial local artifact rather than a nine-stock month.
import os
import requests
import pandas as pd
response = requests.get(
"https://api.alphanume.com/v1/quant-galore-momentum-index",
headers={"X-API-Key": os.environ["ALPHANUME_API_KEY"]},
params={"date_gte": "2020-01-01", "date_lte": "2025-12-31"},
timeout=30,
)
response.raise_for_status()
baskets = pd.DataFrame(response.json()["data"])
counts = baskets.groupby("date").size()
rank_sets = baskets.groupby("date")["rank"].apply(lambda values: set(values))
assert counts.eq(10).all()
assert rank_sets.apply(lambda values: values == set(range(1, 11))).all()Save the raw response and the validation summary. Free access covers a trailing 20-session delayed window, which may contain only one monthly rebalance. A long history requires the full-history tier.
Compare rank 1 with all 10
Portfolio | Monthly construction | Risk to disclose |
|---|---|---|
Rank 1 | One name from each rebalance | Extreme single-name concentration |
Equal-weight 10 | 10% per published constituent | Concentrated high-beta momentum basket |
Rank-weighted | Predeclared monotonic weight by rank | More exposure to an unvalidated rank-return relation |
Benchmark | Same entry and exit sessions | Mismatch if calendars or dividends differ |
Use the first eligible session after the 4:05 PM publication as the entry clock, then hold until the next published rebalance under a consistent close or open rule. Calculate rank 1 and equal-weight 10 from the same price source and event calendar. This comparison tests whether the top rank carries the basket or whether breadth matters.
Rank is an ordering, not a position weight or expected return. The rank-1 result is only 1 security per month, so a few names can dominate the entire record. Report median monthly return, hit rate, worst month, drawdown, and contribution by constituent rather than relying on a compounded endpoint.
Turnover belongs in the result
- Compute monthly overlap. Compare each date's ticker set with the prior set.
- Count entries and exits. A five-name replacement is 50% one-way basket turnover before weighting changes.
- Map identifiers. Ticker changes and mergers need dated entity continuity.
- Apply costs. Use the same entry clock, spread model, and slippage rule for both portfolios.
- Show concentration. Report top-name contribution and sector exposure from a dated classification snapshot.
Monthly rebalancing means a constituent stays until the next rebalance even if it breaks down mid-month. The universe also excludes thin, non-optionable names by construction, so results do not generalize to the full equity market. Historical compounding is a realized record and not an expected return.
For the equal-weight basket, a simple one-way turnover check is 1 - overlap / 10, where overlap is the number of tickers shared by consecutive rebalances. Save the entered and exited symbols too, since the same turnover percentage can hide very different single-name exposures and trading costs.
Reproduce six rebalances
Pull six complete dates, verify 10 unique ranks on each, and export the basket, turnover matrix, and rank-level contribution table. Compare rank 1 with the equal-weight basket using next-session entry and a common return source. Keep missing prices and identifier changes in the audit.
Explore the published constituents on the Quant Galore Momentum Index page and follow the Momentum Index guide before extending the history.