微盘股:收益证据与水下时间

English page

研究状态:历史规则重建与风险描述,不能代表 Wind 指数或可成交策略。 当前数据源覆盖至 2026-09-17。最小市值 400 的下一交易日收益审计可计算至 2026-09-16。组合规模 N 为 50、100、200、400、800。

先看结论

这页最可靠地说明了风险:按规则重建的小市值组合曾出现很深的下跌,也有多年低于前期高点。早年收益异常仍在核查,退市股票、历史成分和真实成交也没有完全复原,所以不能把这些净值当成指数表现或真实账户收益。

这里的 水下期,指组合净值跌到过去最高点以下、直到重新超过那个高点的时间;最大回撤是样本中从一个高点跌到随后低点的最大幅度;**净值(NAV)**是把组合价值按起点标准化后的走势。读回撤时要同时看跌了多少、花多久恢复,以及缺失价格怎样处理。

公共执行引擎的短窗口诊断及长窗口阻断原因见微盘执行模拟诊断。历史纸面收益与该诊断账本采用不同口径,不能直接拼接。

2026-09-18 缺失价格审计与数据新鲜度

最新审计使用 Tushare daily-clean、suspend_d 和 stock_st。行情源最后交易日为 2026-09-17,收益形成日最后可计算到 2026-09-16。报告生成于 2026-09-18。网页主图仍是已审核的历史快照,数据源更新日期不代表主图已经全部重算。

最小市值 400 组合共有 2,122 条缺失持仓:1,638 条有直接停牌证据,210 条同时有停牌和 ST 证据,274 条仍未分类。当前 instruments 资产没有可用的退市日期证据,因此不做退市填值,也不伪造清算价格。

market-research report microcap-repair --config configs/local.toml 会在仓库外生成缺失明细、分类汇总和日级敏感性。严格口径仍是主结果。partial、carry_all_missing 和 carry_evidence_only 只用于边界分析。最后一种只对有 suspend_d 证据的缺失按 0 收益处理。没有证据的 gap 不自动前值填充。

本次 2015-01-05 至 2026-09-16 的 N=400 结果如下。严格口径有 1,846 个完整交易日,期末净值 10.7020,最大回撤 -30.96%。partial 有 2,846 个交易日,期末净值 112.6480。证据型 carry 有 2,733 个交易日,期末净值 131.4470。不同口径的有效交易日不同,不能直接当成同一条净值比较。

文中几个英文名称

  • Tushare:提供行情和其他金融数据的接口。
  • daily-clean:清洗后的日行情数据。
  • suspend_d:每日停牌记录。
  • stock_st:ST 状态记录。
  • ST:特别处理股票。
  • PIT:点时数据,也就是当时已经可以获得的信息。
  • NAV:净值。
  • ETF:交易型开放式指数基金。

项目内部的键值保留原样,便于和代码、数据文件对应。页面和说明文档第一次出现时会补充中文解释,后文直接使用中文名称。

微盘股是什么

这里的微盘组合按一套固定规则构建:每个选股日将合格 A 股按总市值从小到大排序,取最小的 N 只并等权。它展示这套规则的历史走势,不能代表某个官方指数或真实账户。

组合越小,例如 N=50,越容易受少数股票、停牌和退市处理影响。N=800 分散程度更高,但仍偏向小市值股票。

先看风险:回撤与恢复

组合规模 N全样本最大回撤最长已完成水下期已完成水下期中位数P90P95
50-59.9%446 交易日22741
100-61.8%44523251
200-63.2%44522853
400-65.7%50633766
800-68.8%61123799

时长单位均为交易日,分位数只统计已经结束的水下期。中位数为 2 天,表示一半已完成的水下期在两天内收复前高。少数长时期会把尾部拉长,所以还要看 P90、P95 和最长值。

水下表示净值低于此前最高点。N=400 最长的一段已完成水下期从 2011-04-22 开始,2012-01-05 到达谷底,比前高低约 33.9%,直到 2013-05-24 才收复前高。从高点到恢复共 507 个交易日,其中 506 天处于水下。

全样本最深回撤发生在另一组峰谷之间,N=400 最大回撤约为 -65.7%。净值从 100 跌到约 34.3 后,回到 100 需要上涨约 192%。风险评估要同时看跌幅和恢复时间。样本结束时仍未恢复的时期属于右删失,表中没有把它们混入已完成时期。

不同 N 的最长水下时间并不随股票数量单调变化。N=50、100 和 200 的最长已完成水下期为 445 至 446 天。仅凭这五组数据,无法推断组合越小就一定水下越久。

为什么把 2008 年作为补充起点

此前的最小 400 只日频序列从 2015 年开始。补充 2008–2014 年可以观察更早的回撤路径,也避免把 2001–2007 年与后续市场视为相同制度环境。股权分置改革在 2005 年后推进,监管层在 2007 年底称改革基本完成。之后市场制度仍持续变化,融资融券也在后续推出。因此,2008 年只是便于比较的研究起点,结果还应按市场阶段分别观察。

本次分析没有把早年制度差异当作微盘收益或风险的成因。结果只说明,按当前规则重建的组合在 2008 年以后曾经历多年水下期。

本次用平台已发布的 Tushare 资产补做了 2008–2014 年独立审计区间。日频和 daily_basic 均覆盖 2008-01-02 至 2014-12-31,共 1,702 个交易日。历史加载器已兼容平台资产的 data/ 分区目录,运行结果保存在仓库外的 microcap_history_2008_2014 目录。

2008–2014 年的回撤结果

组合规模 N最大回撤最长已完成水下期P90P95
50-59.9%420 个交易日2333
100-61.8%2822341
200-63.2%4422242
400-65.7%5063147
800-68.8%61135111

结果沿用统一的收盘形成、下一交易日收盘执行和再下一交易日收盘计价规则。早年源没有完整可靠的 ST 与停牌资格字段,仍标记为不完整证据。return_unknown_flat 和 return_unknown_total_loss 两种缺价压力情景在这段区间的汇总结果相同,原因是当前已分类的缺价没有触发未分类缺价扣损。

这段补充数据把最早的风险路径从 2015 年前移到了 2008 年,但没有解决微盘收益异常、退市估值、容量和实际成交问题。它适合描述历史回撤,不应直接当作可投资净值。

规则是怎样拼起来的

  • 2008–2014 使用 Tushare daily、daily_basic 和 adj_factor,以收盘价乘复权因子构造价格。2015 年以后使用清洗后的日频复权价格和资格字段。
  • 形成日排除当日不符合资格的 ST、停牌、非正市值、非正成交额和无效价格,再用当日可见总市值排序、最小 N 等权。
  • 当日收盘数据形成信号。为避免把收盘后才知道的市值当成同一收盘价可成交,下一观测交易日收盘作为执行价,从执行日收盘到再下一交易日收盘计算持有收益。执行日停牌的目标按未成交现金处理并单独计数。持仓后的确认停牌缺报价用前值持平。无法匹配到停牌记录的缺价另算持平和当日全部损失两种敏感性。
  • 收益区间的执行价格与下一次计价价格必须来自同一数据源。2014-12-30 形成的组合在 12-31 旧源成交、再用 2015-01-05 新源计价,因此整段跳过。2014-12-31 形成的信号在 2015-01-05 新源成交并以 01-06 新源计价,可以保留。

年度和逐日明细、水下时期表、数据来源路径及运行收据保存在本机受控数据目录。网页只展示经过审查的汇总,不公开原始行情、机器路径或逐股数据。

数据检查告诉我们什么

2008–2014 年的 N=400 重建包含 1,701 个已计算持有区间、6,275 个执行日停牌未成交计数和 6,291 个持仓后停牌持平标记,没有无法分类的缺价。2015 年以后,N=400 有 1,542 个执行日停牌未成交计数、1,534 个持仓后停牌持平标记和 196 个未分类缺价事件,占目标持仓日约 0.017%。未分类缺价同时保留持平和全损两种压力情景。

早期版本把形成日收盘当作可成交价格,但当日完整市值要到收盘后才能得知。当前版本在 t 日收盘形成信号,t+1 日收盘执行,并计算从执行收盘到 t+2 日收盘的收益。因此,早期版本与 2015 年后参考序列的逐日相关比较已经失效。统一执行时点后才能重新对账。

我们也独立核对了价格计算公式。统一成交时点后,2015 年 N=400 复权收盘价组合年度收益约 +397.44%,使用 Tushare pct_chg 重算约 +397.46%,日收益绝对差的均值约为 0.00012 个百分点。这只能说明常规收益公式基本一致,不能验证点时成分、退市终值或成交能力。

收益还不能怎么解释

早期版本把形成日收盘当作可成交价,造成前视偏差。中间版本又漏掉了跨越 2014 和 2015 年数据源的价格尺度变化。这些版本报告的 1,130 天、-67.1% 和 -74.9% 等数字都已作废。当前版本在 t 日收盘形成组合,t+1 日收盘成交,并计算 t+1 至 t+2 日的收益,同时跳过执行价与下一次计价价格来自不同数据源的区间。

