% BSM_Explicit
%% parameters
clc; clear;
S0 = 272.52;            % 현재주가
a = 0; b = 900;         % Domain of x
Nx = 300;
x = linspace(a,b,Nx+2);
h = x(2)- x(1);         % spatial stepsize
dt = 0.1/360.0;           % time stepsize
% T = [35 63 91 126 154 189]
% 각 월물 옵션의 만기 [35 63 91 126 154 189] 일 
% 각 월물 옵션의 현재가(시장가격) [0.55 1.63 2.78 3.30 3.46 4.20]
K = 280;                % strike price
r = 0.0149;             % CD rate(91d)
sigma = 0.0818;
%% Initial condition
for i=2:Nx+1
    u(i,1) = max(x(i) - K,0);
end

u(1,1) = 2*u(2,1) - u(3,1);
u(Nx+2,1) = 2*u(Nx+1,1) - u(Nx,1);
%% Option valuation
for n=1:1890    % 각 월물 옵션의 만기 [35 63 91 126 154 189] 일 (만기(daily)*10)
u(1,n) = 2*u(2,n) - u(3,n);
u(Nx+2,n) = 2*u(Nx+1,n) - u(Nx,n);
    for i=2:Nx+1
        u(i,n+1) = u(i,n) + dt*(0.5*(sigma*x(i))^2*(u(i+1,n)-2*u(i,n)+u(i-1,n))/h^2 ...
                             + r*x(i)*(u(i+1,n)-u(i-1,n))/(2*h) - r*u(i,n));
    end
% hold on
% if mod(n,100)==0
%     plot(x(2:Nx+1),u(2:Nx+1,n+1),'-')
% end
end
u(Nx+2,end) = 2*u(Nx+1,end) - u(Nx,end);
%% vol 구하기(91일 cd금리기준 r=0.0149)/만기 4,5,6,7,8,9월인(17년), k=280인 옵션의 vol
M = [0.55 1.63 2.78 3.30 3.46 4.20] % 시장가격
u1 = pchip(x,u(:,end),S0) % 이론가격


%% 정답 : sigma = [0.0801,0.0905,0.0976,0.0901,0.0818,0.0818]