全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 金融工程(数量金融)与金融衍生品
6182 11
2012-04-26
t=0:0.001:1;%时间跨度
dt=0.001;%时间间隔
z=zeros(1001,1);%预留计算内存空间
s=zeros(1001,1);
c=zeros(1001,1);
R=zeros(1001,1);
p=0.1;%假设股票收益率满足ds/s=p*dt+sig*dZ
sig=0.29;
s(1)=15;%股票现价
r=0.035;%无风险利率
k=17;%执行价
for i=1:1000;
z(i)=dt^0.5*randn(1);
R(i)= dt*p+sig*z(i);
s(i+1)=s(i)+s(i)*R(i);
d1=(log(s(i)/k)+(r+0.5*sig^2)*(1-t(i)))/sqrt(sig^2*(1-t(i)));
d2=(log(s(i)/k)+(r-0.5*sig^2)*(1-t(i)))/sqrt(sig^2*(1-t(i)));
c(i)=s(i)*normcdf(d1,0,1)-k*exp(-r*(1-t(i)))*normcdf(d2,0,1);
end
dd1=(log(s(1001)/17)+(r+0.5*sig^2)*(1-1))/sqrt(sig*(1-t(1001))+eps);
dd2=(log(s(1001)/17)+(r-0.5*sig^2)*(1-t(1001)))/sqrt(sig*(1-t(1001))+eps);
c(1001)=s(1001)*normcdf(dd1,0,1)-k*exp(-r*(1-t(1001)))*normcdf(dd2,0,1);
plot(t,s,'b'),grid on
xlabel('时间t');ylabel('股票价格S')
hold on
line([0,1],[15,15],'color','c')
line([0,1],[17,17],'color','g')
h1=gca %获得并保留当前图形的坐标句柄
h2=axes('position',get(h1,'position'))%创建新坐标并保留,h2和h1的位置是一样的
plot(t,c,'r')
set(h2,'yaxislocation','right','color','none')
ylabel('期权价格C')
hold off

这里假设股票收益率服从带漂移的维纳过程。模拟一条股价波动轨迹,再利用布莱克-舒尔斯方程求出相应点的期权价格。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-4-26 12:46:10
我粗略看了一下,你的问题出在模拟股价路径的方法上。
你的做法其实是默认了这个式子成立:d(lnS)=p*dt+sig*dZ,然后你就近似用ln(St+dt)-ln(St)=p*dt+sig*dZ。左边是对数收益率然后你就用St+St*对数收益率然后得到了St+dt。

问题在于d(lnS)=p*dt+sig*dZ这个式子是错的。因为式子里有了随机项所以dS/S不能随便写成d(lnS),你用Ito公式展开d(lnS)=dS/S-0.5*(dS/S)^2,可见如果写成d(lnS)=p*dt+sig*dZ的话,就漏了后面的二阶项,造成股价预期回报率被高估。

正确的做法是这样的,其实你应该知道ds/s=p*dt+sig*dZ这个随机微分方程是有解的。解是:
St=S0exp((p-0.5*sig^2)t+sig*zt)),所以应该是St+dt=Stexp((p-0.5*sig^2)dt+sig*sqrt(dt)*e)),其中e是个标准正态。然后递推就行了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-26 13:07:58
写得很不清楚我用word简单写了下这个随机微分方程的解,你参考下,希望有帮助,其他地方应该没有什么问题,我不细看了

你看到其实dlnS的漂移项应该是(u-0.5*sig^2),而不是u
bless~



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-26 16:30:41
Chemist_MZ 发表于 2012-4-26 13:07
写得很不清楚我用word简单写了下这个随机微分方程的解,你参考下,希望有帮助,其他地方应该没有什么问题, ...
非常感谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-26 16:45:35
Chemist_MZ 发表于 2012-4-26 13:07
写得很不清楚我用word简单写了下这个随机微分方程的解,你参考下,希望有帮助,其他地方应该没有什么问题, ...
您好,不知道能不能再麻烦您一下,我在做状态价格密度的估计时遇到一个问题,想请您帮我看一下
      在B_S公式的假设下,我先用参数估计的方法得到状态价格密度的函数(是期权价格函数关于敲定价格的二阶偏导数),该假设下股价收益率服从正态分布,得到的状态价格密度也应该是一个对数正态分布,但是做出来的图形差距非常大,不知道怎么回事
%模拟B-S假设下的状态价格密度SPD:(错的)
t=0:0.001:1;%时间跨度
dt=0.001;%时间间隔
z=zeros(1001,1);%预留计算内存空间
s=zeros(1001,1);
c=zeros(1001,1);
R=zeros(1001,1);
a=zeros(1001,1);
b=zeros(1001,1);
e=zeros(1001,1);
d=zeros(1001,1);
f=zeros(1001,1);
p=0.1;%假设股票收益率满足ds/s=p*dt+sig*dZ
sig=0.29;
s(1)=15;%股票现价
r=0.035;%无风险利率
k=17;%执行价
for i=1:1000;
z(i)=sqrt(dt)*randn(1);
R(i)=exp((p-0.5*sig^2)*dt+sig*z(i));  
s(i+1)=s(i)*R(i);
d1=(log(s(i)/k)+(r+0.5*sig^2)*(1-t(i)))/sqrt(sig^2*(1-t(i)));
d2=(log(s(i)/k)+(r-0.5*sig^2)*(1-t(i)))/sqrt(sig^2*(1-t(i)));
c(i)=s(i)*normcdf(d1,0,1)-k*exp(-r*(1-t(i)))*normcdf(d2,0,1);
a(i)=(r-0.5*sig^2)*(1-t(i));
b(i)=-log(s(i)/s(1));
e(i)=2*(1-t(i))*sig^2;
d(i)=s(i)*sqrt(2*pi*(1-t(i))*sig^2);
f(i)=1/d(i)*exp((b(i)-a(i))^2/e(i));%SPD
end
dd1=(log(s(1001)/17)+(r+0.5*sig^2)*(1-1))/sqrt(sig*(1-t(1001))+eps);
dd2=(log(s(1001)/17)+(r-0.5*sig^2)*(1-t(1001)))/sqrt(sig*(1-t(1001))+eps);
c(1001)=s(1001)*normcdf(dd1,0,1)-k*exp(-r*(1-t(1001)))*normcdf(dd2,0,1);
s(1001)=s(1000)+s(1000)*R(1000);
f(1001)=1/d(1001)*exp((b(1001)-a(1001))^2/e(1001));
subplot(2,2,1),plot(t,s,'r')
subplot(2,2,2),plot(R,f,'b')
subplot(2,2,3),plot(t,c,'y')
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-26 17:58:39
邵伟学经济 发表于 2012-4-26 16:45
您好,不知道能不能再麻烦您一下,我在做状态价格密度的估计时遇到一个问题,想请您帮我看一下
      在 ...
我不知道是不是理解了你的意思,我大概看了一下,期权价格关于K的二阶导数,解析式我算了一下应该是这个: 1.JPG

但是他也是到期时间的函数,股价变化的同时,到期时间T也在变化,相当于,这个对数正态的方差其实是时间的函数,是在不断变化的。因为我也可以写成: 2.JPG 我看你的程序里正态分布的方差也是变得,这样显然可能会有问题。股价服从对数正态,也是因为你均匀划分区间长度的,方差是常数。所以要画出你要的结果,你要固定到期时间T。

还有就是,如果要看是不是对数正态,得用hist即频数图来看,不能用时间序列来看,那样看起来肯定是乱七八糟的,因为你会生成很多相同的股价,他们对应的点当然就有可能重复了,所以画出来弯弯曲曲的。

我就找出这些问题吧,你再看看~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群