code pour pricer un bsar...
Dernière réponse : dans Programmation
Bonjour à tous,
je dois modéliser le fonctionnement d'un bsar (c'est un bon qui fonctionne comme une option d'achat ou de vente, sauf qu'à partir d'un instant t et si le cours du sous jacent (ici c'est une action) dépasse un seuil alors l'entreprise qui a émis ces bons peut décider de les racheter aux détenteurs qui les ont pas exercés à 0.01 euro, ca s'appelle une clause de forcage)) pour trouver son prix. Donc je suis partie du modèle de cox,ross et rubinstein avec l'arbre binomial et j'ai commencé une ébauche de code puis après quelques recherches sur le net j'ai trouvé une sorte de mémoire mis en ligne qui correspond a ce que j'essayais de faire, il y a un code à la fin mais celui-ci ne fonctionne pas, je n'arrive pas à l'executer, et je ne sais pas ce qu'il faut que je mette comme paramètres dans la feuille d'excel.....
j'attends votre aide avec impatience
merci d'avance
vous trouverez tout sur le site: http://oses.univ-paris1.fr/finances/PDF/Obligconv.pdf
je dois modéliser le fonctionnement d'un bsar (c'est un bon qui fonctionne comme une option d'achat ou de vente, sauf qu'à partir d'un instant t et si le cours du sous jacent (ici c'est une action) dépasse un seuil alors l'entreprise qui a émis ces bons peut décider de les racheter aux détenteurs qui les ont pas exercés à 0.01 euro, ca s'appelle une clause de forcage)) pour trouver son prix. Donc je suis partie du modèle de cox,ross et rubinstein avec l'arbre binomial et j'ai commencé une ébauche de code puis après quelques recherches sur le net j'ai trouvé une sorte de mémoire mis en ligne qui correspond a ce que j'essayais de faire, il y a un code à la fin mais celui-ci ne fonctionne pas, je n'arrive pas à l'executer, et je ne sais pas ce qu'il faut que je mette comme paramètres dans la feuille d'excel.....
j'attends votre aide avec impatience
merci d'avance
vous trouverez tout sur le site: http://oses.univ-paris1.fr/finances/PDF/Obligconv.pdf
Autres pages sur : code pricer bsar
Lassé par la pub ? Créez un compte
je vous envoie une question plus précise,
j'ai réussi à compiler le code mais n'arrive pas à l'executer, je vous l'envoie:
Option Explicit
Public Function calcul_call(n, u, p, e_rdt, So, K, V)
' -fonction d'évaluation de Call par rétropopagation sur arbre binomial classique
Dim i, j As Byte
i = 0
j = 0
Dim TabCall()
ReDim TabCall(n + 1)
' *** calcul des noeuds à l'échéance ***
For j = n To 0 Step -1
If ((u ^ (2 * j - n) * So) - K) > 0 Then
TabCall(j) = (u ^ (2 * j - n) * So) - K
Else: TabCall(j) = 0
End If
Next j
' *** calcul du reste de l'arbre binomial ***
For i = n - 1 To 0 Step -1
For j = 0 To i
TabCall(j) = (p * TabCall(j + 1) + (1 - p) * TabCall(j)) * e_rdt
Next j
Next i
' *** Résultat ***
calcul_call = TabCall(0)
End Function
Public Function calc_call_bar(n, u, p, e_rdt, So, K, V, lim)
' fonction d'évaluation de Call avec barrière
Dim i, j As Byte
i = 0
j = 0
Dim TabCalb()
ReDim TabCalb(n + 1)
' *** détermination de la barrière ***
Dim bar As Byte
If So < V Then
bar = Int(Log(V / So) / Log(u))
Else: bar = 0
End If
' *** calcul des noeuds à l'échéance ***
For j = n To 0 Step -1
If ((u ^ (2 * j - n) * So) - K) > 0 Then
TabCalb(j) = (u ^ (2 * j - n) * So) - K
Else: TabCalb(j) = 0
End If
Next j
' *** calcul de la valeur des noeuds de la barriere ***
Dim limit As Single
Dim Sbar As Single
Dim CalBar As Single
limit = lim
i = bar
j = bar
Sbar = (u ^ (2 * j - i) * So)
CalBar = calcul_call(limit, u, p, e_rdt, Sbar, K, V)
' *** calcul du reste de l'arbre ***
Dim i_der_n, j_der_n As Single
i_der_n = 2 * Int((bar + n - lim) / 2) - bar
j_der_n = (i_der_n + bar) / 2
For i = (n - 1) To 0 Step -1
If i >= bar Then
If i >= i_der_n Then
For j = 0 To (i + j_der_n - i_der_n) Step 1
'Evaluer un seuil implicite de déclenchement du remboursement anticipé des Obligations Convertibles.
TabCalb(j) = (p * TabCalb(j + 1) + (1 - p) * TabCalb(j)) * e_rdt
Next j
Else:
For j = 0 To (i + bar) / 2 Step 1
If j < (i + bar) / 2 Then
TabCalb(j) = (p * TabCalb(j + 1) + (1 - p) * TabCalb(j)) * e_rdt
Else: TabCalb(j) = CalBar
End If
Next j
End If
Else:
For j = 0 To i
TabCalb(j) = (p * TabCalb(j + 1) + (1 - p) * TabCalb(j)) * e_rdt
Next j
End If
Next i
' *** Résultat ***
calc_call_bar = TabCalb(0)
End Function
Sub calcul_tableau()
' -exécution automatique des procédures de calcul sur feuille de calcul excel
' *** définition des variables inscrites sur la feuille de calcul ***
Dim u, p, e_rdt, K, limit As Single
Set u = Cells(3, 1)
Set p = Cells(3, 2)
Set e_rdt = Cells(3, 3)
Set K = Cells(3, 4)
Cells(3, 5) = limit
' *** définition de la zone de la feuille de calcul restant à compléter ***
Dim LDeb, LFin, CDeb, CFin As Single
Set LDeb = Cells(3, 14)
Set LFin = Cells(3, 15)
Set CDeb = Cells(3, 16)
Cells(3, 17) = CFin
'Evaluer un seuil implicite de déclenchement du remboursement anticipé des Obligations Convertibles.
Dim ii, jj, So, V, lim As Single
Dim n As Byte
ii = 0
jj = 0
' *** évaluation de l'arbre binomial (appel de fonction) ***
' *** pour chacune des cellules de la zone spécifiée ***
For jj = CDeb To CFin
For ii = LDeb To LFin
Cells(ii, 3) = So
Cells(6, jj) = V
V = V * K
Cells(ii, 2) = n
If n = "" Then
Exit For
End If
Cells(ii, jj).Select
ActiveCell.Value = calc_call_bar(n, u, p, e_rdt, So, K, V, lim)
Next ii
If n = "" Then
Exit For
End If
ActiveWorkbook.Save
Next jj
End Sub
je n'arrive pas à l'exécuter, c'est une erreur de type 1004 et je n'arrive pas à modifier correctement le code, je pense que je ne mets pas forcément les bons paramètres dans les bonnes cellules excel.
merci d'avance
j'ai réussi à compiler le code mais n'arrive pas à l'executer, je vous l'envoie:
Option Explicit
Public Function calcul_call(n, u, p, e_rdt, So, K, V)
' -fonction d'évaluation de Call par rétropopagation sur arbre binomial classique
Dim i, j As Byte
i = 0
j = 0
Dim TabCall()
ReDim TabCall(n + 1)
' *** calcul des noeuds à l'échéance ***
For j = n To 0 Step -1
If ((u ^ (2 * j - n) * So) - K) > 0 Then
TabCall(j) = (u ^ (2 * j - n) * So) - K
Else: TabCall(j) = 0
End If
Next j
' *** calcul du reste de l'arbre binomial ***
For i = n - 1 To 0 Step -1
For j = 0 To i
TabCall(j) = (p * TabCall(j + 1) + (1 - p) * TabCall(j)) * e_rdt
Next j
Next i
' *** Résultat ***
calcul_call = TabCall(0)
End Function
Public Function calc_call_bar(n, u, p, e_rdt, So, K, V, lim)
' fonction d'évaluation de Call avec barrière
Dim i, j As Byte
i = 0
j = 0
Dim TabCalb()
ReDim TabCalb(n + 1)
' *** détermination de la barrière ***
Dim bar As Byte
If So < V Then
bar = Int(Log(V / So) / Log(u))
Else: bar = 0
End If
' *** calcul des noeuds à l'échéance ***
For j = n To 0 Step -1
If ((u ^ (2 * j - n) * So) - K) > 0 Then
TabCalb(j) = (u ^ (2 * j - n) * So) - K
Else: TabCalb(j) = 0
End If
Next j
' *** calcul de la valeur des noeuds de la barriere ***
Dim limit As Single
Dim Sbar As Single
Dim CalBar As Single
limit = lim
i = bar
j = bar
Sbar = (u ^ (2 * j - i) * So)
CalBar = calcul_call(limit, u, p, e_rdt, Sbar, K, V)
' *** calcul du reste de l'arbre ***
Dim i_der_n, j_der_n As Single
i_der_n = 2 * Int((bar + n - lim) / 2) - bar
j_der_n = (i_der_n + bar) / 2
For i = (n - 1) To 0 Step -1
If i >= bar Then
If i >= i_der_n Then
For j = 0 To (i + j_der_n - i_der_n) Step 1
'Evaluer un seuil implicite de déclenchement du remboursement anticipé des Obligations Convertibles.
TabCalb(j) = (p * TabCalb(j + 1) + (1 - p) * TabCalb(j)) * e_rdt
Next j
Else:
For j = 0 To (i + bar) / 2 Step 1
If j < (i + bar) / 2 Then
TabCalb(j) = (p * TabCalb(j + 1) + (1 - p) * TabCalb(j)) * e_rdt
Else: TabCalb(j) = CalBar
End If
Next j
End If
Else:
For j = 0 To i
TabCalb(j) = (p * TabCalb(j + 1) + (1 - p) * TabCalb(j)) * e_rdt
Next j
End If
Next i
' *** Résultat ***
calc_call_bar = TabCalb(0)
End Function
Sub calcul_tableau()
' -exécution automatique des procédures de calcul sur feuille de calcul excel
' *** définition des variables inscrites sur la feuille de calcul ***
Dim u, p, e_rdt, K, limit As Single
Set u = Cells(3, 1)
Set p = Cells(3, 2)
Set e_rdt = Cells(3, 3)
Set K = Cells(3, 4)
Cells(3, 5) = limit
' *** définition de la zone de la feuille de calcul restant à compléter ***
Dim LDeb, LFin, CDeb, CFin As Single
Set LDeb = Cells(3, 14)
Set LFin = Cells(3, 15)
Set CDeb = Cells(3, 16)
Cells(3, 17) = CFin
'Evaluer un seuil implicite de déclenchement du remboursement anticipé des Obligations Convertibles.
Dim ii, jj, So, V, lim As Single
Dim n As Byte
ii = 0
jj = 0
' *** évaluation de l'arbre binomial (appel de fonction) ***
' *** pour chacune des cellules de la zone spécifiée ***
For jj = CDeb To CFin
For ii = LDeb To LFin
Cells(ii, 3) = So
Cells(6, jj) = V
V = V * K
Cells(ii, 2) = n
If n = "" Then
Exit For
End If
Cells(ii, jj).Select
ActiveCell.Value = calc_call_bar(n, u, p, e_rdt, So, K, V, lim)
Next ii
If n = "" Then
Exit For
End If
ActiveWorkbook.Save
Next jj
End Sub
je n'arrive pas à l'exécuter, c'est une erreur de type 1004 et je n'arrive pas à modifier correctement le code, je pense que je ne mets pas forcément les bons paramètres dans les bonnes cellules excel.
merci d'avance
LIRE LES REGLES ET LES APPLIQUER EST LA MOINDRE DES CHOSES QUAND ON VIENT RECLAMER DE L'AIDE SUR UN FORUM.
Moi, je veux bien prendre du temps à lire ton message, à le comprendre, à corriger tes erreurs et à t'aider à trouver une solution à ton problème, mais j'exige en contre-partie un minimum de respect. Par le biais d'un forum, ce respect n'est tangible que dans la forme des messages. Des règles ont été édictées pour codifier cette forme. Libre à toi de ne pas vouloir les respecter : tu peux effectivement aller voir ailleurs.
Moi, je veux bien prendre du temps à lire ton message, à le comprendre, à corriger tes erreurs et à t'aider à trouver une solution à ton problème, mais j'exige en contre-partie un minimum de respect. Par le biais d'un forum, ce respect n'est tangible que dans la forme des messages. Des règles ont été édictées pour codifier cette forme. Libre à toi de ne pas vouloir les respecter : tu peux effectivement aller voir ailleurs.
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :