纳入 ST 的短区间配对测量
退出证据补充:107个失败形成日/发行人事件仍未恢复收益。
复核日期:2026-10-18。这次已做实际配对测量,但仍不能认定纳入 ST 有可靠的收益增益。 近年状态覆盖可以量化核对;月度组合却有大量成员缺少可用终点价格。只看完整月份时,结果的正负号还会随共同样本变化。这里计算的是调整后价格的描述性组合标签,假设成本为零,不是成交回放、现金账本或可投资业绩。
本次承接上一轮 ST 可比性审计留下的问题,新增可复现方法、同样本配对和逐成员失败记录。以前冻结的研究正文和历史收益没有被改写。
区间与状态覆盖
主测量使用 36 个逐月形成日,从 2022-12-30 到 2025-11-28;标签起点从 2023-01-03 到 2025-12-01,最后一个终点为 2026-01-05。选择近年区间依据是历史状态覆盖,选择时尚未查看本次组合差值。同一供应商另一个 stock_st 正状态接口已有 2015—2025 年完整年度查询凭证;留存审计中,2024、2025 年正状态与重建记录完全一致,2023 年有四条漏项。这不是独立供应商认证,也不能证明非 ST 股票全集完整。
| 36 个形成日的覆盖项目 | 数量 |
|---|---|
| 清洗日线中的股票/日期记录 | 191,112 |
| 通过全部状态检查的非 ST 记录 | 185,243 |
| 通过全部状态检查的 ST 记录 | 4,836 |
| 状态未知,两组同时排除 | 1,033(0.541%) |
| 与另一接口正状态不一致 | 0 |
| 正状态的模拟可得日期晚于形成日 | 0 |
| 重建主表显示仍上市、但没有当日日线 | 551 |
| 有日线、但没有对应证券主表记录 | 25 |
| 相对上交所交易日历缺失的全市场交易日 | 0 |
以上是股票/日期累计记录,不是不同公司的数量。未知状态来自缺失或有歧义的历史名称,不能当作非 ST。证券主表缺失的股票不能通过上市资格检查;主表和行情的缺口意味着本次也不能自称完整历史全市场样本。
状态检查要求历史名称在形成日有效、公告日严格早于形成日,名称是否带 ST 与日线 is_st 一致;正状态还要求 st_available_from <= formation_date,并与另一正状态接口一致。另一接口查不到记录本身不构成“非 ST”的证据。退市整理期股票对两组都不作为新目标。
历史生效日、模拟公告可得日和版本安全是三件事。 本次使用的是 2026 年回查的数据。正状态来源在 2026-10-02 才被观察,实际可得政策是下一个上海自然日(2026-10-03),不能倒置成当年的决策输入;清洗字段 st_available_from 表示的则是按公告日重建的模拟可得日期。正状态资产明确标注 historical_pit_eligible=false,重建记录仍为 revision_safe=false。没有补齐原始发布版本和公告实际收取时间,所以这些检查不能认证当时真实可执行的历史决策。
两组只改变 ST 纳入规则
两组使用相同的证券主表、上市和退市日期、状态检查、形成行情、正市值及成交额条件,形成日均排除停牌;后来退市的公司在退市边界前仍保留。每个月最后一个交易日按总市值从小到大排序,同市值时按稳定证券代码排序。纳入组从已知状态股票中取最小 N 只,排除组去掉 ST 后再取最小 N 只;N 分别为 50、100、200,初始等权,不使用其他信号或缓冲区。
从形成后的下一交易日收盘,测到下一个月形成日之后的下一交易日收盘;平均各成员在区间内的调整价格变化,初始权重固定。成本统一假设为零,没有模拟涨跌停成交、参与率、持股、现金或结算。即使终点有成交额,也不等于这一篮子都能按收盘价成交。
先选成员,再检查未来价格。 起点和终点都须有正的调整价格和成交额,且未停牌;终点前或当日退市的成员,其终端价值仍记为未解决。任意成员失败,整个配对月份的两组收益都留空。没有按未来价格换股、重分配权重、沿用旧价填零收益,或假定损失 100%。失败成员仍保存在外部审计记录中。
月度结果与共同样本
差值均为“纳入 ST 减去排除 ST”,单位是每个测量区间的百分点,只在两组均完整的月份取算术均值,没有年化,也没有跨缺失月份拼接净值。
| N | 完整/尝试月份 | 纳入组平均 ST 只数,全部月份 | 两组平均共同权重,全部月份 | 各 N 自身完整月份的平均差值 |
|---|---|---|---|---|
| 50 | 15/36 | 9.14 | 81.72% | +0.202 个百分点 |
| 100 | 13/36 | 16.08 | 83.92% | −0.514 个百分点 |
| 200 | 9/36 | 34.31 | 82.85% | −1.028 个百分点 |
在各自完整月份子集中,纳入/排除两组的平均价格变化分别是:N=50 为 9.110%/8.907%,N=100 为 10.157%/10.671%,N=200 为 14.558%/15.586%。这些偏高的条件均值排除了未解决月份,不是整个区间的收益。
共同权重等于两组相同成员的数量除以 N,其余权重才是改变 ST 纳入规则后被替换的部分。这与过去的“去掉最小市值 0—30% 尾部”矩阵不同,是实际改变 ST 资格的对照。
三个 N 的完整月份不是同一批。进一步限制到三个 N 都完整的共同九个月,N=50/100/200 的平均差值变成 −0.752/−0.927/−1.028 个百分点,连 N=50 的正负号都变了。这说明结果对可观测样本敏感;共同九个月仍是事后留下的完整子集,不能代表所有月份。
| 标签起点年份 | N=50:完整月数/12;差值 | N=100:完整月数/12;差值 | N=200:完整月数/12;差值 |
|---|---|---|---|
| 2023 | 7;−0.007 | 6;−0.107 | 5;−0.550 |
| 2024 | 6;+0.721 | 5;−0.916 | 2;−2.232 |
| 2025 | 2;−0.619 | 2;−0.733 | 2;−1.018 |
表内差值单位仍为百分点。2025 年每个 N 都只剩两个月可测,不能将其中的组合均值外推为全年收益;缺失月份可能恰好包含本次最需要评估的风险。
缺价与退市没有被抹掉
| N | 未解决的组别/成员记录 | 去除两组重复后的形成日/成员记录 | 保留的后来退市公司数量 | 区间内终端事件 |
|---|---|---|---|---|
| 50 | 50 | 48 | 51 | 5 |
| 100 | 68 | 64 | 66 | 5 |
| 200 | 117 | 107 | 94 | 5 |
第一列会把同时出现在两组的失败成员计两次,第二列去除这种重复。后来退市公司数量还包含测量终点之后才退市的公司,说明没有把“最终退市”倒推成历史上不可选。五个终端事件都发生在纳入组,各 N 重复包含相同事件,不能跨 N 累加。
多数失败记录未通过终点价格、正成交额或非停牌检查,也有起点失败的记录;不能填成零收益。完整月份均值恰好避开了这些记录,所以还不足以回答纳入 ST 的经济效果。
事后追加的短持有区间探索
看到月度缺价后,才追加 2024、2025 两个相邻年度的每日形成、单交易日标签诊断。这是因覆盖问题事后追加的探索,不是预先设定的确认性检验。状态、排序、N、初始等权、下一收盘起算、零成本和成对缺失规则相同;形成频率和持有区间改了,因此差值大小不能直接与月度表比较。
| 标签起点年份 | N | 完整/尝试单交易日配对 | 完整配对的平均差值 |
|---|---|---|---|
| 2024 | 50 | 211/242 | −0.122 个百分点 |
| 2024 | 100 | 199/242 | −0.078 个百分点 |
| 2024 | 200 | 183/242 | −0.067 个百分点 |
| 2025 | 50 | 193/243 | −0.050 个百分点 |
| 2025 | 100 | 180/243 | +0.014 个百分点 |
| 2025 | 200 | 168/243 | +0.016 个百分点 |
短标签的完整率提高,但每年、每个 N 仍有 31—75 天的配对未解决。本次单交易日区间没有出现持有期内的退市终端事件,不能据此认为五个月度终端事件已经补齐结算。2024/2025 年分别排除了 6,883/6,719 条未知状态形成记录,正状态接口交叉核对差异均为零;历史版本安全的限制仍然存在。差值方向仍随年份和 N 改变。
更短标签即使有更多完整终点,也无法恢复跨停牌或退市持仓的清算价值。这里没有统计显著性、年化溢价或可部署策略的结论。
复现与下一步
英文主文保留完整命令与口径;对应的运行脚本、方法模块和回归测试已公开。原始数据和逐证券审计记录保留在仓库外,公开的只有经过复核的汇总数量与均值。
每次输出包含覆盖表、逐期配对表、汇总表、私有成员审计和版本凭证。凭证记录解析后的清洗版本、源清单、证券与名称文件、ST 版本、正状态来源、交易日历及代码哈希;以后复现必须核对这些版本,不能把更新后的 latest 自动当成同一次实验。凭证哈希覆盖清洗清单,未逐个哈希所有日线价格文件,因此逐字节复现还依赖数据所有者完整保留该版本。输出使用任务独立目录,不更新任何共享别名。
锁定依赖下的七个针对性回归用例通过;完整 Python 回归为 634 通过、14 跳过(未安装可选正式执行提供方与运行时集成),全仓 Python Ruff 检查通过。本任务没有修改网站文件。测试覆盖未知状态对称排除、同日公告、正状态可得日期、有歧义名称、缺失价格、成员不足和后续退市等边界;它们不能证明历史供应商数据完整。
下一步应针对已保留的月度失败成员,补充有日期的交易、公司行动与终端结算证据,再按同一月度协议重算。原始发布版本安全的状态和证券全集档案仍需另行补齐;更多短期价格标签不能代替它们。
Including ST stocks: a paired short-window measurement
Exit evidence follow-up: all 107 failed formation/issuer events remain unresolved; no returns are restored.
Reviewed on 2026-10-18. This run produces an actual matched descriptive comparison, but does not establish a reliable return benefit from including ST stocks. Status coverage is much better documented in this recent window. Missing endpoint prices still remove most monthly pairs, and the sign depends on which complete months are compared. These are adjusted-price basket labels, with zero assumed costs; they are not trades, a cash ledger or an investable performance series.
The preceding ST comparability audit left this measurement open. This follow-up adds executable methods, same-sample comparisons and explicit member-level failure records. It does not revise the earlier frozen studies or certify their historical inputs.
Window and state evidence
The primary measurement uses 36 monthly formations from 2022-12-30 through 2025-11-28. Entry closes run from 2023-01-03 through 2025-12-01; the last endpoint is 2026-01-05. The period was chosen for recent historical status coverage, before inspecting these basket differences. A same-provider stock_st positive-state source has completed annual retrieval receipts and no missing SSE open dates for 2015–2025. Its retained 2024 and 2025 audits exactly matched reconstructed positive states; the retained 2023 audit had four missing positive records. These checks cover positive states, not the entire universe or original publication history.
At the 36 formation dates, the new run observes:
| Coverage measure | Count |
|---|---|
| Clean daily security/date rows | 191,112 |
| Known non-ST state after all status gates | 185,243 |
| Known ST state after all status gates | 4,836 |
| Unknown state, excluded identically in both arms | 1,033 (0.541%) |
| Daily positive-state disagreement with the separate endpoint | 0 |
| Positive state lacking modeled availability by formation | 0 |
| Reconstructed active-master rows without a daily row | 551 |
| Daily rows absent from the dated instrument master | 25 |
| Missing observed market sessions versus the SSE calendar | 0 |
These are summed security/date observations, not counts of different firms. Unknown states here coincide with missing or ambiguous dated names; they are not silently classified as non-ST. A daily row without a master record cannot pass the listing gate. Missing master or daily observations prevent any claim that this is a complete historical market census.
Each usable state requires an active historical name, ann_date < formation_date, and agreement between that name’s ST marker and cleaned is_st. Positive states also require st_available_from <= formation_date. The separate positive-state endpoint must agree; absence there alone never establishes non-ST. Delisting-period names are excluded from new targets identically in both arms.
Effective dates and modeled announcement availability do not establish vintage safety. The sources were retrieved retrospectively in 2026. The positive-state source was observed on 2026-10-02, with an actual availability policy of the following Shanghai day (2026-10-03); it was not available to these historical decisions. The cleaned st_available_from field instead models announcement-date availability. The positive-state manifest explicitly says historical_pit_eligible=false; the reconstructed history says revision_safe=false. Same-provider agreement is not independent truth. No source supplies original release vintages or complete announcement receipt times. This measurement therefore remains retrospective and cannot certify a strictly historical trading decision.
What changes between the two arms
Both arms start with the same reconstructed active instrument universe, historical status gates, formation prices, listing and delisting dates, positive capitalization and traded amount, and non-suspended formation rows. Firms that delist later remain eligible before their actual delisting boundary. Unknown states are excluded from both arms.
At each monthly last market session, rank by total market capitalization, breaking ties by stable security code. The include-ST arm selects the smallest N known-state names. The exclude-ST arm removes ST and selects the smallest N remaining names. N = 50, 100 and 200 are separate size sensitivities. Every selected member receives initial weight 1/N. There is no buffer or other signal.
Measure each basket from the next market session’s adjusted close to the market session after the next monthly formation. Thus formation information never receives a same-close return. Hold the initial basket weights through that interval and average its member price changes. Both arms assume zero cost. The code models no fills, price-limit access, borrow, shares, cash, capacity or settlement; even a positive-volume endpoint need not have been executable.
Selection happens before inspecting entry or endpoint availability. An endpoint must have a positive adjusted price and traded amount and must not be suspended. A selected member delisted on or before the endpoint has an unresolved terminal value even if a price row exists. Any unresolved member invalidates the entire paired period. There is no replacement based on future prices, weight renormalization, stale-flat mark or assumed total loss. Both arm returns are then missing. Counts and member records remain available for those failed periods.
Monthly result and common support
The differences below are include-ST minus exclude-ST, in percentage points per measured interval, averaged only over periods complete in both arms. They are not annualized. No cumulative NAV is constructed across missing months.
| N | Complete / attempted monthly pairs | Mean ST members in include arm, all months | Mean common weight between arms, all months | Mean difference on this N’s complete months |
|---|---|---|---|---|
| 50 | 15 / 36 | 9.14 | 81.72% | +0.202 pp |
| 100 | 13 / 36 | 16.08 | 83.92% | −0.514 pp |
| 200 | 9 / 36 | 34.31 | 82.85% | −1.028 pp |
For those separate complete subsets, the include/exclude arm mean price changes are 9.110% / 8.907% (N=50), 10.157% / 10.671% (N=100), and 14.558% / 15.586% (N=200). These high conditional means leave out unresolved months and are not a full-window return.
Common weight is the number of identical selected names divided by N; the remaining weight is replaced when ST eligibility changes. This measures actual membership change, unlike the earlier 0–30% size-tail matrix.
The complete-month sets differ across N. Restricting every N to the same nine complete months changes the mean differences to −0.752 pp, −0.927 pp and −1.028 pp for N = 50, 100 and 200. The N = 50 sign reverses from its own 15-month subset. This is sensitivity to observed support, not evidence that the nine months are representative.
The annual breakdown uses the year of the entry close:
| Entry year | N=50 complete / 12; difference | N=100 complete / 12; difference | N=200 complete / 12; difference |
|---|---|---|---|
| 2023 | 7; −0.007 pp | 6; −0.107 pp | 5; −0.550 pp |
| 2024 | 6; +0.721 pp | 5; −0.916 pp | 2; −2.232 pp |
| 2025 | 2; −0.619 pp | 2; −0.733 pp | 2; −1.018 pp |
Only two monthly pairs survive in 2025 at every N. The very large observed basket means in some complete subsets cannot be extrapolated into a year: missing periods can contain precisely the risks being studied.
Terminal and missing-price boundary
| N | Unresolved selected arm/member records | Different unresolved formation/member records | Different eventually delisted firms retained in selections | Terminal events before endpoint |
|---|---|---|---|---|
| 50 | 50 | 48 | 51 | 5 |
| 100 | 68 | 64 | 66 | 5 |
| 200 | 117 | 107 | 94 | 5 |
Arm/member records count a shared member twice when it appears in both arms. Different formation/member counts remove that duplication. Eventually delisted firm counts cover the entire dated master, including delistings after the label endpoint; these firms were not removed retrospectively. All five distinct formation/member terminal events occur in the include-ST arm at every N. Counts across N repeat those events and must not be added together.
Most unresolved records fail a price/positive-amount/non-suspension endpoint gate; some fail the entry gate too. They cannot be assigned zero returns. The monthly complete-pair means condition away these observations and therefore cannot settle the economic effect of including ST.
Exploratory shorter horizon
After observing the monthly missing-price problem, a daily-formation, one-session forward-label diagnostic was added for 2024 and 2025. This was an exploratory coverage sensitivity chosen after seeing monthly incompleteness, not a prespecified confirmation test. It keeps the same classification, ranks, N, equal initial weights, next-close lag, zero assumed cost and paired missing-mark rule; it changes the holding interval and formation frequency. Its magnitude cannot be compared directly with a monthly mean.
| Entry year | N | Complete / attempted one-session pairs | Mean difference on complete pairs |
|---|---|---|---|
| 2024 | 50 | 211 / 242 | −0.122 pp |
| 2024 | 100 | 199 / 242 | −0.078 pp |
| 2024 | 200 | 183 / 242 | −0.067 pp |
| 2025 | 50 | 193 / 243 | −0.050 pp |
| 2025 | 100 | 180 / 243 | +0.014 pp |
| 2025 | 200 | 168 / 243 | +0.016 pp |
Coverage improves at this shorter horizon, but 31–75 paired days per year/N remain unresolved. No in-label terminal delisting event appears in these one-session selections; this does not validate settlement for the five monthly terminal events. Known-state coverage remains retrospective: the 2024/2025 runs exclude 6,883 / 6,719 unknown formation records, with zero positive-state cross-check disagreements. The sign still varies across year and N.
Even with more complete endpoints, this shorter label cannot recover a liquidation value for a position carried through suspension or delisting. Conditional mean differences remain descriptive; no significance, annualized premium or deployable trading claim is made.
Reproduction and next useful evidence
The implementation is the runner, status and pairing methods, and regression fixtures. Raw and security-level audit records remain outside this public repository. The public report includes aggregate derived counts and means only.
With owner-published assets under an explicitly supplied MARKET_DATA_ROOT and a task-specific external RESEARCH_OUTPUT directory:
uv run --locked --extra duckdb --extra dev python scripts/analyze_st_paired_short_window.py \
--data-root "$MARKET_DATA_ROOT" --output "$RESEARCH_OUTPUT/monthly-v1"
uv run --locked --extra duckdb --extra dev python scripts/analyze_st_paired_short_window.py \
--data-root "$MARKET_DATA_ROOT" --output "$RESEARCH_OUTPUT/daily2024-v1" \
--frequency daily --start 20231229 --end 20250103 --execution-year 2024
uv run --locked --extra duckdb --extra dev python scripts/analyze_st_paired_short_window.py \
--data-root "$MARKET_DATA_ROOT" --output "$RESEARCH_OUTPUT/daily2025-v1" \
--frequency daily --start 20241230 --end 20260105 --execution-year 2025
Each output contains coverage.csv, periods.csv, summary.csv, a private selection_audit.parquet, and receipt.json. The receipt pins the resolved clean version, manifest, dated instrument and name files, ST version and receipt, positive-source content, calendar, script and method hashes. A latest pointer is resolved for convenience, so future reproduction must use the retained receipt and confirm identical version hashes; silently consuming a newer alias is a new experiment. The receipt hashes the clean manifest, not every daily price file, so byte-for-byte price reproduction also depends on retaining the owner asset version intact. The output directory must not already exist. No shared latest pointer is updated.
Validation: seven focused regression cases pass with locked dependencies; they cover identical non-ST support, unknown exclusion, same-day announcements, positive availability, ambiguous names, missing endpoints, insufficient N and later delisting. The full Python suite reports 634 passed and 14 skipped (optional formal provider/runtime integrations unavailable); repository Python Ruff checks pass. No website files were changed by this task. These tests validate the measurement rules, not historical source completeness.
The useful next step is to resolve the retained monthly failed member records with dated trading, corporate-action and terminal-settlement evidence, then recompute the same monthly paired protocol. A revision-safe original-vintage status/universe archive remains a separate missing requirement. More complete price labels or shorter holding periods cannot supply that archive.