行业指数的周期以及跑赢指数的分位数是多少?

前言

本篇是量化系列的第一篇文章。《量化十万个为什么》系列旨在讨论一些自己心中的疑问,并且通过尝试解答这些问题来提升自己对于市场的认知水平。
PS:博主水平很辣鸡,请大家轻喷,多多指教!

一、为什么提这个问题?

前面一篇文章讨论了对于所有个股来说,跑赢指数的分位数大概是多少,接下来我们看一看,对于行业指数来说,分位数是多少,并且对于行业轮动的周期一般又是多少。

二、分析

我们从选取申万一级作为行业指数,时间选取2015年至2020年

# 获取申万一级的所有代码
start_date = '20150101'
end_date = '20201231'
index_dic = index_manager.GetTotalIndexDic()
index_df = index_manager.GetTotalIndexInfo(type='DataFrame')
sw_df = index_df[index_df['IndexClassName'] == '申万一级指数']# 从网上下载数据
data_dic= {}
for index_code in sw_df['IndexStockName']:tmp_code = index_code[0:6]index_dic[index_code].PrintMyself()df = index_manager.Internet.GetSWIndex(tmp_code,start_date=start_date, end_date=end_date,data_type='Day')data_dic.update({index_code:df})time.sleep(10)

(PS:这里有一个申万一级命名的小bug,申万一级的休闲服务等同于申万一级的餐饮旅游,代码:801210.SW;申万一级的电子等同于申万一级的电子元器件,代码:801080.SW)

同时还要注意下,申万一级在2016年4月18日和2016年4月19日是没有数据的(原因未知),可以使用tick数据按照当时的分类来计算。
在这里插入图片描述

然后来讨论这样子一个问题,假如你开了上帝视角,获得了未来一段时间内所有的一级行业的走势,理论上说,在T+1的规则下,我们应该每天换入涨幅最高的那个行业,但是这个对于现实操作没有任何指导意义(我们研究的目的还是在行业指数和benchmark之间找到某些周期性的规律,或者说找到相对平稳的时间序列)。无论如何,我们先来看一看,之前个股的结论在行业指数上市一个什么效果。

# 从 tushare 上获取 沪深300 数据
benchmark_df = pro.index_daily(ts_code='399300.SZ', start_date=start_date, end_date=end_date)
benchmark_df = benchmark_df.sort_values(by='trade_date').reset_index(drop=True)
benchmark_date_se = pd.to_datetime(benchmark_df['trade_date'].astype(str))
benchmark_date_se.name = 'datetime'
benchmark_df.index = benchmark_date_sebenchmark_price = benchmark_df['close']test_day_num_lst = [1,2,3,5,10,20,30]
answer_dic = {}
for past_day_num in test_day_num_lst:benchmark_price = benchmark_df['close']benchmark_return = (benchmark_price - benchmark_price.shift(past_day_num))/benchmark_price.shift(past_day_num)total_answer_df = pd.DataFrame(index=benchmark_date_se)for stock_name in data_dic.keys():stock_df = copy.copy(data_dic[stock_name])close_price = stock_df['Close'].astype(float)stock_return = (close_price - close_price.shift(past_day_num))/close_price.shift(past_day_num)# 把结果合并比较tmp_df = pd.DataFrame(columns=['result','stockreturn','bmreturn'],index=benchmark_date_se)tmp_df['bmreturn'] = benchmark_returntmp_df.loc[stock_return.index,'stockreturn'] = stock_returnstock_higher_index = tmp_df[tmp_df['stockreturn'] > tmp_df['bmreturn']].indexstock_lower_index = tmp_df[tmp_df['bmreturn'] > tmp_df['stockreturn']].indextmp_df.loc[stock_higher_index,'result'] = 1tmp_df.loc[stock_lower_index,'result'] = 0total_answer_df[stock_name] = tmp_df['result']total_merge_df = copy.copy(total_answer_df).Ttmp_se = total_merge_df.fillna(0).sum()/(len(total_merge_df) - total_merge_df.isnull().sum())answer_dic.update({past_day_num:tmp_se})

结果如下:

持仓周期均值方差
1 日0.4930.253
2 日0.490.254
3 日0.4880.256
5 日0.4850.255
10 日0.4720.251
20 日0.4580.26
30 日0.4440.252

30日概率如下图
在这里插入图片描述
接着我们来考虑策略,假设我们要尽量减少换仓次数,拉长持仓周期,对于跑赢指数这个目标来说,一般而言有 0.4*28 = 11.2个行业指数可以跑赢沪深300,因此我们假设,对于一定周期的持仓来说,只要return在前10名的,即为优秀,我们看一下优秀行业的持续时间有多少。
我们以过去20天的return取横向取rank,先看看效果怎么样:

past_day_num = 20
total_df = pd.DataFrame(index=benchmark_df.index)
for stock_name in data_dic.keys():stock_df = copy.copy(data_dic[stock_name])close_price = stock_df['Close'].astype(float)stock_return = (close_price - close_price.shift(past_day_num))/close_price.shift(past_day_num)total_df[stock_name] = stock_return
rank_df = total_df.rank(axis=1,ascending=False)

我们取两个行业来看看,分别是: 纺织服装(801130.SW)和 银行 (801780.SW)
在这里插入图片描述
可以看到,在某些时间段,行业轮动还是非常明显的,例如在2015年前半年,纺织服装就明显地要强于银行。我们把指数画出来看看。
在这里插入图片描述
从指数的走势上看,纺织服装确实在2015年非常地强势,到了2017年开始才慢慢变熊。从直观上判断,这种行业周期要持续好几年,但是这个结论显然不是我们想要的,毕竟我们很少做几年的持仓。
为了找出短时间内行业轮动的周期,我们对前面求得的rank_df做傅里叶变换,求出一个大致的行业周期。我们来看一看,计算机和纺织服装的傅里叶变换
在这里插入图片描述
我们尝试取最高能量的前3名,做加权平均,求周期

from scipy.fftpack import fft,ifft
period_dic = {}
for stock_name in rank_df.columns:se = rank_df[stock_name]y = (se.dropna()).values#归一化处理yf1=abs(fft(y))/((len(y)/2)) #由于对称性,只取一半区间yf2 = yf1[range(int(len(y)/2))]  xf = np.arange(len(y)) xf2 = xf[range(int(len(y)/2))]threshold = np.mean(yf2) + 1*np.std(yf2)df = pd.DataFrame({'X':xf2[1:],'Y':yf2[1:]})tmp_df = df.sort_values(by='Y',ascending=False).iloc[0:3].reset_index()ave_x = np.sum(tmp_df['X']*tmp_df['Y'])/tmp_df['Y'].sum()T = len(yf2)/ave_xperiod_dic.update({stock_name:T})

结果如下:

行业名称行业代码周期(日)
纺织服装801130.SW146.49
公用事业801160.SW63.52
国防军工801740.SW28.78
综合801230.SW35.16
银行801780.SW45.38
传媒801760.SW56.46
钢铁801040.SW66.43
有色金属801050.SW47.65
机械设备801890.SW61.85
房地产801180.SW34.69
建筑装饰801720.SW106.87
电气设备801730.SW53.4
非银金融801790.SW59.16
轻工制造801140.SW53.63
建筑材料801710.SW72.39
家用电器801110.SW53.54
汽车801880.SW46.61
食品饮料801120.SW49.89
农林牧渔801010.SW70.96
商业贸易801200.SW110.26
化工801030.SW53.01
交通运输801170.SW53.66
通信801770.SW46.93
医药生物801150.SW64.58
采掘801020.SW61.08
计算机801750.SW37.17
休闲服务801210.SW122.88
电子801080.SW61.95

总结

由上面的表格可以看出,可以看到,行业轮动的周期,实际上相差还是蛮大的,最快的和最慢的差了有差不多5倍之多。而且从傅里叶变换的图形来看,频域上的图形并没有特别突出的某几根线。因此这个结论是否有实践意义,还有待后面进一步的验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42852.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过通达信接口获取最近的分钟级别行情数据?

如何通过通达信接口获取最近的分钟级别行情数据?对于做短线策略的交易者来说,得到实盘的量价数据之后,还需要把这些数据转换为各种技术指标,在策略中去使用和分析。 由于本地采样时间和交易所推送数据时间会有微小的差别&#xf…

POSTMAN 启动特别慢解决方案

需要为POSTMAN添加环境变量: 高级系统设置-环境变量 添加一个新的系统变量: 变量名:POSTMAN_DISABLE_GPU 变量值:true 重新启动POSTMAN

GPT套壳还能走多远?第一批AIGC创业公司开始裁员?新初创公司又该如何应对大模型的快速迭代升级?

AIGC创业投融资火爆推进,一则裁员公告却从天而降引爆关注: 公告来自首批AIGC明星独角兽Jasper。 早在ChatGPT爆火之前,AIGC也还不是大家耳熟能详的概念时,这家公司就已经背靠GPT-3,在18个月从白手起家到估值15亿美元。…

【Python】学习笔记

【Python】学习笔记 【Python】1. in和not in操作2.glob3.Pandas.apply()4.df.dropna()5.fine-tune迁移学习——Fine-tune蒸馏 参考文献 【Python】 1. in和not in操作 利用in和not in操作符,可以确定一个值是否在列表中。像其他操作符一样,in和not in…

聚观早报|OpenAI发文介绍保障AI安全的方法;王慧文AI公司正式开张

今日要闻:OpenAI发文介绍保障AI安全的方法;印度或首次参与iPhone15首批供货;胡润全球白手起家U40富豪榜发布;王慧文 AI 公司正式开张;吴以岭卸任以岭药业董事长 OpenAI发文介绍保障AI安全的方法 美国当地时间 4 月 5 …

手写操作系统+shell+文件系统,绝了

去年秋招及年后找工作的小伙伴应该感受到了寒气逼人,机会又少、又卷……加上chatGPT的出现,可以预见未来几年,简单、基础、重复性工作大概率会被机器人取代……我们将何去何从呢?毫无疑问,成为技术大牛! 如…

友盟分享QQ的时候提示应用未正确授权错误码901111

今天打包分享qq的时候突然出现应用未正确授权错误码901111 于是就上友盟和腾讯开放平台上找对应错误码,居然没有发现对应的错误码! 经过一番折腾后发现 这个错误是因为在腾讯开放平台没有提交apk的原因导致的 登录腾讯开放平台选择我们的应用 点击进…

微信授权APP第三方登陆(Android)

前几天负责的程序说是要加入第三方登陆的功能,虽然现在有服务商集成了第三方登陆,但是平时所用的也就微信和QQ,就自己看文档写了,其中也遇到了一些问题,然后我把我做这个的流程贴出来,并附上对应的Demo&…

qq授权登录【网站应用】-java版本

第一步&#xff1a;先去qq互联进行创建网站应用&#xff1a;QQ互联 如下图&#xff1a; 第二步&#xff1a;引入qq的jar包&#xff0c;这里采用maven方式引用 <!--QQ坐标--><dependency><groupId>net.gplatform</groupId><artifactId>Sdk4J<…

微信授权登陆-app

app接入第三方微信登陆功能&#xff1a; 移动应用微信登录是基于OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统&#xff0c;前提你需要到微信开放平台注册开发者帐号&#xff0c;并拥有一个已审核通过的移动应用&#xff0c;并获得相应的AppID和AppSecret&#xff0c;申请…

Polkit授权管理

Polkit的配置&#xff1a; 查看polkit服务&#xff1a; 一个是agent&#xff0c;一个是polkit服务&#xff1b; agent包含监听接口和一个用户界面&#xff08;对话窗口&#xff09;&#xff0c;允许用户输入密码。Authentication Agent API Reference(https://www.freedesktop…

chatgpt赋能python:Python实现人脸识别

Python 实现人脸识别 随着人工智能技术的发展&#xff0c;人脸识别已经成为一个热门话题。Python作为一种流行的编程语言&#xff0c;也可以用来实现人脸识别。在这篇文章中&#xff0c;我们将介绍使用Python实现人脸识别的方法。 人脸识别的原理 人脸识别是通过计算机程序识…

比尔·盖茨到达北京;印度要求中国手机品牌高管应为印籍;Android 14 Beta 3 推出|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

亚马逊高调入局ChatGPT大战,发布Titan大模型、AI编程助手全免费,CEO:改变所有体验...

MLNLP社区是国内外知名的机器学习与自然语言处理社区&#xff0c;受众覆盖国内外NLP硕博生、高校老师以及企业研究人员。 社区的愿景是促进国内外自然语言处理&#xff0c;机器学习学术界、产业界和广大爱好者之间的交流和进步&#xff0c;特别是初学者同学们的进步。 转载自 |…

【图像分割】TransUNet学习笔记

论文名称&#xff1a;TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation 论文地址&#xff1a;https://arxiv.org/pdf/2102.04306.pdf 代码地址&#xff1a;https://github.com/Beckschen/TransUNet 前言&#xff1a; TransUNet将Transformer和U-…

什么是分镜?用UniStory管理分镜,制定拍摄计划和讨论故事板

分镜是什么 一部成功的电影、电视剧、广告、Vlog等视觉体验&#xff0c;都离不开分镜创作 分镜又叫做故事版&#xff0c;用于早期电影内容的策划和制作&#xff0c;在电影拍摄之前根据导演的要求&#xff0c;用图表的方式来说明影像的构成。一般120分钟的电影&#xff0c;需要2…

AI打LeetCode周赛进入前10%!秘诀:自然语言编程

张晓雅 投稿自 凹非寺量子位 | 公众号 QbitAI 还在自己吭哧吭哧打算法平台Leetcode的周赛&#xff1f;为什么不试试神奇的ChatGPT类AI呢&#xff01; 用AI助手Claude参加第103场周赛&#xff0c;共四道题&#xff0c;均完成了AC&#xff0c;能达到参与者前10%的成绩。 事情的起…

怎么做好电商运营?40份电商运营表格模板,你离优秀的运营只差了一个表格

怎么做好电商运营&#xff1f;40份电商运营表格模板&#xff0c;你离优秀的运营只差了一个表格 618又来了&#xff01;每年的这个时候&#xff0c;都是电商促销活动的高潮&#xff0c;各种优惠活动层出不穷&#xff0c;不管是对你是做电商运营的还是一个消费者&#xff0c;都很…

【跨境电商】EDM邮件营销完整指南(一):概念,区别与优势

关键词&#xff1a;EDM营销&#xff0c;邮件营销&#xff0c;跨境电商 2020年&#xff0c;全球每天发送和接收3064亿封电子邮件。世界上几乎每个人都有一个电子邮件地址&#xff0c;并且电子邮件营销继续拥有最高的投资回报率&#xff0c;这使得电子邮件营销策略对于企业营销工…

学习WooCommerce跨境电商社交媒体营销

WooCommerce 长期以来一直为电子商务店主提供多样化的服务。大约 500 万家商店啓用安装了免费的 WooCommerce 插件。 官方 WooCommerce 插件从 WordPress.org 下载了161,908,802次&#xff0c;并且还在增加。 超过5,106,506 个网站正在使用 WooCommerce。 本文网址: https…