期权有限差分方法定价(一)之显式差分,SAS/IML初步
标签:
杂谈 |
分类: 金融工程计算 |
由BSM公式得到的期权定价公式为
移项可以进一步得到:
可以得到
其中A是由(2)式中的a,b,c构成的矩阵。由上式可以看到显性差分定价与二叉树基本相同,都是可以从最后时刻往前推算到现在的零时刻,得到期权的值。
显性差分存在数值解的稳定性问题,只有当A矩阵的特征值的模都小于1时,数值解才是稳定的,所以对与网格点的步长选择有要求。
边界条件设定,这里不说了。
下面是SAS iml做的有限差分欧式看跌期权。看涨期权就是改变一下边界条件就可以了。
proc IML;
*--------S0资产现在的价格;Smax表示比较大价格的S,期间T内资产价格很难达到-------------,
start
EuroPUTExpl(S0,K,r,T,SIGMA,Smax,M,N);
dS=Smax/M;
dt=T/N;
FDMvalue=j(M+1,N+1,0);
Sindex=0:M;
Timeindex=0:N;
*-------设置边界条件------;
FDMvalue[,N+1]=(K-VetorS)#((K-VetorS)>0);
FDMvalue[1,]=K#EXP(-r#dt#(N-Timeindex));
FDMvalue[M+1,]=0;
*-------设置系数---------;
a=0.5#dt#(sigma##2#Sindex-r)#Sindex;
b=1-dt#(sigma##2#Sindex##2+r);
c=0.5#dt#(sigma##2#Sindex+r)#Sindex;
*-------从到期日由后向前推算-------;
*-----以下创建一个数据集FDMGRAPH,它包含一个变量FDMvalue,值来自于矩阵FDMvalue,目的用于下面调用宏画图---;
*-------因为S0不一定在VetcorS中,这里采取把SO近似到最接近它的--------
finish;
PRICE=EUROPUTExpl(50,50,0.1,5/12,0.3,100,50,100);
print price;
可以看到用下面的语句,期权值出现了不收敛。股价步长定得过于小。
PRICE=EUROPUTExpl(50,50,0.1,5/12,0.3,100,100,100);
print price;
每运行一次EUROPUTExpl创建的数据集FDMgraph都做了改变,所以要运行下面的宏,要运行产生正确的期权价格而产生数据集FDMgraph。
为了画该有限差分方法得到的格点三维图,先定义一个宏DRAW.
%macro
Draw(Smax,T,M,N);
data test;
goptions reset=global gunit=pct border cback=white
title " Explicit FDM
proc g3d data=FDM;
run;
%mend;
最后提交下面语句:
%draw (100,5/12,50,100);
下面是产生的图象,可以看到在股价为100时,该看跌期权价格为0,高于63以上的都几乎为0,期权的最高价去到股价为0时的50,即执行价格,这两个都是边界条件。

加载中…