classdef call_option
properties
S0,K,T,r,sigm
end
methods
function obj=call_option(S0,K,T,r,sigm)
obj.S0=S0;
obj.K=K;
obj.T=T;
obj.r=r;
obj.sigm=sigm;
end
function y1=value(obj)
d1=((log(obj.S0/obj.K)+(obj.r+0.5*obj.sigm^2)*obj.T) ...
/(obj.sigm*sqrt(obj.T)));
d2=((log(obj.S0/obj.K) + (obj.r - 0.5 * obj.sigm^2) ...
* obj.T)/(obj.sigm * sqrt(obj.T)));
y1=(obj.S0 * normcdf(d1, 0.0, 1.0)- obj.K ...
* exp(-obj.r * obj.T) * normcdf(d2, 0.0, 1.0));
end
function y2 = vega(obj)
d1 = ((log(obj.S0 / obj.K) + (obj.r + ...
0.5 * obj.sigm^ 2) *obj.T)/ (obj.sigm * sqrt(obj.T)));
y2 = obj.S0 * normcdf(d1, 0.0, 1.0) * sqrt(obj.T);
end
function y3=imp_vol(obj,C0, sigma_est, it)
if nargin ==2
sigma_est=0.2;
it=100;
elseif nargin == 3
sigma_est=0.2;
end
option = call_option(obj.S0, obj.K, obj.T, obj.r, sigma_est);
for i = range(it)
option.sigm =option.sigm -(option.value() - C0)/ ...
option.vega();
end
y3=option.sigm;
end
end
end
%o=call_option(100., 105., 1.0, 0.05, 0.2);
%disp(o.value())
%disp(o.vega())
%disp(o.imp_vol(o.value()))
outcome:
8.0214
54.2228
0.2000