您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页期权定价的有限差分法

期权定价的有限差分法

来源:爱go旅游网


第9章 期权定价的有限差分法

【本章精粹】

期权定价最终归结为一个二阶偏微分方程,而有限差分方法是计算偏微分方程的有效工具。因此,本章介绍3种常见的有限差分方法,并且给出了相关程序,让读者了解有限差分方法计算的基本原理,熟悉用显式法和隐式法计算欧式看涨期权价格。

9.1 有限差分计算方法的基本原理

偏微分方程在金融工程中占有重要位置,著名的Black-Scholes方程就是以二阶偏微分方程形式给出的。偏微分方程为求解复杂的金融衍生工具价格提供了有力手段,但是偏微分方程通常没有解析解,因此用数值计算方法求解衍生工具价格就成为金融工程的一项基本功。求解金融衍生工具价格与求解通常偏微分方程的区别主要在于一般偏微分方程是给定初值求解终值,而衍生品定价问题是给定终值求初值,属于倒向随机偏微分方程求解。

有限差分方法的核心思想是对导数进行离散化,把偏微分方程转化为差分方程,然后利用迭代法求解。

根据对偏导数离散方法的不同,有限差分方法可分为显式差分法、隐式差分法和内含差分法,下面分别进行介绍。

假设fi,j表示在i时刻股票价格为第j价位的期权价格,对f一阶导数进行如下差分:

fi,j1fi,jf (9-1) SSfi1,jfi,jf (9-2) tt式(9-1)、式(9-2)的差分方法称为显式差分法。也可以对一阶导数做如下差分:

fi,jfi,j1f (9-3) SSfi,jfi1,jf (9-4) tt式(9-3)、式(9-4)的差分方法称为隐式差分法。也可以做如下差分:

fi,j1fi,j1f (9-5) S2Sfi1,jfi1,jf (9-6) t2t式(9-5)、式(9-6)的差分方法称为内含差分法。

对二阶微分方程,用如下方法进行差分:

2ffi,j1fi,jfi,jfi,j1/S (9-7) S2SS整理得:

fi,j1fi,j12fi,j2f S2S2以上就是偏微分方程的常见离散方法。

9.2 显式有限差分计算法求解欧式看跌期权

下面利用显式差分法求解欧式看跌期权,对一阶偏导数、二阶导数离散方式如下:

fi,jfi1,jf (9-8) ttffi,j1fi,j1S2S 2ffi,j1fi,j12fi,jS2S2 将式(9-8)、式(9-9)、式(9-10)代入Black-Schole公式,有

fi,jfi1,jfi,j1fi,j11222fi,j1fi,j12ftrjS2S2jSi,jS2rfi,j 经过整理可得:

fa***i1,jjfi,j1bjfi,jcjfi,j1,i0,1,2,,N1;j1,2,3,,M1 a*j12t(2j2rj) b*1t(2j2jrj)

c*j12t(2j2rj) 将式(9-12)写成矩阵形式为

fN1,M1c***M1bMaM00fN1,MfN1,M211c***0M2bM2aM20fN1,M1fN1,M300c***M3bM3aM30fN1,M2**. 000c*M4bM4aMfN1,24fN1,1fN1,1000c**a*1b11fN1,0**c1b*MM1aM1000c***M2bM2aM20L00c***M3bM3aM30000c**a* M4bM4M4000c*1b**1a1(M1)(M1)则上式可以写成

(9-9) (9-10) (9-11) (9-12)

fN1,M1fN1,MffN1,M2N1,M1ffN1,M3N1,M2L(M1)(M1). fN1,2fN1,1ffN1,1N1,0也即

fN1LfN

对于欧式看涨期权,其终值条件为

f(S,T)max(KS,0)S0

下面考虑欧式看跌期权的边界条件,当股票价格St非常大时,看跌期权到期日价格为0,f(t,Smax)0;当股票价格为0时,St=0,那么到期日支付价值为K,贴现到t期有f(t,0)Ker(Tt),边界条件可以写成如下形式:

fi,M0

i=1,2,…,N

fi,0Ker(Ni)t i=0,1,2, …,N

fN,jmax(KjS) j=0,1,2, …,M

例9-1 已知股票价格为50元,欧式看跌期权的执行价格为50元,到期日为5个月,股票年波动率的标准差为0.3,无风险利率为10%,试用有限差分方法求解期权的价格。

解 下面是用Matlab编写的程序,程序文件名为osqq.m。

s0=50; %股价 k=50; %执行价

r=0.1; %无风险利率 sigma=0.3; %股票波动率 T=5/12; %续存期

smax=100; %确定股票价格的最大价格 ds=2; %股价离散步长 dt=5/1200; %时间离散步长

M=round(smax/ds); %计算股价离散步数 ds=smax/M; %股价离散实际步长 N=round(T/dt); %时间离散步数 dt=T/N; %时间离散实际步长 %%%%%%%%

matval=zeros(M+1,N+1);

vets=linspace(0,smax,M+1); %将区间[0,smax]分成M+1段 veti=0:N; vetj=0:M;

%建立偏微分方程边界条件

matval(:,N+1)=max(k-vets,0);

matval(1,:)=k*exp(-r*dt*(N-veti));

matval(M+1,:)=0; %%%%%%%%

%确定迭代矩阵系数

a=0.5*dt*(sigma^2*vetj-r).*vetj; b=1-dt*(sigma^2*vetj.^2+r);

c=0.5*dt*(sigma^2*vetj+r).*vetj; %%%%%%%

L=zeros(M-1,M+1); for i=2:M

L(i-1,i-1)=a(i);L(i-1,i)=b(i);L(i-1,i+1)=c(i); end

%%%%%%%%%%%%%% for i=N:-1:1

matval(2:M,i)=L*matval(:,i+1); end

jdown=floor(s0/ds); jup=ceil(s0/ds); if jdown==jup

price=matval(jdown+1,1)+(s0-jdown*ds)*(matval(jup+1,1)-matval(jup+1,1))/ds end

>> osqq

运行结果如下:

price = 2.8288

9.3 显式有限差分计算法求解美式看跌期权

这里采用与9.1节不同的离散方式,显式差分离散方法如下:

fi1,j1fi1,j1f (9-13) S2Sfi1,j1fi1,j12fi1,j2f (9-14) 22SS这样差分方程为

fi1,jfi,jtfi1,j1fi1,j12Sfi1,j1fi1,j112j2S2rfi,j 2S2rjS整理得:

fi,jajfi1,j1bjfi1,jcjfi1,j1 (9-15)

11122rjtjt 1rt221bj(12j2t)

1rt11122cjrjtjt

1rt22aj考虑到边界条件,fi,0k;fi,M0;i=0,1,2,…,N。 如果记

b1a2L00c1b2000c2aM200bM2aM10a1k00,g...

CM200bM2,M1。

对于第i个时刻的现金流Fi,j,Fi,jmax(kjS,fi,j),i,j1,2,记

F(F1,F2,,FM1)

则公式(9-15)有

FiLFi1g

例9-2 已知股票价格为50美元,美式看跌期权执行价格为50美元,到期日为5个月,股票年波动率的标准差为0.4,无风险利率为10%,试用有限差分方法求解期权的价格。

解 编写显式差分的Matlab程序如下。

s0=50;k=50;r=0.1;sigma=0.4;T=5/12; dt=T/10;ds=5; smax=100;

M=round(smax/ds); N=round(T/dt); ds=smax/M; dt=T/N; %%%%%%%% veti=1:N; vetj=1:M;

a=1/(1+r*dt)*(-1/2*r*vetj*dt+1/2*sigma^2*vetj.^2*dt); b=1/(1+r*dt)*(1-sigma^2*vetj.^2*dt);

c=1/(1+r*dt)*(1/2*r*vetj*dt+1/2*sigma^2*vetj.^2*dt); %%%%%%%

L=zeros(M-1,M-1);

L(1,1)=b(1);L(1,2)=c(1);

L(M-1,M-2)=a(M-1);L(M-1,M-1)=b(M-1); for j=2:M-2

L(j,j-1)=a(j);L(j,j)=b(j);L(j,j+1)=c(j); end

%%%%%%%%%%%%%%

f1=zeros(M-1,N+1);

f1(:,N+1)=max(k-vetj(1:M-1)*ds,0); f0=zeros(M-1,1); f0(1,1)=a(1)*k; for i=N:-1:1

f1(:,i)=L*f1(:,i+1)+f0; for j=1:M-1

if f1(j,i)<=k-vetj(j)*ds; f1(j,i)=k-vetj(j)*ds; end end end

f2(1,1:N+1)=50; f2(2:M,1:N+1)=f1; f2(M+1,1:N+1)=0 >> msqq

得到如表9-1所示的结果。

表9-1 计算结果 单位:美元

股价 时间 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5 0 10 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.2770 6.7557 4.2568 2.5872 1.4787 0.9136 0.3241 0.4550 -0.1341 0.2824 -0.1067 0.0576 9 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.2013 6.6134 4.0818 2.3922 1.3670 0.6766 0.4574 0.0635 0.2046 -0.0475 0.0497 0 0 8 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.1279 6.4659 3.8859 2.2105 1.1650 0.6342 0.2288 0.1957 -0.0036 0.0479 0 0 0 7 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.0620 6.3097 3.6789 1.9878 1.0227 0.4444 0.2452 0.0403 0.0518 0 0 0 0 6 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.0122 6.1460 3.4398 1.7703 0.8101 0.3744 0.1004 0.0635 0 0 0 0 0 5 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.0000 5.9592 3.1788 1.5028 0.6519 0.2051 0.0887 0 0 0 0 0 0 4 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.0000 5.7474 2.8668 1.2436 0.4178 0.1426 0 0 0 0 0 0 0 3 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.0000 5.4984 2.5266 0.8986 0.2671 0 0 0 0 0 0 0 0 2 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.0000 5.2400 2.0725 0.5895 0 0 0 0 0 0 0 0 0 1 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.0000 5.0000 1.5560 0 0 0 0 0 0 0 0 0 0 0 50.0000 45.0000 40.0000 35.0000 30.0000 25.0000 20.0000 15.0000 10.0000 5.0000 0 0 0 0 0 0 0 0 0 0 0 0 可见,表9-1中第11行第1列的期权价格是4.2568美元。

9.4 隐式有限差分计算法求解欧式看跌期权

下面利用隐式有限差分计算法求解欧式看跌期权,对一阶偏导数、二阶导数离散方式如下:

fi1,jfi,jf (9-16) ttfi,j1fi,j1f (9-17) S2Sfi,j1fi,j12fi,j2f (9-18) S2S2将上面3个等式代入B-S公式,有:

fi1,jfi,jfi,j1fi,j11222fi,j1fi,j12fi,jrjSjSrfi,j (9-19) t2S2S2整理得:

fi1,jajfi,j1bjfi,jcjfi,j1 (9-20)

11ajrjt2j2t (9-21)

2222b*j1jtrt (9-22)

11cjrjt2j2t (9-23)

22改写为矩阵形式为

b1a200c1b2000c2aM200bM2aM10fi,1fi1,1a1fi1,0ff00i,2i1,2 ....=...-...CM2fi,M2fi1,M20cfbM2fi,M1fi1,M1M1i1,M00bM2aM1fi,1a1fi1,00fi,200(i) ,f...,g...CM20fi,,M2cfbM2M1i1,Mfi,M1记为

b1a2L00c1b2000c2aM2则有

Lf(i)f(i1)g

例9-3 已知股票价格为50元,欧式看跌期权的执行价格为50元,到期日为5个月,股票年波动率的标准差为0.4,无风险利率为10%,试用有限差分方法求解期权的价格。

解 下面是用Matlab编写的程序,程序文件名为yhcf.m。

s0=50; %股价 k=50; %执行价

r=0.1; %无风险利率 sigma=0.4; %股票波动率 T=5/12; %续存期

smax=100; %确定股票价格的最大价格

ds=0.5; %股价离散步长 dt=5/2400; %时间离散步长

M=round(smax/ds); %计算股价离散步数 ds=smax/M; %股价离散实际步长 N=round(T/dt); %时间离散步数 dt=T/N; %时间离散实际步长 matval=zeros(M+1,N+1);

vets=linspace(0,smax,M+1); %将区间[0,smax]分成M+1段 veti=0:N; vetj=0:M;

%建立偏微分方程边界条件

matval(:,N+1)=max(k-vets,0);

matval(1,:)=k*exp(-r*dt*(N-veti)); matval(M+1,:)=0; %%%%%%%%

%确定迭代矩阵系数

a=0.5*(r*dt*vetj-sigma^2*dt*vetj.^2); b=1+sigma^2*dt*vetj.^2+r*dt;

c=-0.5*(r*dt*vetj+sigma^2*dt*vetj.^2);

coeff=diag(a(3:M),-1)+diag(b(2:M))+diag(c(2:M-1),1); [L,U]=lu(coeff) %%%%%%%

aux=zeros(M-1,1); for i=N:-1:1

aux(1)=-a(2)*matval(1,i)

matval(2:M,i)=U\\(L\\(matval(2:M,i+1)+aux)); end

jdown=floor(s0/ds); jup=ceil(s0/ds); if jdown==jup

price=matval(jdown+1,1) else

price=matval(jdown+1,1)+(s0-jdown*ds)*(matval(jup+1,1)-matval(jup+1,1))/ds end

>> yhcf

运行结果如下:

price = 4.0718

9.5 隐式有限差分计算法求解美式看跌期权

与9.4节的方法一样,根据式(9-20)、式(9-21)、式(9-22)、式(9-23),下面考虑美式看跌期权的边界条件。

T时刻看跌期权到期现金流为max(KST,0),其中ST为T时刻的股票价格,则:

fN,jmax(KjS,0) j=0,1,2,…,M (9-24)

当股票价格为0时,看跌期权价格为K,则:

fi,0K i=0,1,2,…,N (9-25)

当股票价格趋于无穷大时,看跌期权价格趋于0,因此有近似值:

fi,M0 i=1,2,…,N

下面考虑美式期权提前执行条件,当计算fi,j时,有

fi,jmax(fi,j,KjS) (9-26)

注意,式(9-26)右边的fi,j是递推公式结果,左边才是i时刻j价位的期权价格。 例9-4 已知股票价格为50元,美式看跌期权的执行价格为50元,到期日为5个月,股票年波动率的标准差为0.4,无风险利率为10%,试用有限差分方法求解期权的价格。

解 下面是用Matlab编写的程序,程序文件名是yhcf.m。

s0=50; %股价 k=50; %执行价

r=0.1; %无风险利率 sigma=0.4; %股票波动率 T=5/12; %续存期

smax=100; %确定股票价格的最大价格 ds=0.5; %股价离散步长 dt=5/2400; %时间离散步长

M=round(smax/ds); %计算股价离散步数 N=round(T/dt); %时间离散步数 ds=smax/M; %股价离散实际步长 dt=T/N; %时间离散实际步长

%%%%%%%%

%确定迭代矩阵系数 for j=1:M

a(j)=0.5*r*j*dt-0.5*sigma^2*j^2*dt b(j)=1+sigma^2*j^2*dt+r*dt

c(j)=-0.5*r*j*dt-0.5*sigma^2*j^2*dt end

%%%%%%%

L=zeros(M-1,M-1);

L(1,1)=b(1);L(1,2)=c(1);

L(M-1,M-2)=a(M-1),L(M-1,M-1)=b(M-1); for j=2:M-2

L(j,j-1)=a(j);L(j,j)=b(j);L(j,j+1)=c(j) end

for j=1:M-1

f(j,N+1)=max(k-j*ds,0) end

for i=N:-1:1

F(1)=f(1,i+1)-a(1)*k;F(2:M-1)=f(2:M-1,i+1) f(1:M-1,i)=L^(-1)*F

for j=1:M-1

if f(j,i)>> yhcf

运行结果如下:

price = 4.07

9.6 Crank-Nicolson方法求解欧式障碍期权

Crank-Nicolson方法是内含有限差分与外推有限差分的平均值,是比较精确的一种数值解法。

隐含有限差分方程为

fi,jajfi1,j1bjfi1,jcjfi,1,j1 (9-27)

外推有限差分方程为

*fi1,ja*jfi,j1b*jfi,jcjfi,j1 (9-28)

将式(9-27)和式(9-28)相加,得:

**fi,jfi1,jajfi1,j1bjfi1,jcjfi,1,j1a*jfi,j1bjfi,jcjfi,j1

整理得:

jfi1,j1(1j)fi1,ji1,j1jfi,j1(1j)jfi,jjfi,j1

jt22(jrj) 4tj(2j2r)

2tj(2j2rj)

4M1fi1M2fi 111122M10000000000M21M1M1 M21M100方程的矩阵形式为

111122M20000f(i)(fi,1,fi,2,020000M21M2M1 M21M100,fi,M1)T

考虑欧式下跌出局看跌期权,障碍值为Sb,S≥Sb,障碍期权的现金流为

f(t,Smax)0,f(t,Sb)0

例9-5 已知股票价格为50元,欧式看跌期权的执行价格为50元,到期日为5个月,股票年波动率的标准差为0.4,无风险利率为10%,试用有限差分方法的Crank-Nicolson方法求解欧式障碍期权的价格。

解 下面是用Matlab编写的程序,程序文件名为cncf.m。

s0=50; %股价 k=50; %执行价

r=0.1; %无风险利率 sigma=0.4; %股票波动率 T=5/12; %续存期

smax=100; %确定股票价格的最大价格 ds=5; %股价离散步长 dt=5/2400; %时间离散步长

M=round((smax-sb)/ds); %计算股价离散步数 ds=(smax-sb)/M; %股价离散实际步长 N=round(T/dt); %时间离散步数 dt=T/N; %时间离散实际步长 matval=zeros(M+1,N+1);

vets=linspace(0,smax,M+1); %将区间[0,smax]分成M+1段 veti=0:N;

vetj=vets/ds;

%建立偏微分方程边界条件

matval(:,N+1)=max(k-vets,0); matval(1,:)=0; matval(M+1,:)=0; %%%%%%%% %建立对角矩阵

alpha=0.25*dt*(sigma^2*vetj.^2-r*vetj); beta=-dt*0.5*(sigma^2*vetj.^2+r);

gama=0.25*dt*(sigma^2*vetj.^2+r*vetj);

M1=-diag(alpha(3:M),-1)+ diag(1-beta(2:M))-diag(gama(2:M-1),1); [L,U]=lu(M1);

M2=-diag(alpha(3:M),-1)+ diag(1+beta(2:M))+diag(gama(2:M-1),1); for i=N:-1:1

matval(2:M,i)=U\\(L\\(M2*matval(2:M,i+1))); end

jdown=floor((s0-sb)/ds);

jup=ceil((s0-sb)/ds); if jdown==jup

price=matval(jdown+1,1) else

price=matval(jdown+1,1)+(s0-jdown*ds)*(matval(jup+1,1)-matval(jup+1,1))/ds

end

>> cncf

运行结果如下。

price = 0.5414

例9-6 已知股票价格为50元,美式看跌期权的执行价格为50元,到期日为5个月,股票年波动率的标准差为0.4,无风险利率为10%,试用有限差分方法的Crank-Nicolson方法求解美式看跌期权的价格。

解 下面是用Matlab编写的程序,程序文件名为cncf1.m。

clc;clear;

s0=50; %股价 k=50; %执行价

r=0.1; %无风险利率 sigma=0.4; %股票波动率 T=5/12; %续存期

Sb=40; %sb是障碍值

smax=100; %确定股票价格的最大价格 ds=0.5; %股价离散步长 dt=T/10; %时间离散步长

N=round(T/dt); %时间离散步数

M=round(smax/ds); %计算股价离散步数 ds=smax/M; %股价离散实际步长 dt=T/N; %时间离散实际步长 veti=1:M-1; vetj= vetj'; %%%%%%%%

alpha=dt/4*(sigma^2*vetj.^2-r*vetj); beta=-dt/2*(sigma^2*vetj.^2+r);

gama=dt/4*(sigma^2*vetj.^2+r*vetj);

H=diag(alpha(2:M-1),-1)+ diag(beta(1:M-1))+diag(gama(1:M-2),1); M1=eye(M-1)-H;M2=eye(M-1)+H; f=zeros(M+1,N+1); f(1,:)=k; f(M+1,:)=0;

f(2:M,N+1)=max(k-vets*ds,0);

g=zeros(1,M-1)';g(1)=2*k*alpha(1); for i=N:-1:1

f(2:M,i)=M1^(-1)*[M2*f(2:M,i+1)+g]; f(2:M,i)=max(f(2:M,i),k-vetj*ds);

end

>> cncf1

运行结果如下。

股价为50元对应的期权价格为4.16。

思 考 题

已知股票价格为50元,执行价格为52元,到期日为6个月,股票年波动率的标准差为30%,无风险利率为3%,试用有限差分方法计算美式看跌期权的价格,并和Black-Scholes期权定价公式的计算结果比较。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务