AmelCres
Messages postés12Date d'inscriptionsamedi 8 mars 2008StatutMembreDernière intervention28 mai 2008
-
16 mars 2008 à 20:59
bies
Messages postés21Date d'inscriptionmardi 18 novembre 2008StatutMembreDernière intervention30 juillet 2010
-
7 janv. 2011 à 09:54
Bonjour,
Je suis en train de coder le modèle trinomial pour le pricing de put américain ( c 'est un produit financier).
Le problème est que lorsque je compile mon code, il ne veut pas faire la boucle que vous pouvez voir ci dessous en rouge.
Est ce que qqn à une idée de l'erreur que j ai pu faire
dt = maturite / nbe_periode
up = Exp(sigma * Sqr(3 * dt))
down = 1 / up
Pu = 1 / 6 + Sqr(dt / (12 * sigma ^ 2))
Pd = 1 / 6 - Sqr(dt / (12 * sigma ^ 2))
Pm = 1 - Pu - Pd
For j = 0 To nbe_periode 'les calculs commencent pour la période 1
For i = 0 To 2 * j 'le nombre de noeuds de l'arbre est égal à 2*nbe_periode+1 ce qu'on obtient en commençant à zero
'On calcule directement les pay-off pour chaque noeud de l'arbre
arbre(i, j) = Application.WorksheetFunction.Max(0, Strike - prix_ssjacent * up ^ Application.WorksheetFunction.Max(0, (j - i)) * down ^ Application.WorksheetFunction.Max(0, (i - j)))
Next i
Next j
'Maintenant on veut calculer le prix du put américain
'Pour cela on procède par induction arrière
ReDim arbrefinal(2 * nbe_periode + 1, nbe_periode) As Double
For m = nbe_periode - 1 To 0
For p = 0 To 2 * m
arbrefinal(p, m) = Application.WorksheetFunction.Max(arbre(p, m), Pu * arbre(p, m + 1) + Pm * arbre(i + 1, j + 1) + Pd * arbre(p + 1, m + 1))
cs_bouf
Messages postés114Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention20 mars 2008 16 mars 2008 à 21:14
salut,
si tu calcules en décroissant utilise step -1
ce qui fait que ta boucle en rouge ne se lance pas
For m nbe_periode - 1 To 0 step -1 (step decroissant -1 est le pas)
For p = 0 To 2 * m
arbrefinal(p, m) = Application.WorksheetFunction.Max(arbre(p, m), Pu * arbre(p, m + 1) + Pm * arbre(i + 1, j + 1) + Pd * arbre(p + 1, m + 1))
cs_bouf
Messages postés114Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention20 mars 2008 16 mars 2008 à 21:47
Salut,
n ? Je ne vois pas de n dans ton code...
essai ce qu'il t'a dit dimitriusai en mettant For p = 0 To (2 * m) entre parenthese ou alors juste avant :
z= (2 * m)
For p = 0 To z
Mais je pense que lorsqu'il parle d'indice et de selection : en fait ta boucle va trop loin et il n'a plus de données. recontrole la PORTEE de ta boucle P
cs_bouf
Messages postés114Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention20 mars 2008 17 mars 2008 à 08:45
Salut Jrivet,
Effectivement step ne signifie pas décroissant mais permet de donner la valeur d'incrémentation du counteraprès chaque exécution de la boucle.
Soyons précis dans nos propos...
bies
Messages postés21Date d'inscriptionmardi 18 novembre 2008StatutMembreDernière intervention30 juillet 2010 7 janv. 2011 à 09:54
Bonjour,
dsl si je reponds sur ce topic mais comme j'ai un pb similaire...
en fait, je suis en train de programmer le modèle trinomial pour le pricing du put americain mais en c++..
mon code s'execute mais à chaque fois, le down et le middle sont égaux.
Quelqu'un aurait-il une solution à çà? sinon de pistes de forum et autres..