Tuesday, June 11, 2013

Asian Option Arithmetic Levy Form (not stable)


function CallAsianOptionArithmeticLevyForm(S,X,r,sigma,q,T,t)
{
 sigmaC=sigma*sigma;
 M=(2*S*S/(r-q+sigmaC)*Math.exp((2*(r-q)+sigmaC)*(T-t)-1)/(2*(r-q)+sigmaC))-(Math.exp((r-q)*(T-t))-1)/(r-q);
 L=M/T/T;
 Sz=S/(r-q)/T*(Math.exp(-q*(T-t))-Math.exp(-r*(T-t)));
 K=ln(L)-2*(r*(T-t)+ln(Sz));
 Xz=X-S*((T-T-t)/T);
 d1=1/Math.sqrt(K)*(ln(L)*0.5-ln(Xz));
 d2=d1-Math.sqrt(K);
 
 return Sz*NCDF2(d1)-Xz*Math.exp(-r*(T-t))*NCDF2(d2);
}

function PutAsianOptionArithmeticLevyForm(S,X,r,sigma,q,T,t)
{
 sigmaC=sigma*sigma;
 M=(2*S*S/(r-q+sigmaC)*Math.exp((2*(r-q)+sigmaC)*(T-t)-1)/(2*(r-q)+sigmaC))-(Math.exp((r-q)*(T-t))-1)/(r-q);
 L=M/T/T;
 
 Sz=S/(r-q)/T*(Math.exp(-q*(T-t))-Math.exp(-r*(T-t)));

 K=ln(L)-2*(r*(T-t)+ln(Sz));
 
 Xz=X-S*((T-T-t)/T);
 
 d1=1/Math.sqrt(K)*(ln(L)/2-ln(Xz));
 d2=d1-Math.sqrt(K);
 
 return CallAsianOptionArithmeticLevyForm(S,X,r,sigma,q,T,t)-Sz+Xz*Math.exp(-r*(T-t));
}

No comments: