跳到主要内容

Tushare财经数据接口(五)案例——优质基本面的股票池创建

· 9 分钟阅读
Allen Ma

优质基本面的股票池创建

上市公司的基本面数据是体现公司经营历史业绩的重要凭据,也是投资者判断公司未来发展前景的重要依据,金融分析人员和股票投资者需要通过分析公司基本面质量来评估公司股票的投资价值。从Tushare平台获取的上市公司基本面数据主要包括定期公布的公司经营业绩报告、盈利能力、营运能力、成长能力、偿债能力及现金流等数据,这些数据分别体现公司不同层面的经营状况。

我国股票市场(上海证券交易所和深圳证券交易所)已有近3600支正常交易的股票,普通投资者选择理想的投资标的时,不可能有足够时间和精力分析全部上市公司的基本面数据。因此,投资者有必要利用一些具有经验指导意义的关键指标对市场中的股票进行自动化筛选,即依靠计算机程序从全部上市公司股票中筛选出优质基本面的股票,从而显著提高投资者寻找优质公司股票的工作效率。例如,从公司的盈利能力、成长能力和现金流量等多个类别基本面数据中的部分指标项筛选出优质股票作为候选投资标的。

筛选优质股票的基本步骤为如下4步:

① 利用Tushare包内建的基本面数据接口函数获取全部股票的基本面数据。

② 根据经验确定反映基本面质量的关键指标项,从全部股票的基本面数据中提取关键指标项对应的数据序列。

③ 利用Pandas内建函数将多个基本面数据序列合并成一个DataFrame数据。

④ 根据关键指标项的重要程度确定数据序列的排序参数,对合并的数据进行排序。从排序结果中选择各项指标综合排序靠前的若干行,这些行对应的股票便是基本面质量相对较高的股票集合(即优质股票池)。

下表列出了获取公司盈利能力、成长能力和现金流基本面数据的接口函数及其返回参数的信息。 在这里插入图片描述 从上表中列出的函数的返回数据项目来看,接口函数返回的数据种类非常丰富,可用来体现公司投资价值的数据项有很多组合。例如,从上表所列三类数据的返回参数中选择净利率、净资产收益率、每股收益增长率、净利润增长率、每股收益增长率、经营现金净流量与净利润的比率及现金流量比率等7项作为关键评价指标,综合利用这7项指标的值反映公司的基本面质量。通常情况下,这些指标值越大,表示公司的基本面质量越高,公司股票的投资价值越大。如下程序演示了一种利用财务指标数据筛选优质公司股票的方法。

import tushare as ts
import pandas as pd
import datetime

#获取最新的财务报表数据,我国A股上市公司的财务报告披露时间规定:4月30日前披露一季报,
#8月31日前披露半年报,10月30日前披露三季报,披露年报的时间是次年度的4月30日前。
this_year = datetime.datetime.today().year
this_month = datetime.datetime.today().month
if this_month >= 11: # 今年的三季报已经发布
fin_year = this_year
fin_sea = 3
elif this_month >= 5: # 通常要在4月底才发布完上年度年报,当然也可选今年一季报
fin_year = this_year-1
fin_sea = 4
else:
fin_year = this_year-1
fin_sea = 3
print("%s年%s季度" %(fin_year,fin_sea))

printout: 2019年4季度

df1 = ts.get_profit_data(fin_year, fin_sea)
df2 = ts.get_growth_data(fin_year, fin_sea)
df3 = ts.get_cashflow_data(fin_year, fin_sea)

在这里插入图片描述如果在运行程序前预先保存了相应的财务数据文件,那么可以直接从本地数据文件中读取财务数据,从而避免每次运行程序时都要连网下载相同数据的情形。

#code,代码;name,名称;net_profit_ratio,净利率(%);roe,净资产收益率(%);eps,每股收益;
#nprg,净利润增长率(%);nav,净资产增长率;
df_merge = pd.merge(df1[['code','name', 'net_profit_ratio', 'roe', 'eps']],
df2[['code', 'nprg', 'nav']], on='code', how='left')
#左外连接,左表不加限制,保留左表的数据,匹配右表,右表没有匹配到的行中的列显示为NaN
#cf_nm,经营现金净流量与净利润的比率;cashflowratio,现金流量比率;
df_merge = pd.merge(df_merge, df3[['code', 'cf_nm', 'cashflowratio']],
on='code', how='left').dropna() #删去去含有NaN的行
focus_df = df_merge.sort_values(['nprg', 'net_profit_ratio', 'cf_nm', 'nav',
'roe', 'eps', 'cashflowratio'], ascending=False)#nprg是第一关键字

关于对合并报表进行排序的关键列次序,有兴趣的读者可以多做一些次序调整,比较最终保留的数据表select_df中的股票集合及其排序情况,考察不同指标次序的排序操作结果有何不同,并找到对应的股票以了解股票价格近3年的价格变化情况。

focus_df['code']='\t'+ focus_df['code']#确保code以字符形式输入到csv文件,\t为制表符
if focus_df.iloc[:, 0].size > 100:
select_df = focus_df[['code','name', 'nprg', 'net_profit_ratio', 'cf_nm', 'nav',
'roe', 'eps', 'cashflowratio']].head(100)
else:
select_df = focus_df[['code', 'name', 'nprg', 'net_profit_ratio', 'cf_nm', 'nav',
'roe', 'eps', 'cashflowratio']]
select_df.to_csv('focus'+str(fin_year)+str(fin_sea)+'.csv',encoding='cp936',index=False)

在这里插入图片描述 我国A股上市公司的财务报告披露时间规定:4月30日前披露一季报,8月31日前披露半年报,10月30日前披露三季报,披露年报的时间是次年度的4月30日前。程序中利用datatime包的日期函数确定可获取的财报数据。 从股票市场的现实来看,选择具有优质基本面的上市公司股票的关键指标并没有统一的标准,一方面是因为不同的财务指标反映公司的侧重点时存在差别,另一方面是因为不同行业公司的财务数据指标在数值上的可比性尚无定论。本例仅提供一种利用Python程序提高优质公司股票筛选效率的方法,而不提供一种筛选优质股票的投资依据。