Error: Not enough input arguments. from (n1 = normcdf(d1.*CP);)
Show older comments
function ab = debug
clear; clc;
N = 30000; % number of simulations
NC = 2; % number of options
T = 1/252; % Intial Time
S0=100; % Initial Stock Price
X = [1.2 0.8]*100; %Call and Put Options
M = [30 30]/252; %Time to maturity
H =[4 -1]; %Portfolio Weights
sigma = 0.0032;
r = 0.01;
mu = 0.2;
q = 0.0;
H0 = bs(S0, X, r, q, sigma, M) * H(1); % initial portfolio value S0=1
HP = bs(X, r, q, sigma, M) * H(2); % initial portfolio value S0=1
% errs = randn(N,1); % normal errors
errs = trnd(3,N,1)/sqrt(3); % t-distributed errors
ST =S0* exp(mu*T + sigma*sqrt(T)*errs); % final asset price
%ST= S0*exp(( mu-sigma^2/2)*T + sigma*sqrt(T)*errs);
C = zeros(N,NC);
P = zeros(N,NC);
for i=1:NC;
C(:,i) = bs(X(i)./ST,r,sigma,M(i)-T); % final put option values
P(:,i) = bs(X(i)./ST,r,sigma,M(i)-T); % final put option values
end
sims = C*H(1) + P*H(2);
VaR_S10=S0*sigma*norminv(0.1); %Stock Value at Risk
VaR_S5=S0*sigma*norminv(0.05);
VaR_S1=S0*sigma*norminv(0.01);
%H = bs(X, r, sigma, M) .* H / H0; % H is now portfolio _weights_
% Portfolio Delta for Call
H0Delta = bsdelta(X, r, sigma, M) * H(1); % initial portfolio delta
mP = H0 + H0 * mu * H0Delta * T;
sP = sqrt( H0.^2 * sigma.^2 * H0Delta.^2 * T);
DVaR10_c = mP + norminv(0.1) * sP;
DVaR5_c = mP + norminv(0.05) * sP;
DVaR1_c = mP + norminv(0.01) * sP;
%D_ES = mean(sims) > DVaR10;
%Portfolio Delta for Put
HPDelta = bsdelta(X, r, sigma, M) * H(2)'; % initial portfolio delta
mP = HP + HP * mu * H0Delta * T;
sP = sqrt( HP.^2 * sigma.^2 * HPDelta.^2 * T);
DVaR10_p = mP + norminv(0.1) * sP;
DVaR5_p = mP + norminv(0.05) * sP;
DVaR1_p = mP + norminv(0.01) * sP;
%D_ES = mean(sims) > DVaR10;
%
%PORTFOLIO DELTA
P_DVaR10=DVaR10_c + DVaR10_p;
P_DVaR5=DVaR5_c + DVaR5_p;
P_DVaR1=DVaR1_c + DVaR1_p;
% Portfolio delta-gamma Call
H0Gamma = bsgamma(X, r, sigma, M) * H(1); % initial portfolio gamma
mPG = mP + .5 * H0.^2 * sigma.^2 * H0Gamma *T;
sPG = sqrt( sP.^2 + .75 * H0.^4 * sigma.^4 * H0Gamma.^2 * T.^2 );
DGVaR10_c =mPG + norminv(0.1)*sPG;
DGVaR5_c = mPG + norminv(0.05)*sPG;
DGVaR1_c = mPG + norminv(0.01)*sPG;
%DG_ES = mean(sims) > DGVaR10;
%
% Portfolio delta-gamma Put
HPGamma = bsgamma(X, r, sigma, M) * H(2); % initial portfolio gamma
mPG = mP + .5 * HP.^2 * sigma.^2 * HPGamma *T;
sPG = sqrt( sP.^2 + .75 * HP.^4 * sigma.^4 * HPGamma.^2 * T.^2 );
DGVaR10_p =mPG + norminv(0.1)*sPG;
DGVaR5_p = mPG + norminv(0.05)*sPG;
DGVaR1_p = mPG + norminv(0.01)*sPG;
%DG_ES = mean(sims) > DGVaR10;
%PORTFOLIO DELTA-GAMMA
P_DGVaR10 = DGVaR10_c + DGVaR10_p;
P_DGVaR5 = DGVaR5_c + DGVaR5_p;
P_DGVaR1 = DGVaR1_c + DGVaR1_p;
% disp(' initial MC10%VaR MC5%VaR MC1%VaR')
% disp([H0, SimVaR10, SimVaR5, SimVaR1])
disp(' initial D10%VaR D5%VaR D1%VaR')
disp([H0, DVaR10, DVaR5, DVaR1])
disp(' initial DG10%VaR DG5%VaR DG1%VaR')
disp([H0, DGVaR10, DGVaR5, DGVaR1])
subplot(2,1,1);
normplot(sims); % normal distribution plot
%b = mP-3*sP:6*sP/100:mP+3*sP;
subplot(2,1,2);
hist(sims,100);
figure (2)
plot(sims);
xlabel('sample paths')
ylabel('ST')
% BLACK-SCHOLES FORMULA FOR CALL
function y = bs(S0, x, r, q, sig, t, CP)
% The simple Black-Scholes European call option Price
d1 = ( log(S0./x) + ( r-q + .5*sig.^2 ) .*t ) ./ sig ./sqrt(t);
d2 = d1 - sig.*sqrt(t);
n1 = normcdf(d1.*CP);
n2 = normcdf(d2.*CP);
y = CP.*(S0.*exp(-q.*t).*n1 - x.*exp(-r.*t).*n2);
%if(flag == -1)
%y = -y;
% elseif (flag == -1)
% y=x.*n2.*exp(-q.*t)-n1; %Put Option Price
%end
Accepted Answer
More Answers (0)
Categories
Find more on Portfolio Optimization and Asset Allocation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!