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

内容首发

乐学偶得(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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android android 修改 jpg exif 属性,Android开发之使用ExifInterface获取拍照后的图片属性...

本文实例讲述了Android开发之使用ExifInterface获取拍照后的图片属性。分享给大家供大家参考,具体如下:ExifInterface exif new ExifInterface(file.getPath());String widthStr exif.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);String heightStr …

[Selenium] 最大化或自定义浏览器的大小

driver.manage().window().maximize(); //将浏览器设置为最大化的状态driver.manage().window().setSize(new Dimension(600, 400)); //将浏览器的大小自定义为600*400转载于:https://www.cnblogs.com/MasterMonkInTemple/p/5212721.html

python中如何替换某列特定数值_python 怎么根据两列值,修改对应的某列值,其中一列的为需要修改的列标题...

自己造了些数据,不知道是否符合题主的意思。原始数据:no wrong_item0 001 a1 003 a2 002 b3 004 c处理后结果:Out[1]:no a b c0 001 1 0 02 002 0 1 01 003 1 0 03 004 0 0 1具体代码如下:import pandas as pd# 创建dataframe,或者…

android怎么ota升级,Android OTA升级过程

通过网络或直接本地获取到OTA升级包之后,通过程序就可开始Android的升级。本文描述这一过程。在获取到OTA升级包之后,可以直接通过android.os.RecoverySystem.installPackage()开启OTA升级。RecoverySystem.installPackage()是在API-8之后加入的&#xf…

进阶学习js中的执行上下文

在js中的执行上下文,菜鸟入门基础 这篇文章中我们简单的讲解了js中的上下文,今天我们就更进一步的讲解js中的执行上下文。 1、当遇到变量名和函数名相同的问题。 var a 10; function a(){console.log(1); } a(); //报错 如果你觉得函数a会覆盖变量a那你…

android使碎片切换界面,玩转Android中的碎片Fragment

引言:在Android开发中,我们都知道一些界面的展示经常会用到的就是Activity,但是Activity存在着很大的局限性,比如说手机上的界面显示在平板上面就会发生各种变形的问题,Activity也无法实现局部的数据刷新,所以Android3.0之后出来了Fragment,Fragment通常…

python123阶乘累加_使用多线程计算阶乘累加 1!+2!+3!+...+19!+20!。其中一个线程计算阶乘,另一线程实现累加并输出结果。...

运用多线程的信号灯法进行边加边计算!代码如下public class JieChen {public static void main(String args[]){Sum sum new Sum();new Play(sum).start();new Add(sum).start();}}class Play extends Thread{Sum sum;public Play(Sum sum){this.sumsum;}Overridep…

html GPS坐标实现,JavaScript 实现GPS坐标点距离计算(两个经/纬度间的距离计算)...

在LBS(基于位置服务)的一些应用中,有时我们会需要计算两个用户或两个坐标点之间的距离。要解决这类问题,就要了解空间几何的概念并结合数学中在三角函数公式计算两点之间的值。本文介绍基于经度/纬度的,两个坐标点之间的距离计算,…

机器学习基于skcilearn tensorflow电子书_Tensorflow机器学习模型的跨平台上线

本篇文章转载自博客园,作者: 刘建平Pinard在用PMML实现机器学习模型的跨平台上线中,我们讨论了使用PMML文件来实现跨平台模型上线的方法,这个方法当然也适用于tensorflow生成的模型,但是由于tensorflow模型往往较大,使…

html全局浮窗,Html 实现浮动窗口

今天在写一个html代码时,需要用到浮动窗口,通知信息,网站找了一下,代码如下带关闭按钮的浮动窗口代码(全屏漂浮)#fdck {border:1px solid #c0c0c0;margin:0 auto;padding:5px;background:#f0f0f0}关闭欢迎来到营了个销&#xff01…

python数据可视化工具 pandas_Pandas数据可视化工具——Seaborn用法整理(下)

在前一篇文章 Pandas数据可视化工具——Seaborn用法整理(上),我们了解了如何使用这些Seaborn代码绘制分布图和分类图。在本文中,我们将继续讨论Seaborn提供的一些其他以绘制不同类型统计图的功能,我们将从矩阵图开始讨论。矩阵图矩阵图是一种…

ssm框架里面前端拿HTML写,ssm框架引入Vue,声明式渲染,标签的href拼接字符串

一、引入Vue在官网上下载vue.js。并用1.下载Vue.js,地址:Vue.js下载地址二、通过ajax获取后台参数,使用Vue渲染调用后台control,获取到数据,传到前端,使用Vue进行渲染。//详细分类,使用Vue渲染function fin…

html5 observer api,基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作

MutationObserver介绍MutationObserver给开发者们提供了一种能在某个范围内的DOM树发生变化时作出适当反应的能力.该API设计用来替换掉在DOM3事件规范中引入的Mutation事件.Mutation Observer(变动观察器)是监视DOM变动的接口。当DOM对象树发生任何变动时,Mutation …

Maven(五)使用Nexus搭建Maven私服

文章装载于:http://blog.csdn.net/jun55xiu/article/details/39497089 Nexus介绍 Nexus是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库下载所需要的构件(artifact),但这通常不是一个好的做法&am…

python mean dropna_小丸子踏入python之路:python_day05(用Pandas处理泰坦尼克船员获救数据titanic_train.csv)...

泰坦尼克船员获救数据:titanic_train.csv用excel打开数据集。显示如下:写在前边:为了方便以后运用numpy和pandas的库,分别造它们的别名np和pd.import pandas as pd #造pandas的别名为pdimport numpy as np #造numpy的别名为np一、…

计算机学测打多少字,速度测试,一分钟能打多少字?

六、速度测试——检验学习效果经过一段时间的练习,输入速度提高了不少吧,赶快来测试一下现在一分钟可以输入多少英文或汉字。金山打字通2010的“速度测试”功能不仅有基本的“屏幕对照”速度测试,还有“书本对照”测试及要求较高的“同声录入…

HDFS入门(1)

2015.07.12笔记 1.HDFS Distributed File System(操作系统实现人机交互,最重要的功能是文件管理,使用文件管理系统,windows、Linux文件管理系统有共性:用户可创建文件/夹,删除,修改权限&#xf…

竞赛图 计算机网络 应用题,我校学子获2020年“中国高校计算机大赛-网络技术挑战赛”全国总决赛一等奖(图)...

近日,2020年“中国高校计算机大赛-网络技术挑战赛”全国总决赛在温州浙南科技城落下帷幕。我校计算机与信息安全学院陈俊彦、雷晓春老师指导的“智载车队”团队(成员:林楷浩、陈澳格、黄湖)在创业先锋C系列中获得全国一等奖,在创新创意A系列中…

python string模块template_Python - 定制pattern的string模板(template) 详解

定制pattern的string模板(template) 详解本文地址: http://blog.csdn.net/caroline_wendy/article/details/28625179string.Template的pattern是一个正则表达式, 可以通过覆盖pattern属性, 定义新的正则表达式.如: 使用新的定界符"{{", 把{{var}}作为变量语法.代码:#…

建立远程桌面连接计算机无密码,win7远程桌面空密码的步骤_win7系统如何设置让远程桌面登录无需密码-win7之家...

在日常工作中,可能经常会使用到远程连接桌面功能,我们要远程桌面的话,通常是要输入密码才可以的,但是有些用户觉得麻烦,那么win7系统如何设置让远程桌面登录无需密码呢?带着大家的这个问题,本文…