03-套利策略类型 (Arbitrage Strategy Types)

预计学习时间:1.5 小时

难度:⭐⭐⭐

核心问题:除了配对交易,还有哪些套利方式?


从一个直觉出发

配对交易是最经典的统计套利形态——两只股票之间的价差回归。但在实际市场中,“稳定的统计关系”远不止两支股票之间。

期货和现货之间有定价关系同一品种不同到期日的合约之间有关系同一产业链上下游之间有关系ETF 和它持有的一篮子股票之间有关系

这一章的目标是:让你看到统计套利这个框架的广度,理解每种套利策略的定价基础、风险来源和适用场景。


一、期现套利(现货 vs 期货)

1.1 定价公式

期货的理论价格由持有成本模型(Cost of Carry)决定:

其中:

  • :期货价格
  • :现货价格
  • :无风险利率
  • :连续股息收益率(或存储成本)
  • :到期时间

白话解释:期货价格 = 现货价格 + 持有成本(资金成本 - 股息收益)。

1.2 基差来源

基差 = 现货价格 - 期货价格

理论上基差应该等于持有成本。但实际上,基差会因为以下原因偏离理论值:

偏离来源说明
市场情绪现货涨了但期货反应慢,或反过来
流动性差异期货和现货的流动性结构不同
交易限制融券限制、涨跌停等
分红预期变化除权除息日临近
借贷成本实际借贷利率偏离无风险利率

1.3 正向套利 vs 反向套利

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
 
def simulate_cash_and_carry_arbitrage():
    """
    模拟期现套利(现货-期货定价偏离修复)
 
    场景:当期货价格 > 理论价格时,
    做空期货 + 做多现货 → 到期时基差收敛获利
    """
    np.random.seed(42)
    n_days = 120  # 4 个月
    r = 0.04      # 年化无风险利率 4%
    q = 0.02      # 年化股息率 2%
 
    # 现货价格(随机游走)
    spot_returns = np.random.normal(0.0005, 0.015, n_days)
    spot = 100 * np.cumprod(1 + spot_returns)
 
    dates = pd.date_range(start='2025-01-01', periods=n_days, freq='B')
 
    # 到期日(第 120 天)
    T_remaining = np.arange(n_days, 0, -1) / 252  # 剩余时间(年)
 
    # 理论期货价格
    futures_theoretical = spot * np.exp((r - q) * T_remaining)
 
    # 模拟市场期货价格(加上噪声和系统性偏差)
    # 假设前 30 天期货被高估,之后逐步修复
    mispricing = np.zeros(n_days)
    mispricing[:30] = np.linspace(0, 2.5, 30)  # 逐渐高估到 2.5%
    mispricing[30:] = 2.5 * np.exp(-0.08 * np.arange(n_days - 30))  # 逐步修复
 
    futures_market = futures_theoretical * (1 + mispricing / 100)
 
    # 基差(百分比)
    basis_pct = (spot - futures_market) / spot * 100
 
    # 交易信号
    entry_threshold = 1.5  # 基差偏离超过 1.5% 时入场
    positions = pd.Series(0.0, index=dates)
    current_pos = 0
 
    for t in range(n_days):
        if current_pos == 0 and basis_pct[t] < -entry_threshold:
            # 基差为负(期货高估)→ 正向套利:做空期货 + 做多现货
            current_pos = 1
        elif current_pos == 1 and basis_pct[t] > -0.2:
            # 基差修复 → 平仓
            current_pos = 0
        positions.iloc[t] = current_pos
 
    # 计算套利收益
    # 正向套利收益 ≈ 基差修复幅度
    strategy_returns = pd.Series(0.0, index=dates)
    for t in range(1, n_days):
        if positions.iloc[t-1] == 1:
            # 套利收益 = 基差的变化(近似)
            strategy_returns.iloc[t] = -(basis_pct[t] - basis_pct[t-1]) / 100
 
    cumulative = (1 + strategy_returns).cumprod()
 
    # 可视化
    fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)
 
    axes[0].plot(dates, spot, label='现货', alpha=0.8)
    axes[0].plot(dates, futures_market, label='期货(市场)', alpha=0.8)
    axes[0].plot(dates, futures_theoretical, label='期货(理论)',
                 linestyle='--', alpha=0.5)
    axes[0].set_title('期现套利:现货 vs 期货价格')
    axes[0].legend()
    axes[0].grid(True, alpha=0.3)
 
    axes[1].plot(dates, basis_pct, color='red')
    axes[1].axhline(y=-entry_threshold, color='orange',
                    linestyle=':', label=f'入场阈值 -{entry_threshold}%')
    axes[1].axhline(y=-0.2, color='green',
                    linestyle=':', label='出场阈值 -0.2%')
    axes[1].axhline(y=0, color='gray', linestyle='--', alpha=0.5)
    axes[1].set_title('基差(现货 - 期货)')
    axes[1].legend()
    axes[1].grid(True, alpha=0.3)
 
    axes[2].plot(dates, cumulative, color='green')
    axes[2].set_title('期现套利策略累计收益')
    axes[2].grid(True, alpha=0.3)
 
    plt.tight_layout()
    plt.show()
 
    return cumulative
 
 
print("=== 期现套利模拟 ===")
cumulative = simulate_cash_and_carry_arbitrage()
print(f"总收益: {(cumulative.iloc[-1] - 1):.2%}")
方向条件操作获利来源
正向套利期货 > 理论价做空期货 + 做多现货到期时基差收敛
反向套利期货 < 理论价做多期货 + 做空现货到期时基差收敛(需要融券)

1.4 什么时候有风险

  • 交割风险:现货无法顺利交割
  • 保证金风险:期货端可能被强平
  • 分红预期变化:公司突然改变分红政策
  • 利率变化:持有成本发生意外变化

二、跨期套利(近月 vs 远月)

2.1 日历价差

同一品种不同到期日的期货合约之间的价差,称为日历价差

理论上:

远月合约比近月合约贵(如果 r > q),因为需要承担更多的持有成本。

2.2 价差的均值回归特性

跨期价差通常比期现价差更稳定、更容易预测,因为:

  1. 两张合约受同一现货驱动,系统性风险被大幅对冲
  2. 价差主要取决于利率和存储成本,变化相对缓慢
  3. 到期日临近时,价差有确定的收敛方向
def simulate_calendar_spread():
    """
    模拟跨期套利(近月 vs 远月价差回归)
    """
    np.random.seed(42)
    n_days = 250
 
    # 现货价格
    spot = 100 * np.cumprod(1 + np.random.normal(0.0005, 0.012, n_days))
 
    r = 0.04
    q = 0.01
 
    # 近月合约:30 天后到期
    T_near = np.clip(np.arange(n_days, -30, -1) / 252, 0.001, 1)
    # 远月合约:90 天后到期
    T_far = np.clip(np.arange(n_days + 60, 30, -1) / 252, 0.001, 1)
 
    F_near = spot * np.exp((r - q) * T_near)
    F_far = spot * np.exp((r - q) * T_far)
 
    # 日历价差
    calendar_spread = F_far - F_near
 
    # 加入均值回归扰动(模拟市场摩擦导致的价差异常)
    noise = np.zeros(n_days)
    noise[50:80] = np.sin(np.linspace(0, np.pi, 30)) * 0.8  # 临时偏差
    noise[150:170] = -np.sin(np.linspace(0, np.pi, 20)) * 0.6
    calendar_spread += noise
 
    # 理论价差
    theoretical_spread = spot * np.exp((r - q) * T_near) * (np.exp((r - q) * 0.06) - 1)
 
    dates = pd.date_range(start='2025-01-01', periods=n_days, freq='B')
 
    fig, axes = plt.subplots(2, 1, figsize=(14, 8), sharex=True)
 
    axes[0].plot(dates, calendar_spread, label='实际价差', color='blue')
    axes[0].plot(dates, theoretical_spread, label='理论价差',
                 color='gray', linestyle='--')
    axes[0].set_title('跨期套利:远月 - 近月 价差')
    axes[0].legend()
    axes[0].grid(True, alpha=0.3)
 
    # Z-score
    spread_series = pd.Series(calendar_spread)
    rolling_z = (spread_series - spread_series.rolling(30).mean()) / spread_series.rolling(30).std()
    axes[1].plot(dates, rolling_z, color='red', alpha=0.7)
    axes[1].axhline(y=2, color='red', linestyle=':', label='入场')
    axes[1].axhline(y=-2, color='red', linestyle=':')
    axes[1].axhline(y=0, color='gray', linestyle='--')
    axes[1].set_title('价差 Z-score')
    axes[1].legend()
    axes[1].grid(True, alpha=0.3)
 
    plt.tight_layout()
    plt.show()
 
print("=== 跨期套利模拟 ===")
simulate_calendar_spread()

2.3 常见跨期套利策略

策略操作适用场景
牛市价差做多近月 + 做空远月预期近月涨幅更大(如供需紧张)
熊市价差做空近月 + 做多远月预期远月跌幅更小(如高库存)
蝶式价差做多近月 + 做空中间月 + 做多远月预期价差曲线维持稳定

三、跨品种套利(铁矿 vs 螺纹等)

3.1 替代品关系

跨品种套利的基础是产业链关系替代关系

产业链示例(钢铁):
  铁矿石 ──→ 炼铁 ──→ 炼钢 ──→ 螺纹钢 / 热卷板
     ↑                            ↓
   焦煤/焦炭                    下游需求(房地产、基建)

关键关系:
  - 铁矿石和螺纹钢:上下游关系,有成本传导
  - 螺纹钢和热卷板:替代关系,竞争同一需求
  - 铁矿石和焦炭:互补投入品

3.2 比价套利

最常见的跨品种套利方式是比价回归

当比价偏离历史区间时,做多低估品种、做空高估品种。

def simulate_cross_commodity_arbitrage():
    """
    模拟跨品种套利(铁矿石 vs 螺纹钢 比价回归)
    """
    np.random.seed(42)
    n_days = 500
 
    # 铁矿石价格
    iron_ore = 700 + np.cumsum(np.random.normal(0.1, 8, n_days))
 
    # 螺纹钢价格(与铁矿石有协整关系,但传导有延迟和噪声)
    steel_beta = 0.35  # 每吨铁矿石对应约 0.35 吨螺纹钢
    steel_base = iron_ore * steel_beta
    steel_noise = np.cumsum(np.random.normal(0, 2, n_days))  # 传导偏差
    rebar = steel_base + steel_noise + 200  # 加上加工费和利润
 
    # 比价
    ratio = iron_ore / rebar
 
    dates = pd.date_range(start='2024-01-01', periods=n_days, freq='B')
 
    fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)
 
    # 价格
    ax1 = axes[0]
    ax1.plot(dates, iron_ore, label='铁矿石', color='brown')
    ax1.set_ylabel('铁矿石 (元/吨)', color='brown')
    ax2 = ax1.twinx()
    ax2.plot(dates, rebar, label='螺纹钢', color='gray')
    ax2.set_ylabel('螺纹钢 (元/吨)', color='gray')
    axes[0].set_title('铁矿石 vs 螺纹钢 价格')
    ax1.legend(loc='upper left')
    ax2.legend(loc='upper right')
    axes[0].grid(True, alpha=0.3)
 
    # 比价
    axes[1].plot(dates, ratio, color='blue')
    ratio_mean = ratio.mean()
    ratio_std = ratio.std()
    axes[1].axhline(y=ratio_mean, color='gray', linestyle='--')
    axes[1].axhline(y=ratio_mean + 2 * ratio_std, color='red',
                    linestyle=':', label=f'±2σ')
    axes[1].axhline(y=ratio_mean - 2 * ratio_std, color='red', linestyle=':')
    axes[1].set_title(f'铁矿石/螺纹钢 比价 (均值={ratio_mean:.2f}, σ={ratio_std:.2f})')
    axes[1].legend()
    axes[1].grid(True, alpha=0.3)
 
    # Z-score
    ratio_series = pd.Series(ratio)
    rolling_z = (ratio_series - ratio_series.rolling(60).mean()) / ratio_series.rolling(60).std()
    axes[2].plot(dates, rolling_z, color='red')
    axes[2].axhline(y=2, color='red', linestyle=':', label='入场')
    axes[2].axhline(y=-2, color='red', linestyle=':')
    axes[2].axhline(y=0, color='gray', linestyle='--')
    axes[2].set_title('比价 Z-score (滚动60日)')
    axes[2].legend()
    axes[2].grid(True, alpha=0.3)
 
    plt.tight_layout()
    plt.show()
 
