期权实验课实验报告.docx
- 文档编号:6379916
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:13
- 大小:273.54KB
期权实验课实验报告.docx
《期权实验课实验报告.docx》由会员分享,可在线阅读,更多相关《期权实验课实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
期权实验课实验报告
学号姓名专业
期权实验课实验报告
一、实验目的
利用excel实现期权的二叉树和B-S定价,利用MATLAB实现期权的二叉树定价,对三种方法进行比较。
二、实验过程
假设当前股价S0=13.57,无风险收益率(连续复利)r=0.0286,波动率标准差σ=0.4996距到期日时间T(年)=0.2521,起始时间为2015/6/1,期权到期时间为2015/9/1,股票分别在2015/7/1和2015/8/1发放2元股息。
(一)期权二叉树定价的excel实现
本表可实现至多256步二叉树对有或无红利的欧式或美式的看涨或看跌期权的价格计算。
1、基本数据输入区
图1基本数据输入区
基本数据输入区包含当前股价S0、无风险收益率r(连续复利)、距到期日时间T(年)、波动率标准差σ、执行价格K、计算步数(<=256)、期权类型选择、起始时间、到期时间、计数规则。
(1)距到期日时间T(年)通过YEARFRAC公式自动计算而得,对应的输入数据为起始时间、到期时间、计数规则(E4:
E6),使用绝对地址。
计数规则通过选择控件实现,如图2所示。
选择开发工具->插入->列表框(窗体控件),在F6:
F10分别输入“US(NASD)30/360”、“实际天数/实际天数”、“实际天数/360”、“实际天数/365”、“欧洲30/360”,右键列表框,点击设置控件格式,如图2所示,在数据源区域选择F6:
F10,单元格链接选择G6,均使用绝对地址,下拉显示项数输入5,则选择控件设置完毕。
在选择控件下拉选项中选择“US(NASD)30/360”,发现G6显示为1,实际“US(NASD)30/360”在YEARFRAC函数中对应0,故在E6中输入公式=$G$6-1。
为使界面整洁,将F6:
F10、G6中的内容颜色设置为页面背景颜色,从而将内容隐藏。
图2选择控件设置
(2)期权类型选择使用组合控件,设置方式与选择空间类似。
最终结果链接至C8,点击看涨期权时,C8=1,点击看跌期权时C8=-1。
2、风险中性定价参数
上升因子
,下降因子
=1/u,风险中性概率
,分别在B10:
B12中输入公式:
=EXP(C5*SQRT(C4/C7))、=1/C10、=(EXP(C3*C4/C7)-C11)/(C10-C11)。
3、股息
有红利时,在每个股息发放日将未来的股息折现到该时点,再将该折现值复利到直到下一个股息发放日之间的每一步,并将该值加到对应步数的无红利股价上,得到有红利的总股价。
表格设置至多4次股息。
折现因子1,2,3,4分别表示将未来现金流折现到起始时期,第一个股息发放日,第二个股息发放日,第三个股息发放日。
图3股息
如图3,C15=IF(C14="","",YEARFRAC($E$4,C14,$E$6)),表示如果C14为空,即期间不发放红利,此期权为无红利期权,则C15也为空,股息部分均为空;如果C14不为空,且日期在起始时间和到期时间之间(否则会提示“输入非日期或者输入日期超出期权有效期外!
”,如图4所示),此期权为有红利期权,距离起始时间的期限为第一个股息发放日按E6输入的日期计算方式至期权起始日之间的年数,C16=IF(C$14="","",EXP(-$C$3*SUM($C$15:
C$15))),表示有红利时,以C3的无风险利率为折现率,第一个股息发放日到起始时间的折现因子。
图4日期错误提示
在2015/8/1,D15=IF(D14="","",YEARFRAC(C14,D14,$E$6)),表示第二个股息发放日到第一个股息发放日之间的期限,D16=IF(D$14="","",EXP(-$C$3*SUM($C$15:
D$15)))表示第二个股息发放日到起始日期的折现因子,D17=IF(D$14="","",EXP(-$C$3*SUM($D$15:
D$15)))表示第二个股息发放日到第一个股息发放日的折现因子,以此类推可以得到第三个、第四个股息发放日对应各个时间点的折现因子。
接下来计算折现值:
C21=IF(C14="","",SUMPRODUCT(C16:
F16,C$20:
$F$20))表示未来各期现金流折现到起始日期,D21=IF(D14="","",SUMPRODUCT(D17:
F17,D$20:
$F$20))表示未来各期现金流折现到第一个股息发放日,以此类推,可以得到第二个、第三个股息发放日的未来现金流折现值。
4、股价矩阵
图5股价矩阵
自动输出步数N,D23=IF(C23<$C$7,C23+1,"")表示当前一步小于预先设置的步数时,在前一步的基础上增加一步,否则为空。
时间△Ti等于步数乘以总时间除以总步数。
(0,0)=C26=C2表示零时刻的股价,对于任一步(i,j)(i行j列,0j时,(i,j)为空,否则,(i,j)表示j步时的某一状态的股价,且当i 5、总股价矩阵 当无红利时,总股价矩阵等于股价矩阵,有红利时,总股价矩阵等于股价矩阵加红利。 图6总股价矩阵C288=IF(OR($B288>C$285,C$285=""),"",C26+IF($C$14="",0,IF(C$286>=SUM($C$15: $F$15),0,IF(C$286>=SUM($C$15: $E$15),$F$21*EXP($C$3*(C$286-SUM($C$15: $E$15))),IF(C$286>=SUM($C$15: $D$15),$D$21*EXP($C$3*(C$286-SUM($C$15: $D$15))),IF(C$286>=$C$15,$D$21*EXP($C$3*(C$286-$C$15)),$C$21*EXP($C$3*C$286))))))),函数可通过图7分解。 注: 每步左边的条件不满足时即进入右边。 图7总股价矩阵函数图解 1确保总股价矩阵图是上三角,以及将股价限制到最大步数列; 2排除空格后,用无红利股价加上换算后的股息,当第一个股息发放日的日期为空时,即为无红利期权,股息为零,总股价等于无红利股价; 3存在红利时,如果该步的时间△Ti大于第四个股息发放日(如果没有第四个股息发放日,则期限为零,对结果没有影响)到期权起始日期之间的时间,则该步对应的应计股息为零; 4如果该步的时间△Ti大于第三个股息发放日到期权起始日期之间的时间,则该步的应计股息为3中股息中第三个股息发放日的未来股息折现值按照无风险利率从第三个股息日复利到该步(期限即为该步到第三个股息发放日之间的时间); 5类似第④步,如果该步的时间△Ti大于第二个股息发放日到期权起始日期之间的时间,则该步的应计股息为3中股息中第二个股息发放日的未来股息折现值按照无风险利率从第二个股息日复利到该步(期限即为该步到第二个股息发放日之间的时间); 6类似第④步,如果该步的时间△Ti大于第一个股息发放日到期权起始日期之间的时间,则该步的应计股息为3中股息中第一个股息发放日的未来股息折现值按照无风险利率从第一个股息日复利到该步(期限即为该步到第一个股息发放日之间的时间);否则,该步的应计股息为3中股息中期权起始日的未来股息折现值按照无风险利率从期权起始日复利到该步。 6、欧式期权价格 图8欧式期权价格 C5=IF($B5>C$2,"",IF(C$2="","",IF(D$2="",MAX(股价矩阵! $C$8*(股价矩阵! C288-股价矩阵! $C$6),0),EXP(-股价矩阵! $C$3*股价矩阵! $D$24)*(股价矩阵! $C$12*欧式期权价格! D5+(1-股价矩阵! $C$12)*D6)))),该函数用于计算欧式期权价格,意思是排除空格后,如果是最后一步,则期权价格等于对应的总股价减执行价格的差乘以期权类型的系数与零相比的较大者,看涨期权为1,看跌期权为-1,如果不是最后一步,则每步的期权价格等于下一步的期权价格与风险中性概率乘积的和的贴现值。 将0时刻的期权价格链接至第一张表格(股价矩阵)相应位置(I2)。 7、美式期权价格 图9美式期权价格 C5=IF($B5>C$2,"",IF(C$2="","",IF(D$2="",MAX(股价矩阵! $C$8*(股价矩阵! C288-股价矩阵! $C$6),0),MAX(股价矩阵! $C$8*(股价矩阵! C288-股价矩阵! $C$6),EXP(-股价矩阵! $C$3*股价矩阵! $D$24)*(股价矩阵! $C$12*D5+(1-股价矩阵! $C$12)*D6))))),美式期权价格与欧式期权价格的不同点在于美式期权最后的价格等于按照欧式期权价格计算的结果与提前行权的收益的较大者。 将0时刻的期权价格链接至第一张表格(股价矩阵)相应位置(I3)。 图10二叉树的EXCEL实现总图 (二)期权B-S定价的excel实现 期权B-S定价只需要按照公式计算即可,如图11,在输入区分别输入起初股价S、执行价格K、无风险利率r、波动率σ、期限T,按照下列公式先计算d1、d2,然后计算得欧式看涨期权和欧式看跌期权的价格。 F6=(LN(B4/C4)+(D4+E4^2/2)*F4)/E4/SQRT(F4) F7=(LN(B4/C4)+(D4-E4^2/2)*F4)/E4/SQRT(F4) C9=B4*NORM.DIST(F6,0,1,TRUE)-C4*EXP(-D4*F4)*NORM.DIST(F7,0,1,TRUE) C10=B4*(NORM.DIST(F6,0,1,TRUE)-1)-C4*EXP(-D4*F4)*(NORM.DIST(F7,0,1,TRUE)-1) 图11欧式期权B-S的excel实现 (三)期权二叉树定价的MATLAB实现 通过自编函数实现有红利和无红利的欧式或者美式的看涨或者看跌的期权价格,函数代码如下: function[option,price]=opt_price(S,K,r,T,sigma,N,opt,flag,T_bonus,bonus) %看涨期权二叉树定价 %输入参数 %S股票/资产当前价格 %K期权执行价格 %r无风险利率 %sigma股票/资产的年波动率标准差 %N二叉树的步数 %opt期权的类型,欧式期权opt=1,美式期权opt=0 %flag可选参数,期权类型,看涨期权flag=1,看跌期权flag=-1,默认为1 %T_bonus可选参数,红利发放的时间矩阵,1*n %bonus可选参数,红利的值,1*n %输出参数 %Price期权的价格二叉树矩阵 %option期权价格 %江波2015-06-27第一次编辑,时间仓促,函数还不甚完善 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ifnargin<7 error(message('输入参数不足')) elseifnargin<8 flag=1; T_bonus=[]; bonus=[]; elseifnargin==8 T_bonus=[]; bonus=[]; elseifnargin==9 error(message('输入参数不足')) end ifflag~=1&flag~=-1 error(message('无效的期权输入类型,看涨期权请输入1,看跌期权请输入-1')) end dt=T/N; u=exp(sigma*sqrt(dt)); d=1/u; p=(exp(r*dt)-d)/(u-d); price=zeros(N+1,N+1); bon=zeros(N+1,N+1); % %红利调整计算 % B=length(T_bonus); ifB==1 f=exp(-r*T_bonus)*bonus; elseifB>1 fori=1: B-1 f (1)=dot(exp(-r.*T_bonus),bonus); f(i+1)=dot(exp(-r.*(T_bonus(i+1: B)-(T_bonus(i)))),bonus(i+1: B)); end end forj=1: B k=1; tt=[0,T_bonus(1: B-1)]; fori=k: N+1 ifi*dt bon(i)=f(j)*exp(r*((i*dt)-tt(j)));%红利矩阵 k=i; else break end end end % %股价矩阵计算 % j=0: N; price(: N+1)=max(0,flag*(S*u.^(N-j).*d.^j-K)); stock=zeros(N,N); forj=1: N fori=1: N ifi<=j stock(i,j)=S*u^(j-i)*d^(i-1)+bon(j); end end end % %期权价格二叉树 % forj=N-1: -1: 0 fori=0: j ifopt==1 price(i+1,j+1)=exp(-r*dt)*(p*price(i+1,j+2)+(1-p)*price(i+2,j+2));%欧式期权 elseifopt==0 price(i+1,j+1)=max(exp(-r*dt)*(p*price(i+1,j+2)+(1-p)*price(i+2,j+2)),flag*(stock(i+1,j+1)-K));%美式期权 end end end option=price(1,1); ifnargout==2 price; option; else option; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 在MATLAB中运行命令: opt1=opt_price(13.57,20,0.0286,0.2521,0.4596,16,1,1) opt2=opt_price(13.57,20,0.0286,0.2521,0.4596,16,1,-1) opt3=opt_price(13.57,20,0.0286,0.2521,0.4596,16,0,1) opt4=opt_price(13.57,20,0.0286,0.2521,0.4596,16,0,-1) opt11=opt_price(13.57,20,0.0286,0.2521,0.4596,16,1,1,[0.08219,0.16712],[2,2]) opt22=opt_price(13.57,20,0.0286,0.2521,0.4596,16,1,-1,[0.08219,0.16712],[2,2]) opt33=opt_price(13.57,20,0.0286,0.2521,0.4596,16,0,1,[0.08219,0.16712],[2,2]) opt44=opt_price(13.57,20,0.0286,0.2521,0.4596,16,0,-1,[0.08219,0.16712],[2,2]) 得到结果: opt1=0.0761 opt2=6.3624 opt3=0.0761 opt4=6.4475 opt11=0.0761 opt22=6.3624 opt33=0.0915 opt44=6.4070 分别表示无红利欧式看涨看跌,无红利美式看涨看跌,有红利欧式看涨看跌,有红利美式看涨看跌。 三、实验结果分析 表1二叉树EXCEL与MATLAB实现对比 EXCEL MATLAB 有红利 看涨 欧式期权 0.03284 0.0761 美式期权 0.06819 0.0915 看跌 欧式期权 6.31918 6.3624 美式期权 6.43 6.4070 无红利 看涨 欧式期权 0.03284 0.0761 美式期权 0.03284 0.0761 看跌 欧式期权 6.31918 6.3624 美式期权 6.43 6.4475 从表1可以明显看出无红利的欧式看涨期权与美式看涨期权的价格是一致的,验证了无红利美式看涨期权不会提前行权的结论。 EXCEL和MATLAB均采取的是16步计算,可以看到两者的计算结果存在差异,一方面MATLAB中的输入参数在EXCEL基础上进行了小数位数的选取,另一方面两者的计算中的精确度不同,导致两者计算结果的差异。 (注: 由于时间仓促,MATLAB编程的函数可能存在一定缺陷,导致计算结果存在较大偏差。 ) 表2EXCEL实现的二叉树与B-S对比 步数 16 32 64 128 256 B-S 欧式看涨期权 0.032841685 0.036101576 0.036215732 0.036002673 0.036650891 0.115281386 欧式看跌期权 6.319184760 6.322444650 6.322558807 6.322345747 6.322993965 6.401598788 表2显示,EXCEL实现的二叉树期权定价与EXCEL实现的B-S期权定价的结果存在差异,但随着二叉树的步数的增加,其结果越来越接近B-S定价的结果,可以猜想当二叉树的步数无限增大时,即得到B-S定价公式。 对比三者计算得到的无红利欧式看涨期权和看跌期权的价格,可以发现B-S公式计算结果更为准确,MATLAB由于变量输入时存在一定偏差导致计算结果偏差较大。 进一步分析,B-S公式实际上二叉树的推广,因而其计算结果是精确值。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 期权 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)