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

article/2025/11/5 5:13:04

什么是配对交易

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

Ganapathy Vidyamurthy在《Pairs Trading: Quantitative Methods and Analysis》一书中定义配对交易为两种类型:一类是基于统计套利的配对交易,一类是基于风险套利的配对交易。

配对交易的原理

该策略监控两个历史相关证券的表现。 当两种证券之间的相关性暂时减弱时,即一只股票向上移动而另一只股票向下移动,对货币交易将做空缩短表现优异的股票并做多表现不佳的股票,并认为两者之间的“差价”最终趋同。 一对股票的价格的分歧可能是由于临时供需变化,一个股票的大单交易,一家公司出现重要新闻等等。

 

由于配对交易利用配对间的短期错误定价,通过持有相对低估,卖空相对高估,因此其本质上是一个反转投资策略,其核心是学术文献中的股票价格均值回复。尽管配对交易策略非常简单,但却被广泛应用,其之所以能被广泛应用的主要原因是:首先,配对交易的收益与市场相独立,即市场中性,也就是说它与市场的上涨或者下跌无关;其次,其收益的波动性相对较小;第三,其收益相对稳定。

配对交易特点

配对交易利用了两个资产的短暂价格偏离的对称性,进行对冲以获取两个资产的Alpha收益,其核心假设是配对资产的价差具有均值回复性。而这种均值回复是以交易者的非理性行为相关的。因为当市场中存在大量这类想法的交易者时,股票价格会产生上升的惯性,但这种上升惯性仅仅由于这一个非理性因素所驱动,并没有具体实际的基本面因素支撑,因而股价很快会跌落。相反,股价下跌的股票也会产生下跌的惯性,当市场的理性因素占据主导时,价格又回复到原先的水平。而如果交易者能够采用配对交易策略,就可以获得这两项资产价格偏离的收益了。在实际操作中,其执行过程可以简单地描述为:投资者首先选择相互匹配的两个资产,当配对资产价格差异增加的时候,做多价格偏低的资产,同时做空价格偏高的资产,而当价格差异减小的时候,则结束头寸,完成交易;同时,为了控制风险,当价差进一步扩大时,需要在适当的止损点结束头寸。

配对交易是一种市场中性的交易策略。当观察到配对的资产价格差异增大到一定程度时,对价格上升的资产建立空头,对价格下跌的资产建立多头。在一价定律的作用下,配对资产的价格差异将很快减小。这时,再买入价格下跌的资产对冲之前建立的空头头寸,同时卖出价格上涨的资产,获取两项资产的收益。就整个过程来看,配对交易在单一资产上都有系统风险和个别风险,但由于头寸始终是相反的,因此系统风险完全对冲,配对交易整体上只承担了配对资产的个别风险。而在一价定律下,价格对于价值的回复使得配对的资产的个别风险直接转换为个别收益。这种收益是于市场无关的。

配对交易策略需要良好的头寸规模,市场时机和决策技巧。 虽然该策略没有太大的下行风险,但交易机会很少,而且,为了获利,交易者必须是“最先下手的人”,这就需要强大的编程和硬件能力。

配对交易实证

我们来看A股市场上一对被比较常见的配对股票:美的集团(000333),格力电器(000651)

时间为2014-01-01至2018-01-01,中间有一段时间格力电器停牌,数据缺失。

经计算,两者相关性系数为98.73%,可以说相关性相当高,这也就是为什么两者经常被用来做配对交易。

二者在大趋势上都是上涨的,时间段拉长反而会造成两者相关性提高,我们再来看最近一年两者的相关性。

长周期来看,两只股票虽然都为汽车板块,但相关系数只有76.52%

短期来看,两者的相关性更低,相关性系数只有56.76%

接下来,我们来看一下配对交易的一般策略思想是怎样的。

以下回测参数均设置为:

时间:2015-01-01至2018-08-01

调仓频率:1天

基准指数:沪深三百指数(SHSE.000300)

标的:美的集团(000333)格力电器(000651)

滑点:0.0001

手续费:0.0001

策略思想:

  1. 获取两支股票交易情况,如果停牌,则跳过。
  2. 计算前四日,两者收盘价差值,并计算差值的方差及平均值。
  3. 依据以上数据,构造差值的布林通道。
  4. 当价差上破布林上轨,做空价差(半仓)。
  5. 当价差下破布林下轨,做多价差(半仓)。

我们看到策略取得了较好的收益及稳定性,由于A股做空较难,这里仅仅做多股票,没有做空股票的操作。策略算是个半成品吧,可以看出,在追求稳定的同时,我们牺牲了较多的收益,例如,在牛市中,我们没有超越大盘。配对交易还有很多策略思想,这里仅供参考,各位读者见笑。

附:配对交易策略源码

