Voila notre code alors ! En théorie cela devrait marcher mais non je ne comprends pas ce qui coince !!
Question 4
Function fnBackTest() As Variant
Rem
Rem Dim wsP As Worksheet
Rem Dim wsR As Worksheet
Rem Dim wsV As Worksheet
Rem
Rem Dim statfnlv As Variant
Rem
Rem Dim observ As Integer
Rem Dim nbre As Integer
Rem
Rem Dim i As Integer
Rem Dim j As Integer
Rem Dim k As Integer
Rem Dim nbt As Integer
Rem
Rem Dim periode As Integer
Rem
Rem '********************************************************************************
Rem ' Préalable *
Rem '********************************************************************************
Rem
Rem 'Activation du classeur "Gestion de Portefeuille - Projet"
Rem ThisWorkbook.Activate
Rem
Rem 'Affectation de la feuille de calcul "Portefeuille" à wsP
Rem Set wsP = Worksheets("portefeuille" )
Rem
Rem 'Affectation de la feuille de calcul "Rendements" à wsR
Rem Set wsR = Worksheets("rendements" )
Rem
Rem 'Affectation de la feuille de calcul "vol_backward" à wsV
Rem Set wsV = Worksheets("vol_backward" )
Rem
Rem 'Calcul des valeurs observ et nbre
Rem observ = wsV.Cells(Rows.Count, 1).End(xlUp).Row - 1
Rem nbre = wsV.Cells(1, Columns.Count).End(xlToLeft).Column - 1
Rem
Rem ReDim statfnlnv(observ, nbre)
Rem
Rem '********************************************************************************
Rem ' mise en oeuvre *
Rem '********************************************************************************
Rem
Rem 'mise en oeuvre sur les différentes périodes
Rem For periode = 2 To observ
Rem statfnlnv = fnlnv(periode)
Rem Next periode
Rem
Rem wsP.Cells(2, 2) = statfnlnv
Rem
Rem 'calcul de la performante effective (le rendement ???) de cette stratégie
Rem For j = 2 To nbre
Rem For i = 2 To observ
Rem If wsP.Cells(i, j) <> 0 Then
Rem k = k + wsR.Cells(i, j)
Rem nbt = nbt + 1
Rem End If
Rem Next i
Rem Next j
Rem
Rem wsP.Range("A1" ).End(xlDown).Value = "performance effective"
Rem wsP.Range("A2" ).End(xlDown).Value = k / nbt
Rem
Rem End Function
Rem
Rem
End Sub
question 5:
Function fnlnv(periode As Integer) As Variant
Rem 'stratégie consistant à investir uniquement en monétaire lorsque la volatilité backward est supréieur à un seuil (75%); sinon investit dans les titres avec les alphas backward les plus élevé
Rem
Rem Dim wsV As Worksheet
Rem Dim wsAb As Worksheet
Rem
Rem Dim sel1 As Variant
Rem Dim sel2 As Variant
Rem Dim selnumb As Variant
Rem Dim mat As Variant
Rem
Rem Dim observ As Integer
Rem Dim nbre As Integer
Rem Dim i As Integer
Rem Dim j As Integer
Rem Dim k As Integer
Rem
Rem Dim pos1 As Integer
Rem Dim pos2 As Integer
Rem Dim posf As Integer
Rem
Rem Dim valref As Integer
Rem Dim nbt As Integer
Rem
Rem '********************************************************************************
Rem ' Préalable *
Rem '********************************************************************************
Rem
Rem 'Activation du classeur "Gestion de Portefeuille - Projet"
Rem ThisWorkbook.Activate
Rem
Rem 'Affectation de la feuille de calcul "vol_backward" à wsV
Rem Set wsV = Worksheets("vol_backward" )
Rem
Rem 'Affectation de la feuille de calcul "alpha_backward" à wsAb
Rem Set wsAb = Worksheets("alpha_backward" )
Rem
Rem 'Calcul des valeurs observ et nbre
Rem observ = wsV.Cells(Rows.Count, 1).End(xlUp).Row - 1
Rem nbre = wsV.Cells(1, Columns.Count).End(xlToLeft).Column - 1
Rem
Rem 'redimensionnement de la matrice sel, la matrice des titres sélectionnés
Rem ReDim sel1(observ, nbre)
Rem ReDim sel2(observ, nbre)
Rem ReDim selnumb(observ, nbre)
Rem ReDim mat(observ, nbre)
Rem
Rem '********************************************************************************
Rem ' Stratégie du portefeuille*
Rem '********************************************************************************
Rem
Rem 'on trie la volatilité backward de l'indice de marché S&P 500
Rem For i = 2 To observ - 1
Rem sel1(i, 1) = wsV.Cells(i, 2).Value
Rem Next i
Rem
Rem sel1.Sort
Rem
Rem 'on sélectionne la valeur du 3e quartile
Rem pos1 = observ * (75 / 100)
Rem valref = Round(sel1(1, pos1)).Value
Rem
Rem 'on trie les alphas backward les plus élevé de la période
Rem For j = 4 To nbre
Rem sel2(periode, j) = wsAb(periode, j).Value
Rem Next j
Rem
Rem sel2.Sort
Rem
Rem 'on sélectionne les 10% des titres dont l'apha backward est le plus élevé (les 3 titres dans notre cas)
Rem pos2 = nbre * (90 / 100)
Rem nbt = nbre - pos2
Rem
Rem For k = 1 To pos2
Rem sel2.cell(1, k).ClearContents
Rem Next k
Rem
Rem 'on créer une matrice selnumb qui contient les positions des titres sélectionnés
Rem For i = 1 To nbt
Rem For j = 4 To nbre
Rem If wsAb(periode, i) = sel2.Cells(i, j) Then
Rem selnumb(periode, i) = j
Rem End If
Rem Next j
Rem Next i
Rem
Rem 'on va investir uniquement en monétaire lorsque la volatilité backward est supréieur à un seuil (75%); sinon investit dans les titres avec les alphas backward les plus élevé
Rem ' supposons notre portefeuille est égale à 1
Rem
Rem If wsV.Cells(periode, 1).Value >= valref.Value Then
Rem mat(periode, 3) = 1
Rem mat(periode, 2) = 0
Rem For i = 4 To nbre
Rem mat(periode, i) = 0
Rem Next i
Rem Else
Rem For i = 2 To nbre
Rem mat(periode, i) = 0
Rem Next i
Rem For j = 1 To nbt
Rem posf = selnumb(periode, j)
Rem If mat(periode, posf) = posf Then
Rem mat(periode, posf) = (1 / nbt)
Rem End If
Rem Next j
Rem End If
Rem
Rem 'Report des dates dans la 1ère colonne de la matrice sel
Rem mat(periode, 1) = ThisWorkbook.wsV.Cells(periode, 1)
Rem
Rem fnlnv = mat
Rem
Rem End Function
Rem
Rem
End Sub
Voilà, j'ai codé ça pour les deux questions mais ça coince je n'arrive pas à comprendre pourquoi...Bref c'est la crise !
Merci