一、套利交易基础:什么是套利?

说实话,我做了这么多年量化交易,被问得最多的问题就是——「套利到底是个啥?」

很多人一听到「套利」两个字,脑子里就浮现出电影里那种疯狂敲键盘、屏幕上数字乱跳的画面。其实没那么玄乎。

套利,说白了就是「捡钱」。

同一个东西,在两个地方卖不同的价格。你从便宜的地方买,到贵的地方卖,中间的差价就是你的利润。这就是套利的本质。

嗯,这里要注意——真正的套利是无风险的。或者说,理论上应该是无风险的。

核心定义:套利是指利用同一资产在不同市场、不同时间或不同形式之间的价格差异,通过同时买入和卖出操作,获取无风险收益的交易策略。

1.1 套利的数学本质

我个人习惯把套利拆成数学公式来看。这样更清楚,也更方便写代码实现。

假设有两个市场 A 和 B,同一个资产的价格分别是 P_A 和 P_B。

套利条件就是:

|P_A - P_B| > C

其中 C 是交易成本(手续费、滑点、冲击成本等)。

当这个不等式成立时,就存在套利机会。

套利利润的计算公式:

利润 = |P_A - P_B| - C

如果利润 > 0,就可以动手了。

我在项目中遇到过不少新手,看到价格差就兴奋地冲进去,结果忘了算手续费。最后发现忙活半天,利润全给交易所打工了。

我的经验:套利交易的核心不是「发现差价」,而是「扣除成本后还有差价」。成本控制是套利策略的生命线。

1.2 套利的核心逻辑

套利听起来简单,但背后的逻辑其实挺深的。我总结了三句话:

  1. 价格发现机制失效——市场暂时「犯错了」
  2. 均值回归——价格最终会回到合理区间
  3. 市场效率提升——套利行为本身在修复价格偏差

你想想看,如果所有市场都是完全有效的,那就不存在套利机会了。但现实是,市场经常「走神」。

比如,同一只股票在 A 股和港股同时上市,价格按理说应该差不多。但因为两个市场的投资者结构不同、交易时间不同、汇率波动等因素,价格经常出现偏差。

这就是套利者的机会。

1.3 套利的三种基本形态

根据我的经验,套利可以分成三大类。每一类的逻辑和操作方式都不一样。

套利类型 核心逻辑 典型场景 风险来源
空间套利 同一资产在不同市场的价差 跨交易所套利、跨境套利 交易延迟、流动性不足
时间套利 同一资产在不同时间的价差 期现套利、跨期套利 持仓成本、基差风险
统计套利 相关资产之间的价差回归 配对交易、ETF套利 相关性突变、模型失效

空间套利是最直观的。比如比特币在币安卖 50000 美元,在 OKX 卖 50050 美元。你在币安买,在 OKX 卖,净赚 50 美元(扣除手续费后)。

但说实话,这种机会现在越来越少了。高频交易和做市商把价差压得很低。

时间套利稍微复杂一点。比如期货和现货之间的价差。期货价格按理说应该等于现货价格加上持仓成本。如果偏差太大,就存在套利空间。

我曾经做过一个期现套利的策略,回测效果特别好。结果实盘第一天就遇到了交割日效应,差点翻车。嗯,这个坑后面会详细讲。

统计套利是我个人最喜欢的。它不依赖绝对价格的偏差,而是看两个相关资产之间的相对关系。

比如茅台和五粮液,历史上它们的价格走势高度相关。如果某天茅台涨了 5%,五粮液只涨了 1%,那这个价差大概率会回归。你就可以做多五粮液、做空茅台,赚回归的钱。

避坑指南:统计套利最大的风险是「相关性突变」。我曾经在 2020 年 3 月做过一个配对交易策略,两个资产的历史相关性高达 0.95。结果疫情一来,相关性直接变成负的,一天亏了 8%。从那以后,我每次做统计套利都会加上「相关性监控」和「止损线」。

1.4 套利的数学建模框架

做量化的人,不能光靠感觉。我们需要一个数学框架来量化套利机会。

我个人习惯用以下步骤:

  1. 定义价差:S = P_A - P_B(或者用对数价差)
  2. 检验平稳性:用 ADF 检验判断价差是否均值回归
  3. 设定阈值:通常用均值 ± k × 标准差
  4. 生成信号:价差超过上阈值 → 做空价差;低于下阈值 → 做多价差
  5. 风险控制:设置止损、仓位管理、最大回撤限制

代码实现大概是这样的:

import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller

def detect_arbitrage_opportunity(price_a, price_b, window=20, z_threshold=2):
    """
    检测套利机会
    price_a, price_b: 两个资产的价格序列
    window: 滚动窗口
    z_threshold: 触发交易的 Z-score 阈值
    """
    spread = price_a - price_b
    
    # 计算滚动均值和标准差
    mean = spread.rolling(window).mean()
    std = spread.rolling(window).std()
    
    # 计算 Z-score
    z_score = (spread - mean) / std
    
    # 生成信号
    signals = pd.Series(0, index=price_a.index)
    signals[z_score > z_threshold] = -1  # 做空价差
    signals[z_score < -z_threshold] = 1  # 做多价差
    
    return signals, z_score

小技巧:实际交易中,我一般会把 z_threshold 设成 2.5 或 3,而不是 2。因为 2 个标准差以内的波动太常见了,频繁交易只会增加手续费。记住,套利不是做高频,是做确定性。

1.5 套利策略的知识体系

下面这张图是我自己整理的套利策略知识体系。每次做新策略前,我都会对照着过一遍,确保没有遗漏。

套利策略知识体系 套利交易核心 空间套利 时间套利 统计套利 跨交易所套利 跨境套利 ETF套利 期现套利 跨期套利 日历套利 配对交易 协整套利 均值回归 风险控制模块 止损机制 仓位管理 相关性监控

1.6 套利交易的核心原则

最后,我想分享几条我这些年总结出来的原则。算不上什么金科玉律,但确实帮我避了不少坑。

  • 不要追求完美——套利机会转瞬即逝,等你想清楚再动手,黄花菜都凉了
  • 成本是第一位的——手续费、滑点、冲击成本,每一项都能吃掉你的利润
  • 流动性是生命线——再好的套利机会,没有流动性就是纸上谈兵
  • 风险永远存在——所谓的「无风险套利」只是理论上的,现实中总有意外
  • 回测不可全信——我见过太多回测漂亮、实盘翻车的策略了。回测只是起点,不是终点

一句话总结:套利交易的本质不是「发现机会」,而是「管理风险」。你赚的每一分钱,都是你承担了别人不愿意承担的风险换来的。

好了,第一章就到这里。套利的基础概念和核心逻辑,我觉得已经讲得比较清楚了。下一章我们会深入聊套利策略的具体实现和回测框架搭建。


专注资料整理