halo 的技术博客

返回

一、一个应该很简单的问题#

股票在除息日会跌,跌幅应该等于每股股息。逻辑很干净:昨天买你能拿到 1 块钱股息,今天买拿不到,所以今天的股票应该便宜 1 块钱。

但实证研究从 1970 年就发现,落差通常小于股息。Elton 和 Gruber 1970 年的解释至今仍是标准框架:因为股息和资本利得的税率不同。

对一个持有到除息的投资者,卖出的临界条件是:

Pcumtg(PcumP0)=Pextg(PexP0)+D(1td)P_{cum} - t_g(P_{cum} - P_0) = P_{ex} - t_g(P_{ex} - P_0) + D(1 - t_d)

整理后得到那个著名的比值:

PcumPexD=1td1tg\frac{P_{cum} - P_{ex}}{D} = \frac{1 - t_d}{1 - t_g}

落差比等于「一减股息税率」除以「一减资本利得税率」。 如果股息税率高于资本利得税率,落差就小于股息。反过来,测出落差比就能反解边际投资者的税率——这是金融学里少数几个能从价格直接读出税收信息的地方,所以文献极多。

这篇文章不讨论这个公式对不对。我要问的是另一个问题:即使这个公式百分之百正确,你能测出来吗?

方法是构造一个真值已知的世界。我把税率写死:

TD_TRUE, TG_TRUE = 0.25, 0.15
RATIO_TRUE = (1 - TD_TRUE) / (1 - TG_TRUE)      # = 0.882353
python

然后生成 6000 个除息事件,价格严格按这个比值下跌,再叠加正常的日内波动。如果连在这个世界里都测不准,那么真实数据里的那些估计值就更需要怀疑。


二、数据生成:唯一诚实的部分#

import numpy as np

SIG_D = 0.019      # 除息日特异日收益波动 ≈ 1.9%
TICK  = 0.01

def gen(n, rng, ratio=RATIO_TRUE, sig=SIG_D, tick=TICK,
        yield_lo=0.004, yield_hi=0.030, no_noise=False, ratio_one=False):
    P = rng.uniform(18., 220., n)                       # 股价
    y = rng.uniform(yield_lo, yield_hi, n)              # 年化股息率
    D = np.maximum(0.01, np.round(P * y / 4 / 0.01) * 0.01)   # 季度股息,落到分
    r = 1.0 if ratio_one else ratio
    noise = np.zeros(n) if no_noise else rng.normal(0, sig, n) * P
    P_ex = np.round((P - r * D + noise) / tick) * tick
    return dict(P=P, D=D, y=y, P_ex=P_ex, drop=P - P_ex, r_true=r)
python

关键在于 noise 那一行。除息日的股票不会只因为除息而变动——它同时受市场、行业、公司自身消息的影响。1.9% 的日波动对一只 50 美元的股票就是 0.95 美元,而一笔季度股息可能只有 0.25 美元。

噪声是信号的四倍。这就是整个问题的核心。


三、单个事件:完全测不出来#

落差比分布

6000 个事件,逐个计算「落差 / 股息」:

统计量数值
真值0.882353
均值0.9256
中位数0.9404
标准差7.06
5 / 95 分位[−10.1, +11.7]
落差 > 股息 的比例49.5%
落差为负(价格反而涨)41.8%

标准差 7.06,真值 0.88。信噪比约为 0.125。

5 到 95 分位跨越 21.8 个单位——这个量的「合理范围」比它本身大 25 倍。而 41.8% 的除息日,股票价格是上涨的,此时落差为负,比值也为负,这在理论框架里毫无意义。

右图更直观:真值斜率 0.8824 那条线和斜率 1.0 那条线几乎贴在一起,而散点在纵向铺满了整个图。要区分的两条假设之间的距离,远小于数据本身的散布。

单个除息事件不携带任何可用的税收信息。这一点其实文献里都知道,所以大家都做横截面聚合。问题是——聚合之后就够了吗?


四、四种估计量:都无偏,都不可用#

我实现了文献里最常见的四种算法:

from scipy import stats

def estA(d): return np.mean(d['drop'] / d['D'])                    # 逐事件比值取均值
def estB(d): return d['drop'].mean() / d['D'].mean()               # 总落差/总股息
def estC(d): return stats.linregress(d['D'], d['drop']).slope      # 美元 OLS
def estD(d):                                                       # 价格归一化 OLS
    return stats.linregress(d['D']/d['P'], d['drop']/d['P']).slope
python

先看单次抽样(n=6000,就像你手上那份真实数据):

A = 0.9256    B = 0.9875    C = 1.2174    D = 1.0148
plaintext

四个答案,跨度 0.29,没有一个接近真值 0.8824。反解出的股息税率分别是 21.3%、16.1%、−3.5%、13.7%——从「符合美国合格股息税率」到「负税率」,你想要什么结论都能拿到。

但下这个判断之前,必须先分清是偏差还是方差。 单次抽样区分不了,所以我做了 400 次重复:

估计量对比

估计量400 次均值偏差抽样标准差偏差/SD
A 逐事件比值均值0.8897+0.00740.08550.09
B 总落差/总股息0.8861+0.00380.05920.06
C 美元 OLS0.8802−0.00210.10440.02
D 价格归一化0.8763−0.00610.12720.05

四个估计量全部近似无偏。 偏差绝对值最大 0.0074,而 |偏差|/抽样SD 最大只有 0.09——远小于 1,说明观察到的偏离完全可以由抽样噪声解释。

问题不在偏差,在方差。

抽样标准差从 0.0592(B)到 0.1272(D),差 2.15 倍。而这些标准差本身有多大?B 是最好的一个,0.0592——意味着 6000 个事件给出的估计值,95% 置信区间宽度约 ±0.116。而无税假设(1.0)和真值(0.8824)之间只差 0.118。

用 6000 个事件,你恰好在「能不能区分有税和无税」的边缘上。区分不同税率?想都别想。

要把落差比钉到 ±0.01 的精度:

需约 210,516 个事件
plaintext

21 万个季度除息事件。美国上市公司里稳定派息的大约 2000 家,每年 4 次,需要 26 年的全市场数据。而 26 年里税法改了好几轮——你测出来的是一个平均意义上不存在的「平均边际投资者」。

用最好的估计量 B 在 400 次重复上取均值,反解 td = 0.2468(真值 0.25)。这说明方法本身是对的,只是它需要的数据量远超任何人手上有的。


五、噪声股息比:低股息率股票是毒药#

噪声股息比

真正决定精度的不是样本量,而是噪声与股息的比值

NSR=σdaily×PD\text{NSR} = \frac{\sigma_{daily} \times P}{D}

年化股息率噪声/股息A 估计 ± SDD 估计 ± SD
0.2%39.090.913 ± 0.6570.864 ± 4.842
0.4%19.340.898 ± 0.3220.879 ± 2.945
0.8%9.680.891 ± 0.1620.871 ± 1.527
1.5%5.150.887 ± 0.0860.889 ± 0.862
2.5%3.090.885 ± 0.0520.880 ± 0.526
4.0%1.930.884 ± 0.0320.881 ± 0.325
6.0%1.290.883 ± 0.0210.883 ± 0.216

估计量始终无偏(均值都在 0.88 附近),但不确定性跨越 31 倍。

股息率 0.2% 的股票,估计值的标准差是 0.657——比真值本身还大。而 6% 股息率的股票,标准差 0.021,是可用的。

这有一个直接的实践推论,而且和大多数人的直觉相反:在这类研究里加入更多低股息率的公司,不是在增加样本量,是在往水里倒墨水。 每一个 0.2% 股息率的观测都在往估计量里注入 39 倍于信号的噪声。正确做法是按 NSR 加权,或者干脆设一个 NSR 上限把它们剔除掉。

注意估计量 D(价格归一化)在低股息率区间彻底失效,SD 高达 4.842。它把 D/P 当自变量,而 D/P 在低股息股票上几乎全部挤在 0 附近——回归斜率被一小撮点主导了。「归一化」听起来总是更严谨,但归一化的分母如果和噪声相关,它会放大而不是缩小误差。


六、三个安慰剂#

安慰剂

安慰剂 1 — 零税(真值精确等于 1.000000)。 把税率全部设为 0,落差应该精确等于股息:

D 估计 0.993917 ± 0.1273  |  反解 td = +0.1552
plaintext

估计量正确地跟到了 1.0 附近(偏差 −0.006),但标准差 0.1273 意味着单次抽样很容易报出 0.87 或 1.12。而 0.87 会被反解成「股息税率 26%」——在一个税率精确为零的世界里。

这是本文最实用的一条警告:如果你在真实数据上得到 0.87,你无法区分「边际投资者税率 25%」和「税率为零但运气不好」。

安慰剂 2 — 零噪声。 把日波动关掉,只留 tick 取整:

D 估计 0.882383  |  与真值绝对偏差 2.99e-05
plaintext

误差降低了三个数量级。噪声是唯一的敌人。

安慰剂 3 — 零噪声且无 tick 取整。 纯恒等式检验:

A 估计 0.8823529412  |  绝对偏差 1.70e-14
plaintext

精确到浮点精度。这确认了数据生成过程和估计量之间没有实现层面的 bug——所有偏离都来自我故意注入的噪声,不来自代码错误。

tick 取整的方向性检查:

tick无噪声下 D 估计偏差
$0.010.88223−0.00012
$0.050.88171−0.00065
$0.100.88536+0.00300

即使 tick 粗到 1 毛钱,偏差也只有 0.003——离散化不是这个问题的瓶颈,可以放心忽略。


七、能不能靠它赚钱:抓息交易#

理论说落差小于股息,那么低税率投资者是不是应该在除息日前买入、除息后卖出,赚那个差额?

def strategy(n, rng, td, tg, hold=1, hs_bp=12.0):
    d = gen(n, rng)
    P, D = d['P'], d['D']
    buy  = P * (1 + hs_bp/1e4)
    sell = d['P_ex'] * (1 - hs_bp/1e4)
    cg   = sell - buy
    total = cg * (1 - tg) + D * (1 - td)     # 资本利得/亏损按 tg 对称计税
    return total / P * 100, d
python

关键洞察是:决定你赚不赚的不是你的税率高低,而是你自己的比值 (1−td)/(1−tg) 与市场已嵌入的比值 0.8824 谁大。

谁能赚钱

投资者类型tdtg自身比值零成本收益12bp 成本t 值
【市场嵌入比值】0.2500.1500.8824
免税账户(养老金)0.0000.0001.0000+0.0370%−0.2025%−8.44
公司(股息扣除 DRD)0.1050.2101.1329+0.0738%−0.1154%−6.09
高税级个人(非合格股息)0.3960.1500.7106−0.0729%−0.2765%−13.56
外国投资者(预扣 30%)0.3000.0000.7000−0.0902%−0.3298%−13.74

注意公司那一行:它的股息税率(10.5%)高于免税账户,收益却更高。 因为公司同时有 21% 的资本利得税率,可以用除息日的账面亏损抵税。比值 1.1329 是四类里最高的。你的绝对税率无关紧要,重要的是股息税和资本利得税的相对关系。

盈亏平衡点的检验: 固定资本利得税 15%,扫描股息税率,找零点:

零成本盈亏平衡股息税率 0.2758(理论值 = 边际投资者 td = 0.25)  偏差 +0.0258
plaintext

这是一个内部一致性检验,也是对整个框架的验证:盈亏平衡点应该精确落在边际投资者的税率上,因为价格正是由那个人定的。实测 0.2758 vs 真值 0.25,偏差 0.026——在抽样误差范围内。

但下一行才是重点:

12bp 成本后:曲线全段低于零(td=0 处仍为 −0.2025%)
—— 不存在盈亏平衡税率,即使税率为 0 也不赚钱
plaintext

八、交易成本:4~5bp 就吃光一切#

成本与持有期

单边半价差免税账户平均收益
0 bp+0.0236%
2 bp−0.0163%
5 bp−0.0762%
12 bp−0.2159%
50 bp−0.9744%

盈亏平衡在 1~2bp 之间。

这个数字需要放在语境里看:1bp 的半价差意味着 50 美元的股票买卖价差 1 分钱的五分之一——这比绝大多数股票的最小 tick 还窄。换句话说,在任何真实的交易成本下,这个策略都是亏的。

税收优势的量级本身就极小:落差比 0.8824 意味着每 1 块钱股息你多赚 11.8 分,而典型股息率 1.5% 的季度股息约占股价的 0.375%——理论毛收益约 0.044%,即 4.4bp。你要用 4.4bp 的毛收益去覆盖买卖两次的价差。

持有期只会让情况更糟:

持有天数平均收益收益标准差t 值
1−0.2159%1.888%−7.23
3−0.2221%3.244%−4.33
10−0.2291%5.906%−2.45
21−0.2356%8.553%−1.74

均值几乎不动(−0.216% → −0.236%),标准差按 √t 增长(1.888% → 8.553%)。 多持有一天不会多赚任何税收优势——那个优势在除息的那一瞬间就已经全部实现了——但你多承担了一天的方向性风险。

这是事件驱动策略的通病:信号是脉冲的,风险是连续的。 任何延长持有期的做法都在稀释信噪比。


九、统计功效:3798 笔#

即使在最理想的条件下(免税账户、零交易成本),策略仍然几乎不可检验:

免税账户零成本:单笔 SD 1.904%,均值 +0.0618%
→ 需 3,798 笔才够 |t| = 2
plaintext

按股息率分层看零成本情形:

分位平均股息率收益标准误t 值
Q10.66%+0.0304%0.0278+1.09
Q21.18%+0.0265%0.0277+0.96
Q31.70%+0.0760%0.0275+2.77
Q42.23%+0.0776%0.0272+2.86
Q52.74%+0.0985%0.0273+3.61

