第13章放开关于资产对数收益服从正态分布的假设,介绍在背离原来假设的基础上(主要通过改变偏度和峰度参数),由期权市场价格确定的隐含波动率曲线(volatility smile)。本章还介绍了计算欧式期权价格隐含波动率的有效方法。
第14章为第三个应用部分,即如何处理债券期权。由于债券与股票相比存在许多不同的属性,因此为债券期权定价时出现的数学问题和使用的数值方法也有所不同。我们根据一系列零息票债券价格来定义期限结构,并展示用短期利率如何构建二叉树模型,这个模型可以为零息票债券现金流定价。
第15章涵盖了两个利率模型,Vasicek模型以及考克斯,英格索尔和罗斯模型(CIR模型)。我们分析了零息票债券价格和零息票债券期权的解析解,并介绍了为附息债券期权定价的一种方法。
第16章介绍了在给定零息票债券期限结构的情况下,如何用短期利率构建二叉树模型。构造著名的布莱克-德曼-托伊利率树模型(用电子表格和用户定义函数),并展示它如何为欧式和美式零息票债券期权定价。
附录中是其它用户定义函数,这些函数与我们选定的几个应用部分的联系不很密切。但它们是有用的工具箱,可以作为ARIMA模型、样条、特征值和其它计算过程的函数。
1.7 有关Excel工作簿
第一部分集中介绍Excel函数和理解VBA语言。这部分有三个相关工作簿,AMFEXCEL,VBSUB和VBFNS分别对应于第2,3和4章。
第二部分是关于股票的三个工作簿,EQUTY1,EQUTY2和EQUTY3,分别对应第6,7和8章。
第三部分关于股票期权有四个工作簿,OPTION1,OPTION2,OPTION3和OPTION4,分别对应第10,11,12和13章。
第四部分关于债券方面有两个工作簿,BOND1和BOND2,对应第14,15和16章,具体见书中的解释。
附录有一个工作簿OTHERFNS。
1.8 意见和建议
尽管花费了很大精力收集材料和撰写本书,我们仍然很乐意接受意见、建议甚至是改正和改善。请发到电子邮箱mstaunton@london.edu或者通过以下网页与我们联系。 www.london.edu/ifa/services/services.html或者www.business.city.ac.uk/irmi/mstaunton.html。
第2章 高级Excel函数和过程
本章回顾了本书用到的一些函数和过程。包括Excel中各类函数中的数学、统计和查找函数,以及常用过程,如建立模拟运算表(Data Tables)和用XY图显示结果等。还包括汇总数据集、进行回归分析以及访问Excel单变量求解(Goal Seek)和规划求解(Solver)的方法。目的是为了阐明和保证这些内容能扫清读者前面的障碍。高级Excel用户可以略过这些内容,或在需要的时候再来参考本章的内容。为了使这些不同的主题更有趣和更具有交互性,本文提供了一个包含本章全部例程的工作簿AMFEXCEL.xls,可以用来检测读者的熟练程度。
2.1 访问Excel函数
Excel提供了许多工作表函数,它们是一些已经编写好的计算程序。函数常用于电子表格的简单计算,在VBA宏代码和用户定义函数中也经常用到这些基本函数(见第三章和第四章)。 点击标准工具栏中的粘贴函数按钮(标记为fx)就可以访问这些函数。函数向导如图2.1所示,函数分为几个不同的类别:如数学与三角函数类、统计类、逻辑类、查找与引用类,等等。
【参照书中第9页的图2.1】
图2.1 粘贴函数对话框显示数学与三角函数类别中的COMBIN函数
如图2.1所示,数学与三角函数类别中的COMBIN函数被选中,这时对话框下面出现该函数输入值和输出值的简单描述。要想得到更详细的描述,可以点击帮助按钮(标记为?)。 点击确定按钮之后,就会出现提供适当参数输入框的公式面板,如图2.2所示。需要输入的信息可以用键盘键入(如这里),也可以通过选择电子表格中的网格来引用(点击输入
框右侧的按钮可以缩小公式面板)。注意,可以拖动公式面板离开它原来的位置。点击面板上的确定按钮或编辑栏中的勾号,就可以把公式输入到电子表格。
【参照书中第10页的图2.2】
图2.2 在公式面板中建立COMBIN函数
图2.2显示,在公式面板里输入COMBIN函数参数的时候,编辑栏中会相应地出单元格公式的基本结构,而且粘贴函数按钮会呈现出‘按下’状态。还应该注意的是,粘贴名称按钮(标记为 =ab)可以将已命名的单元格粘贴到公式中。(为单元格区域以及引用单元格区域命名的内容见2.10节。)
不仅可以访问Excel自带的函数,粘贴函数按钮还可以访问用户定义函数,见第四章内容。
讨论完如何访问函数后,接下来我们介绍一些常用的数学和统计类函数。
2.2 数学类函数
本书用到的数学与三角函数有:EXP(x)、LN(x)、SQRT(x)、RAND()、FACT(x)和COMBIN(number,number_chosen)。
EXP(x)返回指数函数的值,exp(x)或e。例如: ? EXP(1)返回e的值(2.7183,小数位数为4) ? EXP(2)返回e的值(7.3891,小数位数为4)
? EXP(-1)返回1/e或e的值(0.36788,小数位数为5)
在金融计算时,经常需要利用复利(或折现)因子将不同时段的现金流转换为未来价值(或现值)。给定连续复利r,则一年的复利因子为exp(r),对应的年利率为ra,如果复利以年为基础,则公式为:
?12x
ra?exp(r)?1
关于连续复利以及EXP函数的应用,将在2.7.1节的模拟运算表中作进一步的阐述。 LN(x)返回x的自然对数值。注意,x必须为正,否则函数会因数值溢出而返回#NUM!。例如:
? LN(0.36788)的返回值为-1 ? LN(2.7183)的返回值为1 ? LN(7.3891)的返回值为2 ? LN(-4)的返回值为#NUM!
在金融领域,我们经常与(自然)对数收益打交道,可以利用LN函数将收益值转换为对数收益。
SQRT(x)返回x的平方根。很显然,x必须为非负,否则函数会因数值溢出而返回#NUM!。 RAND()产生[0, 1]区间均匀分布的随机数。每次电子表格重新计算时,产生的随机数都不一样。用蒙特卡罗模拟法计算期权价格时,我们可以利用RAND()函数来产生随机数。 FACT(number)返回整数number的阶乘,它等于1×2×3×…×number。例如:
? FACT(6)的返回值为720
COMBIN(number,number_chosen)返回number个元素的组合值(子集大小为number_chosen),子集可以按任何顺序组合。例如,如果某支股票的价格在四个离散时间里要么上涨,要么下跌,则出现三次上涨(和一次下跌)序列的个数为:
COMBIN(4,1) = 4 或者COMBIN(4,3) = 4 也就是这样四个序列‘上涨-上涨-上涨-下跌’、‘上涨-上涨-下跌-上涨’、‘上涨-下跌-上涨-上涨’和‘下跌-上涨-上涨-上涨’。从统计的角度来说,COMBIN(4,3)表示从4个元素中选择3个元素的组合值,通常记为4C3(或者通用的nCr)。
Excel中还有一些函数可以进行矩阵转置、矩阵相乘、或求方阵的逆。相应的函数分别为:
? TRANSPOSE(array)返回矩阵array的转置 ? MMULT(array1,array2)返回两个矩阵的乘积 ? MINVERSE(array)返回矩阵array的逆矩阵
这些函数都属于数学类函数。可能有些读者对矩阵并不熟悉,为了熟悉这些函数,我们将在本章的末尾对矩阵做介绍(见2.13)。
2.3 统计类函数
Excel中有一些函数可以快速汇总数据集(Excel术语叫‘数组’)的一些特征。如函数AVERAGE(array)返回数组的平均值,STDEV(array)返回数组的标准差,MAX(array)和MIN(array)返回数组的最大值和最小值。
为了考察数据集的分布,还要了解一些其他的函数。例如,QUARTILE函数返回一个数据集的四分位数,而FREQUENCY函数则返回一个数据集分组后的频率分布。 Excel还提供一些概率分布函数,如正态分布函数NORMSDIST和正态分布反函数NORMSINV等。 还有一些有用的二元(二个变量)统计函数,它们在进行回归分析和相关性分析时用处很大。例如:
? INTERCEPT(known_y?s,known_x?s) ? SLOPE(known_y?s,known_x?s) ? RSQ(known_y?s,known_x?s) ? STEYX(known_y?s,known_x?s) ? CORREL(known_y?s,known_x?s) ? COVAR(known_y?s,known_x?s)
还有一个大家不太熟悉的数组函数LINEST(known_y?s,known_x?s),它以数组的形式返回一些必要的回归统计量。此类函数将在2.11节介绍回归分析内容时作详细说明。我们还将把它们的返回值与数据回归分析过程中的回归结果作对比。
下一节,我们将通过AMFEXCEL工作簿里Frequency and Snorm表中的例子来说明如何使用FREQUENCY、QUARTILE以及各种正态分布函数。
2.3.1 使用频率函数Frequency
FREQUENCY(data_array,bins_array)统计一个数据集中出现在特定间隔(或‘bins’)中的元素个数,并以一竖列数组返回。‘bins_array’为用于对 ‘data_array’ 中的数值进行分组的间隔数组。由于该函数是以数组的形式返回,所以在输入函数之前,必须在电子表格中为返回值选定一个相邻的单元格区域。 我们从AMFEXCEL工作簿Frequency and Snorm表中的一个例子出发,来说明如何使用FREQUENCY函数。如图2.3所示,D10:D71列和E10:E71列中的月收益和对数收益(采用LN函数)数据的统计信息放在第4到第7行。假设现在我们想得到对数收益(E10:E71),即所谓‘data_array’的频率分布。目的是为了检测这些数据是否近似地服从正态分布。首先,我们为分组确定间隔。观察一下最大和最小的对数收益,范围在-0.16到+0.20之间,分为10到12个间隔比较合适。将间隔值输入到G5:G14中,这些值作为对数收益分组的上边界。
Return for months 1-62:1-62月份的收益数据; Summary Statistics:统计量; Returns:收益;
Ln Returns:对数收益;
Frequency Distribution:频率分布;
Mean:均值;St Dev:标准差;Max:最大值;Min:最小值;interval:间隔;freq:频数; %freq:频率百分比;%cum freq:累积频率百分比;Month:月份;Total:共计
【参照书中第13页的图2.3】
图2.3 计算对数收益数据的频率分布
为了正确地输入FREQUENCY函数,先选定单元格区域H5:H15。然后键入=,并点击粘贴函数按钮(标记为 fx)来完成句法: =FREQUENCY(E10:E71, G5:G14)
在输入完最后一个括弧‘)’后,将鼠标放在Excel的编辑栏,然后按下Ctrl+Shift+Enter组合键,就可以完成函数输入了。(你需要用三个手指同时按下,否则无效。如果失败了,