1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| function monOptimisation
%Optimisation
%Matrice des contraintes
A = [1 1 1 ; -1 0 0 ; 0 -1 0 ; 0 0 -1];
b = [1 ; 0 ; 0 ; 0];
x0=[0.1;0.1;0.1;0.1];
prix_array = ...
strike_array = ...
mat_vec = ...
s0_vec = ...
sig0_vec = ...
rest_vec = ...
r = ...
nbr_sim = ...
par = fmincon (@(x) erreursfun(x,prix_array,strike_array,mat_vec,s0_vec,sig0_vec,rest_vec,r,nbr_sim),x0,A,b);
function f = erreursfun (par,prix_array,strike_array,mat_vec,s0_vec,sig0_vec,rest_vec,r,nbr_sim)
om = par(1);
alpha=par(2);
gam =par(3);
beta=par(4);
% GÈnÈration et stockage en mÈmoire des tous les nombres alÈatoires
nbr_mat = size(mat_vec,1);
eps2=cell(nbr_mat);
for i = 1:nbr_mat
mat = mat_vec(i);
vec_strike = strike_array{i};
nbr_strike = size(vec_strike,1);
eps1=cell(nbr_strike);
for j = 1: nbr_strike
eps1{j}=randn(nbr_sim,mat);
end
eps2{i}= eps1{j};
end
for i = 1:nbr_mat
vec_strike = strike_array{i};
prix=prix_array{i};
nbr_strike = size(vec_strike,1);
mat = mat_vec(i);
sig0=sig0_vec(i);
s0=s0_vec(i);
nbr_obs=mat_vec(i)-rest_vec(i);
eps1=eps2{i};
e=zeros(nbr_mat,nbr_obs);
c=zeros(nbr_mat,nbr_strike);
for j =1 : nbr_strike
strike = vec_strike (j);
eps=eps1{j}; % matrice des nombres alÈatoires qui va Ítre utilisÈe dans les simulations
payoff=zeros(nbr_sim);
for k = 1 : nbr_sim
sigma=zeros(nbr_sim,mat+1);
Z = zeros(nbr_sim,mat);
for l = 2 : mat+1
sigma (1,1)=sig0;
Z(1)=1;
sigma (k,l)=(om + (alpha * (eps(k,l-1)-(0.5+ gam))^2)*sigma(k,l-1)^2+beta*sig(l- 1)^2)^0.5;
Z(k,l) = Z(k,l-1)*Exp((-0.5 *(cig(k,l)^2))+(sig(k,l)*eps(k,l)));
end
st = s0 * (Exp(r * mat)) * Z(mat);
payoff(k)= max(st-strike,0);
end
c (i,j)= mean (payoff);
%%%%%%% Calcul des erreurs
for l = i : nbr_obs
e(i,j)=e(j)+(prix(l,j)-(c(i,j)*exp(r*(l-mat))))^2;
end
end
c (i,j)% stocker dans un cell array
e(i,j) % stocker dans un cell array
end
ee =zeros(nbr_mat);
for i =1 : nbr_mat
for j =1 :nbr_strike
ee(i)=ee+e(i,j);
end
eee=eee+ ee(i);
end
f= eee; |
Partager