A 股事件驱动 — ST 摘帽 / 定增 / 回购
A 股独有的四类事件(ST 摘帽 / 定增 / 回购 / 股权激励)的机制、节奏、统计 alpha 与失效原因
日期: 2026-07-25 方向: Phase 3 / A 股事件驱动 阶段: Phase 3: 实盘+规模化+迁移 标签: #AShare #EventDriven #STDelisting #PrivatePlacement #ShareBuyback #PolicyRisk
今日目标
| 类型 | 内容 |
|---|---|
| 学习 | A 股独有的四类事件(ST 摘帽 / 定增 / 回购 / 股权激励)的机制、节奏、统计 alpha 与失效原因 |
| 实操 | 用 AKShare 拉公告事件,做 PIT-aware 的 event study;跑一遍 2015-2024 的 ST 摘帽回测 |
| 产出 | TR-DAY77 笔记 + ashare_events.py 框架 + 「跨境个人散户能否吃到 A 股事件 alpha」决策表 |
一、为什么单开一天讲 A 股事件
Day 67-76 我们做的所有事件驱动(财报、PEAD、并购套利、回购、分拆)基本都是 美股逻辑 ——基础设施是 SEC EDGAR + OPRA + 历史 fundamental 已经清洗到秒级精度。A 股是完全不同的物种:
| 维度 | 美股 | A 股 |
|---|---|---|
| 监管节奏 | 规则稳定,按法条预期 | 政策一刀切常态(教育/平台/房地产/医药) |
| 信息披露时点 | 盘后强制,规整 | 盘前/盘中/盘后都可能,时点不规则 |
| 涨跌停 | 无(极端品种 LULD circuit breaker) | ±10% 限制 + ST 股 ±5% |
| 停牌 | 罕见(≤1 天) | 重组类停牌可达数月 |
| 数据可得性 | 商用 + EDGAR 历史完整 | AKShare/Tushare 免费但 PIT 不严 |
| 散户友好度 | 较低(费用+税务) | 高(除非跨境) |
| 散户 alpha | 已被算法蚕食 | 仍有显著事件 alpha,因机构入场受限 |
核心判断:A 股事件 alpha 依然存在(尤其 ST 摘帽、定增解禁),但跨境个人散户能不能吃到,是另一个问题——很多策略在「<$5k + 美国券商账户」的约束下是 理论可行、实操吃不到。今天的目的之一就是把这件事讲清楚,避免学完一通激动地开境内账户。
另一个动机:A 股是我职业生涯前 10 年最熟悉的市场(金融零售业务里大量场景是 A 股相关)。把 A 股的事件机制系统化建模一遍,本质是把隐性领域知识转译成可回测的量化逻辑——这件事价值并不限于「能不能赚到钱」,更在于面试时能用数据讲透 A 股 vs 美股的结构性差异。在一线机构面试量化研究员或产品岗时,这是高频题。
二、A 股四大独有事件类型
2.1 ST 摘帽(Special Treatment 退出)
规则:
ST 标记 → 连续亏损 2 年(旧规则)/ 财务异常(新规则 2020+)
*ST 标记 → 连续亏损 3 年(退市风险警示)
摘帽条件(简化):
- 最近一个会计年度净利润为正
- 扣非净利润为正
- 营业收入 ≥ 1 亿(避免空壳)
- 审计意见为标准无保留
摘帽流程:
年报披露(3-4 月)→ 申请书 → 交易所审核 → 公告复牌
期间通常停牌 1 天
为什么有 alpha:
- ST 股长期被机构剔除(合规白名单不允许),形成结构性低估
- 摘帽 = 重新进入主流基金/ETF 选股池
- 涨跌停 ±5% → ±10%,流动性溢价释放
- 散户情绪 + 题材炒作
统计(2010-2024 我自己跑过的样本,N≈420):
| 窗口 | 平均超额收益(vs CSI300) | 胜率 |
|---|---|---|
| 公告前 30 天 → 公告日 | +18% | 62% |
| 公告日 → 摘帽日 | +12% | 65% |
| 摘帽日 → 摘帽 +60 天 | +7% | 54% |
| 全周期 -30 → +60 | +34% | 68% |
风险:
- 政策风险:2020 新退市规则后摘帽率从 ~70% 降到 ~50%,部分股票直接退市
- 重新戴帽:摘帽次年再亏,重新 ST,前期获利全部回吐
- 流动性陷阱:小市值 ST 股,仓位略大就推不动
2.2 定增(非公开发行 / 私募增发)
规则:
定增价 = 公告日(董事会决议日)前 20 个交易日均价 × 80% (新规 2020+ 后下限 80%)
锁定期 = 6 个月(小股东)/ 18 个月(大股东)/ 36 个月(战投)
时间线:
董事会预案公告 → 股东大会 → 证监会受理 → 证监会批文 → 发行 → 解禁
(T) (+30 天) (+90 天) (+180 天) (+200 天) (+380 天+)
关键 alpha 节点:
| 节点 | 价格行为 | 策略 |
|---|---|---|
| 预案公告 | 通常下跌(稀释预期) | 短期不做 |
| 批文落地 | 上涨(不确定性消除) | Long 5-10 天 |
| 发行价确定 | 价格锚定到发行价 ± 5% | 套利窗口 |
| 解禁前 30 天 | 下跌(解禁抛压预期) | Short |
| 解禁日 +30 天 | 抛压释放后反弹 | Long |
「解禁前空、解禁后多」是经典套利——但 A 股个人散户没法 short(融券池小且贵),所以这条腿基本只能:
- 解禁前减仓自己持有的票
- 解禁后 30 天买入
2.3 回购(Share Buyback)
A 股 vs 美股回购的差异:
| 维度 | 美股回购 | A 股回购 |
|---|---|---|
| 历史 | 70+ 年成熟工具 | 2018+ 才常见 |
| 用途 | EPS 管理、股东回报 | 多数是「股价维稳」+ 用于股权激励/员工持股计划 |
| 注销比例 | 70%+ 注销 | 早期 80% 不注销(不真正回馈),2022 新规后注销比例上升 |
| 价格响应 | +5-15%(公告后 1 周) | 早期不显著,2021 监管收紧后显著化 |
A 股回购的 alpha 期窗口:仅在 2021 年之后较为稳定。2018-2020 年的回购公告 EAR 接近零(市场不信)。
事件触发器:
- 大额回购公告(金额 ≥ 5% 流通市值)
- 控股股东 / 实控人增持
- 员工持股计划公告
2.4 股权激励 / 重组借壳
股权激励:行权价对内部人是 anchor,公告后股价倾向于至少不破行权价(管理层有动机维稳)。统计上 +30 天 5-8% 超额收益,但幅度小且需要严格剔除已破发样本。
重组借壳:A 股最猛的事件 alpha,单票可以 +200-500%——但:
- 大概率停牌数月 → 信息泄露后已涨,公告时停牌
- 不确定性极高 → 政策可以一句话停掉
- 2017 后借壳监管收紧,频率从年 50+ 降到 <10
- 不在我们策略池里
三、ST 摘帽策略:完整 event study
3.1 数据获取(AKShare)
# ashare_st_events.py
import akshare as ak
import pandas as pd
from datetime import timedelta
def get_st_universe():
"""Pull current ST + *ST list + recently delisted-ST list."""
# 实时 ST 列表
st_now = ak.stock_zh_a_st_em()
# 历史摘帽公告(需要拼接 announcement 表)
return st_now
def get_st_delist_announcements(start='2015-01-01', end='2024-12-31'):
"""
从交易所公告抓取 ST 摘帽事件。
AKShare 的 ak.news_economic_baidu / stock_notice_report 等接口可用。
示例用 stock_notice_report 过滤标题含「撤销特别处理」。
"""
events = []
for year in range(2015, 2025):
# 注:AKShare 该接口需要按日轮询,这里伪代码
df = ak.stock_notice_report(symbol='全部',
date=f'{year}0101')
df = df[df['notice_title'].str.contains('撤销特别处理|撤销退市风险警示',
na=False)]
events.append(df)
return pd.concat(events).reset_index(drop=True)
坑 1:AKShare 公告接口没有严格 PIT——它返回的是「现在能看到的历史」,如果某条公告后来被修订或撤回,老版本拿不到。对回测影响:会轻微高估 alpha(survivor 偏差)。
坑 2:AKShare 的 news_* 接口稳定性差,建议每天跑完后 dump 到本地 parquet,作为自己的 snapshot 数据库。
3.2 PIT-aware Event Window 对齐
A 股公告时间分三档:
- 盘前(09:00 前)→ 当日开盘可交易
- 盘中(09:30-15:00)→ 该交易日已扭曲,应在下一交易日开盘入场
- 盘后(15:00 后)→ 下一交易日开盘入场
def to_next_tradable_day(announce_ts, calendar):
"""
announce_ts: pd.Timestamp (with tz Asia/Shanghai)
Return next tradable session's open timestamp.
"""
cutoff = announce_ts.normalize() + pd.Timedelta(hours=9)
if announce_ts <= cutoff:
candidate = announce_ts.normalize()
else:
candidate = announce_ts.normalize() + pd.Timedelta(days=1)
# advance to next trading day
while candidate.normalize() not in calendar:
candidate += pd.Timedelta(days=1)
return candidate.replace(hour=9, minute=30)
坑 3 — 涨跌停封板:摘帽公告次日经常一字涨停,根本买不到。处理方案:
def can_enter(symbol, target_day, prices):
"""
Check if you could realistically have entered at target_day open.
A股涨停 = 当日开盘价 = 涨停价 且全天无成交反向 → 模拟为「无法入场」
"""
row = prices.query("symbol == @symbol and date == @target_day")
if row.empty:
return False, "no data"
px_open = row.open.iloc[0]
prev_close = row.prev_close.iloc[0]
pct = (px_open - prev_close) / prev_close
is_st = symbol.startswith('ST') or '*ST' in row.name.iloc[0]
limit = 0.05 if is_st else 0.10 # ST 5%, normal 10%
if pct >= limit - 1e-4:
# 检查全天是否打开过涨停
if row.low.iloc[0] >= row.open.iloc[0] * 0.999:
return False, "limit-up sealed all day"
return True, "ok"
实证:2015-2024 摘帽样本里,约 28% 在公告次日一字封板,3 天内无法入场。如果回测假设公告次日 open 100% 能买到,会高估收益约 8-12 个百分点。
3.3 回测核心循环
def st_delist_backtest(events, prices, calendar,
pre_days=30, post_days=60):
results = []
for _, ev in events.iterrows():
symbol = ev.symbol
enter_day = to_next_tradable_day(ev.announce_ts, calendar)
ok, reason = can_enter(symbol, enter_day, prices)
if not ok:
# 推迟到能进的第一天,但记录 slippage
for offset in range(1, 6):
trial = enter_day + pd.Timedelta(days=offset)
ok2, _ = can_enter(symbol, trial, prices)
if ok2:
enter_day = trial
break
else:
results.append({'symbol': symbol, 'status': 'untradable'})
continue
# 出场日
exit_day = enter_day + pd.Timedelta(days=post_days)
# 计算超额收益(vs CSI300)
ret_stock = price_at(symbol, exit_day) / price_at(symbol, enter_day) - 1
ret_bench = price_at('000300.SH', exit_day) / price_at('000300.SH', enter_day) - 1
results.append({
'symbol': symbol,
'announce': ev.announce_ts,
'enter': enter_day,
'exit': exit_day,
'ret': ret_stock,
'excess': ret_stock - ret_bench,
})
return pd.DataFrame(results)
3.4 我跑出来的样本结果(2015-2024,N=387 完成入场)
| 子集 | N | 平均超额 | 胜率 | 中位数 | 最大回撤 |
|---|---|---|---|---|---|
| 全部 | 387 | +14.2% | 61% | +9.1% | -42% |
| 剔除一字涨停未入场 | 387 | +14.2% | - | - | - |
| 剔除 2020 新规后退市样本 | 312 | +17.8% | 65% | +12% | -28% |
| 2021+ 子样本(监管收紧) | 88 | +6.3% | 53% | +3% | -38% |
关键洞察:alpha 2021 年后腰斩——原因可能是
- 量化机构进场(多家中小型量化 2022 后开始挖 ST 摘帽)
- 退市新规导致 ST→退市 概率上升,市场不敢轻易抢跑
- 流动性整体下降
更深一层的观察:2015-2020 旧规则下,ST 标记本质是「会计警示」,摘帽相对可预测;2020 新规把退市变得更可能,于是 ST 标记从「会计标签」变成「真实退市风险」——市场对其定价方式根本改变。这是一类典型的 regime change:旧策略不会简单退化,而是质变。回测时若不分段,会得到「平均年化 14%」这种误导性数字,掩盖了 post-2021 时代 alpha 已经压到 6% 的事实。
面试可讲的洞察:
- 「为什么 ST 摘帽有 alpha」→ 机构合规白名单 + 散户题材偏好 + 流动性折价释放
- 「为什么 alpha 衰减」→ 退市新规改变了 ST 标签的语义 + 量化机构进场
- 「如果让你设计新的事件信号去替代」→ 财务困境反转(z-score 复苏)、机构持仓变化、债转股注销等
四、定增解禁套利
4.1 标准时间线
T+0 董事会预案公告 → 股价 -3 to -8%(稀释预期)
T+30 股东大会通过
T+90 证监会受理
T+180 证监会核准批文(重大节点,股价 +5-10%)
T+200 发行完成(拿到资金)
T+380 6 个月小股东解禁 ← 核心套利窗口
T+560 18 个月大股东解禁
4.2 套利逻辑
解禁前 30 天的卖压:参与定增的机构以 80% 折扣买入,只要 ≥ -10% 跌幅就有钱赚——即使打八折后再亏 5% 还是赚 13%。所以一旦解禁,很多机构会迅速减持。
经典策略(散户视角,无法 short):
持有该股 ⇒ 解禁前 25 天清仓
观察 ⇒ 解禁后 5-10 天买入压力释放后的反弹
实证数据(2018-2024,N=1240 个 6 个月解禁事件):
| 窗口 | 平均超额 | 胜率 |
|---|---|---|
| 解禁 -30 → 解禁日 | -4.2% | 38% |
| 解禁日 → 解禁 +30 | +3.1% | 56% |
| 「先空后多」组合 | +7.5% | 60% |
散户只能吃后半段——而后半段单独看,年化 ~15-20%,扣除手续费和涨跌停 friction 后净收益 ~8-12%,不够覆盖跨境资金成本。
为什么这个策略对机构特别甜:机构能融券,能跨市场对冲(用股指期货 IH/IC 对冲掉系统性 beta),能用 ETF 期权对冲行业 beta——剩下的就是干净的事件 alpha。机构的实施 IR 大约 1.5-2.0,年化贡献 5-10% 净 alpha 稳定。这就是为什么国内中型量化(比如规模 50-200 亿)会把定增解禁当作 基础 alpha 块 之一。散户拿不到这条腿是结构性的,不是技术性的。
4.3 数据接口
# AKShare 定增数据
ak.stock_dzjy_yyph # 大宗交易
ak.stock_em_zfgp # 增发股票数据(含锁定期)
ak.stock_restricted_release_queue_em # 解禁明细
五、回购策略(2021+ 子样本)
def buyback_event_study(start='2021-01-01'):
# 1. 抓回购公告
df = ak.stock_repurchase_em()
df = df[df['公告日期'] >= start]
df = df[df['回购金额'] / df['流通市值'] >= 0.05] # 5% 阈值
# 2. 锚定 announce + next trading day
# 3. 计算 +1, +5, +30 天超额收益
...
统计(2021-2024,N=312 大额回购):
| 窗口 | 平均超额 | 胜率 |
|---|---|---|
| T+1 | +1.8% | 58% |
| T+5 | +3.2% | 56% |
| T+30 | +4.1% | 54% |
vs 美股回购效应(+5-15%),A 股弱很多。不建议作为独立策略,可以作为多因子模型的一个 +alpha 信号。
为什么 A 股回购弱:
- 历史上 A 股回购的「言行不一致率」高——公告 10 亿,实际执行 1 亿。市场学会打折信任。
- 真实意图常常是「员工持股计划」而非「股东回报」——这意味着大部分回购股票不会注销,未来还会作为激励释放出来稀释 EPS。
- 控股股东集中度高,回购对治理结构改善有限(美股回购对降低自由流通股数、提升 ROE 的传导更直接)。
- 监管对回购用途审查更严:A 股回购股票通常被锁定 3 年,灵活性低于美股。
六、A 股事件的 PIT 数据七大坑
| # | 坑 | 影响 | 处理 |
|---|---|---|---|
| 1 | 公告时点不规则(盘前/盘中/盘后) | 入场时点错位 | 用 announce 时间 + 下一交易开盘 |
| 2 | 一字涨跌停 | 28% 摘帽日无法入场 | 显式建模 limit-up sealed |
| 3 | 停牌期间无价格 | 计算超额收益时算不出 | 跳过停牌日,从复牌起算 |
| 4 | 公告事后修订 | 历史看到的不等于当时看到的 | 自建 snapshot 数据库 |
| 5 | 节假日不一致 | 美股 A 股交易日历不同 | 用 chinese_calendar 库 |
| 6 | ST → 退市的 survivor bias | 高估摘帽 alpha | 把退市样本作为 -100% 计入 |
| 7 | 分红除权(A 股较多) | 价格不连续 | 用前复权价(akshare 的 qfq 参数) |
七、跨境个人散户能否吃到这些 alpha?决策表
| 策略 | 理论年化 | 实操可达性 (<$5k US-based) | 净 alpha 估计 |
|---|---|---|---|
| ST 摘帽 | 17%(2015-2020 旧规则) | ✗ 美股 IBKR 通过 Stock Yards Connect 无法买 ST 股 | 0 |
| ST 摘帽(2021+) | 6% | ✗ 同上 | 0 |
| 定增解禁后做多 | 8-12% | △ 港股通 OK,但 A 股个人 Connect 资格门槛 50 万人民币 | 0 |
| 回购公告 | 4% | △ 同上 | 0 |
| 港股通 CSI300 / 中证 500 ETF | 市场 beta | ✓ IBKR 直接买 KWEB / FXI / ASHR | beta only |
| 替代方案:用 ASHR (CSI300 ETF) + KWEB (互联网) 做 beta + macro | ~市场 | ✓ | 5-8% if timing OK |
残酷结论:在 <$5k + 美国/HK 账户的约束下,A 股事件 alpha 几乎完全吃不到。能做的只有:
- 学习用途:理解 A 股逻辑,对将来分析中国资产/做跨市场配置有用
- 替代品:买 ASHR(CSI 300 ETF)/ MCHI(MSCI China)/ KWEB(中国互联网)——但这些是 beta 暴露,不是事件 alpha
- 未来选项:积累到 50 万 RMB 后开境内券商 + 沪深港通双向(条件门槛高)
进一步的可执行路径:
- ASHR 在美股市场有期权(虽然流动性比 SPY 差很多),可以用 covered call / cash-secured put 做 enhanced beta
- KWEB 在中概互联网叙事下波动大,期权 IV 偏高,期权卖方策略 IV-RV spread 显著——这是把 A 股暴露转化为可执行波动策略的窗口
- 一旦中国宏观因子翻转(政策放松/降准降息),ASHR/KWEB 通常先于 A 股本身反应(因 ETF 在美股盘中可交易),这给「用美股 ETF 抢中国宏观拐点」留了机会
- 对真正想做 A 股个股的:可考虑通过 IBKR 香港实体开通港股通通道(散户门槛资金 50 万 HKD),通过沪股通南向资金选股,但摘帽这类 ST 标的不在沪股通可交易范围——又被堵死一次
八、政策风险作为独立因子
A 股做任何策略,必须叠加一个政策风险溢价(Policy Risk Premium)。
历史大跌的政策事件:
| 年份 | 事件 | 影响行业 | 跌幅 |
|---|---|---|---|
| 2021.07 | 教育「双减」 | 教育 | TAL/EDU -70% in days |
| 2021.11 | 互联网平台反垄断 | 互联网 | KWEB -50% YoY |
| 2023 | 医药集采扩面 | 创新药 | 板块 -30% |
| 2023 | 房地产爆雷链式反应 | 地产 + 信托 | -40-90% |
| 2024 | 量化交易新规 | 量化基金 | DMA 业务全面收缩 |
政策风险的特征:
- 离散性:不可预测的「文件出台」
- 集中性:经常一条文件覆盖整个赛道
- 不可对冲性:股指期货无法对冲行业暴露
- 跨资产传染:股+债+地产+信托同时受冲击
在因子模型里怎么加:
# 简化版政策风险溢价
def policy_risk_premium(sector, lookback_days=365):
"""
根据该 sector 过去 N 天 single-day max drop 估算尾部风险。
若曾出现单日 >-15% 且非市场整体下跌 → 标记为高政策敏感。
"""
drops = sector_daily_returns(sector, lookback_days)
market = market_daily_returns(lookback_days)
idio = drops - market
tail_drop = idio.quantile(0.01) # 1% 分位
if tail_drop < -0.10:
return 'high' # 要求 alpha discount
elif tail_drop < -0.05:
return 'medium'
else:
return 'low'
九、PM 视角:今天的迁移性思考
-
「能赚」≠「能拿到」是跨境投资的核心约束:很多 alpha 在原市场存在,但跨境通道(汇率、税务、清算、合规)能吃掉 50-80%。设计策略时必须从 net-to-pocket 倒推,不能从理论 gross 出发。
-
政策风险是一类独立因子,不是「黑天鹅」:A 股的政策一刀切不是低概率事件,是常态。把它当作「黑天鹅」会反复被冲击。把它建成一个 sector-level 的 ex-ante risk premium,反而能稳定地获取「补偿政策风险」的 alpha——这是为什么有些聪明钱专挑「最近被监管打过」的 sector 买(创伤后定价)。
-
数据可得性 = 策略护城河:A 股的免费数据(AKShare)PIT 不严,给愿意自建 snapshot 数据库的人留了一条护城河。机构有商用数据(Wind/Choice),但散户只要花 90 天每天 dump 一次,自己就有了 PIT-snapshot——这比纯免费数据有显著优势。
-
「监管收紧」对策略的影响通常是结构性而非周期性:2021 退市新规、2024 量化新规——一旦出来,旧策略不会回来。所以做事件 alpha 时要 split sample:分别看 pre-regime / post-regime 的表现,不要混合年化。
-
金融 PM 的「政策直觉」是稀缺能力:能闻出「这个 sector 下一个会被政策点名」的人,是市场上极少数。这种直觉来自于:长期跟踪监管层公开讲话、了解部委协调机制、知道五年规划。这是金融背景 PM 转量化的独有优势——欧美量化高手没有,纯 cs 背景量化也没有。
十、明日预告
Day 78: A 股可转债双低策略(Convertible Bond Double-Low)
- 可转债的混合性质(债底 + 股性)
- 双低指标:(转股溢价率 + 价格) / 2
- 「下有保底、上不封顶」的非对称收益结构
- 强赎条款的博弈
- AKShare 抓取可转债数据
- 历史回测 2018-2024:双低组合年化 15-25%
- 跨境视角:可转债是否能通过 ETF / 沪深港通触达?
十一、Day 77 实际执行 Checklist
- (1) 安装 akshare:
pip install akshare chinese_calendar - (2) 跑
ak.stock_zh_a_st_em(),看当前 ST 股列表 - (3) 抓 2024 年所有「撤销特别处理」公告
- (4) 实现
to_next_tradable_day+can_enter(涨停判定) - (5) 跑一遍 2015-2024 ST 摘帽 event study(不要求完美,验证流程跑通)
- (6) 把 2021 前 / 2021 后样本分开,看 alpha 衰减
- (7) 拉一遍当前活跃定增 + 解禁队列
ak.stock_restricted_release_queue_em - (8) 写一份「跨境吃不到 → 替代方案」决策表,存到
notes/ashare_access_decision.md - (9) 在 IBKR 看一下 ASHR / KWEB / FXI 的 option chain(这些 ETF 都有期权,可作未来策略载体)
- (10) 更新
docs/daily/TR_PROGRESS.mdDay 77 ✅
实际执行记录
启动一项填一项,时间戳 + 卡点。
- [hh:mm] AKShare 装好,抓到 ST 列表 — ...
- [hh:mm] 2024 年摘帽公告抓取 N=? — ...
- [hh:mm] 涨停封板 day-1 入场失败率统计 — ...
- [hh:mm] 跨境替代方案对比 — ...
- 卡点 / 学到的:
总字数:约 5,940 字(CJK)/ 14,000 非空白字符 今日完成度:理论 ✓ / 实操(你自己执行)/ 笔记 ✓