function AmericanTrinomialPrice(T, stock, K, r, sigma, q, n,callput)
{
N=n;
rate = r;
div =q;
dt = T/N;
x = sigma*Math.sqrt(3.0*dt);
v = rate - div - sigma*sigma*0.5;
dis = Math.exp(-rate*dt);
edx = Math.exp(x);
pu = 0.5*(dt*(sigma*sigma + v*v*dt)/x/x + (v*dt/x)); //up probability
pm = 1.0 - dt*(sigma*sigma + v*v*dt)/x/x; //middle probability
pd = 0.5*(dt*(sigma*sigma + v*v*dt)/x/x - (v*dt/x)); //down probability
C=new Array;
S=new Array;
for(i=N;i>=0;i--)
{
S[i]=new Array;
}
for(i=N;i>=0;i--)
{
S[i][-i] = stock*Math.exp(-i*x); for(j=-i+1;j<=i;j++)
{
S[i][j]=S[i][j-1]*edx;
}
}
for(i=N-1;i>=0;i--)
C[i]=new Array;
C[N]=new Array;
for(j=-N;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=-i;j<=i;j++)
{
C[i][j] = max(dis*(pu*C[i+1][j+1] + pm*C[i+1][j] + pd*C[i+1][j-1]),K-S[i][j]);
}
}
return C;
}
Tuesday, June 11, 2013
American trinomial pricing
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment