Codes matlab

matl -  
JulienJust Messages postés 149 Date d'inscription   Statut Membre Dernière intervention   -
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 149 Date d'inscription   Statut Membre Dernière intervention   18
 
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
matl
 
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 149 Date d'inscription   Statut Membre Dernière intervention   18
 
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
matl
 
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 149 Date d'inscription   Statut Membre Dernière intervention   18
 
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