4、配对交易策略:基于协整关系的可转债与正股配对交易模型

配对交易,说白了就是找两个“长得像”的品种,等它们价格跑偏了再出手。可转债和它的正股,天生就是一对好搭档。为什么?因为可转债有转股机制,价格和正股之间存在着一种长期稳定的关系。这种关系,我们叫它“协整”。

我刚开始做可转债交易那会儿,也试过单边做多或者做空。但说实话,波动太大,心脏受不了。后来我发现,与其赌方向,不如赌“价差回归”。这就是配对交易的核心思想。

核心逻辑: 找到一对协整关系稳定的可转债和正股,当价差偏离均值超过阈值时,做多被低估的一方,做空被高估的一方。等待价差回归后平仓获利。

4.1 什么是协整?

协整听起来高大上,其实很简单。两个时间序列,各自可能都是随机游走的(非平稳),但它们之间的线性组合却是平稳的。这就叫协整。

举个例子。你牵着一条狗散步。狗跑来跑去,路径是随机的。但你走的路线是相对稳定的。狗和你的位置差,总是在某个范围内波动。这个“位置差”就是平稳的。可转债和正股的关系,就像你和你的狗。

为什么会这样?因为套利力量的存在。当可转债价格严重偏离转股价值时,套利者会进场,把价格拉回来。这种力量保证了长期关系的稳定性。

我的经验: 不是所有可转债都和正股有协整关系。我一般会先做一下统计检验。常用的方法是ADF检验(Augmented Dickey-Fuller test)。如果检验不通过,说明这对组合不适合做配对交易。

4.2 配对交易的完整流程

整个流程分四步。我一步步说清楚。

  1. 筛选标的: 找流动性好、转股溢价率适中、剩余期限较长的可转债。正股也要选市值大、波动性适中的。
  2. 检验协整: 用历史数据做协整检验。确认两者存在长期均衡关系。
  3. 计算价差与阈值: 用回归模型算出价差序列,然后设定开仓和平仓的阈值。
  4. 执行交易: 实时监控价差,触发信号就执行。注意仓位管理和止损。

嗯,这里要注意。第三步的阈值设定很关键。设得太宽,交易机会少;设得太窄,频繁交易,手续费吃掉利润。我个人习惯用2倍标准差作为开仓阈值,0.5倍标准差作为平仓阈值。

4.3 代码实现:协整检验与价差计算

下面我给出一个完整的Python示例。数据我用的是模拟数据,但逻辑和真实交易完全一致。

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
import matplotlib.pyplot as plt

# 模拟数据:可转债价格和正股价格
np.random.seed(42)
n = 500
# 正股价格:随机游走
stock = np.cumsum(np.random.randn(n)) + 100
# 可转债价格:与正股协整,加上一个平稳的误差项
error = np.random.randn(n) * 0.5
bond = 0.8 * stock + 20 + error

# 1. 协整检验
# 先做回归:bond = alpha + beta * stock + epsilon
X = sm.add_constant(stock)
model = sm.OLS(bond, X).fit()
residuals = model.resid

# 对残差做ADF检验
adf_result = adfuller(residuals)
print(f'ADF统计量: {adf_result[0]:.4f}')
print(f'p值: {adf_result[1]:.4f}')

if adf_result[1] < 0.05:
    print('结论:残差平稳,存在协整关系')
else:
    print('结论:残差不平稳,不存在协整关系')

# 2. 计算价差(标准化)
spread = residuals / np.std(residuals)

# 3. 设定阈值
mean_spread = np.mean(spread)
std_spread = np.std(spread)
upper_threshold = mean_spread + 2 * std_spread
lower_threshold = mean_spread - 2 * std_spread

print(f'价差均值: {mean_spread:.2f}')
print(f'价差标准差: {std_spread:.2f}')
print(f'上阈值: {upper_threshold:.2f}')
print(f'下阈值: {lower_threshold:.2f}')

# 4. 生成交易信号
signals = pd.Series(index=range(n), dtype='object')
for i in range(1, n):
    if spread[i] > upper_threshold:
        signals[i] = '做空价差'  # 卖空可转债,买入正股
    elif spread[i] < lower_threshold:
        signals[i] = '做多价差'  # 买入可转债,卖空正股
    else:
        signals[i] = '持有'

# 显示最后10个信号
print(signals.tail(10))
避坑指南: 我曾经犯过一个错误——直接用价格做回归,忽略了数据的时间序列特性。记住,一定要先检查平稳性。如果价格是非平稳的,回归结果可能是“伪回归”。另外,协整关系不是一成不变的。我建议每3个月重新检验一次,确保关系仍然成立。

4.4 交易执行中的细节

代码写完了,但实盘交易还有很多坑。我挑几个重点说。

环节 注意事项 我的建议
开仓时机 价差突破阈值后,不要立即开仓。等确认突破有效 等价差在阈值外停留1-2个tick再进场
仓位计算 根据回归系数确定对冲比例 用beta系数计算:每1手可转债对应beta手正股
止损设置 价差继续扩大时,必须止损 我一般设3倍标准差作为硬止损
交易成本 可转债和正股的交易成本不同 把滑点和手续费算进阈值里,别太激进

你想想看,如果价差突破了2倍标准差,你进场了。结果它继续扩大到3倍、4倍。这时候怎么办?硬扛?不行。我见过有人因为不止损,一次亏掉半年的利润。所以,止损一定要有。

4.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你看一眼就能明白整个流程。

可转债与正股配对交易知识体系 输入:可转债价格 + 正股价格 步骤1:协整检验(ADF检验) 步骤2:OLS回归 → 计算残差(价差) 步骤3:设定阈值(均值±2倍标准差) 步骤4:执行交易(做多/做空价差) 关键参数 • 开仓阈值:2σ • 平仓阈值:0.5σ • 止损阈值:3σ • 对冲比例:β • 检验周期:3个月 • 数据频率:日线 核心思想:利用协整关系,在价差偏离时进行统计套利

说白了,这套策略的核心就一句话:找到关系,等待偏离,押注回归。你不需要预测市场涨跌,只需要判断价差是否“过分”了。这种思路,在震荡市中特别好用。

进阶思考: 如果你觉得单对配对交易机会太少,可以试试“多对组合”。比如同时监控10对可转债-正股组合,哪个触发信号就做哪个。这样能提高资金利用率。但注意,多对组合的风险分散效果有限,因为可转债市场整体相关性较高。

好了,这一章的内容就到这里。记住,配对交易不是无风险套利。它只是把方向性风险转换成了价差风险。该止损的时候,别犹豫。

专注资料整理