Se connecter avec
S'enregistrer | Connectez-vous

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

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

merci de votre réponse,très percutente, ca fait plaisir des gens qui ne sont pas imbus d'eux meme et qui aident les autres sans trop de chichi!!!
j'ai été sur un autre site et j'ai obtenu des réponses par des gens très sympa.
a jamais j'espère
Expert Programmation

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.
Lassé par la pub ? Créez un compte
  • Contenus similaires :