学习matlab小结(1)-monte carlo & binomial method-2015.08.18

来源:互联网 发布:淘宝蓝海产品 编辑:程序博客网 时间:2024/04/28 11:14

最近学习了一点简单的matlab,之前打算边做边发,但是在腐国csdn很难打开,于是回来集中发一下几个代码。

环境:Matlab R2014b, 64bit.

1. 用matlab实现使用蒙地卡罗方法对期权估值
%Monte Carlo Simulation%Option value -- Average payoff -- Payoff --  Expiry priceS0=100;StrikePrice=100;T=1;sig=0.3;r=0.05;n=1000000;payoff=0;sumOfPayoff=0;optionValue=0;profit=0;for i=1:n    S_expiry = S0*exp((r-0.5*sig^2)*T+sig*T^0.5*randn);    payoff =  max ((S_expiry - StrikePrice),0) ; %payoff different accr.    sumOfPayoff = sumOfPayoff + payoff;endoptionValue=exp(-r*T)*(1/n)*sumOfPayoff;optionValue% profit= max ((x- StrikePrice),0)-optionValue ;% plot(profit);
要点有三:

1) 核心在于用lognormal random walk的公式预测asset在expiry的价格,S_expiry = S0*exp((r-0.5*sig^2)*T+sig*T^0.5*randn); 

2) 再用这个价格对应于各种期权各自的payoff计算公式算出价格对应的payoff,循环多次求其平均。

     这是payoff的无偏估计。

3)期权价格等于期权价值,期权价值应相当于到期日的payoff按日期discount。


2. binomial method对期权估值

%BinomialMethod%Case p=0.5%initializeE=40;T=3;M=4096;m=M+1;dt=T/M;S=zeros(m);S(1,1)=50; V=zeros(m);%setting parametersp=0.5;r=0.05;sig=0.5;%step 1d = exp(r*dt)*(1-sqrt(exp(sig*sig*dt)-1));u = exp(r*dt)*(1+sqrt(exp(sig*sig*dt)-1));%step 2for i=2:m    for j=1:i        S(j,i)=(d^(i-j))*(u^(j-1))*S(1,1);    endend% S%step 3    for j=1:m        V(j,m)= max(E-S(j,m),0);    end% V    %step 4for i=(m-1):(-1):1    for j=i:(-1):1        V(j,i)=exp((-r)*dt)*(p*V(j+1,i+1)+(1-p)*V(j,i+1));    endendV(1,1)

这是一个欧式普通,binomial模型仅仅是提供一个大概的估值,不精准,就像是一棵深度为时间T的二叉树,每个结点向左和向右的概率确定且每个结点此概率相等,求到达各叶子结点的概率。

再上一个美式:

%BinomialMethod%with dividend and use case u=1/d%initializeE=9.5;T=3;M=3;m=M+1;dt=T/M;S=zeros(m);S(1,1)=10; V=zeros(m);%setting parametersr=0.05;sig=0.3;%for dividendD0=0;mu=r-D0;%step 1A=0.5*(exp((-mu)*dt)+exp((mu+sig*sig)*dt));d=A-(A*A-1)^0.5;u=A+(A*A-1)^0.5;p=(exp(mu*dt)-d)/(u-d);%step 2for i=2:m    for j=1:i        S(j,i)=(d^(i-j))*(u^(j-1))*S(1,1);    endend%step 3    for j=1:m        V(j,m)= max(E-S(j,m),0);    end    %step 4for i=M:(-1):1    for j=i:(-1):1        V(j,i)=max(E-S(j,i),exp((-r)*dt)*(p*V(j+1,i+1)+(1-p)*V(j,i+1)));    endendV(1,1)

可以见到其实它分为两种case,都是为了帮助确定参数d,u,p的值,因为两条方程求三个参数就必须增加多一个条件。

case 1是p=0.5, case 2是u=1/d, 在step 1中套用各自公式算出d, u, p.

step 2算出到期日asset的价格。这是一棵满二叉树,所以有2^T个叶子结点,每个叶子结点对应一个asset价格(上涨了k次,下跌了T-k次),用二项式简单求出。

step 3求叶子结点对应的payoff,然后step 4按日期和上升下降概率往前discount直至t=0日为这个期权的现值,即价格。

0 0
原创粉丝点击