halo 的技术博客

返回

“Carry”这个词在金融里到处都是:外汇套息、债券 carry、商品展期、股票股息率……它们表面千差万别,内核却是同一件事——持有一个有正利差的头寸,赚”别人愿意为风险付费”的钱。本文把它上升到”系统性 Carry”的视角:不只在外汇做,而是把所有资产类别里”被奖励的持险”汇总成一个策略,并回答一个尖锐的问题——既然这是免费午餐,为什么几十年都没被套利抹平?

Brunnermeier、Nagel 与 Pedersen(2008)的答案是:套息赚的不是无风险利差,而是风险补偿。它在风平浪静时小赚,在每一次全球风险事件里剧烈亏损,本质上是一张被持续签发的”保险单”。下面用 G10 货币从零模拟一个套息组合,把这套机制跑成看得见的数据。

G10 货币利率:红=套息做多端(高息投资货币),蓝=做空端(低息融资货币)

一、系统性 Carry 的共同内核#

不管标的是什么,一个 Carry 头寸都可以写成:

  • 多一头”高收益/高利差”资产(如高息货币、远月贴水商品、高股息股票);
  • 空一头”低收益/低利差”资产(如低息融资货币、远月升水的资产);
  • 持有期内把利差落袋,不预测方向,只赌”价差不会在持有期被价格反向运动完全吃掉”。

外汇套息是这个家族最纯粹的版本:低息货币(日元、瑞郎)做空融资,高息货币(澳元、巴西雷亚尔)做多投资,每月把名义利差落袋。我们按利率排序、多高息空低息、等权持有:

这就是 Carry 的”无脑”之处:它不猜方向,只赌”高息货币相对低息货币不会跌太多”。但下一节会看到,这个看似安全的赌注在危机里有多凶——而凶险的程度,恰恰决定了它的收益水平。

二、从零模拟:把”危机”写进汇率#

汇率收益拆成三块:利差成分(持有高息赚到的漂移)、风险因子暴露(全球风险规避时高息货币贬值、低息避险货币升值)、特质噪声。关键设定是符号——高息货币对”风险因子”负向敏感(风险规避时跌),低息避险货币正向(风险规避时涨):

注意危机的写法:风险因子飙升(而非下跌)。因为因子定义成”风险规避程度”,越高越糟糕。此时高息货币 BETA_FX<0 收益被压低(long 亏),低息避险货币 BETA_FX>0 升值(short 也亏)——套息的两端同时亏损,这正是它崩盘的机制。系统性 Carry 的”系统性”三字,指的就是这种跨所有 carry 头寸、对同一个全球风险因子的同步负暴露。

三、结果:长期能赚,但尾巴极肥#

nav_port = np.cumprod(1 + port_ret)
nav_eq   = np.cumprod(1 + eq_ret)

ann  = port_ret.mean() * 12
vol  = port_ret.std()  * np.sqrt(12)
sharpe = ann / vol
def drawdown(nav):
    peak = np.maximum.accumulate(nav)
    return nav / peak - 1.0
maxdd = drawdown(nav_port).min() * 100
python

实际跑出来:年化收益 ≈ 3.5%、年化波动 ≈ 14.2%、Sharpe ≈ 0.25、最大回撤 ≈ −38.2%

图 2 把套息净值(蓝)和全球股票(灰)叠在对数轴上:长期它确实往上爬,但三次危机(红线)处都同步重挫。图 3 的水下曲线更刺眼——套息的致命伤不是慢慢跌,而是危机里几个月内回撤 30%+,远超股票同期的回撤。

套息组合累积净值 vs 全球股票:长期跑赢,但风险因子飙升期同步重挫

套息组合的回撤:危机中回撤可达 −38%,远超常态波动

四、核心检验:负向 beta 就是”风险补偿”的证据#

套息之谜的答案,藏在一次回归里。把套息的超额收益对全球风险因子回归:

excess = port_ret - 0.0025                       # 减去月度无风险
X = np.column_stack([np.ones(T), risk_factor])
beta, _, _, _ = np.linalg.lstsq(X, excess, rcond=None)
resid = excess - X @ beta
sig2  = resid @ resid / (T - 2)
se    = np.sqrt(np.diag(sig2 * np.linalg.inv(X.T @ X)))
corr  = np.corrcoef(risk_factor, excess)[0, 1]
python

结果:风险因子 β = −1.36(t ≈ −44.8),与超额收益负相关 ρ ≈ −0.7

套息超额收益 vs 全球风险因子:显著负斜率,因子越高(越避险)套息越亏

