基于协整理论的配对交易

article/2025/11/5 3:16:14

基于协整理论的配对交易

    • 前导知识
      • 协整
      • 协整与相关
    • 配对交易
      • 策略思想
      • 策略实现

前导知识

协整

在实际生活中,大多数经济金融时间序列通常是非平稳的,如果用这些非平稳时间序列来建立回归模型,那么就会产生虚假回归,即所谓的“伪回归”.“伪回归”指的是变量之间本来不存在相关关系,但是将他们进行回归却得到相关关系的现象.如果采用传统回归方法对彼此不相关的非平稳变量进行回归,那么 t t t检验会倾向显著, R 2 R^2 R2值也会比较大,由此得出变量相关的伪回归结果.那么该如何消除“伪回归”呢? 为了避免变量信息的损失,通常的思路是进行协整分析.协整分析是通过构造各个非平稳变量的线性组合,以此来消除非平稳性.这样既保留了变量的信息,又建立了变量间的关系.多个非平稳变量之间的线性组合是平稳的即称为协整.

协整的定义如下

定义 k k k个序列 x 1 t , x 2 t , … , x k t x_{1t},x_{2t},\dots,x_{kt} x1t,x2t,,xkt X t = ( x 1 t , x 2 t , … , x k t ) T X_t=(x_{1t},x_{2t},\dots,x_{kt})^T Xt=(x1t,x2t,,xkt)T,如果每个序列都是 d d d阶单整序列, 即 x i t ∼ I ( d ) x_{it}\sim I(d) xitI(d),并且存在非零向量 β = ( β 1 , β 2 , … , β k ) T \beta=(\beta_1,\beta_2,\dots,\beta_k)^T β=(β1,β2,,βk)T,使得 β T X t \beta^TX_t βTXt ( d − b ) (d-b) (db)阶单整序列,则称 X t X_t Xt的各分量是𝑑、𝑏阶协整的,记为 X t ∼ C I ( d , b ) X_t\sim CI(d,b) XtCI(d,b). 其中,𝑘 ≥ 2,𝛽称为协整向量

协整关系的检验

Johansen 检验是基于回归系数的协整检验,它不需要事先确定哪些变量为解释变量或者被解释变量,所以它可以用来解决存在多个协整关系的情况. Johansen 检验是以 VAR 模型为基础的检验回归系数的方法,其基本思想是求特征根和特征向量的问题. 这里不展开详细介绍,有兴趣的读者可以自行查阅相关资料.

协整与相关

值得注意的是,协整并不代表相关。两个变量之间的相关性很强,但是协整性却可能很弱。所以当我们在筛选股票的时候,不是计算股票之间的相关性,而是计算协整。

配对交易

策略思想

我们通常认为股票价格是有趋势的,所以也就自然而然的认为股票价格是不平稳的,这在实际中很普遍,所以如果能找到存在协整关系的两只股票,我们就可以构建配对交易策略获利。

配对交易的思想是:两只存在协整关系的股票,两者的股价走势会存在偏离的情况,但是最终都会趋于一致。配对交易就是利用这种价格偏移进行获利。设 X t X_t Xt, Y t Y_t Yt表示两只股票的价格序列,当两只股票的价差( X t − Y t X_t-Y_t XtYt)过高时,买入前者,卖出后者;当价差过低时,买入后者,卖出前者;当价差回归均值附近时,反向操作平仓处理。

策略的风险及存在的问题

  • 价差不回归的风险:当市场结构发生重大变化,用过去历史回归出来的价差会存在不回归的重大风险
  • 中国股票市场目前做空受到限制,所以策略中的部分收益是无法获得的
  • 回归系数需要不断地平衡
  • 下面的策略实现中,没有考虑到交易成本和其他成本

策略实现

在这里直接挑选了两只股票来进行配对交易,在实际环节中,应该先找到两只存在协整关系的股票,然后再构建配对交易策略。

导入所需的包:

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
import warnings; warnings.simplefilter('ignore')import pandas as pd
import numpy as np
import tushare as ts

获取标的代码为:601666.SH和601001.SH的历史日线数据:

pair = ['601666.SH','601001.SH']
df1 = ts.pro_bar(ts_code=pair[0],adj='qfq',start_date='2020-01-01',end_date='2021-07-07')
df2 = ts.pro_bar(ts_code=pair[1],adj='qfq',start_date='2020-01-01',end_date='2021-07-07')
#将两表合并为一张表,这里要特别注意的是需要一一对应,如果股票存在暂停上市等,要特别注意是否一一对应
df = pd.concat([df1[['trade_date','close']],df2['close']],axis=1)
df.columns = ['date',pair[0],pair[1]]
df.set_index('date',inplace=True) #索引设置为日期
df = df.iloc[::-1,]  #按照时间顺序从小到大排序
df.plot()

两只股票价格走势如图所示:

在这里插入图片描述

构建回归模型:

回归模型的表达式为: y = a + b x y=a+bx y=a+bx,其中 b b b表示下面的slope表示斜率, a a a表示截距项intercept

slope,intercept = np.polyfit(df[pair[0]],df[pair[1]],1).round(2)

构建价差以及标准化:

绝对的价差在后续构建头寸的时候不是很方便,将价差进行z-score标准化,然后当均值回归0附近即平仓,如果均值大于或者小于给定的阈值,就多头或者空头。

slope,intercept = np.polyfit(df[pair[0]],df[pair[1]],1).round(2)
df['spread'] = df[pair[1]] - (slope * df[pair[0]] + intercept)
df['spread_zscore'] = (df['spread'] - df['spread'].mean()) / df['spread'].std()
df['spread_zscore'].plot(figsize=(10,6),title='spread_zscore')
plt.axhline(0.8,color='r')
plt.axhline(0.0,color='y')
plt.axhline(-0.05,color='y')
plt.axhline(-0.8,color='r')

标准化后的价差序列如下图所示:(设定了阈值为0.8和0.05)

在这里插入图片描述

构建配对交易策略头寸:

只要构建了一只股票的头寸,那么另一只反向即可

df['position_1'] = np.where(df['spread_zscore'] > 0.8, 1, np.nan)
df['position_1'] = np.where(df['spread_zscore'] < -0.8, -1, df['position_1'])
df['position_1'] = np.where(abs(df['spread_zscore']) < 0.05, 0, df['position_1'])
df['position_1'] = df['position_1'].fillna(method='ffill')
df['position_2'] = -df['position_1']

构建收益:

df['return1'] = np.log(df[pair[0]] / df[pair[0]].shift(1))
df['return2'] = np.log(df[pair[1]] / df[pair[1]].shift(1))
df['strategy'] = 0.5*(df['position_1'].shift(1)*df['return1']) + 0.5*(df['position_2'].shift(1)*df['return2'])
df[['return1','return2','strategy']].cumsum().apply(np.exp).plot(figsize=(10,6))

策略收益及基准收益如下:

在这里插入图片描述

从收益图可以看出,同单独持有一只股票相比,虽然策略收益率没有那么高,但是策略的最大回撤较小,这里是随意选取的两只股票,只用于策略的演示。

免责声明

在任何情况下,本文中的信息或所表述的意见并不构成对任何人的投资建议,这里只为了策略的演示。

在任何情况下,本人不对任何人因使用本文中的任何内容所引致的任何损失负任何责任,投资者自主作出 投资决策并自行承担投资风险,任何形式的分享证券投资收益或者分担证券投资损失的书面或口头承诺均为无效。


http://chatgpt.dhexx.cn/article/WTdW5huL.shtml

相关文章

matlab配对交易回测,精品案例 | 经典投资策略之配对交易策略

原标题&#xff1a;精品案例 | 经典投资策略之配对交易策略 人不恋爱枉少年&#xff0c;在“全城热恋”的氛围下&#xff0c;股市也来凑热闹&#xff0c;配对交易策略油然而生。所谓“男女搭配&#xff0c;干活不累”&#xff0c;成双成对真的能虐死单身狗吗&#xff1f;配对交…

金融量化 — 配对交易策略 (Pair Trading)

1. 配对交易策略 1.1、引言 在量化投资领域&#xff0c;既然严格的无风险套利机会少、收益率微薄&#xff0c;实际的执行过程中也不能完全消除风险。那么如果有一种选择&#xff0c;能够稍微放松100%无风险的要求&#xff0c;比如允许有5%的风险&#xff0c;但同时却能够让套…

【量化笔记】配对交易

配对交易的步骤 1. 如何挑选进行配对的股票 2. 挑选好股票对以后&#xff0c;如何制定交易策略&#xff0c;开仓点如何设计 3. 开仓是&#xff0c;两只股票如何进行多空仓对比 股票对的选择 1. 行业内匹配 2. 产业链配对 3. 财务管理配对 最小距离法 配对交易需要对股…

配对交易——初识统计套利

配对交易是统计套利中的非常经典的策略。众所周知,A股市场无法卖空个股,所以中性化的配对交易策略并不能直接“拿来主义”。但这并不妨碍我们学习配对交易的思想,将卖空改成卖出,构造适合A股市场的策略。下面我们就开始学习吧~ 一、配对交易:统计套利的基石 配对交易是基…

配对交易策略

一、引言 在量化投资领域&#xff0c;既然严格的无风险套利机会少、收益率微薄&#xff0c;实际的执行过程中也不能完全消除风险。那么如果有一种选择&#xff0c;能够稍微放松100%无风险的要求&#xff0c;比如允许有5%的风险&#xff0c;但同时却能够让套利机会增加100%以上…

股票中的情侣——配对交易(附:源码)

什么是配对交易&#xff1f; 配对交易&#xff08;Pairs Trading&#xff09;是指八十年代中期华尔街著名投行Morgan Stanley的数量交易员Nunzio Tartaglia成立的一个数量分析团队提出的一种市场中性投资策略&#xff0c;&#xff0c;其成员主要是物理学家、数学家、以及计算机…

在html中透明度的用法,关于CSS透明度的两种使用方法以及优缺点

关于CSS透明度的两种使用方法以及优缺点 在建企业网站的过程中&#xff0c;为了提升用户视觉体验度&#xff0c;可能要将网页中的某些部分设置为背景颜色透明&#xff0c;使用css设置背景颜色透明的有两种方法&#xff1a;一种是通过rgba方式设置&#xff0c;另一种是通过backg…

CSS如何设置透明

以下介绍三种方法供参考: 设置方法一: 给对应元素添加background-color: transparent; 设置相应代码: 修改之前 : 修改之后: 设置方法二 : 给对应元素设置opacity:0; ☆☆☆注意 : 1.opacity准确来讲是设置的"不透明度"(即不透明的程度); 2.取值"0~1"之间…

设置CSS透明度的方法

一、css rgba()设置颜色透明度 语法&#xff1a; rgba&#xff08;R,G,B,A&#xff09;;RGBA是代表Red&#xff08;红色&#xff09;Green&#xff08;绿色&#xff09;Blue&#xff08;蓝色&#xff09;和Alpha&#xff08;不透明度&#xff09;三个单词的缩写。RGBA颜色值是…

css透明度兼容问题opacity

CSS3的透明度属性opacity想必大家都已经用的无处不在了。而对于不支持CSS3的浏览器如何进行透明处理&#xff0c;保持浏览器效果的一致&#xff0c;这个估计谁都会写&#xff0c;但是涉及到filter的具体语法含义和各版本写法的不同区别&#xff0c;很多人都搞不准确&#xff0c…

css3透明度渐变

在需要使用透明度渐变的div中添加 linear类即可 <div class"linear" style"widht:500px;height:500px"></div> .linear {background: -webkit-linear-gradient( top, rgba(0, 0, 0, 0),rgba(0, 0, 0, 0.2) ); /* Safari 5.1 - 6 /background…

html中透明度100是,CSS 透明度设置方法及常见问题解析

你对 CSS 中的半透明颜色可能已经有了基础的了解&#xff0c;CSS透明算得上是一种相当流行的技术&#xff0c;但在跨浏览器支持上&#xff0c;对于开发者来说&#xff0c;可以说是一件令人头疼的事情。目前还没有一个通用方法&#xff0c;以确保透明度设置可以在目前使用的所有…

html页面透明度属性,css透明度属性是什么?

css透明度属性是什么&#xff1f;CSS透明度属性是opacity属性。下面本篇文章就来给大家介绍一下CSS 透明度属性--opacity属性。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。 CSS 透明度属性--opacity属性 css opacity属性用于设置一…

html中的透明度怎么设置,css透明度怎么设置?css中各种透明度的设置方法总结...

本篇文章给大家介绍一下css中透明度的设置方法,下面我们就来看看具体的内容。 不透明度和透明度 根据定义,CSS中的不透明度和透明度定义了元素的可见性,无论是图像,表格还是RGBA(红绿蓝alpha)颜色值。根据它们的意思,不透明度是元素不透明度或坚固度的度量,而透明度则衡量…

html页面透明度属性,css透明度是什么属性?

css透明度属性指的是opacity属性&#xff1b;opacity属性可以设置一个元素了透明度级别。下面本篇文章就来给大家介绍一下CSS opacity属性&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。 css opacity属性用于设置一个元素…

html css表格透明度,【总结】CSS透明度大汇总_html/css_WEB-ITnose

近年来,CSS不透明算得上是一种相当流行的技术,但在跨浏览器支持上,对于开发者来说,可以说是一件令人头疼的事情。目前还没有一个通用方法,以确保透明度设置可以在目前使用的所有浏览器上有效。 这篇汇总主要是提供一些CSS不透明的详细介绍,代码示例和解释,以实现这项有用…

CSS透明度[简述]

CSS透明度 CSS中设置透明度有两种方式: GRBA和opacity. 下面我们就这两种方式进行简要介绍: GRBA 语法如下: rgba(R,G,B,A); rgba只是单纯的设置颜色的透明度,但是标签上的文字不会透明. 即透明元素的子元素不会继承其透明效果. 代码示例如下: <!DOCTYPE html> <…

一文搞懂蓝绿发布、灰度发布和滚动发布

应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务。 长期以来,业务升级渐渐形成了几个发布策略:蓝绿发布、灰度发布和滚动发布,目的是尽可能避免因发布导致的流量丢失或服务不可用问题。 一、 蓝绿发布 项目逻…

微信小程序的灰度发布

❤️最细微信小程序版本上传、提交审核、发布【建议收藏】❤️ ❤️2021直击大厂前端开发岗位面试题❤️ ❤️效果图如下&#xff0c;如有需要请自取修改【建议收藏】&#xff01;❤️最火前端Web组态软件(可视化)❤️效果图如下&#xff0c;如有需要请自取修改【建议收藏】&…

持续集成和灰度发布

一、持续集成 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;是一种软件开发实践&#xff0c;即团队开发成员经常集成它们的工作&#xff0c;通常每个成员每天至少集成一次&#xff0c;也就意味着每天可能会发生多次集成。每次集成都通过自动化的构…