同一家公司,同一份现金流,却挂着两个价格。
台积电在台交所是 2330.TW,在纽交所是 TSM;阿里巴巴在港股是 9988.HK,在纽约是 BABA。两边买到的都是对同一家公司未来利润的索取权,理论上——扣掉汇率和折算比例之后——必须相等。这就是金融里最干净的定律之一:一价定律(Law of One Price)。
但市场天天在违反它。ADR(American Depositary Receipt,美国存托凭证)相对本地股的价差,隔三差五就冒出 2%、3%,极端时冲到两位数。这条缝就是 ADR 溢价套利的战场——你赌的不是公司涨还是跌,而是这两个价格终究会重新相等。
本文讲清四件事,并用可复现代码演示:
- ADR 是什么、份额怎么折算、可转换机制如何把价差锁进一个区间;
- 溢价 / 折价从哪里冒出来,哪些是可套利的、哪些是陷阱;
- 溢价与折价时,跨市场两条腿怎么拼成一笔收敛套利;
- 用 Python 模拟 ADR 与本地股价差,回测一个价差收敛策略,并做入场阈值敏感性分析。
一、ADR 到底是什么#
美国投资者想买台积电、想买阿里、想买丰田,但直接去台交所、港交所、东交所开户既麻烦又有额度和税务问题。ADR 就是解决这个痛点的金融包装:
一家美国存托银行(花旗、纽约梅隆、摩根大通是三大巨头)在本地市场买入公司的普通股,托管起来,然后在美国发行对应的存托凭证。你在纽约买一张 ADR,本质上就是间接持有了托管在海外的那几股普通股。
关键参数是折算比例(ADR ratio):一张 ADR 代表几股本地普通股。
- 台积电 TSM:1 ADR = 5 股本地股(
2330.TW) - 阿里 BABA:1 ADR = 8 股本地股(
9988.HK) - 有些是 1:1,有些一张 ADR 对应零点几股
理论平价关系是:
ADR 理论价格 = 本地股价 × 折算比例 × (本地货币 → 美元汇率)plaintext任何时刻,ADR 的实际市价与这个理论价格的偏离,就是溢价(premium,实际 > 理论)或折价(discount,实际 < 理论):
溢价率 = (ADR 实际市价 / ADR 理论价格) − 1plaintext二、为什么两个价格锁不死:可转换性与摩擦#
如果 ADR 和本地股永远可以自由、零成本、瞬时互换,价差根本不可能存在——任何偏离都会被瞬间抹平。价差之所以能存在并且可交易,恰恰是因为转换有摩擦。
可转换机制:ADR 分两种。
- 可转换 ADR(fungible):持有人可以通过存托银行做「转换」——把 ADR 注销、取回本地股(cancellation),或把本地股交存、创设新 ADR(issuance)。这条通道就是套利的物理基础,类似 ETF 的申赎。
- 不可自由转换的 ADR:比如某些受额度、资本管制或存托协议限制的品种,转换通道受阻。这类 ADR 的溢价可以长期存在甚至发散——这不是机会,是陷阱。
即便是可转换 ADR,转换也不是免费的:
- 存托银行收取转换费(通常每股几美分,上限每 ADR 5 美分是常见量级);
- 跨市场交割有结算时滞(T+2 甚至更久),这段时间你敞口在裸奔;
- 汇率对冲有成本;
- 本地市场和美国市场交易时段不重叠(台股、港股收盘时美股还没开盘),非重叠时段的价差无法即时对冲。
这些摩擦共同决定了一条无套利区间:价差在带内时,抹平它赚的钱还不够付成本,套利者按兵不动;价差冲出带外,套利者才进场。所以真实的 ADR 溢价率不是死死钉在 0,而是在一条带子里震荡、偶尔冲出后被拉回。

