• C++ Programming for Financial Engineering
    Highly recommended by thousands of MFE students. Covers essential C++ topics with applications to financial engineering. Learn more Join!
    Python for Finance with Intro to Data Science
    Gain practical understanding of Python to read, understand, and write professional Python code for your first day on the job. Learn more Join!
    An Intuition-Based Options Primer for FE
    Ideal for entry level positions interviews and graduate studies, specializing in options trading arbitrage and options valuation models. Learn more Join!

Monte carlo option pricing versus binomial tree

Joined
7/3/15
Messages
3
Points
11
I need to work on option pricing models,
I code these two models, but my monte carlo option price is different from binomial tree.
In theory monte carlo result should converge to binomial value.
Is there any body how can explain it?
Or if they should be the same, could you give me the monte carlo matlab code? (maybe my coding have problem)
 
In theory monte carlo result should converge to binomial value.

Why?

Just giving you Matlab code will not help you learn why.
 
Thanks for your comment. The main problem of my code is by increasing the number of steps in call option, the value of the option converge to zero !!!!
here is my code

dt = T/N;
t = 0:dt:T;
t = repmat(t',1,M);
R = exp((r-sigma^2/2)*dt+sigma*sqrt(dt)*randn(N,M));
S = cumprod ([S0*ones(1,M); R]);
ExTime = (M+1)*ones(N,1);
% Now for the algorithm
CF1 = zeros(size(S)); % Cash flow matrix
CF2 = zeros(size(S)); % Cash flow matrix
CF1(end,: ) = max(Kc-S(end,: )*fc,0); % Option only pays off if it is in the money
for ii = size(S)-1:-1:2
if type
Idxc = find(S(ii,: )*fc < Kc); % Find paths that are in the money at time ii
else
Idxc = find(S(ii,: )*fc > Kc); % Find paths that are in the money at time ii
end
Xc = S(ii,Idxc)'*fc; X1c = Xc/S0;
Yc = CF1(ii+1,Idxc)'*exp(-r*dt); % Discounted cashflow
Rc = [ ones(size(X1c)) (1-X1c) 1/2*(2-4*X1c-X1c.^2)];
ac = Rc\Yc; % Linear regression step
Cc = Rc*ac; % Cash flows as predicted by the model
if type
Jdxc = max(Kc+Xc*fc,0) > Cc; % Immediate exercise better than predicted cashflow
else
Jdxc = max(Xc*fc+Kc,0) > Cc; % Immediate exercise better than predicted cashflow
end
nIdxc = setdiff((1:M),Idxc(Jdxc));
CF1(ii,Idxc(Jdxc)) = max(Kc-Xc(Jdxc),0);
ExTimec(Idxc(Jdxc)) = ii;
CF1(ii,nIdxc) = exp(-r*dt)*CF1(ii+1,nIdxc);
end
Price1 = mean(CF1(2,: ))*exp(-r*dt);
 
I don't know what problem you are trying to solve

. If you had provided the algo then you can check the code against it.

Anyways, at first glance this looks a bit unusual

Jdxc = max(Kc+Xc*fc,0) > Cc;

and Xc is defined twice wrt fc?(?) just guessing.

Did you do code check, line by line?
 
Last edited:
Back
Top