print("=== 跨品种套利模拟 ===")
simulate_cross_commodity_arbitrage()

3.3 跨品种套利的风险

风险说明
产业结构变化比如废钢替代铁矿石
政策干预限产政策改变供需关系
传导延迟上游涨价到下游涨价有时间差
比例关系漂移技术进步改变原料消耗比
事件冲击矿难、罢工等影响单个品种

四、ETF 套利(折溢价)

4.1 基本原理

ETF 的市场价格和它的**净值(NAV)**之间会有偏差:

当 ETF 市场价格 > NAV 时,称为溢价;反之称为折价

套利逻辑:

  • 溢价时:买入一篮子成分股 → 申购 ETF → 卖出 ETF
  • 折价时:买入 ETF → 赎回 ETF → 卖出一篮子成分股

4.2 模拟 ETF 折溢价套利

def simulate_etf_premium_arbitrage():
    """
    模拟 ETF 折溢价套利
    """
    np.random.seed(42)
    n_days = 500
 
    # ETF 净值(基于成分股计算)
    nav = 100 * np.cumprod(1 + np.random.normal(0.0003, 0.008, n_days))
 
    # ETF 市场价格(围绕 NAV 波动,有时有系统性偏离)
    # 折溢价 = 市场价格 - NAV
    premium_base = np.random.normal(0, 0.001, n_days)  # 日常微小折溢价
 
    # 模拟系统性偏离(情绪驱动)
    premium_spike = np.zeros(n_days)
    premium_spike[100:130] = np.sin(np.linspace(0, np.pi, 30)) * 0.015  # 溢价 1.5%
    premium_spike[250:275] = -np.sin(np.linspace(0, np.pi, 25)) * 0.012  # 折价 1.2%
    premium_spike[380:400] = np.sin(np.linspace(0, np.pi, 20)) * 0.020  # 溢价 2%
 
    premium = premium_base + premium_spike
    market_price = nav * (1 + premium)
    premium_pct = premium * 100  # 百分比
 
    dates = pd.date_range(start='2024-01-01', periods=n_days, freq='B')
 
    # 套利信号
    entry_threshold = 0.5  # 折溢价超过 0.5% 时入场
    exit_threshold = 0.1   # 回到 0.1% 以内出场
 
    fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)
 
    # 价格
    axes[0].plot(dates, nav, label='NAV', alpha=0.8)
    axes[0].plot(dates, market_price, label='市场价格', alpha=0.7)
    axes[0].set_title('ETF 净值 vs 市场价格')
    axes[0].legend()
    axes[0].grid(True, alpha=0.3)
 
    # 折溢价率
    colors = ['red' if p > entry_threshold else ('green' if p < -entry_threshold else 'blue')
              for p in premium_pct]
    axes[1].bar(dates, premium_pct, color=colors, alpha=0.7, width=1)
    axes[1].axhline(y=entry_threshold, color='red', linestyle=':',
                    label=f'入场 +{entry_threshold}%')
    axes[1].axhline(y=-entry_threshold, color='green', linestyle=':',
                    label=f'入场 -{entry_threshold}%')
    axes[1].axhline(y=0, color='gray', linestyle='--')
    axes[1].set_title('折溢价率 (%)')
    axes[1].legend()
    axes[1].grid(True, alpha=0.3)
 
    # 累计套利利润
    # 假设每次套利捕获 80% 的折溢价(考虑执行延迟)
    arbitrage_pnl = np.zeros(n_days)
    for t in range(1, n_days):
        if abs(premium_pct[t-1]) > entry_threshold and abs(premium_pct[t]) < exit_threshold:
            # 折溢价修复,平仓获利
            arbitrage_pnl[t] = abs(premium_pct[t-1] - premium_pct[t]) * 0.8
        elif abs(premium_pct[t-1]) > entry_threshold and abs(premium_pct[t]) > entry_threshold:
            # 持仓中,浮盈变化
            arbitrage_pnl[t] = (abs(premium_pct[t-1]) - abs(premium_pct[t])) * 0.8
 
    cum_pnl = np.cumsum(arbitrage_pnl)
    axes[2].plot(dates, cum_pnl, color='green')
    axes[2].set_title('累计套利利润 (基点)')
    axes[2].grid(True, alpha=0.3)
 
    plt.tight_layout()
    plt.show()
 
