halo 的技术博客

返回

核心结论:国债基差交易的爆仓不需要基差走阔,甚至不需要判断错误。 一个方向完全正确、到期必然收敛的头寸,可以在收敛之前被现金流杀死。

2 万条路径的受控模拟(基差到期必然收敛到 0 由构造保证)给出的决定性对照:把基差波动设为精确 0——意味着基差只走确定性收敛路径、永远不走阔、你的判断永远正确——爆仓率从 1.615% 只降到 1.465%,保留了基准的 90.7%

而唯一能让它精确归零的,是让现券端的浮盈可以当天变现(phi=1):爆仓率 0.000000%

这是一场融资事故,不是投资失误。

左:5bp 基差在 1x 无杠杆下只有 0.10% 年化,开到 100x 也只有 6.32% 而存活率跌到 77%;右:基差绝不走阔的世界里爆仓率几乎不降,只有让浮盈即时变现才精确归零

一、先算一笔账:为什么必须开 50 倍杠杆#

基差交易的结构:买入现券(cash Treasury)+ 卖出对应期货合约。当期货价格相对现券偏贵时,这个价差(净基差)会在交割日必然收敛到零。理论上是一笔无风险套利。

问题在于价差有多大。典型净基差是 几个基点。本文取 5 bp、持有 90 天。

那么无杠杆做这笔交易能赚多少?

杠杆haircut每 100 面值自有资金年化 ROE存活率
1x100%135.000.10%100.00%
5x20%27.000.43%100.00%
20x5%6.751.65%100.00%
33x3.03%4.092.71%99.98%
50x2%2.704.06%98.45%
66x1.52%2.055.10%93.62%
100x1%1.356.32%77.48%

1x 无杠杆时年化 0.10% —— 比直接持有国库券还低。没有任何机构会为这个数字动手。

而毛基差收益恒定在 5.00 bp/面值,与杠杆完全无关。它是标的的属性。杠杆做的唯一一件事,是改变分母。

所以:50 倍杠杆不是贪婪,是这笔交易存在的前提。要摸到 4% 年化就得开到 50x。而从 1x 到 100x,ROE 放大 61 倍,存活率从 100% 压到 77.48%。

这个结构性事实决定了后面所有的脆弱性。你不能建议他们「少用点杠杆」——那等于建议他们别做这笔交易。

二、真正的机制:两条腿在现金流上不对冲#

基差交易在经济上是对冲的:收益率上行,现券亏、期货空头赚,净额几乎为零。

但在现金流时点上完全不对冲:

现券多头期货空头
收益率上行时浮亏浮盈
收益率下行时浮盈浮亏 → 当天必须付现金
结算方式回购融资,浮盈是账面数字逐日盯市,现金交割

期货端由交易所每日结算,亏了当天就要划钱。现券端的对冲浮盈要变成能交保证金的现金,需要重新做回购融资——而这需要时间,且在压力期未必做得成。

本文用一个参数 phi 刻画这件事:现券浮盈的当日可变现比例。phi=1 表示浮盈可以瞬间变现(时点错配消失),phi=0.9 表示只有 90% 能当天用上。

基准设定:

参数
初始净基差5.0 bp
持有期90 交易日
haircut2%(杠杆 50x)
现金缓冲权益的 35%
抵押品变现比例 phi0.90
收益率年化波动75 bp
DV010.0655 / 100 面值

基准结果:每 100 面值投入权益 2.00 + 现金缓冲 0.70 = 总资本 2.70。90 日平均 ROE +1.4436%,年化 +4.04%,存活率 98.385%

账本拆分(bp/面值):基差 +4.944、回购利差 −1.047、对冲残差 +0.000

三、决定性对照:拆掉每一根柱子#

设定爆仓率年化 ROE判读
基准1.615%+4.04%
基差波动 = 01.465%+4.05%方向永远对,照样死
收益率波动 = 00.000%+4.10%无追缴则无事
两者 = 0(安慰剂)0.000000%+4.10%引擎自洽
phi = 10.000000%+4.10%时点错配精确消失

第二行是全文最重要的一个数字。基差绝不走阔的世界里,爆仓率保留了基准的 90.7%。

在那个世界里,你的交易判断是由构造保证正确的:基差从 5bp 单调收敛到 0,持有到期一定赚钱。但仍有 1.465% 的头寸死掉了——它们是被期货端的保证金追缴打死的,而那些追缴对应的现券浮盈明明就在账上,只是当天动不了。

第五行给出唯一的解药,也证明了机制归属:phi=1 时爆仓率精确为 0.000000%。不是「很小」,是精确零。

四、剂量反应:时点错配是唯一的引擎#

phi0.700.800.850.900.940.971.00
爆仓率39.19%21.36%10.98%1.72%0.025%0.00%0.00%
年化 ROE2.21%3.21%3.67%4.03%4.10%4.10%4.10%

单调、跨越两个数量级、在 phi→1 处精确归零。这是一条教科书级的剂量反应曲线。

