借券召回风险:把你打死的不是股价上涨,是券被要回去
做空的教科书风险是「亏损无上限」,但真正切断 alpha 的往往是 recall——出借人把券要回去,你在最不该平仓的时点被迫平仓。2 万笔独立路径的受控模拟给出精确配对的反事实:60 日内 15.54% 被召回,收益从 201.80 掉到 186.37 bp,拖累 15.43 ± 3.67 bp(t=4.20)。被召回的那批更难看:实际 −184.72 bp vs 同路径反事实 −85.42 bp。剂量反应干净:涨幅 >30% 组召回率 24.38%,<−15% 组只有 13.67%(1.78 倍)。四条安慰剂:零 recall 精确 0.000000 bp;零 alpha 塌到 3.23 ± 3.63 bp;而同召回率下切断涨幅联动拖累反而升到 19.25 bp——说明毒性主要来自持有期被截断而非择时恶意。拖累随 alpha 线性放大(R²=0.9995),120 日持有占比达 20.82%。紧俏券三重惩罚:费率 12.8 倍、真 alpha 最强却净收益减半。需 4530 笔才够 |t|=2。12 宇宙 CV=0.159(高阶)
核心结论:空头的真实风险结构里,有一项从不出现在风险报告上——出借人可以随时把券要回去。 而这件事不是随机发生的:它与标的上涨正相关,也就是精确地在你最不想平仓的时候到来。
2 万笔独立路径的受控模拟(真实空头 alpha 由构造设为 −8%/年)给出的账本:60 日持有期内 15.54% 的头寸被召回,平均收益从无召回反事实的 201.80 bp 降到 186.37 bp,拖累 15.43 ± 3.67 bp(t = 4.20),占反事实收益的 7.64%。
但整体均值掩盖了真正的问题。被召回的那批交易,实际收益 −184.72 bp,同路径反事实是 −85.42 bp——recall 让这批本就亏钱的单子亏损扩大了 2.16 倍。

一、问题:一个不在风险模型里的终止条款#
做空的完整流程是:找到出借人借入证券 → 卖出 → 等待下跌 → 买回归还。教科书讲的风险是「股价上涨、亏损无上限」和「借券费率上升」。
但合约里还有一条几乎不被建模的条款:出借人有权随时召回(recall)。原因很多——出借人自己要卖出、需要行使投票权、股息税务安排、或者仅仅是把券转租给出价更高的人。
一旦被召回,你必须在极短时间内(通常 T+1 到 T+3)归还。如果找不到新的出借来源,你就得在市场上买回平仓,无论价格多不合适。
这件事为什么重要,取决于一个关键问题:
recall 是独立随机事件,还是与你的头寸表现相关?
如果是前者,它只是一个提前终止的噪声,对期望收益的影响近似中性。如果是后者——recall 更可能发生在标的上涨时(出借人看到价格涨了想卖出,或转租给出价更高的空头)——那么它就是一个系统性地在最坏时点截断头寸的机制。
本文用受控模拟把这两种情形分开量化。
二、模拟设计:真值由构造给定#
| 参数 | 设定值 | 说明 |
|---|---|---|
| 交易笔数 | 20,000 | 每笔独立抽路径 |
| 目标持有期 | 60 交易日 | 空头目标窗口 |
| 真实空头 alpha | −8%/年 | 真值,由构造给定 |
| 个股年化总波动 | 38% | |
| 基础日召回强度 λ_base | 0.0018 | 年化约 36.5% |
| 对累计涨幅的敏感度 | 3.5 | 条件相关的强度 |
| 对拥挤度的敏感度 | 0.010 | |
| 一般券借券费 | 0.4%/年 | GC |
| 紧俏券借券费 | 9%/年 | Special(拥挤度 > 45) |
召回强度的设定是本文的核心机制:
expo = np.zeros_like(cum)
if ret_link:
expo += lam_ret * np.maximum(cum, 0.0)
if crowd_on:
expo += (lam_crowd * crowd)[:, None]
lam = lam_base * np.exp(expo)pythonnp.maximum(cum, 0.0) 是关键——只有上涨(对空头不利)才抬高召回概率,下跌不降低它。这是一个不对称的、单边惩罚的结构。
每笔交易同时记录两个结果:实际收益(在 recall 或到期时平仓)和反事实收益(同一条路径持满 60 日)。两者逐笔配对相减,所以拖累的度量不依赖任何基准选择。
三、一个必须先讲的工程教训#
本文的第一版实现有一个致命缺陷,值得单独说,因为它是数值实验里最常见的陷阱之一。
初版让 300 只股票共用同一条市场因子路径,重复 3 次得到 900 笔交易。看起来样本量够了,实际上不是——共同因子让同一批次内的交易高度相关,有效独立样本数约等于重复次数,也就是 3。
后果直接体现在自检指标上:
| 指标 | v1(共同因子) | v2(独立路径) |
|---|---|---|
| 单笔拖累 SD | 419 bp | 519 bp |
| 拖累均值 | 2.7 bp | 15.43 bp |
| 达 |t|=2 所需样本 | 94,086 | 4,530 |
| 12 宇宙 CV | 1.5387 | 0.1595 |
| λ 扫描单调性 | 非单调(17.8 → 5.0 → −7.3 → 102.2 → −67.6 → 378.5) | 单调(4.9 → 10.2 → 21.8 → 35.1 → 48.1 → 61.0) |
CV = 1.54 意味着换个随机种子结论可能反号。 λ 扫描里出现 −67.6 bp 然后 378.5 bp 这种跳跃,物理上没有任何解释——它纯粹是噪声。
按流程,自检发现这类问题必须修复重跑,不允许带 bug 交付。修复方式是每笔交易独立抽路径 + 全向量化,样本量提到 2 万笔。修复后所有扫描恢复单调,CV 降到 0.16。
这个教训可迁移:当你的扫描曲线出现无法用机制解释的非单调跳跃时,第一嫌疑不是「发现了有趣的非线性」,而是有效样本量塌缩。
四、基准结果与解析交叉核对#
| 指标 | 数值 |
|---|---|
| 60 日内召回率 | 15.54% |
| 实际平均收益 | 186.37 bp |
| 无 recall 反事实 | 201.80 bp |
| 召回拖累 | 15.43 ± 3.67 bp(t = 4.20) |
| 占反事实收益 | 7.64% |
| 被召回者平均出场日 | 第 30.64 日(目标 60 日) |
| 被召回者实际收益 | −184.72 bp |
| 被召回者同路径反事实 | −85.42 bp |
| 盈利交易占比 | 53.78% |
为了确认这不是实现 artifact,做一个解析交叉核对。如果 recall 的唯一效果是「提前终止,少赚 alpha」,那么:
拖累 ≈ |α| × 召回率 × 平均损失天数 / 252
= 0.08 × 0.15535 × 29.36 / 252
= 14.48 bpplaintext实测 15.43 bp,比值 1.0654。
吻合到 6.5% 以内。 多出来的 6.5% 正是「条件相关」的部分——recall 不是随机挑时点,它偏向标的上涨时,所以被截断的收益略高于纯随机截断的期望值。
这个核对同时告诉我们一个重要的量级判断:拖累的主体(约 94%)来自「持有期被缩短、alpha 没赚够」,只有约 6% 来自「择时恶意」。 这与很多人的直觉相反,下一节的安慰剂会进一步确认。
五、安慰剂检验:包括一个诚实的反直觉结果#

安慰剂 A:切断涨幅联动,但把召回率校准到相同水平。
这是本文设计得最仔细的一条对照。简单地把 lam_ret 设为 0 会同时降低召回率,那样比较的就不是「条件相关」而是「召回多少」。所以我用二分法重新校准 lam_base,让召回率精确匹配基准的 15.54%:
def calib_lam_for_rate(target_rate, hold, lam_crowd, seed):
lo, hi = 1e-6, 0.05
for _ in range(40):
mid = 0.5 * (lo + hi)
s = simulate(6000, hold, ALPHA_ANN, mid, 0.0, lam_crowd,
ret_link=False, seed=seed)
if s["recalled"].mean() < target_rate:
lo = mid
else:
hi = mid
return 0.5 * (lo + hi)python校准后 λ_base = 0.002169,召回率 15.59%(基准 15.54%)。
结果:拖累 19.25 ± 3.70 bp,比基准的 15.43 bp 更高。
这个结果与我的先验预期相反,但它是对的,而且有清楚的机制解释:
在基准情形下,召回被涨幅「吸引」到路径的上涨段。而在一条最终会下跌的路径上,上涨段往往出现在早期(先涨后跌)。被早期召回意味着平仓在一个相对高位,但也意味着这笔交易本来就还没开始赚钱。反过来,纯随机召回会均匀分布在整个持有期,包括那些已经赚了很多、继续持有还能赚更多的时点——截断这些反而损失更大。
换句话说:
在本文的参数设定下,「recall 挑在你亏钱时到来」这件事的毒性,小于「recall 随机截断你的盈利头寸」。 条件相关让召回集中在早期、金额较小的时点,反而降低了平均拖累。
我不打算把这个结论过度推广——它依赖于 alpha 为负(做空能赚)且路径为几何布朗运动的设定。但它足以推翻一个流行说法:「recall 的危害主要在于它的择时恶意」。在这个模型里,危害的 94% 来自持有期被截断本身,择时效应甚至是反向的。
安慰剂 B:零 recall(λ_base = 0)。 拖累必须精确为 0。
实测:召回率 0.0000%,拖累 0.000000 bp。引擎自洽。
安慰剂 C:零 alpha(真 alpha = 0)。 如果没有 alpha 可被打断,拖累应塌向 0。
实测:3.23 ± 3.63 bp——标准误大于均值本身,统计上不可区分于零。
这条是全文最重要的确认:拖累的来源确实是「被夺走的 alpha」,不是任何会计假象。 没有 alpha,就没有可被夺走的东西。
安慰剂 D:零波动(σ → 0)。 拖累 13.35 bp,这是纯 drift 项——在确定性下跌路径上提前平仓,少赚的那部分。它与解析预测的 14.48 bp 同量级,进一步确认账本正确。
六、剂量反应:召回精确地在最坏的时候到来#
虽然择时效应在总量上是反向的,但条件相关本身是真实存在的,而且剂量反应非常干净:
| 持仓期累计涨幅 | 召回率 | 样本数 |
|---|---|---|
| < −15% | 13.67% | 4,894 |
| −15 ~ −5% | 13.00% | 3,963 |
| −5 ~ 5% | 15.39% | 4,210 |
| 5 ~ 15% | 16.40% | 3,487 |
| 15 ~ 30% | 19.20% | 2,646 |
| > 30% | 24.38% | 800 |
>30% 组是 <−15% 组的 1.78 倍,且从 −5% 往上完全单调。
两个补充数字把这件事讲得更具体:
- 被召回时平均累计涨幅 +1.65%,而全样本终值均值是 −2.34%
- 被强平后,标的还要再走 −1.19%——这就是被夺走的那一段
第三个数字是最刺眼的。它的含义是:平均而言,你被赶下车的位置,距离你原本能到达的终点还有 1.19% 的下跌空间。 你的判断是对的,只是没能等到。
七、紧俏券悖论:alpha 最强的地方,也是最危险的地方#
按借券拥挤度分五组(Q5 = 最紧俏):
| 分位 | 真 alpha | 实际收益 | 反事实 | 召回率 | 借券费 |
|---|---|---|---|---|---|
| Q1 | −8.43% | 173.57 bp | 181.10 bp | 12.55% | 0.40% |
| Q2 | −9.01% | 213.11 bp | 219.87 bp | 13.83% | 0.40% |
| Q3 | −9.56% | 165.20 bp | 185.21 bp | 15.48% | 0.40% |
| Q4 | −10.25% | 219.40 bp | 247.63 bp | 16.50% | 0.40% |
| Q5 | −11.49% | 160.58 bp | 175.19 bp | 19.33% | 5.11% |
按紧俏券 / 一般券二分:
| 类别 | 实际收益 | 反事实 | 召回率 |
|---|---|---|---|
| 紧俏券 | 94.50 bp | 109.53 bp | 20.29% |
| 一般券 | 197.69 bp | 213.16 bp | 14.95% |
紧俏券的真 alpha 最强(−11.49% vs −8.43%,强 36%),净收益却最差(94.50 vs 197.69 bp,只有一半)。
三重惩罚同时作用:
- 借券费:5.11% vs 0.40%,12.8 倍
- 召回率:20.29% vs 14.95%,高 35.7%
- 拥挤本身:所有人都在做同一笔交易
注意 Q1–Q5 的实际收益并不单调(173.57 → 213.11 → 165.20 → 219.40 → 160.58)。这是诚实的呈现——在这个样本量下,五分位之间的差异被路径噪声淹没了。可以确认的只有两端的对比(紧俏 vs 一般,94.50 vs 197.69)和召回率的单调上升(12.55% → 19.33%)。如果我把 Q1–Q5 的收益画成一条平滑下降的线,那是在编故事。
实践含义:
「借券费率高说明看空的人多、负面信息强」这个信号是真的,但它同时是「你拿不住」的信号。 信息优势被费率和召回率精确定价掉了。
八、持有期是放大器#