print("=== ETF 折溢价套利模拟 ===")
simulate_etf_premium_arbitrage()

4.3 ETF 套利的限制

限制说明
申购赎回门槛多数 ETF 有最小申赎单位(通常 100 万份以上)
成分股停牌一篮子中某只股票停牌,无法完成套利
申赎费率申赎本身有成本
执行延迟从发现信号到完成套利,折溢价可能已经修复
交易时段申赎通常只能用收盘价,限制了日内套利

五、可转债套利

5.1 基本概念

可转债是一种可以转换为股票的债券。它同时具有债券属性和期权属性。

两个关键价值:

  • 纯债价值:把可转债当作普通债券的现值(用贴现率算)
  • 转换价值:按当前转股价把可转债转成股票后的价值

5.2 套利逻辑

def simulate_convertible_bond_arbitrage():
    """
    模拟可转债套利(简要示例)
 
    当 转换价值 > 可转债价格 时:
    买入可转债 → 转换成股票 → 卖出股票 → 获利
    """
    np.random.seed(42)
    n_days = 250
 
    # 股票价格
    stock_price = 10 * np.cumprod(1 + np.random.normal(0.001, 0.025, n_days))
 
    # 转股价(固定):12 元
    conversion_price = 12.0
 
    # 面值:100 元
    face_value = 100
 
    # 转换比例
    conversion_ratio = face_value / conversion_price  # ≈ 8.33 股
 
    # 转换价值
    conversion_value = conversion_ratio * stock_price
 
    # 纯债价值(简化:用固定贴现率)
    coupon_rate = 0.02   # 票面利率 2%
    maturity = 5          # 剩余期限 5 年
    yield_to_maturity = 0.04  # 到期收益率 4%
 
    # 简化的纯债价值(不考虑还本,只算票息现值 + 面值现值)
    bond_value = (coupon_rate * face_value * (1 - (1 + yield_to_maturity) ** -maturity) / yield_to_maturity
                  + face_value * (1 + yield_to_maturity) ** -maturity)
 
    # 可转债市场价格(取 max(纯债价值, 转换价值) + 溢价)
    cb_floor = np.maximum(bond_value, conversion_value)
    cb_premium = np.random.normal(0.02, 0.015, n_days)  # 2% 平均溢价
    cb_premium = np.clip(cb_premium, -0.01, 0.08)
    cb_market_price = cb_floor * (1 + cb_premium)
 
    # 套利机会:当 转换价值 - 可转债价格 > 交易成本 时
    cost_pct = 0.005  # 0.5% 交易成本
    arbitrage_spread = conversion_value - cb_market_price
    has_arbitrage = arbitrage_spread > cost_pct * cb_market_price
 
    dates = pd.date_range(start='2025-01-01', periods=n_days, freq='B')
 
    fig, axes = plt.subplots(3, 1, figsize=(14, 10), sharex=True)
 
    # 价格
    axes[0].plot(dates, cb_market_price, label='可转债价格', color='blue')
    axes[0].plot(dates, conversion_value, label='转换价值', color='orange')
    axes[0].axhline(y=bond_value, color='green', linestyle='--',
                    label=f'纯债价值={bond_value:.1f}')
    axes[0].set_title('可转债价格、转换价值与纯债价值')
    axes[0].legend()
    axes[0].grid(True, alpha=0.3)
 
    # 套利空间
    axes[1].bar(dates, arbitrage_spread, color=['red' if a else 'gray' for a in has_arbitrage],
                alpha=0.7, width=1)
    axes[1].axhline(y=cost_pct * 100, color='orange', linestyle=':',
                    label=f'成本线 ≈{cost_pct*100:.1f}元')
    axes[1].set_title('套利空间(转换价值 - 可转债价格)')
    axes[1].legend()
    axes[1].grid(True, alpha=0.3)
 
    # 股价
    axes[2].plot(dates, stock_price, color='purple')
    axes[2].axhline(y=conversion_price, color='red', linestyle='--',
                    label=f'转股价={conversion_price}')
    axes[2].set_title('标的股票价格')
    axes[2].legend()
    axes[2].grid(True, alpha=0.3)
 
    plt.tight_layout()
    plt.show()
 
    n_arb_days = has_arbitrage.sum()
    print(f"有套利机会的天数: {n_arb_days} / {n_days} ({n_arb_days/n_days:.1%})")
 