# coding=utf-8
from __future__ import print_function, absolute_import, unicode_literals
from gm.api import *
import  numpy as npdef init(context):#获得N日股票交易数据context.N=5#选择一对股票context.stock=['SZSE.000651','SZSE.000333']# 每个交易日的09:40 定时执行algo任务schedule(schedule_func=algo, date_rule='1d', time_rule='09:40:00')def algo(context):# 获取上一个交易日的日期last_day = get_previous_trading_date(exchange='SHSE', date=context.now)# 获取当天有交易的股票,似乎无法同时获得两只股票的数据,所以只能麻烦一点not_suspended = get_history_instruments(symbols=context.stock[0], start_date=last_day, end_date=last_day)a = len([item['symbol'] for item in not_suspended if not item['is_suspended']])not_suspended = get_history_instruments(symbols=context.stock[1], start_date=last_day,end_date=last_day)b = len([item['symbol'] for item in not_suspended if not item['is_suspended']])#如果有一支停牌,就跳过if a+b<2:return#获得交易数据prices1 = history_n(symbol=context.stock[0], frequency='1d', count=context.N, end_time=last_day, fields='close',skip_suspended=True,fill_missing=None, adjust=ADJUST_PREV, adjust_end_time='', df=True)prices2=history_n(symbol=context.stock[1], frequency='1d', count=context.N, end_time=last_day, fields='close',skip_suspended=True,fill_missing=None, adjust=ADJUST_PREV, adjust_end_time='', df=True)p1=list(prices1['close'])p2=list(prices2['close'])spread = np.array(p1[:-1]) - np.array(p2[:-1])# 计算布林带的上下轨up = np.mean(spread) + 2 * np.std(spread)down = np.mean(spread) - 2 * np.std(spread)# 计算最新价差spread_now = p1[-1] - p2[-1]# 无交易时若价差上(下)穿布林带上(下)轨则做空(多)价差position_s1_long = context.account().position(symbol=context.stock[0], side=PositionSide_Long)position_s2_long = context.account().position(symbol=context.stock[1], side=PositionSide_Long)if not position_s1_long and not position_s2_long:if spread_now > up:order_target_percent(symbol=context.stock[1], percent=0.5, order_type=OrderType_Market,position_side=PositionSide_Long)if spread_now < down:order_target_percent(symbol=context.stock[0], percent=0.5, order_type=OrderType_Market,position_side=PositionSide_Long)# 价差回归时平仓elif position_s2_long:if spread_now <= up:order_close_all()elif position_s1_long:if spread_now >= down:order_close_all()if __name__ == '__main__':'''strategy_id策略ID,由系统生成filename文件名,请与本文件名保持一致mode实时模式:MODE_LIVE回测模式:MODE_BACKTESTtoken绑定计算机的ID,可在系统设置-密钥管理中生成backtest_start_time回测开始时间backtest_end_time回测结束时间backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POSTbacktest_initial_cash回测初始资金backtest_commission_ratio回测佣金比例backtest_slippage_ratio回测滑点比例'''run(strategy_id='73bb5bf2-a536-11e8-bd52-9cd21ef04ea9',filename='配对交易.py',mode=MODE_BACKTEST,token='c395247a76e8a5caeee699d668d6f550213bc418',backtest_start_time='2014-01-01 08:00:00',backtest_end_time='2018-08-01 16:00:00',backtest_adjust=ADJUST_PREV,backtest_initial_cash=10000000,backtest_commission_ratio=0.0001,backtest_slippage_ratio=0.0001)

来源:掘金量化      作者:宋瑞笛

推荐阅读:

学习Python量化有哪些书籍?这里有一份书单送给你

量化交易领域最重要的10本参考书推荐!

配对交易—这个股票策略曾年赚5000万美元

一个量化策略师的自白(好文强烈推荐)

网格交易法,一个不容易亏钱的投资策略(附源码)

市面上经典的量化交易策略都在这里了!(源码)

 


http://chatgpt.dhexx.cn/article/5rNWLfgI.shtml

相关文章

在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;也就意味着每天可能会发生多次集成。每次集成都通过自动化的构…

灰度发布:灰度很简单,发布很复杂

什么是灰度发布&#xff0c;其要点有哪些&#xff1f; 最近跟几个聊的来的同行来了一次说聚就聚的晚餐&#xff0c;聊了一下最近的工作情况如何以及未来规划等等&#xff0c;酒足饭饱后我们聊了一个话题“灰度发布”。 因为笔者所负责的产品还没有达到他们产品用户的量级上…

互联网产品灰度发布

互联网产品灰度发布 关于2016年5月15日&#xff0c;DevOps成都站&#xff5c;架构与运维峰会活动总结 1. 前言 2 2. 灰度发布定义 5 3. 灰度发布作用 5 4. 灰度发布步骤 5 5. 灰度发布测试方法 6 6. 灰度发布引擎 6 7. 灰度发布常见问题 8 7.1. 以偏概全 8 7.1.1. 问题…

使用 KubeSphere 实现微服务的灰度发布

前言 今天来说一说&#xff0c;在 KubeSphere 中两个 " 小姐姐 " 如何来回切换&#xff0c;这是什么意思哩&#xff1f;其实就是互联网产品中常用的灰度发布方式。 互联网产品需要快速迭代上线&#xff0c;既要保证新功能运行正常&#xff0c;又要保证质量&#xf…

Spring Framework灰度发布

今天简单介绍下SpringFramework微服务中几种服务发布策略以及实现方式。我接触过的有蓝绿、滚筒和灰度发布。 蓝绿发布&#xff1a; 简单说就像美帝选总统投票一样&#xff0c;非蓝即绿一刀切&#xff0c;这个其实也是传统软件架构最常使用的升级方式&#xff0c;只不过服务需…

构建灰度发布环境

手把手教你搭建一个灰度发布环境 提示&#xff1a;灰度发布&#xff0c;又称金丝雀发布金丝雀发布 这一术语源于煤矿工人把笼养的金丝雀带入矿井的传统。矿工通过金丝雀来了解矿井中一氧化碳的浓度&#xff0c;如果一氧化碳的浓度过高&#xff0c;金丝雀就会中毒&#xff0c;从…

灰度发布与滚动发布、蓝绿发布介绍

文章目录 灰度发布与滚动发布、蓝绿发布介绍一、灰度发布与滚动发布、蓝绿发布介绍1、蓝绿部署2、滚动发布3、灰度发布 二、灰度发布好处三、Gitee上高热度的开源灰度发布系统四、安装使用 灰度发布与滚动发布、蓝绿发布介绍 一、灰度发布与滚动发布、蓝绿发布介绍 ​ 引用文…