博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
配对(套利)交易之一,筛选符合配对规则的股
阅读量:4294 次
发布时间:2019-05-27

本文共 2919 字,大约阅读时间需要 9 分钟。

在进行配对交易之前,需要寻找高相关性标的,二者符合如下三种模式均可以通过做多/做空组合实现套利(其本质为均值回归,或者是误差回归)

y=x+e

y=ax+e

y=ax+b+e

其中,e是正态随机误差项,a,b都是常数项,其实以上三个等式都可以用第三个等式表示,之所以分别列出,是由于目前所见到的大部分策略,其分析模块是没问题的,使用相关性和协整关系判断,但在策略构造过程中,其实只支持第一种情况(也是只是就做多1份标的,同时做空1份标的),这样会使套利效果大打折扣.

发掘高相关性的股票(期货)对,主要2方法,相关和协整,那个效果好一些,本篇文章会进行比对

# 读取数据all_data = pd.read_csv('./single/data/rq_getprice_000300.XSHG_200901_201212_data.csv')all_data = all_data.fillna(method='bfill').fillna(method='ffill')all_data = all_data.dropna(axis=1)all_data.rename(columns={'Unnamed: 0': 'date'}, inplace=True)all_data = all_data.set_index('date')all_data = all_data[all_data.index > '2011-01-01']pp.pprint('all_data')pp.pprint(all_data.head())# 方法1,相关性法# 计算想关性corr_df = all_data.corr()corr_df.loc[:, :] = np.triu(corr_df, 1)column_list = corr_df.columns.valuescorr_pair_list = [(column_list[i], column_list[j], corr_df.values[i, j]) for i in range(0, corr_df.shape[0]) for j in                  range(0, corr_df.shape[0]) if abs(corr_df.values[i, j]) > 0.95]pp.pprint(corr_pair_list)# 想关性TOP5top5 = pd.Series([k for i, j, k in corr_pair_list]).apply(abs).sort_values(ascending=False)[:5]corr_pair_list = [(i, j, k) for i, j, k in corr_pair_list if abs(k) >= top5.iloc[-1]]pp.pprint(corr_pair_list)

基于相关系数最高top5筛选出的股票对

计算diff,均值,方差和得到上下界,可视化

使用协整关系筛选套利股票对(这部分代码替换上部分代码中相关性计算排序部分即可)

注意:由于协整关系计算非常慢,如果hs300,则需要计算2-2关系300*300/2=45000次计算,太费时,故用相关系数计算top30,在计算协整关系.

# 方法2,pvalue法(相关性协助)# 获得强协整性股票对(由于协整计算较慢,所以计算前先取得top1/2的相关性关系,在计算协整,减少计算量)corr_df = all_data.corr()corr_df.loc[:, :] = np.triu(corr_df, 1)median = pd.Series(corr_df.values.flatten()).apply(abs).sort_values(ascending=False).values[30]column_list = corr_df.columns.valuescorr_pair_list = [(column_list[i], column_list[j], corr_df.values[i, j]) for i in range(0, corr_df.shape[0]) for j in                  range(0, corr_df.shape[0]) if abs(corr_df.values[i, j]) > median]pp.pprint(corr_pair_list)coint_pvalue_list = list()for i, j, k in corr_pair_list:    coint_pvalue_list.append((i, j, sm.tsa.stattools.coint(all_data[i], all_data[j])[1]))# 取得p值最小的top5top5 = pd.Series([k for i, j, k in coint_pvalue_list]).sort_values()[:5]coint_pvalue_list = [(i, j, k) for i, j, k in coint_pvalue_list if k <= top5.iloc[-1]]pp.pprint(coint_pvalue_list)corr_pair_list = coint_pvalue_list

筛选出的股票对

价差diff和上下界

整体看上面结果都很不错,基本上误差都分布在mean+/- 1*std,只要价格有回归趋势,就可以通过价买入组合高价卖出组合进行套利.并且可以屏蔽系统性风险(要求持有期二者协整关系依然保持)

二者比较的化,更倾向于协整关系,留意到协整关系最后得到diff其实更为"杂乱",更符合随机分布,而相关关系得到的残差diff内部依然存在弱的趋势倾向.

 

参考:

统计套利(一)利用相关系数进行配对交易

https://www.ricequant.com/community/topic/2039/
统计套利(二),利用协整关系进行配对交易
https://www.ricequant.com/community/topic/2053/
统计套利(三)自动寻找协整股票对
https://www.ricequant.com/community/topic/2408/#share-source-code_content_13561_1278376

配对交易(Paper Version)

https://www.ricequant.com/community/topic/51
配对交易
https://www.ricequant.com/community/topic/849/%E9%85%8D%E5%AF%B9%E4%BA%A4%E6%98%93/3
统计套利 配对交易 第二集
https://uqer.io/v3/community/share/582b2431228e5b9c85a59585

转载地址:http://whyws.baihongyu.com/

你可能感兴趣的文章
JDK1.8-Stream API使用
查看>>
cant connect to local MySQL server through socket /tmp/mysql.sock (2)
查看>>
vue中的状态管理 vuex store
查看>>
Maven之阿里云镜像仓库配置
查看>>
Maven:mirror和repository 区别
查看>>
微服务网关 Spring Cloud Gateway
查看>>
SpringCloud Feign的使用方式(一)
查看>>
SpringCloud Feign的使用方式(二)
查看>>
关于Vue-cli+ElementUI项目 打包时排除Vue和ElementUI
查看>>
Vue 路由懒加载根据根路由合并chunk块
查看>>
vue中 不更新视图 四种解决方法
查看>>
MySQL 查看执行计划
查看>>
OpenGL ES 3.0(四)图元、VBO、VAO
查看>>
OpenGL ES 3.0(五)纹理
查看>>
OpenGL ES 3.0(八)实现带水印的相机预览功能
查看>>
OpenGL ES 3.0(九)实现美颜相机功能
查看>>
FFmpeg 的介绍与使用
查看>>
Android 虚拟机简单介绍——ART、Dalvik、启动流程分析
查看>>
原理性地理解 Java 泛型中的 extends、super 及 Kotlin 的协变、逆变
查看>>
FFmpeg 是如何实现多态的?
查看>>