求助,亚式期权定价的matlab程序

求助,亚式期权定价的matlab程序,第1张

比如说欧式期权定价的程序是这个

function [callprice,putprice]=euro1(S,X,r,T,sigma,N)dt=T/Nu=exp(sigma*sqrt(dt))d=1/up=(exp(r*dt)-d)/(u-d)

for i=1:N+1St(i)=S*power(u,i-1)*power(d,N+1-i)end

for i=1:N+1Call(i)=max(St(i)-X,0) Put(i)=max(X-St(i),0)end

for i=N:-1:1for j=1:iCall(j)=exp(-r*dt)*(p*Call(j+1)+(1-p)*Call(j)) Put(j)=exp(-r*dt)*(p*Put(j+1)+(1-p)*Put(j)) endend

callprice=Call(1)putprice=Put(1)

参考论文

 期权定价理论是现代金融学中最为重要的理论之一,也是衍生金融工具定价中最复杂的。本文给出了欧式期权定价过程的一个简单推导,并利用Matlab对定价公式给出了数值算例及比较静态分析,以使读者能更直观地理解期权定价理论。

关键词:Matlab;教学实践

基金项目:国家自然科学基金项目(70971037);教育部人文社科青年项目(12YJCZH128)

中图分类号:F83 文献标识码:A

收录日期:2012年4月17日

现代金融学与传统金融学最主要的区别在于其研究由定性分析向定量分析的转变。数理金融学即可认为是现代金融学定量分析分支中最具代表性的一门学科。定量分析必然离不开相应计算软件的应用,Matlab就是一款最为流行的数值计算软件,它将高性能的数值计算和数据图形可视化集成在一起,并提供了大量内置函数,近年来得到了广泛的应用,也为金融定量分析提供了强有力的数学工具。

一、Black-Scholes-Merton期权定价模型

本节先给出B-S-M期权定价模型的简单推导,下节给出B-S-M期权定价模型的Matlab的实现。设股票在时刻t的价格过程S(t)遵循如下的几何Brown运动:

dS(t)=mS(t)dt+sS(t)dW(t) (1)

无风险资产价格R(t)服从如下方程:

dR(t)=rR(t)dt (2)

其中,r,m,s>0为常量,m为股票的期望回报率,s为股票价格波动率,r为无风险资产收益率且有0<r<m;dW(t)是标准Brown运动。由式(1)可得:

lnS(T):F[lnS(t)+(m-s2/2)(T-t),s■] (3)

欧式看涨期权是一种合约,它给予合约持有者以预定的价格(敲定价格)在未来某个确定的时间T(到期日)购买一种资产(标的资产)的权力。在风险中性世界里,标的资产为由式(1)所刻画股票,不付红利的欧式看涨期权到期日的期望价值为:■[max(S(T)-X,0)],其中■表示风险中性条件下的期望值。根据风险中性定价原理,不付红利欧式看涨期权价格c等于将此期望值按无风险利率进行贴现后的现值,即:

c=e-r(T-1)■[max{S(T)-X,0}] (4)

在风险中性世界里,任何资产将只能获得无风险收益率。因此,lnS(T)的分布只要将m换成r即可:

lnS(T):F[lnS(t)+(r-s2/2)(T-t),s■] (5)

由式(3)-(4)可得欧式看涨期权价格:

c=S(t)N(d1)-Xe-r(T-1)N(d2) (6)

这里:

d1=■ (7)

d2=■=d1-s■ (8)

N(x)为均值为0标准差为1的标准正态分布变量的累积概率分布函数。S(t)为t时刻股票的价格,X为敲定价格,r为无风险利率,T为到期时间。欧式看跌期权也是一种合约,它给予期权持有者以敲定价格X,在到期日卖出标的股票的权力。

下面推导欧式看涨期权c与欧式看跌期权p的联系。考虑两个组合,组合1包括一个看涨期权加上Xe-r(T-1)资金,组合2包含一个看跌期权加上一股股票。于是,在到期时两个组合的价值必然都是:

max{X,S(T)} (9)

欧式期权在到期日之前是不允许提前执行的,所以当前两个组合的价值也必相等,于是可得欧式看涨期权与看跌期权之间的平价关系(put-call parity):

c+Xe-r(T-t)=p+S(t) (10)

由式(10)可得,不付红利欧式看跌期权的价格为:

p=Xe-r(T-t)N(-d2)-S(t)N(-d1) (11)

二、Black-Scholes-Merton模型的Matlab实现

1、欧式期权价格的计算。由式(6)可知,若各参数具体数值都已知,计算不付红利的欧式看涨期权的价格一般可以分为三个步骤:先算出d1,d2,涉及对数函数;其次计算N(d1),N(d2),需要查正态分布表;最后再代入式(6)及式(11)即可得欧式期权价格,涉及指数函数。不过,欧式期权价格的计算可利用Matlab中专有blsprice函数实现,显然更为简单:

 [call,put]=blsprice(Price,Strike,Rate,Time,Volatility) (12)

只需要将各参数值直接输入即可,下面给出一个算例:设股票t时刻的价格S(t)=20元,敲定价格X=25,无风险利率r=3%,股票的波动率s=10%,到期期限为T-t=1年,则不付红利的欧式看涨及看跌期权价格计算的Matlab实现过程为:

输入命令为:[call,put]= blsprice(20,25,0.03,0.1,1)

输出结果为:call=1.0083 put=5.9334

即购买一份标的股票价格过程满足式(1)的不付红利的欧式看涨和看跌期权价格分别为1.0083元和5.9334元。

2、欧式期权价格的比较静态分析。也许纯粹计算欧式期权价格还可以不利用Matlab软件,不过在授课中,教师要讲解期权价格随个参数的变化规律,只看定价公式无法给学生一个直观的感受,此时可利用Matlab数值计算功能及作图功能就能很方便地展示出期权价格的变动规律。下面笔者基于Matlab展示欧式看涨期权价格随各参数变动规律:

(1)看涨期权价格股票价格变化规律

输入命令:s=(10∶1∶40);x=25;r=0.03;t=1;v=0.1;

c=blsprice(s,x,r,t,v);

plot(s,c,'r-.')

title('图1看涨期权价格股票价格变化规律');

xlabel('股票价格');ylabel('期权价值');grid on

(2)看涨期权价格随时间变化规律

输入命令:s=20;x=25;r=0.03;t=(0.1∶0.1∶2);v=0.1;c=blsprice(s,x,r,t,v);

plot(t,c,'r-.')

title('图2看涨期权价格随时间变化规律');

xlabel('到期时间');ylabel('期权价值');grid on

(3)看涨期权价格随无风险利率变化规律

s=20;x=25;r=(0.01∶0.01∶0.5);t=1;v=0.1;c=blsprice(s,x,r,t,v);

plot(r,c,'r-.')

title('图3看涨期权价格随无风险利率变化规律');

xlabel('无风险利率');ylabel('期权价值');grid on

(4)看涨期权价格随波动率变化规律

s=20;x=25;r=0.03;t=1;v=(0.1∶0.1∶1);c=blsprice(s,x,r,t,v);

plot(v,c,'r-.')

title('图4看涨期权价格随波动率变化规律');

xlabel('波动率');ylabel('期权价值');grid on

(作者单位:南京审计学院数学与统计学院)

主要参考文献:

[1]罗琰,杨招军,张维.非完备市场欧式期权无差别定价研究[J].湖南大学学报(自科版),2011.9.

[2]罗琰,覃展辉.随机收益流的效用无差别定价[J].重庆工商大学学报(自科版),2011.

[3]邓留宝,李柏年,杨桂元.Matlab与金融模型分析[M].合肥工业大学出版社,2007.

function

[Call,Put] = TrinomialEuro(s0,k,T,n,r,sigma)

% s0 underlying asset price

% k exercise price

% T expiration date

% numbers of steps

% risk free rate

% sigma volitility of stock

deltat=T/n

u=exp(sigma*sqrt(deltat))

d=1/u

m=1

P=(exp(2*r*deltat)+sigma^2*deltat-(d+1)*exp(r*deltat)+d)/((u^2-1)-(u-

1)*(d+1))

Q=(exp(r*deltat)-1-(u-1)*P)/(d-1)

M=1-Q-P

for

i=1:n+1

for

j=1:n+2-i

s(i,j)=s0*u^(i-1)*m^(j-1)*d^(n+2-i-j)

w(i,j)=nchoosek(n,i-1)*P^(i-1)*nchoosek(n+1-i,j-1)*M^(j-1)*Q^(n+2-i-j

)

x(i,j)=max(s(i,j)-k,0)

y(i,j)=max(k-s(i,j),0)

cv(i,j)=w(i,j)*x(i,j)

pv(i,j)=w(i,j)*y(i,j)

end

end

Call=sum(cv(:))*exp(-r*T)

Put=sum(pv(:))*exp(-r*T)

Price=max(exp(-r*deltat)*(p*f(1,1)+q*f(1,2)),0)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12209212.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存