print("=== 可转债套利模拟 ===")
simulate_convertible_bond_arbitrage()

5.3 可转债套利的风险

风险说明
转股限制可能有锁定期的转股限制
股价波动买入后股价下跌导致转换价值缩水
下修博弈公司可能下修转股价,影响套利逻辑
流动性部分可转债流动性差
强制赎回当股价超过转股价 130% 时,公司可能强制赎回

六、各策略对比表

策略风险等级容量频率资金需求定价基础典型 Sharpe
期现套利日/周持有成本模型1-2
跨期套利低-中周/月持有成本模型1-3
跨品种套利周/月产业链关系0.5-2
ETF 套利净值定价1-2
可转债套利周/月期权定价0.5-1.5
配对交易日/周协整关系0.5-2

常见失败模式

策略最常见的失败原因
期现套利交割失败、保证金不足
跨期套利价差结构突变(Contango → Backwardation)
跨品种套利产业链关系断裂、政策干预
ETF 套利成分股停牌、申赎限制
可转债套利股价大幅下跌、强制赎回
配对交易协整关系断裂(最常见)

七、套利的共同风险

不管是哪种套利策略,都面临一些共同的系统性风险。

7.1 结构断裂

这是统计套利最大的敌人

“两只股票之间的稳定关系”不会永远存在。公司并购、管理层变更、行业格局改变、技术革命——都可能让曾经的”完美配对”彻底失效。

现实案例:2008 年金融危机期间,大量历史协整关系同时断裂。配对交易基金(如 Quantitative Investment Management)在短期内遭遇了巨大亏损。

7.2 Regime 变化

市场环境会切换——牛市到熊市、低波动到高波动、宽松到紧缩。在一种 Regime 下有效的套利关系,在另一种 Regime 下可能完全失效。

def demonstrate_regime_change():
    """
    演示 Regime 变化对套利策略的影响
    """
    np.random.seed(42)
    n = 1000
 
    # Regime 1:正常环境(有协整关系)
    regime1_spread = np.zeros(500)
    for t in range(1, 500):
        regime1_spread[t] = (regime1_spread[t-1]
                              + (-0.08 * regime1_spread[t-1])
                              + 1.0 * np.random.normal())
 
    # Regime 2:关系断裂(价差开始漂移)
    regime2_spread = np.zeros(500)
    regime2_spread[0] = regime1_spread[-1]
    for t in range(1, 500):
        regime2_spread[t] = (regime2_spread[t-1]
                              + (-0.005 * regime2_spread[t-1])  # 回归力极弱
                              + 2.0 * np.random.normal())        # 波动率翻倍
 
    spread = np.concatenate([regime1_spread, regime2_spread])
    dates = pd.date_range(start='2022-01-01', periods=n, freq='B')
 
    fig, axes = plt.subplots(2, 1, figsize=(14, 8), sharex=True)
 
    axes[0].plot(dates, spread, color='blue')
    axes[0].axvline(x=dates[499], color='red', linestyle='--', linewidth=2,
                    label='Regime 切换点')
    axes[0].axhline(y=0, color='gray', linestyle='--')
    axes[0].set_title('Regime 变化前后的价差行为')
    axes[0].legend()
    axes[0].grid(True, alpha=0.3)
 
    # 滚动 Z-score(用前期参数计算)
    spread_series = pd.Series(spread)
    rolling_z = (spread_series - spread_series.rolling(60).mean()) / spread_series.rolling(60).std()
    axes[1].plot(dates, rolling_z, color='red')
    axes[1].axvline(x=dates[499], color='red', linestyle='--', linewidth=2)
    axes[1].axhline(y=2, color='orange', linestyle=':')
    axes[1].axhline(y=-2, color='orange', linestyle=':')
    axes[1].set_title('Z-score(注意 Regime 切换后频繁触发但不再回归)')
    axes[1].grid(True, alpha=0.3)
 
    plt.tight_layout()
    plt.show()
 
print("=== Regime 变化演示 ===")
demonstrate_regime_change()

7.3 拥挤交易

当太多人做同一个套利策略时:

  1. Edge 被压缩:套利机会出现后立即被竞争对手抢走
  2. 平仓踩踏:所有人同时止损,导致价差进一步恶化
  3. 流动性枯竭:需要平仓时发现没有对手盘

“套利策略最大的风险不是发现不了机会,而是所有人都发现了同样的机会。” —— 这是 LTCM(长期资本管理公司)崩塌的核心教训。

7.4 成本吞噬微弱 edge

统计套利的 edge 通常很薄(年化 5-15%)。如果交易成本过高,利润会被完全吞噬:

成本类型影响
佣金 + 印花税直接扣减收益
买卖价差(Bid-Ask Spread)实际成交价差于预期
市场冲击大单推动价格不利变动
融券成本做空端的额外成本
滑点信号到执行之间的价格变化

7.5 流动性危机

“所有人都想平仓的时候,没有人能平仓。”

2007 年量化危机(Quant Quake)就是一个典型案例:当多个策略同时亏损,基金被迫平仓,而平仓行为又进一步加剧了亏损——一个自我强化的死亡螺旋。


小结

策略类型核心逻辑定价基础关键风险
期现套利基差修复持有成本模型交割/保证金
跨期套利价差曲线回归日历价差模型结构变化
跨品种套利比价回归产业链关系产业政策
ETF 套利折溢价修复净值定价停牌/申赎限制
可转债套利转换价值偏离期权定价股价下跌/赎回
配对交易协整价差回归协整关系关系断裂

统计套利的终极教训:所有套利策略的 edge 都在持续衰减。机构通过更快的执行、更低的成本、更复杂的模型来维持竞争力。对于个人研究者来说,找到”别人还没发现的套利关系”比”把已知的套利做得更精细”更重要。


模块总结

至此,统计套利模块的三个核心文件已经完成。回顾一下这个模块的核心脉络:

统计套利框架
  │
  ├── 配对交易(01)
  │   └── 从"两个相关股票"出发
  │       核心:协整 > 相关性
  │       工具:Engle-Granger, Johansen, Kalman Filter
  │
  ├── 均值回归(02)
  │   └── 从"偏离了就会回归"出发
  │       核心:OU 过程建模价差
  │       工具:参数估计, 半衰期, Hurst 指数
  │
  └── 策略类型(03)
      └── 从"除了配对交易还有什么"出发
          核心:多种套利形态的统一框架
          警告:结构断裂、拥挤交易、成本吞噬

三个文件的核心要点:

  1. 统计套利 ≠ 均值回归,均值回归只是其中一种建模方式
  2. 协整 ≠ 相关,配对交易要的是协整
  3. OU 过程是均值回归的标准数学模型
  4. 所有套利策略都面临共同风险:关系断裂、成本吞噬、拥挤交易
  5. 最重要的能力不是找到套利机会,而是及时发现套利关系是否已经失效