核心原理精讲:一价定律、价差与比价、均值回归特性、统计套利基础
各位同学,欢迎来到跨市场套利的核心地带。
这一章,咱们不聊花架子,直接啃硬骨头。说白了,套利这行当,底层逻辑就那么几条。你把这些原理吃透了,后面的策略代码就是换汤不换药。
一、一价定律:套利的“宪法”
先问个问题:为什么会有套利机会?
答案很简单——因为市场不完美。而套利者,就是市场的“纠错员”。
一价定律是这么说的:同一资产,在同一时间,不同市场上,价格应该相等。如果不相等,就有人能无风险地赚差价。
核心公式:
P市场A = P市场B × 汇率 × (1 + 交易成本)
当等式不成立时,套利窗口打开。
我在2018年做过一个跨境ETF套利项目。当时有个港股ETF,在港交所和纽交所同时交易。按理说价格应该差不多,但实际经常出现0.5%以上的价差。为什么?因为两个市场的交易时间、流动性、投资者情绪都不一样。
嗯,这里要注意:一价定律是理想状态。现实中,交易成本、资金门槛、卖空限制,都会让这个“完美套利”打折扣。
二、价差与比价:套利的“温度计”
光知道一价定律还不够。你得有工具去测量“偏离程度”。
我个人习惯用两个指标:价差和比价。
1. 价差(Spread)
价差就是两个价格直接相减。简单粗暴,但有效。
# 价差计算示例
price_a = 100.50
price_b = 99.80
spread = price_a - price_b
print(f"当前价差: {spread:.2f}") # 输出: 0.70
2. 比价(Ratio)
比价是价格相除。这个指标在跨品种套利中特别有用。
# 比价计算示例
ratio = price_a / price_b
print(f"当前比价: {ratio:.4f}") # 输出: 1.0070
我的经验:
价差适合同品种、同单位的套利(比如两个交易所的黄金期货)。
比价适合不同品种、不同单位的套利(比如大豆和豆粕)。
千万别搞混了,否则你的信号会全是噪音。
三、均值回归特性:套利的“发动机”
你想想看,价差会一直扩大吗?不会。
市场有只“看不见的手”,会把偏离的价格拉回来。这就是均值回归。
说白了,价差就像一根被拉长的橡皮筋。拉得越远,回弹的力越大。
均值回归的数学表达:
dXt = θ(μ - Xt)dt + σdWt
其中:
- Xt:当前价差
- μ:长期均值
- θ:回归速度(越大越快)
- σ:波动率
我曾经踩过一个坑。2019年做螺纹钢和热卷的套利,价差偏离了3个标准差,我满仓杀进去。结果呢?价差继续扩大,差点爆仓。后来复盘才发现,那段时间钢厂在调整产能,基本面变了,均值也跟着变了。
避坑指南:
我曾经以为均值回归是万能的。直到亏了钱才明白:
- 均值不是固定的,它会漂移
- 回归速度不是常数,市场恐慌时回归很慢
- 极端行情下,价差可能永远不回均值(比如2008年雷曼兄弟)
四、统计套利基础:用数据说话
好了,前面都是定性分析。现在咱们来点硬核的——统计套利。
统计套利的核心就一句话:用历史数据找出价差的统计规律,然后赌这个规律会重复。
1. 平稳性检验
做统计套利之前,第一件事就是检查价差是不是平稳的。不平稳的价差,你没法做均值回归。
from statsmodels.tsa.stattools import adfuller
# 假设spread_series是价差时间序列
result = adfuller(spread_series)
p_value = result[1]
if p_value < 0.05:
print("价差平稳,可以做统计套利")
else:
print("价差不平稳,需要差分或换品种")
2. 协整关系
两个不平稳的价格序列,它们的线性组合可能是平稳的。这就是协整。
我个人习惯用Engle-Granger两步法:
import statsmodels.api as sm
# 第一步:回归
X = sm.add_constant(price_b)
model = sm.OLS(price_a, X).fit()
hedge_ratio = model.params[1] # 对冲比率
# 第二步:检验残差平稳性
residuals = price_a - hedge_ratio * price_b
result = adfuller(residuals)
if result[1] < 0.05:
print("存在协整关系,可以构建套利组合")
else:
print("没有协整关系,放弃这个品种对")
3. 交易信号生成
有了平稳的价差,接下来就是生成交易信号。我常用的方法是Z-score:
import numpy as np
def generate_signals(spread, window=20):
mean = np.mean(spread[-window:])
std = np.std(spread[-window:])
z_score = (spread[-1] - mean) / std
if z_score > 2:
return "做空价差" # 卖高价,买低价
elif z_score < -2:
return "做多价差" # 买高价,卖低价
else:
return "观望"
实战小技巧:
别死盯着2倍标准差。我一般会根据品种波动率动态调整阈值。波动率大的品种,阈值设到2.5甚至3;波动率小的,1.5就够了。
还有,记得加止损。统计套利不是无风险套利,它只是“大概率赚钱”。
五、知识体系总览
说了这么多,咱们用一张图把本章的核心逻辑串起来:
这张图把咱们今天讲的内容串起来了。从一价定律出发,用价差和比价去测量偏离,假设它会均值回归,然后用统计方法去验证这个假设。每一步都环环相扣。
本章核心要点:
- 一价定律是套利的理论基础,但现实中有摩擦成本
- 价差和比价是测量市场偏离的基本工具
- 均值回归是套利策略的“信仰”,但要注意均值漂移
- 统计套利需要先检验平稳性和协整关系
- Z-score是生成交易信号的常用方法,阈值要动态调整
好了,这一章的内容就到这里。记住,原理是根基。代码可以复制,但理解这些底层逻辑,才是你以后能独立设计策略的关键。