0
$\begingroup$

I have written a script for showing Monte Carlo Price for a increasing N. But comparing with BS results , This indicates a huge difference. Where is the error?

Function :

 function [cpay,ppay] = callput(S0,K,T,r,sigma,N)
%CALLPUT Summary of this function goes here
%   Detailed explanation goes here
phi=normrnd(0,sigma,[1,N]);
dT=T;
for i=1:N
    S(i)=S0*exp((r-.5*sigma.^2)*dT + sigma*sqrt(dT)*phi(i));
    C(i)= exp(-r*T)*max(S(i)-K, 0);
    P(i)=exp(-r*T)*max(K-S(i), 0);
end 
price1=sum(C)/N;
price2=sum(P)/N;
cpay=price1;
ppay=price2;
end

Main Script:

clc
clear all
% f=fopen('CPData.txt','w');
[BSCall, BSPut] = blsprice(5,5,.04,.5,.2)
fprintf('i\tMC-Call\tMC-Put\n');
for i=1:50

    [cpayoff,ppayoff]=callput(5,5,.5,.04,.2,i*1000);
    cp(i)=cpayoff;
    pp(i)=ppayoff;
    fprintf('%d\t%3.4f\t%3.4f\n',i*1000,cp(i),pp(i));

end 

Results :

BSCall =

    0.3314


BSPut =

    0.2323

i       MC-Call MC-Put
1000    0.0894  0.0333
2000    0.0838  0.0344
3000    0.0842  0.0331
4000    0.0847  0.0335
5000    0.0852  0.0349
6000    0.0842  0.0330
7000    0.0865  0.0326
8000    0.0844  0.0348
9000    0.0862  0.0329
10000   0.0863  0.0340
11000   0.0859  0.0323
12000   0.0849  0.0346
13000   0.0852  0.0346
14000   0.0861  0.0342
15000   0.0863  0.0325
16000   0.0854  0.0338
17000   0.0839  0.0342
18000   0.0844  0.0340
19000   0.0861  0.0343
20000   0.0845  0.0338
21000   0.0836  0.0341
22000   0.0842  0.0340
23000   0.0853  0.0338
24000   0.0842  0.0341
25000   0.0844  0.0344
26000   0.0863  0.0329
27000   0.0846  0.0332
28000   0.0845  0.0335
29000   0.0852  0.0339
30000   0.0854  0.0334
31000   0.0849  0.0339
32000   0.0851  0.0337
33000   0.0846  0.0340
34000   0.0849  0.0334
35000   0.0850  0.0335
36000   0.0846  0.0339
37000   0.0855  0.0337
38000   0.0851  0.0335
39000   0.0849  0.0335
40000   0.0855  0.0330
41000   0.0853  0.0330
42000   0.0847  0.0337
43000   0.0849  0.0330
44000   0.0850  0.0343
45000   0.0850  0.0338
46000   0.0856  0.0337
47000   0.0846  0.0335
48000   0.0854  0.0337
49000   0.0851  0.0334
50000   0.0853  0.0336
$\endgroup$
  • $\begingroup$ Do you price strike 0 correctly ? This is the first check. Also what does normrnd function do exactly ? Seems weird you provide sigma inside and normalize again by sigma in your exponential. $\endgroup$ – Ezy Jan 12 at 12:49
  • $\begingroup$ Yes. I forget to note that this program is for European Option pricing only.. $\endgroup$ – Zodiacal Jan 12 at 12:53
  • $\begingroup$ this is clear from code but you did not show result for strike 0. $\endgroup$ – Ezy Jan 12 at 12:54
  • $\begingroup$ How can I solve this ? Here : S0= 5; K=5,r=.04,sigma=.2,T=.5 ... How can I get the expected result ? $\endgroup$ – Zodiacal Jan 12 at 12:57
  • $\begingroup$ double check your formulas $\endgroup$ – Ezy Jan 12 at 12:57
0
$\begingroup$

Given the formula for S, the variable phi should be a normal standard variable, not with stdev sigma.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.