Codes matlab

Fermé
matl - 11 août 2013 à 16:27
JulienJust Messages postés 139 Date d'inscription mardi 25 juin 2013 Statut Membre Dernière intervention 2 septembre 2014 - 19 août 2013 à 10:17
Bonjour,



Dans le cadre d'un projet en finance, je dois coder sous matlab une opération de backtesting, mon code est celui-ci:
%----- calcul des rendements

rdt = Data(); % calcul des rendements
[T,k] = size(rdt);
L = 60 ; % taille echantillon d'estimation (60, 120, 240)

%----
WMeanVar = ones(T-L,k)*NaN;
WJorion = ones(T-L,k)*NaN;
Wmaxmin = ones(T-L,k)*NaN;

%----
Ret_WMeanVar = ones(T-L,1)*NaN;
Ret_WJorion = ones(T-L,1)*NaN;
Ret_Wmaxmin = ones(T-L,1)*NaN;

%----
for tt = 1:T-L

in = rdt(tt:tt+L-1,:);

%---- portefeuille de markovitz
WMeanVar = MeanVariance(in,3);
Ret_WMeanVar = WMeanVar'*rdt(tt+L,:)';

%---- portefeuille de Jorion
WJorion = Jorion(in,3);
Ret_WJorion = WJorion'*rdt(tt+L,:)';

%---- portefeuille maxmin
Wmaxmin = Maxmin(in,3,0.95);
Ret_Wmaxmin = Wmaxmin'*rdt(tt+L,:)';

end


%----------- criteres d'évaluation

%--- Turnover

TurnoverMeanVar = mean(mean(abs(WMeanVar(2:end,:)-WMeanVar(1:end-1,:))));
TurnoverJorion = mean(mean(abs(WJorion(2:end,:)-WJorion(1:end-1,:))));
Turnovermaxmin = mean(mean(abs(Wmaxmin(2:end,:)-Wmaxmin(1:end-1,:))));
Turnover = [TurnoverMeanVar TurnoverJorion Turnovermaxmin];

%--- moyenne hors echantillon

OutSampleMean =
%--- variance hors echantillon

OutSampleVariance = var([Ret_WMeanVar Ret_WJorion Ret_Wmaxmin]);

%--- ratio de sharpe hors echantillon

OutSamplePerformance = OutSampleMean./sqrt(OutSampleVariance);

%---- affichage des résultats

format long
disp('%========== Turnover ========%')
Turnover
disp('%========== moyenne hors echantillon ========%')
OutSampleMean
disp('%========== variance hors échantillon ========%')
OutSampleVariance
disp('%========== ratio de sharpe hors échantillon ========%')
OutSamplePerformance

Mon problème c'est que dans le caclul demean([Ret_WMeanVar Ret_WJorion Ret_Wmaxmin]);
s rendements dans la boucle (Ret_WMeanVar , Ret_WJorion et Ret_Wmaxmin) il devait former un vecteur de toutes les valeurs calculées pour tt allant de 1 à T-L alors que le résultat n'est pas un vecteur donc dans le calcul de la moyenne mean([Ret_WMeanVar Ret_WJorion Ret_Wmaxmin]) j'ai qu'une seule valeur au lieu d'avoir trois, car c''est pas considéré comme une matrice,
quelqun peut il m'aider à déceler l'erreur ?

5 réponses

JulienJust Messages postés 139 Date d'inscription mardi 25 juin 2013 Statut Membre Dernière intervention 2 septembre 2014 18
13 août 2013 à 11:06
Hello !

Euh... j'aimerai bien t'aider mais ton script, sans les indentations, pique les yeux :P

Et est-ce que tu pourrais donner un petit exemple chiffré avec ton script et de ce que tu veux avoir comme résultat s'il te plait, ça sera encore plus simple pour t'aider :))
0
lol, j'avoue que ça pique les yeux, donc le problème que je rencontre est que pour chaque valeur "tt" je calcule un vecteur poids (WMeanVar) le résultat à chaque fois est un vecteur ligne et à partir de ces poids je calcul le rendement du portefeuille ( Ret_WMeanVar) qui donne qu'une seule valeur pour chaque valeur "tt"

for tt = 1:T-L
in = rdt(tt:tt+L-1,:);
%---- portefeuille de markovitz
WMeanVar = MeanVariance(in,3);
Ret_WMeanVar = WMeanVar'*rdt(tt+L,:)';

Ce que je veux c'est qu'il fasse une concaténation de ces vecteur( résultats) pour chaque valeur de "tt" de telle sorte qu'à la fin j'ai une seule matrice des rendements ( un vecteur colonne dont chaque valeur correspond à une valeur de "tt") dans mon code pour avoir ça j'ai du donner une forme des matrices en écrivant ça :
WMeanVar = ones(T-L,k)*NaN;
Ret_WMeanVar = ones(T-L,1)*NaN;

mais ça ne marche pas au final, ça me donne pour chaque valeur de tt un rendement mais ne forme pas le vecteur des rendements. J'espere avoir été plus claire et merci à l'avance
0
JulienJust Messages postés 139 Date d'inscription mardi 25 juin 2013 Statut Membre Dernière intervention 2 septembre 2014 18
13 août 2013 à 16:05
Je pense que tu devrais définir tes vecteurs (tous) au début de ton programme et ensuite faire incrémenter les coordonnées de chacun des vecteur dans la boucle for. Je ne sais pas si je me fait comprendre...
0
Merci de votre réponse JulienJust
je ne crois pas avoir bien compris, en fait ce que je n'arrive pas à faire est justement incrémenter les coordonnées dans la boucle,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JulienJust Messages postés 139 Date d'inscription mardi 25 juin 2013 Statut Membre Dernière intervention 2 septembre 2014 18
19 août 2013 à 10:17
Hello matl !

Voici un exemple d'incrémentation des coordonnées d'un vecteur ligne A de longueur 10 que je souhaite remplir à partir des coordonnées d'un vecteur B:

A =  zeros(1,10); % Définit le vecteur ligne A de longueur 10 et rempli de 0
B = (1:10); % Définit le vecteur ligne B [1,2,3,...,10]

for ii=1:10
A(ii) = B(ii);
end

Ainsi A = B.
0