收益随股息率单调上升,这符合理论(税收优势正比于股息金额)。但即使用 4800 个事件一个桶,Q1 和 Q2 的 t 值仍然不显著。

而加上 12bp 成本后,全部五个分位都显著为负(t 从 −5.17 到 −7.71)。最高股息率那一档亏得最少(−0.1408%),但仍然是亏。


十、已知偏差#

1. 模型假设单一边际投资者。 真实市场里不同税收身份的投资者同时存在,Elton-Gruber 框架里的「边际投资者」是一个理论构造。真实的落差比可能随股息率、机构持股比例、时间而变——我的模拟把它固定成了一个常数,这让问题比现实简单。如果真值本身在变,需要的样本量只会更多。

2. 没有建模除息日的短期抢筹行为。 现实中存在专门的抓息交易者,他们的行为本身会推高除息前价格、压低落差比。这是一个内生性问题:测出来的比值既反映税收,也反映套利活动的强度。我的模拟里没有这个反馈环。

3. 交易成本模型过于简单。 我用了对称的固定半价差。真实的除息日流动性可能更好(有确定的事件驱动流量)也可能更差(做市商避险)。此外我没有建模市场冲击——如果你想在几千个事件上系统性地做这件事,冲击成本会远超价差。

4. 忽略了持有期要求。 美国税法要求持股超过 60 天才能享受合格股息税率(qualified dividend)。一个持有 1 天的抓息交易者拿到的是非合格股息,按普通所得征税——这直接推翻了「低税率投资者可以套利」的前提。我在四类投资者里用「高税级个人(非合格股息)」部分反映了这一点,但没有建模「持有期越过 60 天门槛后税率跳变」这个真实存在的不连续性。这会让真实策略比我模拟的更不划算。

5. 1.9% 的日波动是一个平均数。 真实的除息日波动率随公司规模、行业、市场状态变化很大。低波动的公用事业股 NSR 会好得多,高波动的成长股(同时也是低股息率的)会更糟。这两个维度是相关的,我用了独立的均匀分布,低估了最坏情况的严重程度。


十一、结果解读#

这篇文章的结论不是「Elton-Gruber 是错的」。 恰恰相反——在零噪声安慰剂里,估计量精确还原到 1.70e-14;在 400 次重复上取均值,反解税率 0.2468 vs 真值 0.25。理论是对的,方法是对的,唯一的问题是你没有足够的数据。

四种估计量在单次抽样上给出 0.9256 / 0.9875 / 1.2174 / 1.0148,这是本文最该被记住的画面。 它们全部无偏,但抽样噪声让它们各自漂到不同方向。这意味着任何一篇报告单一落差比估计值的研究,其数值在很大程度上是抽样噪声的产物。 如果一篇论文报告 0.85 而另一篇报告 1.05,它们可能来自同一个真值。文献里那些「不同时期边际税率不同」的结论,有多少是真实的税制变化,有多少是估计噪声?我不知道,但这个模拟说明默认答案应该是后者

「无偏」是一个被严重高估的性质。 四个估计量都无偏,但没有一个可用。当抽样标准差是你要检测的效应量的一倍时,无偏性不提供任何保护——它只保证你在无限次重复后是对的,而你只有一次机会。做这类研究时,应该先算需要多少样本才能达到目标精度,再决定要不要做。 我这里的答案是 21 万个事件,直接说明这个研究在美国市场上做不了。

低股息率样本的处理方式是一个通用教训。 大多数人的直觉是「样本越多越好」,而 NSR 扫描说:股息率 0.2% 的观测带来的标准差是 6% 股息率观测的 31 倍。在信噪比差异如此悬殊时,等权聚合等于让最差的观测主导结果。 这个道理适用于任何事件研究——事件的「强度」不同时,等权平均是错的。

策略层面的结论很干脆:这不是一个可交易的现象。 理论毛收益 4.4bp,盈亏平衡在 1~2bp 的半价差,而且真实的持有期税收规则还会进一步吃掉税收优势。它是一个真实存在但不可提取的效应——市场价格已经把它定进去了,剩下的价差刚好覆盖不了摩擦。这恰恰是有效市场应有的样子:一个真实的、可解释的、但赚不到钱的规律。

如果你一定要做这类研究:按 NSR 筛样本而不是按市值;报告置信区间而不是点估计;先在零效应的合成数据上跑一遍看看会开出什么值;把估计量的抽样标准差和你要检测的效应量放在一起比较——如果前者大于后者的一半,就不要下结论。

除息套利与税收效应:股息落差为什么不等于股息
https://blog.halo26812.eu.org/blog/ex-dividend-arbitrage-tax
Author halo
Published at 2026年8月6日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