code pour le calcul d'une fonction à partir d'une matrice

code pour le calcul d'une fonction à partir d'une matrice - VB/VBA/VBS - Programmation

Marsh Posté le 06-05-2011 à 15:23:41    

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.
 
durée delta =10
7 volatilité=10,97 ==> strike
voiçi le code que j'ai utilisé mais ça marche pas
 
Sub strikevol()
Dim db As Database, rs As Recordset, r As Long
    Set db = OpenDatabase("C:\Users\Siham\Desktop\function.mdb" )
    Set rs = db.OpenRecordset("siham1", dbOpenTable)
 
    For r = 3 To 14
    With rs
.AddNew
.fields("10" ) = Range("B" & r).Value
.fields("15" ) = Range("C" & r).Value
.fields("20" ) = Range("D" & r).Value
.fields("25" ) = Range("E" & r).Value
.fields("30" ) = Range("F" & r).Value
.fields("35" ) = Range("G" & r).Value
.fields("40" ) = Range("H" & r).Value
.Update
 End With
   
Dim taux_domestique As Double
Dim taux_etranger As Double
Dim r As Integer
Dim i As Integer
Dim j As Integer
Dim duree(12) As Double
Dim volatilite(12, 7) As Double
CP = "call"
Spot = 1.4449
        i = 1
        Dim ObjCell1 As Range
         
        For Each ObjCell In Range("A3:A14" ).Cells
            duree(i) = ObjCell.Value
            i = i + 1
        Next
         
        Dim ObjCell3 As Range
        i = 1
        j = 1
        For Each ObjCell3 In Range("A3:H14" ).Cells
            If j <= 12 And i <= 12 Then
              volatilite(i, j) = ObjCell3.Value
            End If
             
            If j > 12 And i <= 12 Then
                j = 1
                i = i + 1
            End If
        Next
 
For i = 1 To 12
For j = 1 To 7
taux_domestique = InterpoleTx(Range("A17:A26" ), Range("B17:B26" ), duree(i)) And taux_etranger = InterpoleTx(Range("A29:A42" ), Range("C29:C42" ), duree(i))
 
Range("B" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.1 * Sqr(2 * 22 / 7))))))
Range("C" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.15 * Sqr(2 * 22 / 7))))))
Range("D" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.2 * Sqr(2 * 22 / 7))))))
Range("E" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.25 * Sqr(2 * 22 / 7))))))
Range("F" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.3 * Sqr(2 * 22 / 7))))))
Range("G" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.35 * Sqr(2 * 22 / 7))))))
Range("H" & r).Value = Spot * Exp(((taux_domestique - taux_etranger + (0.5 * volatilite(i, j) * volatilite(i, j))) * (duree(i) / 365)) - (volatilite(i, j) * Sqr(2 * (duree(i) / 365) * Log(1 / (0.4 * Sqr(2 * 22 / 7))))))
Next j
Next i
Next
    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
End Sub

Reply

Marsh Posté le 06-05-2011 à 15:23:41   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed