% ___ Design :          Binominal - Verfahren ____ 
% ___  europ.  Put - Option __________
% _________________________

clf; clear; close all;

% Example John C. Hull, Risk Mgmt., page 59:
% So  = 49; X = 50;   r  = 0.05;   sigma = 0.2;   % > Vola p.a.
% T = 20/52;  N = 1;                                       % > T in weeks
% ::::: europ. Call - Option Value must be : 2.4  for N =  nodes   :::::::
% ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
% Example Amram/Kulatilaka:
So = 45; X = 50; T = 6; r = 0.05; sigma = 0.13; N = 6;   % > T & Vola in month
% ::::: europ. Put - Option Value must be : 8.2  for N = 6 nodes   :::::::
% ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

dt = T/N ;
u = exp(sigma*sqrt(dt)) 
d = 1/u ;
p = (exp(r*dt)-d) / (u-d) ;

% ::::::::::::: Basis-Binbaum  von Uwe Koernig :::::::::::::::::::::
U = u.^(0 :N)';
 D = d .^(N : -1 :0)';
 [U D];
  SUD = So * [U flipud(D)]
  Up = flipud(diag(SUD(:,1)))
  Do = (diag(SUD(:,2)))
% ::::::::::::::::::::::::::::::::::::::
% ___ 1. Step:
for j = 1 : N +1;
      S(j, N+1) = So * u^(j-1) *d^(N-j+1);
end
% ::::::::::::::::::::::::::::::::::::::.
% ___ 1. Step - vektorisiert:
Svec = So * (u.^(0 :N)' .*d .^(N : -1 :0)')
% ::::::::::::::::::::::::::::::::::::::::::::::::::::.
% ___ 2. Step:

for j = 1 : N +1
      V(j, N+1) = max(X - S(j, N+1), 0);
end

% ___ 3. Step:

e = exp(-r * dt);
for i = N : -1 : 1
     for j = 1 : i
        V(j, i) = e^(p*V(j+1, i+1)) + (1-p) * V (j, i +1);
     end
end
fprintf ('eur. Put (%6.3f, %6.3f) = %f\n' , So, X ,V( 1, 1));