Microcap studies: ST eligibility and comparability audit
Reviewed on 2026-10-18. The studies do not share one verified historical ST exclusion rule. The current execution diagnostic has the strongest explicit status gates, but its reconstructed history is not revision safe. Earlier long-history returns and retained screening tables cannot inherit those gates retrospectively. No matched return premium from including or excluding ST stocks is established here.
This is a document and code audit, not a backtest rerun. Public code was inspected at d569806; the current private research implementation was read only. Current code describes available safeguards, not proof that an earlier retained run used them. No private configurations, security-level records or reproduction locations are published.
Audit by evidence family
| Study or version | Historical ST / *ST evidence | Delisting boundary | Portfolio and return identity | Permitted comparison |
|---|---|---|---|---|
| Early same-close microcap reconstruction; mixed-source 2014–2015 interval | Earlier status coverage does not repair the execution timing or source mismatch | Not a verified settlement history | Superseded returns | None as current performance evidence |
| 2008–2026 daily smallest-N reconstruction, N = 50 / 100 / 200 / 400 / 800 | Before 2015, the loader sets the daily is_st field to false, then applies reconstructed ST intervals only when ann_date < formation_date. Since 2015 it also uses cleaned is_st. No complete historical status coverage is proved for the early period; the loader does not enforce the execution diagnostic’s versioned availability receipt | Formation requires an instrument record and a date before delisting; previously held terminal prices and cash settlement remain incomplete | Daily equal weight; formation close → next observed close execution → following close valuation. No fees or cash ledger; unresolved prices have flat and total-loss sensitivity cases | Compare N and missing-price scenarios within the same reconstruction and valid dates; do not splice into a trading ledger |
| Low-turnover candidate and window exploration, including 20 / 60 / 120 sessions | Current formation helper removes date-symbol keys found in historical ST data; this is more specific than excluding today’s ST list. The helper itself does not require announcement timestamps or a revision-safe receipt | Current simulator consumes delisting dates and a terminal-return assumption; an assumed terminal return is not recovered settlement | Published window snapshot: monthly formation, 40 targets, 60-name buffer, 10 bp protocol fee; continuous-weight and share-ledger results are separate | Within one frozen input, engine, dates and fee setup only. Older attribution windows were superseded; do not compare their magnitudes as a new ST effect |
| Retained 0% / 10% / 20% / 30% size-tail exclusion and weighting matrix | Current robustness helper calls the same historical date-symbol ST filter. Historical source commit and command receipt remain unknown; current code cannot authenticate the retained run | Same distinction between formation eligibility and eventual exit accounting | Monthly screening, alternative weights and separate capacity outputs. Historical fee is unverified even though dated notes report 10 bp | Descriptive comparisons inside the retained matrix, explicitly conditional on its unresolved provenance; not a fully reconciled execution experiment |
| Early January 2025 execution diagnostic | Old cleaned daily input and temporary instrument snapshot; one later corrected historical ST classification is documented | Extension encountered an unresolved delisting exit | Short continuous simulation; superseded input identity | Migration record only |
| Current execution diagnostic, Q1 2025 and H1 2026 replays | Complete versioned reconstructed-ST receipt plus st_available_from; historical namechange requires announcement strictly before the decision date and effectiveness on that date. Unknown names, names containing ST (including *ST), and delisting-period names are excluded; cleaned is_st adds a second gate. Policy: announced_prior_close_only.v1 | No new targets on/after known delisting; exit audit blocks residual shares or trades on/after delisting. The two documented replays have no in-window delisting targets, so do not validate settlement | Equal smallest-N targets; persistent shares and cash, T+1, 5% participation, price-limit blocking, adjusted-close proxy, 5 bp assumed cost | Mechanism diagnosis within this ledger only; not direct comparison with paper NAV or the 10 bp window table |
| Later historical repair, exclusion and execution reconciliation work | Status evidence, company actions and common-support checks are separate gates; no single repaired series has been certified by this audit | Event classification and exit evidence do not by themselves supply settlement prices | Retained aggregates, reconstructed screening and cash-ledger outputs retain separate identities | Follow the current research map; unresolved provenance and accounting gaps remain visible |
What “exclude ST” does and does not establish
Historical date membership, announcement-time availability, and completeness are different requirements. A dated ST interval is stronger than applying today’s name backwards, but later corrections can still change it. The current execution note records revision_safe=false and missing original input release times. Its prior-day announcement convention is conservative because announcement receipt times are absent; it is not a certified intraday availability history.
Removing a stock from tomorrow’s target does not liquidate an existing holding. Removing every company that eventually delisted from all earlier dates would introduce survivorship bias. The reviewed public history instead checks listing dates at formation; it still needs holding-level terminal valuation. A stale last price, an assumed loss and a recovered cash settlement cannot be treated as interchangeable.
The 0–30% exclusion matrix removes the smallest market-cap tail after its eligible reference universe is formed. It is not an include-ST versus exclude-ST experiment. Size quintiles in the cross-market liquidity explorer describe traded value and coverage, not portfolio returns, and cannot answer the ST return question either.
Conditions for a useful matched test
Freeze a versioned historical universe including later delistings; document ST and *ST coverage and announcement availability for every formation date. Keep the same sample, prices, weighting, rebalance clock, benchmark, missing-price policy, execution engine, costs and settlement treatment in both arms. Report unknown status separately rather than treating it as non-ST. Carry existing holdings through blocked exits. Only then vary the ST inclusion rule and report common-support results and coverage sensitivity.
This audit did not establish those conditions across the full historical sample, so it publishes no invented return difference. It also makes no claim about Wind or Tonghuashun index rules: a vendor reference series is not a replication, and vendor eligibility would require a dated primary methodology document.
Is this already displayed?
The market-research source already exposes /research/microcap/ with historical charts, the research map, retained exclusion comparisons, window sensitivity and separate execution evidence. Its low-turnover page also links the research record. These are existing evidence displays, not a previously completed unified ST audit. This note adds the explicit version-by-version boundary. Live deployment and the separate factor-observatory consumer must be checked independently; repository content alone does not establish their deployed state.
Inspectable public sources
- History input eligibility and interval timing, and history return construction.
- Execution status receipts, historical names and delisting checks.
- Retained comparison provenance contract.
- Historical revisions and study identities.
The private read-only review confirmed that the current candidate eligibility helper uses historical date-symbol ST keys, and that the robustness reference universe calls that helper. This verifies current implementation structure only; historical run identity remains unknown where stated above.
小微盘研究:ST口径与可比性审计
核对日期:2026-10-18。**现有研究没有采用同一套已经验证的历史ST剔除口径。**当前执行诊断的状态门禁最明确,但历史数据仍是重建记录,不能保证不受后续修订影响。长期纸面收益和早期留存筛选表不能追溯继承这些门禁。本次没有得到同样本“含ST/不含ST”的收益差。
本次核对文档和代码,没有重跑回测。公开代码基线为 d569806,私有研究代码仅作只读核查;当前实现不能证明早期留存结果当时采用了相同规则。这里不公开私有配置、证券明细或复现位置。
按研究版本核对
| 研究或版本 | 历史ST/*ST状态 | 退市处理边界 | 权重、调仓、收益与成本 | 可以比较什么 |
|---|---|---|---|---|
| 最早同收盘选股成交版本,以及混用数据源的2014–2015持有区间 | 补充状态数据不能修复成交前视或跨源价格问题 | 未形成经验证的结算历史 | 相关收益已作废 | 不作为当前业绩证据 |
| 2008–2026最小N日频重建,N=50/100/200/400/800 | 2015年前加载器将日线 is_st 设为false,再用重建区间按 ann_date < 形成日 排除;2015年起另用清洗日线 is_st。早期历史状态覆盖未被证明完整;入口也没有强制执行诊断所需的版本化可用时间收据 | 形成日需有证券记录且早于退市日;持仓终值和现金结算仍不完整 | 日频等权,形成收盘→下一观测收盘执行→再下一收盘计价。没有手续费或现金账本;无法解释缺价分别按持平和全部损失给出敏感性 | 同一重建、相同有效日期内比较N和缺价规则;不能接成执行账本 |
| 低换手候选与20/60/120日窗口 | 当前资格函数按历史日期与证券键排除ST,不是把今天的ST名单倒推;但函数本身不要求公告时间或不受修订影响的收据 | 当前模拟器使用退市日期和终值收益假设;假设损失不等于实际结算 | 已发布窗口快照为月频、40目标、60缓冲、协议成本10bp;连续权重与份额账本分开 | 仅在相同输入、引擎、日期和成本下比较。旧归因收益窗口已被替代,差额不能解释成ST效应 |
| 留存的0%/10%/20%/30%市值尾部剔除及权重矩阵 | 当前稳健性函数复用历史日期ST过滤;旧结果源代码提交和命令收据不明,不能用当前代码认证历史运行 | 入池资格和最终退出核算仍需区分 | 月频筛选、多种权重,容量输出另列;笔记写10bp,但历史实际成本未验证 | 只能作附带来源限制的矩阵内部描述,不能称作同账本执行对照 |
| 早期2025年1月执行诊断 | 使用旧清洗日线和临时证券快照,后来记录了历史ST误标修正 | 扩展区间曾遇到无法解释的退市退出 | 短期连续模拟;输入版本已被替代 | 仅保留迁移记录 |
| 当前执行诊断,2025年一季度及2026年上半年 | 完整版本化重建ST收据和 st_available_from,再以历史更名数据要求公告早于决策日、生效不晚于决策日。简称未知、含ST(包括*ST)或处于退市整理期均排除;清洗 is_st 再过滤。固定政策为 announced_prior_close_only.v1 | 已知退市日及之后不新增目标;残余股数或退市日及之后成交会阻断。两段记录没有期内退市目标,不能验证真实结算 | 最小N等权目标;持续份额、现金、T+1、5%参与率、涨跌停阻断、复权收盘代理、5bp假设成本 | 仅诊断该账本的机制;不能直接和纸面净值或10bp窗口表比较 |
| 后续历史修复、剔除及执行对账 | 状态、公司行动和共同样本分别有证据门禁;本次没有认证一条完整修复收益序列 | 事件分类和退出证据本身不能补出结算价格 | 留存汇总、重建筛选和现金账本仍各有身份 | 依当前研究地图阅读,并保留未解决的来源与核算限制 |
“剔除ST”还不能证明什么
历史日期上的状态、公告时点是否可知、覆盖是否完整,是三个不同条件。带日期区间比倒推今天的简称更好,但后续修订仍会改变记录。当前执行诊断明确写有 revision_safe=false,也缺少原始输入的真实发布时间。由于没有公告接收时刻,只采用前日及更早公告;这不是经过认证的盘中可用时间历史。
从明日目标中删掉股票,不代表已持仓卖得出去。把所有最终退市公司从早期历史全部删掉会引入幸存者偏差;公开重建检查的是形成日的上市区间,仍需补齐持仓终值。最后报价持平、假设损失和核实现金结算不能互相替代。
0–30%剔除矩阵是在先形成的合资格股票池里剔除最小市值尾部,不是含ST与不含ST对照。跨市场流动性页面的市值分组描述成交额和覆盖,不是组合收益,也不能回答ST带来多少收益。
怎样才能做同样本检验
先冻结包含后来退市证券的历史股票池,并逐形成日说明ST和*ST覆盖与公告可用时间。两组保持相同样本、价格、权重、调仓时点、基准、缺价政策、执行引擎、成本和结算处理,单独报告未知状态,不把未知视为非ST;被阻断退出的持仓持续留在账本。随后只改变ST纳入规则,报告共同样本结果与覆盖敏感性。
本次没有证明全历史满足这些条件,因此不补造收益差。也不据此推断万得或同花顺的指数规则:供应商参考序列不等于自行复制的指数,比较其资格规则还需要对应日期的一手编制文件。
现有结果是否已经展示
market-research源码的 /research/microcap/ 已汇集历史图表、研究地图、留存剔除对照、窗口敏感性与单独执行证据,低换手页面也链接研究记录。这些既有展示不代表此前已经完成统一ST审计。本说明新增的是逐版本口径边界。线上实际版本及独立的factor-observatory消费者应分别检查,不能仅凭仓库内容断言部署状态。
可核对的公开来源
私有代码只读核查确认:当前候选资格函数使用历史日期与证券键过滤ST,稳健性参考股票池调用该函数。这只证明当前实现结构;表内注明的历史运行身份仍然未知。