为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

三叉树欧式期权定价

2018-09-10 15页 doc 227KB 160阅读

用户头像

is_481767

暂无简介

举报
三叉树欧式期权定价数值计算与金融仿真实验一 实验名称:期权的三叉树定价模型 组员:** ** 实验日期:2013年5月30日 实验环境:Matlab 7.0 2010b 1、 标的资产说明: 公司名称:SINA Corporation Nasdaq简称:SINA 上市时间:2000年4月13日 计价货币:USD 2、 实验过程及结果 a) (1)登陆yahoo财经,下载SINA 2008年1月2日至2013年5月30日的调整后的收盘价,同时下载SINA 5月30日执行价格为40USD的看涨期权和看跌期权的报价,获得的数据请参见附件一:SINA...
三叉树欧式期权定价
数值计算与金融仿真实验一 实验名称:期权的三叉树定价模型 组员:** ** 实验日期:2013年5月30日 实验环境:Matlab 7.0 2010b 1、 标的资产说明: 公司名称:SINA Corporation Nasdaq简称:SINA 上市时间:2000年4月13日 计价货币:USD 2、 实验过程及结果 a) (1)登陆yahoo财经,下载SINA 2008年1月2日至2013年5月30日的调整后的收盘价,同时下载SINA 5月30日执行价格为40USD的看涨期权和看跌期权的报价,获得的数据请参见附件一:SINAStockPrice.xls和附件二:SINAOption.xls (2)运用excel表格计算SINA的历史日均收益,并计算历史平均收益和波动率,使用到的函数有average 和stdev,现将计算结果和其他重要参数列表如下: 表1 SINA股票的重要参数 SINA_Stock 平均历史收益 波动率 现价 0.2250 0.5864 58.21 (3)选取无风险利率,期权到期期限为112天,因此我们选择3个月的美国国库券到期收益率作为参考的无风险利率,从美联储网站得知,5月30日3个月期限的美国国库券到期收益率为0.04%; b)(1)三叉树模型定价 假设:1)该期权为欧式期权; 现将期权的参数列举如下: 表2 SINA期权的重要参数 SINA_Option 执行价格 到期日 市场价格 Call 40 2013年9月20日 19.3 Put 40 2013年9月20日 0.37 (2)编写M文件,运用三叉树模型对其进行定价,M文件请参见附录一:TrinomialEuro 输入[C, P] = TrinomialEuro(58.21, 40, 0.04, 112/365, 0.5864, N),得到以下结果: 表3 三叉树欧式期权计算结果 SINA_Option 模拟步数N 模拟价格 运行时间(s) Call 4 19.0324 9.7539e-005 40 19.1773 2.1497e-004 100 19.1692 0.0010 Put 4 0.8175 9.7539e-005 40 0.9624 2.1497e-004 100 0.8790 0.0010 图1 看涨欧式期权三叉树定价价格收敛图 图2 看跌欧式期权三叉树定价价格收敛图 c)三叉树与B-S公式结果对比 (1)运用B-S公式进行定价,在matlab中输入表达式: [C ,P] = blsprice(58.21,40,0.04,112/365, 0.5864) 表4 B-S公式定价结果 SINA_Option 模拟价格 运行时间(s) Call 19.1692 0.0015 Put 0.8792 (2)精确度对比 表5 三叉树与B-S公式计算结果误差对比 SINA_Option 三叉树模拟价格 B-S 公式定价 绝对误差 相对误差 Call 19.1692 19.1692 0 0 Put 0.8790 0.8792 0.0002 0.02% 评价:三叉树与B-S公式计算的结果看涨期权在保留四位小数的情况下完全相同,说明三叉树对看涨期权的定价相当准确;对于看跌期权,三叉树的定价与B-S公式略有偏差,绝对偏差为0.0002,相对误差为0.02%,仍属于比较小的误差水平。 (3)有效性对比 受限于采用的实验设备稳定性不强,我们分别使用三叉树和B-S公式连续进行100次定价,并记录其平均运行时间: 记录三叉树定价运行时间的程序: for i = 1:100 tic; [c, p] = TrinomialEuro(58.21,40,0.04,112/365,0.5864,100); t(i) = toc; end plot(t) xlabel('turns'); ylabel('t'); title('time of Trinomial method'); tbar = mean(t) 记录B-S公式定价方式运行时间的程序: %compute the time of B-S formula method for i = 1:100 tic; [c, p] = blsprice(58.21,40,0.04,112/365,0.5864); t(i) = toc; end plot(t) xlabel('turns'); ylabel('t'); title('time of B-S method'); tbar = mean(t) 先将输出结果列举如下: 表6 三叉树和B-S公式定价方式效率对比 SINA_Option 模拟步数 看涨期权收敛价格 运行时间(s) 三叉树定价 100 19.1692 5.8846e-005 B-S公式定价 19.1692 0.0015 图3 三叉树定价运行时间 图4 B-S公式定价运行时间 我们发现,在相同的条件下,三叉树比B-S公式更快的收敛于最终价格,且三叉树定价的效率比B-S公式提高了96.08%,说明三叉树定价在效率上有巨大优势。 d)三叉树与二叉树结果对比 (1)编写M文件,运用二叉树模型对其进行定价,M文件请参见附录二:BinomialEuro 输入[C, P] = BinomialEuro(58.21, 40, 0.04, 112/365, 0.5864, N),得到以下结果: 表7 二叉树欧式期权计算结果 SINA_Option 模拟步数N 二叉树模拟价格 三叉树模拟价格 Call 4 19.4525 19.0324 40 19.5858 19.1773 100 19.5774 19.1692 Put 4 0.7546 0.8175 40 0.8878 0.9624 100 0.8794 0.8790 (2)精确度对比 都采用100步的定价结果进行比较: 表8 二叉树三叉树定价精确度对比 SINA_Option 二叉树模拟 三叉树定价 绝对误差 相对误差 Call 19.5774 19.1692 0.4082 2.13% Put 0.8794 0.8790 0.0004 0.04% 从上表对比我们可以发现,对于看涨期权来说,二叉树的定价结果与三叉树的定价结果绝对误差为0.4082,相对误差为2.13%,二叉树定价误差较大;对于看跌期权来看,二叉树与三叉树定价结果绝对误差为0.0004,相对误差为0.04%,二叉树的定价结果误差较小。 (3)有效性对比 为了方便比较,我们都采取100步,计算二叉树和三叉树的运行时间,并进行有效性的对比。 记录二叉树定价运行时间的程序: for i = 1:100 tic; [c, p] = BinomialEuro(58.21,40,0.04,112/365, 0.5864,100) t(i) = toc; end plot(t) xlabel('turns'); ylabel('t'); title('time of Binomial Tree method') tbar = mean(t) 表9 三叉树和二叉树定价方式效率对比 SINA_Option 模拟步数 收敛价格 运行时间 三叉树定价 100 19.1692 5.8846e-005 二叉树定价 100 19.5774 0.0010 图5 二叉树定价方式运行时间 在精度相同的条件下,二叉树定价方式的运行时间比三叉树定价略长,二叉树定价的效率比三叉树低15.99倍。 e)(1)模拟定价结果与市场价格对比 表10 三叉树与市场价格误差对比 SINA_Option 三叉树模拟价格 市场价格 绝对误差 相对误差 Call 19.1692 19.3 -0.1308 -0.68% Put 0.8790 0.37 0.5090 137.57% 评价:对于看涨期权来说,三叉树定价结果比市场价格小,绝对误差为-0.1308,相对误差为-0.68%,计算结果说明三叉树定价相对准确;但对于看跌期权来说,三叉树定价结果比市场价格大,绝对误差为0.5090,相对误差为137.57%,三叉数定价结果误差偏大。 (2)结果改进: 在原模型的基础上,我们认为改变计算波动率的股票时间序列,可能会更有效的计算期权价格。我们采用前5年的股票价格序列算出价格的年波动率为0.5864。但是我们认为时间间隔越大或越小都会影响计算的准确性。所以,我们取前3年的股票价格序列算出价格的年波动率为0.470。由此,根据blsprice函数、二叉树及三叉树算出的看涨、看跌期权价格分别为19.0716和0.3736。其结果明显比之前年波动率为0.5864时算的的结果的精确度更高。 f)假设该期权为美式期权 (1)编写M文件,假设该期权为美式期权,运用三叉树模型对其进行定价,M文件请参见附录三:TrinomialAmer 输入[C, P] = TrinomialAmer(58.21, 40, 0.04, 112/365, 0.5864, 100),得到以下结果: 表11 美式期权与欧式期权价格对比 SINA_Option 欧式期权 美式期权 绝对误差 相对误差 Call 19.5771 19.5585 0.0186 0.10% Put 0.8791 0.8701 0.009 1.03% 评价:从上表可以看出,对于看涨期权而言,欧式期权与美式期权在用三叉树进行定价时,两者的误差非常之小,绝对误差为,0.0186,相对误差更是远小于1%;对于看跌期权而言,欧式定价与美式定价相差较大,绝对误差为0.009,相对误差为1.03%。 g)模型改进 (1)上述定价方式进行定价时,波动率一律采用2008年1月2日至2013年5月30日的平均波动率,然而,超过1年的数据已经不具有很好的代表性,因此我们采取以下两种方式进行修正: 1)分别采用1年、2年、3年、4年的数据计算波动率; 计算波动率的代码如下: R1 = Return(1:252); sigma1 = std(R1); R2 = Return(1:504); sigma2 = std(R2); R3 = Return(1:757); sigma3 = std(R3); R4 = Return(1:1009); sigma4 = std(R4); R5 = Return(1:1260); sigma5 = std(R5); 2)波动率采用前五年的加权平均值,权重分别为5、4、3、2、1 计算波动率的代码如下: b = [5 4 3 2 1]; sigma*b'/15; 计算结果列举如下: 表12 调整后的平均收益率和波动率 计算期限 平均收益率 波动率 1年 0.1891 0.4522 2年 -0.1433 0.6193 3年 0.3333 0.5806 4年 0.3224 0.5464 5年 0.1956 0.5864 加权期限 0.1483 0.5440 利用重新计算得到的波动率,我们运用三叉树定价模型对SINA的期权进行重新定价: 表13 波动率调整后的欧式看涨看跌期权三叉树定价 波动率计算期限 看涨期权价格 市场价格 看跌期权价格 市场价格 1年 19.0133 19.3 0.3153 0.37 2年 19.7570 19.3 1.0591 0.37 3年 19.5452 19.3 0.8472 0.37 4年 19.3800 19.3 0.6821 0.37 5年 19.5770 19.3 0.8790 0.37 加权期限 19.3696 19.3 0.6717 0.37 综合来看,运用最近一年的历史数据计算波动率得到的效果最好,但分别从看涨看跌期权来看,运用最近四年的数据计算得到的看涨期权价格最符合实际,运用最近一年的数据计算看跌期权价格效果最好。 另外我们发现,最近两年的数据得到的计算结果最差,这说明,2011年6月至2012年6月期间,SINA的表现出现了异常波动,导致其期权定价发生偏差,因此在进行期权定价时,应该将2011年6月至2012年6的数据进行剔除或进行其他处理,否则可能得到具有迷惑性的答案。 三、 附录 附录一:TrinomialEuro(欧式期权三叉树定价程序) function[C,P]= TrinomialEuro (S0,K,r,T,sigma,n) if n==fix(n)&&n>=1&& sigma >0&&T>0 deltat=T/n; U=exp(sigma *sqrt(deltat)); M= 1; D=exp(-sigma *sqrt(deltat)); pU= (sigma^2*deltat+exp(2*r*deltat)-exp(r*deltat)*(1+D)+D)/((U-1)*(U-D)); pD= (exp(r*deltat)-1-pU*(U-1))/(D-1); pM=1-pU-pD; Pij=zeros(2*n+1,n+1); Pij(1,1)=1; for j=2:(n+1) Pij(1,j)=Pij(1,j-1)*pU; end Pij(2,2)=pM; for j=2:(n+1) Pij(2,j)=Pij(1,j-1)*pM+Pij(2,j-1)*pU; end Pij(3,2)=pD; for j=3:(n+1) Pij(2*j-2,j)=pD*Pij(2*j-4,j-1)+pM*Pij(2*j-3,j-1); Pij(2*j-1,j)=pD*Pij(2*j-3,j-1); for i=3:(2*j-3) Pij(i,j)=pU*Pij(i,j-1)+pM*Pij(i-1,j-1)+pD*Pij(i-2,j-1); end end Sij=zeros(2*n+1,n+1); Sij(1,1)=S0; Sij(1,2)=U*S0; Sij(2,2)=M*S0; Sij(3,2)=D*S0; for j=3:(n+1) Sij(1,j)=Sij(1,j-1)*U; Sij(2,j)=Sij(2,j-1)*U; for i=3:(2*n+1) Sij(i,j)=Sij(i-2,j-1)*D; end end %% 计算期权价格 weight =Pij(:,n+1); pricefin=Sij(:,n+1); Call =max(pricefin-K,0); Put =max(K-pricefin,0); C=exp(-r*T)*weight'*Call; P=exp(-r*T)*weight'*Put; elseif (n~=fix(n)||n<0)&& sigma >0&&T>0 fprintf 'error' elseif sigma <=0&&T>0 fprintf 'error' elseif T<=0 fprintf 'error' else fprintf 'error' end end 附录二:BinomialEuro(欧式期权二叉树定价程序) function[C,P]=BinomialEuro(S0,K,r,T,sigma,n) deltat=T/n; u=exp(sigma*sqrt(deltat)); d=exp(-sigma*sqrt(deltat)); p=(exp(r*deltat)-d)/(u-d); %risk adjusted probability q=1-p; for i=1:n+1 s(i)=u^(n+1-i)*d^(i-1)*S0; w(i)=nchoosek(n,i-1)*p^(n+1-i)*q^(i-1); xi=max(s(i)-K,0); yi=max(-s(i)+K,0); cv(i)=w(i)*xi; pv(i)=w(i)*yi; end C=sum(cv(:))*exp(-r*T); P=sum(pv(:))*exp(-r*T); 附录三:TrinomialEuro(美式期权三叉树定价程序) function[C,P]= TrinomialAmer (S0,K,r,T,sigma,n) if n==fix(n)&&n>=1&& sigma >0&&T>0 deltat=T/n; U=exp(sigma *sqrt(deltat)); M=1; D=exp(-sigma *sqrt(deltat)); pU= (sigma^2*deltat+exp(2*r*deltat)-exp(r*deltat)*(1+D)+D)/((U-1)*(U-D)); pD= (exp(r*deltat)-1-pU*(U-1))/(D-1); pM=1-pU-pD; Pij=zeros(2*n+1,n+1); Pij(1,1)=1; for j=2:(n+1) Pij(1,j)=Pij(1,j-1)*pU; end Pij(2,2)=pM; for j=2:(n+1) Pij(2,j)=Pij(1,j-1)*pM+Pij(2,j-1)*pU; end Pij(3,2)=pD; for j=3:(n+1) Pij(2*j-2,j)=pD*Pij(2*j-4,j-1)+pM*Pij(2*j-3,j-1); Pij(2*j-1,j)=pD*Pij(2*j-3,j-1); for i=3:(2*j-3) Pij(i,j)=pU*Pij(i,j-1)+pM*Pij(i-1,j-1)+pD*Pij(i-2,j-1); end end Sij=zeros(2*n+1,n+1); Sij(1,1)=S0; Sij(1,2)=U*S0; Sij(2,2)=M*S0; Sij(3,2)=D*S0; for j=3:(n+1) Sij(1,j)=Sij(1,j-1)*U; Sij(2,j)=Sij(2,j-1)*U; for i=3:(2*n+1) Sij(i,j)=Sij(i-2,j-1)*D; end end %% 计算期权价格 C=max(Sij-K,0); P=max(-Sij+K,0); Call=zeros(2*n+1,n+1); Put=zeros(2*n+1,n+1); Call(:,n+1)= C(:,n+1) .*Pij(:,n+1); Put(:,n+1)= P(:,n+1) .*Pij(:,n+1); Call(:,n+1); for k=1:n j=n+1-k; for i=1:2*j-1 Call(i,j)=max(C(i,j),exp(-r*deltat)*(pU*Call(i,j+1)+pM*Call(i+1,j+1)+pD*Call(i+2,j+1))); Put(i,j)=max(P(i,j),exp(-r*deltat)*(pU*Put(i,j+1)+pM*Put(i+1,j+1)+pD*Put(i+2,j+1))); end end C=Call(1,1); P=Put(1,1); elseif (n~=fix(n)||n<0)&& sigma >0&&T>0 fprintf 'error' elseif sigma <=0&&T>0 fprintf 'error' elseif T<=0 fprintf 'error' else fprintf 'error' end end 附录四:TrinomialEuro(美式期权三叉树定价程序) function[C,P]=BinomialAmer(S0,K,r,T,sigma,n) deltat=T/n; U=exp(sigma*sqrt(deltat)); D=exp(-sigma*sqrt(deltat)); pU=(exp(r*deltat)-D)/(U-D); pD=1-pU; Sij=zeros(n+1,n+1); Sij(1,1)=S0; for i=2:n+1 Sij(1,i)=Sij(1,i-1)*U; end for j=2:n+1 for i=2:j Sij(i,j)=Sij(i-1,j-1)*D; end end Pij=zeros(n+1,n+1); Pij(1,1)=1; for i=2:n+1 Pij(1,i)=Pij(1,i-1)*pU; end for j=2:n+1 Pij(j,j)=Pij(j-1,j-1)*pD; end for j=3:n+1 for i=2:j-1 Pij(i,j)=Pij(i,j-1)*pU+Pij(i-1,j-1)*pD; end end C=max(Sij-K,0); P=max(-Sij+K,0); Call=zeros(n+1,n+1); Put=zeros(n+1,n+1); Call(:,n+1)=C(:,n+1).*Pij(:,n+1); Put(:,n+1)=P(:,n+1).*Pij(:,n+1); Call(:,n+1); for k=1:n j=n+1-k; for i=1:j Call(i,j)=max(C(i,j),exp(-r*deltat)*(pU*Call(i,j+1)+pD*Call(i+1,j+1))); Put(i,j)=max(P(i,j),exp(-r*deltat)*(pU*Put(i,j+1)+pD*Put(i+1,j+1))); end end C=Call(1,1); P=Put(1,1); end
/
本文档为【三叉树欧式期权定价】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索