| 持有期 | 召回率 | 实际 | 反事实 | 拖累 | 占比 |
|---|---|---|---|---|---|
| 5 日 | 1.27% | 17.41 | 17.73 | 0.32 ± 0.25 | 1.79% |
| 10 日 | 2.68% | 40.01 | 40.43 | 0.43 ± 0.61 | 1.06% |
| 20 日 | 5.04% | 66.66 | 66.49 | −0.18 ± 1.19 | −0.27% |
| 40 日 | 10.49% | 120.43 | 131.38 | 10.96 ± 2.46 | 8.34% |
| 60 日 | 15.55% | 188.11 | 197.12 | 9.01 ± 3.58 | 4.57% |
| 90 日 | 23.46% | 270.83 | 299.44 | 28.61 ± 5.47 | 9.55% |
| 120 日 | 30.74% | 315.75 | 398.76 | 83.01 ± 7.41 | 20.82% |
召回率单调上升(1.27% → 30.74%),拖累占比在长端急剧放大到 20.82%。
短端(5–20 日)的拖累在统计上不可区分于零——20 日甚至是 −0.18 ± 1.19 bp。这是正确的:持有期短,被召回的机会就少,且被截断的 alpha 也少。
这条曲线定义了做空策略的一个硬约束:慢速空头(基本面做空、等待价值回归)在结构上比快速空头承担高得多的召回风险。 一个需要持有 120 日才能兑现的做空论点,会被召回吃掉五分之一的收益——而这部分成本通常不出现在任何回测里。
九、缓解手段:定价与效果#

期限锁定(term loan): 支付溢价换取不可召回。
| 锁定溢价 | 0% | 0.25% | 0.5% | 1% | 2% | 4% | 8% |
|---|---|---|---|---|---|---|---|
| 净收益 (bp) | 201.80 | 195.85 | 189.89 | 177.99 | 154.18 | 106.56 | 11.32 |
不锁定的基准是 186.37 bp,盈亏平衡溢价 = 0.648%/年。
把这个数字和市场费率对照:一般券 0.40%/年,紧俏券 5.11%/年。
- 对一般券:如果能以 GC 费率 + 0.65% 以内锁定期限,值得
- 对紧俏券:5.11% 的费率已经远超 0.648% 的盈亏平衡点——但紧俏券恰恰是最容易被召回的
这构成一个真实的两难:最需要期限锁定的头寸,也是锁定成本最贵的头寸。
分散出借人: n 家各持 1/n,单家召回只砍 1/n 仓位。
| 出借人数 | 1 | 2 | 3 | 5 | 10 |
|---|---|---|---|---|---|
| 净收益 (bp) | 166.65 | 181.02 | 180.52 | 183.94 | 188.13 |
1 → 2 家是最大的一跳(+14.37 bp),之后边际效果迅速递减(2 → 10 家只多 7.11 bp)。这是标准的分散化收敛形态。
回避紧俏券: 197.69 bp vs 全样本 186.37 bp,+11.32 bp,零成本。
在三种手段里,这是性价比最高的一个——不需要谈判、不需要支付溢价,只需要在建仓时把拥挤度作为一个排除条件。代价是放弃 Q5 那些真 alpha 最强的标的。
十、参数敏感性#

基础召回强度:
| λ_base (年化) | 11.8% | 22.3% | 36.5% | 53.1% | 71.7% | 86.8% |
|---|---|---|---|---|---|---|
| 召回率 | 4.5% | 8.9% | 15.3% | 24.3% | 36.7% | 51.7% |
| 拖累 (bp) | 4.9 | 10.2 | 21.8 | 35.1 | 48.1 | 61.0 |
完全单调,且呈现凹性(边际递减)——因为召回率趋近 100% 时,进一步提高强度只是让召回发生得更早,边际损失递减。
真 alpha 强度:
| 真 alpha | 0% | −4% | −8% | −12% | −20% |
|---|---|---|---|---|---|
| 拖累 (bp) | −3.5 | 5.9 | 14.7 | 23.0 | 40.0 |
线性拟合:斜率 216.7,截距 −3.05,R² = 0.9995。
近乎完美的线性关系,且截距在统计上接近零。这是对「拖累 = 被夺走的 alpha」这一解释的最强支持:你的策略越好,recall 从你身上拿走的越多。 一个没有 alpha 的空头策略不怕召回,因为它本来也没什么可被夺走的。
条件相关强度:
| 敏感度 | 0.0 | 1.0 | 2.0 | 3.5 | 5.0 | 8.0 |
|---|---|---|---|---|---|---|
| 召回率 | 13.1% | 13.7% | 14.4% | 15.6% | 17.0% | 21.2% |
| 拖累 (bp) | 9.7 | 8.6 | 8.8 | 8.8 | 10.2 | 15.6 |
这条曲线在 0–3.5 区间基本平坦(8.6–9.7 bp,且都在 ±3.6 bp 的标准误量级内),只在 8.0 处明显抬升。与安慰剂 A 的结论一致:条件相关的直接毒性远小于召回本身的存在。
十一、样本量红线:一个几乎无法被实证验证的成本#
这是全文最需要强调的一节。
| 指标 | 数值 |
|---|---|
| 单笔拖累 SD | 519.08 bp |
| 单笔拖累均值 | 15.43 bp |
| 达 |t| = 2 所需笔数 | 4,530 |
| 单笔收益 SD | 1,784.84 bp |
| 亏损交易占比 | 46.23% |
| 受影响交易占比 | 15.29%(其余拖累恒为 0) |
| 拖累 5% 分位 | −395.09 bp |
| 拖累 95% 分位 | +545.83 bp |
信噪比 = 15.43 / 519.08 ≈ 0.030。
分位数是双向的:5% 分位是 −395 bp(即 recall 反而帮了你,让你在更好的位置离场),95% 分位 +546 bp。recall 有时候是运气,只是平均而言是成本。

