Python量化交易实战-09使用get_fundamentals查询估值指标

auto-trade xuhss 1072℃ 0评论

使用JQData查询估值指标

一、估值的方法有哪些?

如何对企业进行估值?有2个方法估算。

1.1绝对估值法

它是一种定价模型,用于计算企业的内在价值。

比如说你可以根据公司近N年的现金流情况。借此去预测未来N年的现金流情况。所有的现金流数据都可以在年报上查询到。最后按照预测的数据进行折现,也就是算出未来5-10年的价格换算到今天是多少钱,来判断当前的股价是贵还是便宜。它是贵还是便宜会决定我是买还是不买。

因为一个公司如果越值钱,它的股价就越贵,但这个不是绝对的,对于投资者来说,我们就是要找到公司价值很不错。但是股价没有那么高的公司。这个就是赚钱的关键。利用公司本身的价值和它在市场上价值的差价赚钱。这也是巴菲特所说的“价值投资了”。但是在绝对估值方法里面有个很重要的指标叫做折现率折现率可以理解为未来的钱转换为现在的钱对应的百分比。折现率取决于你对市场的判断,它是主管和客观揉合的结果。

折现率的值设定不同,会导致最后计算企业价值不同。

这个折现率是直接影响企业价值的。企业价值还和什么有关系呢?

将预估的企业价值除以股本数,得到的是预估的每股价值。通过预估的每股价值和市场上当前的每股市值,就可以指导我们选择股票的决策了,预估的价值相对市场价值越多,就值得买入。

绝对估值法比较通过折现率来判断,主观判断更多。我们很难利用这样的模型做出准确的判断。所以我们在市场上常用的方法叫做“相对估值法”。

1.2相对估值法

相对估值法主要有这些指标,PE市盈率PB市净率PS市销率

为什么叫做相对估值,因为上述指标的高低取决于同行业其他公司的。它是通过比较来计算的。

计算方法 含义 公式 统计方式
PE市盈率 市值收益率,可理解为:按当前收益水平,需多少年要收回成本,和盈利增速相关 Price(市值)/Earnings(净利润) 静态市盈率(上年末净利润)、动态市盈率(下年度净利润)、滚动市盈率(近4个季度净利润)
PB市销率 市值主营收比,考察收益的稳定性与可靠性 Price(市值)/Book Value(主营收) 市销率(主营业务收入,近4季度总主营业务收入)
PS市净率 市值净资产比,主要为有形资产,常被低估(无形资产。固定资产增值、应收问题) Price(市值)/Sales(净资产) 市净率 (归属于母公司股东权益合计,报告期末)

滚动市盈率 是最常用的,它是近4个季度总净利润的添加。所以相对来说,它是最准确的数据。

二、获取估值数据

打开文档,找到"财务及估值数据"

https://www.joinquant.com/help/api/help#name:JQData

get_fundamentals(query_object, date=None, statDate=None)

2.1基本指标

接着我们来了解一下它返回的数据。返回了

  • 股票代码”:带后缀.XSHE/.XSHG

  • 日期”:取数据的日期

  • 总股本”:公司已发行的普通股股份总数(包含A股,B股和H股的总股本)

  • 流通股本”,流通代表的是可以交易的。

  • 总市值”:总市值=当前收盘价*总股本

  • 流通市值”:流通市值 =当前收盘价* 流通股本

  • 换手率”:它表示股票转手买卖的频率。在牛市当中, 大家的换手率会很高,因为投机行为会增多,大家都希望通过不断的交易区获取收益。

2.2估值指标

  • 市盈率(PE, TTM):滚动市盈率
  • 市盈率(PE):静态市盈率
  • 市净率(PB):每股股价与每股净资产的比率
  • 市销率(PS, TTM):市销率为股票价格与每股销售收入之比,市销率越小,通常被认为投资价值越高。
  • 市现率(PCF, 现金净流量TTM):每股市价为每股现金净流量的倍数

20210603225015 - Python量化交易实战-09使用get_fundamentals查询估值指标

三、实战

import datetime
#获取股票估值数据
df = get_fundamentals(query(valuation), statDate=datetime.datetime.today())
print(df)

valuation 表示获取估值的指标。

运行结果:

20210603230109 - Python量化交易实战-09使用get_fundamentals查询估值指标

可以看到:它会返回当天的所有企业的估值指标。

到这里我们就获得了所有股票市值估值相关的数据。

为什么把市值估值放在一起呢?因为估值数据等于市值数据除以利润、现金流等数据得到的。

在选股的时候,我们会把估值指标用来衡量股票的性价比。比如说,我们上节课选择了一些公司成长性盈利性不错的企业,这时假如我想买入几家公司的股票,我还会去看它的pe市盈率是多少,我会希望这家公司的pe相对较低,也就是估值相对低,这样未来的成长空间会更大。

所以如果我想把pe的条件也加入到筛选的代码里面,应该如何实现呢?

我们使用code作为匹配的标准,当它们的code(股票代码)一样,我就把pe_ratio这一列数据组合进去就好了。

#获取股票的财务指标数据
df = get_fundamentals(query(indicator), statDate='2020')

#基于盈利指标选股1. eps 2. operating_profit 3. roe 4. inc_net_profit_year_on_year
df = df[(df['eps']>0) & (df['operating_profit']>214406045.5) & (df['roe']>11) & (df['inc_net_profit_year_on_year']>10)] 
df.index = df['code']

import datetime
#获取股票估值数据
df_valuation = get_fundamentals(query(valuation), statDate=datetime.datetime.today())
df_valuation.index = df_valuation['code']

df['pe_ratio'] = df_valuation['pe_ratio']
print(df)

通过打印出来的结果可以看到,它将通过索引匹配,将‘pe_radio’合并进去了

20210603231417 - Python量化交易实战-09使用get_fundamentals查询估值指标

你可以发现 简单的通过把“code”设置为索引,就可以简单的匹配字段的信息。有了合并的df后,我们又可以在他的基础上筛选了

#获取股票的财务指标数据
df = get_fundamentals(query(indicator), statDate='2020')

#基于盈利指标选股1. eps 2. operating_profit 3. roe 4. inc_net_profit_year_on_year
df = df[(df['eps']>0) & (df['operating_profit']>214406045.5) & (df['roe']>11) & (df['inc_net_profit_year_on_year']>10)] 
df.index = df['code']

import datetime
#获取股票估值数据
df_valuation = get_fundamentals(query(valuation), statDate=datetime.datetime.today())
df_valuation.index = df_valuation['code']

df['pe_ratio'] = df_valuation['pe_ratio']
df = df[df['pe_ratio']<50]
print(df)

通过结果可以看到:晒出来的股票明显少了一些,并且这些企业的市盈率都是小于50的

20210603231901 - Python量化交易实战-09使用get_fundamentals查询估值指标

这就是关于怎样获取估值指标,并且利用估值指标进行筛选,以及如果整合财务数据和估值数据来进行筛选的方法。

转载请注明:xuhss » Python量化交易实战-09使用get_fundamentals查询估值指标

喜欢 (6)

您必须 登录 才能发表评论!