calcul d'une fonction dans un tableau - VB/VBA/VBS - Programmation
MarshPosté le 10-05-2011 à 14:48:28
Bonjour je dois calculer une fonction dont les données sont plusieurs, mes données sont par exemple comme suit:
durée\ delta= 10 15 20 7 10,97 11,20 10,89 15 11,3 10,54 10,65 21 10,67 11,45 11,10 30 10,97 11,34 10,93 les valeurs à l'intérieur sont les volatilités
je dois avoir un tableau similaire mais au lieu des volatilité il me faut les valeurs d'un strike dont j'ai l'expression en fonction de la durée le dela et la volatilité, donc pour chaque durée, delta et volatilité il me faut un strike.
voiçi le code que j'ai essayé mais ça donne rien (je suis débutante en VBA)
Sub test()
Function str(CP As String, Spot As Double) As Double
Dim taux_domestique As Double Dim taux_etranger As Double Dim i As Integer Dim j As Integer Dim duree(12) As Double Dim delta(7) As Double Dim volatilite(12, 7) As Double Dim tmp1 As Double Dim tmp3 As Double Dim tmp2 As Double
i = 1 Dim ObjCell1 As Range
For Each ObjCell In Range("A3:A14" ).Cells duree(i) = ObjCell.Value i = i + 1 Next
i = 1 Dim ObjCell2 As Range
For Each ObjCell2 In Range("B2:H2" ).Cells delta(i) = ObjCell2.Value i = i + 1 Next
Dim ObjCell3 As Range i = 1 j = 1 For Each ObjCell3 In Range("B3:H14" ).Cells If j <= 7 And i <= 12 Then volatilite(i, j) = ObjCell3.Value End If
If j > 7 And i <= 12 Then j = 1 i = i + 1 End If
Next
For i = 1 To 12
If CP = "call" Then taux_domestique = InterpoleTx(Range("A17:A26" ), Range("B17:B26" ), duree(i)) And taux_etranger = InterpoleTx(Range("A29:A42" ), Range("C29:C42" ), duree(i)) ElseIf CP = "put" Then taux_domestique = InterpoleTx(Range("A17:A26" ), Range("C17:C26" ), duree(i)) And taux_etranger = InterpoleTx(Range("A29:A42" ), Range("B29:B42" ), duree(i)) End If
Marsh Posté le 10-05-2011 à 14:48:28
Bonjour
je dois calculer une fonction dont les données sont plusieurs,
mes données sont par exemple comme suit:
durée\ delta= 10 15 20
7 10,97 11,20 10,89
15 11,3 10,54 10,65
21 10,67 11,45 11,10
30 10,97 11,34 10,93
les valeurs à l'intérieur sont les volatilités
je dois avoir un tableau similaire mais au lieu des volatilité il me faut les valeurs d'un strike dont j'ai l'expression en fonction de la durée le dela et la volatilité, donc pour chaque durée, delta et volatilité il me faut un strike.
voiçi le code que j'ai essayé mais ça donne rien (je suis débutante en VBA)
Sub test()
Function str(CP As String, Spot As Double) As Double
Dim taux_domestique As Double
Dim taux_etranger As Double
Dim i As Integer
Dim j As Integer
Dim duree(12) As Double
Dim delta(7) As Double
Dim volatilite(12, 7) As Double
Dim tmp1 As Double
Dim tmp3 As Double
Dim tmp2 As Double
i = 1
Dim ObjCell1 As Range
For Each ObjCell In Range("A3:A14" ).Cells
duree(i) = ObjCell.Value
i = i + 1
Next
i = 1
Dim ObjCell2 As Range
For Each ObjCell2 In Range("B2:H2" ).Cells
delta(i) = ObjCell2.Value
i = i + 1
Next
Dim ObjCell3 As Range
i = 1
j = 1
For Each ObjCell3 In Range("B3:H14" ).Cells
If j <= 7 And i <= 12 Then
volatilite(i, j) = ObjCell3.Value
End If
If j > 7 And i <= 12 Then
j = 1
i = i + 1
End If
Next
For i = 1 To 12
If CP = "call" Then
taux_domestique = InterpoleTx(Range("A17:A26" ), Range("B17:B26" ), duree(i)) And taux_etranger = InterpoleTx(Range("A29:A42" ), Range("C29:C42" ), duree(i))
ElseIf CP = "put" Then
taux_domestique = InterpoleTx(Range("A17:A26" ), Range("C17:C26" ), duree(i)) And taux_etranger = InterpoleTx(Range("A29:A42" ), Range("B29:B42" ), duree(i))
End If
For j = 1 To 7
tmp1 = taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))
tmp2 = Log(1 / (delta(j) * Sqr(2 * 3.14)))
tmp3 = volatilite(i, j) * Sqr(2 * (duree(i) / 365) * tmp2)
Cells(i, j + 9).Value = str = Spot * Exp((tmp1 * (duree(i) / 365)) - tmp3)
Next j
Next i
End Function
End Sub