加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]期权定价的Matlab实现(以欧式看涨期权为例)

(2012-10-22 15:22:36)
标签:

转载

二叉树模型

考虑到欧式期权的特性,忽略中间过程,直接关注末期状态及其概率分布。

function price=bino(s,k,r,t,v,n)
dt=t/n;
u=exp(v*sqrt(dt));
d=1/u;
p=(exp(r*dt)-d)/(u-d);
for i=0:n
st(i+1)=s*power(u,n-i)*power(d,i);
prob(i+1)=nchoosek(n,i)*power(p,n-i)*power((1-p),i);
end
f=max(st-k,0);
price=prob*f'*exp(-r*t);

end

 

蒙特卡洛模拟

在此加入对偶变量,减小模拟结果的方差。

%Advanced Monte Carlo method
function eucall=blsmca(s,k,r,t,v,n)
randn('seed',0);
nt=(r-.5*v^2)*t;
sit=v*sqrt(t);
rand=randn(n,1);
discpayoff=exp(-r*t)*max(0,s*exp(nt+sit*rand)-k);
discpayoffl=exp(-r*t)*max(0,s*exp(nt+sit*(-rand))-k);
[eucall,varprice,ci]=normfit([discpayoff;discpayoffl]);
end

 

有限差分方法

在此为了减小运算量,采用显示有限差分法。(在隐式有限差分法中,需要求解方程)

function mx=fd(s,k,r,t,v)
smax=200;
ds=5;
dt=t/10;
M=round(smax/ds);
N=round(t/dt);
ds=smax/M;
dt=t/N;
mx=zeros(M+1,N+1);
mx(:,1)=smax:-ds:0;
mx(:,N+1)=max(mx(:,1)-k,0);
mx(1,2:N)=smax-k;
mx(M+1,2:N)=0;

vj=2:M;
a=1/(1+r*dt)*(-1/2*r*vj*dt+1/2*v^2*vj.^2*dt);
b=1/(1+r*dt)*(1-v^2*vj.^2*dt);
c=1/(1+r*dt)*(1/2*r*vj*dt+1/2*v^2*vj.^2*dt);
for i=N:-1:2
    for j=2:M
        mx(j,i)=a(i)*mx(j-1,i+1)+b(i)*mx(j,i+1)+c(i)*mx(j+1,i+1);
    end
end

end

 

另外,MATLAB中的blkprice函数和blsprice函数算出来得期权价值相差较大,个人觉得布莱克近似模型的有效性值得商榷。

 

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有