%
% Desenha gráficos da Fórmula de Black-Scholes e da
% sua derivada em ordem a S (delta), para o caso de 
% calls e puts (Aulas 7 e 8 de Matemática Financeira).
%
% Adaptado por L. Nunes Vicente, Fevereiro 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.
%
clf;
clear;
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
E     = 4;    % E (preço de exercício)
r     = 0.05; % r (taxa de juro)
sigma = 0.2;  % sigma (volatilidade)
t0    = 0;    % t0 (instante inicial)
T     = 4;    % T (instante final ou maturidade)
S0    = 2;    % S0 (valor do activo em t0)
ST    = 6;    % ST (valor do activo em T)
L     = 50;   % L (número de subintervalos)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Svals  = linspace(S0,ST,L);
tvals  = linspace(t0,T,L);
C      = zeros(L,L);
Cdelta = zeros(L,L);
Pdelta = zeros(L,L);
%
for i = 1:L
    S = Svals(i);
    for j = 1:L
        t = tvals(j);
        [Call,Calldelta,Callvega,Put,Putdelta,Putvega] = BS(S,E,r,sigma,T-t);
        C(i,j)      = Call;
        Cdelta(i,j) = Calldelta;
        Pdelta(i,j) = Putdelta;
    end
end
%
aux = 1;
%
if aux == 0
   [Smat,tmat] = meshgrid(Svals,tvals);
   mesh(Smat,tmat,C');
   xlabel('S'), ylabel('t'), zlabel('C(t,S)');
   %delta = C;
   %plot(Svals,delta(:,1));
   %xlabel('S'); ylabel('C(t,S)');
   %plot(Svals,delta(:,10));
   %plot(Svals,delta(:,20));
   %plot(Svals,delta(:,30));
   %plot(Svals,delta(:,40));
   %plot(Svals,delta(:,45));
   %plot(Svals,delta(:,50));
else
   delta = Pdelta; % Escolher call vs put.
   plot(Svals,delta(:,25));
   xlabel('S'); ylabel('dP/ds(t,S)'); % Escolher call vs put.
   hold on; 
   plot(Svals,delta(:,30));
   plot(Svals,delta(:,35));
   plot(Svals,delta(:,40));
   plot(Svals,delta(:,45));
   plot(Svals,delta(:,47));
   plot(Svals,delta(:,49));
end
%
% Fim de BS_plots.
