内容首发

乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech

用代码理解分析解决金融问题

首先我们快速了解一下什么是GGM模型。

GGM模型又叫做“戈登增长模型”(Gordon Growth Model,GGM)是用于对公司进行估值的工具。该理论假设公司的内在价值就是将所有未来股息支付折现到今天的价值的总和。它也可以称为股息折扣模型。

GGM模型的优点之一是它的计算非常简单,我们可以看看下方的数学公式:

股息(Do):

公司支付的股息。

通过查看公司公开的年度/季度报告,我们可以轻松获得公司(Do)支付的最新股息。

增长(g):股息的预期增长率是恒定的。

计算g的一种方法是采用公司最近支付的两到三次股息,并计算增长并将其用作持续增长的值。

注意:这种方法的问题在于,如果公司将其股息支付年度保持不变,那么我们计算中的增长率将为零。

为了克服这个问题,我们将采用不同的方法,而是使用可持续增长率。

可持续增长率是公司无需增加股权融资即可实现的增长率。

股本成本(ke):股本成本(ke):我们可以使用资本资产定价模型(CAPM)估算所需的股本成本。

GGM模型的假设

当然,如果我们使用模型,一定是假设在理想的环境下进行估值的。但是往往现实世界并不理想,所以我们一定要搞清楚模型的假设,这样,在模型失效或者模型产生较大误差的时候,我们可以清楚的知道从哪里进行排查。

GGM模型使用的假设为:这些年来股息增长率是恒定的。

股利是股东财富的核心。

权益成本必须大于股息增长。否则,我们的模型将给我们负值。

Python建模与免费API分享

为了代码简洁与大家能够轻松复现,我们直接调取了

https://financialmodelingprep.com/ 里的免费API,这个API数据非常详细,可以直接获取公司的财务数据。国内的小伙伴可以使用tushare或者wind接口进行代替。只需要将代码中的request数据源进行修改就可以咯~

数据调取与利用Python解析

我们可以直接通过最简单的request模块调取数据:

dividend =

requests.get(f'https://financialmodelingprep.com/api/v3/financials/income-statement/{这里填入你想调取的公司代码}')

以这个API接口为例,比如需要返回苹果公司的dividend信息,可以得到以下返回值:

GGM模型+CAPM模型结合我们需要获取什么数据?

那么数据如果能够通过这种方式调取API获取,我们需要什么数据呢?

公司最新股息

要通过CAPM模型计算权益成本(ke),我们将需要:公司Beta(B)。可以从financialmodelingprep API中提取

无风险利率(RF)。

市场预期收益率(ERm)。

美股的小伙伴可以计算最近一年的S&P500回报

A股的小伙伴可以计算沪深300的回报

作为我们市场预期回报

要计算可持续增长率,我们需要支付比率和股本回报率(ROE)。

计算可持续增长率

接下来,我们需要计算可持续增长率。计算比率的公式如下:

SGR =股本回报率*(1-股息支付率)

我们可以通过上方跟大家介绍的API获取股本回报率(ROE)和股息支付率这类公司的关键指标。(具体操作为通过Python解析我们上面截图的以字典形式存放的数据,并提取键ROE和payout_ratio的值:

metrics = requests.get(f'https://financialmodelingprep.com/api/v3/company-key-metrics/{这里填入你想调取的公司代码}')

metrics = metrics.json()

ROE = float(metrics['metrics'][0]['ROE'])

payout_ratio = float(metrics['metrics'][0]['Payout Ratio'])

sustgrwothrate = ROE*(1-payout_ratio)

计算权益成本(Ke)

为了通过CAPM 计算权益成本(ke),我们需要的第一个要素是无风险利率。由于一年期国库券被视为无风险证券,因此我们将使用一年期国库券。我们可以使用Pandas DataReader和FRED作为数据源。该web.DataReader方法将返回1年国库券提供的利率时间序列数据。

我们再使用iloc [-1]方法检索DataFrame的最新元素。

import pandas as pd

import pandas_datareader.data as web

import datetime

start = datetime.datetime(2019, 2, 1)

end = datetime.datetime(2020, 2, 27)

Treasury = web.DataReader(['TB1YR'], 'fred', start, end)

RF = float(Treasury.iloc[-1])

RF = RF/100

print(RF)

获取目标公司beta

同样通过调取API获取

beta = requests.get(f'https://financialmodelingprep.com/api/v3/company/profile/{quote}')

beta = beta.json()

beta = float(beta['profile']['beta'])

print(beta)

计算预期的市场回报率

最后,计算权益成本的最后一个要素是预期的市场回报率(即CAPM模型中所谓的市场溢价)。

我们将使用指数S&P 500计算去年的市场收益,A股的小伙伴可以使用沪深300进行替代即可。这就是我们将用作预期市场回报的指标。

start = datetime.datetime(2019, 1, 1)

end = datetime.datetime(2020, 7, 7)

SP500 = web.DataReader(['sp500'], 'fred', start, end)

SP500.dropna(inplace = True)

SP500yearlyreturn = (SP500['sp500'].iloc[-1]/ SP500['sp500'].iloc[0])-1

print(SP500yearlyreturn)

接着我们就可以将以上数据带入下方的公式:

大功告成!我们就获取了所有必需的数据来计算权益成本(Ke)。现在我们只需要应用公式就可以通过CAPM模型获得Ke。

上!

Py!

thon!

ke = RF+(beta*(SP500yearlyreturn - RF))

print(ke)

通过GGM模型进行公司股价估值

GGM = (Dtoday*(1+sustgrwothrate))/(ke-sustgrwothrate)

return GGM

模型的局限性

既然是模型,一定是尽可能的模拟现实,但是既然是模型,就不可能完全模拟现实,一定有相应的局限性,比如这个GGM模型的局限性为:该模型不适用于不支付股息的公司

权益成本必须大于股息增长。否则,我们的模型将返回的为负值(即分母ke-g将为负)

假设每股恒定股息在现实世界中是不现实的

另外,如果大家微调这个模型会发现:模型估值的返回值对模型的输入非常敏感。例如,权益成本的轻微增加/减少将对计算值产生重大影响,这样如果输入的数据不准确或者估计不准确,会导致模型有较大的误差。

全部代码

import requests

def valuecompany(quote):

dividend = requests.get(f'https://financialmodelingprep.com/api/v3/financials/income-statement/{quote}')

dividend = dividend.json()

dividend = dividend['financials']

Dtoday = float(dividend[0]['Dividend per Share'])

metrics = requests.get(f'https://financialmodelingprep.com/api/v3/company-key-metrics/{quote}')

metrics = metrics.json()

ROE = float(metrics['metrics'][0]['ROE'])

payout_ratio = float(metrics['metrics'][0]['Payout Ratio'])

sustgrwothrate = ROE*(1-payout_ratio)

print(sustgrwothrate)

import pandas as pd

pd.core.common.is_list_like = pd.api.types.is_list_like

import pandas_datareader.data as web

import datetime

start = datetime.datetime(2019, 1, 1)

end = datetime.datetime(2020, 7, 7)

Treasury = web.DataReader(['TB1YR'], 'fred', start, end)

RF = float(Treasury.iloc[-1])

RF = RF/100

beta = requests.get(f'https://financialmodelingprep.com/api/v3/company/profile/{quote}')

beta = beta.json()

beta = float(beta['profile']['beta'])

start = datetime.datetime(2019, 1, 1)

end = datetime.datetime(2020, 7, 7)

SP500 = web.DataReader(['sp500'], 'fred', start, end)

SP500.dropna(inplace = True)

SP500yearlyreturn = (SP500['sp500'].iloc[-1]/ SP500['sp500'].iloc[0])-1

ke = RF+(beta*(SP500yearlyreturn - RF))

GGM = (Dtoday*(1+sustgrwothrate))/(ke-sustgrwothrate)

print(GGM)

return GGM

valuecompany('这里输入你想估值的公司代码')

内容首发

乐学偶得 公众号: 乐学Fintech

用代码理解分析解决金融问题

用python做股票智能投顾模型_如何用Python建模GGM模型并对股票估值?相关推荐

  1. python股票交易模型_如何用Python建模GGM模型并对股票估值?

    内容首发 乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech 用代码理解分析解决金融问题 首先我们快速了解一下什么是GGM模型. GGM模型又叫做"戈登增长模 ...

  2. python做简单的笑脸的编程_怎么用python实现画笑脸

    在Python中画笑脸可以使用turtle库实现. 1.打开idel,通过idel新建一个py文件,在空白的文件中输入下面的代码按F5运行此文件就可以画笑脸了.from turtle import * ...

  3. python缩进的用途和使用方法_如何用Python减少循环层次和缩进的技巧

    本文实例分析了Python减少循环层次和缩进的技巧.分享给大家供大家参考,具体如下: 我们知道Python中冒号和缩进代表大括号,这样写已经可以节省很多代码行数,但是可以更优化,尽可能减少循环的层次和 ...

  4. python数据透视表计数去除重复_如何用Python实现数据透视表?解除你对透视表的疑惑!...

    相信接触过Excel的小伙伴都知道,Excel有一个非常强大的功能数据透视表可以自由选择不同字段,用不同的聚合函数进行汇总,并建立交叉表格,用以从不同层面观察数据.这么强大的功能,在Python中怎么 ...

  5. 'python program'.count('p')的值是_如何用Python分析泰坦尼克号生还率?

    原标题:如何用Python分析泰坦尼克号生还率? 1912年当时世界上最大的豪华客轮泰坦尼克号在处女航中撞上冰山沉没,船上船员及乘客共有2224人,只有710人生还.当灾难突然降临时,所有人的生死瞬间 ...

  6. python如何绘制两点间连线_如何用 Python 绘制玫瑰图等常见疫情图

    新冠疫情已经持续好几个月了,目前,我国疫情已经基本控制住了,我们会看到很多网站都提供了多种疫情统计图,今天我们使用 Python 的 pyecharts 框架来绘制一些比较常见的统计图. 1. 玫瑰图 ...

  7. python制作微信个人二维码_如何用Python制作微信好友个性签名词云图

    前言 上次查看了微信好友的位置信息,想了想,还是不过瘾,于是就琢磨起了把微信好友的个性签名拿到,然后分词,接着分析词频,最后弄出词云图来. 1.环境说明 Win10 系统下 Python3,编译器是 ...

  8. 用python输出一张九九乘法表_如何用python输出九九乘法表?有哪些方法?

    大家学了学习python这么久,大概都可以将python融汇贯通使用了吧,今天小编就教大家一个案例,融汇python主要的方法内容,一起来看下吧~ 概述 今天主要介绍如何用Python实现九九乘法表( ...

  9. python 依据某几列累加求和_如何用Python找出OBV金叉的股票?

    话不多说先上代码,此代码经过反复验证,确认计算结果与通达信完全一致,这里周期取30日: #请使用前复权的日K线数据import os#缓存数据class SecurityData: code = '' ...

最新文章

  1. 宁夏大学数学与计算机学院,毕利-宁夏大学信息工程学院
  2. mongo在哪创建管理员_如何给mongodb管理员权限
  3. PAT (Advanced Level) 1010 Radix(二分+模拟)
  4. Excel 使用技巧之 -- 统计、过滤与引用数据
  5. token的作用_说一说Coin和Token有什么不同
  6. Quartz CronTrigger最完整配置说明
  7. 浏览器网页视频下载Video Octopus插件网页视频下载插件
  8. intouch写数据到MySQL_如何将intouch数据插入到SQL数据库
  9. 2021年第十二届蓝桥杯javaA组省赛
  10. 机器学习之BP神经网络算法实现图像分类
  11. appium +夜神模拟器 java代码sendkeys 无法在模拟器输入中文
  12. ADC芯片——AD7705最详细讲解(STM32)
  13. 博士申请 | 美国佛罗里达州立大学王广老师招收人工智能全奖博士生
  14. 一个JS下拉搜索框,日期级联控件
  15. (vue) 前端实现下载本地Excel模板
  16. opencv 图片边缘渐变_opencv滤镜-PS羽化特效
  17. win10 系统 Internet Connection Sharing (ICS) 服务无法关闭-问题解决
  18. JavaScript学习(五)
  19. 【软件测试】翻了下招聘APP只会点点点,很慌......测试业务?技术?
  20. 启发式搜索(Informed Search)-贪婪算法GBS+A*算法

热门文章

  1. 作业总结:磨皮滤镜(双边滤波bilateralFilter)代码实现
  2. Glide加载自定义大小图片在刷新时图片忽大忽小问题解决
  3. 阿里顺丰互相拉黑,刘强东却为何要力挺顺丰?
  4. kettle安装运行及JDK配置
  5. start.sh spring boot 统一启动脚本 支持jenkins 等工具使用
  6. java编写流星_[Java教程]【原创】java 流星划过天空
  7. FPGA_DDS生成正弦波
  8. Eclipse各个版本及区别
  9. 李永乐复习全书高等数学 第四章 向量代数与空间解析几何
  10. matlab 合成孔径,逆合成孔径成像MATLAB算法)配书源代码