Matlab在《数理金融》课程教学中的应用
The Application of MATLAB in the Teaching of Mathematical Finance
DOI: 10.12677/VE.2021.103019, PDF, HTML, XML, 下载: 399  浏览: 1,072  国家自然科学基金支持
作者: 夏侯佐源, 李师煜*, 高俣轩:江西理工大学理学院,江西 赣州
关键词: Matlab债券久期凸度Matlab Bonds Duration Convexity
摘要: 数理金融,是金融数学专业本科生的一门专业核心课程,债券的久期与凸度的计算是该课程的重点和难点。但日常教学过程中,重点的是讲解理论,具体计算涉及较少,编程计算就更少讲授了,导致大多数学生理论强,动手计算能力差。本文以用Matlab软件计算债券的久期与凸度为例,传授学生编程解决计算问题的技能,提高学生的学习兴趣,切实提高学生的编程解决问题的能力。
Abstract: Mathematical finance is a major core course for undergraduate students in financial mathematics. The calculation of bond duration and convexity is the key and difficult point of the course. But in the daily teaching process, the emphasis is on explaining the theory. The specific calculation involves less, and programming calculation is less taught, which leads to the strong theory and poor ability of hands-on calculation. This paper takes MATLAB software to calculate the duration and convexity of bonds as an example, teaching students the skills of programming to solve computing problems, improving students’ interest in learning and improving students’ ability of programming to solve problems.
文章引用:夏侯佐源, 李师煜, 高俣轩. Matlab在《数理金融》课程教学中的应用[J]. 职业教育, 2021, 10(3): 119-124. https://doi.org/10.12677/VE.2021.103019

1. 引言

数理金融,又称金融数学,数学金融学和分析金融学,是金融数学专业本科生的一门专业核心课程。该课程是利用数学工具研究金融,进行数学建模、理论分析、数值计算等定量分析,以求找到金融动内在规律并用以指导实践。主要介绍资产定价的无套利定价和均衡定价原理,以及以此为依据的固定收益证券定价、风险资产定价和衍生产品定价模型。而债券是一种典型的固定收益证券,债券的定价、久期与凸度的计算一直是该课程的重点,本文旨在介绍利用MATLAB编程计算债券的久期和凸度。

2. 久期和凸度的概念及计算公式

2.1. 久期的定义及计算公式 [1]

麦考利久期实际上是债券现金流的加权平均期限,其中权重是各期现金流的现值在债券价格中的比重。久期的计算公式如下:

D = t = 1 T P V ( c t ) t P (1)

其中,D是麦考利久期;P是债券的价格; P V ( c t ) 是债券第t期现金流的现值,T是债券的到期时间。

2.2. 凸度的概念及计算公式 [2]

由于债券价格收益率曲线是凸形的,利益久期估计债券价格波动时,实际上是利用切线作为价格的近似,误差较大。为了更加准确的估计债券价格波动,引入凸度的概念。凸度越大,表示债券价格收益率曲线越弯曲,意味着用久期度量债券的价格波动产生的误差越大。同时利用久期和凸度估计债券价格波动会更加准确。凸度的计算公式如下:

d 2 P d y 2 = t = 1 T t ( t + 1 ) c t ( 1 + y ) t + 2 (2)

2.3. 凸度的性质 [3]

1) 给定收益率和期限,票面利率越大,凸度就越小。

2) 给定收益率和久期,票面利率越小,凸度就越小。

3) 含有隐含期权的债券的凸度通常为负,即利率下降,价格会以减速度上升。

3. Matlab程序和例题

3.1. 久期的计算

3.1.1. 已知债券价格编程计算久期

Matlab2016的Financial Toolbox 提供了函数bnddurp,用于已知债券的期限与价格计算久期 [4] [5]。

调用格式参考如下:

[ModD, YearD] = bnddurp(x, y, z, m, n, k)

主要输入参数:

· x:债券净价;y:票面利率;z:结算日;m:到期日

· n:年付息次数,默认的值为2,其它可选值为0、1、2、3、4、6、12

· k:(可选项)债券的天数计算方法,默认的值为0 (实际值/实际值),常见的选项如下:

0:实际值/实际值;1) 30/360;2) 实际值/360;3) 实际值/365

主要输出参数:

· ModD:修正的麦考利久期

· YearD:麦考利久期

[例1]设三种债券的净价分别为105.67元、98.82元和95.45元,面值为100元,每年付息均为5元,交割日期为2017年1月1日,到期日为2020年6月30日,每年付息两次,计息的方式是实际值/实际值,求三种证券的久期和修正久期。

解:计算程序如下:

x=[105.67;98.82;95.45];

y=0.05;

z='01-Jan-2017';

m='30-Jun-2020';

n=2;

k=0;

[ModD, YearD] = bnddurp( x, y, z, m, n, k)

运行结果如下:

ModD =

3.2068

3.1645

3.1426

YearD =

3.2593

3.2495

3.2443

3.1.2. 已知收益率编程计算久期

Matlab2016的 Financial Toolbox提供了bnddury函数,用于给定债券的期限和收益率,计算久期 [6] [7]。

调用的参考格式如下:

[ModD,YearD] = bnddury(x, y, z, m, n, k)

主要输入参数:

· x:债券的到期收益率;y:票面利率;z:结算日;m:到期日

· n:年付息次数,默认的值为2,其它可选值为0、1、2、3、4、6、12

· k:(可选项)债券的天数计算方法,默认的值为0 (实际值/实际值),常见的选项具体如下:

0:实际值/实际值;1) 30/360;2) 实际值/360;3) 实际值/365

主要的输出参数:

· ModD:修正久期

· YearD:久期