这个负 beta 是整篇文章的题眼:套息组合相当于做空一份”全球风险保险”。平时大家风险偏好高、因子低,你稳稳收利差(保费);一旦风险事件来袭、因子飙升,你得巨额赔付(组合暴跌)。正收益就是市场付给你的风险溢价——不是白赚的利差,而是承担崩盘风险的补偿。这和管理期货、卖出波动率异曲同工:正偏度被换成负偏度,赚小钱、亏大钱。

图 5 把这点画到极致:常态月份收益围绕小正紧密聚集,而 6 根红线(危机月)平均 −13.6%,最深的单月亏损把多年累积吞噬。放到学术史里,这正好对应 Fama(1984)的远期溢价之谜:按无抛补利率平价,高息货币的未来贬值应恰好抵消利差,但实证里高息货币反而常常升值——负 crisis beta 给出统一解释:高息货币因为要在危机里暴跌,平时才被”风险溢价”推着相对升值,利差不是白送的,而是为那次暴跌预先付的代价。

常态小赚 vs 危机大亏:6 根红线为危机月,均值 −13.6%,印证利差是风险补偿

五、系统性 Carry 的工程化:能不能”既要利差、又要少崩”#

既然崩盘来自对风险因子的负暴露,把外汇 Carry 扩成跨资产系统性 Carry(利率利差 + 商品展期 + 股票股息率 + 信用利差)能分散 idiosyncratic 风险,但系统性危机(全局风险因子)无法靠分散消除——因为负 beta 是整个策略的结构性特征。能做的减伤有两个方向:

  • 波动目标化:按套息组合自身波动缩放仓位,危机波动放大时自动减仓,能压低回撤但也会削掉部分收益。等价于把”卖保险”的仓位从恒定改成”随风险水位浮动”。
  • 趋势/波动过滤:当高息货币相对低息货币跌破均线(趋势转弱)时空仓,或当全局风险因子突破阈值时整体降仓——本质是止损,把”死扛到崩盘”换成”早走一步”。
  • 分散化篮子:单对 AUD/JPY 的崩盘相关极高,扩展到跨新兴市场与 G10、再叠商品与利率 carry,能把 idiosyncratic 部分对冲掉,但系统性那一刀仍躲不掉。

换句话说:过滤能减伤,但系统性 Carry 的正收益与危机风险是一体两面,想完全去掉崩盘,就等价于去掉了它的收益来源。专业套息基金从不全仓裸做、必然配套波动目标与趋势止损,因为他们卖保险,但一定先算清自己赔不赔得起。

六、真实陷阱(实盘必看)#

  1. 交易成本与展期:每次月末再平衡都有买卖价差与隔夜拆借点差,高息端借入/低息端融出的 basis 会吃掉一部分利差,尤其利率高位时。
  2. 融资流动性风险:套息在”别人都在平仓”时最痛——流动性干涸时被迫平仓,亏损被放大成踩踏,这不是模型波动能 capture 的。
  3. 央行干预:低息融资货币(如日元)一旦被央行压制或政策转向,单日跳变可吞掉数月利差;瑞士央行 2015 年放弃汇率下限就是经典一刀。
  4. 低利率环境压缩空间:当全球利率趋零,可套的利差变薄,而风险因子的崩溃幅度不变,风险收益比急剧恶化——近年套息吸引力下降的主因。
  5. 新兴市场的更大崩盘:BRL、ZAR 这类高息 EM 货币,危机 beta 绝对值更大(本文给到 −1.0 以上),收益更肥但崩得更狠,需用更大分散与更紧止损。
  6. FX basis 与 Cross-currency swap:真实融资成本和”利率差”之间隔着外汇基差,大资金的实际 carry 远低于名义利差,个人模拟常忽略这点而高估收益。

结论#

系统性 Carry 不是免费的利差午餐,而是一张被持续签发的危机保险单:用常态的小赚,去赌自己不会在风险事件里被迫巨额赔付。本文的模拟把这点跑成了硬数据——负向 risk beta(−1.36)、危机月均值 −13.6%、最大回撤 −38%,三件事说的是同一句话:你赚的每一分利差,都是市场为你承担崩盘风险付的保费。把视角从”外汇套息”抬到”系统性 Carry”,意义在于看到它的本质不是某个货币的利差,而是所有资产里”被奖励的持险”的总和——而这笔奖励,永远对应着一笔在危机里才结算的账单。理解了这一点,就不会在 2008 或 2020 的 carry 崩盘里问”为什么”,而会提前问”我的仓位扛不扛得住那次赔付”。

本文组合与图表基于 G10 利率与汇率的模拟数据从零构建,用于演示系统性 Carry 的收益结构与风险补偿机制;实盘需接入真实利率、外汇即远掉报价与交易成本,并注意第六节的六类真实陷阱。

系统性 Carry 交易:用利差把『被奖励的持险』做成策略
https://blog.halo26812.eu.org/blog/carry-trade-systematic
Author halo
Published at 2026年7月17日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