加密统计套利 — 配对交易与均值回归
统计套利利用价格暂时偏离均衡的机会。当两个通常同步波动的资产出现偏离时,统计套利交易者买入表现不佳的资产并做空表现优异的资产,押注于两者重新收敛。在加密领域,这种方法尤其有效,因为资产之间存在相关性但并不完全一致,从而创造了盈利机会。
示例: BTC 和 ETH 的相关性为 0.85。当 ETH 在 1 小时内表现落后 BTC 3%(异常情况),统计套利交易者做空 BTC 并做多 ETH。历史上,它们会在 4-8 小时内重新收敛,锁定约 1-1.5% 的利润。
配对交易基础
选择配对
并非所有配对都有效。你需要:
- 高相关性: >0.8(使用皮尔逊相关系数)
- 经济关系: Layer 2 与 L1,稳定币之间
- 足够的交易量: 两个配对都必须具有流动性
- 协整: 存在长期均衡(使用 Johansen 检验)
Python — 配对选择
import pandas as pd
from scipy.stats import pearsonr
def find_cointegrated_pairs(symbols, data):
candidates = []
for i, sym1 in enumerate(symbols):
for sym2 in symbols[i+1:]:
# 计算相关性
corr, p_value = pearsonr(data[sym1], data[sym2])
if corr > 0.75:
# 检验协整性(Engle-Granger 检验)
residuals = data[sym1] - (data[sym2] * corr)
adf_stat = adf_test(residuals) # 平稳性
if adf_stat < 0.05: # 平稳
candidates.append((sym1, sym2, corr))
return candidates
协整分析
什么是协整?
如果两个非平稳序列的线性组合是平稳的,则它们是协整的。简单来说:它们随时间一起波动,偏离这种关系的偏差最终会回归。
对于 BTC 和 ETH:
- BTC 价格:$42,000(非平稳 — 趋势上升/下降)
- ETH 价格:$2,300(非平稳 — 趋势上升/下降)
- 价差:BTC - (18 × ETH) = $40(平稳 — 围绕均值波动)
寻找对冲比率
使用普通最小二乘回归找到最优比率:
Python — 对冲比率计算
from sklearn.linear_model import LinearRegression
def get_hedge_ratio(price1, price2):
# 回归 price1 对 price2 以找到 beta(对冲比率)
X = price2.reshape(-1, 1)
y = price1
model = LinearRegression().fit(X, y)
hedge_ratio = model.coef_[0]
intercept = model.intercept_
return hedge_ratio, intercept
# 价差 = price1 - (hedge_ratio × price2) + intercept
beta, alpha = get_hedge_ratio(btc_prices, eth_prices)
spread = btc - (beta * eth)
均值回归策略
使用 Z 分数
标准化价差以检测极端值。当 z 分数 > 2 时,价差异常宽(交易机会):
Python — 均值回归交易
def mean_reversion_signal(spread, lookback=20):
# 计算滚动均值和标准差
mean = spread.rolling(window=lookback).mean()
std = spread.rolling(window=lookback).std()
# Z 分数:距离均值多少个标准差
z_score = (spread - mean) / std
# 交易信号
if z_score[-1] > 2.0:
return "LONG_SPREAD" # 价差过宽,买入表现不佳者
elif z_score[-1] < -2.0:
return "SHORT_SPREAD" # 价差过窄,做空表现不佳者
else:
return "NEUTRAL"
退出规则
当价差回归均值(z 分数 → 0)或达到损失阈值(在 z 分数反转时止损)时平仓:
Python — 退出逻辑
def check_exit(entry_z_score, current_z_score, entry_price):
# 止盈:价差收敛至均值的一半
if abs(current_z_score) < abs(entry_z_score) * 0.5:
return "退出", "止盈目标"
# 止损条件:z分数向错误方向移动超过1
如果 (入场_z分数 > 0 且 当前_z分数 < 入场_z分数 + 1.0):
返回 "退出", "止损"
否则如果 (入场_z分数 < 0 且 当前_z分数 > 入场_z分数 - 1.0):
返回 "退出", "止损"
返回 "持有", 无
统计套利策略回测
统计套利关键指标:
- 胜率: >55%(持续捕捉均值回归)
- 平均盈亏比: >1.2(盈利覆盖亏损)
- 夏普比率: >0.8(单位风险收益)
- 最大回撤: <-15%(系统保持安全)
Python — 配对策略回测
定义 回测配对策略(价格1, 价格2, 对冲比率):
价差 = 价格1 - (对冲比率 * 价格2)
均值 = 价差.滚动(20).均值()
标准差 = 价差.滚动(20).标准差()
z分数 = (价差 - 均值) / 标准差
交易记录 = []
持仓 = 无
对于 i 在 范围(len(z分数)):
如果 持仓 是 无:
如果 z分数[i] > 2.0:
持仓 = {"入场": 价差[i], "z_入场": z分数[i], "索引": i}
否则:
退出原因 = 检查退出(持仓["z_入场"], z分数[i], 价差[i])[1]
如果 退出原因:
盈亏 = 持仓["入场"] - 价差[i]
交易记录.append({"盈亏": 盈亏, "原因": 退出原因})
持仓 = 无
返回 pd.DataFrame(交易记录)
添加聪明钱信号
通过聪明钱确认过滤交易以增强配对交易:
Python — 过滤配对策略
定义 聪明钱配对策略(标的1, 标的2, z分数):
# 检查配对级别的聪明钱确认
聪明钱信号1 = 获取聪明钱信号(标的1)
聪明钱信号2 = 获取聪明钱信号(标的2)
# 若一方为高度看涨另一方为高度看跌 = 强背离
# 此时交易价差的最佳时机
背离分数 = abs(聪明钱信号1["综合"] - 聪明钱信号2["综合"])
如果 z分数 > 2.0 且 背离分数 > 0.3 且 聪明钱信号1["置信度"] != "否决":
返回 "交易" # 高置信度信号
否则:
返回 "跳过" # 等待信号一致