Tuesday, June 11, 2013

the Garman–Kohlhagen model


function D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t)
{
 sigma2=sigma*sigma;
 TT=T-t;
 F=S*Math.exp((rd-q)*TT);
 r1=ln(S/K)+TT*(rd-rf+sigma2*0.5);
 r2=sigma*Math.sqrt(TT);
 return r1/r2;
 //value=1/(sigma*Math.sqrt(T-t))*
}
function D2GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t)
{
 return D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t)-sigma*Math.sqrt(T-t);
}
function CallGarmanKohlhagen(S,K,rd,rf,sigma,q,T,t)
{
 
 return NCDF(D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1)*S*Math.exp(-rf*(T-t))-(NCDF(D2GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1)*K*Math.exp(rd*(T-t)*-1.0));
}

function PutGarmanKohlhagen(S,K,rd,rf,sigma,q,T,t)
{
 
 return (NCDF(-D2GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1)*K*Math.exp(rd*(T-t)*-1.0))-NCDF(-D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1)*S*Math.exp(-rf*(T-t));
}

function CallGarmanKohlhagenDelta(S,K,rd,rf,sigma,q,T,t)
{
 return NCDF(D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1);
}
function PutGarmanKohlhagenDelta(S,K,rd,rf,sigma,q,T,t)
{
 return NCDF(D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1)-1;
}
function CallGarmanKohlhagenGamma(S,K,rd,rf,sigma,q,T,t)
{
 return NormalDens(D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t))/(S*sigma*Math.sqrt(T-t));
}
function PutGarmanKohlhagenGamma(S,K,rd,rf,sigma,q,T,t)
{
 return CallGarmanKohlhagenGamma(S,K,rd,rf,sigma,q,T,t);
}
function CallGarmanKohlhagenVega(S,K,rd,rf,sigma,q,T,t)
{
 return NormalDens(D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t))*(S*Math.sqrt(T-t));
}
function PutGarmanKohlhagenVega(S,K,rd,rf,sigma,q,T,t)
{
 return CallGarmanKohlhagenVega(S,K,rd,rf,sigma,q,T,t);
}
function CallGarmanKohlhagenTheta(S,K,rd,rf,sigma,q,T,t)
{
 return (S*NormalDens(D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t))*sigma/(2*Math.sqrt(T-t)))-(rd*K*Math.exp(-rd*(T-t))*NCDF(D2GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1));
}
function PutGarmanKohlhagenTheta(S,K,rd,rf,sigma,q,T,t)
{
 return (S*NormalDens(D1GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t))*sigma/(2*Math.sqrt(T-t)))+(rd*K*Math.exp(-rd*(T-t))*NCDF(-D2GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1));
}
function CallGarmanKohlhagenRho(S,K,rd,rf,sigma,q,T,t)
{
 return K*(T-t)*Math.exp(-rd*(T-t))*NCDF(D2GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1);
}
function PutGarmanKohlhagenRho(S,K,rd,rf,sigma,q,T,t)
{
 return -K*(T-t)*Math.exp(-rd*(T-t))*NCDF(-D2GarmanKohlhagen(S,K,rd,rf,sigma,q,T,t),0,1);
}

No comments: