Tuesday, June 11, 2013

Monte carlo option pricing


function pollarMethod()
{
 do{
  U1=Math.random();
  U2=Math.random();
  V1=2*U1-1.0;
  V2=2*U2-1.0;
  S=V1*V1+V2*V2;
 }
 while(S>=1);
 
 X=V1*Math.sqrt((-2*ln(S))/S);
 return X;
}

function callMontecarloEuropean(time,S,K,r,sigma,q,nbSim)
{
 
 var res=new Array;
 R=(r-q-0.5*sigma*sigma)*time;
 SD=sigma*Math.sqrt(time);
 sumPayof=0;
 for (i=0;i<nbSim;i++)
 {
  ST=S*Math.exp(R+SD*pollarMethod());
  res[i]=ST;
  if ((ST-K)>=0)
   sumPayof=sumPayof+(ST-K);
 }
 //Discounting
 res[nbSim]=Math.exp(-r*time)*(sumPayof/nbSim);
 return res;

}

function putMontecarloEuropean(time,S,K,r,sigma,q,nbSim)
{
 var res=new Array;
 R=(r-q-0.5*sigma*sigma)*time;
 SD=sigma*Math.sqrt(time);
 sumPayof=0;
 for (i=0;i<nbSim;i++)
 {
  ST=S*Math.exp(R+SD*pollarMethod());
  res[i]=ST;
  if ((K-ST)>=0)
   sumPayof=sumPayof+(K-ST);
 }
 //Discounting
 res[nbSim]=Math.exp(-r*time)*(sumPayof/nbSim);
 return res;

}

No comments: