一、套利基础:跨交易所套利的本质
大家好,我是你们的量化交易工程师朋友。今天咱们聊聊跨交易所套利——这个听起来高大上、其实核心逻辑特别朴素的东西。
说白了,套利就是「低买高卖」。只不过,咱们不是在同一个地方买和卖,而是在不同的交易所之间倒腾。同一只股票,在纽约证券交易所(NYSE)卖100.01美元,在纳斯达克(NASDAQ)卖100.00美元——你从纳斯达克买,到NYSE卖,赚这1分钱的差价。这就是跨交易所套利。
听起来简单?嗯,实际操作起来,水很深。我当年刚入行时,觉得这不就是搬砖嘛,结果第一次实盘就被滑点教做人了。后面我会细说。
1.1 美股的多交易所格局
美股市场不是只有一个交易所。它是个多交易所、多暗池、多ATS(另类交易系统)组成的复杂生态。咱们先看几个主要的公开交易所:
| 交易所 | 代码 | 特点 | 市场份额(约) |
|---|---|---|---|
| 纽约证券交易所 | NYSE | 传统大蓝筹,拍卖市场,有指定做市商 | ~22% |
| 纳斯达克 | NASDAQ | 全电子化,科技股为主,多做市商竞争 | ~19% |
| NYSE Arca | ARCA | NYSE旗下电子化交易所,ETF交易主力 | ~17% |
| BATS / Cboe | BATS / Cboe | 低成本、高速度,深受高频交易喜爱 | ~15% |
| 其他(EDGX, IEX等) | — | 小众交易所,各有特色 | ~27% |
你可能会问:为什么同一只股票要在这么多交易所交易?
原因很简单:竞争。SEC(美国证监会)希望市场有竞争,降低交易成本。所以同一只苹果股票,可以在NYSE、NASDAQ、ARCA、BATS等多个地方同时交易。每个交易所都有自己的订单簿、自己的流动性、自己的规则。
这就带来了一个结果:同一时刻,同一只股票在不同交易所的价格,大概率不一样。
为什么会不一样?因为信息传递需要时间,因为各交易所的流动性不同,因为做市商的报价策略不同。说白了,市场不是完美的。有摩擦,就有套利空间。
1.2 套利的本质:无风险?不存在的
教科书上说,套利是「无风险利润」。我告诉你,这是骗人的。
真正的跨交易所套利,风险无处不在。我把它归纳为三类:
- 执行风险:你看到价差,下单买入,结果买入成交了,卖出那边价格变了。价差没了,你反而亏了手续费。这叫「抢不到」。
- 延迟风险:你的订单从你的服务器到交易所,需要时间。如果别人比你快,你就吃不到。我见过太多团队,策略逻辑完美,但网络延迟比别人多2毫秒,结果就是一直亏。
- 流动性风险:你看到价差很大,但一出手发现,买盘只有100股,卖盘也只有100股。你想做1000股?对不起,价格瞬间被打穿。
我曾经犯过一个低级错误:用市价单做套利。结果买入时滑了3个tick,卖出时又滑了3个tick。原本1分钱的价差,变成了亏5分钱。记住:套利必须用限价单,而且要算好滑点预算。
1.3 套利的数学基础
咱们用公式说话。假设股票S在交易所A的卖一价是PA,在交易所B的买一价是PB。套利条件就是:
P_B - P_A > 交易成本(手续费 + 滑点 + 清算费)
如果这个不等式成立,理论上就可以套利。但实际中,你还要考虑:
- Reg NMS(全美市场系统规则)的保护机制:你不能在价格更差的交易所成交,除非更好的价格被撤单了。
- 订单类型的选择:用IOC(立即成交否则撤销)还是用FOK(全成否则撤销)?我习惯用IOC,因为套利机会转瞬即逝,没必要等。
- 清算和结算:T+2结算,但你的资金需要提前到位。
1.4 知识体系结构图
下面这张图,是我自己整理的跨交易所套利知识体系。你看一眼,心里就有谱了:
1.5 一个简单的套利检测代码
光说不练假把式。我写个最简单的Python代码,帮你理解套利检测的逻辑。注意,这只是教学演示,别直接拿去实盘:
import time
import random
# 模拟两个交易所的报价
def get_quote_nasdaq(symbol):
# 实际中这里会连API
return {
'bid': 100.00,
'ask': 100.02,
'bid_size': 1000,
'ask_size': 1000
}
def get_quote_nyse(symbol):
return {
'bid': 100.01,
'ask': 100.03,
'bid_size': 800,
'ask_size': 800
}
def check_arbitrage(symbol):
nasdaq = get_quote_nasdaq(symbol)
nyse = get_quote_nyse(symbol)
# 套利条件:在NASDAQ买,在NYSE卖
buy_price = nasdaq['ask']
sell_price = nyse['bid']
spread = sell_price - buy_price
cost = 0.005 # 假设每笔交易成本0.5分
if spread > cost:
print(f"发现套利机会!价差: {spread:.3f}")
print(f"从NASDAQ买入: {buy_price:.3f}")
print(f"在NYSE卖出: {sell_price:.3f}")
print(f"预期利润: {spread - cost:.3f} 每股")
return True
else:
print(f"无套利机会。价差: {spread:.3f}")
return False
# 运行检测
check_arbitrage('AAPL')
我刚开始做套利时,以为检测到价差就能赚钱。后来发现,从检测到执行,中间有几十毫秒的延迟。这几十毫秒里,价差可能已经消失了。所以真正的套利系统,核心不是检测,而是执行速度。记住:套利是速度游戏,不是智力游戏。
1.6 套利的风险清单
最后,我列个风险清单。你每次做套利前,对照着看一遍:
- 价差消失风险:你看到价差时,别人已经吃掉了。你进去就是接盘侠。
- 订单部分成交风险:你下了1000股,结果只成交了200股。剩下的仓位怎么办?
- 交易所故障风险:我遇到过NYSE突然宕机,订单卡在里面出不来。那叫一个酸爽。
- 监管风险:Reg NMS规定,你不能故意在非最优价格成交。违规会被罚款。
- 资金占用风险:套利需要双边资金。你赚1分钱,可能要占用几万美金。年化收益率算下来,可能还不如买国债。
嗯,今天就聊到这儿。套利不是印钞机,它是个精细活。你需要理解市场结构、控制风险、优化执行。后面的章节,我会一步步带你深入每个环节。