You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在R语言中编写循环实现配对交易策略回测的技术问询

基于协整组合的配对交易策略回测方案

哈哈,刚好折腾过类似的配对交易回测,结合你已经完成的协整检验结果,给你梳理一套可行的落地流程:

一、回测前的准备工作

  • 先把每一对协整资产的时间序列数据提出来:从你的资产数据集里,照着combos每一列的ID,把对应资产的收盘价序列(配对交易优先用收盘价)捞出来就行
  • 计算每对资产的均衡价差:用线性回归拟合它们的协整关系,得到的残差就是我们要盯的价差。比如资产X和Y,拟合Y = α + βX + ε,这里的ε就是核心的价差指标
  • 确定交易触发阈值:常规操作是用残差的均值±n倍标准差当开仓线,比如±1.5或2倍标准差,这个数值可以拿一小段历史数据调优,别太激进也别太保守

二、配对交易回测的核心逻辑

对着每一对协整资产,按下面的规则模拟交易就行:

  • 开仓信号:当价差冲破上阈值(均值+标准差倍数),就做空Y、做多X;当价差跌破下阈值(均值-标准差倍数),就做多Y、做空X
  • 平仓信号:要么等价差回归到均值附近(比如±0.5倍标准差范围内)就平仓,要么提前设好止损止盈线,防止极端行情把你套牢
  • 仓位管理:一定要根据拟合出来的β系数调整仓位,比如做多X的仓位 = β × 做空Y的仓位,这样才能有效对冲市场的系统性风险

三、Python代码示例(快速上手版)

假设你的资产价格数据存在price_data这个DataFrame里,索引是时间,列名是资产ID:

import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import coint

# 遍历所有869组协整组合
for col_idx in range(combos.shape[1]):
    # 取出当前组合的两个资产ID
    asset_a_id = combos[0, col_idx]
    asset_b_id = combos[1, col_idx]
    
    # 获取两只资产的收盘价序列
    asset_a = price_data[str(asset_a_id)]
    asset_b = price_data[str(asset_b_id)]
    
    # 拟合协整回归,计算价差(残差)
    # 因为已经做过协整检验,直接拟合线性回归就行
    beta, alpha = np.polyfit(asset_a, asset_b, 1)
    spread = asset_b - (alpha + beta * asset_a)
    
    # 计算交易阈值
    spread_mean = spread.mean()
    spread_std = spread.std()
    upper_limit = spread_mean + 2 * spread_std  # 可调整倍数
    lower_limit = spread_mean - 2 * spread_std
    close_limit = 0.5 * spread_std  # 回归到均值±0.5倍标准差平仓
    
    # 生成交易信号
    signals = pd.DataFrame(index=spread.index)
    # 价差过高:空B多A
    signals['long_A_short_B'] = (spread > upper_limit).astype(int)
    # 价差过低:多B空A
    signals['long_B_short_A'] = (spread < lower_limit).astype(int)
    # 价差回归:平仓
    signals['close_all'] = ((spread >= spread_mean - close_limit) & 
                            (spread <= spread_mean + close_limit)).astype(int)
    
    # 后续可以基于信号计算回测收益、最大回撤等指标
    # 比如用信号计算每日仓位,再结合收益率算策略收益
    # ...

四、回测后的关键评估指标

回测完别光看赚了多少钱,得看这些指标判断策略靠谱不:

  • 累计收益率:直观看策略整体盈利情况
  • 夏普比率:衡量风险调整后的收益,数值越高越划算
  • 最大回撤:看策略最惨的时候亏了多少,心里有底
  • 胜率:盈利交易次数占总次数的比例,辅助判断策略稳定性
  • 协整稳定性:回测过程中定期重新做协整检验,要是协整关系破了,这组配对就得剔除了

内容的提问来源于stack exchange,提问作者Owen Cleberson

火山引擎 最新活动