当前位置:
首页 >
使用tushare获取股票数据并计算历史概念板块的平均涨跌幅
发布时间:2023/12/14
65
豆豆
生活随笔
收集整理的这篇文章主要介绍了
使用tushare获取股票数据并计算历史概念板块的平均涨跌幅
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
目录
概述
前提准备
编码
概述
有些板块的涨跌可能会有周期性,比如某个时间段某个板块大概率会上涨,为了研究这个内容,我们需要去查询某段时间间隔的板块平均涨跌幅,这里我单独计算涨幅和跌幅。
但是这个数据不能通过行情软件查询,所以可以使用tushare提供的数据接口进行处理。
备注:因为权限问题,所以调用这个封装接口后,调用需要花费的时间很多,需要暂停一分钟调用五个板块的数据。
同时笔者并不擅长使用python,所以代码会写得很简单,同时有详细的注解,方便大家参考,感谢支持。
前提准备
需要去https://waditu.com/注册账号,申请专用的appkey,才能进行调用哦,
这里主要调用了两个接口
同花顺板块指数:用来获取板块指数代码
同花顺板块指数行情:通过上面的指数代码获取板块数据。
编码
首先导入模块
import tushare as ts #导入模块 from flask import Flask,render_template,request #导入模块 import time import jsonts.set_token('你的key') pro = ts.pro_api()
然后这里调用同花顺板块指数接口,获取板块代码和名称封装到字典中
#板块列表 block_list = pro.ths_index()#概念板块列表 block_list_code={} #key:代码 val:板块名称 #最终数据 list_obj = []#获取行 for i in range(0,len(block_list)):if block_list.loc[i,'exchange']=='A':#查询A股block_list_code[block_list.loc[i,'ts_code']]=block_list.loc[i,'name']dic_keys = list(block_list_code.keys()) #板块代码 dic_vals = list(block_list_code.values()) #板块名称
然后用上面的数据获取数据,同时处理计算平均涨跌幅
#权限限制,每分钟查询五个板块的涨跌信息 for i in range(0,len(block_list_code)):up_sum = 0 #单个板块的总涨幅down_sum = 0 #单个板块的总跌幅up_ave = 0 #单个板块的平均涨幅down_ave = 0 #单个板块的平均跌幅count = 0 #涨的个数#查询板块行情df_daily = pro.ths_daily(ts_code=dic_keys[i], start_date=start_date, end_date=end_date, fields='ts_code,trade_date,open,close,high,low,pct_change')#求平均涨幅和跌幅for x in range(0,len(df_daily)):#判断有涨跌幅,不然会出错,None和Int不能运算if df_daily.loc[x,'pct_change'] != None:if df_daily.loc[x,'pct_change']>0:#上涨up_sum += df_daily.loc[x,'pct_change'] #累加涨幅count += 1else:down_sum += df_daily.loc[x,'pct_change']#累加跌幅#求平均涨幅if count==0:up_ave=0else:up_ave = round(up_sum/count,4) #求平均跌幅if (len(df_daily)-count)==0:down_ave=0else:down_ave = round(down_sum/(len(df_daily)-count),4) #为了省事用字典代替对象保存我们需要的数据obj_dic = {'name':dic_vals[i],'code':dic_keys[i],'up_ave':str(up_ave)+"%",'down_ave':str(down_ave)+"%"}list_obj.append(obj_dic)#取模暂停if (i+1)%5 == 0:time.sleep(62) #暂停62秒 #根据涨幅排序 list_obj2 = sorted(list_obj,key = lambda e:e.__getitem__('up_ave'),reverse=True)最后我是封装到了flask中,然后可以查询一下2019-2-11到2019-2-28日,也就是2019年春节过后哪些板块涨得比较好。
@app.route("/get_plate_ave",methods = ["GET"]) def get_plate_ave():start_date = request.args.get("start_date")end_date = request.args.get("end_date")#板块列表block_list = pro.ths_index()#概念板块列表block_list_code={} #key:代码 val:板块名称#最终数据list_obj = []#获取行for i in range(0,len(block_list)):if block_list.loc[i,'exchange']=='A':#查询A股block_list_code[block_list.loc[i,'ts_code']]=block_list.loc[i,'name']dic_keys = list(block_list_code.keys()) #板块代码dic_vals = list(block_list_code.values()) #板块名称#权限限制,每分钟查询五个板块的涨跌信息for i in range(0,len(block_list_code)):up_sum = 0 #单个板块的总涨幅down_sum = 0 #单个板块的总跌幅up_ave = 0 #单个板块的平均涨幅down_ave = 0 #单个板块的平均跌幅count = 0 #涨的个数#查询板块行情df_daily = pro.ths_daily(ts_code=dic_keys[i], start_date=start_date, end_date=end_date, fields='ts_code,trade_date,open,close,high,low,pct_change')#求平均涨幅和跌幅for x in range(0,len(df_daily)):#判断有涨跌幅,不然会出错,None和Int不能运算if df_daily.loc[x,'pct_change'] != None:if df_daily.loc[x,'pct_change']>0:#上涨up_sum += df_daily.loc[x,'pct_change'] #累加涨幅count += 1else:down_sum += df_daily.loc[x,'pct_change']#累加跌幅#求平均涨幅if count==0:up_ave=0else:up_ave = round(up_sum/count,4) #求平均跌幅if (len(df_daily)-count)==0:down_ave=0else:down_ave = round(down_sum/(len(df_daily)-count),4) #为了省事用字典代替对象保存我们需要的数据obj_dic = {'name':dic_vals[i],'code':dic_keys[i],'up_ave':str(up_ave)+"%",'down_ave':str(down_ave)+"%"}list_obj.append(obj_dic)#取模暂停if (i+1)%5 == 0:time.sleep(62) #暂停62秒#根据涨幅排序list_obj2 = sorted(list_obj,key = lambda e:e.__getitem__('up_ave'),reverse=True)return json.dumps(list_obj2,ensure_ascii=False)
总结
以上是生活随笔为你收集整理的使用tushare获取股票数据并计算历史概念板块的平均涨跌幅的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 阿龙的学习笔记---202107学习
- 下一篇: 心跳