一、前言   

在对一家上市公司开展基本面分析时,通常可以通过其财务数据进行剖析解读,利用上市公司调研等各种渠道实现进行其内在价值的评价。日常中我们常用的财务评价指标可能包括:

        1)市盈率(PE):每股市价/每股收益;也称利润收益率,是指某支个股的普通股的市价与每股盈利的比率,衡量企业利润的表现。一般说来,PE越高,说明公众对该股票的评价越高。

2)市净率(PB):股价/每股净资产;衡量目前的股价和公司真实的每股净资产的比率,一般情况下,PB越小,安全边际越高。

  3)市销率(PS):股价/每股收入;适合衡量暂时没有盈利或者盈利实真的企业,如发展期的互联网公司、科技公司等。一般情况下,PS越小说明该公司目前的投资价值越大。

此外,在衡量上市公司价值以及股票价值是否偏离时还有一种更为复杂严谨的模型——现金流折现模型(DCF),即将企业未来经营生产的所有现金流折现到今天,计算其市场价格并和股价进行比较判断价格是否偏离,本文将以格力电器(SZ000651)为例利用Python工具细致开展PE/PS指标追踪与DCF模型搭建。

二、DCF估值模型原理

现金流折现模型(DCF)的构建思路来源于债券,把企业在未来存续期内的所有现金流贴现到今日,得到企业内在价值的估计,其主要包含三个过程

2.1 模型过程

1)测算自由现金流FCFF,企业自由现金流是DCF模型中被折现的对象,它是指企业产生的、在满足了再投资需求之后剩余的、不影响公司持续发展前提下的、可供企业资本供应者/各种利益要求人(股东、债权人)分配的现金,即基于公司资产每年能够创造出的可用于股东和债权人分配的自由现金。一般计算公式为:

经营现金流=净利润+财务费用-投资收益-处置固定资产收益+固定资产摊销+计提资产减值准备+应收账款减少+存货减少-应付账款增加+递延所得税

自由现金流=经营现金流-资本性支出-商誉投资增加

2)计算折现率(WACC) 测算得到自由现金流FCFF后,再根据公司所在行业特点选取合适的折现率对现金流进行贴现,一般选择为加权平均资本成本率(WACC),即按各类资本所占总资本来源的权重加权平均计算公司资本成本的方法。

加权平均资本成本(WACC)=股权占市场价值比例*股权预期收益率+债权占市场价值比例*(1-税率)*公司债务成本

  3)对现金流进行折现,一般假定企业未来现金流增长率为g,根据企业生命周期理论,将企业的生命周期分为了可预测阶段与永续价值阶段,按照生命周期的理论,进一步细致分为投入期,成熟期与衰退期,并赋予不同增长率g1,g2,g3,将未来的现金流折现到当期得到企业价值。

2.2 数学原理

由于未来每一时刻现金流的精准预测很难实现,而且股票并没有固定的生命周期,因此一般简化模型为不变增长模型、两阶段模型以及三阶段模型,以不变增长模型为例,其自由现金贴现值可以表示为:

其中TV为终值,g为永续增长率,即假定的企业未来现金流增加情况。现实中,每期的现金流是持续流入企业的,但在进行估值计算时,为简化和便于计算,需要假定每期的现金流是在一期当中的某个时点上一次性流入的。惯例上假定每期的现金流是在期中流入,这相当于假设当期现金流是均匀流入,以此来确定折现的期数。

三、基于Python的过程实现

我们选取格力电器(SZ000651)为例对各指标依次进行分析,在分析前我们首先需要获取各维度股票数据和财务数据,这里我们采用金融量化数据接口AKShare 开源财经数据接口库进行数据的获取。

import pandas as pd
import datetime
from matplotlib import pyplot as plt
import akshare as ak#获取A股全部股票数据 存储到stock_basic.csv
stock_zh=ak.stock_zh_a_spot()
stock_zh.to_csv("stock_basic.csv") 

首先获取A股市场总貌,得到A 股上市公司的实时行情数据,接下来在其中筛选出格力电器的数据观察其历史行情数据,这里我们对数据进行了前复权,保持当前价格不变,将历史价格进行增减,从而使股价连续,据此我们绘制格力电器股票“收盘价”、“最高价”“最低价”数据图。

stock_zh.head()
stock_zh[stock_zh["名称"]=="格力电器"]
stock_daily = ak.stock_zh_a_hist(symbol="000651", period="daily", start_date="20200101", end_date='20211104', adjust="qfq")
close_price=stock_daily[["日期","收盘","最高","最低"]]
close_price.set_index("日期",inplace=True)close_price.plot()
close_price.head()

接下来,我们获取格力电器的历史PE/PS数据,并绘制数据图更为直观的观察其历史走向;可以看出,格力电器的市盈率在2020年11月至2021年5月间稳定保持在15左右,在2021年9月到2021年11月区间降至9,是一个较好的投资标的。

#获取PE/PS和总市值
geli_df = ak.stock_a_lg_indicator(stock="000651")
geli_df.set_index("trade_date",inplace=True)
geli_pe_ps=geli_df.iloc[0:240,[0,3]]
geli_pe_ps.plot()
geli_df.head()

在完成PE和PS追踪后,我们构建DCF估值模型,对格力电器的内在价值进行分析。为了避免季报、半年报部分数据的细微差异,我们选择获取格力2020年12月31日年报财务摘要和个股概况,宏观了解其2020年会计年度的经营情况。

import numpy as np
import pandas as pd
import matplotlib as plt
import akshare as ak#获取个股概况
dateset=["20200331", "20200630", "20200930", "20201231"]
stock_em_yjkb_df = ak.stock_em_yjkb(date="20201231")
geli_sheet=stock_em_yjkb_df[stock_em_yjkb_df['股票代码']=="000651"]
geli_sheet#获取财务摘要
stock_em_zcfz_df = ak.stock_em_zcfz(date="20201231")
geli_sheet2=stock_em_zcfz_df[stock_em_zcfz_df["股票代码"]=="000651" ]
geli_sheet2

接下来,我们获取三张主表,即资产负债表、利润表和现金流量表,采用的数据来源为新浪财经,其报表概况如下图

#获取现金流量表
stock_financial_report_sina_df = ak.stock_financial_report_sina(stock="000651", symbol="现金流量表")
geli_sheet1=stock_financial_report_sina_df[stock_financial_report_sina_df["报表日期"]=="20201231"]
geli_sheet1#获取利润表
stock_financial_report_sina_lrb = ak.stock_financial_report_sina(stock="000651", symbol="利润表")
geli_sheet2=stock_financial_report_sina_lrb[stock_financial_report_sina_lrb["报表日期"]=="20201231"]
geli_sheet2#获取20201231资产负债表
stock_financial_report_sina_lrb = ak.stock_financial_report_sina(stock="000651", symbol="资产负债表")
geli_sheet3=stock_financial_report_sina_lrb[stock_financial_report_sina_lrb["报表日期"]=="20201231"]
geli_sheet3
#获取20191231资产负债表
stock_financial_report_sina_lrb = ak.stock_financial_report_sina(stock="000651", symbol="资产负债表")
geli_sheet4=stock_financial_report_sina_lrb[stock_financial_report_sina_lrb["报表日期"]=="20191231"]
geli_sheet4

利用财务报表数据,我们抓取必要会计科目数据计算WACC、实际所得税率、当年自由现金流FCF等指标状况;其中股本资本成本率=无风险收益率+BETA系数× 市场风险溢价,而BETA系数一般是由往年数据回归所得,这里采用9%作为股本资本成本率Ke。

###经营现金流=净利润+财务费用-投资收益-处置固定资产收益+固定资产摊销+计提资产减值准备+应收账款减少+存货减少-应付账款增加+递延所得税
##自由现金流=经营现金流-资本性支出-商誉投资增加
##债务资本成本率=(利息费用+应付利息)/债务资本#自由现金流
FCF=float(geli_sheet1["经营活动产生的现金流量净额"])-float(geli_sheet1["固定资产折旧、油气资产折耗、生产性物资折旧"])-float(geli_sheet1["无形资产摊销"])-float(geli_sheet1["长期待摊费用摊销"])-float(geli_sheet1["处置固定资产、无形资产和其他长期资产的损失"])#实际所得税税率
E_Tax=1-(float(geli_sheet2["四、利润总额"])-float(geli_sheet2["减:所得税费用"]))/float(geli_sheet2["四、利润总额"])#资本成本和股本成本
Kd=(float(geli_sheet2["财务费用"])+float(geli_sheet2["汇兑收益"]))/((float(geli_sheet3["负债合计"])+float(geli_sheet4["负债合计"]))/2)
#Kd=(float(geli_sheet2["财务费用"])+float(geli_sheet2["汇兑收益"]))/float(geli_sheet3["负债合计"])
Ke=0.09 #股本成本设定为9%#债务占比
Pd=float(geli_sheet3["负债合计"])/float(geli_sheet3["负债和所有者权益(或股东权益)总计"])#少数股东权益占比
Me=float(geli_sheet3["少数股东权益"])/float(geli_sheet3["所有者权益(或股东权益)合计"])#WACC计算
WACC=Kd*Pd*(1-E_Tax)+Ke*(1-Pd)

