blooxy
Messages postés1Date d'inscriptiondimanche 6 mars 2011StatutMembreDernière intervention 6 mars 2011
-
6 mars 2011 à 01:06
NHenry
Messages postés15115Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 8 mai 2024
-
6 mars 2011 à 13:01
Bonjour!
Je débute en VBA et je souhaiterais utiliser une fonction trouvé sur le web. Le problème est quelle me revoit la valeur 0, ce qui est inexact. J'ai enregistré le code que voici dans un module classique.
Function EuroBin(S, K, T, rf, sigma, n, PutCall As String)
dt T / n: u Exp(sigma * (dt ^ 0.5))
d 1 / u: p (Exp(rf * dt) - d) / (u - d)
EuroBin = 0
For i = 0 To n
Select Case PutCall
Case "Call":
EuroBin = EuroBin + Application.Combin(n, i) * p ^ i * (1 - p) ^ (n - i) * Application.Max(S * u ^ i * d ^ (n - i) - K, 0)
Case "Put":
EuroBin = EuroBin + Application.Combin(n, i) * p ^ i * (1 - p) ^ (n - i) * Application.Max(K - S * u ^ i * d ^ (n - i), 0)
End Select
Next i
EuroBin = Exp(-rf * T) * EuroBin
End Function
Après avoir essayé quelques bricoles je n'arrive à rien!
Merci pour votre aide!
PS : Il s'agit d'une fonction renvoyant le prix d'une option européenne par le modèle binomial.
AlKatou
Messages postés95Date d'inscriptionvendredi 7 février 2003StatutMembreDernière intervention28 novembre 2017 6 mars 2011 à 10:17
salut,
respectes-tu bien la casse de ta variable PutCall ? car "Call" est différent de "call", idem pour "Put". car pour moi, tu "passe" dans le "Case else" de ton select. et ta fonction te renvoie 0 dû fait de son initialisation par l'instruction EuroBin = 0.
teste également que n et u soit différent de zéro avant d'effectuer tes divisions sinon c'est le message d'erreur assuré.
NHenry
Messages postés15115Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 8 mai 2024159 6 mars 2011 à 13:01
Bonjour,
A voir le code, je te conseil ces quelques mesures :
- Mettre "Option Explicit" en haut de chaque module de code (et ensuite déclarer toutes les variables).
- Ensuite, PutCall, on préfèrerait utiliser un booléen ou une énumération.
- On type toujours ses variables, car cela facilitera la compréhension du code
- On évite les nom de variable qui ne veulent rien dire, à quoi sert "d", "T" ?
Ensuite, si tu conserve le type String pour le PutCall, utilises lCase pour passer le texte en minuscule, cela te permettra d'éviter les problèmes de casse