Une espèce de dichotomie

  • Initiateur de la discussion Reeaz
  • Date de début
R

Reeaz

Guest
Bonjour,

j'essaie de créer une sorte de dichotomie, mais ca foire un peu!!
Voici mon code:

Sub Dicho()

K = 0.042
F = 0.03869454
t = 256
Contre = 2.4553
tenor = 1
b = 1
Amount = 27000000
Df = 0.98754242542

Dim SwapVar As Double
Dim sig As Variant

For sig = 0.0001 To 1 Step 0.001

d1 = (Log(F / K) + sig ^ 2 / 2 * t) / (sig * Sqr(t))
d2 = d1 - sig * Sqr(t)

'SwapVar = SwapVar + (Amount / tenor) * Df * b * (F0 * Norm(b * d1) - Rx * Norm(b * d2))
SwapVar = SwapVar + (Amount / tenor) * Df * b * (F0 * Norm(b * d1) - K * Norm(b * d2))

If SwapVar = Contre Then Range("A1").Value = sig

Next sig

End Sub

'Loi Normale que j'utilise ds la proc
Public Function Norm(x As Double) As Double

Norm = Application.WorksheetFunction.NormSDist(x)

End Function

En fait je fait varier sig ds ma formule swapvar qui me renvoie donc un certain nbre de valeur.
Je voudrai la comparer à une valeur que j'apelle Contre. Après si swapvar=Contre, je souhaiterai que le prog me retourne le sig utilisé.

Si qqun a une idée ce serait sympa.
Merci.
 
Z

zon

Guest
Bonjour à tous,



Reeaz, je ne sais pas trop ce que tu veux faire mais est-ce normal que F0 ne soit pas initialisée car là elle sera toujours =0 sinon

Un petit exemple concret serait le binevenue car moi la loi normale et autre dichotomie y a longtemps que j'ai arreté de l'utiliser


A+++
 
R

Reeaz

Guest
Merci de m'avoir répondu, voila mon prog en fait:

Sub Dicho()

K = 0.042
F = 0.03869454
t = 256
Contre = 0.024553
tenor = 1
b = 1
Amount = 27000000
Df = 0.98754242542

Dim SwapVar As Double
Dim sig As Double

For sig = 1 To 100 Step 0.1

d1 = (Log(F / K) + sig ^ 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))

'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

Next sig

End Sub


Public Function Norm(x As Double) As Double
Norm = Application.WorksheetFunction.NormSDist(x)
End Function

D'abord la loi normale, on s'en fiche , elle est juste utilisée pour la calcul.
Mon pb est que je souhaite faire une boucle non pas sur des entiers mais sur des réels (c pkoi j'ai essayé de mettre un step).
Je voudrai que pour chaque valeur de sig , ma proc me calcule swapvar et me compare swapvar avec Contre.Si il y égalité, je voudrai récupérer le sig avec lequel on obtient l'égalité.
Le F0 était en fait F.
Ya t'il un pb ds ma boucle?

Merci.
Reeaz
 
Z

zon

Guest
Re,



ta boucle est bonne puisque tu passes de 1 à 1,1 à 1,2, sauf quand tu incrémentes swapavarpar de 0.1 quand différent de contre alors la tu passes de 1,2 à 1,4

Je te conseille d'utiliser le déboggeur VBA en utilisant

debug.print sig ' par exemple pour afficher la valeur de sig dans la fenêtre d'execution (Ctrl G pour l'afficher)


pour récupérer le sig dans les cellules mais différentes, tu initialises i à 1
I=1


Range("A" & I)=sig
i=i+1


A+++

PS je ne comprends toujours pas ce que tu veux faire .....
 
R

Reeaz

Guest
Sub Dicho()

K = 0.042
F = 0.03869454
t = 256
Contre = 2.45028584502467E-02
tenor = 1
b = 1
Amount = 27000000
Df = 0.98754242542

Dim SwapVar As Double
Dim sig As Double

For sig = 1 To 100 Step 0.1

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))

'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

Next sig

End Sub

Je me permet de te solliciter encore, en fait le sig=sig+0.1 est inutile.
Mon pb est le suivant: je veux incrémenter sur sig pr obtenir un certain nombre de valeurs de swapvar. En même tmps je voudrais comparer cette valeur à contre.Si c'est la même, alors je récupère le sig pr lequel il y eu égalité.
Mais j'ai l'impression que la structure de mon prog n'est pas bonne???
Je sais pas si il compare à chaque itération le swapvar et le contre (enfait g l'impression que non!!).
Merci

Reeaz
 
Z

zon

Guest
Re,



regarde mon post de 17:28 avec debug.print

ex:


Sub ....

.....

SwapVar = SwapVar + (Amount / tenor) * Df * b * (F * Norm(b * d1) - K * Norm(b * d2))

debug.print swapvar

....

end sub


Affichage Fenetre execution....



A+++
 

Discussions similaires

Statistiques des forums

Discussions
314 656
Messages
2 111 613
Membres
111 225
dernier inscrit
arnaud3110