在获得WACC后,我们对终值进行测算。考虑到企业经营周期情况,我们选择三阶段模型进行测算(在估值格力时三阶段模型其实并不稳妥,因为格力已经进入成熟期或平台期,其现金流增长率不会有显著的改变进步,三阶段模型更适合应用于初创企业等)

#折现因子计算:以三阶段为例
g1,g2,g3=0.3,0.15,0.02 #三阶段增长率
t1,t2=np.arange(1,6), np.arange(1,6) #增长期t1 五年 发展期t2 5年
EV_sum1, EV_sum2 = 0, 0
for _ in t1:EV1 = FCF * ((1+g1) ** _) #未来经营情况预测EV =  EV1 / ((1+WACC) ** _)EV_sum1 = EV + EV_sum1for _ in t2:EV = EV1 * ((1+g2) ** _) / ((1+WACC) ** (_+t1[-1]))EV_sum2 = EV + EV_sum2PDV = (EV1 * ((1+g2) ** t2[-1]) * (1+g3)) / ((WACC-g3)*((1+WACC)**(t1[-1]+t2[-1]))) + EV_sum1 + EV_sum2
PDV_adj =PDV* (1 - Me) #进行股东权益调整

最后,我们计算格力的总股数情况,并进行股票内在价值的估计,结果表明当前格力股票价格与DCF估值模型测算价格相近,并没有偏离其实际内在价值。

#总股数
total_mv=geli_df.loc["2020-12-31","total_mv"]*10**4
close=close_price.loc["2020-12-31","收盘"]
Shares=total_mv/closeValue = PDV_adj / Shares
print('归属于上市公司股东的价值:',PDV_adj, '\n', '内在价值:', Value)

进一步的应用过程中,我们应该对模型的折现率以及永续增长率进行更为审慎的判断,因为在不同的情况下,我们采用各种估值状态时所隐含的安全或风险程度也是大不相同的,因此我们要进行更为深入的敏感度分析,进而选择更为安全的策略投资。

DCF模型敏感度分析(图:Barrons的博客) 

参考文献

[1]郭永清.财务报表分析与股票估值.[D]:机械工业出版社

[2]《一文了解DCF模型核心逻辑》

[3]《【编程】DCF自由现金流贴现模型——基于python的实现》

【量化金融】利用DCF估值模型实现股票价值监测相关推荐

  1. 量化投资学习——股票价格估值模型

    股票价格估值模型包括: 1.自由现金流(FCFF)贴现模型,股权资本自由现金流(FCFE)贴现模型,股利贴现模型(DDM),经济附加值模型(EVA)

  2. QuantitativeFinance:量化金融之金融时间序列分析之ES/ETS/GARCH模型的简介、Box-Jenkins方法-AR/MA/ARMA/ARIMA模型的简介及其建模四大步骤之详细攻略

    QuantitativeFinance:量化金融之金融时间序列分析之ES/ETS/GARCH模型的简介.Box-Jenkins方法-AR/MA/ARMA/ARIMA模型的简介及其建模四大步骤之详细攻略 ...

  3. 《量化金融R语言初级教程》一2.1 均方差模型

    本节书摘来异步社区<量化金融R语言初级教程>一书中的第2章,第2.1节,作者: [匈牙利]Gergely Daróczi(盖尔盖伊) , 等 译者: 高蓉 , 李茂 责编: 胡俊英,更多章 ...

  4. ML之CatBoost:金融风控之通过数据预处理(中位数填充/校验同分布/文本型日期拆解/平均数编码-标签编码)利用CatBoost算法+模型可解释性(Shap/LIME)预测用户的车险是否为欺诈行为

    ML之CatBoost:金融风控之通过数据预处理(中位数填充/校验同分布/文本型日期拆解/平均数编码-标签编码)利用CatBoost算法+模型可解释性(Shap/LIME)预测用户的车险是否为欺诈行为 ...

  5. 浅谈估值模型:从Grinold Kroner(GK)模型看投资的本质

    摘要及声明 1:本文主要介绍Grinold Kroner(GK)模型的运用,并以上证指数为例实现一个GK模型: 2:本文主要为理念的讲解,模型也是笔者自建,文中假设与观点是基于笔者对模型及数据的一孔之 ...

  6. 浅谈估值模型:实现GGM的理想国(附代码)

    目录 一.写在前面 二.缘起 三.描绘一个现实中的理想世界 1:预期收益率r 2:下一期股利与增长率g 3:永续增长率g 4:内在价值计算 四.模型结果 五.写在后面 一.写在前面 1:本文主要讨论戈 ...

  7. python金融编程入门_金融编程与量化金融—Python编程汇总

    一.Python与量化金融 在量化投资领域,获取数据.整理数据.模型计算.数据图形化均可以用python实现:而且Python强大的库功能使其非常适合做quant类工作的语言,进而逐渐成为科学计算方面 ...

  8. 【重磅推荐】哥大开源“FinRL”: 一个用于量化金融自动交易的深度强化学习库

    深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 编辑:DeepRL 一.关于FinRL 目前,深度 ...

  9. 未明学院:量化金融训练营开始报名,成为兼具数据分析技能+项目实战经验的复合型人才!

    想进金融行业却不懂数据?你正在失去机会 吴军在<硅谷之谜>一书中说,"大数据的本质,就是通过信息消除不确定性",而不确定性,在金融领域,就意味着收益和风险. 金融行业天 ...

  10. 未明学院:量化金融训练营全新升级加量不加价,全副武装金融行业实战技能!

    在当下的"互联网+""大数据"社会,金融科技(FinTech)已经成为了金融行业新的发展方向.根据金融稳定理事会(FSB)的定义,金融科技主要是指由大数据.区块 ...

最新文章

  1. Go 类型别名与类型声明的区别
  2. Flutter BottomNavigationBar 三分钟实现一个常用APP首页底部导航菜单栏
  3. java enum.isdefined_c# – Enum.IsDefined带有标记的枚举
  4. Spyder IDE中使用git
  5. sql 读取本地txt文件批量插入数据库
  6. IOException: Broken pipe
  7. 印度:10美元电脑与全民免费上网
  8. sublime text3 及相关的安装
  9. 第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS
  10. 企业研发效能月刊:告别996,走向“211”!
  11. 文本分类之一:语言模型
  12. ShadowGun 图形技术分析
  13. Tungsten Fabric如何增强Kubernetes的网络性能
  14. 相机标定中的四个坐标系
  15. JavaScript---网络编程(12)--DHTML技术演示(5)-form表单验证技术(正则)
  16. webstorm 安装激活破解方法
  17. 工作站属于通用计算机吗,我们常说的工作站到底和普通电脑有什么不一样?工作站好在哪?...
  18. Java程序设计基础——简单Java程序
  19. matlab进行道格拉斯筛选,用MATLAB计算柯布道格拉斯函数,需要计算程序,急!谢谢大神...
  20. matlab凯塞窗低通fir滤波器,基于Matlab的FIR滤波器设计与实现

热门文章

  1. 【VB.NET视频总结(一)】
  2. 2.3 WSN的MAC协议
  3. 字迹相似度测试软件,文章相似度检测_文章在线相似度检测_文章相似度检测软件-纸牌屋检测工具...
  4. RGB颜色查询对照表
  5. 中仪股份管道机器人_中仪股份_X5-HW_管道检测机器人
  6. Java实现POS打印机无驱打印(转)
  7. postman安装使用教程(标贝科技)
  8. java 串口 rxtx_java使用RXTX进行串口通信
  9. 生物医学网络中的图嵌入:方法,应用和评估
  10. 软件开发人员需要记住的10个操作系统概念(译)