而 phi 从 0.90 掉到 0.85 —— 一个听起来微不足道的抵押品变现效率下降 —— 爆仓率涨 6.4 倍

2020 年 3 月发生的正是这件事:不是国债的基本面出了问题,是回购市场的变现效率在几天内塌了。

经济净额恒为零(完美对冲),但当日现金流不为零。收益率下行 10bp 时,账面上你一分钱没亏,现金账户却少了 0.0655——占总资本 2.70 的 2.43%。连续几天就能吃穿缓冲。

注意缺口是双向的:收益率上行时你反而多出现金。但这个不对称性救不了你——多出来的现金只是让你活到下一次,而一次不够就出局。这是一个吸收态问题,不是均值问题。

左:剂量反应,phi→1 时爆仓率精确归零;中:现金缓冲有效但直接稀释 ROE;右:波动放大时爆仓率非线性上升

五、为什么没人多留现金#

现金缓冲能有效降低爆仓率。那为什么不多留?

缓冲(占权益)0%15%25%35%50%100%150%
爆仓率94.23%28.93%8.39%1.51%0.075%0.00%0.00%
年化 ROE−2.64%3.31%4.07%4.04%3.68%2.77%2.21%

零缓冲时爆仓率 94.23% —— 这个策略离不开缓冲。但过了 25%,每多留一分现金就直接稀释一分 ROE:100% 缓冲时 ROE 掉到 2.77%,150% 时只剩 2.21%。

ROE 的峰值在 25% 缓冲处(4.07%),而爆仓率在那里还有 8.39%。收益最大化点和风险最小化点不在同一个位置,且相距很远。

这就是整个行业的处境:竞争压力把每个人都推向 ROE 最优点附近,而那个点的爆仓率是两位数。任何单家机构多留缓冲,都会在业绩排名上落后。

六、haircut 才是真正的扳机#

回购折扣率上升,等于强制降杠杆。而它上升得非常快:

haircut 冲击隐含杠杆爆仓率年化 ROE
+0.00pp(2.00%)50.0x1.59%+4.05%
+0.25pp(2.25%)44.4x10.99%+3.69%
+0.50pp(2.50%)40.0x40.85%+2.42%
+1.00pp(3.00%)33.3x96.55%−0.37%
+2.00pp(4.00%)25.0x100.00%−0.50%

haircut 只涨 1 个百分点,爆仓率就到 96.55%。

这是因为 haircut 上升要求立即补缴 Δhaircut × 面值 = 1% × 100 = 1.00 的现金,而总资本只有 2.70、现金缓冲只有 0.70。补不上就是强平。

从风险管理的角度,这是最难防的一项:它不是市场变量,是交易对手的政策决定,可以在一夜之间生效,且所有回购交易商倾向于同时调整。

七、「市场中性」是个近似说法#

对冲比例(现券 DV01 / 期货 DV01)在实践中不可能精确等于 1——期货的可交割券会切换,转换因子会变,久期会漂移。

对冲比例0.900.951.001.051.10
爆仓率0.00%0.00%1.52%10.29%21.63%
ROE 标准差10.96%5.48%0.23%5.69%10.99%

一个不对称的结果:欠对冲(<1.0)反而不爆仓,过度对冲(>1.0)爆仓率飙升

原因在现金流方向上:过度对冲意味着期货空头头寸偏大,收益率下行时期货端的现金亏损超过现券端浮盈的可变现部分,缺口被放大。而欠对冲时期货端头寸小,追缴压力小——代价是 ROE 标准差从 0.23% 涨到 10.96%,风险从「爆仓」转移到「方向性敞口」。

这两种风险不可比:欠对冲让你承担利率方向风险(可能大赚大亏),过度对冲让你面临强制平仓(不可逆)。大多数风险系统会奖励前者、惩罚后者,而它们的报表看起来一样中性。

八、收益率波动与系统性映射#

收益率年化波动40bp55bp75bp100bp140bp200bp
爆仓率0.00%0.15%1.54%6.36%18.44%34.36%
年化 ROE4.10%4.09%4.04%3.87%3.37%2.59%

非线性上升:波动翻倍(75→140bp)爆仓率涨 12 倍。

把这个映射到行业规模。假设全行业名义头寸 8000 亿美元(800 billion)、haircut 2%、缓冲 35%:

背后的自有资金只有 216 亿美元 —— 占名义规模的 2.70%

收益率波动爆仓率被迫抛售国债
75bp(常态)1.54%123 亿美元
100bp6.36%509 亿美元
140bp18.44%1475 亿美元
200bp34.36%2749 亿美元

而这些抛售本身会推高收益率波动,触发下一轮——本文没有建模这个反馈环,所以上表是下界

左:对冲比例差 5% 风险结构就完全不同;右:8000 亿美元名义头寸只由 216 亿美元自有资金支撑

九、死在收敛之前#

