使用Python评估一支股票的价格

本文使用DCF(Discounted Cash Flow)自由现金流折现法评估股票的当前价值。

我们选择贵州茅台(600519)来开展实验。

1.首先,我们获取2019、2020、2021茅台年报的财务报表,如何通过Python获取上市的财务报表可以参考《使用Python获取股票的报表数据》,从现金流表中获得经营活动产生的现金流量净额投资活动现金流出两个财务指标,从网上查询获取股票的总股本,如下图所示。

    year = [2019, 2020, 2021, 2022, 2023, 2024]
    netCashFlow = [45210612632.56, 51669068693.03, 64028676147.37]  # 经营活动产生的现金流量净额
    investingCashOutflow = [3173044893.65, 2127304901.08, 5581832561.94]  # 投资活动现金流量输出
    totalShareCapital = 12.56  # 总股本

2.然后,计算自由现金流。自由现金流通常包括三种计算方式(自由现金流的三种计算方法),我们选择最简单那种:自由现金流 = 经营活动产生的现金流量净额 - 投资活动现金流出

    # 已知三年的现金流
    freeCashFlow = []
    for i in range(0, 3):
        freeCashFlow.append(netCashFlow[i] - investingCashOutflow[i])

3.接着,存在两个需要手动调整的参数:一个是折现率,一个是未来自由现金流增长率。折现率一般是10%,自由现金流增长率得看具体企业情况。实际上,我们可以算出前三年茅台的自由现金流增长率是17%左右,但是不能确保未来企业也能按照这个增长率增长,所以需要假设一个数,保守估计8%。

    discountRate = 0.1  # 折现率
    growthRate_ = 0.08  # 假设后三年的增长率

4.其次,根据自由现金流增长率,计算未来每年的自由现金流值和自由现金流折现值。

    # 预估后三年的现金流
    for i in range(3, 6):
        freeCashFlow.append(freeCashFlow[i - 1] * (1 + growthRate_))

    # 每年的折现现金流
    discountCashFlow = []
    for i in range(0, 6):
        discountCashFlow.append(freeCashFlow[i] / math.pow((1 + discountRate), i + 1))

5.计算折现现金流总和

    # 六年折现现金流总和
    discountCashFlowSum = 0
    for i in range(0, 6):
        discountCashFlowSum += discountCashFlow[i]

6.计算永续价值折现值

    # 永续价值折现值
    discountPerpetualValue = (freeCashFlow[5] * (1 + growthRate_) / (discountRate - growthRate_)) / math.pow(1 + discountRate, 6)

7.计算所有者权益

    # 所有者权益
    OwnersEquity = discountCashFlowSum + discountPerpetualValue

8.最后,使用所有者权益除以总股本,得到当前股票应该具备的价格。

    # 每股价值
    value = OwnersEquity / 100000000 / totalShareCapital
    print(value)

=========================================================

通过以上八个步骤,我们得出了600519的DCF评估值为1985.922295346798。那也就意味着,如果茅台今年年报还能以8%的增长率继续冲,那以目前1773.66的价格,茅台还能涨...

 =========================================================

本次实验有很多不严谨的地方:

a) 代码计算公式直接参考自由现金流折现法,还没有验证准确性;

b) DCF评估模型通常需要预测更长的年限,本次实验只用了三年;

c) DCF评估模型对企业的选择也有讲究,需要选择能稳定增长的行业如电信、水利之类的,如科技这些受到行业发展周期影响的行业,不适合DCF模型;(不过茅台还好)

d) 折现率和未来自由现金流增长率,两个参数的调整对结果影响很大;

实验结束,谢谢观看。请各位专家批评指正!

附上完整代码

import math

if __name__ == '__main__':
    year = [2019, 2020, 2021, 2022, 2023, 2024]
    netCashFlow = [45210612632.56, 51669068693.03, 64028676147.37]  # 经营活动产生的现金流量净额
    investingCashOutflow = [3173044893.65, 2127304901.08, 5581832561.94]  # 投资活动现金流量输出
    totalShareCapital = 12.56  # 总股本
    discountRate = 0.1  # 折现率
    growthRate_ = 0.08  # 假设后三年的增长率

    # 已知三年的现金流
    freeCashFlow = []
    for i in range(0, 3):
        freeCashFlow.append(netCashFlow[i] - investingCashOutflow[i])

    # 预估后三年的现金流
    for i in range(3, 6):
        freeCashFlow.append(freeCashFlow[i - 1] * (1 + growthRate_))

    # 每年的折现现金流
    discountCashFlow = []
    for i in range(0, 6):
        discountCashFlow.append(freeCashFlow[i] / math.pow((1 + discountRate), i + 1))

    # 六年折现现金流总和
    discountCashFlowSum = 0
    for i in range(0, 6):
        discountCashFlowSum += discountCashFlow[i]

    # 永续价值折现值
    discountPerpetualValue = (freeCashFlow[5] * (1 + growthRate_) / (discountRate - growthRate_)) / math.pow(1 + discountRate, 6)

    # 所有者权益
    OwnersEquity = discountCashFlowSum + discountPerpetualValue

    # 每股价值
    value = OwnersEquity / 100000000 / totalShareCapital
    print(value)
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学老师要我们学习郭永清老师的《财务报表分析与股票估值》这本书,布置了最后两章的作业, 对郭永清老师的《财务报表分析与股票估值》这本书内容的实现 注意事项 代码是基于《财务报表分析与股票估值》的,其中自由现金流的口径与大众认知略有出入,建议使用前先阅读该书第14、15章; 本人非计算机专业,模型代码可能存在部分错误; 银行股暂时无法估值,因为其财报形式和其他种类公司相比略有不同; 数据采用的是邢不行老师整理的股票历史日线数据和新浪财务数据; 本人非财务、会计专业,尽管过程中请教了CPA大神,但财务数据口径依然可能存在问题。 DCF介绍 自由现金流贴现法是绝对估值法的一种,理论基础是现值原理:任何资产的价值都等于其预期未来全部现金流的现值总和,对公司而言就是自由现金流。 由于准确预测未来所有自由现金流是不可能的,而且股票并没有固定的生命周期,因此将模型简化为以下四种: $$ \begin{aligned} &零增长模型:V=\frac{FCF}{WACC}\ &不变增长模型:V=\frac{FCF(1+g)}{WACC-g}\ &两阶段模型:V=\sum_{t=1}^n\frac{{FCF}t}{(1+WACC)^t}+\frac{TV}{(1+WACC)^n},\ \ 其中TV=\frac{FCF_n(1+g_2)}{WACC-g_2}\ &三阶段模型:V=\sum{t=1}^n\frac{{FCF}0(1+g_1)}{(1+WACC)^t}+\sum{t=n+1}^m\frac{{FCF}n(1+g_2)}{(1+WACC)^t}+\frac{FCF{n+m}(1+g_3)}{(WACC-g_3)(1+WACC)^{n+m}}\ \end{aligned} $$ 零增长模型适用于成熟稳定、没有增长的公司,每年的自由现金流也保持在一个稳定的金额水平,类似于永续年金;如果该类公司的自由现金流全部用于发放股利现金,那么其得出的结果与股利贴现模型非常接近。 不变增长模型适用于成熟的公司,未来的自由现金流以非常缓慢的速度增长。 在两阶段模型中,投资者的预期回报WACC至少要高于总体的经济增长率;不变增长率g2通常小于WACC,反之,意味着很长时间以后公司的规模将超过总体经济规模。 在三阶段模型中,假设所有的公司经历三个阶段:成长阶段、过渡阶段和稳定阶段。三个阶段的成长率由高到低,稳定阶段保持较低增长率的不变增长。 具体计算步骤: 计算自由现金流并依据相应的方法折现($\star\star\star\star\star$) 计算股权价值= 折现后的自由现金流+金融资产+长期股权投资-公司债务 计算少数股东比例 归属于上市公司股东的价值=股权价值$\times$(1-少数股东比例) 每股内在价值=归属于上市公司股东的价值/股本 其中, 经营资产自由现金流=公司维持原有生产经营规模前提下的增量现金流入=经营活动现金流量净额-保全性资本支出=经营活动现金流量净额-固定资产折旧-无形资产和长期待摊费用摊销-处置长期资产的损失 $WACC=k_d\times\frac{D}{D+E}\times(1-t)+k_e\times\frac{E}{D+E}$。其中债务资本成本率=债务资本总额/债务资本平均金额$\times$100%=(财务费用+汇兑收益)/(期初债务资本+期末债务资本)/2;股权资本成本率应该高于同期的国债利率,加上股票投资的风险溢价,我们普遍设置为9%;t为公司实际所得税税率=1-净利润/税前利润。 公司债务=有息债务 少数股东比例=$\frac{少数股东权益}{股东权益合计}$ 股本=市值/股价
股票量化建模是指通过使用计算机软件和算法分析历史股票数据,并根据模型的结果进行投资决策的过程。Python是一种简单易学的编程语言,具有广泛的库和工具,因此在股票量化建模中得到了广泛应用。 首先,Python提供了许多用于数据处理和分析的库,如Pandas和Numpy。这些库提供了一个强大的工具集,可以快速加载、处理和分析大量的股票数据。例如,我们可以使用Pandas库来读取股票数据,并进行数据清洗和处理,以便进行后续的分析和建模。 其次,Python还提供了一些常用的量化金融库,如Zipline和PyAlgoTrade。这些库提供了一些常用的量化金融模型和算法实现,如均值回归、动量策略等。借助这些库,我们可以轻松地实现各种量化策略,并对其进行回测和优化。 此外,Python还具有丰富的可视化库,如Matplotlib和Seaborn。这些库可以用来对股票数据进行可视化分析,如绘制股价走势图、绘制交易信号等。可视化不仅可以帮助我们更好地理解股票数据,还可以帮助我们更直观地评估和优化建模结果。 最后,Python拥有一支庞大的开源社区,提供了丰富的学习资源和代码示例。无论是初学者还是有经验的开发者,都可以从社区中获取到许多有关股票量化建模的教程、文档和实战经验。 综上所述,股票量化建模使用Python可以快速高效地进行数据处理、建模和分析,并得到可视化的结果。Python所提供的丰富库和开源社区使得股票量化建模成为了更加可行和可靠的策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值