全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5206 2
2010-07-23
此处 t 代表行权时间
r代表连续复利收益率    sig 波动率      m代表模拟m次      n代表每次模拟n步
div代表连续股利收益率
我下面提供的是部分欧式看涨期权的蒙特卡洛模拟的核心代码  如有问题请纠正
但是我本人sas初学 但知道其有强大的分析和作图功能
请高手将我的代码丰富下 能够实现图像形式的股价模拟路径 非常感谢



dt = t/n;                                                                                                                           
nudt = (r-div-0.5*sig^2)*dt;                                                                                                         
sigsdt = sig*sqrt(dt);                                                                                                               
lns = ln(s);                                                                                                                                                                                                                                      
sum_CT = 0;                                                                                                                          
sum_CT2 = 0;                                                                                                                           
do  j = 1 to M;     *for each simulation;                                                                                            
lnst = lns;                                                                                                                           
  do i = 1 to  N ;     *for each time step;                                                                                       
  X=rannor(0);                                                                                                                     
  lnst=lnst+nudt+sigsdt*x;   *evolve the stock price;                                                                              
  end;                                                                                                         

ST = exp(lnst);                                                                                                                     
CT = max{0,ST-K};                                                                                                                    
sum_CT = sum_CT + CT;                                                                                                                 
sum_CT2 = sum_CT2 + CT*CT;                                                                                                            
end;     

call_value = sum_CT/M*exp(-r*t);                                                                                                  
SD = sqrt((sum_CT2 - sum_CT*sum_CT/M)*exp(-2*r*T)/(M-1));                                                                             
SE = sd/sqrt(M);
二维码

扫码加我 拉你入群

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

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

全部回复
2010-7-23 22:32:33
学习了。真的是知识的海洋
二维码

扫码加我 拉你入群

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

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

2010-7-25 21:58:47
个人观点:
你上面想实现M次模拟的结果然后对这模拟值求平均在得到看涨期权价格,但是我觉得你选择的是同一个种子产生随机正态分布数,这样实际上是一个程序,还有你想得到这个价格的路径值,你可以在程序里面加上OUTPUT来产生,但是下面的程序就不是这样了,以下是一个看涨看跌期权的蒙特卡洛模拟:
proc iml;
s0=j(10000,1,100);
x=100;
t=1;
n=250;
sigma=0.1;
rf=0.05;
m=10;
yeild=j(nrow(s0),n,.);
s=j(nrow(s0),n,.);
call=j(nrow(s0),1,.);
put=j(nrow(s0),1,.);
result=j(m,2,.);
do k=1 to m;
do i=1 to nrow(yeild);
do j=1 to ncol(yeild);
yeild[i,j]=(rf-0.5*sigma**2)*t/n+sigma*sqrt(t/n)*rannor(round(k+exp(k),1));
s[i,j]=s0[i]*exp(yeild[i,1:j][,+]);
end;
end;
do i=1 to nrow(s0);
call[i]=max(s[i,n]-x,0);
put[i]=max(x-s[i,n],0);
end;
result[k,1]=call[:,]*exp(-rf*t);
result[k,2]=put[:,]*exp(-rf*t);
end;
print result;
quit; 可以具体研究下!
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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