基本思路
首先导入基本库,tushare官网的数据接口获取申万一级行业列表。
获取电子行业(801080.SI)成分股,并把df1存到excel中,方便后续提取股票代码。要提取con_code电子行业的股票代码,in_date:该股票纳入电子行业指数时间,out_date:剔除该指数时间,is_new:现在是不是该指数成分股。因此,要剔除out_date有时间的股票,或者保留is_new==Y的股票。过滤并获得所需个股代码。
最后根据上篇文章获取数据和存储文件。
代码
import tushare as ts
import pandas as pd
pro = ts.pro_api()
#获取数据及数据合并函数,start_date='20101012', end_date='20240325'根据自己需求更改
def get_data(code):
df1 = pro.daily(ts_code=code, start_date='20101012', end_date='20240325', fields='ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,')
df1 = df1.sort_values('trade_date')
df2 = pro.daily_basic(ts_code=code, start_date='20101012', end_date='20240325', fields='ts_code,trade_date,close,turnover_rate,turnover_rate_f,volume_ratio,pe,pe_ttm,pb,ps,ps_ttm,dv_ratio,dv_ttm,total_share,float_share,free_share,total_mv,circ_mv')
df2 = df2.sort_values('trade_date')
#合并df1和df2
merged_df = pd.merge(df1, df2, how='outer')
# 删除2中与df1重复的列
merged_df = merged_df.loc[:, ~merged_df.columns.duplicated()]
return merged_df
def acquire_code():
filename = "stock1/"+ code + ".csv"
#stock1 文件路径可更改,需要提前建文件夹,或者导入os后用代码创建文件夹
merged_df = get_data(code)
merged_df.to_csv(filename, index=False)
#获取申万一级行业列表
df = pro.index_classify(level='L1', src='SW2021')
#获取指数的成份股
df = pro.index_member(index_code='801080.SI')
#df.to_excel('电子行业.xlsx', index=False)
# 筛选is_new等于Y的行
filtered_df = df[df['is_new'] == 'Y']
# 输出con_code列表
con_code_list = filtered_df['con_code'].tolist()
#print(con_code_list)
for code in con_code_list:
acquire_code()
#最终在stock1中得到行业成分股的数据库