Codes matlab
matl
-
JulienJust Messages postés 149 Date d'inscription Statut Membre Dernière intervention -
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 ?
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 ?
A voir également:
- Codes matlab
- Les codes ascii - Guide
- Spotify codes - Guide
- Codes secrets pour débloquer tous téléphones mobiles - Guide
- Codes gta - Guide
- Meilleurs sites codes promo france - Guide
5 réponses
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 :))
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 :))
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
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
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...
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,
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,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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:
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.