爆仓时点分布:中位第 74 日,10/90 分位 [51, 87],而目标持有期是 90 日。

大多数爆仓发生在最后三分之一 —— 此时基差已经收敛了大半,账面浮盈最多,离终点最近。

存活组平均 ROE +1.463%,爆仓组 +0.262%(差 1.201pp)。注意爆仓组仍然是正收益:它们已经赚到了大部分基差收敛,只是被强平时损失了剩余部分加上冲击成本。

这不是「亏钱的交易」,是「没能拿到全部利润的交易」 ——但在 50 倍杠杆下,少拿 1.2pp 的 ROE 意味着这一季白干。

十、样本量红线:一个会骗人的 t 统计量#

单笔 ROE:均值 +1.4436%、SD 0.2614%、偏度 −11.16

天真的样本量计算说:需要 1 笔就能达到 |t|=2。

这个数字毫无意义。 均值/标准差比值好看,是因为 98.4% 的路径挤在一个极窄的正收益峰里(5 分位和 95 分位都精确等于 1.4630%——它们全是完好存活到期的头寸),全部风险集中在左尾的 1.6%。

偏度 −11.16 意味着分布严重违反 t 检验的正态假设。用常规统计量评估这个策略,会得出「极其稳健」的结论——而它的真实风险结构是「几乎总是赚一点点,偶尔一次把本金打穿」

这正是这类策略在业绩报告上长期漂亮的原因:在爆仓发生之前,所有指标都完美

左:极度左偏,偏度 −11.16;右:死在收敛之前,中位爆仓日第 74 天而目标持有 90 天

十一、对抗式审查:怀疑过并排除的点#

  1. 「爆仓会不会只是因为基差随机走阔?」 决定性对照排除:基差波动精确为 0 时爆仓率仍有 1.465%(保留 90.7%)。

  2. 「phi=1 归零会不会是数值巧合?」 不是。phi=1 时现券浮盈完整计入当日现金,两条腿的现金流恒等式使净额精确等于经济净额(恒为 0),数学上不可能出现现金缺口。phi=0.97 时也已精确为 0。

  3. 「结算延迟为什么几乎没影响?」 实测 0/1/2/3 日延迟对应 1.450%/1.425%/1.413%/1.413%。这是个诚实的负面结果:延迟只是平移现金流序列,不改变累计缺口。真正致命的是缺口的大小,不是它到账的时点——这与我的初始预期相反。

  4. 「对冲残差为什么精确等于 0.000?」 基准 hedge=1.0 时两条腿的 DV01 完全抵消,这是构造设定。对冲比例扫描(0.90~1.10)就是在检验偏离这个理想状态的后果。

  5. 「12 宇宙稳不稳?」 爆仓率均值 1.603%、SD 0.115pp、CV = 0.0715

  6. 「ROE 的 5 分位和 95 分位为什么相同?」 因为 98.4% 的路径完好存活,它们的 ROE 由确定性的基差收敛决定,完全相同。这不是 bug,是这个策略风险结构的直接体现。

十二、结论与诚实边界#

能确认的:

  • 50 倍杠杆是这笔交易的存在前提,不是风险偏好选择(1x 时 ROE 0.10%)
  • 爆仓的主因是现金流时点错配,不是判断错误(基差零波动世界保留 90.7% 的爆仓)
  • 唯一能精确消除它的旋钮是抵押品变现效率 phi,而这个变量在压力期不由基金控制
  • haircut 上升 1pp 就足以让爆仓率到 96.55%,它是交易对手的政策变量
  • 常规统计量会系统性低估这个策略的风险(偏度 −11.16)

边界:

  • 没有建模反馈环。真实的去杠杆会推高收益率波动、进一步触发爆仓,本文的系统性抛售估计是下界
  • 没有建模央行干预。2020 年 3 月的实际结局是美联储直接购债,这在模型里不存在——这意味着历史数据会系统性低估这个策略的尾部风险,因为最坏的那次被救了
  • 基差路径用的是「确定性收敛 + 高斯扰动」,没有建模交割期权(可交割券切换)的非线性
  • 8000 亿美元的规模假设来自公开讨论的量级,本文用它做敏感度映射而非精确预测;结论的定性部分不依赖这个具体数字
  • 单一持有期(90 日)和单一 DV01。实践中头寸跨多个期限,风险会有分散效应

最后一点值得强调:这个策略的社会成本和私人成本不对称。单家基金爆仓损失的是自己的 2.70% 权益;而所有基金同时爆仓,抛售的是 8000 亿美元名义的国债 —— 后者的承受方是整个融资市场。

而每一家在自己的风险系统里看到的,都是一个 Sharpe 极高、回撤极小、偏度告诉你「几乎从不亏钱」的策略。

国债基差交易:对冲基金 8000 亿美元头寸的脆弱性
https://blog.halo26812.eu.org/blog/basis-trade-treasury-hedge-fund
Author halo
Published at 2026年8月7日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