Bonjour,

Mon but : calculer la matrice de covariance d'un portefeuille dont je n'ai que les prix
J'ai donc créé une fonction qui calcule les rendements : OK elle marche bien et renvoie la matrice de rendements dans excel quand on la teste
Mon but est maintenant de créer la matrice covariance MAIS (car il y a toujours un mais) je suis obligée d'utiliser ici aussi comme paramètre de ma fonction les prix (cela fait partie d'un gros devoir et mon professeur impose cette difficulté.

Je dois donc dans ma deuxième fonction, appeler la fonction rendement l'appliquer au prix puis appliquer aux résultats la fonction covariance. Vous vous doutez que si je suis là c'est que j'ai un petit bémol...

J'arrive bien à appeler ma fonction rendement quand je teste cela sans ma boucle ça marche bien mais je n'arrive pas à appliquer ma fonction covariance à mon tableau temporaire... HELP PLEASE mon projet est à rendre urgemment...

PS : quand je teste ma fonction covariance directement sur ma plage de prix elle fonctionne donc ce n'est pas la fonction elle-même le problème mais bien mon appellation

Fonction rendements :
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
'fonction calculant la matrice des rendements du portefeuille
Function ReturnMatrix(prices As Range) As Variant
 
'permet la mise à jour lors d'une modification sur la feuille, comme une fonction excel normale
Application.Volatile
 
Dim res()
 
Dim i As Integer, j As Integer
Dim nombredelignes As Integer, nombredecolonnes As Integer
 
nombredelignes = prices.Rows.Count
nombredecolonnes = prices.Columns.Count
 
'Formate la matrice de résultat selon la taille de la matrice de prix du départ
ReDim res(nombredelignes, nombredecolonnes)
 
For i = 1 To nombredelignes
   For j = 1 To nombredecolonnes
        res(i, j) = prices(i + 1, j) / prices(i, j) - 1
    Next j
Next i
 
ReturnMatrix = res
End Function
Fonction covariance qui pose problème :
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
Function covarmat(prices As Range) As Variant
 
'permet la mise à jour lors d'une modification sur la feuille, comme une fonction excel normale
Application.Volatile
 
Dim matriceresultat()
Dim temporaryreturn As Variant
Dim x As Integer, y As Integer
Dim nbredecolonnes As Integer
 
    'Compte le nombre de lignes
    nbredecolonnes = prices.Columns.Count
 
'Formate la matrice de résultat en une matrice carrée
ReDim matriceresultat(nbredecolonnes, nbredecolonnes)
 
    'applique la fonction rendement à la plage de prix
    temporaryreturn = ReturnMatrix(prices)
 
 
    For x = 1 To nbredecolonnes
      For y = 1 To nbredecolonnes
      'applique la covariance entre la colonne x et la colonne y des rendements retournés ci-dessus
      matriceresultat(x, y) = Application.WorksheetFunction.Covariance_P(temporaryreturn.Columns(x), temporaryreturn.Columns(y))
      Next y
    Next x
 
covarmat = matriceresultat
End Function
J'ai vraiment besoin d'un sauveur