转载请注明出处!!!
在股市中,板块(概念)轮动是一个很常见又重要的现象,如果当天所买的股票位于当天启动的板块中,那其收盘的表现大概率也不会太差。那么取研究板块轮动,其中有一点我认为是要首先对板块有一个评估或者说是打分,但对板块强度评估并没有一套成型的方法。本代码基于tushare的日线行情、概念股分类、概念股列表、每日涨跌停统计四个接口,以及参考DevilYuan股票量化系统(该github仓库由于DMCA版权问题已不可用)中对热点进行评估的算法,对收盘的股票进行概念强度评估,以供追踪热点及复盘参考
首先我们需要将当天的日线行情、概念股分类、概念股列表、每日涨跌停统计四个接口的数据拿到。
由于获取每个概念对应的股票列表的时间会较长,且变动不大,因此可以隔一段时间再更新一次保存在本地的json文件中,其他的股票代码对应的概念、概念对应的中文名字也以字典的形式存在json中,方便调用,当下载了这些数据后,将download改为False便不会每次执行程序都下载这些数据,直接从本地加载。
import pandas as pd
from tqdm import tqdm
import tushare as ts
import time
from datetime import datetime
import numpy as np
import json
token='*****************************************'
# 请更换为自己的token
ts.set_token(token)
pro = ts.pro_api()
# today = datetime.today().strftime('%Y%m%d')
today = '20201203'
next_day = '20201204'
download = True # 当需要更新概念-股票代码字典、股票代码-概念字典、概念-中文名称字典时,将其改为True
concept_discount_num = 6 # 当概念股票数少于6,则需要打折热点强度
# 当日行情
hq_df = pro.daily(trade_date=today)
# 涨停榜
limit_df = pro.limit_list(trade_date=today)
# 当日概念列表
concept_df = pro.concept()
concept2code_dict = {}
code2concept_dict = {}
concept_name_dict = {}
if download == False:
# 下载每个概念对应的股票列表,不一定每天更新,一可段时间更新一次
# 生成概念对应股票列表字典
print('Generate concept2code')
for ts in tqdm(concept_df.code.to_list()):
for _ in range(3):
try:
code_df = pro.concept_detail(id=ts, fields='ts_code')
except:
print('retry')
else:
code_list = code_df.ts_code.to_list()
concept2code_dict[ts] = code_list
time.sleep(0.5)
break
# with open("concept2code.json","r") as f:
# concept2code_dict=json.load(f)
print('Generate code2concept')
# 生成股票代码对应概念字典
for ts_code in tqdm(hq_df.ts_code):
# print(1)
code2concept_dict[ts_code] = []
for k,v in concept2code_dict.items():
if ts_code in v:
code2concept_dict[ts_code].append(k)
print('Generate concept_name_dict')
# 生成概念对应中文名字典
concept_name_dict = concept_df.groupby('code')['name'].apply(lambda x:x.iat[0]).to_dict()
# 将上述字典存入json文件以备后用
with open("concept2code.json","w") as f:
json.dump(concept2code_dict,f)
with open("code2concept.json","w") as f:
json.dump(code2concept_dict,f)
with open("concept_name_dict.json","w") as f:
json.dump(concept_name_dict,f)
else:
# d