%
% Calcula o preço de opções call europeias através do método binomial
% (Aula 13 de Matemática Financeira).
%
% L. Nunes Vicente, Março de 2006, de
% An Introduction to Financial Option Valuation: Mathematics, 
% Stochastics and Computation, D. J. Higham,
% Cambridge University Press, 2004,
% http://www.maths.strath.ac.uk/~aas96106/option_book.html.
%
clear; 
format long; 
format compact;
%
S0    = 20; 
t0    = 0;
E     = 22; 
T     = 0.75; 
r     = 0.05; 
sigma = 0.2; 
%
[C_mod] = BS(S0,E,r,sigma,T-t0);
%
disp(100*C_mod)
%
p = 0.5;
%
nvalues = [ 100 1000 10000 ];
%
for k=1:3
%
    n = nvalues(k);
%
    delta_t = (T-t0)/n; 
%
    c = exp(r*delta_t)*( 1 + sqrt( exp(sigma^2*delta_t ) - 1 ) );
    b = exp(r*delta_t)*( 1 - sqrt( exp(sigma^2*delta_t ) - 1 ) );
%
    potencias_c = c.^([0:n]');
    potencias_b = b.^([n:-1:0]');
%
%   Calcular os valores da opção na maturidade.
    C_bin = max(S0*potencias_b.*potencias_c-E,0);
%
%   Percorrer a árvore da direita para a esquerda para calcular
%   o valor da opção no instante inicial.
    for j=n:-1:1
        C_bin = exp(-r*delta_t)*(p*C_bin(2:j+1) + (1-p)*C_bin(1:j));
    end
%
    disp(C_bin)
    disp(100*(C_mod-C_bin))
%
end
%
% Fim - binomial_eur.
