R
Reeaz
Guest
Bonjour,
je souhaite créer una macro qui :
-fait varier une variable "sig" qui est réelle
-qui pour chaque sig retourne une valeur "swapvar"
-puis teste la valeur swapvar par rapport à une autre valeur figée "Contre"
S'il trouve à un moment ds la boucle swapvar=Contre alors il s'arrete et renvoie ds une cellule la valeur de sig pr laquelle il y a égalité.
Cependant, j'ai 2 pbs:
-je voudrai lui faire comprendre que tt qu'il ne trouve pas l'égalité qu'il rest ds la boucle et s'il trouve l'égalité qu'il en sorte
-que ma variable étant réelle, qu'elle ne se fasse que sur 2 décimales (1.01 puis 1.02...99.99 pour arriver à 100).
Déja j'ai l'impression que ma boucle n'est pas bonne.
Si qqun pouvait vérifier ma macro et notamment cette boucle (simple) mais que j'ai du mal à faire...
Voici mon code:
Sub Dicho()
K = 0.042
F = 0.03869454
t = 26
Contre = 7780861799.33718
tenor = 1
b = -1
Amount = 27000000
Df = 0.98754242542
Dim SwapVar As Double
Dim sig As Double
For sig = 1 To 100 Step 0.01
'Debug.Print sig
d1 = (Log(F / K) + (sig / 100) ^ 2 / 2 * t) / ((sig / 100) * Sqr(t))
d2 = d1 - (sig / 100) * Sqr(t)
'SwapVar = SwapVar + (Amount / tenor) * Df * b * (F0 * Norm(b * d1) - Rx * Norm(b * d2))
SwapVar = SwapVar + (Amount / tenor) * Df * b * (F * Norm(b * d1) - K * Norm(b * d2))
Debug.Print SwapVar
'While SwapVar <> Contre
'sig = sig + 1
'If SwapVar = Contre Then
'Range("A1").Value = sig
'End If
'Wend
If SwapVar <> Contre Then
'sig = sig + 0.1
Else: Range("A1").Value = sig
End If
'Debug.Print sigma
Next sig
End Sub
Public Function Norm(x As Double) As Double ' Cumulative normal distribution
'Matthew Wilson. E-Mail: Mattw0199@yahoo.com. This function is not copyrighted. Please use as you wish.
Norm = Application.WorksheetFunction.NormSDist(x)
End Function
Merci.
Reeaz
je souhaite créer una macro qui :
-fait varier une variable "sig" qui est réelle
-qui pour chaque sig retourne une valeur "swapvar"
-puis teste la valeur swapvar par rapport à une autre valeur figée "Contre"
S'il trouve à un moment ds la boucle swapvar=Contre alors il s'arrete et renvoie ds une cellule la valeur de sig pr laquelle il y a égalité.
Cependant, j'ai 2 pbs:
-je voudrai lui faire comprendre que tt qu'il ne trouve pas l'égalité qu'il rest ds la boucle et s'il trouve l'égalité qu'il en sorte
-que ma variable étant réelle, qu'elle ne se fasse que sur 2 décimales (1.01 puis 1.02...99.99 pour arriver à 100).
Déja j'ai l'impression que ma boucle n'est pas bonne.
Si qqun pouvait vérifier ma macro et notamment cette boucle (simple) mais que j'ai du mal à faire...
Voici mon code:
Sub Dicho()
K = 0.042
F = 0.03869454
t = 26
Contre = 7780861799.33718
tenor = 1
b = -1
Amount = 27000000
Df = 0.98754242542
Dim SwapVar As Double
Dim sig As Double
For sig = 1 To 100 Step 0.01
'Debug.Print sig
d1 = (Log(F / K) + (sig / 100) ^ 2 / 2 * t) / ((sig / 100) * Sqr(t))
d2 = d1 - (sig / 100) * Sqr(t)
'SwapVar = SwapVar + (Amount / tenor) * Df * b * (F0 * Norm(b * d1) - Rx * Norm(b * d2))
SwapVar = SwapVar + (Amount / tenor) * Df * b * (F * Norm(b * d1) - K * Norm(b * d2))
Debug.Print SwapVar
'While SwapVar <> Contre
'sig = sig + 1
'If SwapVar = Contre Then
'Range("A1").Value = sig
'End If
'Wend
If SwapVar <> Contre Then
'sig = sig + 0.1
Else: Range("A1").Value = sig
End If
'Debug.Print sigma
Next sig
End Sub
Public Function Norm(x As Double) As Double ' Cumulative normal distribution
'Matthew Wilson. E-Mail: Mattw0199@yahoo.com. This function is not copyrighted. Please use as you wish.
Norm = Application.WorksheetFunction.NormSDist(x)
End Function
Merci.
Reeaz