连续时间下的套期保值数值计算(matlab)

Discussion in 'Philosophy and Strategy' started by ray.chan, May 2, 2007.

  1. 网上文章的转贴。



    "
    连续时间下的套期保值数值计算

    [说明] 很多教材关于期权定价公式以及套利的理论说明,但经常没有数值计算的介绍。特别是具体的编程应用的例子就更少。本人尝试用Matlab进行这方面的数值计算。虽然没有采用市场交易的真实数据,但基本算法和程序得到验证。

    1、理论

    如果未定权益X(期权)等于股票S[t]在时刻T的某个函数,即 X=F(S[T]),则该权益在任意时刻t的价值就等于 V[t]= V(S[t],t),其中V(s,t)满足以下方程:

    V(s,t)=exp(-r*(T-t)) E(F(S[T]|S[t]=s) ------------------------------------------ 1

    交易策略,即购买股票的数量 = dv/ds 。 说明在任何阶段复制组合中的股票数量等于期权价值对股票价格的偏导数。

    由此,我们可以推导出严格的black-scholes套期保值。

    欧式看涨期权是一个终值权益,既与到期时刻T有关。所以也能够找到它自身套期保值的形势,复制策略需要购买的股票数量:

    Black-scholes 公式:

    V(s,T)=sΦ((log(s/k)+(r+1/2σ^2)T)/σsqrt(T))-kexp(-rT)Φ((log(s/k)+(r-1/2σ^2)T)/σsqrt(T))

    对s求偏导数,得

    ф(t)=Φ((log(s/k)+(r+1/2σ^2)(T-t))/σsqrt(T-t)) ------------------------------ 2

    2、模拟计算

    有了上述的理论公式,我们就可以模拟一个连续时间下的套期保值是如何进行的:

    第一步:生成两个股票过程,其中他们都是自10美元开始,波动率20%和漂移15%都一样

    股票1;股票2。

    第二步:对期权定价。 假设敲定价格为12。利率为5%。

    则分别计算期权的价值和套期保值所需要持有的股票的数量:

    股票1 期权价值

    股票1 套期保持持有股票数量

    股票2 期权价值

    股票2 套期保持持有股票数量

    结论:

    1) 盯住市场期权交易数据,然后比较计算的真实价格,发现定价错误,发现套利机会。

    2) 真实价格严重依赖模型中的参数估计,特别是波动率和漂移率,以及分布密度函数。这些参数对于不同的交易者都会各自根据自身的判断和理解而不同,因此产生定价差异。但市场总就要达到局部均衡状态,因此鞅测度下的随机过程是最有可能成为最公允的价格。

    3) 实际的市场还要考虑更多参数,已修正模型的精确度。

    需要的源程序:matlab

    %布朗运动

    function [Tt,Wn]= Wiener_Process(mu,sigma,Lt)

    dt=0.001;inc=0.001;

    k=sigma*sqrt(dt);

    p=0.5*(1+mu*sqrt(dt)/sigma);q=1-p;sumx=0;X=[sumx];

    for bt=0.01:inc:Lt

    nx=inc/dt;

    ns=binornd(nx,p);nf=nx-ns;net=ns-nf;

    sumx=sumx+(net*k);X=[X sumx];

    end

    t=0.01:inc:Lt;t=[0 t];n=length(t);

    [W]=zeros(n,2);

    W:),1)=t';

    W:),2)=X';

    plot(W:),1),W:),2));

    Tt=W:),1);

    Wn=W:),2);

    function [Tt,St]=Stock_Process(s0,mu,sigma,Lt)

    %生成一个股票过程

    [t,w]=Wiener_Process(0,1,Lt) ;% creat a wiener process

    X=[length(t)];

    X=s0*exp(sigma*w+mu*t); % the stock process

    plot(t,X);

    Tt=t;

    St=X;

    %计算连续期权价值

    function [t,o]=Sim_Stock(s)

    ST=10;C=12;Tt=1;sigma=0.2;r=0.05;

    tt=s:),1);ss=s:),2);

    Ln=length(tt);t=tt;o=[Ln];

    T=1-tt;

    %计算每个时刻的期权价值

    t1=log(ss./C);t2=sigma.*sqrt(T);t3=(r+sigma^2/2).*T;

    t4=(r-sigma^2/2).*T;

    z1=(t1+t3)./t2;z2=(t1+t4)./t2;

    d1=normcdf(z1);d2=normcdf(z2);

    o=ss.*d1-C*exp(-r.*T).*d2;

    %画出图形

    plot(t,o);

    %计算套期保值持有的股票数量

    function [t,sn]=Sim_Sn(s)

    ST=10;C=12;Tt=1;sigma=0.2;r=0.05;

    tt=s:),1);ss=s:),2);

    Ln=length(tt);t=tt;o=[Ln];

    T=1-tt;

    %计算每个时刻的套期保持所需要的股票数量

    t1=log(ss./C);t2=sigma.*sqrt(T);t3=(r+sigma^2/2).*T;

    z1=(t1+t3)./t2;

    sn=normcdf(z1);

    %画出图形

    plot(t,sn);
    "