一、套利基础:跨交易所套利的本质
大家好,我是你们的讲师。今天咱们聊聊跨交易所套利——这个听起来高大上,其实核心逻辑特别朴素的东西。
说白了,套利就是「低买高卖」。只不过咱们不是在同一个市场里做,而是在不同的交易所之间倒腾。比如比特币在币安卖 50000 USDT,在 OKX 卖 50050 USDT,你从币安买,到 OKX 卖,中间这 50 块差价就是利润。
嗯,道理很简单。但真正落地的时候,坑多到你怀疑人生。我刚开始做套利那会儿,就吃过不少亏,后面慢慢总结出一些经验,今天全部分享给你们。
1.1 什么是跨交易所套利
跨交易所套利,指的是利用同一资产在不同交易所之间的价格差异,通过同时买入和卖出操作,赚取无风险或低风险收益的策略。
你可能会问:为什么同一个东西,在不同交易所价格会不一样?
原因其实很多:
- 流动性差异:大交易所深度好,小交易所深度差,价格自然有偏差
- 地域因素:不同国家的用户群体、监管政策不同,导致供需不平衡
- 信息传递延迟:重大消息出来后,各交易所的反应速度不一样
- 交易对设计:有的交易所支持 USDT 交易对,有的支持 BTC 交易对,折算下来会有价差
我在项目中遇到过最夸张的一次,某个山寨币在两个交易所之间的价差达到了 8%。当时我手速够快,几分钟就吃到了利润。但这种机会可遇不可求,大部分时候价差只有 0.1% 到 0.5%。
1.2 套利类型:空间套利 vs 时间套利
套利按维度分,主要有两大类。我习惯把它们叫做「空间套利」和「时间套利」。
空间套利(也叫跨市场套利)
这是最经典、最直观的套利方式。同一时间点,在不同交易所之间倒腾。
举个例子:
# 伪代码示意:空间套利逻辑
def space_arbitrage():
price_a = get_price("binance", "BTC/USDT")
price_b = get_price("okx", "BTC/USDT")
if price_a < price_b - threshold:
# 在币安买入,在 OKX 卖出
buy("binance", "BTC", amount)
sell("okx", "BTC", amount)
profit = (price_b - price_a) * amount - fees
elif price_b < price_a - threshold:
# 反向操作
buy("okx", "BTC", amount)
sell("binance", "BTC", amount)
空间套利的关键在于「同时」。你必须在两个交易所几乎同一时刻完成买卖操作,否则价差可能瞬间消失。我曾经因为网络延迟,买入后还没来得及卖出,价差就没了,结果还倒贴手续费。嗯,那感觉挺酸爽的。
时间套利(也叫跨期套利)
时间套利玩的是「时间差」。比如同一个资产在不同时间点的价格差异,或者现货和期货之间的价差。
常见的场景:
- 期现套利:买入现货,同时做空期货,赚取基差
- 资金费率套利:利用永续合约的资金费率机制,在多头和空头之间切换
- 交割日套利:利用期货合约临近交割时的价格收敛特性
时间套利比空间套利复杂一些,因为它涉及时间维度的预测。但好处是,时间套利的窗口期通常更长,对延迟的要求没那么苛刻。
核心区别一句话总结:
空间套利赚的是「不同地方的价格差」,时间套利赚的是「不同时间的价格差」。
1.3 套利核心三要素:价差、延迟、容量
做套利这么多年,我总结出三个核心要素。不管你用什么策略,最终都要围绕这三个点来设计系统。
| 要素 | 定义 | 影响 | 我的经验 |
|---|---|---|---|
| 价差 | 两个交易所之间的价格差异 | 决定利润空间 | 价差太小,扣除手续费后基本没利润 |
| 延迟 | 从发现机会到完成操作的时间 | 决定能否吃到利润 | 延迟每增加 10ms,成功率下降 30% |
| 容量 | 市场能容纳的交易量 | 决定能赚多少钱 | 容量不够,大资金进去直接砸穿价差 |
价差:利润的源泉
价差是套利的基础。没有价差,一切都是空谈。
但价差不是越大越好。为什么?因为大价差往往意味着:
- 流动性差(你买进去可能出不来)
- 网络延迟高(服务器在海外)
- 交易对冷门(深度不够)
我一般会设置一个「最小价差阈值」。比如 0.2%,低于这个值就不做。因为扣除手续费、滑点、网络延迟后,实际利润可能为负。
避坑指南:
我曾经为了抢一个 0.05% 的价差,结果因为滑点太大,最终亏损了 0.1%。从那以后,我给自己定了个规矩:价差至少覆盖手续费的两倍,才值得出手。
延迟:套利的生死线
延迟是套利系统最核心的指标。你想想看,价差可能只存在几百毫秒,甚至几十毫秒。如果你的系统延迟太高,等你发现机会、下单、成交,价差早就没了。
延迟的来源主要有:
- 网络延迟:你的服务器到交易所服务器的物理距离
- 交易所处理延迟:交易所的撮合引擎处理订单的速度
- 系统内部延迟:你的代码执行、数据解析、策略计算的时间
我个人的经验是:
- 服务器尽量托管在交易所附近的数据中心(比如 AWS 东京区域做日本交易所)
- 使用 WebSocket 而不是 REST API(减少轮询延迟)
- 代码用 C++ 或 Rust 写核心逻辑(Python 做策略层,底层用高性能语言)
# 延迟优化示例:使用 asyncio 实现异步 WebSocket
import asyncio
import websockets
async def listen_orderbook(exchange, symbol):
async with websockets.connect(f"wss://{exchange}.com/ws") as ws:
await ws.send(json.dumps({
"type": "subscribe",
"channel": "orderbook",
"symbol": symbol
}))
while True:
data = await ws.recv()
# 处理数据,延迟通常在 1-5ms
process_orderbook(data)
警告:
不要低估网络延迟的影响。我曾经在本地跑套利程序,结果发现每次都比别人慢 200ms。后来把服务器迁到交易所同机房,延迟降到了 2ms。这 198ms 的差距,就是赚钱和亏钱的区别。
容量:能赚多少钱
容量决定了你的套利策略能承载多大的资金量。
举个例子:某个价差机会,交易所 A 的买单深度只有 0.5 BTC,交易所 B 的卖单深度也只有 0.5 BTC。那你最多只能做 0.5 BTC 的套利。如果你拿 10 BTC 往里冲,直接就把价差打没了,甚至可能亏钱。
容量评估的几个维度:
- 订单簿深度:看买卖盘口的挂单量
- 滑点预估:大单进场会导致价格偏移
- 交易所限频:API 调用频率限制,影响下单速度
我一般会先做「容量测试」:用小资金跑一段时间,观察滑点和成交情况,然后逐步放大资金量。切忌一上来就重仓,很容易翻车。
1.4 知识体系总览
下面这张图是我自己画的,把套利的基础知识串起来了。你们可以保存下来,后面学完整个课程再回来看,会有更深的理解。
这张图把套利的基础知识串起来了。你可以看到,套利类型和核心三要素是两条主线,最终都指向策略设计。后面几章我们会逐一深入每个细节。
本章核心要点:
- 跨交易所套利是利用不同交易所之间的价格差异获利
- 空间套利拼速度,时间套利拼预测
- 价差、延迟、容量是套利系统的三大命门
- 延迟优化是套利系统成败的关键
好了,这一章就到这里。记住这三个要素,后面所有的技术方案都是围绕它们展开的。下一章我们聊聊套利系统的整体架构设计,到时候我会把我在生产环境中踩过的坑一一讲给你们听。