statistical-arbitrage

star 7

统计套利策略的完整指南,包括配对交易、协整分析、主成分策略和行业轮动套利。适用于需要构建市场中性策略、对冲系统性风险并获取稳定Alpha收益的量化投资场景。

FeiCoder By FeiCoder schedule Updated 2/27/2026

name: statistical-arbitrage description: 统计套利策略的完整指南,包括配对交易、协整分析、主成分策略和行业轮动套利。适用于需要构建市场中性策略、对冲系统性风险并获取稳定Alpha收益的量化投资场景。

统计套利

概述

统计套利是一种基于数学模型和历史统计规律的风险套利策略。它利用证券价格的历史统计规律进行套利,与无风险套利不同,统计套利存在历史规律失效的风险。其核心思想是通过构建多头和空头组合来对冲市场风险,获取与市场无关的稳定Alpha收益。

何时使用此技能:

  • 当需要构建市场中性策略时
  • 当需要寻找相关性强的资产对进行配对交易时
  • 当需要在熊市或震荡市中获取稳定收益时
  • 当需要利用行业或区域间的相关性进行套利时

核心概念

1. 统计套利定义

Morgan Stanley将统计套利定义为:一种基于模型的投资过程,在不依赖于经济含义的情况下,运用数量手段构建资产组合,根据证券价格与数量模型所预测的理论价值进行对比,构建证券投资组合的多头和空头,从而对市场风险进行规避,获取一个稳定的Alpha。

2. 统计套利 vs 无风险套利

特征 统计套利 无风险套利
理论基础 历史统计规律 价格必然收敛
风险 历史规律可能失效 理论无风险
收益 概率性Alpha 确定性收益
适用范围 相关性资产对 期货到期收敛

3. 主要方法分类

统计套利主要有两大方法:

  1. β中性策略:基于日收益率建模,目标是在组合β值为零的前提下获取Alpha收益
  2. 协整策略:基于股价序列的协整关系建模,利用累计收益率的偏离进行套利

推荐策略:协整策略更优,因为:

  • 直接利用原始变量(股价)建模
  • 更容易把握累计收益率的偏离
  • 错误信号较少

配对交易策略

配对交易原理

配对交易(Pairs Trading)是最经典的统计套利方法:

  1. 选取业务相似、股价具备均衡关系的上市公司股票
  2. 做空近期相对强势股,做多相对弱势股
  3. 等两者价差恢复均衡时平仓了结

关键特点:

  • 投资标的是两只股票的价差(相对价值而非绝对价值)
  • 多空同时建仓,对冲掉绝大部分市场风险
  • 属于市场中性策略,与大盘走势相关性低

配对筛选流程

Step 1: 行业划分
   └─ 在同一行业内筛选股票对,保证主营业务相似

Step 2: 收益率相关性检验
   └─ 要求配对股票历史收益率相关系数 > 阈值(建议 > 0.85)

Step 3: 协整关系检验
   └─ 检验两只股票价格序列是否存在长期均衡关系

Step 4: 价差形态过滤
   └─ 筛选价差回归速度快的股票对,获得更多交易机会

协整检验方法

两只股票存在协整关系的条件:

  1. 两者的历史股价序列都是一阶单整(非平稳,但一阶差分后平稳)
  2. 这两个序列的某种线性组合是平稳的

协整方程:

Pa,t = α + β × Pb,t + εt

其中 εt(残差)必须是平稳序列。

检验步骤:

  1. 计算任意两只股票的相关系数
  2. 筛选相关系数较高的股票对(> 0.85)
  3. 对筛选后的股票对进行协整检验(EG两步法或Johansen检验)
  4. 选择残差平稳的股票对作为候选配对

交易策略设计

核心参数设置

参数 含义 推荐范围
δ1 建仓阈值 1.0 ~ 1.3(σ倍数)
δ2 平仓阈值 -1.0 ~ -0.7(σ倍数)
δ3 止损阈值 2.0 ~ 3.0(σ倍数)

交易信号

入场条件:

  • spreadt > δ1 × σt:股票A相对高估,股票B相对低估
    • 卖空股票A,买入β倍股票B
  • spreadt < -δ1 × σt:股票A相对低估,股票B相对高估
    • 买入股票A,卖空β倍股票B

