【量化策略系列】股票均值回归策略之一——配对交易策略(Pairs Trading)
本文介绍了均值回归策略和配对交易策略的核心概念及其应用。均值回归策略通过分析股票价格偏离其均值后的回归趋势,利用量化的偏离程度进行买卖操作,以提升投资胜率。配对交易策略则通过寻找历史走势相似的股票对,利用其价格偏离均值后的回归关系进行套利交易。文章详细阐述了均值回归策略的理论基础、股票动量和均值回归现象的解释,以及配对交易策略的构建流程,包括相关系数计算、偏离均值分析和建仓条件等。此外,文章提到了Python和C++代码实现框架,并预告了后续单聚类策略和多聚类策略的介绍。
本文持续更新中。最后更新时间:11/11/2019
文章目录
-
- 历史文章回顾
-
- 均值回归策略概述
-
- 配对交易策略解析
-
- 配对交易策略构建步骤
-
- 代码实现及回测结果分析
-
-
- Python代码实现
-
-
在Python中,具体实现配对交易策略的步骤包括...
-
在C++中,具体实现配对交易策略的步骤包括...
- 本系列后续文章介绍
- 写在最后
1. 往期文章回顾
量化策略系列
2. 均值回归策略简介
当我们使用炒股软件进行操作时,选择任意一只股票并查看其历史价格走势,可以观察到以下特点:在过去的某个时间段内,很难有股票能够实现持续上涨,同样,也很少有股票能够持续下跌;大多数股票的价格走势呈现出一种起伏不定的规律,在K线图上呈现出明显的“波浪形”特征。例如,从A股市场过去十年的交易数据来看,当某只股票出现“跳空高开”的现象时,随后的几个交易日必然会出现回调补缺的情况。基于这一现象,我们提出假设:股票价格在变动过程中具有一定的“恢复力”,即当一只股票的涨跌过于剧烈,或者涨跌行情持续时间过长时,其价格趋势将出现显著的反向变化,从而破坏原有的价格波动格局。这种现象通常被我们称为“超跌反弹”和“超涨回调”。而均值回归策略(Mean-Reversion Method)的核心思想是通过量化分析,寻找那些偏离市场均值但又具有强烈恢复力的股票,并在价格回归均值的过程中进行交易,以实现投资收益。简单来说,均值回归策略是一种“买入低点、卖出高点”的操作方法。需要注意的是,这一策略与我们之前讨论的动量策略在操作思路上有截然相反之处。
各种策略都必须以理论为依据,多种因素能够说明股票的均值回归现象:
投资者往往受到市场情绪波动的影响,这种心理会导致他们在股票价格出现一定波动时做出过激反应。例如,当一只股票在一段时间内持续走高,但是突然有所回落的时候,前期的获利盘为了锁定收益而提前卖出,而后期的追高盘由于担心被套牢也很可能及时止损抛出。这种抛售现象很可能会导致进一步的抛售,从而破坏原有上涨趋势。
在本节中,我们关注大资金突然流入流出的扰动。在高频交易的背景下,这一现象更为显著:当某只股票出现超大额买单流入时,其价格会出现快速上涨。随着这一笔买单力量逐渐减弱,股票价格将逐步回落。当然,这一种解释本质上与第一种解释可以归为一类。
在无风险套利机会的出现方面,例如,当某只ETF发生这种情况时,投资者可以利用这一现象进行套利操作。具体而言,当某人大量买入某只ETF时,该ETF的价格在短时间内迅速上涨,但其成分股却在同时间出现大量卖单,从而形成显著的无风险套利机会。此时,投资者可以通过以相同的比例买入该ETF的成分个股,并同时卖出对应的ETF,从而实现无风险收益。这样,该ETF的成分股价格将会上涨,ETF的价格则会下降,最终达到一种市场均衡状态。
3. 配对交易策略简介
配对交易策略被归类为均值回归策略中的一种。此类策略是一种历史悠久的投资技巧,广泛应用于华尔街众多对冲基金的日常交易中。
配对交易(Pairs Trading)的核心概念在于识别出在股票市场中具有高度相似历史走势的两只股票。基于波动性的一致性,这两只股票在同一时间段内的涨跌趋势和幅度通常非常相似,这即为“均衡状态”(Balance)。当出现显著偏离均值的情况时,我们会在低于均值的股票上开多头头寸(即买入),并在高于均值的股票上开空头头寸(即卖空)。当这两只股票回归至均值水平时,我们执行平仓操作,从而实现收益的锁定。
举个不太恰当的例子,好比一对儿在同一环境下成长的双胞胎兄弟姐妹,他们的行为模式和思维方式往往具有相似性。通过观察一个兄弟的行为特征和性格特质,我们可以推测另一个兄弟的内心活动和行为模式。
从基本思想可以看出,配对交易的收益本质上是相对的。当这种均衡关系必然成立且忽略持仓成本时,该策略必然盈利。需要注意的是,该策略的实施必须满足以下三个条件:其一,前提是所选股票标的必须允许做空操作(如A股市场中的融券);其二是前提是股票市场中确实存在这样的一对“双子星”;其三是前提是可以通过历史数据准确捕捉到这种均衡关系,并且这种均衡关系在未来能够持续稳定。
对于第一个前提,我们可以通过选择具有做空能力的股票来实现投资操作,需要注意的是,融券操作的成本相对较高,在制定投资策略时需要特别注意。对于第二和第三个前提,通过实证分析可以发现,具有相似业绩的股票对确实存在,例如在同一家行业中,美的集团和格力电器就属于此类股票,此外,一些大型银行股之间也存在这种关系。在实证分析部分,我们还将对这一现象进行进一步验证。
首先,我们需要量化股票的“变化趋势(tendency)”这一指标。由于各个股票的初始价格不同,因此,10元股票上涨至11元与100元股票上涨至101元所面临的难度是不相同的。虽然两者都实现了1元的涨幅,但股票一已达到涨停,而股票二仅增加了1%的波动幅度。因此,在评估“趋势是否一致”时,我们更倾向于使用股票价格的变化率,而非价格的绝对变化量,以更准确地反映股票趋势这一特性。在本文的分析中,我们采用“对数收益率(logarithm return)”这一指标,替代传统的“简单收益率(simple return)**,以更精确地衡量股票的收益情况。
注释:在区间较短的情况下,两种收益率趋于相等。针对对数收益率相对于一般简单收益率的优势,我打算另文进行详细说明。
在分析过程中,我们需要度量股票之间的关联程度。所谓关联,即是股票价格变动的同步性。具体而言,即是当一只股票上涨时,另一只也会同步上涨;当一只股票下跌时,另一只也会同步下跌;并且,涨跌幅度的比例也应当保持一致。衡量这种关联程度的指标是什么?即是相关系数(correlation),它即为衡量两个随机变量之间相关关系的一种简单而有效的度量工具(numerical feature)。在股票选择过程中,我们可以通过筛选出具有显著高度关联关系的股票对来构建我们的对冲交易标的。
下面,我们就用美丽的数学公式 来刻画配对交易这一思想~
对两只股票进行说明,分别为股票A和股票B。在时间段_t_1_至_t_2_内(其中_t_1_早于_t_2_),我们分别考察其收益回报率。具体而言,股票A的收益回报率为:
R_A(t_1, t_2)=ln\left(\frac{P_A(t_2)}{P_A(t_1)}\right)
股票B的收益回报率为:
R_B(t_1, t_2)=ln\left(\frac{P_B(t_2)}{P_B(t_1)}\right)
其中,P_A(t_2)表示A股在时间点t_2的价格,P_A(t_1)表示A股在时间点t_1的价格,P_B(t_2)和P_B(t_1)分别表示B股在相应时间点的价格。
在一段时间内,其相关系数体现为:分子部分为各时间点的协方差之和,分母则为协方差平方和的平方根。具体而言,分子计算式为\sum_{t=t1+1}^{t2}{ [R_A(t-1, t)-\overline{R}_A(t_1, t_2)] \cdot [R_B(t-1, t)-\overline{R}_B(t_1, t_2)]},而分母则为\sqrt{ \sum_{t=t1+1}^{t2}[R_A(t-1, t)-\overline{R}_A(t_1, t_2)]^2 \cdot \sum_{t=t1+1}^{t2}[R_B(t-1, t)-\overline{R}_B(t_1, t_2)]^2 }。
假设两者的均衡价格为:
\overline{R}_{AB}(t_1, t_2)=\frac{1}{2}(R_A(t_1, t_2)+R_B(t_1, t_2))
注:该等权重分配的合理性的不言自明性显而易见。
我们规定偏离均值的程度为:
\tilde{R}_A(t_1, t_2)=R_A - \overline{R}_{AB}(t_1, t_2)\tilde{R}_B(t_1, t_2)=R_B - \overline{R}_{AB}(t_1, t_2)
通过同时买入被低估的股票并卖出被高估的股票,我们能够构建一个有效的对冲交易策略。
4. 配对交易策略构建流程
本文以 货币中性(Dollar-Neutral) 策略(多空策略)为例,进行策略说明。
Step 0 : 设定股票池 S = { 1, 2, …, N },设定回看时间段 T = { -T , …, -1 },设定回测时间段 n = { 0, 1, …, n },计算该回测时间段内每只股票的价格对数收益率 R i (-T , -1),并计算各股票之间的相关系数矩阵 r NN,进入Step 1。
Step 1 : 持续挑选相关系数矩阵中高于设定阈值(以95%的显著性水平为例)的股票对A和B(即 r AB > 0.95),直至其满足皮尔逊相关性检验的条件。令 t 初始化为0,进入Step 2。Step 2 : 计算相关系数矩阵 R,并从中筛选出满足 r AB > 0.95 的股票对。
Step 2:
Step 3: 计算股票A和B的对数收益率及价差。当价差的绝对值超过预先设定的阈值ε时:
则构建以下条件下的多空头寸组合:
(1)资金配比限制:股票A和B的头寸加权总资金为2I,即:
P_A(t)·|Q_A(t)| + P_B(t)·|Q_B(t)| = 2I
(2)中性久期约束:股票A和B的头寸加权价差为零,即:
P_A(t)·Q_A(t) + P_B(t)·Q_B(t) = 0
其中,I代表预先分配的多空头寸总资金量。进入Step 4;
Step 4 : 令 t = t + 1。若 t > n , 则进入Step 5;否则,返回 Step2;
Step 5 : 计算该股票策略在回测期间的收益率表现,绘制该策略在回测期间的净值曲线图,并与基准策略进行比较,评估该策略的有效性。
在现有策略框架下,我们采用的是一种“建仓-持有-平仓”的投资逻辑模式。此外,还可以采用“建仓-动态调仓-平仓”的策略进行操作。具体而言,我们需要在每一个时间点_t_重新评估并计算A、B所需持有的数量,然后根据新的计算结果进行相应的仓位调整。
5. 代码实现与回测结果
Python 代码实现
import numpy as np
import pandas as pd
import tushare as ts
# 未完待续
C++ 代码实现
# include <iostream>
void main(){
}
// 未完待续
由于作者时间实在有限,回测部分未完待续,预计将在11/30之前补齐,敬请期待
本系列后续文章介绍
量化策略系列
1
2
3
量化策略系列
写在最后
欢迎广大读者朋友来跟作者一起参与指正,涵盖语言、格式以及内容等方面的意见和建议,共同进步!
如有任何疑问或建议,请在文章底部留言,或通过勘误邮箱mikeysun_bugfix@163.com反馈。
感谢诸位!(写文章辛苦,期待您的关注与支持!)
本文持续更新中。最后更新时间:11/11/2019