上图是模拟的 ADR 溢价率序列:大部分时间在 ±2% 的套利带内做布朗运动式震荡(带内的小偏离是噪声,抹平不划算),偶尔因为某个市场的单边冲击窜到带外,然后被套利力量拉回。这个「带内随机游走 + 带外强回归」的两段式指纹,是所有靠可转换机制锚定的价差的共同特征。
三、套利怎么闭环:两条腿的方向#
假设台积电,1 ADR = 5 股本地股,当前:
- 本地股
2330.TW= 1000 TWD/股 - 台币兑美元 = 0.031 USD/TWD
- ADR 理论价 = 1000 × 5 × 0.031 = 155 USD
情形 A:ADR 溢价(TSM 市价 = 162 USD,溢价 +4.5%)
ADR 太贵、本地股相对便宜。套利方向:
- 卖出(做空)ADR:在纽约按 162 卖出 TSM;
- 买入本地股:在台交所买入 5 股
2330.TW(花 155 美元等值台币); - 通过存托银行把这 5 股本地股交存、创设成 1 张新 ADR;
- 用新创设的 ADR 交割掉第 1 步的空头。
净赚 ≈ 4.5% − 转换费 − 汇率对冲成本 − 交割时滞风险。
情形 B:ADR 折价(TSM 市价 = 148 USD,折价 −4.5%)
ADR 太便宜、本地股相对贵。方向反过来:
- 买入 ADR:纽约按 148 买入 TSM;
- 通过存托银行把 ADR 注销、取回 5 股本地股;
- 在台交所卖出这 5 股
2330.TW; - (如需要)做空本地股或买入 ADR 时同步对冲汇率。
无论哪个方向,你都是同时持有一多一空、方向相反的孪生资产,市场整体涨跌被对冲掉,赚的是价差收敛那部分。这就是它被归为「市场中性统计套利」的原因。
四、Python 回测:价差收敛策略#
下面用纯 pandas 模拟 ADR 与本地股的价格,构造溢价率序列,回测一个阈值型均值回归策略。核心逻辑:溢价率冲出上界就做空价差(卖 ADR 买本地股),冲出下界就做多价差,回归到中枢附近就平仓。
信号在当日收盘确认、下一个交易日执行,避免用当天信息做当天决策的前视偏差。
import numpy as np
import pandas as pd
rng = np.random.default_rng(42)
n = 500
# ---- 1. 模拟溢价率序列(OU 均值回归 + 偶发冲击)----
kappa, theta, sigma = 0.08, 0.0, 0.9 # 回归速度 / 中枢 / 波动
prem = np.zeros(n)
for t in range(1, n):
prem[t] = prem[t-1] + kappa * (theta - prem[t-1]) + sigma * rng.standard_normal()
for k in [90, 230, 380]: # 植入几次极端偏离
prem[k:k+8] += rng.choice([-1, 1]) * rng.uniform(3.5, 5.5)
df = pd.DataFrame({"premium": prem})
# ---- 2. 阈值型信号(signal-on-bar-i)----
ENTRY, EXIT = 2.0, 0.5 # 入场 / 平仓阈值(%)
COST = 0.9 # 单次开平价差成本(%),含转换费+汇率+滑点
pos = np.zeros(n) # +1=做多价差(赌溢价上升), -1=做空价差
for t in range(1, n):
p = df["premium"].iloc[t]
prev = pos[t-1]
if prev == 0:
if p > ENTRY: pos[t] = -1 # 溢价过高 -> 做空价差
elif p < -ENTRY: pos[t] = +1 # 折价过深 -> 做多价差
else:
# 回到中枢附近就平仓
if abs(p) < EXIT: pos[t] = 0
else: pos[t] = prev
df["pos"] = pos
# ---- 3. 收益:价差收敛 = 溢价率向 0 移动带来的盈亏(execute-on-bar-i+1)----
df["dprem"] = df["premium"].diff()
# 做空价差(pos=-1)在溢价下降时赚钱 -> 收益 = -pos_{t-1} * dprem_t
df["pnl_gross"] = -df["pos"].shift(1) * df["dprem"]
df["trade"] = df["pos"].diff().abs().fillna(0) # 仓位变化=交易
df["pnl_net"] = df["pnl_gross"] - df["trade"] * COST
df["nav"] = (1 + df["pnl_net"] / 100).cumprod()
print("总交易次数:", int(df["trade"].sum()))
print("末端净值 :", round(df["nav"].iloc[-1], 4))
print("年化收益 :", round((df["nav"].iloc[-1] ** (252/n) - 1) * 100, 2), "%")python这里有个关键建模细节:套利收益的本质是溢价率向中枢移动的那部分位移。做空价差(pos=-1)时,溢价率下降赚钱、上升亏钱,所以收益写成 -pos_{t-1} × dprem_t。用 shift(1) 保证「昨天的仓位吃今天的价差变化」,这是避免前视偏差的命门——如果误写成 pos_t × dprem_t,你就用了当天才知道的仓位去结算当天的收益,回测会虚高得离谱。
收敛的事件研究#
把所有极端偏离对齐到触发日 T0,看之后价差怎么走:

极端溢价组(>+3%)和极端折价组(<−3%)在触发后都以指数速度向零收敛,半衰期约 4–5 个交易日、8–10 天基本收敛完毕。T0 前两组曲线对称张开、没有提前收敛,说明这不是前视偏差制造的假象。这个速度比封闭式基金折价的收敛快一个数量级——原因就是可转换 ADR 有一条实时的物理套利通道,而封基没有。
策略净值#

套利策略净值呈台阶式上行:平时几乎横盘(价差在带内、不交易),每次极端偏离收敛就吃到一段收益,形成一个台阶。它和买入持有标的股的曲线几乎不相关——后者跟着市场大起大落,前者只赚价差收敛。这正是市场中性策略该有的样子:低相关、低波动、收益来自结构性错误定价而非方向暴露。
入场阈值敏感性#
阈值选多少最优?这是这类策略最要命的参数。

这张图是全文最该盯着看的:
- 阈值太低(比如 0.5%):交易次数暴增,但每次赚的价差还没转换费和汇率成本高,净收益被交易成本吃成负数;
- 阈值太高(比如 5%):这么极端的偏离一年出现不了几次,交易次数趋近于零,策略基本没在工作;
- 甜点区在中间:既有足够的偏离幅度覆盖成本,又有足够的触发频率。
而且两条曲线(低成本 0.9%/次 vs 高成本 1.5%/次)告诉你:成本结构直接决定甜点区的位置和高度。成本翻倍,最优阈值右移、峰值收益大幅缩水。这解释了为什么 ADR 套利是机构(低转换费、能自己创设注销、有券源)的游戏——同样的价差,散户的成本结构下根本无利可图。
A. 实现细节#
- 信号字段:溢价率 = ADR 实际市价 / (本地股价 × 折算比例 × 汇率) − 1,仅用收盘价计算,避免盘中噪声;
- 执行时点:信号当日收盘确认,下一交易日执行(
shift(1)),杜绝前视; - 收益口径:价差收敛盈亏 = −昨仓 × 今日溢价率变化,是「位移」而非「持有」收益;
- 成本建模:每次开/平仓扣 0.9%(含存托转换费、双边汇率对冲、跨市场滑点),仓位变化即计一次交易;
- 仓位:单位价差敞口(±1),未建模保证金占用与融券可得性;
- 净值口径:单一配对的价差策略净值,起始归一。
B. 已知偏差#
- 转换与交割时滞被简化:真实套利从下单到完成创设/注销需 T+2 甚至更久,这段时间价差可能继续扩大(负 carry),本回测把收敛当作平滑发生,低估了路径风险;
- 交易时段不重叠:本地市场与美股开盘时间错开,两条腿无法真正同时成交,隔夜跳空的对冲缺口未建模;
- 汇率被当作可完美对冲:实际汇率对冲有基差和成本波动,剧烈行情下汇率与价差同向冲击会放大亏损;
- 合成数据的收敛是设定出来的:OU 过程保证了均值回归,真实世界里价差可能因资本管制、额度冻结、存托协议变更而长期不回归甚至发散(见下文陷阱)。
C. 结果解读#
收益结构:净值台阶式上行,绝大部分收益来自少数几次极端偏离的收敛,平时空仓。这意味着策略容量和收益高度依赖极端事件的频率——市场越有效、跨境通道越顺畅,这类机会越稀少。
与市场的相关性:策略净值与标的股买入持有几乎零相关,符合市场中性定位。它不是用来赚 beta 的,是用来在组合里提供一条低相关收益流的。
阈值是生死线:敏感性分析证明最优阈值由成本结构决定,且甜点区不宽。参数一旦偏离,要么被成本吃光、要么无仗可打。这也是为什么这类策略必须先精确核算自己的真实成本,再反推可行阈值——而不是先定阈值再期待赚钱。
六大真实陷阱(这些才是把理论套利做亏的元凶):
- 不可转换 ADR 的伪机会:溢价看着诱人,但转换通道被额度/管制堵死,价差可以冲到 20%+ 还不回归——这是击鼓传花不是套利。看到过宽的价差,先问「为什么没人套利」,答案通常是「套不了」;
- 汇率与价差同向爆发:新兴市场货币危机时,本地股跌、汇率崩、ADR 溢价失真同时发生,两条腿一起亏;
- 交割时滞的裸奔:T+2 结算期内价差可能继续扩大,需要额外保证金,极端时被强平在最差点位;
- 借券成本与可得性:做空 ADR 或本地股需要券源,热门套利标的往往借券利率高企,直接吃掉价差;
- 存托银行的政策变更:暂停创设/注销、上调转换费,会瞬间切断套利通道,让持仓失去收敛锚;
- 税务与资本利得摩擦:跨境交易的预扣税、印花税(如港股)在高频套利下累积可观,回测里最容易被忽略。
一句话总结:ADR 溢价套利是教科书级别的一价定律应用,逻辑干净、市场中性、收敛可验证。但它真正的门槛不在信号,而在成本结构和通道可得性——同一个价差,机构能吃、散户吃不动。看到诱人的价差先别兴奋,先问一句:如果这么好赚,专业套利者为什么没把它抹平? 答案往往就藏着这笔交易亏钱的真正原因。