平仓条件:

  • spreadt > δ2 × σtspreadt < -δ2 × σt:价差回归,平仓获利

止损条件:

  • spreadt > δ3 × σtspreadt < -δ3 × σt:协整关系破坏,立即止损

阈值优化原则

  • δ1 越大:潜在套利空间越大,但交易次数减少
  • δ1 越小:潜在套利空间越小,但交易次数增加
  • δ2 越接近0:平仓收益越高,但可能错失交易机会

最优阈值确定方法: 回测优化,在样本内寻找收益最大化的参数组合

残差建模

模型I:独立同分布假设

εt ~ N(0, σ²)
  • 简单,但假设过于理想

模型II:均值回复过程(推荐)

dε(t) = m(ε(t) - m)dt + σdW(t)
  • 考虑残差的均值回复特性
  • 实证效果最好

模型III:AR(1)模型

  • 考虑残差的自相关性

模型IV:GARCH(1,1)模型

  • 考虑残差的异方差性
  • 注意:实证表明效果较差,不推荐使用

主成分套利策略

基本原理

  1. 从成分股股价历史信息中提取主成分
  2. 捕捉所有成分股的主要趋势
  3. 当某成分股与主要趋势产生较大偏离时,入场套利

实现步骤

Step 1: 股价矩阵标准化
   └─ PT×n → 标准化矩阵 P'T×n

Step 2: 计算相关系数矩阵
   └─ P'n×n 的相关系数矩阵 Rn×n

Step 3: 特征分解
   └─ 计算特征根 λ1, λ2, ..., λn
   └─ 计算特征向量 V1, V2, ..., Vn

Step 4: 构建主成分组合
   └─ fi = P'T×n × Vi
   └─ 通常取前k个主成分(累计贡献率 ≥ 80%~90%)

Step 5: 回归分析
   └─ 将单只股票收益率表达为主成分组合的线性方程
   └─ 根据残差偏离进行套利

主成分策略 vs 协整策略

特征 协整策略 主成分策略
样本内收益 40%~50%/年 更高
样本外收益 ~8%/半年 更高、更稳健
可靠性 基于个股对 基于股票组合
推荐程度 一般 强烈推荐

行业轮动套利

基本原理

利用同一市场环境下不同行业股票波动不同步性,获取市场中性Alpha收益。

策略设计

案例:农林 / 制造行业轮动

1. 归一化行业指数
   └─ 以某基准日的指数值为1

2. 计算行业比值
   └─ 农林指数 / 制造指数

3. 设置交易区间
   └─ 比值 < 0.9:卖空制造,买入农林
   └─ 比值 ≈ 1.0:平仓
   └─ 比值 > 1.1:卖空农林,买入制造

行业轮动特征

  • 在一轮上涨/下跌行情中,板块轮动明显
  • 即使在单边下跌行情中,也可能存在行业轮动机会
  • 策略收益与市场走势呈负相关性

样本外检验

三种外推方法

方法 描述 特点
固定窗口 协整参数固定,用新数据计算残差 假定协整关系不变
滚动窗口 每天平移,参数动态更新 捕捉参数变化
扩展窗口 窗口长度不断增加 可能过于滞后

推荐方法:滚动窗口方法(方法二)在样本外表现最好

样本外注意事项

  1. 样本外收益显著低于样本内(这是正常的)
  2. 最佳样本外收益约为 8%~10%/半年
  3. 建议采用保守的参数设置
  4. 持续监控协整关系是否被破坏

策略改进

改进1:延后开仓策略

不等价差突破阈值就建仓,而是等价差反向回归穿越阈值时才建仓。

优点:

  • 更加准确判断价差回归趋势
  • 避免单边走强造成的损失

改进2:延后开仓 + 提前平仓

  • 建仓:等价差反向穿越阈值时
  • 平仓:不等价差回归到均值,而是在离均值一定距离处(δ2)就平仓

注意: 实证表明提前平仓对收益影响可能是负面的

改进3:动态调整阈值

  • 根据市场环境调整阈值
  • 波动加大时适当提高阈值
  • 波动减小时适当降低阈值

融券套利(补充)

股票-融券套利

利用负溢价认股权证进行无风险套利:

案例:江铜权证的套利

1. 买入负溢价认股权证
2. 融券卖空标的正股
3. 到期行权归还股票
4. 锁定权证的负溢价收益

可转债-融券套利

当可转债转股溢价为负时:

1. 买入可转债
2. 融券卖出标的股票
3. 转股后归还融券
4. 获取转股价值与转债价格差额

股指期货-融券套利

券商对冲融券风险:

1. 向投资者融券卖出股票
2. 同时做空股指期货对冲系统性风险
3. 获取稳定的融券利息收益

脚本工具

配套脚本

脚本 功能 使用场景
scripts/pairs_trading.py 协整检验、配对交易信号生成、回测 配对交易策略开发与验证

环境要求

# 使用 uv 管理 Python 环境
uv venv .venv
source .venv/bin/activate

# 安装依赖
uv pip install pandas numpy statsmodels matplotlib

# 运行脚本
python scripts/pairs_trading.py --help

快速开始

# 1. 协整检验
python scripts/pairs_trading.py test --price-a data/stock_a.csv --price-b data/stock_b.csv

# 2. 生成交易信号
python scripts/pairs_trading.py signals --price-a data/stock_a.csv --price-b data/stock_b.csv --entry-threshold 1.2 --exit-threshold -0.8

# 3. 回测
python scripts/pairs_trading.py backtest --price-a data/stock_a.csv --price-b data/stock_b.csv --entry-threshold 1.2 --exit-threshold -0.8

数据格式要求

CSV 文件必须包含以下列:

  • date: 日期(YYYY-MM-DD 格式)
  • close: 收盘价

示例:

date,close
2020-01-02,10.50
2020-01-03,10.55
...

实施要点

数据要求

  • 历史数据:至少2年以上日线数据
  • 数据质量:需剔除长期停牌股票
  • 更新频率:建议每日更新

计算资源

  • 协整检验计算量大(数千对股票)
  • 建议使用向量化计算(NumPy/Pandas)
  • 可采用并行计算加速

风险管理

  1. 设置止损:价差长期偏离时及时止损
  2. 头寸管理:避免过度集中
  3. 协整监控:定期检验协整关系是否保持
  4. 流动性风险:选择高流动性股票

交易成本

  • 每次套利成本约 0.5%
  • 融券费用约年化 10%
  • 需在收益预测中充分考虑

注意事项

  1. 历史规律不代表未来:统计套利不是无风险策略
  2. 样本外表现关键:重视样本外稳健性
  3. 避免过度拟合:模型应简洁有效
  4. 做空机制依赖:国内需融资融券支持
  5. 容量限制:适合中小资金,大资金难以实施

错误处理与故障排查

常见错误及解决方案

错误场景 可能原因 解决方案
协整检验 p 值 > 0.05 两股票不存在长期均衡关系 更换股票对,确保同行业、业务相似
ADF 检验失败 残差序列不平稳 重新回归计算,或使用滚动窗口
样本外收益为负 协整关系在样本外失效 缩短滚动窗口期,增加止损频率
交易信号过于频繁 阈值 δ1 设置过低 提高 δ1 至 1.2~1.5
价差长期不回归 行业基本面发生重大变化 缩短持仓周期,及时止损

脚本执行故障

问题:运行 pairs_trading.py 报错 "ModuleNotFoundError"

# 解决方案:使用 uv 创建并激活环境
uv venv .venv
source .venv/bin/activate
uv pip install pandas numpy statsmodels

# 运行脚本
python scripts/pairs_trading.py --help

问题:协整检验结果不稳定

# 原因:数据时间窗口过短
# 解决:确保使用2年以上日线数据
# 推荐:使用滚动窗口方法更新参数

问题:回测收益与实盘差异大

# 可能原因:
# 1. 回测未考虑滑点 - 建议设置滑点成本 0.1%~0.2%
# 2. 流动性不足 - 选择日均成交额 > 1亿的股票
# 3. 融券成本未计入 - 融券年化成本约 8%~12%

相关技能

  • quant-stock-selection-intro: 量化选股入门
  • multi-factor-model: 多因子选股模型
  • timing/trend-following-timing: 趋势追踪择时
Install via CLI
npx skills add https://github.com/FeiCoder/Skill-Factory --skill statistical-arbitrage
Repository Details
star Stars 7
call_split Forks 2
navigation Branch main
article Path SKILL.md
More from Creator