繁簡切換您正在訪問的是FX168財經網,本網站所提供的內容及信息均遵守中華人民共和國香港特別行政區當地法律法規。

FX168财经网>人物频道>帖子

统计套利之股票配对交易策略(上)

作者/adjsadj 2019-05-09 20:34 0 来源: FX168财经网人物频道

配对交易介绍

配对交易(Paris Trading)是统计套利策略的一种,它寻找同一行业中股价具备均衡关系的两家上市公司,做空近期相对强势的股票,同时做多相对弱势股,以期两者股价重返均衡值时,平仓赚取两只股票价差变动的收益。

配对交易(Pairs Trading)的理念最早来源于上世纪20年代华尔街传奇交易员Jesse Livermore 的姐妹股票对(sister stocks)交易策略。他首先在同一行业内选取业务相似,股价具备一定均衡关系的上市公司股票,然后做空近期的相对强势股,同时做多相对弱势股,等两者股价又回复均衡时,平掉所有仓位,了结交易。该策略与传统股票交易最大的不同之处在于,它的投资标的是两只股票的价差,是一种相对价值而非绝对价值。同时又由于它在股票多头和空头方同时建仓,对冲掉了绝大部分市场风险,因而它又是一种市场中性(Market Neutral)策略,策略收益和大盘走势的相关性很低。

1985年,Morgan Stanley公司成立了一支由Dr. Tartaglia 领导的量化团队,专门开展配对交易的研究,并于1987年投入实战,当年实现盈利5000万美元。不过该策略在之后两年连续亏损,研究团队被迫解散,小组成员散落到各家对冲基金,策略的思想也随之广为市场知晓。经过多年学术机构的研究和市场机构的实战,配对交易的理论框架和配套交易系统都日臻完善。

实例展示

配对交易的第一步是选取适合配对的两只股票,我们以美的电器和青岛海尔两家公司为例,绘制两家公司从2010年1月到2010年12月的价格走势以及他们的相对强弱系数,其中相对强弱系数=美的电器股价/青岛海尔股价。

1.png

上图可以大致观察他们的走势,可以看到两家公司的股价走势基本保持一致,相对强弱指数围绕着均值上下波动。如果我们把相对强弱指数做一定的数学处理,即得到他们的价差。

st=log(PAt)?βlog(PBt)st=log(PtA)?βlog(PtB)


s_t=log(P_t^A)-\beta log(P_t^B)


其中ββ

\beta

log(PAt)log(PtA)

log(P_t^A)

关于log(PBt)log(PtB)

log(P_t^B)

回归得到的系数


然后对stst

s_t

进行标准化处理:st=(st?mean(st))/std(st)st=(st?mean(st))/std(st)

s_t=(s_t-mean(s_t))/std(s_t)

即得到价差,不难理解,价差代表了两个价格走势趋同函数直接的价格偏离情况,如果价格偏离过大,则他们价格走势有回归的趋势,可以从中套利。

我们来观察一下美的集团与青岛海尔的价差走势:

2.png

基于前文的交易策略思路,我们构造的策略是,先选取价差阙值,我们这里选取的是1.5,当价差大于1.5时,我们做空1单位的美的集团,同时买入ββ

\beta

单位的青岛海尔,其中ββ

\beta

log(Pt)log(Pt美的)

log(P_t^{美的})

关于log(Pt)log(Pt海尔)

log(P_t^{海尔})

回归得到的系数。同理当价差小于-1.5时,我们买入1单位的美的集团,融券卖出ββ

\beta

单位的青岛海尔。当价差经过0轴时进行平仓。以此构造的策略组合净值走势如下:

3.png

走势较为平稳,回撤控制在一定范围。在后面的文章,我们还会进一步构造多只股票配对策略,来观察策略的收益情况。

在这里需要提醒一个问题,有的公司在一定时间范围内价格走势与他的配对公司走势相似,但是随着公司基本面发生实质变化等原因,此时他们的走势不再趋同,此时需要选取另外的股票与他们进行配对交易。如五粮液与泸州老窖的例子:

4.png

由图我们可以看到,在红色虚线右边,价差不再围绕0轴震动,而是呈现单边走势,此时不再适合采用配对交易策略。

作者:JoeyQ

本文参考海通证券2011年6月10日《统计套利之股票配对交易策略》

配对交易介绍¶

配对交易(Paris Trading)是统计套利策略的一种,它寻找同一行业中股价具备均衡关系的两家上市公司,做空近期相对强势的股票,同时做多相对弱势股,以期两者股价重返均衡值时,平仓赚取两只股票价差变动的收益。

配对交易(Pairs Trading)的理念最早来源于上世纪20年代华尔街传奇交易员Jesse Livermore 的姐妹股票对(sister stocks)交易策略。他首先在同一行业内选取业务相似,股价具备一定均衡关系的上市公司股票,然后做空近期的相对强势股,同时做多相对弱势股,等两者股价又回复均衡时,平掉所有仓位,了结交易。该策略与传统股票交易最大的不同之处在于,它的投资标的是两只股票的价差,是一种相对价值而非绝对价值。同时又由于它在股票多头和空头方同时建仓,对冲掉了绝大部分市场风险,因而它又是一种市场中性(Market Neutral)策略,策略收益和大盘走势的相关性很低。

1985年,Morgan Stanley公司成立了一支由Dr. Tartaglia 领导的量化团队,专门开展配对交易的研究,并于1987年投入实战,当年实现盈利5000万美元。不过该策略在之后两年连续亏损,研究团队被迫解散,小组成员散落到各家对冲基金,策略的思想也随之广为市场知晓。经过多年学术机构的研究和市场机构的实战,配对交易的理论框架和配套交易系统都日臻完善。

实例展示¶

配对交易的第一步是选取适合配对的两只股票,我们以美的电器和青岛海尔两家公司为例,绘制两家公司从2010年1月到2010年12月的价格走势以及他们的相对强弱系数,其中相对强弱系数=美的电器股价/青岛海尔股价。

1.png

上图可以大致观察他们的走势,可以看到两家公司的股价走势基本保持一致,相对强弱指数围绕着均值上下波动。如果我们把相对强弱指数做一定的数学处理,即得到他们的价差。

$$ s_t=log(P_t^A)-\beta log(P_t^B) $$

其中$ \beta $为$log(P_t^A)$关于$log(P_t^B)$回归得到的系数

然后对$s_t$进行标准化处理:$s_t=(s_t-mean(s_t))/std(s_t)$

即得到价差,不难理解,价差代表了两个价格走势趋同函数直接的价格偏离情况,如果价格偏离过大,则他们价格走势有回归的趋势,可以从中套利。

我们来观察一下美的集团与青岛海尔的价差走势:

2.png

基于前文的交易策略思路,我们构造的策略是,先选取价差阙值,我们这里选取的是1.5,当价差大于1.5时,我们做空1单位的美的集团,同时买入$\beta$单位的青岛海尔,其中$\beta$为$log(P_t^{美的})$关于$log(P_t^{海尔})$回归得到的系数。同理当价差小于-1.5时,我们买入1单位的美的集团,融券卖出$\beta$单位的青岛海尔。当价差经过0轴时进行平仓。以此构造的策略组合净值走势如下:

3.png

走势较为平稳,回撤控制在一定范围。在后面的文章,我们还会进一步构造多只股票配对策略,来观察策略的收益情况。

在这里需要提醒一个问题,有的公司在一定时间范围内价格走势与他的配对公司走势相似,但是随着公司基本面发生实质变化等原因,此时他们的走势不再趋同,此时需要选取另外的股票与他们进行配对交易。如五粮液与泸州老窖的例子:

4.png

由图我们可以看到,在红色虚线右边,价差不再围绕0轴震动,而是呈现单边走势,此时不再适合采用配对交易策略。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom scipy import statsimport statsmodels.api as sm
##获取美的集团,青岛海尔价格以及相对强弱系数=P1/P2price=get_price(['000527.XSHE','600690.XSHG'],start_date='2010-01-01',end_date='2010-12-31',fields='close')['close']xdqr=price['000527.XSHE']/price['600690.XSHG']
##绘制价格以及相对强弱系数走势 fig = plt.figure(figsize=(12,6))  ax1 = fig.add_subplot(111)  ax1.plot(price['000527.XSHE'],'r-',label="美的集团");  ax1.plot(price['600690.XSHG'],'b-+',label='青岛海尔')ax1.set_ylabel('价格')ax1.legend(loc=2)  ax2 = ax1.twinx() # this is the important function  ax2.plot(xdqr, 'g-',label = "相对强弱")  ax2.legend(loc=1)  ax2.set_ylabel('相对强弱指标:P1/P2')  plt.title('2010年美的集团与青岛海尔价格走势及其相对强弱系数')plt.grid(True)plt.xticks(np.arange(10,len(price['000527.XSHE'].index),50),[str(price['000527.XSHE'].index[i])[:10] for i in np.arange(10,len(price['000527.XSHE'].index),50)])plt.show()
##价差函数def get_jiacha(securityy, securityx,start_date,end_date):pricex=get_price(securityx,start_date,end_date,fields='close',fq='pre')['close']pricey=get_price(securityy,start_date,end_date,fields='close',fq='pre')['close']model = sm.OLS(log(pricey),log(pricex)).fit()slope=model.params[0]st1=log(pricey)-slope*log(pricex)st=(st1-mean(st1))/std(st1)return st,slope
###计算价差,即残差标准化,先进行回归后标准化model = sm.OLS(log(price['000527.XSHE']),log(price['600690.XSHG'])).fit()slope=model.params[0]st1=log(price['000527.XSHE'])-slope*log(price['600690.XSHG'])st=(st1-mean(st1))/std(st1)
## 绘制价差走势plt.figure(figsize=(12,6))plt.plot(st)plt.plot(arange(len(st)),[1.5 for i in arange(len(st))],'r')plt.plot(arange(len(st)),[-1.5 for i in arange(len(st))],'r')plt.plot(arange(len(st)),[0 for i in arange(len(st))],'g')plt.title('美的集团与青岛海尔价差')plt.xticks(np.arange(10,len(price['000527.XSHE'].index),50),[str(price['000527.XSHE'].index[i])[:10] for i in np.arange(10,len(price['000527.XSHE'].index),50)])
([<matplotlib.axis.XTick at 0x7f020ea68610>,
  <matplotlib.axis.XTick at 0x7f020e87a890>,
  <matplotlib.axis.XTick at 0x7f020e2d1810>,
  <matplotlib.axis.XTick at 0x7f020e2d1e90>,
  <matplotlib.axis.XTick at 0x7f020e49f610>],
 <a list of 5 Text xticklabel objects>)
