Research Article

Accurate and Efficient Computations of the Greeks for Options Near Expiry Using the Black-Scholes Equations

Code 1

MATLAB code.
clear all; close all; clc; clf;
K = 100; L = 2.5*K; T = 1/365; sigma = 0.3; r = 0.03;
cash = 100; Nx = L+1; x = linspace(0,L,Nx); h = x()-x();
payoff(1:Nx) = 0.0; payoff(x >= K) = cash;
%% Price %%
d1 = (log(x/K) + (r+sigma2/2)*T)/(sigma*sqrt(T));
d2 = d1 - (sigma*sqrt(T));
exact = cash*exp(-r*T).*normcdf(d1);
figure(); hold on; grid on;
plot(x,payoff,,k-,,x,exact,,r-,); axis([0 L -5 1.05*cash]);
%% Delta %%
del = cash*exp(-r*T).*normpdf(d1)./(sigma*sqrt(T)*x);
figure(); hold on; grid on;
plot(del,,r-,,,LineWidth,,1); axis([0 L -5 1.1*max(del)]);
%% Gamma %%
gam = -cash*exp(-r*T) * (d1.*normpdf(d2))./((sigma*x).2*T);
figure(); hold on; grid on; plot(gam,,r-,,,LineWidth,,1);
axis([0 L -1.1*max(gam) 1.1*max(gam)]);
%% theta %%
the = cash*exp(-r*T)*(r*normcdf(d2) + normpdf(d2)...
.* (d1/(2*T) - r/(sigma*sqrt(T))));
figure(); hold on; grid on; plot(the,,r-,,,LineWidth,,1);
axis([0 L -1.1*max(the) 1.1*max(the)]);
%% Vega %%
veg = -cash*exp(-r*T)*(normpdf(d2)).*d1/sigma;
figure(); hold on; grid on; plot(veg,,r-,,,LineWidth,,1);
axis([0 L -1.1*max(veg) 1.1*max(veg)]);
%% Rho %%
rho = cash*exp(-r*T)*((-T*normcdf(d2)) + sqrt(T)/sigma*(normpdf(d2)));
figure(); hold on; grid on; plot(rho,,r-,,,LineWidth,,1);
axis([0 L 3*min(rho) 1.1*max(rho)]);