修正后,2013 至 2016 年的账面累计增长仍然异常:N=50 超过 3,700 倍,N=400 超过 26 倍。这是需要进一步审计的警讯,不能当作可信投资收益。2015 年价格收益公式与供应商日收益字段接近,但幸存者偏差、点时成分、退市估值、公司行动、次日成交和容量问题仍未排除。早期收益尚未通过逐股审计,不用于估计微盘溢价。报告中的回撤是按当前时序、筛选和缺价假设计算的风险路径,不能视作供应商官方指数或可成交账户净值。

当前模型没有计入手续费、涨跌停无法成交、停牌锁仓资金占用、市场冲击、现金余额或组合容量。水下时间只是净值序列的描述统计,不能说明投资者能按该净值实际买卖。

2013–2016 年复权审计的当前边界

我们用逐股复权价格做了诊断性检查。2013–2014 年的组合可以正常生成,历史 2008–2014 使用独立 adj_factor 资产,2015 年以后使用清洗日频资产中的同名字段。两套来源在 2015 年切换,仍需单独核对切换边界,不能把跨来源的跳变直接解释为公司行动。审计脚本现在可以稳定跑完 2008–2016 区间,并分别输出 N=50、100、200、400、800 的年度诊断和每组前 20 个复权因子跳变。

在 2013–2014 年,N=50 组合年度累计收益约为 47.1% 和 84.5%,N=400 约为 -1.7% 和 9.8%。把清洗日频资产接到 2015–2016 后,N=50 的 2015、2016 年累计收益约为 539.0% 和 519.5%,N=400 约为 25.0% 和 5.1%。这些数字只是诊断输出,不能直接当作投资收益。若干进入最小市值组合的股票出现约 2 倍至 4.7 倍的复权因子单日跳变。这些跳变可能对应分红送转,也可能是数据拼接问题。没有逐项对照公司行动前,不能把这段累计收益解释成微盘溢价。

诊断脚本为 scripts/audit_microcap_adjustments.py。它只读取仓库外的数据资产并输出审计收据,不生成公开净值。示例:

uv run --extra duckdb python scripts/audit_microcap_adjustments.py \
  --data-root ~/data/quant/market-data-platform \
  --output /tmp/microcap-adjustment-audit.json \
  --start 2013-01-01 --end 2016-12-31

脚本的结果只能定位需要核查的股票和日期,不能替代公司行动核对。下一步要逐项核对这些跳变对应的分红送转、配股、增发、停牌复牌和数据源切换,并把公司行动前后的原始收盘、复权因子和复权价格放在同一张审计表中。平台还有一份 dividend_implemented_pit.parquet,覆盖 4,254 只股票和 1991 年以来的已实施事件。对 2013–2016 年异常跳变做七天窗口匹配时,五种 N 的前 20 个跳变中可匹配事件数为 1 至 8 个。扩展到 2008–2016 年后,同一诊断的匹配数为 0 至 2 个。其余日期仍没有匹配记录。没有匹配记录不等于没有公司行动,可能是日期字段、事件类型或复权算法差异,因此仍标记为待核查。

审计脚本现在还会记录价格来源,并先在完整逐股日频上识别跳变,再与各 N 的组合成员交叉。这样股票较晚进入组合时,不会把真实事件日期推迟到首次入选日。重新跑完 2008–2016 年后,五种 N 的前 20 个跳变中,数据源边界跳变均为 0,公司行动表在七日窗口内可匹配 17、17、18、18、17 个(对应 N=50、100、200、400、800)。仍未匹配的日期需要逐股检查其他公司行动类型、日期字段和复权算法。此前按组合稀疏日期计算得到的 7、10、10、15、15 个边界跳变已作废。新增字段为 price_vintage、previous_price_vintage 和 boundary_jump,收据仍只保存在仓库外。

下一轮研究顺序

  1. 逐股复权审计:锁定 2013–2016 N=50/100/200/400/800 的组合成员和最大收益贡献个股,检查 adj_factor 跳变、原始收盘价与复权价连续性、分红送转、上市首日/停复牌、退市终值。先核对是否为真实公司行动,再判断回报幅度是否可信。
  2. 边界敏感性:并排跑前复权/后复权口径、除权事件日期、退市处理和缺价压力情景。不允许用今天仍上市的股票名单回填早期资格。
  3. 拆制度与市场阶段:保留全样本统计,同时分别展示 2008–2012、2013–2016、2017–2019、2020–2023、2024–2026 的收益、最大回撤、水下时长、换手、ADV 与样本覆盖。先审数据再解读收益。
  4. 加可投资性:用点时 ADV、涨跌停成交阻断、停牌锁仓、冲击成本、现金账本重建 NAV。把纸面净值与可执行账户区分。
  5. 报告水下分布:保留峰值、谷底、恢复日、跌幅、下跌时长、恢复时长和右删失标记。报告 1/2/3/5 年概率时用生存分析方法,避免只统计已恢复时期造成幸存者偏差。

