第十五章:套利策略:跨交易所价差套利、三角套利、延迟套利
套利,说白了就是「捡漏」。
同一个东西,在不同地方卖不同价。或者几个东西之间,价格关系暂时乱了。你眼疾手快,低买高卖,赚个差价。
听起来简单?嗯,做起来全是坑。我在量化这行干了快十年,见过太多人兴冲冲搞套利,结果被手续费和滑点吃得骨头都不剩。
今天咱们就聊聊三种最常见的套利玩法:跨交易所价差套利、三角套利、延迟套利。
15.1 跨交易所价差套利
这是最直观的套利方式。同一个币,在A交易所卖100,在B交易所卖101。你从A买,到B卖,净赚1块。
但现实哪有这么美好?
核心逻辑:同一资产在不同交易所的价格差异,就是你的利润空间。
我刚开始做的时候,以为这就是印钞机。结果第一次实盘,就被上了一课。
15.1.1 价差是怎么产生的?
说白了,就是信息不对称和流动性差异。
- 地域差异:不同国家的交易所,受当地政策、资金进出限制影响,价格天然有差。
- 流动性差异:大交易所深度好,小交易所深度差。大单砸下去,小交易所价格直接崩。
- 时间差:行情剧烈波动时,各交易所的订单簿更新速度不一样。
我记得2020年312暴跌那会儿,比特币在币安和火币之间的价差一度超过5%。如果你有机器跑着套利策略,那一晚上能赚不少。但前提是——你的网络延迟够低,资金够快。
15.1.2 实操中的坑
避坑指南:我曾经因为没算清楚手续费,跑了一个月的套利策略,最后发现是亏的。
手续费是套利的头号杀手。你想想看,价差可能只有0.1%,但交易所吃你0.1%的maker费,再吃0.1%的taker费。一来一回,0.2%没了。价差不够大,就是白忙活。
还有转账时间。跨交易所套利,你得先把币从A转到B。比特币转账确认要10分钟,黄花菜都凉了。所以真正做跨所套利的,用的都是那些转账快的链——比如TRC20的USDT,或者交易所内部转账。
我的建议:做跨所套利,优先选支持「内部转账」的交易所对。比如币安和欧易之间,如果都有TRC20通道,转账秒到。
15.1.3 一个简单的价差监控代码
下面这个代码,我当年用来监控币安和OKX的BTC价差。逻辑很简单,但够用。
import ccxt
import time
def monitor_spread(exchange1, exchange2, symbol, threshold=0.001):
"""
监控两个交易所的价差
threshold: 触发阈值,0.001 = 0.1%
"""
while True:
try:
ticker1 = exchange1.fetch_ticker(symbol)
ticker2 = exchange2.fetch_ticker(symbol)
bid1 = ticker1['bid']
ask2 = ticker2['ask']
# 计算价差百分比
spread = (bid1 - ask2) / ask2
if spread > threshold:
print(f"发现套利机会!价差: {spread*100:.2f}%")
print(f"在 {exchange1.name} 买入: {ask2}")
print(f"在 {exchange2.name} 卖出: {bid1}")
time.sleep(1)
except Exception as e:
print(f"出错了: {e}")
time.sleep(5)
# 初始化交易所
binance = ccxt.binance()
okx = ccxt.okx()
monitor_spread(binance, okx, 'BTC/USDT', threshold=0.002)
这个代码只是监控,没做自动交易。为什么?因为自动交易涉及到资金管理、订单簿深度判断、滑点控制。这些加在一起,才是完整的套利策略。
15.2 三角套利
三角套利,听着玄乎,其实原理很简单。
你有三个币:A、B、C。它们之间有三个交易对:A/B、B/C、C/A。正常情况下,这三个价格应该满足一个关系:A/B × B/C × C/A ≈ 1。
如果不等于1,就说明有套利空间。
核心逻辑:利用三个交易对之间的价格不一致,循环交易一圈,回到起点时发现钱变多了。
15.2.1 三角套利的路径
举个例子。假设你有USDT、BTC、ETH三个币。
| 交易对 | 价格 |
|---|---|
| BTC/USDT | 50000 |
| ETH/BTC | 0.07 |
| ETH/USDT | 3600 |
我们来算一下:
- 用1 USDT买BTC:得到 1/50000 = 0.00002 BTC
- 用0.00002 BTC买ETH:得到 0.00002/0.07 = 0.0002857 ETH
- 用0.0002857 ETH买USDT:得到 0.0002857 × 3600 = 1.0285 USDT
你看,1 USDT转了一圈,变成了1.0285 USDT。净赚2.85%。
为什么会这样?因为ETH/USDT的价格被低估了,或者BTC/USDT的价格被高估了。总之,三个价格之间出现了不一致。
15.2.2 三角套利的难点
说实话,三角套利现在很难做。为什么?
- 机会转瞬即逝:市场上的做市商和量化基金都在盯着,价差出现不到几毫秒就被吃掉了。
- 手续费三重叠加:你要做三笔交易,手续费是三次。如果每笔收0.1%,三次就是0.3%。利润不够的话,就是亏。
- 滑点问题:你算好的价格,等你下单时可能已经变了。尤其是小币种,深度差,滑点大。
我曾经踩过的坑:有一次我算出一个三角套利机会,利润大概0.5%。我兴冲冲地下了第一笔单,结果第二笔单成交时价格已经变了。最后三笔全做完,反而亏了0.2%。
15.2.3 三角套利的代码实现
下面是一个三角套利的检测逻辑。注意,这只是检测,不是执行。
def detect_triangle_arbitrage(exchange, base_currency, quote_currency, intermediate_currency):
"""
检测三角套利机会
"""
# 获取三个交易对的价格
pair1 = f"{base_currency}/{quote_currency}" # 比如 BTC/USDT
pair2 = f"{intermediate_currency}/{base_currency}" # 比如 ETH/BTC
pair3 = f"{intermediate_currency}/{quote_currency}" # 比如 ETH/USDT
ticker1 = exchange.fetch_ticker(pair1)
ticker2 = exchange.fetch_ticker(pair2)
ticker3 = exchange.fetch_ticker(pair3)
# 计算循环套利比率
# 路径: USDT -> BTC -> ETH -> USDT
rate = (1 / ticker1['ask']) * (1 / ticker2['ask']) * ticker3['bid']
if rate > 1.002: # 0.2% 以上才考虑
print(f"发现正向套利机会!比率: {rate}")
print(f"路径: {quote_currency} -> {base_currency} -> {intermediate_currency} -> {quote_currency}")
# 反向路径
reverse_rate = ticker1['bid'] * ticker2['bid'] * (1 / ticker3['ask'])
if reverse_rate > 1.002:
print(f"发现反向套利机会!比率: {reverse_rate}")
return rate, reverse_rate
15.3 延迟套利
延迟套利,说白了就是「吃时间差」。
不同交易所的订单簿更新速度不一样。有的快,有的慢。如果你能比市场快一步,就能在价格还没同步之前下单。
核心逻辑:利用交易所之间的信息传播延迟,抢先交易。
15.3.1 延迟套利的两种形式
第一种:跨交易所延迟套利
比如,币安上BTC突然涨了1%。但OKX的订单簿还没更新。你可以在OKX上以旧价格买入,然后在币安上以新价格卖出。
这种套利,拼的是网络延迟。你的服务器离交易所越近,你的光纤越直连,你的优势越大。
第二种:衍生品与现货的延迟套利
期货价格和现货价格之间,理论上应该有一个合理价差(基差)。但有时候,期货价格会先动,现货还没跟上。这时候你可以做多现货、做空期货,等基差回归。
我的经验:延迟套利对硬件要求极高。我见过有人直接把服务器托管在交易所的机房里,延迟能压到微秒级。普通人别想了,老老实实做价差套利吧。
15.3.2 延迟套利的风险
- 网络延迟:你以为是延迟,其实是你的网络慢。等你看到机会,别人已经吃完了。
- 回滚风险:有些交易所会出现「交易回滚」,你买到了,但交易所说这笔交易无效。那你已经卖出的单怎么办?
- 资金占用:延迟套利通常需要你在两个交易所都有资金。资金分散了,机会来了你也不一定够用。
避坑指南:我曾经做过一个延迟套利策略,跑了一个月,收益曲线很漂亮。结果有一天交易所升级系统,延迟突然变了,策略直接亏了20%。从那以后,我每次上线新策略都会加一个「延迟自适应」模块。
15.4 三种套利策略的对比
| 策略类型 | 核心依赖 | 难度 | 收益潜力 | 主要风险 |
|---|---|---|---|---|
| 跨交易所价差套利 | 价差监控、转账速度 | 中等 | 中等 | 手续费、转账延迟 |
| 三角套利 | 价格关系计算、多笔订单 | 高 | 低(机会少) | 滑点、手续费三重叠加 |
| 延迟套利 | 网络延迟、硬件配置 | 极高 | 高(但门槛高) | 网络波动、交易所回滚 |
15.5 套利策略的核心框架
下面这张图,是我自己总结的套利策略设计框架。每次做新策略,我都会先过一遍这个流程。
这个框架,说白了就是一套「发现机会 → 评估风险 → 执行 → 复盘」的闭环。我每次做新策略,都会先画一遍这个图,看看哪个环节可能出问题。
15.6 最后说几句
套利策略,听起来很美,做起来很难。
我见过太多人,一开始觉得套利是无风险收益。结果呢?手续费、滑点、延迟、交易所故障……任何一个环节出问题,都可能让你从盈利变成亏损。
我个人建议,新手先从跨交易所价差套利开始。选两个流动性好的交易所,监控价差,手动交易。等跑通了,再考虑自动化。
记住一句话:套利不是印钞机,而是精细活。你赚的每一分钱,都是对市场效率的「修复」。市场越有效,套利空间越小。你能做的,就是比别人更快、更稳、更聪明。