实践含义极其残酷:
一个每年做 200 笔空头的基金,需要 22.7 年的数据才能在统计上确认召回拖累的存在。 在此之前,任何「我们的召回成本是 X bp」的说法都是在报告噪声。
这解释了为什么召回风险在行业里被系统性忽视——它不是不重要,而是无法从自己的交易记录里被看见。 唯一能看见它的方式,就是像本文这样构造一个真值已知的模拟。
多宇宙检验(12 个独立种子):拖累均值 15.85 bp,SD 2.53,CV = 0.1595。范围 11.23 ~ 18.97 bp。
CV 在 0.16 说明模拟结论本身是稳健的——这与「单笔无法验证」并不矛盾:模拟有 2 万笔样本,真实机构没有。
十二、对抗式审查:怀疑过并排除的点#
怀疑 1:安慰剂 A 的反直觉结果(19.25 > 15.43)是不是 bug? 这是自检中花时间最多的一点。三个检查:(a) 召回率确实校准到位(15.59% vs 15.54%);(b) 标准误 3.70 bp,差值 3.83 bp 约为 1.03 个标准误——严格说这个差异本身统计显著性有限,我在正文中的表述是「更高」而非「显著更高」;(c) 机制解释(条件相关把召回吸引到早期小额时点)与「被召回者平均出场日第 30.64 日」一致——如果召回是均匀分布,期望出场日应该更接近 30,实际 30.64 略偏后,方向吻合。结论:这个反直觉结果是真实的,但幅度不应被过度解读。
怀疑 2:解析核对的 6.5% 缺口去哪了? 解析式假设「损失天数 × alpha 日率」,忽略了两件事:借券费在提前平仓时也少付了(利好),以及路径的凸性效应。两者方向相反,净残差 6.5% 在可接受范围。如果缺口达到 50% 量级,我会认为账本有问题。
怀疑 3:Q1–Q5 的收益非单调是不是说明分组无效? 检查了各组样本数(均为 4000)和真 alpha 的单调性(−8.43% → −11.49%,严格单调)。真值梯度存在,但收益的组内标准差(约 1800 bp / √4000 ≈ 28 bp)与组间差异(约 20–50 bp)同量级,注定测不出单调性。这与我在其他事件研究里遇到的情形一致:真值梯度存在不等于可观测。正文如实呈现了非单调。
怀疑 4:持有期扫描里 20 日的拖累是负的(−0.18 bp),是 bug 吗? 标准误 1.19 bp,−0.18 完全在噪声内。而且 5 日(0.32 ± 0.25)和 10 日(0.43 ± 0.61)也都不显著。短持有期的拖累本来就应该接近零,出现小幅负值是正常的抽样波动,不是错误。
怀疑 5:为什么盈利交易只占 53.78%,做空 alpha 是 −8%/年不应该更高吗? 60 日持有期的期望收益约 −8% × 60/252 = −1.90%,而 60 日波动约 38% × √(60/252) = 18.5%。信噪比 0.103,对应的胜率理论值约 Φ(0.103) ≈ 54.1%——实测 53.78% 与理论吻合。这个核对确认路径生成没问题。
十三、结论与诚实边界#
可以带走的:
- 召回是一个真实的、可量化的成本,量级在 15 bp / 60 日持有期(占反事实收益 7.64%),且随持有期急剧放大(120 日达 20.82%)。
- 它随策略质量线性放大(R² = 0.9995)。你的 alpha 越强,被夺走的越多。这是一个「惩罚成功」的成本结构。
- 紧俏券是三重惩罚:费率 12.8 倍、召回率高 35.7%、真 alpha 最强却净收益减半。回避紧俏券是零成本的 +11.32 bp。
- 拖累的主体是「持有期被截断」,不是「择时恶意」——安慰剂 A 在同召回率下给出更高拖累,推翻了流行说法。
- 它几乎无法被实证验证:需要 4,530 笔交易才能达到 |t| = 2。这不是「不存在」的理由,恰恰是「必须用模型而非经验去管理它」的理由。
本文不覆盖的(诚实边界):
- 召回强度的参数是构造设定,不是市场估计。 真实的召回率因市场、券种、出借人类型差异巨大。本文给出的是机制和量级关系,不是任何具体市场的校准值。任何把 15.43 bp 直接搬到实盘的做法都是误用。
- 未建模逼空(squeeze)动态。 真实的召回潮往往是相关的、集群式的——多个出借人在同一时间因同一原因召回,这正是逼空的机制之一。本文假设召回在标的间独立,因此系统性低估了尾部风险。这是本文最重要的一个保守偏差。
- 未建模「找到替代出借人」这条路径。 实务中被召回不一定意味着必须平仓,可以尝试重新借入(可能是更高费率)。本文假设召回即平仓,是保守假设。
- 几何布朗运动路径。 没有厚尾、没有波动率聚集、没有跳跃。做空最怕的恰恰是跳涨,而本文的路径生成低估了这类事件。
- A 股融券的制度差异。 本文的框架更贴近美股借券市场。A 股融券在券源、期限、强平规则上有本质差异,结论不能直接迁移。
最后一句:做空的风险管理清单上,「股价上涨」通常排第一,「借券费率」排第二,「召回」经常不在名单上。 而本文的数字说明,对一个 alpha 强、持有期长、标的紧俏的空头策略,召回可能是排第二的成本项——它只是恰好躲在了统计显著性的阈值之下。