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;
}
Tuesday, June 11, 2013
Monte carlo option pricing
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment