一、套利基础:什么是套利?套利的数学本质与核心逻辑
大家好,我是你们的讲师。今天咱们聊聊套利。
很多人一听到「套利」,脑子里就浮现出高频交易、量化大鳄、几毫秒赚几百万的画面。说实话,我刚入行时也这么想。但做了十几年交易后,我越来越觉得——套利没那么玄乎,它本质上就是一个数学问题。
1.1 套利的定义:一句话说清楚
套利,说白了就是同一资产在不同市场、不同时间、不同形态下,价格出现不一致,你低买高卖,赚取无风险(或低风险)差价的行为。
举个例子:
- 苹果在A市场卖5元,在B市场卖6元。你从A买,到B卖,赚1元差价。这就是最简单的套利。
- 但现实中哪有这么简单?交易成本、滑点、资金占用、流动性……都会吃掉你的利润。
嗯,这里要注意:真正的套利机会,往往转瞬即逝。我在2015年做过一次跨期套利,就因为网络延迟慢了0.3秒,眼睁睁看着利润从+2%变成-1%。
核心要点:套利的本质是「价格发现」的纠偏机制。市场越有效,套利机会越少;但市场永远不可能完全有效,所以套利永远存在。
1.2 套利的数学本质:无风险收益的数学表达
你可能会问:套利到底怎么用数学描述?
我个人习惯用这个公式来理解:
套利收益 = |P₁ - P₂| - C - S - L
其中:
- P₁、P₂:两个市场/合约的价格
- C:交易成本(手续费、印花税等)
- S:滑点成本(实际成交价与预期价的偏差)
- L:资金占用成本(机会成本)
只有当这个值 大于0,才存在真正的套利空间。
我再给你一个更严谨的数学定义——无套利条件:
如果存在一个投资组合,满足:
1. 初始成本 ≤ 0(不花钱甚至还能收钱)
2. 未来所有状态下,收益 ≥ 0
3. 至少有一个状态下,收益 > 0
则存在套利机会。
这个定义来自金融数学的「套利定价理论」。说白了就是:空手套白狼,还保证不亏。
我的经验:实际交易中,完全满足「无风险」的套利几乎不存在。我做过最接近的一次是2018年的ETF折溢价套利,但即使那样,也面临了0.02%的跟踪误差风险。所以,我们通常追求的是「统计套利」——大概率赚钱,小概率亏钱。
1.3 套利的核心逻辑:三个关键要素
搞懂了定义和数学本质,咱们来看看套利的核心逻辑。我把它总结为三个要素:
- 价格偏离:同一资产在不同市场/时间/形态下出现价差
- 收敛机制:价差最终会回归到合理范围(均值回归)
- 执行效率:你能在价差消失前完成交易
你想想看,这三个要素缺一不可。价格偏离是机会,收敛机制是逻辑基础,执行效率是你能不能吃到肉的关键。
我曾经犯过一个错:2016年做跨品种套利,发现螺纹钢和热卷的价差偏离了历史均值3个标准差,觉得机会来了。结果呢?价差不仅没回归,反而继续扩大了5个标准差。为什么?因为当时供给侧改革政策变了,基本面逻辑变了,历史均值失效了。
避坑指南:套利不是无脑做均值回归。一定要搞清楚「价差为什么偏离」——是暂时的市场情绪?还是根本性的基本面变化?如果是后者,套利就是接飞刀。
1.4 套利的分类:一张图看懂
为了让你更直观地理解,我画了一张套利分类的框架图:
1.5 一个简单的Python示例:检测套利机会
光说不练假把式。我给你写一段简单的Python代码,用来检测两个高度相关资产之间的套利机会:
import numpy as np
import pandas as pd
import yfinance as yf
# 获取两只股票的历史数据
def get_spread(ticker1, ticker2, start='2023-01-01', end='2024-01-01'):
df1 = yf.download(ticker1, start=start, end=end)['Close']
df2 = yf.download(ticker2, start=start, end=end)['Close']
# 合并数据
df = pd.DataFrame({'A': df1, 'B': df2}).dropna()
# 计算价差(标准化后)
df['spread'] = df['A'] / df['A'].iloc[0] - df['B'] / df['B'].iloc[0]
# 计算均值和标准差
mean = df['spread'].mean()
std = df['spread'].std()
# 检测套利信号:价差偏离均值2个标准差
df['signal'] = 0
df.loc[df['spread'] > mean + 2*std, 'signal'] = -1 # 做空价差
df.loc[df['spread'] < mean - 2*std, 'signal'] = 1 # 做多价差
return df
# 示例:检测XOM和CVX的套利机会
df = get_spread('XOM', 'CVX')
print(f"套利信号次数: {df['signal'].abs().sum()}")
print(f"最近一次信号: {df['signal'].iloc[-1]}")
我的建议:这段代码只是演示逻辑。实际生产中,你还需要考虑交易成本、滑点、持仓周期、资金管理等因素。我一般会在信号触发后,再等一个确认K线才入场,能有效减少假信号。
1.6 套利的风险:你以为的无风险,其实都有风险
最后,我必须泼一盆冷水。很多人觉得套利就是「捡钱」,但我在这个行业摸爬滚打这么多年,见过太多套利翻车的案例。
常见的套利风险包括:
- 执行风险:你看到价差,但下单时已经没了
- 流动性风险:你想平仓,但对手盘跑了
- 模型风险:你的统计模型假设错了
- 黑天鹅风险:极端行情下,所有相关性都失效
我曾经在2019年做国债期货套利,模型跑得好好的,突然有一天国债期货跌停,价差瞬间扩大5倍。为什么?因为那天央行意外降息,市场预期完全变了。那次我亏了7位数,但学到了最重要的一课:永远不要以为套利是无风险的。
重要提醒:套利的核心不是「无风险」,而是「风险可控」。你要做的,是找到那些风险收益比对你有利的机会,然后用仓位管理去控制尾部风险。
好了,这一章的内容就到这里。套利的基础概念、数学本质、核心逻辑,以及一个简单的代码示例,我都给你讲清楚了。下一章,咱们会深入讲统计套利中的配对交易策略,到时候我会手把手带你构建一个完整的配对交易系统。
公众号:蓝海资料掘金营,微信deep3321