目录
关于Tushare
Tushare 是一个提供历史数据和实时数据服务的平台,它覆盖了股票、基金、期货、债券、外汇、宏观、新闻等多个金融领域的数据。
今天我来通过tushare常用的数据接口,获取股票的各类指标,进行条件选股
接口名称 | 数据接口 | 目的 |
---|---|---|
指数成分和权重 | index_weight | 获取沪深300的股票列表 |
基础信息 | stock_basic | 获取各股票的名称、行业 |
每日指标 | daily_basic | 获取PE-TTM、PS-TTM |
财务指标数据 | fina_indicator | 扣非ROE、ATO等 |
通过tushare接口获取各类指标
import tushare as ts
pro=ts.pro_api()
import pandas as pd
from functools import reduce
#获取沪深300的股票列表
hs300=list(pro.index_weight(index_code='399300.SZ',start_date='20240820',end_date='20240821')['con_code'])
#获取所在列表的股票信息
hs300_basic=pro.stock_basic(ts_code=','.join(hs300),fields='ts_code,name,industry')
hs300_basic.rename(columns={'ts_code':'code'},inplace=True)
#获取所在列表的股票部分基本指标
hs300_index_1=pro.daily_basic(ts_code=','.join(hs300),trade_date='20240821',fields='ts_code,pe_ttm,ps_ttm')
hs300_index_1[['pe_ttm','ps_ttm']]=hs300_index[['pe_ttm','ps_ttm']].round(2)
hs300_index_1.rename(columns={'ts_code':'code'},inplace=True)
def TTM_fun(x):
return x/4
for code in hs300:
h=pro.fina_indicator(ts_code=code,start_date='20230630',fields='ts_code,end_date,roe_dt')
h=h.groupby('end_date',as_index=False).first().drop('end_date',axis=1).groupby('ts_code').sum().apply(TTM_fun)
h['code']=h.index
hs300_index_2=pd.concat((hs300_index_2,h),ignore_index=True)
#整合股票信息
merge = lambda x,y: pd.merge(x, y, how='left', on='code')
hs300 = reduce(merge, [hs300_basic,hs300_index_1,hs300_index_2])

条件选股
-
选出赚钱能力强的
hs300[hs300['roe_dt']>0.2]
-
找到每个行业中被相对低估的
def look(x): return x hs300[hs300['roe_dt']>0.2].groupby('industry').apply(look)[['pe_ttm','ps_ttm']]
需要注意的是:
fina_indicator接口对积分有一定限制,2000积分的话。一分钟最多访问200次,一次获取的股票最多70支,再多就可能会丢包。
输入ts_code注意参数,如果是列表形式,可以采用','.join()方法。
DataFrameGroupBy类型无法查看的时候,可以采用案例中的方法——look
股票信息的保存与交互
-
创建hdf5对象保存data
hdf = pd.HDFStore('hs300_data.h5', 'w') hdf['data'] = hs300 hdf.close()
-
读取过程
hdf = pd.HDFStore('hs300_data.h5', 'r') hs300 = hdf['data'] hs300.head()
发散思维
基于tushare丰富的数据接口,我们亦可以算出PE-TTM的分位点,判断该股票在纵向上是否被低估或者高估,实现量化选股;亦或通过tushare财务数据接口的三张报表的统计去了解一家企业的经营状况,比如资产周转率、资产负债率、现金流等等