【量化策略系列】股票均值回归策略之一——配对交易策略(Pairs Trading)
本文持续更新中。最后更新时间:11/11/2019
文章目录
- 1. 往期文章回顾
- 2. 均值回归策略简介
- 3. 配对交易策略简介
- 4. 配对交易策略构建流程
- 5. 代码实现与回测结果
- Python 代码实现
- C++ 代码实现
- 本系列后续文章介绍
- 写在最后
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
【量化策略系列】股票均值回归策略之一——配对交易策略(Pairs Trading)相关推荐
- 股票配对交易策略-最小距离法
策略 配对交易( Pairs Trading)为这种困境提供了一种既能避险又盈利的策略,其又被称之为价差交易或者统计套利交易,是一种风险小.收益较稳定的市场中性策略.一般的做法,是在市场中寻找两只历史 ...
- USDCNY--USDCNH 配对交易___境内及离岸人民币即期的协整关系及配对交易策略分析
由于中国没有实现资本项下的可自由兑换,目前人民币的外汇交易存在境内及境外两个市场.在境内交易的CNY和境外交易的CNH,本质都是人民币,从这个角度上看,两者具有高度相关性.但是由于两者的市场形态.监管 ...
- python数据分析及可视化(十七)聚宽(双均线分析、因子选股策略、多因子选股策略、均值回归理论、布林带策略、PEG策略、权重收益策略)
聚宽 聚宽是一个做金融量化的网站,https://www.joinquant.com,登录注册,如果你写的文章.策略被别人采纳,增加积分,积分用于免费的回测时长.在我的策略,进入策略列表,里面有做好的 ...
- 量化交易陷阱和R语言改进股票配对交易策略分析中国股市投资组合
最近我们被客户要求撰写关于量化交易的研究报告,包括一些图形和统计输出. 计算能力的指数级增长,以及量化社区(日益增长的兴趣使量化基金成为投资者蜂拥而至的最热门领域. 量化交易陷阱和R语言改进股票配对交 ...
- 【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略
数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数 ...
- 金融量化 — 配对交易策略 (Pair Trading)
1. 配对交易策略 1.1.引言 在量化投资领域,既然严格的无风险套利机会少.收益率微薄,实际的执行过程中也不能完全消除风险.那么如果有一种选择,能够稍微放松100%无风险的要求,比如允许有5%的风险 ...
- 58、【backtrader股票策略】两资产的配对交易策略(pairs trading strategy)
这个策略的思路来自于<151 trading strategies>,本文主要分为四个部分:策略逻辑描述.策略代码.策略绩效.策略简单分析 策略逻辑说明 这个策略的逻辑有些简单,一般而言, ...
- 量化投资实战(三)之配对交易策略---协整法
点赞.关注再看,养成良好习惯 Life is short, U need Python 初学量化投资实战,[快来点我吧] 配对交易策略实战-协整法 基本流程 配对组合 --> 计算价差 --&g ...
- 量化投资实战(二)之配对交易策略---最短距离法
点赞.关注再看,养成良好习惯 Life is short, U need Python 初学量化投资实战,[快来点我吧] 配对交易策略实战-最短距离法 基本流程 配对组合 --> 计算价差 -- ...
最新文章
- 天呐,程序员有女朋友了!
- frp后台运行和停止
- 【链接】调查显示:超20%美国大学生曾花学生贷款投
- leetcode1119. 删去字符串中的元音 小学难度
- proxy_pool开源项目攻克学习
- C#中IDisposable 回收非托管资源
- python 删除断点_给 Python 开发者的四条忠告!强烈建议收藏
- TopCoder SRM502 Div1 1000 动态规划
- 20款知名PHP集成环境推荐与优缺点分析、php环境大全推荐(PHP环境搭建包)
- Sublime格式化代码快捷键
- python三维向量运算_使用Python编写一个三维向量,实现向量的加法减法,点乘叉乘...
- Python爬虫(三):python抓取网页中的图片到本地
- 信号偏移成为边界地区呼吸的痛
- Paragraph 对象'代表所选内容、范围或文档中的一个段落。Paragraph 对象是 Paragraphs 集合的一个成员。Paragraphs 集合包含所选内容、范围或文档中的所有段落。...
- python sort多条件排序
- 医院计算机系统日常维护记录表,医院计算机信息管理系统维护措施
- IP SSL证书购买方式
- 程序员面试金典01.02. 判定是否互为字符重排
- 单片机编程自己编写的一个很简单的传感器控制代码
- 音频特征提取方法和工具汇总