配对(套利)交易之一,筛选符合配对规则的股

2024-06-05 10:48

本文主要是介绍配对(套利)交易之一,筛选符合配对规则的股,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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.values
corr_pair_list = [(column_list[i], column_list[j], corr_df.values[i, j]) for i in range(0, corr_df.shape[0]) for j inrange(0, corr_df.shape[0]) if abs(corr_df.values[i, j]) > 0.95]
pp.pprint(corr_pair_list)
# 想关性TOP5
top5 = 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.values
corr_pair_list = [(column_list[i], column_list[j], corr_df.values[i, j]) for i in range(0, corr_df.shape[0]) for j inrange(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值最小的top5
top5 = 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://www.chinasem.cn/article/1032845

相关文章

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

关联规则(一)Apriori算法

此篇文章转自 http://blog.sina.com.cn/s/blog_6a17628d0100v83b.html 个人觉得比课本上讲的更通俗易懂! 1.  挖掘关联规则 1.1   什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后

电子电气架构---私有总线通信和诊断规则

电子电气架构—私有总线通信和诊断规则 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、

Superset二次开发之Select 筛选器源码分析

路径:superset-frontend/src/filters/components/Select  源码文件: 功能点: 作用 交互 功能 index.ts作为模块的入口点,导出其他文件中定义的主要组件和函数。它使其他文件中的导出可以被外部模块使用。 SelectFilterPlugin.tsx 定义主要的插件类 SelectFilterPlugin 和组件 Sele

移动UI:分类列表页、筛选页的设计揭秘。

移动UI的列表页设计需要考虑用户体验和界面美观性,以下是一些建议的设计要点: 1. 列表项的展示: 列表页应该清晰地展示各个列表项,包括标题、副标题、缩略图等内容,以便用户快速浏览和识别。可以使用卡片式布局或者简洁的列表布局。 2. 搜索和筛选: 如果列表项较多,应该提供搜索和筛选功能,方便用户查找感兴趣的内容。搜索框和筛选条件可以放置在页面顶部或者底部,以便用户方便操作。

量化交易面试:什么是连贯风险度量?

连贯风险度量(Coherent Risk Measures)是金融风险管理中的一个重要概念,旨在提供一种合理且一致的方式来评估和量化风险。连贯风险度量的提出是为了克服传统风险度量方法(如VaR,风险价值)的一些局限性。以下是对连贯风险度量的详细解释: 基本概念: 连贯风险度量是指满足特定公理的风险度量方法,这些公理确保了风险评估的一致性和合理性。 这些公理包括:非负性、次可加性、同质性和单调

Python中的单下划线和双下划线使用规则

引言 Python 遵循一些关键的命名规则,这些规则涉及到使用单个或双下划线。通过这些规则,你可以在应用程序接口(API)中区分可访问的和不可访问的标识符,编写适用于继承的稳健类,以及防止命名冲突等。 遵守这些规则,你的代码将显得更贴近 Python 的风格,并且在其他 Python 程序员看来更加统一。这项技能在你为其他开发者编写代码时尤为重要。 本文[1]将带你了解: 基于使用下划线

【0324】Postgres内核 Shared Buffer Access Rules (共享缓冲区访问规则)说明

0. 章节内容 1. 共享磁盘缓冲区访问机制 (shared disk buffers) 共享磁盘缓冲区有两套独立的访问控制机制:引用计数(a/k/a pin 计数)和缓冲区内容锁。(实际上,还有第三级访问控制:在访问任何属于某个关系表的页面之前,必须持有该关系表的适当类型的锁。这里不讨论关系级锁。) Pins 在对缓冲区做任何操作之前,必须“对缓冲区pin”(即增加其引用计数, re

[mysql]SQL语言的规则和规范

规则 是什么呢,规则就是我们最基本,每时每刻都要遵守的比如人行道靠右,不能逆行, 规范 呢就是锦上添花,如果你不这么做,是不那么道德,不那么好的,就像小学生见到老师要问好,不问好可以吗,当然也是可以的,但是这样就不那么礼貌了。但是也不会开除你, 规范是建议。规则: USE dbtest2 SELECT * FROM emp 我们之前使用cmd操作的时候,是不是必须要先选择一个数据

如何借助AI快速筛选和整理文献?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 在撰写毕业论文时,文献综述是必不可少的部分。它不仅为你的研究提供理论背景,还展示了你对研究领域的深入理解。然而,文献综述的撰写过程常常让学生感到头疼,尤其是面对海量文献时,如何有效筛选、整理和撰写是一大难题。 本文将为大家介绍如何利用AI工具帮助你轻松高效地完成文献综述的写作。我们将详细讲解如何快速