跳到主要内容

· 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程序提高优质公司股票筛选效率的方法,而不提供一种筛选优质股票的投资依据。

· 5 分钟阅读
Allen Ma

本文的主要内容节选自教材《python程序设计基础》的第八章和第十章,该教材由钟雪灵和李立主编,于2019年12月在电子工业出版社出版。

Tushare财经数据接口

安装

Tushare网站是一个免费且适合Python开发者使用的财经数据平台,平台可提供的财经数据涵盖我国宏观经济、国内股票市场各类指数、国内上市公司股票交易数据、上市公司定期财务报告及国内财经新闻等诸多类别的数据。 Tushare官网:http://tushare.org

pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple#安装
pip install BeautifulSoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install mplfinance -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述 利用Tushare包的内建函数获取平台提供的财经数据。Tushare内建函数返回的数据格式都是Pandas的DataFrame类型,所以比较方便利用Pandas、NumPy、Matplotlib等程序包提供的操作工具对这些函数的返回数据进行处理。

平台普通接口调用测试

Tushare分为普通接口和pro用户接口,普通接口无需注册可直接使用,例如,使用普通接口的ts.get_gdp_year()函数可以获得国内生产总值(GDP)数据。

import tushare as  ts
df=ts.get_gdp_year()
df.head()

在这里插入图片描述 返回值说明: 参数 | 解释 -------- | ----- year | year gdp | 国内生产总值(亿元) pc_gdp | 人均国内生产总值(元) gnp | 国民生产总值(亿元) pi | 第一产业(亿元) si | 第二产业(亿元) industry | 工业(亿元) cons_industry | 建筑业(亿元) ti | 第三产业(亿元) trans_industry | 交通运输仓储邮电通信业(亿元) lbdy | 批发零售贸易及餐饮业(亿元)

注册pro接口

Tushare的普通接口无需注册可直接使用,但数据较少,更高级的pro接口需要使用者先在平台https://tushare.pro/register 注册,并在运行环境下设置用户凭证信息后才能使用pro接口,可下载更多数据。具体操作过程包含如下7个步骤:

① 登录网页https://tushare.pro/register, 注册Tushare社区用户。

② 注册用户登录https://tushare.pro/login 进入Tushare社区,然后依次执行如下三步操作来提取用户凭证信息:首先,用户在网站登录成功后,将鼠标移到页面右上角的用户名称位置,单击其下拉菜单中的“个人主页”选项进入“用户中心”。然后,用户在“用户中心”页面中单击如下的“接口TOKEN”选项卡。最后,单击右侧复制图标(红色圈位置)复制文本框中的全部内容。

在这里插入图片描述 在这里插入图片描述 ③ 使用命令pip install tushare在本机安装Tushare包。

④ 在IPython操作界面执行导入Tushare包命令import tushare as ts。

⑤ 利用Tushare包的内建函数set_token()以如下方式设置本机用户的token凭证信息,其中凭证信息要用字符串表示。 ts.set_token(“用户tushare token”)

⑥ 使用命令pro = ts.pro_api()初始化pro接口。 如果set_token('用户tushare token')无效或不想将token保存本地,那么可以在初始化接口时直接设置token: pro_api('用户token')。

⑦ 数据调取。完成前6项操作后,用户才能调用pro接口函数获取相应的数据。

pro接口调用测试

获取股票日线行情的pro接口函数的操作方法如下:

import tushare as  ts
pro = ts.pro_api('用户tushare token')
df = pro.daily(ts_code = '600104.SH', start_date = '20000501', end_date = '20200917')
df.head()

在这里插入图片描述