Pseudo code pour évaluer un call européen lookback avec un prix d’exercice fixe, des fixings
discrets et une volatilité stochastique dans le monde de Black&Scholes, selon la simulation de Monte Carlo en utilisant la réduction de variance par des variables de contrôle Delta, Gamma et
Véga et une variable antithétique.
‘Pseudo code pour évaluer un call européen lookback avec un prix d’exercice fixe,
‘des fixings discrets et une volatilité stochastique dans le monde de Black&Scholes selon ‘la simulation de Monte Carlo en
utilisant la réduction de variance par des variables de ‘contrôle Delta, Gamma et Véga et une variable antithétique.
‘ Ces variables de contrôle réduisent l’erreur standard « se » d’un facteur de 12.
‘Pour atteindre cette réduction au moyen d’une simulation Monte Carlo simple,
‘il faudrait 144,000 simulations, soit en gros 3 heures 30 !!!
‘ici 1,000 simulations = 153’’ avec un pentium III - 100 simulations = 15’’
‘initialiser_paramètres {X, T, S, sigma, r, div, alpha, Vbar,xi, N, M}
'print call_value(100, 1, 100, 0.2, 0.06, 0.03, 5,0.05,0.02, 52,
100)
'17,2907686686696
'Calculer les constantes
dt=T/N
sig2=sigma^2
alphadt=alpha*dt
xisdt=xi*sqr(dt)
erddt=exp((r-div)*dt)
egam1=exp(2*(r-div)*dt)
egam2=-2*erddt+1
eveg1=exp(-alpha*dt)
eveg2=Vbar-Vbar*eveg1
sdt = Sqr(dt)
sum_ct = 0
sum_ct2 = 0
beta1=-0.88
beta2=-.42
beta3=-.0003
For j = 1 To M do 'for each simulation
st1 = S
st2 = S
vt=sig2
Maxst1=S
Maxst2=S
cv1 = 0
cv2 = 0
cv3=0
ct =0
For i = 1 To N do 'for each time step
'calculer les variables de contrôle
t1 = (i - 1) * dt
delta1 = lookback_delta(st1, X, r, div, T – t1,
sqr(vt),maxst1)
delta2 = lookback_delta(st2, X, r, div, T - t1,
sqr(vt),maxst2)
gamma1 = lookback_gamma(st1, X, r, div, T - t1, sqr(vt),
maxst1)
gamma2 = lookback_gamma(st2, X, r, div, T - t1, sqr(vt),
maxst2)
vega1 = lookback_vegaV(st1, X, r, div, T - t1, sqr(vt),
maxst1)
vega2 = lookback_vegaV(st2, X, r, div, T - t1, sqr(vt),
maxst2)
'simuler la variance du prix de l'action
epsilon = standard_normal_sample
vtn = vt +alphadt*(Vbar-vt) + xisdt*sqr(vt)*
epsilon
'simuler le prix de l'action
epsilon = standard_normal_sample
stn1 = st1 * Exp((r-div-0.5*vt)*dt +
sqr(vt)*sdt*epsilon)
stn2 = st2 * Exp((r-div-0.5*vt)*dt +
sqr(vt)*sdt*(-epsilon))
'accumuler les variables de contrôle
cv1 = cv1 + delta1 * (stn1 - st1 * erddt) + _
delta2 *
(stn2 - st2 * erddt)
cv2 = cv2 + gamma1 * ((stn1 - st1) ^ 2 - st1 ^ 2 *
(egam1*exp(vt*dt)+egam2))+ _
gamma2*((stn2-st2)^2-st2^2*(egam1*exp(vt*dt)+egam2))
cv3= cv3+vega1*((vtn-vt)-(vt*eveg1+eveg2-vt))+
_
vega2*((vtn-vt)-(vt*eveg1+eveg2-vt))
vt=vtn
st1=stn1
st2=stn2
if (st1>maxst1)
maxst1 =st1
if (st2>maxst2)
maxst2 = st2
next i
ct = 0.5 * (max(0, maxst1 - X) + max(0, maxst2 - X) + beta1 * cv1 +
beta2 * cv2 + _
beta3 * cv3 )
sum_ct = sum_ct + ct
sum_ct2 = sum_ct2 + ct * ct
Next j
call_value = sum_ct / M * Exp(-r * T)
sd = Sqr((sum_ct2 - sum_ct * sum_ct / M) * Exp(-2 * r * T) / (M -
1))
se = sd / Sqr(M)
‘Pseudo code pour évaluer un call lookback avec un prix d’exercice fixe,
‘un prix maximum basé sur un fixing continu et une volatilité constante
‘ce code vous permet de calculer delta, gamma et vega à chaque fixing
‘initialiser_paramètres {X, T, S, sigma, r, div, Maxst}
'exemple à tester print call_value(100, 1, 100, 0.20, 0.06, 0.03,
105)
'20,1562223161423
If S <= 0 Then
GoTo Endfunction ‘exemple d’utilisation GoTo p.208/209 du
livre
if X>=Maxst then
E=X, G=0
Else E=Maxst, G=exp(-r*(T-t1))*(Maxst-X)
call_fixed_strike_lookback= G +
S*exp(-div*(T-t1))*N(y+sigma*sqr(T-t1))- _
X*exp(-r*(T-t1))*N(y) – S/b*(exp(-r*(T-t1))*(E/S)^B * N(y+(1-b)*sigma*sqr(T-t1)) _
-exp(-div*(T-t1))*N(y+sigma*sqr(T-t1)))
b= 2*(r-div)/(sigma*sigma)
y=(log(S/E)+((r-div)-0.5*sigma*sigma)*(T-t1))/(sigma*(T-t1))
‘N( ) = probabilité cumulative de la Normale(0,1)
‘formules pour calculer les deltas, gammas, vegas à chaque
fixing
‘lookback_delta = C(S+dS)-C(S-dS)/(2*dS)
‘lookback_gamma=(C(S+dS)-2*C(S)+C(S-dS))/(dS*dS)
‘lookback_vega=C(sigma+dsigma)-C(sigma-dsigma)/(2*dsigma)
‘utiliser le timer de Visual Basic
Dim Debut, Fin, TempsTotal
Debut =
Timer ' Définit l'heure de début.
‘ entre Debut et Fin vous taper votre code ici
Fin = Timer
TempsTotal = Fin - Debut ' Calcule la durée totale de la simulation.
MsgBox
"Longueur de la simulation " & TempsTotal & " seconde(s)"