1. 统计套利基础:什么是统计套利?它与无风险套利的区别

大家好,我是你们的老朋友。今天咱们聊聊统计套利。

说实话,我刚入行那会儿,听到「套利」两个字,第一反应就是「稳赚不赔」。后来真金白银砸进去,才发现事情没那么简单。

统计套利,说白了就是靠概率赚钱。它不是100%确定的事,而是「大概率会回归」的赌注。我习惯把它比作钓鱼——你知道鱼迟早会上钩,但具体哪一秒咬钩,没人说得准。

1.1 什么是统计套利?

先给个定义:统计套利是利用统计模型,寻找资产价格之间暂时偏离的规律,然后押注它们会回归正常关系。

举个例子。我做过一个经典的配对交易:可口可乐 vs 百事可乐。这两家公司业务高度相似,股价走势长期同步。但偶尔,比如某天百事出了个利好消息,股价猛涨,可口可乐没跟上。这时候,两者的价差就拉大了。

我的做法是:做空涨太多的百事,做多没跟上的可口可乐。等它们价差回归正常,两边平仓,赚差价。

你看,这里没有「确定」二字。万一百事继续涨,可口可乐继续跌呢?有可能。但统计上,这种偏离大概率会修复。我们赌的就是这个「大概率」。

核心要点:统计套利不是无风险,而是「风险可控」的套利。它依赖历史数据和统计规律,不是靠信息不对称或市场漏洞。

1.2 统计套利 vs 无风险套利

这两者的区别,我经常用一个比喻来解释:

  • 无风险套利:好比你在A市场花1块钱买苹果,同时在B市场2块钱卖掉。差价1块钱,稳赚。只要你能同时交易,没有滑点,这就是确定的利润。
  • 统计套利:好比你觉得苹果和梨的价格比长期是1:2。今天苹果1块,梨3块,你觉得梨贵了,于是买苹果、卖梨。但梨可能继续涨到4块,你亏钱。你赌的是「回归」,不是「确定」。

我整理了一个表格,方便大家对比:

对比维度 无风险套利 统计套利
确定性 100%确定 概率性(通常60%-80%)
风险来源 执行风险(滑点、延迟) 模型风险、市场风险
持仓时间 极短(秒级到分钟级) 较长(小时级到天级)
资金容量 通常较小 可以很大
典型例子 跨交易所价差、ETF套利 配对交易、均值回归

嗯,这里要注意:无风险套利在现实中几乎不存在。为什么?因为交易成本、滑点、延迟,这些都会吃掉利润。我见过太多人以为自己在做无风险套利,结果亏得底裤都不剩。

1.3 统计套利的底层逻辑

统计套利能成立,靠的是三个核心假设:

  1. 价格存在长期均衡关系:比如两只同行业股票,长期走势高度相关。
  2. 短期偏离会均值回归:偏离不会永远持续,迟早会回来。
  3. 历史规律在未来依然有效:这是最大的假设,也是最容易翻车的地方。

我曾经踩过一个坑。2018年,我用一个统计套利模型做原油相关品种的配对交易。历史回测漂亮得很,年化收益30%+,最大回撤不到5%。结果2019年沙特油田被袭击,价差直接崩了,一周亏掉半年的利润。

避坑指南:统计套利最怕「结构突变」。比如政策变化、公司并购、行业颠覆,这些都会让历史关系失效。我建议每3-6个月重新检验一次模型参数,别偷懒。

1.4 一个简单的统计套利流程

我习惯把统计套利拆成四个步骤:

  • 第一步:筛选资产——找相关性高的品种。比如同行业、同板块、同产业链的。
  • 第二步:建立模型——用协整检验、回归分析等方法,确定它们之间的均衡关系。
  • 第三步:设定阈值——当价差偏离到一定程度(比如2倍标准差),触发交易信号。
  • 第四步:执行与风控——开仓、止损、止盈,动态调整。

下面我用Python演示一个最简单的配对交易模型。别紧张,代码不长:

import numpy as np
import pandas as pd
import statsmodels.api as sm

# 模拟两只股票的价格数据
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=500, freq='D')
price_a = 100 + np.cumsum(np.random.randn(500) * 0.5)
price_b = price_a * 1.5 + np.random.randn(500) * 2  # 有噪声的线性关系

# 计算价差
spread = price_a - price_b / 1.5  # 假设均衡比是1:1.5

# 计算均值和标准差
mean_spread = np.mean(spread)
std_spread = np.std(spread)

# 设定阈值:2倍标准差
upper_threshold = mean_spread + 2 * std_spread
lower_threshold = mean_spread - 2 * std_spread

# 生成交易信号
signals = []
for s in spread:
    if s > upper_threshold:
        signals.append(-1)  # 做空价差
    elif s < lower_threshold:
        signals.append(1)   # 做多价差
    else:
        signals.append(0)   # 观望

print(f"价差均值: {mean_spread:.2f}")
print(f"价差标准差: {std_spread:.2f}")
print(f"触发信号次数: {sum(1 for s in signals if s != 0)}")

你看,代码很简单。但实际项目中,选品种、定参数、控风险才是真正的难点。我见过有人把参数优化到极致,回测曲线漂亮得像假的一样,结果实盘一跑就崩。为什么?过拟合了。

我的经验:统计套利不是越复杂越好。有时候一个简单的移动平均线+标准差阈值,效果反而比那些花里胡哨的机器学习模型好。记住:简单的东西,往往更稳健

1.5 统计套利的常见误区

最后,我总结几个新手容易犯的错:

  • 把相关性当因果——两只股票相关,不代表它们有稳定的套利关系。可能是巧合,也可能是共同受某个因子驱动。
  • 忽略交易成本——统计套利通常交易频繁,手续费、滑点会吃掉大量利润。我建议回测时至少加2-3个滑点。
  • 过度优化参数——为了追求回测漂亮,把阈值、持仓周期调得刚刚好。实盘一换数据,立马失效。
  • 不设止损——统计套利不是100%胜率。遇到黑天鹅,不设止损可能一次亏光。

我曾经有个同事,做统计套利三年没亏过钱,觉得自己找到了圣杯。结果2015年A股股灾,他做多银行、做空券商,价差直接反向走了两个月,爆仓了。嗯,从那以后,我每次开仓都必设止损。

好了,这一章就聊到这儿。统计套利是个好东西,但别把它当印钞机。记住:它赚的是概率的钱,不是确定的钱。下一章咱们聊聊具体的配对交易策略,到时候我会带大家手把手写一个完整的回测框架。


专注资料整理