吴氏金融工程第一讲 固定收益证券的Matlab计算
AccruInterest=acrubond(IssueDate, Settle, FirstCouponDate, Face, CouponRate, Period, Basis)
出来的是错误信息。我查了一下help原来是这个7.0版的matlab这里的basis最高只支持到3。无赖之下,basis=6只好用1来代。因为1是30/360,与6的30E/360较接近。
AccruInterest=acrubond(IssueDate, Settle, FirstCouponDate, Face, CouponRate, Period,1) AccruInterest = 3.7778
二.贴现率计算
尚缺函数,或未找到相应函数.
三、计算内部收益率
内部收益率是使投资现金流现值等于价格的收益率,其计算公式为:
P?C1C3C1?r?C2(1?r)2?(1?r)3???n(1?r)n,其中: Ci为第i年度现金流,P为债券价格,N为年数,r为内部收益率。 Matlab计算函数: irr
调用方式: Return = irr(Cashflow)
例6:一项投资各期现金流如下表,请计算该投资的内部收益率是多少? 第0期 第1期 第2期 第3期 第4期 -5000 1000 2000 3000 4000 解:>> Cashflow=[-5000,1000,2000,3000,4000]; >> irr(Cashflow) ans = 0.2727
如果把这里的-5000改成-4000,那么ans=0.3825,这很容易理解。
四、现金流现值与终值
11
吴氏金融工程第一讲 固定收益证券的Matlab计算
1.现金流现值的计算 现金流现值的计算公式是:
PV?P0P1P2P3Pn????? n0123(1?r)(1?r)(1?r)(1?r)(1?r)matlab命令是:
PesentVal=pvvar(Cashflow, Rte)
PesentVal=pvvar(Cashflow,Rate,IrrCFDates)这里IrrCFDates是指现金流发生的日期,Rate是指的贴现率.
例7:一项投资各年的现金流如下表,贴现率为0.08,求其现值。 年份 当前 第1年 2 000 第2年 1 500 第3年 3 000 第4年 3 800 第5年 5 000 金额/元 -10 000 解:>> cashflow=[-10000,2000,1500,3000,3800,5000]; >> rate =0.08; >> pvvar(cashflow,rate)
ans = 1.7154e+003 即:现值为1715.4。 请说说这项投资划得来吗?
(划得来,因为现值在超过了投资10000元,1715.4就是超过投资的部分)
例8: 已知贴现率为0.09,投资各时期的现金流如下表,求其再值。
现金发放日期 金额/元 12-Jan-2007 14-Feb-2008 3-Mar-2008 14-Jun-2008 1-Dec-2008 -10 000 2500 200 3 000 4000 请学生思考 解:>> cashflow=[-10000, 2500, 2000, 3000, 4000]; >> rate=0.09;
>> irrcfdates=['01/12/2007' '02/14/2008' '03/03/2008' '06/14/2008' '12/01/2008'];
12
吴氏金融工程第一讲 固定收益证券的Matlab计算
>> PresentVal=pvvar(cashflow,rate, irrcfdates) PresentVal = 142.1648
注意:irrcfdates这个向量应写成列向量,列向量的写法是用分号分隔或用回车符分隔。此外,月和年要写成2位数,如3月1日不能写成1/3,只能写成01/03,这是因为列向量的各元素要保持一致。
判断下列写法是否正确:
>> irrcfdates=['01/12/2007'; '02/14/2008';'03/03/2008'; '06/14/2008'; '12/01/2008'] (正确的写法) irrcfdates=['1/12/2007';
'2/14/2008';
'3/3/2008';
'7/14/2008';
此处可以让学生在笔记本上算算看 '12/1/2008'] (错误的写法,格式不统一) irrcfdates=['1/12/2007' '2/14/2008' '3/3/2008' '7/14/2008'
'12/1/2008'] (错误的写法,格式不统一) >> irrcfdates=['1/12/2007', '2/14/2008', '3/3/2008', '7/14/2008', '12/1/2008'] (错误的写法,写成了行向量)
如果贴现率是变化的,怎么办?如果贴现率是变化的,现金流现值的公式是怎样的?
P?C1C2C3Cn????? n231?r1(1?r2)(1?r3)(1?rn)资料上没有现成的函数,我自己编了个函数,经过反复测试,成功运行。注意matlab中函数文件名要和函数名保持一致。 可变贴现率下现金流现值的计算:
function [PreValFlow,PresetVal] = PV_variable(P,r) %可变贴现率下现金流现值的计算 % 计算可变再现率和对应的现金流的现值.
% P为各期现金流,r为贴现率向量,注意第0期的利率一定要设成0对应P第的一期应为负值,
13
吴氏金融工程第一讲 固定收益证券的Matlab计算
表示投资.
% 注意P为行向量,r也为行向量,此二向量的元素要一样多.否则计算会出错. [a,b]=size(r); for i=1:1:b
C(i)=P(i)/((1+r(i))^(i-1)); % 再变成1/(1+ri)i(次方) end
PV_variable=sum(C); % 注意要转置 PresetVal =PV_variable '各期现值为:' PreValFlow=C
(见PV_variable.m文件)
也可以用excel来计算,也很方便。见文件:可变贴现率情况下的现金流现值计算.xls
无论是自编函数PV_variable.m还是excel,最后算出来的结果都一样。
例9 已知一项5000元的投资在其后的第1-4年的现金流分别为:1000, 2000, 3000, 4000元,贴现率分别为5%, 6%, 7%, 8%,求这四年的现金流的现值是多少?
解:利用我自编的可变现金流现值的函数PV_variable进行计算。 cashflow=[-5000,1000,2000,3000,4000]; rate=[0,0.05,0.06,0.07,0.08] PV_variable(cashflow,rate) PresetVal = 3.1214e+003 各期现值为: PreValFlow = 1.0e+003 *
-5.0000 0.9524 1.7800 2.4489 2.9401 2.现金流终值
14
吴氏金融工程第一讲 固定收益证券的Matlab计算
现金流终值是债券到期时的价值。用fvvar函数。 调用方式:FutureVal= fvvar(CashFlow, Rate, IrrCFDates) 例10:题干同例7。求该现金流的终值。
解:>> CashFlow=[-10000, 2000, 1500, 3000, 3800, 5000]; Rate=0.08;
>> FutureVal=fvvar(CashFlow, Rate) FutureVal = 2.5205e+003
如果将FutureVal贴现到当前时刻就是现值。代码如下: FresentValue=FutureVal/(1+Rate)^5 FresentValue = 1.7154e+003 贴现后的结果同例7。
五.计算赎回价格
对于可赎回债券,当赎回时间小于等于一个计息周期时,公式较简单:
price?RV1?(DSRY
E?M)当息票赎回时间大于一个息票期间时,公式较繁杂:
price?RV(1?YNq?1?DSC, 其中:
EM)RV:赎回时的价格;DSC:结算日到下一个似息票日的天数 DSR:结算日到赎回日之间的天数 M:每年的息票期间 Nq:似息票期间个数 Y:息票率 调用方式:
Price = zeroprice(Yield, Settle, Maturity, Period, Basis, EndMonthRule) 输入参数: Yield: 票息率 Settle: 结算日
15
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库固定收益证券_久期与凸度的matlab计算(3)在线全文阅读。
相关推荐: