本章导读
在当代金融学的发展中,基于计算机系统的定量计算对投资分析、风险控制等起着越来越重要的作用。而MATLAB作为一款优秀的工程软件,在金融计算领域仍然秉承了其易用的风格,并将矩阵作为计算的基础单元。
其次,MATLAB作为一个研究平台和开发平台,还提供了良好的对外接口,并且MATLAB对Java的支持极大地拓宽了其在复杂IT环境中的集成开发速度。对于MATLAB R2008b来说,其对C、Fortran、SQL、Java等的支持方便了研究人员在一个统一的环境下进行快速开发。
另外MATLAB内置的工具箱提供了标准的金融模型,使得开发人员不用在底层模型上耗费过多的时间,并且重用性上有了很大的提升。在MATLAB R2008b及更高版本中,内置了金融类的三个工具箱:金融工具箱(Financial Toolbox)、金融衍生品工具箱(Financial Derivatives Toolbox)和固定收益工具箱(Fixed-Income Toolbox)。
在保险和金融领域,MATLAB在快速开发领域体现出来的独特优势,使得许多国际大公司开始考虑并部署基于MATLAB平台的应用。
瑞士再保险公司对于巨型自然灾害提供再保险服务,由于自然灾害的不可预测性,特别是在一些飓风等极端天气不经常发生的地区。这也就意味着再保险业务的开展不能依赖于历史数据而准确地确定可能潜在的损失。
瑞士再保险公司的自然灾害小组使用MATLAB开发了下一代的自然灾害潜在损失评估模型的原型。模型包括了其多年来在此领域积累的众多模型。
Gerry Lemcke的一句话也许能够体现出MATLAB在这方面的优势:“MATLAB帮助我们在一个非常短的时间内将我们30多年来积累的知识集成到一个应用框架下。在这个项目中,MATLAB是一个非常理想的软件开发环境,使得许多人能够同时在统一的环境下解决一个复杂的问题。”
MATLAB在这种情况下的优势在于其快速开发性、协作性以及多语言支持特性,特别是在跨语言平台的混编上。这就使得一个组织或机构以前积累下的IT资源能够得以以低成本的方式重复利用。
在此项目中,瑞士再保险面临的首要问题就是时间的问题。在再保险行业中,主要数据的更新都是在每年的最后一个财季,这也就意味着相关人员只能从9月份开始培训,给Lemcke和他的同事留下的时间就只有8个月。
多年来,瑞士再保险的专家们基于不同的计算机语言和开发环境建立起了独立的关于地震、洪水、飓风等自然灾害的模型。自然灾害小组想在此基础上将大量的已有数据导入到建立的原型中。
在算法开发阶段,小组的首要任务就是通过很多的模拟和测试来检验其模型。Excel不能有效地处理大规模的数据计算工作,而学习Java和C++不论是从培训的时间上,还是程序开发的质量上,都不能满足项目的需要。
“比如,当你想计算美国发生的热带风暴时,你需要运行一百万个人工模拟的北大西洋热带风暴的数据,你需要快速地分析这些模拟数据。”Lemcke说。
自然灾害小组的专家基于MATLAB系统和以前他们积累下来的经验,在八个月内完成了模型的建立。
Lemcke表示:“MATLAB是一个非常好的开发和测试模型的环境,特别是对于一些非IT类人员。在同Excel以及其他复杂语言,例如C++和Java等的互连上MATLAB同样表现出色。所以它是我们必然的选择。”
自然灾害小组首先将所有的模型组合到了一起,然后将所有的数据导入到MATLAB中。然后他们将精力集中在模型的开发,客户的需求和反馈上。
Lemcke事后回忆说:“当时将所有的模型组合到一起纯粹是摸索着前进。我们是边学边做。如果你发现什么东西不对了,你可以重写优化代码,以便于提高速度和数据的处理能力。”
由于瑞士再保险公司只有大概1000个左右北大西洋上实际热带风暴的数据,他们用蒙特卡罗模拟的方式,在给定将来可能发生的热带风暴物理边界的情况下进行人工模拟。小组通过将这些人工模拟的数据和已有的历史数据进行对比,来评估可能存在的潜在损失。
与此同时,小组人员用MATLAB自带的MAP工具箱将这些地理数据和对象转换成相应的地图对象。
最后,其IT部门用Java重写了这个模型,从香港到南非的50多家客户现在使用这个模型去计算地震和热带风暴等自然灾害可能带来的潜在损失。
目前,瑞士再保险集团正将MATLAB应用于其对美国洪灾风险的控制上。
MATLAB在风险控制和金融领域有着巨大的应用优势,这与MATLAB本身的设计功能有关。另外,其对于非专业人士来说,它是一个非常容易上手的工具,同时其对功能的集成度非常高,有利于提高开发的速度,使得非专业人士可以在很短的时间内开发出具有专业水平的产品。
MATLAB的金融工具箱为金融计算提供了一个集成的计算环境,在金融工具箱的帮助下可以实现对金融数据的分析,统计以及可视化等功能。在金融工具箱的基础上,可以开发出针对复杂金融问题的解决方案。
金融工具箱主要可以用于解决以下问题:
●计算资产组合以及其他衍生证券的价格、收益率及敏感性等;
●基于SIA标准的固定收益类证券的价格、收益率及敏感性的计算等;
●实现对复杂资产组合的分析和管理等;
●设计和评估资产组合的对冲策略;
●实现对风险的识别、度量和控制等;
●设计和评估资产组合的对冲策略;
●实现对现金流的计算,包括收益率及折旧等;
●实现对经济活动的分析和预测等;
●实现金融时间序列数据的分析和可视化;
●实现探索性研究所需要的计算平台。
MATLAB R2008b版本中包含的是3.5版本的金融工具箱,其体系结构如图5-1所示:
图5-1 金融工具箱的结构图
金融工具箱解决的问题是金融计算中的常见问题,覆盖面比较广,能够解决一般的金融问题,并且作为金融计算的基础,其规范了数据格式和结构等基本问题。金融工具箱在MATLAB的计算环境中起着非常基础的作用。
在一般性金融问题中,第一部分主要集中在数据格式的整理和数据可视化上。为使得不同的日期系统和货币格式能够统一被MATLAB接受,工具箱实现了多种数据格式的读写和转换,并且支持自定义格式的日期。
这点在实际问题研究中特别重要,在日期问题中,由于不同的日期系统涉及的起点不同,因此在同MATLAB之间进行数据交换时需要注意进行平移转换,特别是一般情况下的数据都是Excel格式,而Excel日期系统存在两套标准。
对于资产组合方面的应用,MATLAB金融工具箱集中在资产组合的优化选择以及投资的绩效评估上。通过MATLAB金融工具箱,可以对资产组合的选择、优化和风险等进行有效的控制。同时其提供的投资辅助功能有助于衡量和评估资产组合的投资业绩。
对统计数据的处理和时间序列的处理是MATLAB的一大特色。相对于专业的统计和计量软件,MATLAB有其不足的地方,但是作为一款优秀的数学工程软件,MATLAB在R2008b版本中对多元统计回归,以及时间序列的支持却足以满足绝大多数的应用。并且借助MATLAB在统计方面的专业工具箱,可自行开发出具有很高复杂度的金融模型。
MATLAB在充分发挥其计算和图形显示方面,在R2008b的版本中加强了对技术分析的支持,共支持25种四大类常见的技术分析指标。
这些指标在国内常见的股票看盘软件上都可以经常看到,但是作为研究和模型开发,这些技术指标的提供,为大家开发基于技术分析的自动交易软件提供了极大的方便,并且可以根据实际情况,自行修改相关指标的计算规则而开发自己特有的技术分析指标。但需要注意的是,基于MATLAB的图表分析是非常困难的。
金融工具箱的主要功能函数分为以下四大类。
(1)投资组合分析
●portsim:多资产回报时间序列模拟
●portalloc:资本分配
●portopt:任意约束条件的边界条件
●portvrisk:投资组合风险值
(2)利率期限结构
●prbyzero:从零息票利率曲线对债券定价
●disc2zero:将贴现曲线转化为零息票利率曲线
●fwd2zero:将正向曲线转化为零息票利率曲线
●pyld2zero:将平均收益曲线转化为零息票利率曲线
●termfit:使用样条工具箱对期限结构进行拟合
●zbtprice:利用BOOTSTRAP方法根据债券价格计算零息票利率曲线
●zbtyield:利用BOOTSTRAP方法根据债券收益计算零息票利率曲线
●zero2disc:将零息票利率曲线转化为贴现曲线
●zero2fwd:将零息票利率曲线转化为远期利率曲线
●zero2pyld:将零息票利率曲线转化为平均收益曲线
(3)期权评估以及敏感度分析
●blkprice:使用Black Scholes方法进行期权定价
●glsgamma:Black Scholes敏感度分析
●blsprice:Black Sholes公式计算看涨买权和看跌期权价格
(4)现金流回报率的计算
●annurate:计算养老金周期利率
●annuterm:计算回收期
●effrr:计算有效回报率
●irr:计算内部回报率
●mirr:根据现金流计算修订内部回报率
●nomrr:计算实际回报率
●pvfix:计算固定周期支付的现值
MATLAB对于金融时间序列的分析提供了一个方便的图形界面窗口。如图5-2所示。整个界面分为四个部分:数据输入部分、数据输出部分、数据管理和金融时间序列对象属性设置。
图5-2 ftstool图形界面结构
需要注意的是,此GUI工具并不是为分析时间序列数据而开发,ftstool只是为生成fints类型数据而开发的数据生成和管理工具。而时间序列数据fints的分析是由ftsgui来承担的,其图形界面结构如图5-3所示。
图5-3 ftsgui图形界面结构
金融衍生品工具箱作为金融工具箱的一个扩充,为使用者提供了一个更加丰富的衍生品计算环境。金融衍生工具箱主要基于数值方法,计算基于利率的几种衍生品,以及部分基于权益的衍生品。
金融衍生品工具箱支持对衍生品工具对象的创建、管理和计算。
基于利率的衍生品包括如下。
●债券
●含权债券
●利率顶/底
●固定利率票据
●浮动利率票据
●互换
●互换期权
●可回购/回售债券
同时衍生品工具箱支持建立产生任意现金流的金融工具,并提供了对任意现金流进行定价和敏感性分析的工具。同时支持不同的利率模型和利率期限结构计算。在此版本的工具箱支持如下4个利率模型。
●Black-Derman-Toy(BDT)
●Black-Karasinski(BK)
●Heath-Jarrow-Morton(HJM)
●Hull-White(HW)
金融工具箱对基于权益的衍生品支持,主要在奇异期权方面,对普通香草型期权,其给出的是基于叉树模型的期权定价结果。具体来说,此版本的工具箱支持如下奇异期权的计算。
●亚式期权(Asia Options)
●障碍期权(Barrier Options)
●复合期权(Compound Options)
●回望期权(Lookback Options)
●普通香草型期权(Vanilla Stock Options)
工具箱支持对如上期权的价格和敏感性计算。价格和敏感性的计算主要是基于如下的叉树模型。
●Cox-Ross-Rubinstein(CRR)模型
●Equal probabilities(EQP)模型
●Implied trinomial tree(ITT)模型
MATLAB R2008b版本中包含的金融衍生品工具箱,其体系结构如图5-4所示:
图5-4 金融工具箱的结构图
从图5-4可以看出,金融衍生品工具箱的功能主要被划分成3大部分:
(1)第1部分主要集中在利率期限结构的计算和应用,以及利率模型的计算和应用上;
(2)第2部分主要集中讨论关于权益类衍生品的定价问题,对于有解析形式解的定价问题给出了解析解,更多是的给出了基于叉树模型的数值定价方法;
(3)第3部分的关注重点在资产组合的优化和最优配置上。
金融工具箱的利率模型主要是经典的叉树模型,假定利率的波动服从布朗运动。主要的利率模型有BDT模型、BK模型、HW模型和HJM模型。并且对于这些模型产生的二叉树,MATLAB提供了一个可视化的工具treeviewer来展现构建的利率模型。
金融衍生品工具箱的另外一个主要的工具是提供了计算基于权益的衍生品所需要的叉树模型。在MATLAB中支持的模型有CRR、EQP和ITT模型。这些模型为奇异期权的定价提供了巨大的方便。并对有解析解的衍生品提供了解析解定价的结果。
金融衍生品工具箱对资产组合进行更详细的分析,主要集中在对冲和有约束条件的资产组合两方面上。
金融衍生品工具箱的主要功能在于利率模型的建立及其应用,对此将函数归类如下。
1.模型应用类函数
Model+Function类函数主要是模型在某方面的应用,例如hjmprice函数是利用HJM模型为金融产品进行定价,hjmsens则是利用HJM模型计算金融产品的敏感性。
同类的函数有bdtprice/sens、bkprice/sens、crrprice/sens、eqpprice/sens、hwprice/sens、ittprice/sens。这些函数实现了对股票价格运动的不同描述,有一个特点就是,这些模型都是基于正态随机过程的股票价格运动描述。
2.按照金融产品分类的定价函数
Instrument by Model类函数主要是对特定金融产品利用不同的模型进行定价。例如bondbyhjm是利用HJM模型为债券进行定价,capbyhjm是利用HJM模型为利率顶进行定价,cfbyhjm是利用HJM模型为现金流进行定价等。
所支持的产品有债券(bond)、利率顶(cap)、现金流(cf)、固定利率票据(fixed)、浮动利率票据(float)、利率底(floor)、含权债券(optembnd)、债券期权(optbnd)、互换(swap)。可以利用的利率模型包括HJM、BDT、BK和HW。
MATLAB自带了一个用来查看叉树模型的工具,其能将模型以图形化的方式呈现出来,如图5-5所示。
图5-5 树图查看工具
树图查看器可以以路径或者节点的不同方式去查看模型生成的二叉树或三叉树,在选项Selection中设置是Path或者Node and Children。
在呈现方式上可以是表格,或图表。图形的不同方式,在Visualization中设置。如图5-5是以表格的形式呈现路径的显示结果。
下面通过一个简单例子讲述Tree Viewer工具的使用。在MATLAB命令行中输入如下命令:
可得到MATLAB自带的数据结构deriv中包含的数据。
在命令行中输入如下命令:
得到基于BDT模型的二叉树图,如图5-6所示。
图5-6 BDT模型的二叉树图
固定收益工具箱拓展了MATLAB在固定收益证券方面的功能,在模型上有了极大的扩充,并且增强了其分析功能。
用户可以在固定收益工具箱的帮助下实现对固定收益证券价格、收益率等的计算,包括MBS、公司债、国债、市政债、大额存单和国库券等。
同时固定收益工具箱也可以计算一些衍生品,例如互换、可转债、国债期货等。用户可以利用内置函数,构建基于MBS和债务工具的固定收益模型。可以基于这些模型计算:
●固定利率抵押贷款池和气球型抵押贷款的价格和收益率;
●债务工具的价格,收益率,贴现率和现金流的支付时间表等;
●计算互换比率和敏感性;
●利用市场数据,分析和计算利率期限结构。
对于抵押贷款支持证券(MBS),MATLAB工具箱提供了如下功能:
●基于PSA标准的提前支付比率,计算MBS证券的价格和收益率;
●利用期权调整价差的方法得到抵押贷款池的价格和有效久期;
●利用凸性、久期和平均期限等计算抵押贷款池的基点差风险。
对于债务工具,MATLAB的工具箱允许用户处理多种债务工具。用以计算其价格、收益率、折现率和国库券贴现率的盈亏平衡点,计算公司债,国债和市政债券的价格,收益率以及现金流。
通过固定收益工具箱内置的零息票债券相关函数,可以方便地得到任意期限上的固定息票率债券的现值。
同时对于Stepped-Coupon债券的价格、收益率和现金流方面的计算,MATLAB的固定收益工具箱也提供了强有力的支持。
利用固定收益工具箱提供的对于衍生证券的支持,用户可以处理很多基于固定收益证券的衍生品价格、收益率等。
利用固定收益工具箱,可以计算互换,可转债,以及对资产组合的对冲管理等。
MATLAB R2008b自带的固定收益工具箱是V1.6版本。对上一个版本的更新体现在对利率期限结构对象的操作上。
固定收益工具箱结构如图5-7所示。
图5-7 固定收益工具箱结构图
固定收益工具箱内主要应用在如下两个方面:
●增强了对于MBS计算的支持,对于MBS的支持可以有效地帮助用户分析MBS证券;
●增强了对于利率期限结构数据的支持,这一点有利于建立一个统一的利率期限结构描述框架,实现编程过程中的统一性和简洁性。
在此基础上,固定收益工具箱的主要功能是对期限结构的计算以及对特殊债券的价格,收益率的计算等,包括公司债、国债、市政债。
固定收益工具箱的主要功能函数分为以下六大类。
(1)大额存单类
●cdai计算大额存单的应计利息
●cdprice计算大额存单的价格
●cdyield计算大额存单的收益率
(2)抵押贷款支持证券
●mbsprice MBS证券价格
●mbsconvp MBS证券的凸性
●mbsdurp MBS证券的久期
(3)Stepped-Coupon Bonds
●stepcpnprice Stepped-Coupon债券的价格
●stepcpnyield Stepped-Coupon债券的收益率
(4)国库券
●tbillprice国库券价格
●tbillyield国库券收益率
●tbillval01利率变动一个基点导致的国库券价格变动量
(5)国债期货
●tfutbyprice国债期货的价格
(6)零息票债券工具
●zeroprice给定收益率情况下的零息票债券的价格
●zeroyield给定价格情况下的零息票债券的收益率
本章简要介绍了MATLAB R2008b中金融相关的工具箱,集中讨论了在金融工具箱、金融衍生品工具箱和固定收益工具箱。
相比较而言,金融工具箱完成了绝大多数的功能。而金融衍生品和固定收益两个工具箱则在自己的领域各有侧重。
在接下来的章节中,本书会引导读者逐渐了解其中模型的具体细节、组织结构,及其应用。
在利率模型领域,侧重于对模型具体细节的讨论和实现,以及模型的应用。希望通过对利率模型的详细讨论使读者对已有经典模型有一个比较深入的了解。
希望通过本书,读者能够对常见利率模型,普通期权定价模型及奇异期权的定价方法有详细的了解,并在此基础上开发出具有实用性的金融模型。