Tuesday, June 11, 2013

American binomial pricing


function AmericanBinomialPrice(T, stock, K, r, sigma, q, n,callput)
{
  N=n;  

 rate = r;
 
 dt = T/N;  
 u = Math.exp(sigma * Math.sqrt(dt));
 d = 1/u;
 dis = Math.exp(-rate*dt);  
 p = (Math.exp((rate-q)*dt)-d)/(u-d);  

 S=new Array;

 for(i=N;i>=0;i--)
  S[i]=new Array;
 for(i=N;i>=0;i--)
  {

   S[i][0] = stock*Math.pow(d,i); 

   for(j=1;j<=i;j++)
    {
     S[i][j]=S[i][j-1]*u/d;  
    }
  }



 C=new Array;
 for(j=0;j<=N;j++)
  C[j]=new Array;
 for(j=0;j<=N;j++)
 {
  if (callput=="c")
  {
   C[N][j] = max(S[N][j]-K,0.0);
  }else
  {
   C[N][j] = max(K-S[N][j],0.0);
  }
 }

 for(i=N-1;i>=0;i--)
  {
   for( j=0;j<=i;j++)
    {



     C[i][j] = max(dis*(p*C[i+1][j+1] + (1.0-p)*C[i+1][j]),K-S[i][j]);


    }
  }


 return C;
}

No comments: