Tuesday, June 11, 2013

Barrier Down/UP Out/IN Call PUt


function DownAndOutCall(S,K,r,sigma,q,barrier,T,t)
{
 
 alpha=0.5*(1-(r-q)*0.5/Math.sqrt(sigma*sigma));
 
 
 if (barrier<=K)
 {
  value=CallBlackScholes(S,K,r,sigma,q,T,t)-Math.pow(S/barrier,2*alpha)*CallBlackScholes(barrier*barrier/S,K,r,sigma,q,T,t);
 }
 else
 {
  value=CallBlackScholes(S,barrier,r,sigma,q,T,t)+(barrier-K)*CallBlackScholesDigit(S,barrier,r,sigma,q,T,t)-Math.pow(S/barrier,2*alpha)*(CallBlackScholes(barrier*barrier/S,barrier,r,sigma,q,T,t)+(barrier-K)*CallBlackScholesDigit(barrier*barrier/S,barrier,r,sigma,q,T,t));
 }
 return value;
}

function DownAndOutPut(S,K,r,sigma,q,barrier,T,t)
{
 alpha=0.5*(1-(r-q)*0.5/Math.sqrt(sigma*sigma));
 
 value=PutBlackScholes(S,K,r,sigma,q,T,t)-PutBlackScholes(S,barrier,r,sigma,q,T,t)-(K-barrier)*PutBlackScholesDigit(S,barrier,r,sigma,q,T,t)-Math.pow(S/barrier,2*alpha)*(PutBlackScholes(barrier*barrier/S,K,r,sigma,q,T,t)-PutBlackScholes(barrier*barrier/S,barrier,r,sigma,q,T,t)+(K-barrier)*PutBlackScholesDigit(barrier*barrier/S,barrier,r,sigma,q,T,t));
 return value;
}

function DownAndInCall(S,K,r,sigma,q,barrier,T,t)
{
 return CallBlackScholes(S,K,r,sigma,q,T,t)-DownAndOutCall(S,K,r,sigma,q,barrier,T,t);
}

function DownAndInPut(S,K,r,sigma,q,barrier,T,t)
{
 
 return PutBlackScholes(S,K,r,sigma,q,T,t)-DownAndOutPut(S,K,r,sigma,q,barrier,T,t);
}

function UpAndOutCall(S,K,r,sigma,q,barrier,T,t)
{
 
 alpha=0.5*(1-(r-q)*0.5/Math.sqrt(sigma*sigma));
 
 value=CallBlackScholes(S,K,r,sigma,q,T,t)-CallBlackScholes(S,barrier,r,sigma,q,T,t)-(barrier-K)*CallBlackScholesDigit(S,barrier,r,sigma,q,T,t)-Math.pow(S/barrier,2*alpha)*(CallBlackScholes(barrier*barrier/S,K,r,sigma,q,T,t)-CallBlackScholes(barrier*barrier/S,barrier,r,sigma,q,T,t)+(barrier-K)*CallBlackScholesDigit(barrier*barrier/S,barrier,r,sigma,q,T,t));
 
 return value;
}

function UpAndOutPut(S,K,r,sigma,q,barrier,T,t)
{
 
 alpha=0.5*(1-(r-q)*0.5/Math.sqrt(sigma*sigma));
 if (barrier>K)
  value=PutBlackScholes(S,K,r,sigma,q,T,t)-Math.pow(S/barrier,2*alpha)*PutBlackScholes(barrier*barrier/S,K,r,sigma,q,T,t);
 else
  value=PutBlackScholes(S,K,r,sigma,q,T,t)+(K-barrier)*PutBlackScholesDigit(S,barrier,r,sigma,q,T,t)-Math.pow(S/barrier,2*alpha)*(PutBlackScholes(barrier*barrier/S,barrier,r,sigma,q,T,t)+(K-barrier)*PutBlackScholesDigit(barrier*barrier/S,barrier,r,sigma,q,T,t));
 
 return value;
}

function UpAndInCall(S,K,r,sigma,q,barrier,T,t)
{
 return CallBlackScholes(S,K,r,sigma,q,T,t)-UpAndOutCall(S,K,r,sigma,q,barrier,T,t);
}

function UpAndInPut(S,K,r,sigma,q,barrier,T,t)
{
 
 return PutBlackScholes(S,K,r,sigma,q,T,t)-UpAndOutPut(S,K,r,sigma,q,barrier,T,t);
}

No comments: