%
% Desenha o gráfico da volatilidade implicada a partir
% de dados de mercado (Aula 9 de Matemática Financeira).
%
% Adaptado por 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.
%
clf;
clear;
%
% S&P www.cboe.com
% Mar 02, 2006 @ 14:00 ET (Data 15 Minutes Delayed)  
% Maturity: 06 May
%
A = [ 800.0 487.80 489.80 
850.0 438.30 440.30  
900.0 388.60 390.60 
950.0 339.20 341.20 
1000  289.90 291.90 
1050 240.70 242.70  
1100 191.80 193.80
1150 143.60 145.60 
1175  120.00 122.00  
1200 97.00 99.00 
1225 75.00 77.00  
1250 54.60 56.60 
1275 36.50 38.50  
1300 21.70 23.70  
1325  11.10 12.70 
1350 4.90 5.70 
1375  1.75 2.25 
1400  0.70 0.95  
1450  0 0.50  ];
%
E     = A(:,1);
[m,n] = size(A);
C     = ( A(:,2) + A(:,3) ) / 2;
%
% r (taxa de juro)
r = 0.02;
% T (instante final ou maturidade)
T = (29+30+15)/356;
% tau = T - t0 (distância à maturidade)
tau = T;
% S0 (valor do activo em t0)
S0  = 1285.70;
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
for i=1:m
    sigma     = sqrt(2*abs( (log( S0/E(i) ) + r*T)/T ) );
    tol       = 1e-8;
    sigmadiff = 1;
    k         = 1;
    kmax      = 100;
%
%   Aplicação do Método de Newton.
    while (sigmadiff >= tol & k < kmax)
        [C_BS, Cdelta, Cvega, P, Pdelta, Pvega] = BS(S0,E(i),r,sigma,tau);
        increment = (C_BS-C(i))/Cvega;
        sigma = sigma - increment;
        k = k+1;
        sigmadiff = abs(increment);
    end
    sigma_imp(i) = sigma;
end
%
plot(E,sigma_imp,'+');
title('Sorriso da Volatilidade - Índice Accionista')
xlabel('E'), ylabel('sigma')
%
% Fim - vol_imp