[例2]设三种债券的到期收益率分别为3.2710%、5.3746%和6.4747%,面值为100元,每年付息均为5元,交割日期为2017年1月1日,到期日为 2020年6月30日,每年付息两次,计息的方式是实际值/实际值,分别求三种债券的久期和修正久期。

解:运行的程序如下:

x=[0.032710;0.053746;0.064747];

y=0.05;

z='01-Jan-2017';

m='30-Jun-2020';

n=2;

k=0;

[ModD, YearD] = bnddury( x, y, z, m, n, k)

运行的结果如下:

ModD =

3.2068

3.1645

3.1426

YearD =

3.2593

3.2495

3.2443

3.2. 债券凸度的计算

3.2.1. 已知价格编程计算凸度

Matlab2016的Financial Toolbox提供了bndconvp函数,用于已知债券期限与价格,凸度的计算 [8] [9]。

调用的参考格式为:

YearC=bndconvp(x, y, z, m, n, k)

主要的输入参数:

· x:债券净价(不包括利息);y:票面利率;z:结算日;m:到期日

· n:年付息次数,默认的值为2,其它可选值为0、1、2、3、4、6、12

· k:(可选项)债券的天数计算方法,默认的值为0 (实际值/实际值),常见的选项如下:

0:实际值/实际值;1) 30/360;2) 实际值/360;3) 实际值/365

主要输出参数:

YearC:债券凸度

[例3] 设三种债券的净价分别为105.67元、98.82元和95.45元,面值为100元,每年付息均为5元,交割日期为2017年1月1日,到期日为2023年6月30日,每年付息两次,计息的方式为实际值/实际值,分别求三种债券的凸度。

解:运行的程序如下:

x=[105.67;98.82;95.45];

y=0.05;

z='01-Jan-2017';

m='30-Jun-2023';

n=2;

k=0;

YearC= bndconvp(x, y, z, m, n, k)

运行的结果如下:

YearC =

36.2102

35.4973

35.1272

3.2.2. 根据收益率计算凸度

Matlab2016的 Financial Toolbox 提供了bndconvy函数,用于已知债券的期限和收益率,计算债券的凸度 [10] [11]。

调用的参考格式:

YearC=bndconvy(x, y, z, m, n, k)

主要的输入参数:

· x:债券的到期收益率;y:票面利率;z:结算日;m:到期日

· n:年付息次数,默认的值为2,其它可选值为0、1、2、3、4、6、12

· k:债券的天数计算方法,默认的值为0 (实际值/实际值),常见的选项如下:

0:实际值/实际值1) 30/360;2) 实际值/360;3) 实际值/365

主要的输出参数:

YearC:债券凸度

[例4]设三种债券的到期收益率分别为3.2710%、5.3746%和6.4747%,面值为100元,每年付息均为5元,交割日期为 2017年1月1日,到期日为2023年6月30日,每年付息两次,计息的方式为实际值/实际值,分别求三种证券的凸度。

解:运行程序如下:

x=[0.032710;0.053746;0.064747];

y=0.05;

z='01-Jan-2017';

m='30-Jun-2023';

n=2;

k=0;

YearC= bndconvy(x, y, z, m, n, k)

运行结果如下:

YearC =

44.0113

43.1144

42.6562

4. 结语

数理金融这门课内容多而难,计算公式多而复杂,大多数计算用笔无法完成,因此需要学生具备较好的编程能力,熟练掌握一种计算软件。这就需要任课教师讲解理论的同时,教会学生使用软件编程解决计算问题,才能切实有效提高学生的实践动手能力,增强毕业生的就业竞争力。

基金项目

国家级大学生创新创业训练计划项目(202010407038);国家自然科学基金项目(11801238);江西理工大学本科教学工程项目(XZG-16-01-05)。

NOTES

*通讯作者。

参考文献

[1] 李师煜. 本科院校金融数学专业实践课程体系建设探索——以江西理工大学为例[J]. 产业与科技论坛, 2020, 19(21): 259-260.
[2] 谢霖铨, 吴克晴. 关于金融数学教学的思考[J]. 江西理工大学学报, 2012, 33(6): 120 -123.
[3] 李师煜, 顾恺威, 陈军洋. Matlab在《固定收益证券》课堂教学中的应用[J]. 教育进展, 2020, 10(4): 464-467.
https://doi.org/10.12677/AE.2020.104078
[4] 郑志勇, 王洪武. 金融数量分析——基于MATLAB 编程[M]. 北京: 北京航空航天出版社, 2018.
[5] 张志涌、杨祖樱. Matlab教程[M]. 北京: 北京航空航天大学出版社, 2017.
[6] 兰红, 田进, 李淑芝, 刘立辉. 基于Matlab_GUI的图像处理平台设计[J]. 江西理工大学学报, 2014, 35(3): 79-84
[7] 李师煜, 高武军. 一类倒向随机微分方程的比较定理[J]. 江西理工大学学报, 2010, 31(5): 67-69..
[8] 詹筱霞. 构建基于企业债券市场化的中国企业债券信用评级制度[J]. 江西理工大学学报, 2007, 28(2): 70-73.
[9] 李师煜, 高武军. 由连续局部鞅驱动的倒向随机微分方程的解[J]. 江西理工大学学报, 2009, 30(5): 71-73.
[10] 李师煜, 李文学, 李华灿. 非Lipschitz条件下由连续半鞅驱动的倒向随机微分方程的解(英文) [J]. 黑龙江大学自然科学学报, 2015, 32(4): 485-489.
[11] 陈亮, 邬长福, 黄亮, 陈祖云. IFAHP 评价法的 MATLAB 程序设计及应用[J]. 江西理工大学学报, 2016, 37(1): 105-110.