Академический Документы
Профессиональный Документы
Культура Документы
Claire Peltier
1- PRESENTATION
2- ACCES VISUAL BASIC EDITOR
3- Les variables
4- Boucles et conditions.
A-Les conditions
B- Les boucles
C- Les boucles conditionnelles
5- Les tableaux (vecteur, matrice)
A- Dclaration :
B -Initialisation :
C- Courbe des taux,
Cours 2
1
CLAIRE PELTIER 2007
1- PRESENTATION
3- Les variables
4- Boucles et conditions.
A-Les conditions
B- Les boucles
C- Les boucles conditionnelles
2
CLAIRE PELTIER 2007
1- PRESENTATION
Visual Basic pour Applications est le langage de programmation des applications de Microsoft
Office. VBA permet dautomatiser les tches, de crer des applications compltes, de scuriser
vos saisies et vos documents, de crer de nouveaux menus et de nouvelles fonctions pour
booster efficacement votre logiciel.
VBA utilise le mme langage que Microsoft Visual Basic. La diffrence entre VB et VBA est que
VB est un ensemble complet qui permet de dvelopper des applications indpendantes et
librement distribuables alors quune application ralise en VBA est compltement lie au
logiciel sous lequel elle a t cre (une application VBA cre sous Excel ne pourra pas se
lancer sur un poste si Excel nest pas install).
Avant quExcel nutilise ce langage de programmation, le logiciel utilisait son propre langage de
programmation et une application tait appele macro . Ce terme est rest, mais une macro
Excel ralise en VBA nest rien dautre quune procdure telle quelles sont ralises sous VB.
Un programmeur sous VBA na aucun problme pour passer VB et vice-versa.
Le langage VBA est accessible tous. Cependant, une bonne connaissance dExcel est
ncessaire avant de se lancer dans la cration dapplication. En effet, il est important de bien
matriser les principaux objets que manipule VBA, comme les objets Workbook (classeur),
Worskheet (Feuille de calcul), Range(plage de cellule), etc
3
CLAIRE PELTIER 2007
Une fois dans Visual Basic Editor, cliquez sur la 2me icne
4
CLAIRE PELTIER 2007
Une procdure est une suite d'instructions effectuant des actions. Elle commence par Sub
+ NomDeLaProcdure et se termine par End Sub. Le nom des procdures ne doit pas contenir
d'espaces. Utilisez le caractre de soulignement pour sparer les mots. Je vous conseille de les crire
comme des noms propres.
Pour dclarer une procdure, taper Sub et son nom puis taper Entre. VBE ajoute automatiquement les
parenthses et la ligne End Sub.
Exemple de Procdure nomme Essai :
Sub Essai()
MsgBox "Bonjour"
End Sub
Il faut ensuite compiler : Debogage + Compiler VBA Project ensuite excuter Execution+ Executer
la Macro (ou F5)
5
CLAIRE PELTIER 2007
Une fonction est une procdure qui renvoie une valeur.
Exemple de fonction nomme Calcul :
Il faut ensuite compiler : Debogage + Compiler VBA Project et retourner sur la feuille Excel et
appeler la fonction : Insertion + fx fonction +Personnalisees+Nomde la fonction cre : une bote
de dialogue apparat : vous de remplir les donnes
3- Les variables
Lors d'une procdure, les variables servent stocker toutes sortes de donnes (des valeurs numriques,
du texte, des valeurs logiques, des dates ...). Elles peuvent galement faire rfrence un objet.
Suivant les donnes que la variable recevra, on lui affectera un type diffrent. Les diffrents types de
variables de VB sont :
Entier Long Long 4 octets Entier de -2 147 483 648 2 147 483
Un octet est une unit de mesure en informatique mesurant la quantit de donnes. Un octet est lui-mme compos de 8 bits,
soit 8 chiffres ou lettres...
1000 octets sont 1 Kilo octet Ko, Un mgaoctet reprsente un million d'octets. Un gigaoctet reprsente un milliard d'octets. Un
hexaoctet reprsente un milliard de milliards d'octets.
Une image GIF prend environ 50 Ko.
6
CLAIRE PELTIER 2007
Attention au nombre de lignes dans une feuille d'Excel, elles sont de 65536 depuis la version 97, donc si vous devez lire
chaque ligne d'une feuille l'aide d'une variable, celle-ci ne peut tre de type Integer, mais doit tre de type Long.
Pour rendre obligatoire la dclaration de variables, placez l'instruction "Option Explicit" sur la premire
ligne du module.
La dclaration explicite d'une variable se fait par le mot Dim (abrviation de Dimension). Le nombre
maximum de caractres du nom de la variable est de 255. Il ne doit pas commencer par un chiffre et ne
doit pas contenir d'espaces.
Vous pouvez galement dclarer vos variables sur une mme ligne :
Val1 = 5
Val2 = 2
SommeVal = Val1 + Val2
End Function
La porte d'une variable est diffrente suivant l'endroit et la faon dont elle est dclare.
Une variable dclare l'intrieur d'une procdure est dite "Locale". Elle peut-tre dclare par les mots
Dim ou Static. Ds que la procdure est termine, la variable n'est plus charge en mmoire sauf si elle
est dclare par le mot Static. Une variable Locale est gnralement place juste aprs la dclaration de
la procdure.
Une variable peut garder toujours la mme valeur lors de l'excution d'un programme. Dans ce cas, elle
est dclare par les mots Const ou Global Const.
Option Explicit
Global Const Pi = 3.14159265358979
7
CLAIRE PELTIER 2007
4- Boucles et conditions.
A-Les conditions :
Les conditions sont trs courantes dans les applications VB. Elles peuvent dterminer la valeur que
prennent les variables, arrter une procdure, appeler une procdure, quitter une boucle, atteindre une
tiquette.
Les exemples suivants vont dterminer la valeur que prendra la variable Mention par rapport des notes.
Le tableau des notes est :
Notes : Mention :
0 Nul
15 Moyen
6 10 Passable
11 15 Bien
16 19 Trs bien
20 Excellent
If Condition Then
faire une opration
faire une seconde opration
End If
8
CLAIRE PELTIER 2007
Dans le cas de conditions multiples, comme dans notre exemple, on prfrera le bloc d'instruction
Exemple :
9
CLAIRE PELTIER 2007
B- Les boucles :
Les boucles le plus souvent utiliss sont les boucles For ... Next. Elles permettent de rpter un nombre
de fois dfini un bloc d'instructions. Elles utilisent une variable qui est incrmente ou dcrmente
chaque rptition
For i = 1 To n
Resultat = Resultat + i
Next i
Sum_entier = Resultat
End Function
La variable peut tre incrmente d'une valeur diffrente de 1 par le mot Step.
For i = 0 To n Step 2
Resultat = Resultat + i
Next i
Sum_entier2 = Resultat
End Function
La variable peut galement tre dcrmente. Dans ce cas, le mot Step est obligatoire.
For i = n To 1 Step -1
Resultat = Resultat + i
Next i
Sum_entier3 = Resultat
End Function
10
CLAIRE PELTIER 2007
A l'intrieur d'un bloc d'instruction For Next, l'instruction Exit For, peut quitter la boucle avant que la
variable n'est atteint sa dernire valeur
End Function
Les boucles While condition Wend excutent un bloc d'instruction tout pendant que la condition est vraie.
While i <= n
Resultat = Resultat + i^2
'Ne pas oublier d'incrmenter le compteur sinon
'la boucle ne pourra pas s'arrter.
i=i+1
Wend
Sum_entier_carre = Resultat
End Function
11
CLAIRE PELTIER 2007
5- Les tableaux
Contrairement aux variables classiques qui contiennent une seule valeur, un tableau est une variable qui
peut contenir un ensemble de valeurs de mme type.
A- Dclaration :
B- Initialisation :
Si Option Base 0
For i = 0 To n-1
Vecteur(i)= 0.04
Next i
Si Option Base 1
For i = 1 To n
Vecteur(i)= 0.04
Next i
Exemple initialiser une matrice de double i+j , i numro de ligne, j numro de colonne
Si Option Base 0
For i = 0 To n-1
For j = 0 To n-1
matrice(i , j)= i+j+2
Next j
Next i
Si Option Base 1
For i = To n
For j = 1 To n
matrice(i , j)= i +j
Next j
Next i
12
CLAIRE PELTIER 2007
Le but de ce paragraphe est daller chercher sur Excel des donnes qui seront utilises par la suite dans
le programme sous forme de matrice :
5-nov-08 3,00%
31-dc-07 3,03%
31-mars-08 3,06%
30-juin-08 3,08%
30-sept-08 3,09%
31-dc-08 3,11%
31-mars-09 3,13%
30-juin-09 3,15%
30-sept-09 3,17%
31-dc-09 3,18%
31-mars-10 3,19%
30-juin-10 3,20%
30-sept-10 3,20%
31-dc-10 3,21%
31-mars-11 3,22%
30-juin-11 3,24%
30-sept-11 3,25%
30-dc-11 3,26%
30-mars-12 3,28%
29-juin-12 3,29%
28-sept-12 3,31%
31-dc-12 3,32%
28-mars-13 3,33%
28-juin-13 3,35%
30-sept-13 3,36%
31-dc-13 3,38%
30-juin-14 3,40%
31-dc-14 3,43%
30-juin-15 3,45%
31-dc-15 3,48%
30-dc-16 3,53%
29-dc-17 3,58%
31-dc-18 3,62%
31-dc-19 3,66%
31-dc-20 3,70%
Attention : Les TAUX doivent comporter des VIRGULES et non des points !
13
CLAIRE PELTIER 2007
Cette procdure initialise la matrice aTab aux valeurs de la feuilles Excel quel que soit lendroit o
se situe les valeurs de la page prcdente et sa taille
lNbRow = aRange.Rows.Count
lNbColumn = aRange.Columns.Count
For J = 1 To lNbRow
lTemp(J) = aRange.Cells(J, 1)
aTab(J, 1) = (lTemp(J)-aValuedate)/365.25
aTab(J, 2) = aRange.Cells(J, 2)
Next
End Sub
Pour ensuite utiliser cette courbe de taux dans un autre programme il suffit de :
Dclarer le nom de la matrice do est sauvegarder la courbe pour les calculs dans les premires
dclarations :
Dim lZcTab() As Double
Remarque : on choisit un nom diffrent pour ne pas modifier les valeurs initiales
La courbe et ses dates sont maintenant dans la matrice lZcTab et on peut faire tous les calculs
demands par le programme.
14
CLAIRE PELTIER 2007
lNbRow = aZCrange.Rows.Count
For I = 1 To (lNbRow - 1)
If (lZcTab(I, 1) < lMAT) Then
If (lMAT <= lZcTab(I + 1, 1)) Then
ltaux = interpolation(lZcTab(I, 1), lZcTab(I + 1, 1), lZcTab(I, 2), lZcTab(I + 1, 2), lMAT)
End If
End If
Next I
End Function
avec
Function interpolation(aX1 As Double, aX2 As Double, aY1 As Double, aY2 As Double, aX As Double)
15
CLAIRE PELTIER 2007
Notionnel Date de tombe de coupon Coupon Discount Factor Prix actualis Prix Obligation
10 000,00 5 novembre 2007 5,00%
10 000,00 5 novembre 2008 6,00%
10 000,00 5 novembre 2009 3,00%
10 000,00 5 novembre 2010 3,50%
10 000,00 5 novembre 2011 5,00%
10 000,00 5 novembre 2012 5,00%
10 000,00 5 novembre 2013 5,00%
10 000,00 5 novembre 2014 5,00%
10 000,00 5 novembre 2015 5,00%
10 000,00 5 novembre 2016 5,00%
10 000,00 5 novembre 2017 5,00%
16
CLAIRE PELTIER 2007
Cours 2
17
CLAIRE PELTIER 2007
Pour pouvoir appeler les fonctions de Excel en VBA il faut paramtrer VBA :
The Excel function is part of the Analysis Tool Pak add-in. To use it in VBA, you need to first load the "Analysis Tool Pak -
VBA" add-in in Excel. Then, open your VBA project, go to the Tools menu, choose Reference, and put a check next to
ATBVBAEN.xls item. Once you do this, you can access the function directly.
Function Abs(Number)
Membre de VBA.Math
Dans VBA, the DateDiff function retourne la diffrence entre des dates, suivant un intervalle spcifique. It
18
CLAIRE PELTIER 2007
La syntaxe de DateDiff function est:
DateDiff( interval, date1, date2, [firstdayofweek], [firstweekofyear] )
interval est lintervalle de temps utilis pour calculer cette diffrence.
Interval Explanation
yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second
date1 and date2 sont les deux dates entre lesquelles on calcule la diffrence.
firstdayofweek est optionnel. Cest une constante qui spcifie le premier jour de la semaine. Si ce
paramtre est omis, Excel suppose que le premier jour de la semaine est le dimanche.
firstweekofyear is optional. est optionnel. Cest une constante qui spcifie le premier jour de la semaine. .
er
Si ce paramtre est omis, Excel suppose que le premier jour de lanne est le 1 janvier .
19
CLAIRE PELTIER 2007
Function Price(settlement, maturity, rate, yld, redemption, frequency, [basis])
Membre de ATPVBAEN.XLS.Fonctions et procdures VBA
Renvoie le prix d'un titre rapportant des intrts priodiques, pour une valeur nominale de 100 F
Au cours dun procdure ou dune function VBA, pour appeler une fonction prdfinie il faut gnralement
faire appel au chemin suivant :
Application.WorksheetFunction.
Exemple :
20
CLAIRE PELTIER 2007
2-Black-Scholes Gnralis
La formule gnralises de Black et Scholes peux tre utilise pour valuer une option europenne sur
action classique, une option europenne sur action payant un dividende proportionnel, une option sur
futur ainsi que des options de change.
Call BSG = Se ( b r )T N (d 1 ) Xe rT N (d 2 )
S 1
ln + b + 2 T
d1 =
X 2
T
S 1
ln + b 2 T
d2 =
X 2
= d1 T
T
21
CLAIRE PELTIER 2007
'// The generalized Black and Scholes formula
d1 = (Log(S / X) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
d2 = d1 - v * Sqr(T)
End Function
22
CLAIRE PELTIER 2007
3- OBLIGATION TF
Ncessite les fonctions dj programme au cours prcdant ainsi que la fonction CalculBase que je
vous donne.
Function interpolation(aX1 As Double, aX2 As Double, aY1 As Double, aY2 As Double, aX As Double)
interpolation = (aY1 - aY2) / (aX1 - aX2) * (aX - aX2) + aY2
End Function
lNbRow = aRange.Rows.Count
lNbColumn = aRange.Columns.Count
For J = 1 To lNbRow
lTemp(J) = aRange.Cells(J, 1)
aTab(J, 1) = year_frac(aValuedate, lTemp(J))
aTab(J, 2) = aRange.Cells(J, 2)
Next j
End Sub
lNbRow = aZCrange.Rows.Count
For I = 1 To (lNbRow - 1)
If (lZcTab(I, 1) < lMAT) Then
If (lMAT <= lZcTab(I + 1, 1)) Then
ltaux = interpolation(lZcTab(I, 1), lZcTab(I + 1, 1), lZcTab(I, 2), lZcTab(I + 1, 2), lMAT)
End If
End If
Next I
discount_factor = 1 / (1 + ltaux) ^ lMAT
End Function
23
CLAIRE PELTIER 2007
Variables ncssaires
Date de valeur
Date de dbut ( si lobligation commence dans le futur, si non = Date de valeur)
Date de Fin (chance)
Taux du coupon
Nombre de mois entre deux coupons
La Courbe des taux (dates et taux annuels actuariels)
Le nominal
La base de calcul entre deux coupons (exemple "Exact/Exact")
Remboursement (1 si remboursement du nominal en Fin)
Algorithme
24
CLAIRE PELTIER 2007
Calcul dune obligation TV coder dans un module Obligation
Fonction ncessaire :
Variables ncssaires
Date de valeur
Date de dbut ( si lobligation commence dans le futur, si non = Date de valeur)
Date de Fin (chance)
Nombre de mois entre deux coupons
La Courbe des taux (dates et taux annuels actuariels)
Le nominal
La base de calcul entre deux coupons (exemple "Exact/Exact")
Remboursement (1 si remboursement du nominal en Fin)
Le Spread par rapport au taux variable
Algorithme
25
CLAIRE PELTIER 2007
COURS FINANCE ET INFORMATIQUE
Cours 2 Correction
1- Correction : Obligation TF et TV
Option Explicit
PREMIER COUPON
If (adatedebut < aValuedate) Then
dateavcoupon = edate(datecoupon(0), -NBRMOISENTRECOUPON)
delta = Calculbase(dateavcoupon, datecoupon(0), abasis)
prix = prix + delta * tauxcoupon * nominal * discount_factor(aValuedate, datecoupon(0), aZCrange)
End If
prix_obligation_pp = prix
End Function
27
CLAIRE PELTIER 2007
CALCUL DU NOMBRE DE COUPONS
N = Int(Calculbase (adatedebut, aEndDate, "30/360") * 360 / (NBRMOISENTRECOUPON * 30))
CALCUL DU FIXING
if (adatedebut < aValuedate) Then
dateavcoupon = Edate(datecoupon(0), -NBRMOISENTRECOUPON)
delta = Calculbase(dateavcoupon, datecoupon(0), abasis)
prix = prix + delta * (tauxfixing + spread) * nominal * discount_factor(aValuedate, datecoupon(0),
aZCrange)
End If
DANS LE CAS OU IL Y A REMBOURSEMENT IN FINE DU CAPITAL AJOUTER A CETTE SOMME LA
VALEUR ACTUALISE DE CE FLUX
If (remboursement = 1) Then
prix = prix + nominal * discount_factor(aValuedate, datecoupon(N), aZCrange)
End If
prix_obligation_tv = prix
End Function
________________________________________________________________________________
End Function
End Function
= e (b r )T N (d 1 )
dc
Pour un call call =
dS
= e (b r )T N ( d 1 )
dc
Pour un put call =
dS
Dim d1 As Double
d1 = (Log(S / X) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
End Function
d 2 c d 2 p n(d1 )e (b r )T
Pour un call et un put = 2 = 2 =
d S d S S T
Dim d1 As Double
d1 = (Log(S / X) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
GGamma = Exp((b - r) * T) * ND(d1) / (S * v * Sqr(T))
End Function
29
CLAIRE PELTIER 2007
'// Theta for the generalized Black and Scholes formula
Se (b r )T n(d1 )
(b r )Se (b r )T N (d1 ) rXe rT N (d 2 )
dc
Pour un call call = =
dT 2 T
Se (b r )T n(d1 )
+ (b r )Se (b r )T N ( d1 ) + rXe rT N ( d 2 )
dp
Pour un put put = =
dT 2 T
d1 = (Log(S / X) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
d2 = d1 - v * Sqr(T)
End Function
= Se (b r )T n(d 1 ) T
dc dp
Pour un put comme pour un call Vega = =
d d
Public Function GVega(S As Double, X As Double, T As Double, r As Double, b As Double, v As Double)
As Double
Dim d1 As Double
d1 = (Log(S / X) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
GVega = S * Exp((b - r) * T) * ND(d1) * Sqr(T)
End Function
30
CLAIRE PELTIER 2007
'// Rho for the generalized Black and Scholes formula
= TXe rT N (d 2 )
dc
Pour un call si b 0 call =
dr
si b = 0 call = dc = T Call
dr
= TXe rT N ( d 2 )
dc
Pour un call si b 0 put =
dr
si b = 0 put = dc = T put
dr
d1 = (Log(S / X) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
d2 = d1 - v * Sqr(T)
If CallPutFlag = "c" Then
If b <> 0 Then
GRho = T * X * Exp(-r * T) * CND(d2)
Else
GRho = -T * GBlackScholes(CallPutFlag, S, X, T, r, b, v)
End If
ElseIf CallPutFlag = "p" Then
If b <> 0 Then
GRho = -T * X * Exp(-r * T) * CND(-d2)
Else
GRho = -T * GBlackScholes(CallPutFlag, S, X, T, r, b, v)
End If
End If
End Function
31
CLAIRE PELTIER 2007
COURS FINANCE ET INFORMATIQUE
Cours 3 Correction
32
CLAIRE PELTIER 2007
Soit ( X n )nN une suite de variables alatoires indpendantes identiquement distribues de mme
esprance m
X
E( X n )
i
Si converge alors i =1
PS
m = E(X i )
n
Soit ( X n )nN une suite de variables alatoires indpendantes identiquement distribues de mme
esprance m et de mme variance finie
X
i =1
i nm
alors Normale(0,1)
n
loi
X i
cest dire si on nomme ecart n = m i =1
alors
n
lintervalle de confiance 95% de cet cart vaut m 1.96 , m + 1.96
n n
33
CLAIRE PELTIER 2007
Description de la mthode :
Pour utiliser les mthode de Monte Carlo on doit dabord mettre sous forme desprance la quantit que
lon cherche calculer. A lissue de cette tape, il reste calculer une quantit de la forme E ( X ) o X
est une variable alatoire. Pour pouvoir calculer E ( X ) il convient de savoir simuler une variable
alatoire selon la loi de X.
Mathmatiquement, cela signifie que lon dispose de la ralisation dune suite de variable alatoire
indpendante ( X i ) suivant la loi de X.
Informatiquement, on ramne la simulation de cette loi celle dune variable alatoire indpendante
[ ]
suivant une loi uniforme sue lintervalle 0,1
X i
Il reste approcher E ( X ) par E ( X ) = i =1
n
2
n
____
1 n
X
Xi
Ensuite on approche la variance par X =
n 1 i =1 i
i =1
n
n n
i X Xi
____ ____
X
Lintervalle de confiance vaut pour le rang n : i =1 1.96 , i =1 + 1.96
X
n n n n
Pour simuler une variable alatoire de fonction de rpartition F , on inverse cette fonction. En
effet, la fonction de rpartition donne une valeur entre 0 et 1 et est croissante continue donc
inversible. Donc si on cherche des nombres alatoire x suivant une loi F, il faut trouver une valeur
u entre 0 et 1, au hasard, tel que : u = F (x ) 0,1 [ ]
Ensuite, on effectue linversion x=F 1
(x )
Pour la loi normale, par exemple, il faut utiliser la fonction Application.NormInv(Rnd(), 0, 1))
Rappels :
( )
t2
dW t
loi
N 0, 2 (t 2 t1 )
t1
T
Pour une action de Cost and Carry b, la diffusion vaut : S T = S 0 EXP bT T + dWt
1 2
2
0
34
CLAIRE PELTIER 2007
Exercice : Simulation MC :
Dim St As Double
Dim Sum As Double, Drift As Double, vSqrdt As Double, UNIT As Double
Dim i As Integer, z As Integer
Drift = (b - v ^ 2 / 2) * T
vSqrdt = v * Sqr(T)
For i = 1 To nSimulations
UNIT = Application.NormInv(Rnd(), 0, 1)
St = S * Exp(Drift + vSqrdt * UNIT)
Sum = Sum + Application.WorksheetFunction.Max(z * (St - X), 0)
Next i
End Function
35
CLAIRE PELTIER 2007
dt = (T - T1) / nSteps
Drift1 = (b1 - v1 ^ 2 / 2) * dt
v1Sqrdt = v1 * Sqr(dt)
For i = 1 To nSimulations
Average1 = 0
St1 = S1 * Exp((b1 - v1 ^ 2 / 2) * T1+ v1 * Sqr(T1) * Application.NormInv(Rnd(), 0, 1))
For j = 1 To nSteps
Epsilon1 = Application.NormInv(Rnd(), 0, 1)
St1 = St1 * Exp(Drift1 + v1Sqrdt * Epsilon1)
Average1 = Average1 + St1
Next
Average1 = Average1 / nSteps
End Function
36
CLAIRE PELTIER 2007
Cours 4
37
CLAIRE PELTIER 2007
u S avec la probabilit p
S
d S avec la probabilit 1-p
S S0 uS S dS S
E dt = e bdt 1 =
p+ (1 p ) = (u 1) p + (d 1)(1 p )
S0 S S
e bdt d
On en dduit p =
u d
2 2
S
) = E bdt 2 dt + W dt = 2 dt
1
E (ln dt
S0 2
donc
2 2
S S
dt = Ln u p + Ln d (1 p ) = (ln u )2 p (ln d ) 2 (1 p)
2
S S
38
CLAIRE PELTIER 2007
2 2
Su S
2 dt = Ln p + Ln d (1 p ) = (ln u )2 p (ln d ) 2 (1 p)
S S
1
en gnrale on choisit u =
d
1
u= = e dt
d
Pour le call :
Le call est une fonction du sous jacent, donc sa probabilit de hausse et de baisse est identique
(distribution dun fonction dune variable alatoire)
Donc
C = erdt
( pCu + (1 p)Cd ) avec p =
e bdt d
u d
39
CLAIRE PELTIER 2007
n
u S
n-1
u S
n-1
u d S
n
u dS
n-2 2
u d S
.
n-i i
u d S
n-i-1 i
u dS
n-i-1 i+1
u d S
2
u s
uS
S udS ..
dS
2
d S ..
2 n-2
ud S
n-1
ud S
n-1
ud S
n-1
d S
n
dS
40
CLAIRE PELTIER 2007
n
Cu =Max(unS-K,0)
n-1 n-1
Cu d=Max(u dS-K,0)
n-2 2 n-2 2
Cu d =Max(u d S-K,0)
(
CU = erdt pCu2 + (1 p)Cud )
C = erdt( pCu + (1 p)Cd )
(
Cd = erdt pCud + (1 p)Cd 2 )
2 n-2 2 n-2
Cu d =Max(u d S-K,0)
n-1 n-1
Cud =Max(ud S-K,0)
n n
Cd =Max(d S-K,0)
41
CLAIRE PELTIER 2007
n
Cu =Max(unS-K,0)
n-1 n-1
Cu d=Max(u dS-K,0)
n-2 2 n-2 2
Cu d =Max(u d S-K,0)
2 n-2 2 n-2
Cu d =Max(u d S-K,0)
n-1 n-1
Cud =Max(ud S-K,0)
n n
Cd =Max(d S-K,0)
42
CLAIRE PELTIER 2007
ReDim OptionValue(n + 1)
dt = T / n
u = Exp(v * Sqr(dt))
d=1/u
p = (Exp(b*dt) - d) / (u - d)
Df = Exp(-r * dt)
For i = 0 To n
OptionValue(i) = Max(0, z * (S * u ^ i * d ^ (n - i) - X))
Next i
43
CLAIRE PELTIER 2007
Cours 5
44
CLAIRE PELTIER 2007
1- Swap, Swaption
Swap
S 0 : taux forward du swap sous jacent . S 0 est solution de lquation :
P(t 0 , T0 ) P (t 0 , TN )
S0 = N
= S (0, T )
aP(t 0 , Ti )
i =1
P(t 0 , T0 ) P(t 0 , T N ) Xt
S (t 0 , T ) = N
= 0
a P(t 0 , Ti )
Yt 0
i =1
= S (t )dWt = [ X Y ]dWt
dSt
St
De mme :
N
P i I
Y = i =1
N
P
i =1
I
N
donc le taux swap suit un processus de diffusion lognormal.
Caplet
Dans le cas dun cap simple sur swap,
h(S (T0 , T )) = [S (T0 , T ) K ] et 1A = {S (T0 , T ) > K }
T0
Le taux swap swap suivant une loi lognormale sous la probabilit Q, la valeur
45
CLAIRE PELTIER 2007
T0
C (t ) = E exp r ( s )ds h[S (T0 , T )] 1 AT / t vaut :
Q
0
t
Caplet (t ) = P(t , T0 )[S (t , T )N (d 1 ) KN (d 2 )]
avec
S (t , T ) 2 S (t , T ) 2
ln + T0 ln T0
d1 =
K 2
, d2 = K 2
T0 T0
Cap
Somme de Caplets de diffrentes chances
PROGRAMME
Function caplet(cf As String, datevalo As Date, datedebut As Date, datefin As Date, strike As
Double, volatilite As Double, aZCrange As Range, abasis As String) As Double
End Function
Function capfloor(cf As String, datevalo As Date, datedebut As Date, datefin As Date, strike As
Double, volatilite As Double, aZCrange As Range, nbrmoiscoupon As Integer, abasis As String)
As Double
For I = 1 To N - 1
capfloor = capfloor + caplet(cf, datevalo, datecoupon(I), datecoupon(I + 1), strike,
volatilite, aZCrange, abasis)
Next I
End Function
For I = 0 To N
datecoupon(I) = edate(datefin, -(N - I) * nbrmoiscouponfixe)
Next I
For I = 0 To N - 1
duree = Calculbase(datecoupon(I), datecoupon(I + 1), abasis)
somme = somme + duree * discount_factor(datevalo, datecoupon(I + 1), aZCrange)
Next I
End Function
48