1. 套利基础:跨交易所套利的底层逻辑
做量化这些年,我见过太多人一上来就问我:「老师,跨交易所套利是不是就是低买高卖?」
嗯,这么说也没错。但你要是真这么想,那离亏钱也就不远了。
今天咱们就把这个「套利」的底裤扒干净。从数学本质到实战识别,我会把我在项目中踩过的坑、总结的经验,一次性讲透。
1.1 什么是跨交易所套利
说白了,就是同一个资产,在不同交易所卖不同的价。
你在A交易所低价买入,在B交易所高价卖出,中间的差价就是利润。
举个例子:
比特币在币安报价 30000 USDT,在 OKX 报价 30050 USDT。
你从币安买,去 OKX 卖,每枚赚 50 USDT。
听起来简单?
但这里有个关键问题——你得同时操作。不然等你买完,那边的价格可能已经变了。
1.2 套利的数学本质
我个人习惯把套利拆解成一个数学公式:
套利利润 = |P_A - P_B| - 交易成本 - 滑点 - 资金费率
其中:
- P_A、P_B:两个交易所的实时价格
- 交易成本:手续费、提币费、网络 gas 费
- 滑点:你的订单对市场价格的冲击
- 资金费率:如果你用了杠杆或永续合约
你想想看,如果这个公式算出来是负数,那这笔「套利」就是亏钱的。
我在项目中遇到过不少新手,看到价差 0.5% 就冲进去,结果手续费吃掉 0.3%,滑点吃掉 0.3%,最后倒亏 0.1%。
1.3 套利机会的识别
怎么发现套利机会?
我一般用三种方法:
方法一:价差监控
实时监控两个交易所的价差。当价差超过阈值时,触发信号。
# 伪代码示例
def check_arbitrage(exchange_a, exchange_b, threshold=0.002):
price_a = exchange_a.get_ticker('BTC/USDT')
price_b = exchange_b.get_ticker('BTC/USDT')
spread = abs(price_a - price_b) / min(price_a, price_b)
if spread > threshold:
print(f"发现套利机会!价差: {spread:.4%}")
# 执行套利逻辑
else:
print(f"价差正常: {spread:.4%}")
方法二:统计套利
不是所有价差都值得做。你得看历史数据——当前价差处于什么分位?
我习惯用 z-score 来判断:
z = (当前价差 - 历史均值) / 历史标准差
if abs(z) > 2:
# 价差偏离超过2个标准差,机会来了
方法三:事件驱动
有些套利机会是「等」出来的。比如:
- 交易所维护前后,价差会剧烈波动
- 大额转账导致某个交易所流动性骤降
- 政策消息发布,不同交易所反应速度不同
1.4 套利策略的风险收益特征
很多人觉得套利是「无风险」的。我告诉你,这是最大的误解。
套利策略的风险收益特征,我用一张表来说明:
| 风险类型 | 描述 | 影响程度 |
|---|---|---|
| 执行风险 | 你的买单成交了,卖单没成交 | 高 |
| 价差风险 | 在你操作过程中,价差消失了 | 中 |
| 网络延迟 | 你的网络比对手慢,抢不到机会 | 高 |
| 交易所风险 | 交易所宕机、提币暂停 | 极高 |
| 资金费率 | 永续合约的持仓成本 | 低-中 |
收益特征呢?
套利策略的收益曲线,通常是一条「缓慢上升、偶尔暴跌」的线。
为什么?因为大部分时间你都在赚小钱,但一旦遇到黑天鹅(比如交易所宕机),一次就能亏掉三个月的利润。
1.5 知识体系总览
下面这张图,是我自己梳理的套利知识框架。你看完这一章,应该对整个体系有个全局认识:
这张图把套利的四个核心维度串起来了。你记住一句话就行:
套利不是无风险,而是「可控风险下的确定性收益」。