基于Tushare的Python条件选股(以PE-TTM、PS-TTM和扣非ROE为例)

目录

关于Tushare

通过tushare接口获取各类指标

条件选股

选出赚钱能力强的

找到每个行业中被相对低估的

股票信息的保存与交互

创建hdf5对象保存data

读取过程 

 发散思维


关于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])
沪深300

条件选股

  1. 选出赚钱能力强的

    hs300[hs300['roe_dt']>0.2]
  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

股票信息的保存与交互

  1. 创建hdf5对象保存data

    hdf = pd.HDFStore('hs300_data.h5', 'w')
    hdf['data'] = hs300
    hdf.close()
  2. 读取过程 

    hdf = pd.HDFStore('hs300_data.h5', 'r')
    hs300 = hdf['data']
    hs300.head()

 发散思维

基于tushare丰富的数据接口,我们亦可以算出PE-TTM的分位点,判断该股票在纵向上是否被低估或者高估,实现量化选股;亦或通过tushare财务数据接口的三张报表的统计去了解一家企业的经营状况,比如资产周转率、资产负债率、现金流等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值