Salut tout le monde,
J'ai écrit un code afin d'estimer les paramètres d'un GARCH à partir des données empiriques en minimisant la somme des erreurs, cependant je dois utiliser beaucoup de variables en entrée pour définir ma fonction à minimiser et ce que j'ai fait n'a pas l'air de marcher, Matlab m'indique que je me trompe dans le nom de la fonction :s Des idées ?

Mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
% Charger nbr_sim sombre de simulations
% Charger taux sans risque quotidien (/360) r
% Charger vecteur des S0 (S0 au dÈbut d'observation des prix pour chaque option) 
% Charger vecteur des Sigma0 (S0 au dÈbut d'observation des prix pour chaque option)  
% Charger vecteur des maturitÈs Mat_vec
% Charger vecteur durÈe de vie restante (afin d'Èxploiter les observations
% des options non Èchues)rest_vec
% Charger les matrices d'observations pour chaque maturitÈ dans un cell
% array prix_array
% Charger les vecteurs des strikes disponibles pour chaque maturitÈ dans un
% autre cell array strike_array
 
function f = f(om,alpha,gam,beta,vec_strike,mat_vec,prix_array{1},s0_vec,sig0_vec,rest_vec,r,nbr_sim)
 
% 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);
eps1=cell(nbr_strike);
for j = 1: nbr_strike
        eps1{j}=rndn(nbr_sim,mat);
end 
eps2{i}= eps1{j}; 
end 
 
e=zero(nbr_mat,nbr_obs);
c=zero(nbr_mat,nbr_strike);
nbr_strike = size(vec_strike,1);
for i = 1:nbr_mat
vec_strike = strike_array{i};
prix=prix_array{i};
nbr_strike = size(vec_strike,1);
mat = mat_vec(i);
so=s0_vec(i);
sig0=sig0_vec(i);
nbr_obs=mat_vec(i)-rest_vec(i);
eps1=eps2{i};
 
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=zero(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 = sz * (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 =zero(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;
 
%Optimisation
 
%Matrice des contraintes
A = [1 1 1 ; -1 0 0 ; 0 -1 0 ; 0 0 -1];       
b = [1 ; 0 ; 0 ; 0];
 
fmincon