您的位置:首页 > 大数据 > 人工智能

【量化策略系列】股票均值回归策略之一——配对交易策略(Pairs Trading)

2020-01-14 20:28 45 查看

本文持续更新中。最后更新时间:11/11/2019

文章目录

  • 本系列后续文章介绍
  • 写在最后
  • 1. 往期文章回顾

    [1] 作者简介
    [2] 【量化策略系列】股票动量策略(汇总篇)(未完)

    2. 均值回归策略简介

    当我们打开炒股软件,随便打开一只股票,并查看他的历史价格,我们可以发现一个有趣的现象:在过去的数月之间,很难有股票可以连续上涨,也很难有股票可以连续暴跌;大部分股票都呈现出一种起起伏伏、涨涨跌跌的波动姿态,在K线图中呈现出一种“波浪”的形态。再比如,从A股过去十年的历史数据来看,只要第二天出现了“跳空高开”的情况,则接下来数日内必然会出现回调补缺的现象。因此,针对这一现象,我们假设股票价格在变化过程中具有一定的“向心力”:当一只股票上涨或下跌的过于“剧烈”,或者上涨或下跌的行情持续时间过长,那么这只股票就有很强烈的“反转”趋势,从而破坏原有的变化趋势,这也就是我们经常说的“超跌反弹”与“超涨回调”。而所谓均值回归策略(Mean-Reversion Method),就是通过量化的手段,寻找这样偏离了其“均值”、但有强烈向其均值反转的股票,进入头寸后等待其价格向均值回归,从而提升投资胜率的一种交易策略。简单地说,均值回归策略就是一种 “买低卖高” 的策略。值得注意的是,这一策略逻辑与我们前文所讲的动量策略恰好相反。

    任何一种策略都需要有理论来支撑,许多可能的原因可以解释股票的均值回归现象:

    第一,投资者急于止损和止盈的心理。 例如,当一只股票在一段时间内持续走高,但是突然有所回落的时候,前期的获利盘为了锁定收益而提前卖出,而后期的追高盘由于担心被套牢也很可能及时止损抛出。而这种抛售现象很可能会导致进一步的抛售,从而破坏原有上涨趋势。

    第二,大资金突然流入流出的扰动。 这种情况在高频交易情况下更为显著:当某一只股票有超大的买单流入,那么股票会出现迅速拉升的情况。当这一笔买单力量逐渐削弱,那么冲高的股票价格就会有所回落。当然,这一种解释与第一种解释本质也可以归为一类。

    第三,无风险套利机会的出现。 例如,如果某一刻突然有人买入了大量的某只ETF,导致ETF在某一个瞬间价格迅速上升,但其成分股却在那一时刻有大量的卖单,导致出现了显著的无风险套利机会。这时,如果有人通过大笔买入该ETF对应比例的成分个股,并合成对应的ETF卖出,就可以获取无风险收益。这样以来,该ETF成分股价格会上升,ETF价格会下降,从而达到一种“均衡”的状态。

    3. 配对交易策略简介

    我将配对交易策略归类于均值回归策略中的一种。这一种方法是非常古老的投资交易技巧,也是华尔街的许多对冲基金仍然常用的交易策略之一。

    所谓配对交易(Pairs Trading),其基本思想就是在股票市场中寻找历史走势高度相似的两只股票。由于其波动的相似性,在同一段时间内,二者往往上涨和下跌的趋势和幅度基本一样,这就是所谓的“均衡”(Balance)。当某一刻出现了较大的走势偏离,那么我们就进入低于均值的那一只股票的多头(即买入),同时进入高于均值的那一只股票的空头(即卖空)。当二者回归了均值的时候,我们再对这两只股票进行平仓,从而锁定收益

    注:打个不太恰当的比方,好比一对儿在同一环境下长大的双胞胎,那他们的行为和想法很可能是一样的。通过对其中一个兄弟行为和性格的分析,我们可以大体上预测出另一个兄弟的所思所想。

    从上面的基本思想可以看出,配对交易的收益其实是一种相对收益。当这种均衡关系必然成立,并且忽略持仓成本的时候,这种策略必然会盈利。不过需要注意的是,这种策略的实现需要有三个前提:一是所选股票标的可以进行卖空操作(即A股市场中的融券);二是股票市场中真的存在这样的“孪生兄弟” ;三是这种均衡关系可以利用历史数据准确地获得,并且可以在未来稳定持续

    对于第一个前提,我们可以通过选择可融券的股票进行操作,不过需要注意,融券的成本较高,在策略指定的时候不可忽略。对于第二和第三个前提,我们从股票之间的关系和后面的实证分析可以看出,这样的“股票对”还真的存在:例如同行业中业绩相似的股票,比如说美的集团和格力电器,还有一些大的银行股。我们将在后面的实际分析之中对这一说法进行进一步验证。

    首先,我们要量化股票的“变化趋势(tendency)”。由于各个股票之间的价格基数不一样,因此我们容易知道10块钱的股票涨到11块钱和100块钱的股票涨到101块钱,这两种情况出现的难度是不一样的:虽然都是增长了一块钱,但是股票一实现了涨停,而股票二却仅仅波动了1%。因此,在考虑“趋势是否一致”这个问题的时候,我们应该用股票价格的变化率,而不是股票价格的变化绝对值, 来刻画股票“趋势”这一性质。在本文中,我们用“对数收益率(logarithm return)”来代替一般的“简单收益率(simple return)”。

    注:实际上,当考虑区间足够短的时候,二者近似相等。关于对数收益率相对于一般简单收益率的好处,我将另起文章进行说明。

    其次,我们需要量化股票的“相似程度” 。何为相似?即你涨我也涨,你跌我也跌;你涨多少我就涨多少,你跌多少我就跌多少。那什么样的指标可以衡量这种相似关系呢?相关系数(correlation) 即是用于衡量二个随机变量相关关系的一个简单且有效的数字特征(numerical feature)。在股票挑选中,我们可以在股票池中通过选择具有显著的高度相关关系的一对儿股票来组成我们的配对交易的标的。

    下面,我们就用美丽的数学公式来刻画配对交易这一思想~

    定义两只股票:股票A和股票B,在t1时刻到t2时刻(t1 < t2)的收益率分别为:
    RA(t1,t2)=ln(PA(t2)PA(t1)) R_A(t_1, t_2)=ln(\frac{P_A(t_2)}{P_A(t_1)}) RA​(t1​,t2​)=ln(PA​(t1​)PA​(t2​)​)RB(t1,t2)=ln(PB(t2)PB(t1)) R_B(t_1, t_2)=ln(\frac{P_B(t_2)}{P_B(t_1)}) RB​(t1​,t2​)=ln(PB​(t1​)PB​(t2​)​)

    在这段时间中,其相关系数有:
    ρAB(t1,t2)=∑t=t1+1t2[RA(t−1,t)−R‾A(t1,t2)]⋅[RB(t−1,t)−R‾B(t1,t2)]∑t=t1+1t2[RA(t−1,t)−R‾A(t1,t2)]2⋅∑t=t1+1t2[RB(t−1,t)−R‾B(t1,t2)]2 \rho_{AB} (t_1, t_2)=\frac{ \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 }} ρAB​(t1​,t2​)=∑t=t1+1t2​[RA​(t−1,t)−RA​(t1​,t2​)]2⋅∑t=t1+1t2​[RB​(t−1,t)−RB​(t1​,t2​)]2​∑t=t1+1t2​[RA​(t−1,t)−RA​(t1​,t2​)]⋅[RB​(t−1,t)−RB​(t1​,t2​)]​

    假设其均衡价格为:
    R‾AB(t1,t2)=12(RA(t1,t2)+RB(t1,t2)) \overline{R}_{AB}(t_1, t_2)=\frac{1}{2}(R_A(t_1, t_2)+R_B(t_1, t_2)) RAB​(t1​,t2​)=21​(RA​(t1​,t2​)+RB​(t1​,t2​))
    注:这里的等权重分配的合理性不言自明

    并规定其偏离均值的程度为:
    R~A(t1,t2)=RA−R‾AB(t1,t2) \tilde{R}_A(t_1, t_2)=R_A - \overline{R}_{AB}(t_1, t_2) R~A​(t1​,t2​)=RA​−RAB​(t1​,t2​)R~B(t1,t2)=RB−R‾AB(t1,t2) \tilde{R}_B(t_1, t_2)=R_B - \overline{R}_{AB}(t_1, t_2) R~B​(t1​,t2​)=RB​−RAB​(t1​,t2​)
    我们通过买入具有负向偏移程度为负的股票(被低估),并同时卖出具有正向偏移程度的股票(被高估),就可以构建一个配对交易策略啦!

    4. 配对交易策略构建流程

    本文以 货币中性(Dollar-Neutral) 策略(多空策略)为例,进行策略说明。

    Step 0: 给定股票池 S = { 1, 2, …, N },给定回看周期 T = { -T, …, -1 },给定策略的回测周期 n = { 0, 1, …, n }计算该周期内N只股票价格的对数收益率Ri (-T, -1),并计算出各股票对的相关系数矩阵 rNN,进入Step1;

    Step 1: 反复选择其中相关系数矩阵中大于给定阈值(以95%的相关性为例)的股票对A,B(即 rAB > 0.95),直至其通过Pearson相关性检验。令 t = 0, 进入Step 2;

    Step 2: 若股票A、B的持仓数量不为0,并满足:R~A(t−1,t)⋅R~A(t−2,t−1)<0, \tilde{R}_A(t-1, t) \cdot \tilde{R}_A(t-2, t-1) < 0 , R~A​(t−1,t)⋅R~A​(t−2,t−1)<0,则对所持仓位进行平仓,进入Step 4;否则进入Step 3 ;

    Step 3: 计算股票对A, B的对数收益率与偏移量。若偏移量大于某一给定阈值:
    ∣R~A(t−1,t)−R~B(t−1,t)∣>ϵ |\tilde{R}_A(t-1, t) - \tilde{R}_B(t-1, t) | > \epsilon ∣R~A​(t−1,t)−R~B​(t−1,t)∣>ϵ则建立满足如下数量的多空头寸:
    (1)总头寸数量限制: PA(t)⋅∣QA(t)∣+PB(t)⋅∣QB(t)∣=2⋅I \text{(1)总头寸数量限制: } P_A(t) \cdot |Q_A(t)| + P_B(t) \cdot |Q_B(t)| = 2 \cdot I (1)总头寸数量限制: PA​(t)⋅∣QA​(t)∣+PB​(t)⋅∣QB​(t)∣=2⋅I(2)货币中性条件: PA(t)⋅QA(t)+PB(t)⋅QB(t)=0 \text{(2)货币中性条件: } P_A(t) \cdot Q_A(t) + P_B(t) \cdot Q_B(t) = 0 (2)货币中性条件: PA​(t)⋅QA​(t)+PB​(t)⋅QB​(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] 【量化策略系列】股票均值回归策略之二——单聚类策略(Single Cluster)
    [2] 【量化策略系列】股票均值回归策略之三——多聚类策略(Multiple Clusters) (未完)
    [3] 【量化策略系列】股票均值回归策略(汇总篇) (未完)

    写在最后

    欢迎感兴趣的小伙伴来跟作者一起挑刺儿~ 包括但不限于语言上的、排版上的和内容上的不足和疏漏~ 一起进步呀!
    有任何问题,欢迎在本文下方留言,或者将问题发送至勘误邮箱: mikeysun_bugfix@163.com
    谢谢大家!
    (写文章不易,欢迎加粉或打赏!)

    本文持续更新中。最后更新时间:11/11/2019

    • 点赞 1
    • 收藏
    • 分享
    • 文章举报
    Mikey_Sun 发布了7 篇原创文章 · 获赞 3 · 访问量 1079 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: