QuantProp. Analyze a trade file ↗
stockback / Experiment design

EXP-017 — Cross-sectional medium-term momentum on a point-in-time universe

Preregistered design for medium-term momentum on a point-in-time Korean universe with 200 random controls and strict data gates.

Original record: not stated in the original · Migrated: 2026-10-27 · Translated from Korean: 2026-10-27
A historical record, not rerun in this migration.

The figures, hypotheses and verdicts of the time are preserved. A past positive result or candidate mention does not mean validated profitability today or a live-trading recommendation. Validation periods that were already used are not treated as new independent validation.

This is an English translation of a preserved Korean original. It describes conditions at the time of writing, not current provider specifications, costs or regulations.

EXP-017 — Cross-sectional medium-term momentum on a point-in-time universe

  • Status: conditional design complete · not run, waiting for required reference data
  • Contract: common contract
  • Hypothesis: does relative strength over the past 12 months, excluding the most recent 1 month, predict the return over the following 1 month?
  • It is the opposite time scale to the EXP-015 short-term reversal. It is not a hypothesis automatically rejected if short-term reversal fails.

Required data

  • The list of investable common stocks at the time including listings/delistings, code changes, and historical trading halts/administrative status.
  • Point-in-time consistent total-return history including corporate actions, raw prices and cash dividends. Delisted symbols' last prices and settlements/losses are not omitted.
  • Keep the time a filing became known to the market separately from our collection time. Historical data are not all excluded just because they were collected now, nor is it assumed that the latest corrections were known in the past.
  • If the same code is run on the current 3,552-symbol snapshot only, the result is an implementation diagnostic and is not used for this experiment's historical generalization verdict. Without the required data, the main performance run is data_hold.

Universe and rules

  • Common stocks listed at month-end t with history ≥252 trading days, median trading value over the last 60 days ≥ 1,000,000,000 KRW, positive volume ≥55/60 days, excluding symbols under a trading halt disclosed at the time.
  • Top 300 by trading value over the previous 60 trading days, universe fixed until the next month. Halt new additions if fewer than 100.
  • Signal M12_1 = TRI_(t-21) / TRI_(t-252) - 1. 21 and 252 are market trading days, not the symbol's row count.
  • Buy the top 10 by descending rank, each targeting 9.5% of NAV. Ties broken by symbol code.
  • No SMA200 or positive-return filter in the base form. Absolute trend filters are not added to mix in a new hypothesis.
  • Replace/rebalance to the new top 10 at each month-end. Execute by the common rule of selling to the prior day's confirmed targets → using the funds the next day, and reflect turnover and that one day of cash exposure in the comparison groups too.
  • Do not liquidate fully just because a symbol leaves the universe mid-month. Follow the next month-end replacement or the corporate-action/liquidation contract in force at the time. Delisting losses must not vanish outside the universe.

Controls and matrix

  • 1st control: 200 random accounts drawing 10 names evenly from the same universe with monthly equal weights, seed17000~17199, the mean of each account's daily log-returns. Each keeps its own holdings/dividends/cash path.
  • Additional comparisons: market ETF 95%, a monthly equal-weight universe account, cash. If 300 names cannot be bought at equal weight with 3,000,000 KRW, disclose the difference between the original target and actual purchases.
  • Signal {12-1 months, 6-1 months (TRI_(t-21)/TRI_(t-126)-1)} × number of symbols {10,20} × 3 periods × 4 costs = 48 strategy cells.
  • 1st cell fixed at 12-1/10 symbols/history_B/proxy_slip2. Random controls for 10 symbols only: 200×3×4=2,400 paths. Equal-weight/market/cash in a separate 36 cells.

Evaluation

  • In history_B: completed months ≥36, symbols with actual holding experience ≥30, and order/corporate-action/delisting accounting gates passed.
  • Research promotion: own net return >0, lower CI bound of the 1st excess effect >0, positive history_A excess effect, positive own net return and excess effect under both cost stresses, positive after excluding the best symbol/year P&L.
  • Publish the full distribution of the 200 random controls. Do not substitute a good rank bucket picked afterwards, or KOSDAQ/sectors only, for the 1st result.
  • Explain by regime whether momentum loses when previous losers recover in sharp rebounds, but do not add a filter that predicts sharp rebounds from future returns.
  • Diagnose daily return correlation and worst-month overlap with EXP-015 as a follow-up. Optimizing a blend weight is a separate ID.

Validation and outputs

Synthetic tests cover past delistings, future code changes, the 21-day exclusion window, preventing double-counting of dividends and splits, a common month-end time, ranks and ties, partial rebalancing and residual unfilled positions. The differences between the source and the point-in-time universe, monthly ranks/targets/actual weights, trade/cash/entitlement ledgers, costs, turnover, MDD, market comparison, random distributions and the verdict table will be written later.

Source and migration evidence

Source: docs/test-plans/EXP-017-cross-sectional-momentum-design.md

Original SHA-256: c4872e0fed02c0b67348bacc06f33a03e1fb99d726289d92dbc007242563d57b

Raw data and account information are not part of the public package. The original results do not replace statistical or scientific revalidation. The English text is a translation; numbers, tables and charts are carried over unchanged.