###交易策略###当价差达到1.5时做空美的集团,做多青岛海尔,当价差变为0时平仓,当价差达到-1.5时做多美的集团,做空青岛海尔,比例为回归得到的beta值u=0meidi=[]haier=[]meidinum=0haiernum=0for i in arange(1,len(st)):if u==0 and st[i]>1.5:meidinum=-1##做空美的haiernum=-meidinum*slope ##做多海尔u=ielif u<>0 and st[i]*st[i-1]<0: ##此时价差变0meidinum=0haiernum=0u=0elif u==0 and st[i]<-1.5:meidinum=1haiernum=-meidinum*slopeu=imeidi.append(meidinum)haier.append(haiernum)
## 绘制上述策略的净值曲线meidirate=price['000527.XSHE'].diff(1)[1:]/list(price['000527.XSHE'][:-1])haierrate=price['600690.XSHG'].diff(1)[1:]/list(price['600690.XSHG'][:-1])sumrate=meidirate*meidi+haierrate*haiercumrate=[]tempt=1for i in arange(len(sumrate)):tempt=tempt*(1+sumrate[i])cumrate.append(tempt)plt.figure(figsize=(20,6))plt.plot(cumrate)plt.title('配对策略净值变化曲线')plt.grid(True)plt.xticks(np.arange(10,len(meidirate.index),50),[str(meidirate.index[i])[:10] for i in np.arange(10,len(meidirate.index),50)],rotation=20)
([<matplotlib.axis.XTick at 0x7f02028fa190>,
  <matplotlib.axis.XTick at 0x7f02028faa50>,
  <matplotlib.axis.XTick at 0x7f0202858990>,
  <matplotlib.axis.XTick at 0x7f0202858f10>,
  <matplotlib.axis.XTick at 0x7f02028636d0>],
 <a list of 5 Text xticklabel objects>)
##绘制泸州老窖与五粮液价差走势test=get_jiacha(securityx='000858.XSHE',securityy='000568.XSHE',start_date='2010-01-01',end_date='2011-06-01')[0]plt.figure(figsize=(20,6))plt.plot(test)plt.plot([250 for i in arange(100)],arange(-50,50)/100.*6.,'r')plt.title('泸州老窖与五粮液价差')plt.xticks(arange(0,len(test),50),[str(test.index[i])[:10] for i in arange(0,len(test),50)],rotation=20)plt.grid(True)

上图为2010年1月至2011年6月泸州老窖与五粮液价差走势,可以看到,从2011年1月开始,价差呈现单边走势,不再具有均值回归特性,可能是基本面等发生了变化,此时不适合对其进行配对交易。

 
分享到:
举报财经168客户端下载

全部回复

0/140

投稿 您想发表你的观点和看法?

更多人气分析师

  • 张亦巧

    人气2152文章4145粉丝45

    暂无个人简介信息

  • 梁孟梵

    人气2152文章3177粉丝39

    qq:2294906466 了解群指导添加微信mfmacd

  • 指导老师

    人气1856文章4423粉丝52

    暂无个人简介信息

  • 李冉晴

    人气2296文章3821粉丝34

    李冉晴,专业现贷实盘分析师。

  • 刘钥钥1

    人气2016文章3119粉丝34

    专业从事现货黄金、现货白银模似实盘操作分析指导

  • 张迎妤

    人气1896文章3305粉丝34

    个人专注于行情技术分析,消息面解读剖析,给予您第一时间方向...

  • 金泰铬J

    人气2320文章3925粉丝51

    投资问答解咨询金泰铬V/信tgtg67即可获取每日的实时资讯、行情...

  • 金算盘

    人气2696文章7761粉丝125

    高级分析师,混过名校,厮杀于股市和期货、证券市场多年,专注...

  • 金帝财神

    人气4736文章8329粉丝118

    本文由资深分析师金帝财神微信:934295330,指导黄金,白银,...