Tuesday, June 11, 2013

Spread Option


function CallSpreadOption(S1,S2,X,r,sigma1,sigma2,rho,T)
{
 sigmaC1=sigma1*sigma1;
 sigmaC2=sigma2*sigma2;
 Sa=S1/(S2+X);
 nSig=Math.sqrt(sigmaC1+Math.pow(sigma2*S2/(S2+X),2)-2*rho*sigma1*sigma2*S2/(S2+X));
 d1=(ln(Sa)+0.5*nSig*nSig*T)/Math.sqrt(T)/nSig;
 d2=d1-Math.sqrt(T)*nSig;
 
 
 return (S2+X)*Math.exp(-r*T)*((Sa*NCDF2(d1))-NCDF2(d2));
}

function PutSpreadOption(S1,S2,X,r,sigma1,sigma2,rho,T)
{
 sigmaC1=sigma1*sigma1;
 sigmaC2=sigma2*sigma2;
 Sa=S1/(S2+X);
 nSig=Math.sqrt(sigmaC1+Math.pow(sigma2*S2/(S2+X),2)-2*rho*sigma1*sigma2*S2/(S2+X));
 d1=(ln(Sa)+0.5*nSig*nSig*T)/Math.sqrt(T)/nSig;
 d2=d1-Math.sqrt(T)*nSig;
 
 
 return (S2+X)*Math.exp(-r*T)*((NCDF2(-d2)-Sa*NCDF2(-d1)));
}

No comments: