一、套利基础:跨交易所套利的本质

大家好,我是你们的量化交易工程师朋友。今天咱们聊聊跨交易所套利——这个听起来高大上、其实核心逻辑特别朴素的东西。

说白了,套利就是「低买高卖」。只不过,咱们不是在同一个地方买和卖,而是在不同的交易所之间倒腾。同一只股票,在纽约证券交易所(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 知识体系结构图

下面这张图,是我自己整理的跨交易所套利知识体系。你看一眼,心里就有谱了:

跨交易所套利知识体系 核心概念:价差 + 执行 市场微观结构 订单簿与流动性 风险管理 交易所格局 NYSE / NASDAQ / ARCA Reg NMS / NBBO 暗池 / ATS 订单簿分析 Level 1 / Level 2 数据 价差 / 深度 / 挂单量 订单类型(IOC/FOK) 风险控制 滑点预算 / 手续费 延迟 / 抢单风险 资金管理 / 止损 套利 = 价差识别 + 快速执行 + 严格风控 知识体系框架 · 跨交易所套利实战系统

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 套利的风险清单

最后,我列个风险清单。你每次做套利前,对照着看一遍:

  1. 价差消失风险:你看到价差时,别人已经吃掉了。你进去就是接盘侠。
  2. 订单部分成交风险:你下了1000股,结果只成交了200股。剩下的仓位怎么办?
  3. 交易所故障风险:我遇到过NYSE突然宕机,订单卡在里面出不来。那叫一个酸爽。
  4. 监管风险:Reg NMS规定,你不能故意在非最优价格成交。违规会被罚款。
  5. 资金占用风险:套利需要双边资金。你赚1分钱,可能要占用几万美金。年化收益率算下来,可能还不如买国债。

嗯,今天就聊到这儿。套利不是印钞机,它是个精细活。你需要理解市场结构、控制风险、优化执行。后面的章节,我会一步步带你深入每个环节。


专注资料整理