目前可以确认的是,按历史窄小盘规则重建的组合曾经历多年回撤。早期收益异常和实际成交能力仍需独立审计。

小微盘研究地图:历史、因子与执行

本节于 2026-10-16 整理公开证据,没有重新运行实验,也没有延长各项样本。专题入口将相关问题串起来,原有详细记录继续保留。

问题已有公开证据主要限制下一步
最小市值组合的历史收益和风险N 为 50、100、200、400、800 的重建、回撤、水下期和缺价敏感性历史资格、公司行动和退市价格不完整;不同缺价口径有效交易日不同逐持仓核对报价缺口和结算事件
收益是否来自规模暴露规模因子与市场阶段的历史风格研究多空因子的方向和构造不同于微盘多头组合同一账本下剔除微盘尾部并重算形成日信号
低换手增加了什么低换手研究中的共同样本控制、置信区间与短期前瞻记录条件关联不等于因果溢价;股票分组收益不等于可执行组合冻结前瞻规则并继续积累观测
组合规则是否改变结果20、60、120 日换手窗口的公开对照历史样本已反复查看,不能据此确认最优参数在一致份额核算下复核冻结的规则
组合能否成交公开执行诊断中的现金与受阻交易核算独立短样本、复权价格代理和假设成本,不能据此确认容量固定目标与日期,对账并校准冲击
不同市场的小盘股是否同样容易交易市值组的成交额与覆盖比较、早期 A 股换手背景币种、日期和资格不同;换手率与成交额是不同指标统一样本、币种与执行约束

组合身份与图表来源

供应商参考指数、日频最小 N 重建、月频低换手候选和短期执行诊断分别保留身份。持股数量相同或都叫“微盘”,不意味着收益可比。比较时必须核对样本、信号与执行时点、权重、缓冲、缺价处理、成本和模拟器,不能拼接净值。

新增窗口对照图直接读取公开 low_turnover_exploration.json 的 window_sensitivity。快照生成于 2026-09-16,整体覆盖截至 2026-07-31;方法为 2015–2026 日频数据、月度形成、40 只目标持仓、60 只缓冲和 10bp 交易费。这是低换手窗口对照,不是小盘加低换手复合组合。快照中的收益和回撤单位为百分数,年化交易换手单位为倍数。后续记录若出现不同数字,需要说明版本差异,不能保留旧来源却悄悄替换数值。

影响解释的修正

  • 使用收盘后市值却假设同一收盘成交的早期重建已作废;现将信号收盘与下一交易日执行收盘分开。
  • 旧版 2014–2015 边界曾用不同来源的执行与估值价格计算同一持有期收益,该区间已剔除。早期历史资格字段仍不完整。
  • 后续低换手验证改用下一交易日开盘至期末收盘,要求两端价格完整。最新 86 个月共同样本不能与早期归因表混用,详见最近一轮验证。
  • 份额核算、闲置现金和延迟成交会改变收益及调仓频率排序。权重筛选模拟与股份账本保留各自身份;参与率限制提高模拟收益,只能视为成交路径敏感性,不能证明信号增加了超额收益。
  • 2024–2026 已在多项历史比较中查看,应保留为描述性样本。

公开补充研究原始记录保留修正过程,并标明低换手旧结果已被后续口径替代;专题不把旧数字复用为当前收益结论。

待补齐的公开对照

找回的 0%/10%/20%/30% 剔除与权重聚合矩阵已在专题报告公开,同时保留独立现金账本的容量输出。同一时期的研究说明记载矩阵使用 10bp 成本,但原始命令和运行收据尚未找回。主筛选表不能说成是在 1 亿元资金下执行:资金参数没有传入执行计算。历史代码提交仍未知,这些结果也不等于同一账本下的执行对账。后续需要核实历史设定,在共同样本上区分规模、流动性、极端收益、特质波动、换手和质量,并固定目标与日期,对照理想持有份额和受限现金账本。120 日新复算在 90 个有效观测时净年化为 4.22%,同一输入改为 45 个观测后为 6.26%,原公开值为 7.60%。门槛会影响结果,但既不能确认历史方法,也没有完全解释差距。

后续补充应保留实验身份、来源版本、样本日期、形成时可得信息、股票池、基准、指标单位、成本、缺价规则、模拟器和局限。网站只发布经过审查的汇总产物,不公开供应商原始数据、私有策略配置和私有复现路径。来源不能追溯的历史数字继续标注来源报告状态,不能根据几个汇总指标虚构净值曲线。