版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
金融计算:基于Python
第3章 Python金融计算基础【教学目的与要求】通过本章学习,结合习近平新时代中国特色社会主义经济思想,讲授Python金融数据的基本计算命令,描述性统计,常见概率分布,数据可视化,python-scipy模块及数据下载平台。【重点和难点】Python金融数据的基本计算命令,描述性统计,常见概率分布,数据可视化,python-scipy模块。【思政育人目标】将习近平新时代中国特色社会主义经济思想融入到Python金融数据计算的基础知识与命令的学习中。【课程学习目标】了解Python金融数据的基本计算命令,描述性统计,常见概率分布,掌握数据可视化,python-scipy模块及数据下载平台。金融计算:基于Python2主要内容3.1.数据的基本计算3.2.描述性统计3.3.常见概率分布3.4.数据的可视化3.5.python-scipy模块3.6.Baostock数据平台3.7.数据爬取3.8.AKShare数据平台3.9.Efinance数据平台金融计算:基于Python33.1. 数据的基本计算3.1.1.算术运算.序列运算序列运算是根据行列索引,对齐后运算,运算默认产生浮点数,对齐时缺项填充NaN(空值)。自动的数据对齐在索引处引入NAN值,缺失值在运算过程中传播。.DdtaFrame运算除了用+、-、*、/,还可以用Series和DataFrame的算术方法,因为'c'和'e'列均不在两个DataFrame对象中,在结果中以缺省值呈现,行也是同样,没有共用的列或行标签,结果都会是空。金融计算:基于Python4.运算中值填充在对不同索引的对象算术运算时,希望当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值。如使用df1的add(sub)方法,实现数据的加法(减法)。.DataFrame和序列之间运算从一个矩阵减去一个行序列时,每一行都会执行这一个操作。.函数的应用元素级数组方法也可用于操作pandas对象;函数也可应用到由各列或行所形成的一维数组上。如建立一个函数f,计算一个Series的最大值和最小值的差,在frame的每列都执行一次。金融计算:基于Python53.1.2. 排序和排名.数据集排序根据条件可以对数据集进行排序运算,使用sort_index方法可以对行或列索引进行排序(按字典顺序),它将返回一个已排序的新对象:.DataFrame排序可以根据DataFrame任意一个轴上的索引进行排序。.序列数据值的排序sort_values方法可以实现按值对Series进行排序。任何缺失值默认都会被放到Series的末尾。.DataFrame数据值的排序sort_values可以实现DataFrame一个或多个列中的值进行排序。金融计算:基于Python63.2. 描述性统计Pandas可以实现常用的数学和统计功能,主要用于从Series中提取单个值(如sum或mean)或从DataFrame的行或列中提取一个Series。3.2.1.数据汇总统计.数据求和Sum可以实现数据的汇总功能,返回一个含有列的和的序列。.间接统计Idxmin或idxmax可以实现一些间接统计,返回达到最小值或最大值的索引。金融计算:基于Python73.2.2. 相关系数与协方差相关系数和协方差是通过参数对计算出来的,corr方法用于计算两个序列中重叠的、非NA的、按索引对齐的值的相关系数;cov方法用于计算协方差。corrwith方法,可以计算DataFrame其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算)。金融计算:基于Python83.2.3. 其它统计.唯一值unique函数可以得到Series中的唯一值数组。.值的频率统计value_counts可以计算一个Series中各值按值频率降序排列。.资格统计isin是用于判断矢量化集合的成员资格,一般用于过滤Series中或DataFrame列中数据的子集。金融计算:基于Python93.3. 常见概率分布3.3.1.连续型随机变量的常见分布.均匀分布均匀分布指的是一类在定义域内概率密度函数处处相等的统计分布。.正态分布正态分布也叫高斯分布.指数分布指数分布通常被广泛用在描述一个特定事件发生所需要的时间,在指数分布随机变量的分布中,有着很少的大数值和非常多的小数值.金融计算:基于Python103.3.2. 连续型随机变量的常见分布.伯努利分布伯努利分布描述的是离散型变量且发生1次的概率分布,且X取值只有2个,要么是0,要么是1..二项分布二项分布可以认为是一种只有两种结果(成功/失败)的单次试验重复多次后成功次数的分布概率。.泊松分布假设已知事件在单位时间(或者单位面积)内发生的平均次数为λ,则泊松分布描述了事件在单位时间(或者单位面积)内发生的具体次数为k的概率。金融计算:基于Python113.4. 数据的可视化3.4.1.常用的绘图函数matplotlib是Python用于创建图表的绘图包,提供了一整套绘图命令,绘制中文图形时,必须进行基本的设置。importmatplotlib.pyplotasplt #基本绘图包plt.rcParams['font.sans-serif']=['KaiTi'] #黑体plt.rcParams['axes.unicode_minus']=False #正常显示图中负号plt.figure(figsize=(5,4))#图形大小金融计算:基于Python12.基本统计图bar()命令是绘制条形图。pie()是绘制饼图的命令。plot()是绘制拆线图的命令。hist()用于表示连续型变量的频数分布,实际应用中常用于考察变量的分布是否服从某种分类类型。scatter()是绘制散点图的命令。金融计算:基于Python13.图形参数设置绘制图形过程中,标题、标签、颜色、线形等参数设置命令及说明。金融计算:基于Python14命令说明plt.title标题,可以指定名称、位置、颜色、字体大小等参数。plt.xlim设置横坐标范围,可以指定名称、位置、颜色、字体大小等参数。plt.ylim设置纵坐标范围,可以指定名称、位置、颜色、字体大小等参数。plt.xlabel设置横坐标名称,可以指定名称、位置、颜色、字体大小等参数。plt.ylabel设置纵坐标名称,可以指定名称、位置、颜色、字体大小等参数。plt.xticks设置横坐标刻度,可以指定名称、位置、颜色、字体大小等参数。plt.yticks设置纵坐标刻度,可以指定名称、位置、颜色、字体大小等参数。colors或c控制图形的颜色,'r':设置为红色,'b':设置为蓝色,'g':设置为绿色,'c':设置为青色,'m':设置为品红色,'y':设置为黄色,'k':设置为黑色,'w':设置为白色linestyle控制连线的线形(‘-’:实线,‘--’:虚线,'-.'点划线,':'虚线)linewidth或lw线宽,(字符串格式)可以输入浮点数。marker控制符号的类型,详见表3-3plt.axvline在纵坐标y处画垂直线plt.axhline在横坐标x处画垂直线text(x,y,labels,...)在(x,y)处添加用labels指定的文字legend为图形加图例,可以指定图例的大小、位置、标签。grid添加网格。可以指定网格的方向、线类型、线宽、颜色。标记符说明'.'点','像素点'o'循环'*'星号'v'下三角'^'上三角'<'左三角'>'右三角'1'向下微调'2'向上微调'3'向左微调'4'向右微调's'正方形'p'五边形'h'六边形1'H'六边形2'+'加号'P'加满'x'x'X'X满'D'钻石'd'钻石瘦'_'水平线‘|’排.多图绘制可以通过add_subplot创建多个图。金融计算:基于Python153.4.2. 基于pandas的绘图在pandas中的数据包含多列、多行的数据,还有行和列标签,自身内置的方法可以简化从DataFrame和Series绘制图形,修改默认的颜色方案和绘图类型,提高可读性和美观度。Plot()可以实现Series和DataFrame的绘制图表的功能,默认生成的是线型图。DataFrame.plot(kind='line')将所有列绘制的图到一张图片中,用不同线条颜色及不同的图例标签来表示。其中,kind是图类型:line(缺省)是拆线图;bar是垂直条图;barh是水平条图;hist是直方图;box是箱线图;kde是核密度估计图,对柱状图添加概率密度线,与density功能一样;area是面积图;pie是饼图;scatter是散点图。金融计算:基于Python163.4.3. 特殊统计图.数学函数图.气泡图金融计算:基于Python173.5. python-scipy模块scipy模块依赖于numpy模块,能方便的给出很多数学操作。基本子模块及功能如表3-3。金融计算:基于Python18子模块名称功能说明scipy.special:特殊函数模块里面有各种特殊的数学函数,可以直接调用,如贝塞尔函数.egrate:积分模块。可以求多重积分,高斯积分,解常微分方程scipyoptimize.优化模块里面有各种优化算法,包括用来求有/无约束的多元标量函数最小值算法,最小二乘法,求有/无约束的单变量函数最小值算法,还有解各种复杂方程的算法erpolation:插值模块提供各种一维、二维、N维插值算法,包括B样条插值、径向基函数插值等.scipy.fftpack:FFT(快速傅里叶变换)模块。可以进行FFT/DCT/DSTsipsgnak:信号处理模块包括样条插值,卷积,差分等滤波方法,还有FIR/IR滤波,中值、排序、维纳、希尔伯特等滤波器,各种谱分析算法scipy.linalg:线代模块提供各种线性代数中的常规操作scipy.sparse:稀疏矩阵模块提供了大型稀疏矩阵计算中的各种算法scipy.spatial:空间结构模块提供了一些空间相关的数据结构和算法,如elaunay三角剖分,共面点,凸包维诺图,Kd树等scipy.stats:统计模块提供一些统计学上常用的函数scipy.ndimage:多维图像处理模块提供一些多维图像处理上的常用算法scipy.io:lO模块提供与其他文件的接口,如matlab文件、IDL文件、Wav(音频)文件、ARFF文件3.5.1. 求积分integrate子模块是积分函数:quad()是自适应求积分;fixed_quad()是固定高斯求积分;quadrature()是自适应高斯求积;romberg()是自适应龙贝格求积分。金融计算:基于Python193.5.2. 插值计算利率曲线的拟合等金融领域经常会用到插值法计算,可以使用interpolate模块下的interp1d(x,y,kind)函数:nearest是最近邻插值;zero是阶梯插值法;slinear是线性插值法;quadratic是2阶样条插值;cubic:3是阶样条插值。金融计算:基于Python203.5.3. 方程组求解方程组求解可使用solve函数、fsolve函数实现。金融计算:基于Python213.5.4. 优化问题
金融计算:基于Python223.6. Baostock数据平台3.6.1.平台说明证券宝是一个免费、开源的证券数据平台(无需注册)。提供大量准确、完整的证券历史行情数据、上市公司财务数据等。返回的数据格式:pandasDataFrame类型,以便于用pandas/NumPy/Matplotlib进行数据分析和可视化。同时支持通过BaoStock的数据存储功能,将数据全部保存到本地后进行分析。支持语言:目前版本BaoS目前只支持Python3.5及以上(暂不支持python2.x)。金融计算:基于Python23数据说明时间范围股票数据日、周、月K线数据,时间范围:1990-12-19至今;5、15、30、60分钟K线数据1999-07-26至今指数数据日、周、月K线已经包含指数:综合指数,规模指数,一级行业指数,二级行业指数,策略指数,成长指数,价值指数,主题指数,基金指数,债券指数。2006-01-01至今季频财务数据已经包含的财务数据:部分上市公司资产负债信息、上市公司现金流量信息、上市公司利润信息、上市公司杜邦指标信息。2007年至今季频公司报告上市公司业绩预告信息;上市公司业绩快报信息2003年至今;2006年至今.login()函数登录系统。建立与服务器的连接,无需注册即可登录。需要说明的是,登录后超过一段时间没有操作再调用api请求时会超时,需要重新登录才能继续下载数据不需要使用的时候可以主动调用bs.logout()函数断开与服务器的连接。.logout()函数不需要使用数据的时候可以主动调用bs.logout()函数断开与服务器的连接。金融计算:基于Python24.query_history_k_data_plus()函数通过API接口获取A股历史交易数据,可以通过参数设置获取日k线、周k线、月k线,以及5分钟、15分钟、30分钟和60分钟k线数据,适合搭配均线数据进行选股和分析。返回类型:pandas的DataFrame类型;样本:1990-12-19至当前时间的数据;数据种类:不复权、前复权、后复权数据。金融计算:基于Python253.6.3. 季频数据获取函数.query_profit_data()函数通过API接口获取季频盈利能力信息,可以通过参数设置获取对应年份、季度数据,提供2007年至今数据。返回类型:pandas的DataFrame类型。.query_operation_data()函数通过API接口获取季频营运能力信息,可以通过参数设置获取对应年份、季度数据,提供2007年至今数据。返回类型:pandas的DataFrame类型。金融计算:基于Python263.6.4.板块数据获取函数.query_stock_industry()函数通过API接口获取行业分类信息,更新频率:每周一更新。返回类型:pandas的DataFrame类型。金融计算:基于Python273.6.5.宏观经济数据获取函数.query_deposit_rate_data()函数通过API接口获取存款利率,可以通过参数设置获取对应起止日期的数据。返回类型:pandas的DataFrame类型。金融计算:基于Python283.6.6.指定数据导入.获取指定日期全部股票的日K线数据.获取指定时间区域部分股票的日K线数据金融计算:基于Python293.7. 数据爬取在大数据时代,互联网成为获取金融数据的重要途径之一,因此,掌握一些Python、Web前端与爬虫的相关知识是非常必要的。3.7.1.网页结构任意打开一个网页(/),单击鼠标右键,从弹出的快捷菜单中选择“检查”选项,即可查看该网页结构的相应代码,如图3-1所示。分析图3-1,该图左半部分为HTML文件,右半部分为CSS样式,用<script></script>标签的就是JavaScript代码。用户浏览的网页就是浏览器染后的结果,浏览器就是把HTML、CSS和JavaScript进行翻译得到用户使用的网页界面。金融计算:基于Python303.7.2. Python与爬虫.爬虫基本原理网页请求和响应的过程:Request(请求)。每一个用户打开的网页都必须在最开始由用户向服务器发送访问的请求。Response(响应)。服务器在接收到用户的请求后,会验证请求的有效性,然后向用户发送相应的内容。客户端接收到服务器的相应内容后,再将此内容展示出来,以供用户浏览。网页请求的方式一般分为GET和POST两种:GET是最常见的请求方式,一般用于获取或者查询资源信息,也是大多数网站使用的方式。POST与GET相比,多了以表单形式上传参数的功能,因此除了查询信息外,还可以修改信息。金融计算:基于Python31基础爬虫主要包括爬虫调度器、URL管理器、HTML下载器、HTML解析器和数据存储器等五大模块,功能如下: 爬虫调度器统筹其他4个模块的协调工作;
URL管理器管理URL链接,维护已经爬取的URL集合和未爬取的URL集合,提供获取新URL链接的接口;
HTML下载器用于从URL管理器中获取未爬取的URL链接,并下载HTML网页;
HTML解析器用于从HTML下载器中获取已经下载的HTML网页,并从中解析出新的URL链接交给URL管理器,解析出有效数据交给数据存储器; 数据存储器用于将HTML解析器解析出来的数据通过文件或者数据库的形式存储起来。.urllib模块使用Python编写爬虫代码,要解决的第一个问题是Python如何访问互联网,为此Python专门准备了urllib模块。urllib是URL和lib两个单词共同构成的,URL就是网页的地址,lib是library(库)的缩写。URL的一般格式为(带方括号[]的为可选项):protocol://hostname[port]/path/[parameters][?query]#fragment.URL由以下三部分组成:协议:常见的有HTTP、HTTPS、FTP、FILE(访问本地文件夹)、ED2K(电驴的专用链接)等。存放资源的服务器的域名系统(DNS)主机名或IP地址(有时候要包含端口号,各种传输协议都有默认的端口号,如HTTP的默认端口为80)主机资源的具体地址,如目录和文件名等。金融计算:基于Python32[例3.7.1]使用urllib访问目标网页在urllib模块中可以使用urllib.request.urlopen()函数访问网页,urllib.request.urlopen()函数的参数为:urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)金融计算:基于Python33[例3.7.2]使用urllib获取响应信息通过response.getcode()、response.geturl()及response.getheaders()获取各种响应信息。金融计算:基于Python34.Requests库Requests库是用Python语言编写的,基于urllib,采用Apache2Licensed开源协议的HTTP库,它比urllib更方便,可以节约开发者的工作量,完全满足HTTP测试求。Requests实现了HTTP协议中的地大部分功能,它提供的功能包括Keep-Alive、连接池、Cookie持久化、内容自动解压、HTTP代理、SSL认证、连接超时、Session等很多特性,更重要的是它同时兼客Python2和Python3。导入importrequests,使用requests库模拟发送并且获取响应对象赋给变量res格式为:res=requests.请求方式(url,相关参数)金融计算:基于Python35参数功能res.encoding查看响应正文的编码格式res.text查看响应正文的文本内容返回的是一个字符串格式res.content查看响应正文的文本内容返回的是一个字节格式如果获取图片数据或者音视频数据通过它直接获取二进制数据并进行保存res.status_code查看响应的状态码res.headers查看响应的响应头res.url查看响应的URLres.request.headers查看请求头信息res.request.body查看请求正文res.request.url查看请求urlres.request.method查看请求方式res.cookies获取响应中的cookie得到的是一个RequestsCookieJar对象[例3.7.3]自定义请求响应头先定义一个字典格式:h={"请求头键":"对应的值","请求头键2":"对应的值",...};然后让定义的字典与请求产生关联res=requests.请求方式(url,headers=h)。金融计算:基于Python36[例3.7.4]发送携带查询字符串参数的GET请求方法1:参数直接写在url中,res=requests.get("/s?wd=河北经贸大学方法2:先定义一个字典,p={"查询参数1":"对应的值","查询参数2":"对应的值",...}(查询参数就是值查询字符串参数URL中?后面接的就是查询字符串参数);然后让定义的字典与请求产生关联,res=requests.get(url,params=p)金融计算:基于Python37[例3.7.5]使用GET方式抓取网页数据输入:#导入requests库importrequests#访问目标网页url=""#将获取的数据保存到strhtml变量中strhtml=requests.get(url)#打印网页源代码print(strhtml.text)金融计算:基于Python38[例3.7.6]使用GET方式抓取网页数据,并设置超时反应输入:#导入requests库importrequests#访问目标网页url1=""r=requests.get(url1,timeout=3)#打印网页源代码print(r.status_code)金融计算:基于Python39[例3.7.7]使用GET方式抓取网页图片输入:importrequests#访问目标网页url1="/it/u=3287115334,1498982333&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=281"r1=requests.get(url1)withopen('ls1.png','wb')asf:f.write(r1.content)importmatplotlib.pyplotaspltfromPILimportImageimg=Image.open('ls1.png')img=np.array(img)plt.imshow(img)plt.show()金融计算:基于Python403.7.3. 爬取网页内容一般地,按照爬取网页、解析数据、保存网页的思路爬取所需要的网页内容。防止乱码,设置编码为utf-8。[例3.7.9]爬取/top250?start=网页的电影详情链接、图片链接、影片中文名、影片外国名、评分、评价数、概况、相关信息,将评分前100的信息保存到excel文件中。第一步,数据库导入第二步,设置正则表达式第三步,设置爬取网页的函数第四步,设置变量存储爬取的网页信息的函数第五步,设置得到指定一个URL的网页内容的函数第六步,设置保存数据到表格的函数第七步,调用函数的程序金融计算:基于Python413.8. AKShare数据平台AKShare是基于Python的财经数据接口库,目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具,主要用于学术研究目的。AKShare的特点是获取的是相对权威的财经数据网站公布的原始数据,通过利用原始数据进行各数据源之间的交叉验证,进而再加工,从而得出科学的结论。金融计算:基于Python423.8.1. 安装目前AKShare仅支持64位版本的操作系统安装和使用,支持Python3.8(64位)及以上版本。AKShare推荐安装最新版本的Anaconda(64位),可以解决大部分环境配置问题。安装命令:pipinstallakshare--upgrade注意:--upgrade代表更新到最新版,初次安装不加也可以,估计是这个包更新频率比较高,直接加上比较方便。金融计算:基于Python433.8.2.AKShare数据接囗一览.货币市场数据.资本市场数据.外汇市场数据.金融衍生品数据.商品数据.宏观数据.环境数据.COVID-19数据金融计算:基于Python443.8.3. 案例[例3.8.1]东方财富-数据中心-中国油价-汽柴油历史调价信息,接口:energy_oil_hist,目标地址:/cjsj/oil_default.html,获得此数据。输入:importakshareasakenergy_oil_hist_df=ak.energy_oil_hist()energy_oil_hist_df.head()金融计算:基于Python453.9. Efinance数据平台efinance是由个人打造的用于获取股票、基金、期货数据的免费开源Python库,其主要基于东方财富网的api获取数据。虽然本身并没有提供数据服务,但其提供的功能已经比较多了,包括同时支持多股票请求,支持日k、周k、月k、60分钟、30分钟、15分钟、5分钟、1分钟k线数据等。金融计算:基于Python463.9.1. 安装库的安装方法是:打开cmd(命令提示符或者其他终端工具),输入以下代码pipinstallefinance如果需要更新,则在cmd(命令提示符或者其他终端工具)运行下面的代码pipinstallefinance--upgrade金融计算:基于Python473.9.2.获取股票历史日K线数据输入:importefinanceasef#股票代码stock_code='600519'stock_k=ef.stock.get_quote_history(stock_code)stock_k.head()金融计算:基于Python483.9.3.获取基金数据输入:#获取基金历史净值信息ef.fund.get_quote_history('161725')金融计算:基于Python493.9.4.可转债数据输入:#全部可转债信息bondq=ef.bond.get_all_base_info()bondq.head()金融计算:基于Python503.9.5.期货数据输入:#获取交易所期货基本信息futures=ef.futures.get_futures_base_info()futures.head()金融计算:基于Python51金融计算:基于Python52金融计算:基于Python
第4章 Python债券价值计算【教学目的与要求】通过本章学习,结合习近平新时代中国特色社会主义经济思想,讲授Python资金的时间价值、债券定价、久期、凸度、免疫的计算。【重点和难点】久期、凸度、免疫的计算【思政育人目标】将习近平新时代中国特色社会主义经济思想融入到Python资金的时间价值、债券定价、久期、凸度、免疫的学习中。【课程学习目标】了解Python资金的时间价值,掌握Python债券定价、久期、凸度、免疫的计算。金融计算:基于Python54主要内容4.1.资金的时间价值4.2.债券定价4.3.久期计算4.4.凸度计算4.5.免疫计算金融计算:基于Python554.1. 资金的时间价值资金的时间价值即货币的时间价值,就是指当前所持有的一定量货币比未来获得的等量货币具有更高的价值。计算货币时间价值量时,要引入现值和终值两个概念来表示不同时期的货币时间价值。现值(PV)是指未来某一时点上的一定量现金折合到现在的价值,通常记作P;终值(FV)是指资金经过若干时期后包括本金和时间价值在内的未来价值,通常记作F;利率是指一定时期内利息额与借贷资金额(本金)的比率,通常记作r。如果单位本金在t后的价值是a(t),则当t变动时,a(t)称为累积函数。金融计算:基于Python564.1.1. 单利计息定义函数如下输入:
defdl(r,t):dt=1+r*treturndt金融计算:基于Python574.1.2. 复利计息deffl(r,t):ft=(1+r)**treturnft[例4.1.1]假设本金100万元,计算期是5年,年利率是5%,每年计息两次,比较单利和复利计息的本息和。金融计算:基于Python584.1.3. 贴现函数deftxdl(r,n):dn=(1+t*r)**(-1)returndndeftxfl(r,n):fn=(1+r)**(-t)returnfn[例4.1.2]假设年利率是5%,求未来10年末资金100万元的现值。金融计算:基于Python594.1.4. 利率计息次数defsjll(r,n):r1=(1+r/n)**n-1returnr1[例4.1.3]方案一:年利率8%,每半年付息一次;方案二:年利率8%,每季度付息一次。应选择哪个方案进行投资?金融计算:基于Python604.1.5. 连续复利deflxfl(r,m):at=np.exp(r*m)returnat[例4.1.4]年利率8%,投资10年,连续复利率是多少?金融计算:基于Python614.1.6. 多期复利终值输入:defdqflzz(ct,r,t):ct1=ct*(1+r)**tfv=sum(ct1)returnfv[例4.1.5]假设某公司在一年后投资100万元,两年后投资200万元,三年后投资300万元,四年后投资400万元,如果投资的收益率为10%,那么5年后投资收益是多少?金融计算:基于Python624.1.7. 多期复利现值defdqflxz(ct,r,t):ct1=ct*(1+r)**(-t)pv=sum(ct1)returnpv[例4.1.6]假设某公司未来五年的投资额分别为100万元、200万元、300万元、、400万元、500万元,如果贴现率为10%,投资的现值是多少?金融计算:基于Python634.2. 债券定价4.2.1.直接债券定价defbpd(ct,F,y,t,n):a=ct/(1+y)**tb=F/(1+y)**np=sum(a)+sum(b)returnp[例4.2.1]假设新发行的3年期的债券面值为1000元,以后每半年支付利息50元,市场年收益为10%,那么债券的现值为多少?金融计算:基于Python644.2.2. 零息债券定价deflxbpd(F,y,n):b=F/(1+y)**nreturnb[例4.2.2]假设8年期的债券面值为1000元,市场年收益为8%,每半年付息一次的零息债券,那么债券的现值为多少?金融计算:基于Python654.2.3. 到期收益率计算importscipy.optimizeassoimportnumpyasnpdefYTM(P,C,k,M,T):defff(y):coupon=[]foriinnp.arange(0,T*k):coupon.append((C/k)/pow(1+y,i+1))returnnp.sum(coupon)+M/pow(1+y,T*k)-Preturnso.fsolve(ff,0.1)[例4.2.3]5年期的债券面值为100元,以后每半年支付利息2.5元,现在债券的价格是110元,求该债券的到期收益率。金融计算:基于Python664.2.4. 债券的赎回收益率计算defshbpd(ct,cp,y,t,n2):a=ct/(1+y)**tb=cp/(1+y)**n2p=sum(a)+sum(b)returnp[例4.2.4]有效期为18年的债券面值为100元,年票面利率是6%,每半年支付利息一次的可赎回债券,赎回年收益率为15.2%。假设这个债券最早可以在5年后以103元的价格赎回,求债券的市场价格。金融计算:基于Python674.3. 久期计算4.3.1.马考勒久期defdur(ct,F,y,n):a=ct/(1+y)**tb=F/(1+y)**np=sum(a)+sum(b)c=t*ct/(1+y)**tc1=n*F/(1+y)**np1=sum(c)+sum(c1)D=p1/preturnD[例4.3.1]票面面值100元,息票率为8%的三年期的债券,半年付息一次,到期年收益率为10%,求该三年期债券的麦考利久期。金融计算:基于Python684.3.2. 影响债券价格的要素deffxzq(y,i,n):a=(1+y)/yb=1+y+n*(i-y)c=i*((1+y)**n-1)+ydur=a-b/creturndurdeffxzq1(y,n):dur=(1+y)/y-(1+y)/(y*(1+y)**n)returndur金融计算:基于Python694.3.3. 资产组合久期[例4.3.2]一个债券组合由三种半年付息的债券构成,债券A面值100元,票面利率6%,到期时间6年,市场价格951.68元,到期年收益率7%,债券B面值2万元,票面利率5.5%,到期时间5年,市场价格2万元,到期年收益率5.5%,债券C面值1万元,票面利率7.5%,到期时间4年,市场价格9831.68元,到期年收益率8%,求该债券组合的久期。金融计算:基于Python704.4. 凸度计算4.4.1.凸度defconv(ct,F,y,n):a=ct/(1+y)**tb=F/(1+y)**np=sum(a)+sum(b)c=(t**2+t)*ct/(1+y)**tc1=(n**2+n)*F/(1+y)**np1=sum(c)+sum(c1)con=p1/p*(1+y)**(-2)returncon[例4.4.1]票面面值100元,息票率8%的三年期的债券,半年付息一次,到期年收益率10%,求该债券的凸度。金融计算:基于Python714.4.2. 凸度与价格波动的关系[例4.4.2]在[例4.4.1]中,修正久期是2.65,年凸度为8.337,如果预期未来收益将为11%,计算凸度与价格波动的关系。输入:dp=-2.65*0.01+0.5*8.337*0.01**2print(dp)金融计算:基于Python724.5. 免疫计算债券组合的主要风险来自利率变化,就是期限结构的改变。免疫是保护债券组合避免利率风险的一种策略。管理者选择久期等于他们负债的到期期限的债券组合,利用价格风险和再投资率风俭互相抵消的特点,保证管理者不受损失。金融计算:基于Python734.5.1. 再投资的收益分析[例4.5.1]如果债券管理者为投资者管理一个面值为100元,息票率是8%,息票再投资率是8%的5年期债券,分析当利率发生变化时投资的收益情况。***由于利率的下降导致债券的收益率下降。使用免疫策略可以避免这种结果,即不使复利率下降。金融计算:基于Python744.5.2. 利率变化对债券价格的影响当利率变化时,在给定到期期限上如何影响债券的价格,对收益率的影响如何呢?[例4.5.2]一个6年期面值为100元息票每亩和再投资率都是8%,计算其久期,分析利率上升至9%和下降至6%的债券价格及收益率。金融计算:基于Python754.5.3. 免疫策略设计与实现由上述分析可以得出利率发生变化时,影响债券价格的变化:利率下降、再投资收入减少,而债券价格上升;利率上升,再投资收入增加,而债券价格下降。免疫是利用再投资收入和债券价格相反交动、互相抵消来消除利率风险的。免疫策略广泛用于减少利率风险,不仅可以应用于个别债券,而且可以应用于债券组合。这时债券组合的久期是包含各个债券久期的加权平均和。金融计算:基于Python76金融计算:基于Python77金融计算:基于Python
第5章 Python股票价值计算【教学目的与要求】通过本章学习,结合习近平新时代中国特色社会主义经济思想,讲授Python的股息贴现模型计算、市盈率模型计算、负债情况下的自由现金流分析。【重点和难点】Python的股息贴现模型计算、市盈率模型计算、负债情况下的自由现金流分析。【思政育人目标】将习近平新时代中国特色社会主义经济思想融入到Python的股息贴现模型计算、市盈率模型计算、负债情况下的自由现金流分析的学习中。【课程学习目标】了解股息贴现模型计算、市盈率模型计算、负债情况下的自由现金流分析的基本理论,掌握其Python的计算方法。金融计算:基于Python79主要内容5.1. 股息贴现模型5.2. 市盈率模型5.3. 负债情况下的自由现金流分析法金融计算:基于Python805.1. 股息贴现模型5.1.1. 零增长模型零增长模型(zero-growthmodel)是股息贴现模型的一种特殊形式,它假定股息是固定不变的。[例5.1.1]假定投资者预期某公司每期支付的股息将永久性地固定为1.15元/每股,并且贴现率定为13.4%,那么,该公司股票的内在价值等于多少?金融计算:基于Python815.1.2. 不变增长模型(戈登模型)[例5.1.2]如果X公司股票的股利增长率为0.03,第0期支付的股利为2元/股,市场资本率为12%,求其内在价值?金融计算:基于Python825.1.3. 三阶段增长模型及H模型. 三阶段增长模型三阶段增长模型(three-stage-growthmodel)是股息贴现模型的第三种特殊形式,最早是由莫洛多斯基(N.Molodovsky,1965)提出,现在仍然被许多投资银行广泛使用。金融计算:基于Python83股息增长的三个不同阶段:第一阶段(期限为A):股息的增长率为一个常数(ga)第二阶段(A+1到B-1):股息增长率以线性的方式从ga变化为gn,gn是第三阶段的股息增长率。第三阶段(B到永远):股息的增长率也是一个常数(gn),该增长率是公司长期的正常的增长率。即戈登增长模型股息的增长率为一个常数(ga)股息增长率以线性的方式从ga
变化为gn
张瑞锋-金融市场学-普通股价值分析
张亦春《金融市场学》观点:defsfun(d0,ga,gn,y,t1,t2,A,B):#第一阶段v1a1=((1+ga)/(1+y))**t1v1=d0*sum(a1)#第二阶段v2gt1=ga-(ga-gn)*(t2[0]-A)/(B-A)dt1=d0*(1+ga)**A*(1+gt1)a21=dt1/(1+y)**t2[0]gt2=ga-(ga-gn)*(t2[1]-A)/(B-A)dt2=dt1*(1+gt2)a22=dt2/(1+y)**t2[1]gt3=ga-(ga-gn)*(t2[2]-A)/(B-A)dt3=dt2*(1+gt3)a23=dt3/(1+y)**t2[2]v2=a21+a22+a23#第三阶段v3v3=dt3*(1+gn)/((y-gn)*(1+y)**(B-1))v=v1+v2+v3returnv金融计算:基于Python85刘红忠《金融市场学》观点defsfun(d0,ga,gn,y,t1,t2,A,B):#第一阶段v1a1=((1+ga)/(1+y))**t1v1=d0*sum(a1)#第二阶段v2gt1=ga-(ga-gn)*(t2[0]-A)/(B-A)dt1=d0*(1+ga)**A*(1+gt1)a21=dt1/(1+y)**t2[0]gt2=ga-(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 背诵消消乐课件
- 天津市宝坻区大口屯高中2026届生物高三上期末预测试题含解析
- 医疗数据安全保险应用探索
- 医疗数据安全人才翻转课堂实践
- 胃肠解剖课件
- 医疗数据安全与医疗数据安全体系
- 胃癌病人的护理课件
- 医疗数据可追溯性的区块链全流程追踪体系
- 2026届上海市交大嘉定生物高三第一学期期末复习检测试题含解析
- 肿瘤药学课件
- 印刷ctp制版管理制度
- 广东省广州市2025届高三下学期考前冲刺训练(一)英语试卷含答案
- T-CWAN 0063-2023 焊接数值模拟热弹塑性有限元方法
- 2024鄂尔多斯市东胜国有资产投资控股集团有限公司招聘26人笔试参考题库附带答案详解
- 外研版(三起)(2024)三年级下册英语Unit 5 单元测试卷(含答案)
- 山东省济南市2024-2025学年高三上学期1月期末考试 化学试题(含答案)
- 幼儿园防食物中毒安全主题
- 我的家乡四川南充
- 市场拓展与销售渠道拓展方案
- 工地大门施工协议书
- GB/T 15651.7-2024半导体器件第5-7部分:光电子器件光电二极管和光电晶体管
评论
0/150
提交评论